diff --git a/assets/css/style.css b/assets/css/style.css
new file mode 100644
index 00000000..e76592f5
--- /dev/null
+++ b/assets/css/style.css
@@ -0,0 +1,329 @@
+body {
+ font-family: Arial, sans-serif;
+ margin: 0;
+ padding: 0;
+ line-height: 1.6;
+ background-color: #121212;
+ color: #f0f0f0;
+ scroll-behavior: smooth;
+}
+
+.hero {
+ text-align: center;
+ background: linear-gradient(135deg, #1e1e2e, #313450);
+ color: white;
+ padding: 50px 20px;
+}
+
+.hero h1 {
+ font-size: 2.8em;
+ margin-bottom: 10px;
+ text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
+}
+
+.hero p {
+ margin-bottom: 20px;
+ font-size: 1.3em;
+}
+
+.hero button {
+ background-color: #282828;
+ color: #ffffff;
+ border: none;
+ padding: 12px 25px;
+ font-size: 1.1em;
+ border-radius: 25px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ box-shadow: 0 4px 10px rgba(14, 14, 14, 0.5);
+}
+
+.hero button:hover {
+ background-color: #ff6b81;
+ color: black;
+ transform: scale(1.15);
+ box-shadow: 0 6px 15px rgba(255, 71, 87, 0.7);
+}
+
+.buttons-section {
+ text-align: center;
+ margin: 40px 20px;
+}
+
+.buttons-section h2 {
+ font-size: 2em;
+ margin-bottom: 20px;
+ text-transform: uppercase;
+ color: #ff4757;
+}
+
+.buttons-section button {
+ color: white;
+}
+
+.button {
+ background-color: #313450;
+ color: black;
+ border: none;
+ padding: 15px 30px;
+ font-size: 1.1em;
+ margin: 10px;
+ border-radius: 50px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ box-shadow: none;
+}
+
+.button:hover {
+ background-color: #ff4757;
+ transform: scale(1.1);
+ box-shadow: 0 6px 15px rgba(255, 71, 87, 0.6);
+ color: black;
+}
+
+.button:focus {
+ outline: none;
+}
+
+.screenshot-section {
+ text-align: center;
+ margin: 40px 20px;
+}
+
+.screenshot {
+ max-width: 80%;
+ height: auto;
+ border-radius: 15px;
+ box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.5);
+ transition: transform 0.5s ease, box-shadow 0.5s ease;
+}
+
+.screenshot:hover {
+ transform: scale(1.05);
+ box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.8);
+}
+
+.features-section {
+ background-color: #1e1e2e;
+ padding: 40px 20px;
+}
+
+.features-section h2 {
+ text-align: center;
+ margin-bottom: 20px;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 2em;
+}
+
+.features {
+ display: flex;
+ justify-content: center;
+ gap: 20px;
+ flex-wrap: wrap;
+}
+
+.card {
+ background: linear-gradient(135deg, #313450, #1e1e2e);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
+ padding: 20px;
+ width: 300px;
+ border-radius: 15px;
+ text-align: center;
+ transition: transform 0.4s ease, box-shadow 0.4s ease;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.card:hover {
+ transform: translateY(-10px) scale(1.05);
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+}
+
+.card h3 {
+ color: #ff4757;
+ margin-bottom: 10px;
+}
+
+.card p {
+ color: #ccc;
+}
+
+.feature-detail {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 40px 20px;
+ gap: 30px;
+ opacity: 0;
+ transform: translateY(50px);
+ transition: opacity 0.6s ease, transform 0.6s ease;
+}
+
+.feature-detail.active {
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.feature-detail:nth-child(even) {
+ flex-direction: row-reverse;
+}
+
+.feature-detail img {
+ max-width: 50%;
+ border-radius: 15px;
+ box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.5);
+ transition: transform 0.8s ease, box-shadow 0.8s ease;
+ margin: 0 40px;
+}
+
+.feature-detail.active img:hover {
+ transform: scale(1.11);
+ box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.8);
+}
+
+.feature-detail img.active {
+ transform: scale(1.1);
+ box-shadow: 0px 15px 25px rgba(0, 0, 0, 0.7);
+}
+
+.feature-detail .text {
+ max-width: 40%;
+ padding: 0 20px;
+}
+
+.feature-detail .text h3 {
+ font-size: 1.8em;
+ margin-bottom: 10px;
+ color: #ff4757;
+}
+
+.feature-detail .text p {
+ color: #ccc;
+ font-size: 1.1em;
+ line-height: 1.6;
+}
+
+.footer {
+ text-align: center;
+ padding: 20px;
+ background-color: #121212;
+ color: #bbb;
+ border-top: 1px solid #2a2a2a;
+}
+
+@media (max-width: 768px) {
+ .features {
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .feature-detail {
+ flex-direction: column;
+ text-align: center;
+ }
+
+ .feature-detail img,
+ .feature-detail .text {
+ max-width: 100%;
+ }
+}
+
+header {
+ position: sticky;
+ top: 0;
+ max-height: 64px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 20px;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
+ backdrop-filter: blur(10px);
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 999;
+}
+
+header img {
+ width: 64px;
+ height: 64px;
+}
+
+.div-warning {
+ text-decoration: none;
+ color: white;
+ font-size: 1.2em;
+ text-align: center;
+ display: flex;
+ margin-left: auto;
+ text-shadow: 0px 0px 5px rgba(255, 0, 0, 1);
+}
+
+.div-dropdown {
+ position: relative;
+ display: flex;
+ align-items: center;
+ margin-left: auto;
+}
+
+.header-button {
+ background-color: #313450;
+ color: white;
+ border: none;
+ text-decoration: none;
+ display: block;
+ border-radius: 8px;
+ font-size: 1.1em;
+ padding: 8px 12px;
+ margin: 0;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
+}
+
+.header-button:hover {
+ transform: scale(1.05);
+}
+
+.dropdown-content {
+ display: none;
+ position: absolute;
+ top: 110%;
+ right: 0;
+ background-color: #313450;
+ z-index: 1;
+ border-radius: 12px;
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.5);
+ padding: 10px 0;
+ max-height: 300px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.dropdown-content::-webkit-scrollbar {
+ width: 8px;
+}
+
+.dropdown-content::-webkit-scrollbar-thumb {
+ background-color: #ff4757;
+ border-radius: 4px;
+}
+
+.dropdown-content::-webkit-scrollbar-thumb:hover {
+ background-color: #ff6b81;
+}
+
+.dropdown-content a {
+ color: white;
+ white-space: nowrap;
+ text-decoration: none;
+ display: block;
+ padding: 8px 12px;
+ border-radius: 8px;
+ font-size: 1.1em;
+ transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
+}
+
+.dropdown-content a:hover {
+ background-color: #ff4757;
+ color: black;
+ transform: scale(1.05);
+}
\ No newline at end of file
diff --git a/assets/images/feature-default.png b/assets/images/feature-default.png
new file mode 100644
index 00000000..e1dc44d2
Binary files /dev/null and b/assets/images/feature-default.png differ
diff --git a/assets/images/feature1-en.png b/assets/images/feature1-en.png
new file mode 100644
index 00000000..f091cc56
Binary files /dev/null and b/assets/images/feature1-en.png differ
diff --git a/assets/images/feature2-en.png b/assets/images/feature2-en.png
new file mode 100644
index 00000000..2c7a9b35
Binary files /dev/null and b/assets/images/feature2-en.png differ
diff --git a/assets/images/feature3-en.png b/assets/images/feature3-en.png
new file mode 100644
index 00000000..e26b2148
Binary files /dev/null and b/assets/images/feature3-en.png differ
diff --git a/assets/images/screenshot-default.png b/assets/images/screenshot-default.png
new file mode 100644
index 00000000..604acfb7
Binary files /dev/null and b/assets/images/screenshot-default.png differ
diff --git a/assets/images/screenshot-en.png b/assets/images/screenshot-en.png
new file mode 100644
index 00000000..e66939d9
Binary files /dev/null and b/assets/images/screenshot-en.png differ
diff --git a/assets/js/script.js b/assets/js/script.js
new file mode 100644
index 00000000..e74fc32d
--- /dev/null
+++ b/assets/js/script.js
@@ -0,0 +1,91 @@
+const featureDetails = document.querySelectorAll('.feature-detail');
+
+const observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('active');
+ const img = entry.target.querySelector('img');
+ img.classList.add('active');
+ }
+ else {
+ entry.target.classList.remove('active');
+ const img = entry.target.querySelector('img');
+ img.classList.remove('active');
+ }
+ });
+}, {
+ threshold: 0.1
+});
+
+featureDetails.forEach(detail => {
+ observer.observe(detail);
+});
+
+function updateContent(langData) {
+ document.querySelectorAll('[data-i18n]').forEach(element => {
+ const key = element.getAttribute('data-i18n');
+
+ if (key in langData) {
+ if (element.tagName === "IMG") {
+ element.src = langData[key];
+ } else {
+ element.innerHTML = langData[key];
+ }
+ } else {
+ console.warn(`Missing translation for key: '${key}'`);
+ }
+ });
+}
+
+function setLanguagePreference(lang) {
+ localStorage.setItem('language', lang);
+ location.reload();
+}
+
+async function fetchLanguageData(lang) {
+ try {
+ const response = await fetch(`assets/lang/${lang}.json`);
+ if (!response.ok) {
+ throw new Error(`Language file for '${lang}' not found`);
+ }
+ return response.json();
+ } catch (error) {
+ console.warn(error.message + `. Falling back to English.`);
+ return fetchLanguageData('en');
+ }
+}
+
+async function detectAndLoadLanguage() {
+ const savedLanguage = localStorage.getItem('language');
+ const browserLanguage = navigator.language || navigator.languages[0];
+ const languageToLoad = savedLanguage || browserLanguage.split('-')[0] || 'en';
+
+ console.log(`Detected language: ${browserLanguage}. Loading: ${languageToLoad}`);
+
+ const langData = await fetchLanguageData(languageToLoad);
+ updateContent(langData);
+}
+
+async function changeLanguage(lang) {
+ setLanguagePreference(lang);
+}
+
+window.addEventListener('DOMContentLoaded', detectAndLoadLanguage);
+
+function toggleDropdown() {
+ const dropdownMenu = document.getElementById('dropdownMenu');
+ dropdownMenu.style.display = dropdownMenu.style.display === 'block' ? 'none' : 'block';
+}
+
+window.onclick = function (event) {
+ const dropdownMenu = document.getElementById('dropdownMenu');
+ const dropdownButton = document.querySelector('.header-button');
+ if (!dropdownMenu.contains(event.target) && event.target !== dropdownButton) {
+ dropdownMenu.style.display = 'none';
+ }
+};
+
+function downloadFennix() {
+ // TODO: Here will download the iso file
+ window.location.href = "https://github.com/EnderIce2/Fennix";
+}
diff --git a/assets/lang/README.md b/assets/lang/README.md
new file mode 100644
index 00000000..0725ae73
--- /dev/null
+++ b/assets/lang/README.md
@@ -0,0 +1 @@
+# Language Directory
diff --git a/assets/lang/bg.json b/assets/lang/bg.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/de.json b/assets/lang/de.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/en.json b/assets/lang/en.json
new file mode 100644
index 00000000..37893787
--- /dev/null
+++ b/assets/lang/en.json
@@ -0,0 +1,38 @@
+{
+ "home": "Fennix - Future of Computing",
+ "warning_message": "⚠️ The operating system is in early development ⚠️
This website is a placeholder and does not fully represent the project's current status.",
+
+ "welcome_message": "Welcome to Fennix",
+ "welcome_subtitle": "Unlock seamless and powerful computing.",
+ "download_button": "Download",
+ "screenshot_title": "Explore Fennix",
+ "screenshot_image": "assets/images/screenshot-en.png",
+
+ "get_involved": "Get Involved",
+ "get_involved_btn1": "Contribute",
+ "get_involved_btn2": "Documentation",
+ "get_involved_btn3": "API Reference",
+ "get_involved_btn4": "Developing with Fennix",
+
+ "features_title": "Core Features",
+ "card1_title": "High Performance",
+ "card1_text": "Experience fast speeds for modern computing tasks.",
+ "card2_title": "Security & Privacy",
+ "card2_text": "Your data is secure with advanced encryption and privacy protocols.",
+ "card3_title": "Customizable",
+ "card3_text": "Customize Fennix to enhance your workflow and productivity.",
+
+ "feature1_title": "User Interface",
+ "feature1_text": "Work with a user-friendly, modern interface designed for efficiency.",
+ "feature1_image": "assets/images/feature1-en.png",
+
+ "feature2_title": "Multitasking",
+ "feature2_text": "Run multiple applications and switch between tasks easily.",
+ "feature2_image": "assets/images/feature2-en.png",
+
+ "feature3_title": "Security Features",
+ "feature3_text": "Use built-in security measures to protect your data.",
+ "feature3_image": "assets/images/feature3-en.png",
+
+ "footer_text": "© 2025 EnderIce2"
+}
diff --git a/assets/lang/es.json b/assets/lang/es.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/fr.json b/assets/lang/fr.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/hu.json b/assets/lang/hu.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/it.json b/assets/lang/it.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/ja.json b/assets/lang/ja.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/ko.json b/assets/lang/ko.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/pl.json b/assets/lang/pl.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/pt.json b/assets/lang/pt.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/ro.json b/assets/lang/ro.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/ru.json b/assets/lang/ru.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/tr.json b/assets/lang/tr.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/zh-CN.json b/assets/lang/zh-CN.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/lang/zh-TW.json b/assets/lang/zh-TW.json
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 00000000..82ea1599
Binary files /dev/null and b/assets/logo.png differ
diff --git a/docs/Info.plist b/docs/Info.plist
new file mode 100644
index 00000000..5fc51f10
--- /dev/null
+++ b/docs/Info.plist
@@ -0,0 +1,23 @@
+
+
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Data Structures | |
union | PS2_STATUSES |
union | PS2_CONFIGURATION |
union | PS2_OUTPUT_PORT |
union | PS2_KBD_TYPEMATIC |
struct | PS2_MOUSE_PACKET |
struct | PS2_STATUSES.__unnamed1__ |
struct | PS2_CONFIGURATION.__unnamed3__ |
struct | PS2_OUTPUT_PORT.__unnamed5__ |
struct | PS2_KBD_TYPEMATIC.__unnamed7__ |
union | PS2_MOUSE_PACKET.Base |
union | PS2_MOUSE_PACKET.ZMovement |
+Enumerations | |
enum | PS2_KBD_LEDS { PS2_KBD_LED_SCROLL_LOCK = 1 +, PS2_KBD_LED_NUM_LOCK = 2 +, PS2_KBD_LED_CAPS_LOCK = 4 + } |
enum | PS2_KBD_SCAN_CODE_SET { + PS2_KBD_SCAN_CODE_GET_CURRENT = 0 +, PS2_KBD_SCAN_CODE_SET_1 = 1 +, PS2_KBD_SCAN_CODE_SET_2 = 2 +, PS2_KBD_SCAN_CODE_SET_3 = 3 +, + PS2_KBD_SC_SET_1 = 0x43 +, PS2_KBD_SC_SET_2 = 0x41 +, PS2_KBD_SC_SET_3 = 0x3F + + } |
enum | PS2_MOUSE_RESOLUTION { PS2_MOUSE_RES_1 = 0 +, PS2_MOUSE_RES_2 = 1 +, PS2_MOUSE_RES_4 = 2 +, PS2_MOUSE_RES_8 = 3 + } |
+Functions | |
void | PIC_EOI (uint8_t IRQ) |
void | IRQ_MASK (uint8_t IRQ) |
void | IRQ_UNMASK (uint8_t IRQ) |
void | PS2Wait (const bool Output) |
void | PS2WriteCommand (uint8_t Command) |
void | PS2WriteData (uint8_t Data) |
uint8_t | PS2ReadData () |
uint8_t | PS2ReadStatus () |
uint8_t | PS2ReadAfterACK () |
void | PS2ClearOutputBuffer () |
int | PS2ACKTimeout () |
+Variables | |
uint8_t | LeftButton |
uint8_t | RightButton |
uint8_t | MiddleButton |
uint8_t | Always1 |
uint8_t | XSign |
uint8_t | YSign |
uint8_t | XOverflow |
uint8_t | YOverflow |
uint8_t | Z |
uint8_t | Button4 |
uint8_t | Button5 |
uint8_t | Always0 |
uint8_t | Always0_2 |
union PS2_STATUSES | +
Data Fields | ||
---|---|---|
+struct PS2_STATUSES | ++__unnamed__ | ++ |
+uint8_t | ++Raw | ++ |
union PS2_CONFIGURATION | +
Data Fields | ||
---|---|---|
+struct PS2_CONFIGURATION | ++__unnamed__ | ++ |
+uint8_t | ++Raw | ++ |
union PS2_OUTPUT_PORT | +
Data Fields | ||
---|---|---|
+struct PS2_OUTPUT_PORT | ++__unnamed__ | ++ |
+uint8_t | ++Raw | ++ |
union PS2_KBD_TYPEMATIC | +
Data Fields | ||
---|---|---|
+struct PS2_KBD_TYPEMATIC | ++__unnamed__ | ++ |
+uint8_t | ++Raw | ++ |
struct PS2_MOUSE_PACKET | +
Data Fields | ||
---|---|---|
+union PS2_MOUSE_PACKET | ++Base | ++ |
+uint8_t | ++XMovement | ++ |
+uint8_t | ++YMovement | ++ |
+union PS2_MOUSE_PACKET | ++ZMovement | ++ |
struct PS2_STATUSES.__unnamed1__ | +
struct PS2_CONFIGURATION.__unnamed3__ | +
struct PS2_OUTPUT_PORT.__unnamed5__ | +
struct PS2_KBD_TYPEMATIC.__unnamed7__ | +
union PS2_MOUSE_PACKET.Base | +
union PS2_MOUSE_PACKET.ZMovement | +
#define PS2_CMD PS2_STATUS | +
#define PS2_CMD_COPY_INPUT_0_3_TO_4_7_STATUS 0xC1 | +
#define PS2_CMD_COPY_INPUT_4_7_TO_4_7_STATUS 0xC2 | +
#define PS2_CMD_PULSE_OUTPUT_LINE | +( | ++ | n | ) | +(0xF0 + n) | +
#define PS2_CMD_READ_CONFIG_N | +( | ++ | n | ) | +(PS2_CMD_READ_CONFIG + n) | +
#define PS2_CMD_WRITE_CONFIG_N | +( | ++ | n | ) | +(PS2_CMD_WRITE_CONFIG + n) | +
#define PS2_CMD_WRITE_NEXT_BYTE_TO_OUTPUT_PORT 0xD1 | +
#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_1_OUTPUT 0xD2 | +
#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_2_INPUT 0xD4 | +
#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_2_OUTPUT 0xD3 | +
#define PS2_KBD_CMD_ALL_MAKE_RELEASE 0xF8 | +
#define PS2_KBD_CMD_ALL_TYPEMATIC_MAKE_RELEASE 0xFA | +
#define PS2_KBD_CMD_DISABLE_SCANNING 0xF5 | +
#define PS2_KBD_CMD_ENABLE_SCANNING 0xF4 | +
#define PS2_KBD_CMD_SPECIFIC_MAKE_RELEASE 0xFC | +
#define PS2_KBD_CMD_SPECIFIC_TYPEMATIC 0xFB | +
#define PS2_KBD_RESP_TEST_FAILED_2 0xFD | +
#define PS2_MOUSE_CMD_DISABLE_DATA_REPORTING 0xF5 | +
#define PS2_MOUSE_CMD_ENABLE_DATA_REPORTING 0xF4 | +
#define PS2_MOUSE_CMD_RESET_WRAP_MODE 0xEC | +
#define PS2_MOUSE_CMD_SET_DEFAULTS 0xF6 | +
#define PS2_MOUSE_CMD_SET_REMOTE_MODE 0xF0 | +
#define PS2_MOUSE_CMD_SET_RESOLUTION 0xE8 | +
#define PS2_MOUSE_CMD_SET_SAMPLE_RATE 0xF3 | +
#define PS2_MOUSE_CMD_SET_SCALING_1_1 0xE6 | +
#define PS2_MOUSE_CMD_SET_SCALING_2_1 0xE7 | +
#define PS2_MOUSE_CMD_SET_STREAM_MODE 0xEA | +
#define PS2_MOUSE_CMD_SET_WRAP_MODE 0xEE | +
#define PS2_MOUSE_RESP_TEST_FAILED 0xFC | +
#define PS2_MOUSE_RESP_TEST_PASSED 0xAA | +
#define WaitInput PS2Wait(DriverID, false) | +
#define WaitOutput PS2Wait(DriverID, true) | +
enum PS2_KBD_LEDS | +
enum PS2_KBD_SCAN_CODE_SET | +
enum PS2_MOUSE_RESOLUTION | +
void IRQ_MASK | +( | +uint8_t | +IRQ | ) | ++ |
void IRQ_UNMASK | +( | +uint8_t | +IRQ | ) | ++ |
void PIC_EOI | +( | +uint8_t | +IRQ | ) | ++ |
int PS2ACKTimeout | +( | +) | ++ |
void PS2ClearOutputBuffer | +( | +) | ++ |
uint8_t PS2ReadAfterACK | +( | +) | ++ |
uint8_t PS2ReadData | +( | +) | ++ |
uint8_t PS2ReadStatus | +( | +) | ++ |
void PS2Wait | +( | +const bool | +Output | ) | ++ |
void PS2WriteCommand | +( | +uint8_t | +Command | ) | ++ |
void PS2WriteData | +( | +uint8_t | +Data | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+Data Fields | |
int(* | AllocateInode )(struct FileSystemInfo *Info, struct Inode **Result) |
int(* | DeleteInode )(struct FileSystemInfo *Info, struct Inode *Node) |
int(* | Synchronize )(struct FileSystemInfo *Info, struct Inode *Node) |
int(* | Destroy )(struct FileSystemInfo *Info) |
int(* SuperBlockOperations::AllocateInode) (struct FileSystemInfo *Info, struct Inode **Result) | +
int(* SuperBlockOperations::DeleteInode) (struct FileSystemInfo *Info, struct Inode *Node) | +
int(* SuperBlockOperations::Destroy) (struct FileSystemInfo *Info) | +
int(* SuperBlockOperations::Synchronize) (struct FileSystemInfo *Info, struct Inode *Node) | +
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Macros | |
#define | scarg __UINTPTR_TYPE__ |
#define | __SYS_NULL ((void *)0) |
NULL pointer. More... | |
#define | call_api_version(version) syscall1(SYS_API_VERSION, (scarg)version) |
Set syscall version. More... | |
#define | call_read(fd, buf, count) syscall3(SYS_READ, (scarg)fd, (scarg)buf, (scarg)count) |
Read from a file descriptor. More... | |
#define | call_pread(fd, buf, count, offset) syscall4(SYS_PREAD, (scarg)fd, (scarg)buf, (scarg)count, (scarg)offset) |
Read from a file descriptor. More... | |
#define | call_write(fd, buf, count) syscall3(SYS_WRITE, (scarg)fd, (scarg)buf, (scarg)count) |
Write to a file descriptor. More... | |
#define | call_pwrite(fd, buf, count, offset) syscall4(SYS_PWRITE, (scarg)fd, (scarg)buf, (scarg)count, (scarg)offset) |
Write to a file descriptor. More... | |
#define | call_open(pathname, flags, mode) syscall3(SYS_OPEN, (scarg)pathname, (scarg)flags, (scarg)mode) |
Open a file. More... | |
#define | call_close(fd) syscall1(SYS_CLOSE, fd) |
Close a file descriptor. More... | |
#define | call_ioctl(fd, request, argp) syscall3(SYS_IOCTL, (scarg)fd, (scarg)request, (scarg)argp) |
Control a device. More... | |
#define | call_stat(pathname, statbuf) syscall2(SYS_STAT, (scarg)pathname, (scarg)statbuf) |
Retrieve file status. More... | |
#define | call_fstat(fd, statbuf) syscall2(SYS_FSTAT, (scarg)fd, (scarg)statbuf) |
Retrieve file status for an open file descriptor. More... | |
#define | call_lstat(pathname, statbuf) syscall2(SYS_LSTAT, (scarg)pathname, (scarg)statbuf) |
Retrieve file status with symbolic link resolution. More... | |
#define | call_access(pathname, mode) syscall2(SYS_ACCESS, (scarg)pathname, (scarg)mode) |
Check a file's accessibility. More... | |
#define | call_truncate(pathname, length) syscall2(SYS_TRUNCATE, (scarg)pathname, (scarg)length) |
Change the size of a file. More... | |
#define | call_ftruncate(fd, length) syscall2(SYS_FTRUNCATE, (scarg)fd, (scarg)length) |
Change the size of a file referred by a file descriptor. More... | |
#define | call_tell(fd) syscall1(SYS_TELL, (scarg)fd) |
Get the current file offset. More... | |
#define | call_seek(fd, offset, whence) syscall3(SYS_SEEK, (scarg)fd, (scarg)offset, (scarg)whence) |
Set the file offset. More... | |
#define | call_exit(status) syscall1(SYS_EXIT, (scarg)status) |
Terminate the calling process. More... | |
#define | call_fork() syscall0(SYS_FORK) |
Create a child process. More... | |
#define | call_execve(pathname, argv, envp) syscall3(SYS_EXECVE, (scarg)pathname, (scarg)argv, (scarg)envp) |
Execute a program. More... | |
#define | call_getpid() syscall0(SYS_GETPID) |
Get the process ID of the calling process. More... | |
#define | call_getppid() syscall0(SYS_GETPPID) |
Get the parent process ID. More... | |
#define | call_waitpid(pid, wstatus, options) syscall3(SYS_WAITPID, (scarg)pid, (scarg)wstatus, (scarg)options) |
Wait for a child process to change state. More... | |
#define | call_kill(pid, sig) syscall2(SYS_KILL, (scarg)pid, (scarg)sig) |
Send a signal to a process. More... | |
#define | call_prctl(option, arg1, arg2, arg3, arg4) syscall5(SYS_PRCTL, (scarg)option, (scarg)arg1, (scarg)arg2, (scarg)arg3, (scarg)arg4) |
Process/Thread Control. More... | |
#define | call_brk(end_data) syscall1(SYS_BRK, (scarg)end_data) |
Set the program break. More... | |
#define | call_mmap(addr, length, prot, flags, fd, offset) syscall6(SYS_MMAP, (scarg)addr, (scarg)length, (scarg)prot, (scarg)flags, (scarg)fd, (scarg)offset) |
Map files or devices into memory. More... | |
#define | call_munmap(addr, length) syscall2(SYS_MUNMAP, (scarg)addr, (scarg)length) |
Unmap a mapped memory region. More... | |
#define | call_mprotect(addr, length, prot) syscall3(SYS_MPROTECT, (scarg)addr, (scarg)length, (scarg)prot) |
Change memory protection. More... | |
#define | call_madvise(addr, length, advice) syscall3(SYS_MADVISE, (scarg)addr, (scarg)length, (scarg)advice) |
Provide advice about memory usage. More... | |
#define | call_pipe(pipefd) syscall1(SYS_PIPE, (scarg)pipefd) |
Create a pipe. More... | |
#define | call_dup(oldfd) syscall1(SYS_DUP, (scarg)oldfd) |
Duplicate a file descriptor. More... | |
#define | call_dup2(oldfd, newfd) syscall2(SYS_DUP2, (scarg)oldfd, (scarg)newfd) |
Duplicate a file descriptor to a specific value. More... | |
#define | call_socket(domain, type, protocol) syscall3(SYS_SOCKET, (scarg)domain, (scarg)type, (scarg)protocol) |
Create an endpoint for communication. More... | |
#define | call_bind(sockfd, addr, addrlen) syscall3(SYS_BIND, (scarg)sockfd, (scarg)addr, (scarg)addrlen) |
Bind a socket to a local address. More... | |
#define | call_connect(sockfd, addr, addrlen) syscall3(SYS_CONNECT, (scarg)sockfd, (scarg)addr, (scarg)addrlen) |
Connect to a remote address. More... | |
#define | call_listen(sockfd, backlog) syscall2(SYS_LISTEN, (scarg)sockfd, (scarg)backlog) |
Listen for incoming connections on a socket. More... | |
#define | call_accept(sockfd, addr, addrlen) syscall3(SYS_ACCEPT, (scarg)sockfd, (scarg)addr, (scarg)addrlen) |
Accept an incoming connection on a socket. More... | |
#define | call_send(sockfd, buf, len, flags) syscall4(SYS_SEND, (scarg)sockfd, (scarg)buf, (scarg)len, (scarg)flags) |
Send data on a socket. More... | |
#define | call_recv(sockfd, buf, len, flags) syscall4(SYS_RECV, (scarg)sockfd, (scarg)buf, (scarg)len, (scarg)flags) |
Receive data on a socket. More... | |
#define | call_shutdown(sockfd, how) syscall2(SYS_SHUTDOWN, (scarg)sockfd, (scarg)how) |
Shut down part of a full-duplex connection. More... | |
#define | call_time(t) syscall1(SYS_TIME, t) |
Get the current time. More... | |
#define | call_clock_gettime(clockid, tp) syscall2(SYS_CLOCK_GETTIME, (scarg)clockid, (scarg)tp) |
Get the current time of a specific clock. More... | |
#define | call_clock_settime(clockid, tp) syscall2(SYS_CLOCK_SETTIME, (scarg)clockid, (scarg)tp) |
Set the current time of a specific clock. More... | |
#define | call_nanosleep(req, rem) syscall2(SYS_NANOSLEEP, (scarg)req, (scarg)rem) |
Sleep for a specified time. More... | |
#define | call_getcwd(buf, size) syscall2(SYS_GETCWD, (scarg)buf, (scarg)size) |
Get the current working directory. More... | |
#define | call_chdir(path) syscall1(SYS_CHDIR, (scarg)path) |
Change the current working directory. More... | |
#define | call_mkdir(path, mode) syscall2(SYS_MKDIR, (scarg)path, (scarg)mode) |
Create a new directory. More... | |
#define | call_rmdir(path) syscall1(SYS_RMDIR, (scarg)path) |
Remove an empty directory. More... | |
#define | call_unlink(pathname) syscall1(SYS_UNLINK, (scarg)pathname) |
Remove a file. More... | |
#define | call_rename(oldpath, newpath) syscall2(SYS_RENAME, (scarg)oldpath, (scarg)newpath) |
Rename a file or directory. More... | |
+Typedefs | |
typedef int | __SYS_clockid_t |
typedef unsigned int | __SYS_socklen_t |
+Functions | |
static scarg | syscall0 (scarg syscall) |
Syscall wrapper with 0 arguments. More... | |
static scarg | syscall1 (scarg syscall, scarg arg1) |
Syscall wrapper with 1 argument. More... | |
static scarg | syscall2 (scarg syscall, scarg arg1, scarg arg2) |
Syscall wrapper with 2 arguments. More... | |
static scarg | syscall3 (scarg syscall, scarg arg1, scarg arg2, scarg arg3) |
Syscall wrapper with 3 arguments. More... | |
static scarg | syscall4 (scarg syscall, scarg arg1, scarg arg2, scarg arg3, scarg arg4) |
Syscall wrapper with 4 arguments. More... | |
static scarg | syscall5 (scarg syscall, scarg arg1, scarg arg2, scarg arg3, scarg arg4, scarg arg5) |
Syscall wrapper with 5 arguments. More... | |
static scarg | syscall6 (scarg syscall, scarg arg1, scarg arg2, scarg arg3, scarg arg4, scarg arg5, scarg arg6) |
Syscall wrapper with 6 arguments. More... | |
_Static_assert ((int) __SYS_SIG_IGN==(int) ___SYS_SIG_IGN, "SIG_IGN values do not match") | |
#define __SYS_NULL ((void *)0) | +
NULL pointer.
+This is a pointer to address 0, which is reserved and cannot be dereferenced.
+Definition at line 187 of file syscalls.h.
+ +#define call_accept | +( | ++ | sockfd, | +
+ | + | + | addr, | +
+ | + | + | addrlen | +
+ | ) | +syscall3(SYS_ACCEPT, (scarg)sockfd, (scarg)addr, (scarg)addrlen) | +
Accept an incoming connection on a socket.
+Accepts an incoming connection on a listening socket, creating a new socket for communication.
+sockfd | Socket file descriptor |
addr | Client address |
addrlen | Length of the address |
Definition at line 1527 of file syscalls.h.
+ +#define call_access | +( | ++ | pathname, | +
+ | + | + | mode | +
+ | ) | +syscall2(SYS_ACCESS, (scarg)pathname, (scarg)mode) | +
Check a file's accessibility.
+Checks if the calling process can access the file specified by pathname
according to the specified mode
.
pathname | Path to the file |
mode | Accessibility check mode + Supported values:
|
Definition at line 1446 of file syscalls.h.
+ +#define call_api_version | +( | ++ | version | ) | +syscall1(SYS_API_VERSION, (scarg)version) | +
Set syscall version.
+This syscall is used to set the version of the list. To prevent applications from breaking on major changes, this should be called at the very beginning of the program.
+version | The version of the syscall list of which the program was compiled with |
Definition at line 1409 of file syscalls.h.
+ +#define call_bind | +( | ++ | sockfd, | +
+ | + | + | addr, | +
+ | + | + | addrlen | +
+ | ) | +syscall3(SYS_BIND, (scarg)sockfd, (scarg)addr, (scarg)addrlen) | +
Bind a socket to a local address.
+Binds a socket to a local address so it can listen for incoming connections.
+sockfd | Socket file descriptor |
addr | Address to bind to |
addrlen | Length of the address |
Definition at line 1518 of file syscalls.h.
+ +Set the program break.
+Increases or decreases the program’s data space, ending at end_data
.
end_data | New program break location |
Definition at line 1489 of file syscalls.h.
+ +Change the current working directory.
+Changes the current working directory to the specified path
.
path | New directory path |
Definition at line 1558 of file syscalls.h.
+ +#define call_clock_gettime | +( | ++ | clockid, | +
+ | + | + | tp | +
+ | ) | +syscall2(SYS_CLOCK_GETTIME, (scarg)clockid, (scarg)tp) | +
Get the current time of a specific clock.
+Retrieves the current time for the specified clock (CLOCK_REALTIME
, CLOCK_MONOTONIC
, etc.).
clockid | Clock ID to query |
tp | Pointer to store the time |
Definition at line 1544 of file syscalls.h.
+ +#define call_clock_settime | +( | ++ | clockid, | +
+ | + | + | tp | +
+ | ) | +syscall2(SYS_CLOCK_SETTIME, (scarg)clockid, (scarg)tp) | +
Set the current time of a specific clock.
+Sets the time for the specified clock (CLOCK_REALTIME
, CLOCK_MONOTONIC
, etc.).
clockid | Clock ID to set |
tp | Pointer to the time value |
Definition at line 1547 of file syscalls.h.
+ +Close a file descriptor.
+Closes the file descriptor fd
, releasing its resources.
fd | File descriptor to close |
Definition at line 1429 of file syscalls.h.
+ +#define call_connect | +( | ++ | sockfd, | +
+ | + | + | addr, | +
+ | + | + | addrlen | +
+ | ) | +syscall3(SYS_CONNECT, (scarg)sockfd, (scarg)addr, (scarg)addrlen) | +
Connect to a remote address.
+Connects a socket to a remote address.
+sockfd | Socket file descriptor |
addr | Remote address to connect to |
addrlen | Length of the address |
Definition at line 1521 of file syscalls.h.
+ +Duplicate a file descriptor.
+Duplicates the file descriptor oldfd
, returning the new file descriptor.
oldfd | File descriptor to duplicate |
oldfd
is invalid Definition at line 1509 of file syscalls.h.
+ +#define call_dup2 | +( | ++ | oldfd, | +
+ | + | + | newfd | +
+ | ) | +syscall2(SYS_DUP2, (scarg)oldfd, (scarg)newfd) | +
Duplicate a file descriptor to a specific value.
+Duplicates oldfd
to newfd
. If newfd
is already open, it will be closed first.
oldfd | File descriptor to duplicate |
newfd | File descriptor to duplicate oldfd to |
Definition at line 1512 of file syscalls.h.
+ +#define call_execve | +( | ++ | pathname, | +
+ | + | + | argv, | +
+ | + | + | envp | +
+ | ) | +syscall3(SYS_EXECVE, (scarg)pathname, (scarg)argv, (scarg)envp) | +
Execute a program.
+Replaces the current process image with a new process image specified by pathname
.
pathname | Path to the executable file |
argv | Argument vector |
envp | Environment variables |
Definition at line 1469 of file syscalls.h.
+ +Terminate the calling process.
+Terminates the calling process with the specified status
. The status code is made available to the parent process.
status | Exit status code |
Definition at line 1463 of file syscalls.h.
+ +Create a child process.
+Creates a new process by duplicating the calling process. The child process has its own copy of the parent's address space.
+Definition at line 1466 of file syscalls.h.
+ +#define call_fstat | +( | ++ | fd, | +
+ | + | + | statbuf | +
+ | ) | +syscall2(SYS_FSTAT, (scarg)fd, (scarg)statbuf) | +
Retrieve file status for an open file descriptor.
+Gets the status of the file referred to by fd
.
fd | File descriptor |
statbuf | Buffer to store file status |
Definition at line 1440 of file syscalls.h.
+ +#define call_ftruncate | +( | ++ | fd, | +
+ | + | + | length | +
+ | ) | +syscall2(SYS_FTRUNCATE, (scarg)fd, (scarg)length) | +
Change the size of a file referred by a file descriptor.
+Sets the size of the file referred to by fd
to length
.
fd | File descriptor |
length | Desired file length |
Definition at line 1452 of file syscalls.h.
+ +#define call_getcwd | +( | ++ | buf, | +
+ | + | + | size | +
+ | ) | +syscall2(SYS_GETCWD, (scarg)buf, (scarg)size) | +
Get the current working directory.
+Retrieves the current working directory.
+buf | Buffer to store the directory path |
size | Size of the buffer |
buf
on successDefinition at line 1555 of file syscalls.h.
+ +#define call_getpid | +( | +) | +syscall0(SYS_GETPID) | +
Get the process ID of the calling process.
+Returns the process ID of the calling process.
+Definition at line 1472 of file syscalls.h.
+ +#define call_getppid | +( | +) | +syscall0(SYS_GETPPID) | +
Get the parent process ID.
+Returns the parent process ID of the calling process.
+Definition at line 1475 of file syscalls.h.
+ +#define call_ioctl | +( | ++ | fd, | +
+ | + | + | request, | +
+ | + | + | argp | +
+ | ) | +syscall3(SYS_IOCTL, (scarg)fd, (scarg)request, (scarg)argp) | +
Control a device.
+Manipulates the underlying parameters of a device.
+fd | File descriptor referring to the device |
request | Device-specific request code |
argp | Argument for the request |
Definition at line 1432 of file syscalls.h.
+ +#define call_kill | +( | ++ | pid, | +
+ | + | + | sig | +
+ | ) | +syscall2(SYS_KILL, (scarg)pid, (scarg)sig) | +
Send a signal to a process.
+Sends the signal sig
to the process specified by pid
.
pid | Process ID |
sig | Signal to send |
Definition at line 1481 of file syscalls.h.
+ +#define call_listen | +( | ++ | sockfd, | +
+ | + | + | backlog | +
+ | ) | +syscall2(SYS_LISTEN, (scarg)sockfd, (scarg)backlog) | +
Listen for incoming connections on a socket.
+Sets a socket to listen for incoming connections, specifying the backlog queue size.
+sockfd | Socket file descriptor |
backlog | Number of pending connections to allow |
Definition at line 1524 of file syscalls.h.
+ +#define call_lstat | +( | ++ | pathname, | +
+ | + | + | statbuf | +
+ | ) | +syscall2(SYS_LSTAT, (scarg)pathname, (scarg)statbuf) | +
Retrieve file status with symbolic link resolution.
+Gets the status of the file specified by pathname
, but does not follow symbolic links.
pathname | Path to the file |
statbuf | Buffer to store file status |
Definition at line 1443 of file syscalls.h.
+ +#define call_madvise | +( | ++ | addr, | +
+ | + | + | length, | +
+ | + | + | advice | +
+ | ) | +syscall3(SYS_MADVISE, (scarg)addr, (scarg)length, (scarg)advice) | +
Provide advice about memory usage.
+Provides advice to the kernel about the expected behavior of the memory region starting at addr
for length
, such as whether it will be accessed randomly or sequentially.
addr | Start address of the memory region |
length | Length of the memory region |
advice | Desired advice (e.g., MADV_DONTNEED, MADV_SEQUENTIAL) |
Definition at line 1501 of file syscalls.h.
+ +#define call_mkdir | +( | ++ | path, | +
+ | + | + | mode | +
+ | ) | +syscall2(SYS_MKDIR, (scarg)path, (scarg)mode) | +
Create a new directory.
+Creates a new directory at path
with the specified permissions.
path | Path to the new directory |
mode | Directory permissions |
Definition at line 1561 of file syscalls.h.
+ +#define call_mmap | +( | ++ | addr, | +
+ | + | + | length, | +
+ | + | + | prot, | +
+ | + | + | flags, | +
+ | + | + | fd, | +
+ | + | + | offset | +
+ | ) | +syscall6(SYS_MMAP, (scarg)addr, (scarg)length, (scarg)prot, (scarg)flags, (scarg)fd, (scarg)offset) | +
Map files or devices into memory.
+Maps a file or device into memory. This can be used for memory-mapped I/O or for sharing memory between processes.
+addr | Desired starting address of the mapping (NULL for automatic allocation) |
length | Length of the mapping |
prot | Desired memory protection + Supported values:
|
flags | Mapping options + Supported values:
|
fd | File descriptor for the file to map |
offset | Offset in the file to start the mapping |
Definition at line 1492 of file syscalls.h.
+ +#define call_mprotect | +( | ++ | addr, | +
+ | + | + | length, | +
+ | + | + | prot | +
+ | ) | +syscall3(SYS_MPROTECT, (scarg)addr, (scarg)length, (scarg)prot) | +
Change memory protection.
+Sets the protection on the memory region starting at addr
for length
.
addr | Start address of the memory region |
length | Length of the memory region |
prot | Desired memory protection (e.g., PROT_READ, PROT_WRITE) |
Definition at line 1498 of file syscalls.h.
+ +#define call_munmap | +( | ++ | addr, | +
+ | + | + | length | +
+ | ) | +syscall2(SYS_MUNMAP, (scarg)addr, (scarg)length) | +
Unmap a mapped memory region.
+Unmaps a previously mapped memory region, making the memory available for reuse.
+addr | Start address of the memory region |
length | Length of the memory region to unmap |
Definition at line 1495 of file syscalls.h.
+ +#define call_nanosleep | +( | ++ | req, | +
+ | + | + | rem | +
+ | ) | +syscall2(SYS_NANOSLEEP, (scarg)req, (scarg)rem) | +
Sleep for a specified time.
+Suspends the execution of the calling thread for the specified time duration.
+req | Pointer to timespec specifying the time to sleep |
rem | Pointer to store remaining time if interrupted |
Definition at line 1550 of file syscalls.h.
+ +#define call_open | +( | ++ | pathname, | +
+ | + | + | flags, | +
+ | + | + | mode | +
+ | ) | +syscall3(SYS_OPEN, (scarg)pathname, (scarg)flags, (scarg)mode) | +
Open a file.
+Opens the file specified by pathname
.
pathname | Path to the file |
flags | Flags for file access mode + Supported values:
|
mode | Permissions for newly created file (if applicable) |
Definition at line 1426 of file syscalls.h.
+ +Create a pipe.
+Creates a pipe, returning two file descriptors in pipefd
. One is for reading, and the other is for writing.
pipefd | Array to store the two file descriptors |
Definition at line 1506 of file syscalls.h.
+ +#define call_prctl | +( | ++ | option, | +
+ | + | + | arg1, | +
+ | + | + | arg2, | +
+ | + | + | arg3, | +
+ | + | + | arg4 | +
+ | ) | +syscall5(SYS_PRCTL, (scarg)option, (scarg)arg1, (scarg)arg2, (scarg)arg3, (scarg)arg4) | +
Process/Thread Control.
+Perform various operations on a process or thread.
+option | Operation to perform |
arg1 | Argument 1 |
arg2 | Argument 2 |
arg3 | Argument 3 |
arg4 | Argument 4 |
Definition at line 1484 of file syscalls.h.
+ +#define call_pread | +( | ++ | fd, | +
+ | + | + | buf, | +
+ | + | + | count, | +
+ | + | + | offset | +
+ | ) | +syscall4(SYS_PREAD, (scarg)fd, (scarg)buf, (scarg)count, (scarg)offset) | +
Read from a file descriptor.
+Reads up to count
bytes from the file descriptor fd
into the buffer starting at buf
.
fd | File descriptor to read from |
buf | Buffer where data will be stored |
count | Maximum number of bytes to read |
offset | Offset in the file |
Definition at line 1417 of file syscalls.h.
+ +#define call_pwrite | +( | ++ | fd, | +
+ | + | + | buf, | +
+ | + | + | count, | +
+ | + | + | offset | +
+ | ) | +syscall4(SYS_PWRITE, (scarg)fd, (scarg)buf, (scarg)count, (scarg)offset) | +
Write to a file descriptor.
+Writes up to count
bytes from the buffer starting at buf
to the file descriptor fd
.
fd | File descriptor to write to |
buf | Buffer containing data to write |
count | Number of bytes to write |
offset | Offset in the file |
Definition at line 1423 of file syscalls.h.
+ +#define call_read | +( | ++ | fd, | +
+ | + | + | buf, | +
+ | + | + | count | +
+ | ) | +syscall3(SYS_READ, (scarg)fd, (scarg)buf, (scarg)count) | +
Read from a file descriptor.
+Reads up to count
bytes from the file descriptor fd
into the buffer starting at buf
.
fd | File descriptor to read from |
buf | Buffer where data will be stored |
count | Maximum number of bytes to read |
Definition at line 1414 of file syscalls.h.
+ +#define call_recv | +( | ++ | sockfd, | +
+ | + | + | buf, | +
+ | + | + | len, | +
+ | + | + | flags | +
+ | ) | +syscall4(SYS_RECV, (scarg)sockfd, (scarg)buf, (scarg)len, (scarg)flags) | +
Receive data on a socket.
+Receives data from a socket.
+sockfd | Socket file descriptor |
buf | Buffer to store received data |
len | Maximum number of bytes to receive |
flags | Flags for the receive operation |
Definition at line 1533 of file syscalls.h.
+ +#define call_rename | +( | ++ | oldpath, | +
+ | + | + | newpath | +
+ | ) | +syscall2(SYS_RENAME, (scarg)oldpath, (scarg)newpath) | +
Rename a file or directory.
+Renames a file or directory from oldpath
to newpath
.
oldpath | Current name of the file or directory |
newpath | New name of the file or directory |
Definition at line 1570 of file syscalls.h.
+ +Remove an empty directory.
+Removes the empty directory specified by path
.
path | Path to the directory |
Definition at line 1564 of file syscalls.h.
+ +#define call_seek | +( | ++ | fd, | +
+ | + | + | offset, | +
+ | + | + | whence | +
+ | ) | +syscall3(SYS_SEEK, (scarg)fd, (scarg)offset, (scarg)whence) | +
Set the file offset.
+Sets the file offset for the file referred to by fd
to the specified offset
according to the directive whence
.
fd | File descriptor |
offset | Offset to set |
whence | Directive for setting the offset + Supported values:
|
Definition at line 1458 of file syscalls.h.
+ +#define call_send | +( | ++ | sockfd, | +
+ | + | + | buf, | +
+ | + | + | len, | +
+ | + | + | flags | +
+ | ) | +syscall4(SYS_SEND, (scarg)sockfd, (scarg)buf, (scarg)len, (scarg)flags) | +
Send data on a socket.
+Sends data through a socket.
+sockfd | Socket file descriptor |
buf | Data to send |
len | Length of the data |
flags | Flags for the send operation |
Definition at line 1530 of file syscalls.h.
+ +#define call_shutdown | +( | ++ | sockfd, | +
+ | + | + | how | +
+ | ) | +syscall2(SYS_SHUTDOWN, (scarg)sockfd, (scarg)how) | +
Shut down part of a full-duplex connection.
+Shuts down part of a full-duplex connection on a socket.
+sockfd | Socket file descriptor |
how | Determines which operations to shut down (e.g., SHUT_RD, SHUT_WR) |
Definition at line 1536 of file syscalls.h.
+ +#define call_socket | +( | ++ | domain, | +
+ | + | + | type, | +
+ | + | + | protocol | +
+ | ) | +syscall3(SYS_SOCKET, (scarg)domain, (scarg)type, (scarg)protocol) | +
Create an endpoint for communication.
+Creates an endpoint for communication, returning a socket file descriptor.
+domain | Communication domain (e.g., AF_INET for IPv4) |
type | Type of socket (e.g., SOCK_STREAM for TCP) |
protocol | Protocol to use (e.g., IPPROTO_TCP) |
Definition at line 1515 of file syscalls.h.
+ +#define call_stat | +( | ++ | pathname, | +
+ | + | + | statbuf | +
+ | ) | +syscall2(SYS_STAT, (scarg)pathname, (scarg)statbuf) | +
Retrieve file status.
+Gets the status of the file specified by pathname
.
pathname | Path to the file |
statbuf | Buffer to store file status |
Definition at line 1437 of file syscalls.h.
+ +Get the current file offset.
+Returns the current file offset for the file referred to by fd
.
fd | File descriptor |
fd
is not a valid file descriptor Definition at line 1455 of file syscalls.h.
+ +Get the current time.
+Retrieves the current calendar time as the number of seconds since the epoch.
+t | Pointer to store the time (optional) |
t
is NULL Definition at line 1541 of file syscalls.h.
+ +#define call_truncate | +( | ++ | pathname, | +
+ | + | + | length | +
+ | ) | +syscall2(SYS_TRUNCATE, (scarg)pathname, (scarg)length) | +
Change the size of a file.
+Sets the size of the file specified by pathname
to length
. If the file is shorter, it is extended and the extended part is zero-filled.
pathname | Path to the file |
length | Desired file length |
Definition at line 1449 of file syscalls.h.
+ +#define call_unlink | +( | ++ | pathname | ) | +syscall1(SYS_UNLINK, (scarg)pathname) | +
Remove a file.
+Removes the file specified by pathname
.
pathname | Path to the file |
Definition at line 1567 of file syscalls.h.
+ +#define call_waitpid | +( | ++ | pid, | +
+ | + | + | wstatus, | +
+ | + | + | options | +
+ | ) | +syscall3(SYS_WAITPID, (scarg)pid, (scarg)wstatus, (scarg)options) | +
Wait for a child process to change state.
+Waits for the child process specified by pid
to change state.
pid | Process ID to wait for |
wstatus | Pointer to store the status information |
options | Options for waiting behavior |
Definition at line 1478 of file syscalls.h.
+ +#define call_write | +( | ++ | fd, | +
+ | + | + | buf, | +
+ | + | + | count | +
+ | ) | +syscall3(SYS_WRITE, (scarg)fd, (scarg)buf, (scarg)count) | +
Write to a file descriptor.
+Writes up to count
bytes from the buffer starting at buf
to the file descriptor fd
.
fd | File descriptor to write to |
buf | Buffer containing data to write |
count | Number of bytes to write |
Definition at line 1420 of file syscalls.h.
+ +#define scarg __UINTPTR_TYPE__ | +
Definition at line 23 of file syscalls.h.
+ +typedef int __SYS_clockid_t | +
Definition at line 411 of file syscalls.h.
+ +typedef unsigned int __SYS_socklen_t | +
Definition at line 412 of file syscalls.h.
+ +enum syscall_access_flags_t | +
Enumerator | |
---|---|
__SYS_F_OK | |
__SYS_R_OK | |
__SYS_W_OK | |
__SYS_X_OK |
Definition at line 219 of file syscalls.h.
+enum syscall_clockid_t | +
Enumerator | |
---|---|
__SYS_CLOCK_MONOTONIC | |
__SYS_CLOCK_PROCESS_CPUTIME_ID | |
__SYS_CLOCK_REALTIME | |
__SYS_CLOCK_THREAD_CPUTIME_ID |
Definition at line 397 of file syscalls.h.
+enum syscall_mmap_flags_t | +
Enumerator | |
---|---|
__SYS_PROT_READ | |
__SYS_PROT_WRITE | |
__SYS_PROT_EXEC | |
__SYS_PROT_NONE | |
__SYS_MAP_SHARED | |
__SYS_MAP_PRIVATE | |
__SYS_MAP_FIXED | |
__SYS_MAP_ANONYMOUS | |
__SYS_MAP_ANON |
Definition at line 189 of file syscalls.h.
+enum syscall_open_flags_t | +
Enumerator | |
---|---|
__SYS_O_RDONLY | |
__SYS_O_WRONLY | |
__SYS_O_RDWR | |
__SYS_O_APPEND | |
__SYS_O_CREAT | |
__SYS_O_DSYNC | |
__SYS_O_EXCL | |
__SYS_O_NOCTTY | |
__SYS_O_NONBLOCK | |
__SYS_O_RSYNC | |
__SYS_O_SYNC | |
__SYS_O_TRUNC |
Definition at line 203 of file syscalls.h.
+enum syscall_prctl_options_t | +
Enumerator | |
---|---|
__SYS_GET_GS | |
__SYS_SET_GS | |
__SYS_GET_FS | |
__SYS_SET_FS |
Definition at line 227 of file syscalls.h.
+enum syscall_seek_whence_t | +
Enumerator | |
---|---|
__SYS_SEEK_SET | |
__SYS_SEEK_CUR | |
__SYS_SEEK_END |
Definition at line 238 of file syscalls.h.
+enum syscall_signal_action_disposition_t | +
Enumerator | |
---|---|
__SYS_SIG_ERR | |
__SYS_SIG_DFL | |
___SYS_SIG_IGN |
Definition at line 390 of file syscalls.h.
+enum syscall_signal_action_flags_t | +
Enumerator | |
---|---|
__SYS_SA_NOCLDSTOP | |
__SYS_SA_ONSTACK | |
__SYS_SA_RESETHAND | |
__SYS_SA_RESTART | |
__SYS_SA_SIGINFO | |
__SYS_SA_NOCLDWAIT | |
__SYS_SA_NODEFER |
Definition at line 379 of file syscalls.h.
+enum syscall_signal_actions_t | +
Enumerator | |
---|---|
__SYS_SIG_BLOCK | |
__SYS_SIG_UNBLOCK | |
__SYS_SIG_SETMASK |
Definition at line 372 of file syscalls.h.
+enum syscall_signal_disposition_t | +
Enumerator | |
---|---|
__SYS_SIG_TERM | Terminate the process. + |
__SYS_SIG_IGN | Ignore the signal. + |
__SYS_SIG_CONT | Continue the process. + |
__SYS_SIG_STOP | Stop the process. + |
__SYS_SIG_CORE | Dump core. + |
Definition at line 355 of file syscalls.h.
+enum syscall_signal_t | +
Definition at line 245 of file syscalls.h.
+enum syscalls_t | +
List of syscalls.
+This list contains all the syscalls of the Fennix Kernel API.
+Enumerator | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SYS_API_VERSION | Set syscall version. +int api_version(int version);
+This syscall is used to set the version of the list. To prevent applications from breaking on major changes, this should be called at the very beginning of the program. +
| ||||||||||||
SYS_READ | Read from a file descriptor. +ssize_t sys_read(int fildes, void *buf, size_t nbyte);
+Reads up to
| ||||||||||||
SYS_PREAD | Read from a file descriptor. +ssize_t sys_pread(int fildes, void *buf, size_t nbyte, off_t offset);
+Reads up to
| ||||||||||||
SYS_WRITE | Write to a file descriptor. +ssize_t sys_write(int fildes, const void *buf, size_t nbyte);
+Writes up to
| ||||||||||||
SYS_PWRITE | Write to a file descriptor. +ssize_t sys_pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
+Writes up to
| ||||||||||||
SYS_OPEN | Open a file. +int open(const char *pathname, int flags, mode_t mode);
+Opens the file specified by
| ||||||||||||
SYS_CLOSE | Close a file descriptor. +int close(int fd);
+Closes the file descriptor
| ||||||||||||
SYS_IOCTL | Control a device. +int ioctl(int fd, unsigned long request, void *argp);
+Manipulates the underlying parameters of a device. +
| ||||||||||||
SYS_STAT | Retrieve file status. +int stat(const char *pathname, struct stat *statbuf);
+Gets the status of the file specified by
| ||||||||||||
SYS_FSTAT | Retrieve file status for an open file descriptor. +int fstat(int fd, struct stat *statbuf);
+Gets the status of the file referred to by
| ||||||||||||
SYS_LSTAT | Retrieve file status with symbolic link resolution. +int lstat(const char *pathname, struct stat *statbuf);
+Gets the status of the file specified by
| ||||||||||||
SYS_ACCESS | Check a file's accessibility. +int access(const char *pathname, int mode);
+Checks if the calling process can access the file specified by
| ||||||||||||
SYS_TRUNCATE | Change the size of a file. +int truncate(const char *pathname, off_t length);
+Sets the size of the file specified by
| ||||||||||||
SYS_FTRUNCATE | Change the size of a file referred by a file descriptor. +int ftruncate(int fd, off_t length);
+Sets the size of the file referred to by
| ||||||||||||
SYS_TELL | Get the current file offset. +off_t tell(int fd);
+Returns the current file offset for the file referred to by
| ||||||||||||
SYS_SEEK | Set the file offset. +off_t seek(int fd, off_t offset, int whence);
+Sets the file offset for the file referred to by
| ||||||||||||
SYS_EXIT | Terminate the calling process. +void exit(int status);
+Terminates the calling process with the specified
| ||||||||||||
SYS_FORK | Create a child process. +pid_t fork(void);
+Creates a new process by duplicating the calling process. The child process has its own copy of the parent's address space. +
| ||||||||||||
SYS_EXECVE | Execute a program. +int execve(const char *pathname, char *const argv[], char *const envp[]);
+Replaces the current process image with a new process image specified by
| ||||||||||||
SYS_GETPID | Get the process ID of the calling process. +pid_t getpid(void);
+Returns the process ID of the calling process. +
| ||||||||||||
SYS_GETPPID | Get the parent process ID. +pid_t getppid(void);
+Returns the parent process ID of the calling process. +
| ||||||||||||
SYS_WAITPID | Wait for a child process to change state. +pid_t waitpid(pid_t pid, int *wstatus, int options);
+Waits for the child process specified by
| ||||||||||||
SYS_KILL | Send a signal to a process. +int kill(pid_t pid, int sig);
+Sends the signal
| ||||||||||||
SYS_PRCTL | Process/Thread Control. +int prctl(syscall_prctl_options_t option, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4);
+Perform various operations on a process or thread. +
| ||||||||||||
SYS_BRK | Set the program break. +int brk(void *end_data);
+Increases or decreases the program’s data space, ending at
| ||||||||||||
SYS_MMAP | Map files or devices into memory. +void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
+Maps a file or device into memory. This can be used for memory-mapped I/O or for sharing memory between processes. +
| ||||||||||||
SYS_MUNMAP | Unmap a mapped memory region. +int munmap(void *addr, size_t length);
+Unmaps a previously mapped memory region, making the memory available for reuse. +
| ||||||||||||
SYS_MPROTECT | Change memory protection. +int mprotect(void *addr, size_t length, int prot);
+Sets the protection on the memory region starting at
| ||||||||||||
SYS_MADVISE | Provide advice about memory usage. +int madvise(void *addr, size_t length, int advice);
+Provides advice to the kernel about the expected behavior of the memory region starting at
| ||||||||||||
SYS_PIPE | Create a pipe. +int pipe(int pipefd[2]);
+Creates a pipe, returning two file descriptors in
| ||||||||||||
SYS_DUP | Duplicate a file descriptor. +int dup(int oldfd);
+Duplicates the file descriptor
| ||||||||||||
SYS_DUP2 | Duplicate a file descriptor to a specific value. +int dup2(int oldfd, int newfd);
+Duplicates
| ||||||||||||
SYS_SOCKET | Create an endpoint for communication. +int socket(int domain, int type, int protocol);
+Creates an endpoint for communication, returning a socket file descriptor. +
| ||||||||||||
SYS_BIND | Bind a socket to a local address. +int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+Binds a socket to a local address so it can listen for incoming connections. +
| ||||||||||||
SYS_CONNECT | Connect to a remote address. +int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+Connects a socket to a remote address. +
| ||||||||||||
SYS_LISTEN | Listen for incoming connections on a socket. +int listen(int sockfd, int backlog);
+Sets a socket to listen for incoming connections, specifying the backlog queue size. +
| ||||||||||||
SYS_ACCEPT | Accept an incoming connection on a socket. +int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+Accepts an incoming connection on a listening socket, creating a new socket for communication. +
| ||||||||||||
SYS_SEND | Send data on a socket. +ssize_t send(int sockfd, const void *buf, size_t len, int flags);
+Sends data through a socket. +
| ||||||||||||
SYS_RECV | Receive data on a socket. +ssize_t recv(int sockfd, void *buf, size_t len, int flags);
+Receives data from a socket. +
| ||||||||||||
SYS_SHUTDOWN | Shut down part of a full-duplex connection. +int shutdown(int sockfd, int how);
+Shuts down part of a full-duplex connection on a socket. +
| ||||||||||||
SYS_TIME | Get the current time. +time_t time(time_t *t);
+Retrieves the current calendar time as the number of seconds since the epoch. +
| ||||||||||||
SYS_CLOCK_GETTIME | Get the current time of a specific clock. +int clock_gettime(clockid_t clockid, struct timespec *tp);
+Retrieves the current time for the specified clock (
| ||||||||||||
SYS_CLOCK_SETTIME | Set the current time of a specific clock. +int clock_settime(clockid_t clockid, const struct timespec *tp);
+Sets the time for the specified clock (
| ||||||||||||
SYS_NANOSLEEP | Sleep for a specified time. +int nanosleep(const struct timespec *req, struct timespec *rem);
+Suspends the execution of the calling thread for the specified time duration. +
| ||||||||||||
SYS_GETCWD | Get the current working directory. +char *getcwd(char *buf, size_t size);
+Retrieves the current working directory. +
| ||||||||||||
SYS_CHDIR | Change the current working directory. +int chdir(const char *path);
+Changes the current working directory to the specified
| ||||||||||||
SYS_MKDIR | Create a new directory. +int mkdir(const char *path, mode_t mode);
+Creates a new directory at
| ||||||||||||
SYS_RMDIR | Remove an empty directory. +int rmdir(const char *path);
+Removes the empty directory specified by
| ||||||||||||
SYS_UNLINK | Remove a file. +int unlink(const char *pathname);
+Removes the file specified by
| ||||||||||||
SYS_RENAME | Rename a file or directory. +int rename(const char *oldpath, const char *newpath);
+Renames a file or directory from
| ||||||||||||
SYS_MAX | Max number of syscalls. +This is used to determine the size of the syscalls_t syscalls[SYS_MAX];
+
|
Definition at line 420 of file syscalls.h.
+_Static_assert | +( | +(int) | +__SYS_SIG_IGN = =(int) ___SYS_SIG_IGN , |
+
+ | + | "SIG_IGN values do not match" | ++ |
+ | ) | ++ |
Syscall wrapper with 0 arguments.
+This wrapper is used to call syscalls with 0 arguments
+syscall | syscalls_t |
Definition at line 33 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 1 argument.
+This wrapper is used to call syscalls with 1 argument
+syscall | syscalls_t |
arg1 | Argument 1 |
Definition at line 52 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 2 arguments.
+This wrapper is used to call syscalls with 2 arguments
+syscall | syscalls_t |
arg1 | Argument 1 |
arg2 | Argument 2 |
Definition at line 72 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 3 arguments.
+This wrapper is used to call syscalls with 3 arguments
+syscall | syscalls_t |
arg1 | Argument 1 |
arg2 | Argument 2 |
arg3 | Argument 3 |
Definition at line 93 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 4 arguments.
+This wrapper is used to call syscalls with 4 arguments
+syscall | syscalls_t |
arg1 | Argument 1 |
arg2 | Argument 2 |
arg3 | Argument 3 |
arg4 | Argument 4 |
Definition at line 115 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 5 arguments.
+This wrapper is used to call syscalls with 5 arguments
+syscall | syscalls_t |
arg1 | Argument 1 |
arg2 | Argument 2 |
arg3 | Argument 3 |
arg4 | Argument 4 |
arg5 | Argument 5 |
Definition at line 139 of file syscalls.h.
+References scarg.
+ +
+
|
+ +inlinestatic | +
Syscall wrapper with 6 arguments.
+This wrapper is used to call syscalls with 6 arguments
+syscall | syscalls_t |
arg1 | Argument 1 |
arg2 | Argument 2 |
arg3 | Argument 3 |
arg4 | Argument 4 |
arg5 | Argument 5 |
arg6 | Argument 6 |
Definition at line 165 of file syscalls.h.
+References scarg.
+ +
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Macros | |
#define | errno (*__errno_location()) |
+Enumerations | |
enum | KernelErrors { + EOK = 0 +, E2BIG = 1 +, EACCES = 2 +, EADDRINUSE = 3 +, + EADDRNOTAVAIL = 4 +, EAFNOSUPPORT = 5 +, EAGAIN = 6 +, EALREADY = 7 +, + EBADF = 8 +, EBADMSG = 9 +, EBUSY = 10 +, ECANCELED = 11 +, + ECHILD = 12 +, ECONNABORTED = 13 +, ECONNREFUSED = 14 +, ECONNRESET = 15 +, + EDEADLK = 16 +, EDESTADDRREQ = 17 +, EDOM = 18 +, EDQUOT = 19 +, + EEXIST = 20 +, EFAULT = 21 +, EFBIG = 22 +, EHOSTUNREACH = 23 +, + EIDRM = 24 +, EILSEQ = 25 +, EINPROGRESS = 26 +, EINTR = 27 +, + EINVAL = 28 +, EIO = 29 +, EISCONN = 30 +, EISDIR = 31 +, + ELOOP = 32 +, EMFILE = 33 +, EMLINK = 34 +, EMSGSIZE = 35 +, + EMULTIHOP = 36 +, ENAMETOOLONG = 37 +, ENETDOWN = 38 +, ENETRESET = 39 +, + ENETUNREACH = 40 +, ENFILE = 41 +, ENOBUFS = 42 +, ENODATA = 43 +, + ENODEV = 44 +, ENOENT = 45 +, ENOEXEC = 46 +, ENOLCK = 47 +, + ENOLINK = 48 +, ENOMEM = 49 +, ENOMSG = 50 +, ENOPROTOOPT = 51 +, + ENOSPC = 52 +, ENOSR = 53 +, ENOSTR = 54 +, ENOSYS = 55 +, + ENOTCONN = 56 +, ENOTDIR = 57 +, ENOTEMPTY = 58 +, ENOTRECOVERABLE = 59 +, + ENOTSOCK = 60 +, ENOTSUP = 61 +, ENOTTY = 62 +, ENXIO = 63 +, + EOPNOTSUPP = 64 +, EOVERFLOW = 65 +, EOWNERDEAD = 66 +, EPERM = 67 +, + EPIPE = 68 +, EPROTO = 69 +, EPROTONOSUPPORT = 70 +, EPROTOTYPE = 71 +, + ERANGE = 72 +, EROFS = 73 +, ESPIPE = 74 +, ESRCH = 75 +, + ESTALE = 76 +, ETIME = 77 +, ETIMEDOUT = 78 +, ETXTBSY = 79 +, + EWOULDBLOCK = 80 +, EXDEV = 81 +, __ERRNO_MAX + + } |
+Functions | |
int * | __errno_location (void) __attribute__((const)) |
char * | strerror (int errnum) |
#define errno (*__errno_location()) | +
enum KernelErrors | +
The documentation for these error codes are from: https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html
+Full list: https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/basedefs/errno.h.html
+Definition at line 28 of file errno.h.
+int* __errno_location | +( | +void | +) | +const | +
char* strerror | +( | +int | +errnum | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Data Structures | |
struct | __attribute__ |
+Enumerations | |
enum | PCI_COMMANDS { + PCI_COMMAND_IO = 0x1 +, PCI_COMMAND_MEMORY = 0x2 +, PCI_COMMAND_MASTER = 0x4 +, PCI_COMMAND_SPECIAL = 0x8 +, + PCI_COMMAND_INVALIDATE = 0x10 +, PCI_COMMAND_VGA_PALETTE = 0x20 +, PCI_COMMAND_PARITY = 0x40 +, PCI_COMMAND_WAIT = 0x80 +, + PCI_COMMAND_SERR = 0x100 +, PCI_COMMAND_FAST_BACK = 0x200 +, PCI_COMMAND_INTX_DISABLE = 0x400 + + } |
+Functions | |
PCIArray * | GetPCIDevices (uint16_t Vendors[], uint16_t Devices[]) |
void | InitializePCI (PCIDevice *Device) |
uint32_t | GetBAR (uint8_t Index, PCIDevice *Device) |
uint8_t | iLine (PCIDevice *Device) |
uint8_t | iPin (PCIDevice *Device) |
struct __attribute__ | +
enum PCI_COMMANDS | +
Definition at line 24 of file pci.h.
+uint32_t GetBAR | +( | +uint8_t | +Index, | +
+ | + | PCIDevice * | +Device | +
+ | ) | ++ |
PCIArray* GetPCIDevices | +( | +uint16_t | +Vendors[], | +
+ | + | uint16_t | +Devices[] | +
+ | ) | ++ |
uint8_t iLine | +( | +PCIDevice * | +Device | ) | ++ |
void InitializePCI | +( | +PCIDevice * | +Device | ) | ++ |
uint8_t iPin | +( | +PCIDevice * | +Device | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
The core of the operating system.
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Data Structures | |
struct | __PCIArray |
struct | __DriverInfo |
struct | __DriverInfo::__DriverVersion |
+Macros | |
#define | PCI_END 0x0000 |
#define | KEY_NULL 0x00 |
+Enumerations | |
enum | AudioIoctl { + IOCTL_AUDIO_GET_VOLUME = 0 +, IOCTL_AUDIO_SET_VOLUME = 1 +, IOCTL_AUDIO_GET_MUTE = 2 +, IOCTL_AUDIO_SET_MUTE = 3 +, + IOCTL_AUDIO_GET_SAMPLE_RATE = 4 +, IOCTL_AUDIO_SET_SAMPLE_RATE = 5 +, IOCTL_AUDIO_GET_CHANNELS = 6 +, IOCTL_AUDIO_SET_CHANNELS = 7 + + } |
enum | NetIoctl { IOCTL_NET_GET_MAC = 0 + } |
enum | PageMapFlags { + MAP_PRESENT = 1 << 0 +, MAP_WRITE = 1 << 1 +, MAP_USER = 1 << 2 +, MAP_WRITE_THROUGH = 1 << 3 +, + MAP_CACHE_DISABLE = 1 << 4 + + } |
struct __PCIArray | +
struct __DriverInfo | +
Data Fields | ||
---|---|---|
+const char * | ++Author | ++ |
+const char * | ++Description | ++ |
+const char * | ++License | ++ |
+const char * | ++Name | ++ |
+struct __DriverVersion | ++Version | ++ |
struct __DriverInfo::__DriverVersion | +
enum AudioIoctl | +
Definition at line 34 of file driver.h.
+enum NetIoctl | +
enum PageMapFlags | +
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+Data Fields | |
int(* | Lookup )(struct Inode *Parent, const char *Name, struct Inode **Result) |
int(* | Create )(struct Inode *Parent, const char *Name, mode_t Mode, struct Inode **Result) |
int(* | Remove )(struct Inode *Parent, const char *Name) |
int(* | Rename )(struct Inode *Parent, const char *OldName, const char *NewName) |
ssize_t(* | Read )(struct Inode *Node, void *Buffer, size_t Size, off_t Offset) |
ssize_t(* | Write )(struct Inode *Node, const void *Buffer, size_t Size, off_t Offset) |
int(* | Truncate )(struct Inode *Node, off_t Size) |
int(* | Open )(struct Inode *Node, int Flags, mode_t Mode) |
int(* | Close )(struct Inode *Node) |
int(* | Ioctl )(struct Inode *Node, unsigned long Request, void *Argp) |
ssize_t(* | ReadDir )(struct Inode *Node, struct kdirent *Buffer, size_t Size, off_t Offset, off_t Entries) |
int(* | MkDir )(struct Inode *Parent, const char *Name, mode_t Mode, struct Inode **Result) |
int(* | RmDir )(struct Inode *Parent, const char *Name) |
int(* | SymLink )(struct Inode *Parent, const char *Name, const char *Target, struct Inode **Result) |
ssize_t(* | ReadLink )(struct Inode *Node, char *Buffer, size_t Size) |
off_t(* | Seek )(struct Inode *Node, off_t Offset) |
int(* | Stat )(struct Inode *Node, struct kstat *Stat) |
int(* InodeOperations::Close) (struct Inode *Node) | +
int(* InodeOperations::Ioctl) (struct Inode *Node, unsigned long Request, void *Argp) | +
ssize_t(* InodeOperations::Read) (struct Inode *Node, void *Buffer, size_t Size, off_t Offset) | +
ssize_t(* InodeOperations::ReadLink) (struct Inode *Node, char *Buffer, size_t Size) | +
int(* InodeOperations::Rename) (struct Inode *Parent, const char *OldName, const char *NewName) | +
off_t(* InodeOperations::Seek) (struct Inode *Node, off_t Offset) | +
int(* InodeOperations::Truncate) (struct Inode *Node, off_t Size) | +
ssize_t(* InodeOperations::Write) (struct Inode *Node, const void *Buffer, size_t Size, off_t Offset) | +
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Enumerations | |
enum | DeviceType { + DEVICE_TYPE_MASK = 0b1111111100000000000000000000000000000000 +, DEVICE_TYPE_NONE = 0b0000000000000000000000000000000000000000 +, DEVICE_TYPE_INPUT = 0b0000000100000000000000000000000000000000 +, DEVICE_TYPE_AUDIO = 0b0000001000000000000000000000000000000000 +, + DEVICE_TYPE_NETWORK = 0b0000010000000000000000000000000000000000 +, DEVICE_TYPE_BLOCK = 0b0000100000000000000000000000000000000000 +, INPUT_TYPE_NONE = DEVICE_TYPE_INPUT + 0 +, INPUT_TYPE_KEYBOARD = DEVICE_TYPE_INPUT + 2 +, + INPUT_TYPE_MOUSE = DEVICE_TYPE_INPUT + 4 +, INPUT_TYPE_JOYSTICK = DEVICE_TYPE_INPUT + 8 +, INPUT_TYPE_TOUCHSCREEN = DEVICE_TYPE_INPUT + 16 +, INPUT_TYPE_GAMEPAD = DEVICE_TYPE_INPUT + 32 +, + INPUT_TYPE_ACCELEROMETER = DEVICE_TYPE_INPUT + 64 +, INPUT_TYPE_GYROSCOPE = DEVICE_TYPE_INPUT + 128 +, INPUT_TYPE_MAGNETOMETER = DEVICE_TYPE_INPUT + 256 +, AUDIO_TYPE_NONE = DEVICE_TYPE_AUDIO + 0 +, + AUDIO_TYPE_PWM = DEVICE_TYPE_AUDIO + 2 +, AUDIO_TYPE_DSP = DEVICE_TYPE_AUDIO + 4 +, AUDIO_TYPE_PCM = DEVICE_TYPE_AUDIO + 8 +, AUDIO_TYPE_MIDI = DEVICE_TYPE_AUDIO + 16 +, + NETWORK_TYPE_NONE = DEVICE_TYPE_NETWORK + 0 +, NETWORK_TYPE_ETHERNET = DEVICE_TYPE_NETWORK + 2 +, NETWORK_TYPE_WIFI = DEVICE_TYPE_NETWORK + 4 +, NETWORK_TYPE_BLUETOOTH = DEVICE_TYPE_NETWORK + 8 +, + NETWORK_TYPE_UART = DEVICE_TYPE_NETWORK + 16 +, BLOCK_TYPE_NONE = DEVICE_TYPE_BLOCK + 0 +, BLOCK_TYPE_SDCARD = DEVICE_TYPE_BLOCK + 2 +, BLOCK_TYPE_HDD = DEVICE_TYPE_BLOCK + 4 +, + BLOCK_TYPE_SSD = DEVICE_TYPE_BLOCK + 8 +, BLOCK_TYPE_USB = DEVICE_TYPE_BLOCK + 16 +, BLOCK_TYPE_NVME = DEVICE_TYPE_BLOCK + 32 +, BLOCK_TYPE_CDROM = DEVICE_TYPE_BLOCK + 64 +, + BLOCK_TYPE_FLOPPY = DEVICE_TYPE_BLOCK + 128 + + } |
+Functions | |
EXTERNC dev_t | RegisterDevice (DeviceType Type, const struct InodeOperations *Operations) |
EXTERNC int | UnregisterDevice (dev_t Device) |
enum DeviceType | +
Definition at line 31 of file device.h.
+EXTERNC dev_t RegisterDevice | +( | +DeviceType | +Type, | +
+ | + | const struct InodeOperations * | +Operations | +
+ | ) | ++ |
EXTERNC int UnregisterDevice | +( | +dev_t | +Device | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Data Structures | |
struct | KeyboardReport |
struct | MouseReport |
struct | JoystickReport |
struct | TouchScreenReport |
struct | GamepadReport |
struct | AccelerometerReport |
struct | GyroscopeReport |
struct | MagnetometerReport |
struct | InputReport |
union | KeyboardReport.__unnamed13__ |
struct | KeyboardReport.__unnamed13__.__unnamed15__ |
union | InputReport.__unnamed17__ |
+Functions | |
EXTERNC int | ReportInputEvent (InputReport *Report) |
struct KeyboardReport | +
Data Fields | ||
---|---|---|
+union KeyboardReport | ++__unnamed__ | ++ |
+unsigned char | ++Character | ++ |
+KeyScanCodes | ++Key | ++ |
struct MouseReport | +
struct TouchScreenReport | +
struct InputReport | +
Data Fields | ||
---|---|---|
+union InputReport | ++__unnamed__ | ++ |
+dev_t | ++Device | ++ |
+DeviceType | ++Type | ++ |
union KeyboardReport.__unnamed13__ | +
Data Fields | ||
---|---|---|
+__unnamed13__ | ++__unnamed__ | ++ |
+char | ++Value | ++ |
struct KeyboardReport.__unnamed13__.__unnamed15__ | +
union InputReport.__unnamed17__ | +
Data Fields | ||
---|---|---|
+AccelerometerReport | ++Accelerometer | ++ |
+GamepadReport | ++Gamepad | ++ |
+GyroscopeReport | ++Gyroscope | ++ |
+JoystickReport | ++Joystick | ++ |
+KeyboardReport | ++Keyboard | ++ |
+MagnetometerReport | ++Magnetometer | ++ |
+MouseReport | ++Mouse | ++ |
+TouchScreenReport | ++TouchScreen | ++ |
enum KeyScanCodes | +
Definition at line 31 of file input.h.
+EXTERNC int ReportInputEvent | +( | +InputReport * | +Report | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
Go to the source code of this file.
++Data Structures | |
struct | kstat |
struct | kdirent |
struct | Inode |
struct | InodeOperations |
struct | SuperBlockOperations |
struct | FileSystemInfo |
+Macros | |
#define | SEEK_SET 0 |
#define | SEEK_CUR 1 |
#define | SEEK_END 2 |
#define | S_IFMT32 037777600000 |
#define | S_IFMT 0170000 |
#define | S_IFWHT 0160000 |
#define | S_IFSOCK 0140000 |
#define | S_IFLNK 0120000 |
#define | S_IFREG 0100000 |
#define | S_IFBLK 0060000 |
#define | S_IFDIR 0040000 |
#define | S_IFCHR 0020000 |
#define | S_IFIFO 0010000 |
#define | S_ISUID 04000 |
#define | S_ISGID 02000 |
#define | S_ISVTX 01000 |
#define | S_IRWXU 0700 |
#define | S_IRUSR 0400 |
#define | S_IWUSR 0200 |
#define | S_IXUSR 0100 |
#define | S_IRWXG 0070 |
#define | S_IRGRP 0040 |
#define | S_IWGRP 0020 |
#define | S_IXGRP 0010 |
#define | S_IRWXO 0007 |
#define | S_IROTH 0004 |
#define | S_IWOTH 0002 |
#define | S_IXOTH 0001 |
#define | O_RDONLY 00 |
#define | O_WRONLY 01 |
#define | O_RDWR 02 |
#define | O_CREAT 0100 |
#define | O_EXCL 0200 |
#define | O_TRUNC 01000 |
#define | O_APPEND 02000 |
#define | O_NOFOLLOW 0400000 |
#define | O_CLOEXEC 02000000 |
#define | S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) |
#define | S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) |
#define | S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) |
#define | S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) |
#define | S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) |
#define | S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) |
#define | S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) |
#define | DT_UNKNOWN 0x0 |
#define | DT_FIFO 0x1 |
#define | DT_CHR 0x2 |
#define | DT_DIR 0x4 |
#define | DT_BLK 0x6 |
#define | DT_REG 0x8 |
#define | DT_LNK 0xA |
#define | DT_SOCK 0xC |
#define | DT_WHT 0xE |
#define | IFTODT(x) ((x) >> 12 & 0xF) |
#define | DTTOIF(x) ((x) << 12) |
#define | SYMLOOP_MAX 40 |
#define | static_assert _Static_assert |
#define | INODE_MAKEDEV(major, minor) |
#define | INODE_MAJOR(rdev) ((int)(((rdev) >> 8) & 0xFFF)) |
#define | INODE_MINOR(rdev) ((int)((rdev) & 0xFF)) |
#define | I_FLAG_ROOT 0x1 |
#define | I_FLAG_MOUNTPOINT 0x2 |
#define | I_FLAG_CACHE_KEEP 0x4 |
+Functions | |
struct InodeOperations | __attribute__ ((packed)) |
dev_t | RegisterFileSystem (struct FileSystemInfo *Info, struct Inode *Root) |
int | UnregisterFileSystem (dev_t Device) |
+Variables | |
int(* | Lookup )(struct Inode *Parent, const char *Name, struct Inode **Result) |
int(* | Create )(struct Inode *Parent, const char *Name, mode_t Mode, struct Inode **Result) |
int(* | Remove )(struct Inode *Parent, const char *Name) |
int(* | Rename )(struct Inode *Parent, const char *OldName, const char *NewName) |
ssize_t(* | Read )(struct Inode *Node, void *Buffer, size_t Size, off_t Offset) |
ssize_t(* | Write )(struct Inode *Node, const void *Buffer, size_t Size, off_t Offset) |
int(* | Truncate )(struct Inode *Node, off_t Size) |
int(* | Open )(struct Inode *Node, int Flags, mode_t Mode) |
int(* | Close )(struct Inode *Node) |
int(* | Ioctl )(struct Inode *Node, unsigned long Request, void *Argp) |
ssize_t(* | ReadDir )(struct Inode *Node, struct kdirent *Buffer, size_t Size, off_t Offset, off_t Entries) |
int(* | MkDir )(struct Inode *Parent, const char *Name, mode_t Mode, struct Inode **Result) |
int(* | RmDir )(struct Inode *Parent, const char *Name) |
int(* | SymLink )(struct Inode *Parent, const char *Name, const char *Target, struct Inode **Result) |
ssize_t(* | ReadLink )(struct Inode *Node, char *Buffer, size_t Size) |
off_t(* | Seek )(struct Inode *Node, off_t Offset) |
int(* | Stat )(struct Inode *Node, struct kstat *Stat) |
int(* | AllocateInode )(struct FileSystemInfo *Info, struct Inode **Result) |
int(* | DeleteInode )(struct FileSystemInfo *Info, struct Inode *Node) |
int(* | Synchronize )(struct FileSystemInfo *Info, struct Inode *Node) |
int(* | Destroy )(struct FileSystemInfo *Info) |
const char * | Name |
const char * | RootName |
int | Flags |
struct SuperBlockOperations | SuperOps |
struct InodeOperations | Ops |
void * | PrivateData |
struct kstat | +
Data Fields | ||
---|---|---|
+time_t | ++AccessTime | +
+ Time of last access. + |
+mode_t | ++Attribute | +
+ Additional file attributes. + |
+blkcnt_t | ++Blocks | +
+ Number of blocks allocated. + |
+blksize_t | ++BlockSize | +
+ Optimal I/O block size. + |
+time_t | ++ChangeTime | +
+ Time of last status change. + |
+dev_t | ++Device | +
+ Device ID of the file. + |
+gid_t | ++GroupID | +
+ Group ID of the file's owner. + |
+nlink_t | ++HardLinks | +
+ Number of hard links. + |
+ino_t | ++Index | +
+ Inode number. + |
+mode_t | ++Mode | +
+ File type and mode. + |
+time_t | ++ModifyTime | +
+ Time of last modification. + |
+dev_t | ++RawDevice | +
+ Device ID for special files. + |
+off_t | ++Size | +
+ Size of the file in bytes. + |
+uid_t | ++UserID | +
+ User ID of the file's owner. + |
struct kdirent | +
struct Inode | +
struct FileSystemInfo | +
Data Fields | ||
---|---|---|
+int | ++Flags | ++ |
+const char * | ++Name | ++ |
+struct InodeOperations | ++Ops | ++ |
+void * | ++PrivateData | ++ |
+const char * | ++RootName | ++ |
+struct SuperBlockOperations | ++SuperOps | ++ |
#define IFTODT | +( | ++ | x | ) | +((x) >> 12 & 0xF) | +
#define INODE_MAJOR | +( | ++ | rdev | ) | +((int)(((rdev) >> 8) & 0xFFF)) | +
#define INODE_MAKEDEV | +( | ++ | major, | +
+ | + | + | minor | +
+ | ) | ++ |
#define INODE_MINOR | +( | ++ | rdev | ) | +((int)((rdev) & 0xFF)) | +
#define S_IFMT 0170000 | +
File type mask.
+This mask is used to extract the file type from the mode field of a stat structure.
+Doing bitwise AND with this mask will return the file type. Example: st_mode & S_IFMT
+Doing bitwise negation and AND with this mask will return the permissions. Example: st_mode & ~S_IFMT
+ + + +#define S_IFMT32 037777600000 | +
#define static_assert _Static_assert | +
struct FileSystemInfo __attribute__ | +( | +(packed) | +) | ++ |
dev_t RegisterFileSystem | +( | +struct FileSystemInfo * | +Info, | +
+ | + | struct Inode * | +Root | +
+ | ) | ++ |
int UnregisterFileSystem | +( | +dev_t | +Device | ) | ++ |
int(* AllocateInode) (struct FileSystemInfo *Info, struct Inode **Result) | +( | +struct FileSystemInfo * | +Info, | +
+ | + | struct Inode ** | +Result | +
+ | ) | ++ |
int(* DeleteInode) (struct FileSystemInfo *Info, struct Inode *Node) | +( | +struct FileSystemInfo * | +Info, | +
+ | + | struct Inode * | +Node | +
+ | ) | ++ |
int(* Destroy) (struct FileSystemInfo *Info) | +( | +struct FileSystemInfo * | +Info | ) | ++ |
struct InodeOperations Ops | +
struct SuperBlockOperations SuperOps | +
int(* Synchronize) (struct FileSystemInfo *Info, struct Inode *Node) | +( | +struct FileSystemInfo * | +Info, | +
+ | + | struct Inode * | +Node | +
+ | ) | ++ |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+Directories | |
directory | interface |
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
+ Fennix
+ 1.0.0
+
+ Full Documentation
+ |
+
API | |
Developing | |
Userspace | |
Drivers | |
Kernel |