USB host support (#527)

This commit is contained in:
Shadowtrance
2026-06-04 07:10:37 +10:00
committed by GitHub
parent a59fbf4ed5
commit 3dcc95f6f3
46 changed files with 2409 additions and 121 deletions
+12
View File
@@ -370,4 +370,16 @@ Device* device_find_by_name(const char* name) {
return found;
}
Device* device_find_first_active_by_type(const DeviceType* type) {
Device* found = nullptr;
device_for_each_of_type(type, &found, [](Device* dev, void* ctx) -> bool {
if (device_is_ready(dev)) {
*static_cast<Device**>(ctx) = dev;
return false;
}
return true;
});
return found;
}
} // extern "C"
@@ -0,0 +1,28 @@
#include <tactility/drivers/usb_host_hid.h>
#include <tactility/device.h>
#include <tactility/driver.h>
#define USB_HID_API(driver) ((struct UsbHidApi*)(driver)->api)
extern "C" {
const struct DeviceType USB_HOST_HID_TYPE = {
.name = "usb-host-hid",
};
bool usb_host_hid_is_connected(struct Device* device) {
auto* api = USB_HID_API(device_get_driver(device));
return api->is_connected(device);
}
bool usb_host_hid_subscribe(struct Device* device, UsbHidQueueHandle event_queue) {
auto* api = USB_HID_API(device_get_driver(device));
return api->subscribe(device, event_queue);
}
void usb_host_hid_unsubscribe(struct Device* device, UsbHidQueueHandle event_queue) {
auto* api = USB_HID_API(device_get_driver(device));
api->unsubscribe(device, event_queue);
}
} // extern "C"
@@ -0,0 +1,23 @@
#include <tactility/drivers/usb_host_midi.h>
#include <tactility/device.h>
#include <tactility/driver.h>
#define USB_MIDI_API(driver) ((struct UsbMidiApi*)(driver)->api)
extern "C" {
const struct DeviceType USB_HOST_MIDI_TYPE = {
.name = "usb-host-midi",
};
void usb_midi_set_callback(struct Device* device, usb_midi_message_cb_t callback, void* user_data) {
auto* api = USB_MIDI_API(device_get_driver(device));
api->set_callback(device, callback, user_data);
}
bool usb_midi_is_connected(struct Device* device) {
auto* api = USB_MIDI_API(device_get_driver(device));
return api->is_connected(device);
}
} // extern "C"
@@ -0,0 +1,18 @@
#include <tactility/drivers/usb_host_msc.h>
#include <tactility/device.h>
#include <tactility/driver.h>
#define USB_MSC_API(driver) ((struct UsbMscApi*)(driver)->api)
extern "C" {
const struct DeviceType USB_HOST_MSC_TYPE = {
.name = "usb-host-msc",
};
bool usb_msc_eject(struct Device* device, const char* mount_path) {
auto* api = USB_MSC_API(device_get_driver(device));
return api->eject && api->eject(device, mount_path);
}
} // extern "C"
+14
View File
@@ -8,6 +8,9 @@
#include <tactility/drivers/bluetooth_serial.h>
#include <tactility/drivers/bluetooth_midi.h>
#include <tactility/drivers/bluetooth_hid_device.h>
#include <tactility/drivers/usb_host_hid.h>
#include <tactility/drivers/usb_host_midi.h>
#include <tactility/drivers/usb_host_msc.h>
#include <tactility/drivers/gpio_controller.h>
#include <tactility/drivers/i2c_controller.h>
#include <tactility/drivers/i2s_controller.h>
@@ -55,6 +58,7 @@ const struct ModuleSymbol KERNEL_SYMBOLS[] = {
DEFINE_MODULE_SYMBOL(device_for_each_of_type),
DEFINE_MODULE_SYMBOL(device_exists_of_type),
DEFINE_MODULE_SYMBOL(device_find_by_name),
DEFINE_MODULE_SYMBOL(device_find_first_active_by_type),
// driver
DEFINE_MODULE_SYMBOL(driver_construct),
DEFINE_MODULE_SYMBOL(driver_destruct),
@@ -168,6 +172,16 @@ const struct ModuleSymbol KERNEL_SYMBOLS[] = {
DEFINE_MODULE_SYMBOL(bluetooth_hid_device_send_gamepad),
DEFINE_MODULE_SYMBOL(bluetooth_hid_device_is_connected),
DEFINE_MODULE_SYMBOL(BLUETOOTH_HID_DEVICE_TYPE),
// drivers/usb_host_hid
DEFINE_MODULE_SYMBOL(usb_host_hid_is_connected),
DEFINE_MODULE_SYMBOL(USB_HOST_HID_TYPE),
// drivers/usb_host_midi
DEFINE_MODULE_SYMBOL(usb_midi_set_callback),
DEFINE_MODULE_SYMBOL(usb_midi_is_connected),
DEFINE_MODULE_SYMBOL(USB_HOST_MIDI_TYPE),
// drivers/usb_host_msc
DEFINE_MODULE_SYMBOL(usb_msc_eject),
DEFINE_MODULE_SYMBOL(USB_HOST_MSC_TYPE),
// concurrent/dispatcher
DEFINE_MODULE_SYMBOL(dispatcher_alloc),
DEFINE_MODULE_SYMBOL(dispatcher_free),