#include "fs/devices/DeviceFS.h" #include "fs/devices/Console.h" #include "fs/devices/Keyboard.h" #include "fs/devices/Random.h" #include "fs/devices/Serial.h" #include "fs/devices/Uptime.h" #include "fs/devices/Version.h" #include "std/stdlib.h" #include "std/string.h" #define DEVFS_MAX_FILES 32 VFS::Node* devfs_root = nullptr; VFS::Node* devfs_files[DEVFS_MAX_FILES]; int devfs_file_count = 0; VFS::Node* DeviceFS::get() { if (devfs_root) return devfs_root; devfs_root = new VFS::Node; devfs_root->length = 0; devfs_root->inode = 0; devfs_root->type = VFS_DIRECTORY; devfs_root->find_func = DeviceFS::finddir; strncpy(devfs_root->name, "dev", sizeof(devfs_root->name)); devfs_files[devfs_file_count++] = VersionDevice::create_new("version"); devfs_files[devfs_file_count++] = ConsoleDevice::create_new("console"); devfs_files[devfs_file_count++] = SerialDevice::create_new("serial"); devfs_files[devfs_file_count++] = RandomDevice::create_new("random"); devfs_files[devfs_file_count++] = KeyboardDevice::create_new("kbd"); devfs_files[devfs_file_count++] = UptimeDevice::create_new("uptime"); return devfs_root; } VFS::Node* DeviceFS::finddir(VFS::Node* node, const char* filename) { if (!node) return 0; for (int i = 0; i < devfs_file_count; i++) { if (strncmp(devfs_files[i]->name, filename, sizeof(VFS::Node::name)) == 0) { return devfs_files[i]; } } return 0; }