Implement devices header
This commit is contained in:
parent
9519cbeea0
commit
a85594bb3e
66
src/drivers/devices/devices.cpp
Normal file
66
src/drivers/devices/devices.cpp
Normal file
|
@ -0,0 +1,66 @@
|
|||
#include <driver/generic/device.h>
|
||||
#include <kernel/system/io.h>
|
||||
|
||||
/************************
|
||||
*** Team Kitty, 2021 ***
|
||||
*** Chroma ***
|
||||
***********************/
|
||||
|
||||
// TODO: increase this
|
||||
#define MAX_DEVICES 8
|
||||
// TODO: increase this
|
||||
#define MAX_STORAGE_DEVICES 4
|
||||
|
||||
// Internal storage. TODO: Turn this into some form of search tree structure.
|
||||
Device::GenericDevice* DevicesArray[MAX_DEVICES];
|
||||
// Internal storage. Index into the above array.
|
||||
size_t CurrentDevice = 0;
|
||||
|
||||
// Internal storage. TODO: Turn this into some form of search tree structure.
|
||||
Device::GenericStorage* StorageDevicesArray[MAX_STORAGE_DEVICES];
|
||||
// Internal storage. Index into the above array.
|
||||
size_t CurrentStorageDevice = 0;
|
||||
|
||||
// Internal storage. TODO: Make this not a pain to maintain
|
||||
const char* DeviceNames[] = { "Storage", "Keyboard", "Networking" };
|
||||
|
||||
|
||||
// Add a device pointer to the managed list.
|
||||
void Device::RegisterDevice(Device::GenericDevice* Device) {
|
||||
DevicesArray[CurrentDevice] = Device;
|
||||
Device->DeviceID = CurrentDevice;
|
||||
CurrentDevice++;
|
||||
SerialPrintf("[DEVICE] Registered device %d called %s of type %s\r\n", CurrentDevice - 1, Device->GetName(), DeviceNames[Device->GetType()]);
|
||||
}
|
||||
|
||||
// Retrieve a device pointer from the managed list.
|
||||
Device::GenericDevice* Device::GetDevice(size_t ID) {
|
||||
return DevicesArray[ID];
|
||||
}
|
||||
|
||||
void Device::RegisterStorageDevice(Device::GenericStorage* Device) {
|
||||
RegisterDevice(Device);
|
||||
StorageDevicesArray[CurrentStorageDevice] = Device;
|
||||
CurrentStorageDevice++;
|
||||
}
|
||||
|
||||
Device::GenericStorage* Device::GetStorageDevice(size_t ID) {
|
||||
return StorageDevicesArray[ID];
|
||||
}
|
||||
|
||||
// Get the count of registered devices.
|
||||
size_t Device::GetTotalDevices() { return CurrentDevice; }
|
||||
|
||||
template <typename T>
|
||||
// Get the first registered instance of a specific type of device
|
||||
T* Device::FindDevice() {
|
||||
for(size_t i = 0; i < CurrentDevice; i++)
|
||||
if(DevicesArray[i]->GetType() == T::GetRootType())
|
||||
return static_cast<T*>(DevicesArray[i]);
|
||||
|
||||
SerialPrintf("[DEVICE] Warning: Unable to find a %s device.\r\n", DeviceNames[T::GetRootType()]);
|
||||
return static_cast<T*>(nullptr);
|
||||
}
|
||||
|
||||
// Get the first registered instance of a Storage device
|
||||
template Device::GenericStorage* Device::FindDevice();
|
Loading…
Reference in New Issue
Block a user