Luna/kernel/src/fs/devices/DeviceFS.cpp
apio 47bdfecedb Devices: Add /dev/uptime
This file contains how many milliseconds have passed since boot at the time of reading it :)
2022-10-19 21:11:12 +02:00

45 lines
1.4 KiB
C++

#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;
}