diff --git a/device/src/CMakeLists.txt b/device/src/CMakeLists.txt index 2307d9d9..d288f39e 100644 --- a/device/src/CMakeLists.txt +++ b/device/src/CMakeLists.txt @@ -8,7 +8,6 @@ set(usb_cpp_sources usb/command_app.cpp usb/controls_app.cpp usb/gamepad_app.cpp - usb/hid_battery_app.cpp usb/keyboard_app.cpp usb/mouse_app.cpp usb/usb_compatibility.cpp diff --git a/device/src/bt_conn.c b/device/src/bt_conn.c index 485834d2..8f5cc8fa 100644 --- a/device/src/bt_conn.c +++ b/device/src/bt_conn.c @@ -276,10 +276,6 @@ static void connectHid(struct bt_conn *conn, connection_id_t connectionId, conne configureLatency(conn, LatencyMode_NUS); -#if DEVICE_IS_UHK80_RIGHT - USB_DisableHid(); -#endif - // Assume that HOGP is ready printf("Established HID connection with %s\n", GetPeerStringByConn(conn)); Connections_SetState(connectionId, ConnectionState_Ready); @@ -416,9 +412,6 @@ static void connected(struct bt_conn *conn, uint8_t err) { 100 // connection timeout (*10ms) ); bt_conn_le_param_update(conn, &conn_params); -#if DEVICE_IS_UHK80_RIGHT - USB_DisableHid(); -#endif } if (connectionType == ConnectionType_Unknown) { @@ -475,12 +468,6 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) { } if (!BtPair_OobPairingInProgress && !BtManager_Restarting) { - if (DEVICE_IS_UHK80_RIGHT) { - if (connectionType == ConnectionType_BtHid) { - USB_EnableHid(); - } - } - BtManager_StartScanningAndAdvertisingAsync(); } diff --git a/device/src/keyboard/charger.c b/device/src/keyboard/charger.c index 2c85073b..39c9d003 100644 --- a/device/src/keyboard/charger.c +++ b/device/src/keyboard/charger.c @@ -126,10 +126,6 @@ void Charger_UpdateBatteryState() { #ifdef CONFIG_BT_BAS bt_bas_set_battery_level(batteryState.batteryPercentage); -#endif -#if DEVICE_HAS_BATTERY - extern void HID_SetBatteryStatus(uint8_t remaining_capacity, bool charging); - HID_SetBatteryStatus(batteryState.batteryPercentage, batteryState.batteryCharging); #endif } } diff --git a/device/src/main.c b/device/src/main.c index 8dab8cca..9499a208 100644 --- a/device/src/main.c +++ b/device/src/main.c @@ -158,7 +158,7 @@ int main(void) { } } - USB_EnableHid(); // has to be after USB_SetSerialNumber + USB_Enable(); // has to be after USB_SetSerialNumber // has to be after InitSettings BtManager_InitBt(); diff --git a/device/src/usb/app_base.hpp b/device/src/usb/app_base.hpp index c57b3449..8577842d 100644 --- a/device/src/usb/app_base.hpp +++ b/device/src/usb/app_base.hpp @@ -1,6 +1,9 @@ #ifndef __APP_BASE_HEADER__ #define __APP_BASE_HEADER__ +extern "C" { +#include "device.h" +} #include "hid/application.hpp" #include "hid/rdf/descriptor.hpp" #include "hid/report_protocol.hpp" diff --git a/device/src/usb/command_app.cpp b/device/src/usb/command_app.cpp index 899dec92..f93236b8 100644 --- a/device/src/usb/command_app.cpp +++ b/device/src/usb/command_app.cpp @@ -12,7 +12,7 @@ command_app &command_app::usb_handle() } #if DEVICE_IS_UHK80_RIGHT -command_app &command_app::handle() +command_app &command_app::ble_handle() { static command_app ble_app{}; return ble_app; diff --git a/device/src/usb/command_app.hpp b/device/src/usb/command_app.hpp index a31bfbcc..9c08f910 100644 --- a/device/src/usb/command_app.hpp +++ b/device/src/usb/command_app.hpp @@ -64,7 +64,7 @@ class command_app : public hid::application { static command_app& usb_handle(); #if DEVICE_IS_UHK80_RIGHT - static command_app& handle(); + static command_app& ble_handle(); #endif void start(hid::protocol prot) override; diff --git a/device/src/usb/controls_app.cpp b/device/src/usb/controls_app.cpp index 7696705e..e49f9748 100644 --- a/device/src/usb/controls_app.cpp +++ b/device/src/usb/controls_app.cpp @@ -1,11 +1,19 @@ #include "controls_app.hpp" -controls_app &controls_app::handle() +controls_app &controls_app::usb_handle() { static controls_app app{}; return app; } +#if DEVICE_IS_UHK80_RIGHT +controls_app &controls_app::ble_handle() +{ + static controls_app ble_app{}; + return ble_app; +} +#endif + void controls_app::start(hid::protocol prot) { // TODO start handling controls events diff --git a/device/src/usb/controls_app.hpp b/device/src/usb/controls_app.hpp index ef1b93e0..48251a54 100644 --- a/device/src/usb/controls_app.hpp +++ b/device/src/usb/controls_app.hpp @@ -72,7 +72,10 @@ class controls_app : public app_base { // clang-format on } - static controls_app &handle(); + static controls_app &usb_handle(); +#if DEVICE_IS_UHK80_RIGHT + static controls_app &ble_handle(); +#endif void set_report_state(const controls_report_base<0> &data); @@ -82,7 +85,7 @@ class controls_app : public app_base { void start(hid::protocol prot) override; using controls_report = controls_report_base; - C2USB_USB_TRANSFER_ALIGN(controls_report, report_buffer_){}; + C2USB_USB_TRANSFER_ALIGN(controls_report, report_buffer_) {}; }; using controls_buffer = controls_app::controls_report_base<0>; diff --git a/device/src/usb/gamepad_app.cpp b/device/src/usb/gamepad_app.cpp index faee5c8b..867787a2 100644 --- a/device/src/usb/gamepad_app.cpp +++ b/device/src/usb/gamepad_app.cpp @@ -1,10 +1,17 @@ #include "gamepad_app.hpp" -gamepad_app &gamepad_app::handle() +gamepad_app &gamepad_app::usb_handle() { static gamepad_app app{}; return app; } +#if DEVICE_IS_UHK80_RIGHT +gamepad_app &gamepad_app::ble_handle() +{ + static gamepad_app ble_app{}; + return ble_app; +} +#endif void gamepad_app::start(hid::protocol prot) { diff --git a/device/src/usb/gamepad_app.hpp b/device/src/usb/gamepad_app.hpp index bf1d2440..16e4f410 100644 --- a/device/src/usb/gamepad_app.hpp +++ b/device/src/usb/gamepad_app.hpp @@ -169,7 +169,10 @@ class gamepad_app : public hid::application { } }; - static gamepad_app &handle(); + static gamepad_app &usb_handle(); +#if DEVICE_IS_UHK80_RIGHT + static gamepad_app &ble_handle(); +#endif void set_report_state(const gamepad_report &data); diff --git a/device/src/usb/hid_battery_app.cpp b/device/src/usb/hid_battery_app.cpp deleted file mode 100644 index d28460ae..00000000 --- a/device/src/usb/hid_battery_app.cpp +++ /dev/null @@ -1,57 +0,0 @@ -extern "C" { -#include "device.h" -} -#if DEVICE_HAS_BATTERY - #include "hid_battery_app.hpp" - -extern "C" void HID_SetBatteryStatus(uint8_t remaining_capacity, bool charging) -{ - return hid_battery_app::handle().send(remaining_capacity, charging); -} - -hid_battery_app &hid_battery_app::handle() -{ - static hid_battery_app app{}; - return app; -} - -void hid_battery_app::send(uint8_t remaining_capacity, bool charging) -{ - auto buf_idx = report_buffer_.active_side(); - auto &r = report_buffer_[buf_idx]; - r.remaining_capacity = remaining_capacity; - r.charging = charging; - send_buffer(buf_idx); -} - -void hid_battery_app::send_buffer(uint8_t buf_idx) -{ - if (!report_buffer_.differs()) { - return; - } - if (send_report(&report_buffer_[buf_idx]) == hid::result::OK) { - report_buffer_.compare_swap_copy(buf_idx); - } -} - -void hid_battery_app::in_report_sent(const std::span &data) -{ - auto buf_idx = report_buffer_.indexof(data.data()); - if (!report_buffer_.compare_swap_copy(buf_idx)) { - send_buffer(1 - buf_idx); - } -} - -void hid_battery_app::get_report(hid::report::selector select, const std::span &buffer) -{ - if (select != report::selector()) { - return; - } - // copy to buffer to avoid overwriting data in transit - auto &report = report_buffer_[report_buffer_.inactive_side()]; - assert(buffer.size() >= sizeof(report)); - memcpy(buffer.data(), report.data(), sizeof(report)); - send_report(buffer.subspan(0, sizeof(report))); -} - -#endif // DEVICE_HAS_BATTERY diff --git a/device/src/usb/hid_battery_app.hpp b/device/src/usb/hid_battery_app.hpp deleted file mode 100644 index ef92c777..00000000 --- a/device/src/usb/hid_battery_app.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef __HID_BATTERY_APP_HEADER__ -#define __HID_BATTERY_APP_HEADER__ - -#include "double_buffer.hpp" -#include "hid/application.hpp" -#include "hid/page/battery_system.hpp" -#include "hid/page/generic_desktop.hpp" -#include "hid/page/generic_device.hpp" -#include "hid/page/power.hpp" -#include "hid/rdf/descriptor.hpp" -#include "hid/report_protocol.hpp" - -class hid_battery_app : public hid::application { - hid_battery_app() : application(report_protocol()) {} - - public: - static constexpr auto report_desc() - { - using namespace hid::page; - using namespace hid::rdf; - - // clang-format off - return descriptor( - usage_page(), - usage(generic_desktop::SYSTEM_CONTROL), - collection::application( - usage_page(), - usage(battery_system::ABSOLUTE_STATE_OF_CHARGE), - logical_limits<1, 1>(0, 100), - report_size(7), - report_count(1), - input::absolute_variable(), - usage(battery_system::CHARGING), - logical_limits<1, 1>(0, 1), - report_size(1), - input::absolute_variable() - ) - ); - // clang-format off - } - - struct report : public hid::report::base - { - uint8_t remaining_capacity : 7; - bool charging : 1; - - bool operator==(const report &other) const = default; - }; - - static hid_battery_app& handle(); - - void send(uint8_t remaining_capacity, bool charging); - - void set_report(hid::report::type type, const std::span &data) override - { - // no FEATURE or OUTPUT reports - } - void get_report(hid::report::selector select, const std::span& buffer) override; - void in_report_sent(const std::span& data) override; - - private: - void send_buffer(uint8_t buf_idx); - static hid::report_protocol report_protocol() - { - static constexpr const auto rd{report_desc()}; - constexpr hid::report_protocol rp{rd}; - return rp; - } - - double_buffer report_buffer_{}; -}; - -#endif // __HID_BATTERY_APP_HEADER__ diff --git a/device/src/usb/keyboard_app.cpp b/device/src/usb/keyboard_app.cpp index 3262e10b..9d1caa04 100644 --- a/device/src/usb/keyboard_app.cpp +++ b/device/src/usb/keyboard_app.cpp @@ -1,15 +1,22 @@ #include "keyboard_app.hpp" -#include "zephyr/sys/printk.h" - extern "C" { -#include "usb/usb_compatibility.h" +#include "connections.h" +#include "usb_compatibility.h" +#include "zephyr/sys/printk.h" } -keyboard_app &keyboard_app::handle() +keyboard_app &keyboard_app::usb_handle() { static keyboard_app app{}; return app; } +#if DEVICE_IS_UHK80_RIGHT +keyboard_app &keyboard_app::ble_handle() +{ + static keyboard_app ble_app{}; + return ble_app; +} +#endif void keyboard_app::set_rollover(rollover mode) { @@ -38,7 +45,10 @@ void keyboard_app::reset_keys() } } -extern void hidmgr_set_transport(const hid::transport *tp); +static inline connection_id_t usbHidConnId() +{ + return DEVICE_IS_UHK80_LEFT ? ConnectionId_UsbHidLeft : ConnectionId_UsbHidRight; +} void keyboard_app::start(hid::protocol prot) { @@ -51,14 +61,16 @@ void keyboard_app::start(hid::protocol prot) // TODO start handling keyboard events reset_keys(); - hidmgr_set_transport(get_transport()); + Connections_SetState( + (this == &usb_handle()) ? usbHidConnId() : ConnectionId_BtHid, ConnectionState_Ready); } void keyboard_app::stop() { sending_sem_.release(); // TODO stop handling keyboard events - hidmgr_set_transport(get_transport()); + Connections_SetState((this == &usb_handle()) ? usbHidConnId() : ConnectionId_BtHid, + ConnectionState_Disconnected); } bool keyboard_app::using_nkro() const @@ -82,7 +94,7 @@ void keyboard_app::set_report_state(const keys_nkro_report_base<> &data) keys_6kro.modifiers = data.modifiers; keys_6kro.scancodes.reset(); for (auto code = LOWEST_SCANCODE; code <= HIGHEST_SCANCODE; - code = static_cast(static_cast(code) + 1)) { + code = static_cast(static_cast(code) + 1)) { keys_6kro.scancodes.set(code, data.test(code)); } } else { @@ -90,7 +102,7 @@ void keyboard_app::set_report_state(const keys_nkro_report_base<> &data) keys_6kro.modifiers = data.modifiers; keys_6kro.scancodes.reset(); for (auto code = LOWEST_SCANCODE; code <= HIGHEST_SCANCODE; - code = static_cast(static_cast(code) + 1)) { + code = static_cast(static_cast(code) + 1)) { keys_6kro.scancodes.set(code, data.test(code)); } } @@ -122,7 +134,7 @@ void keyboard_app::set_report_state(const keys_nkro_report_base<> &data) keys_.sixkro.modifiers = data.modifiers; keys_.sixkro.scancodes.reset(); for (auto code = LOWEST_SCANCODE; code <= HIGHEST_SCANCODE; - code = static_cast(static_cast(code) + 1)) { + code = static_cast(static_cast(code) + 1)) { keys_.sixkro.scancodes.set(code, data.test(code)); } @@ -149,7 +161,8 @@ void keyboard_app::set_report(hid::report::type type, const std::span; diff --git a/device/src/usb/mouse_app.cpp b/device/src/usb/mouse_app.cpp index 352d1938..d34ea117 100644 --- a/device/src/usb/mouse_app.cpp +++ b/device/src/usb/mouse_app.cpp @@ -1,11 +1,18 @@ #include "mouse_app.hpp" #include "zephyr/sys/printk.h" -mouse_app &mouse_app::handle() +mouse_app &mouse_app::usb_handle() { static mouse_app app{}; return app; } +#if DEVICE_IS_UHK80_RIGHT +mouse_app &mouse_app::ble_handle() +{ + static mouse_app ble_app{}; + return ble_app; +} +#endif void mouse_app::start(hid::protocol prot) { diff --git a/device/src/usb/mouse_app.hpp b/device/src/usb/mouse_app.hpp index 87c8259b..5bab00cd 100644 --- a/device/src/usb/mouse_app.hpp +++ b/device/src/usb/mouse_app.hpp @@ -90,7 +90,10 @@ class mouse_app : public app_base { bool operator!=(const mouse_report_base &other) const = default; }; - static mouse_app &handle(); + static mouse_app &usb_handle(); +#if DEVICE_IS_UHK80_RIGHT + static mouse_app &ble_handle(); +#endif void set_report_state(const mouse_report_base<> &data); @@ -100,7 +103,7 @@ class mouse_app : public app_base { void start(hid::protocol prot) override; using mouse_report = mouse_report_base; - C2USB_USB_TRANSFER_ALIGN(mouse_report, report_buffer_){}; + C2USB_USB_TRANSFER_ALIGN(mouse_report, report_buffer_) {}; }; using mouse_buffer = mouse_app::mouse_report_base<>; diff --git a/device/src/usb/usb.cpp b/device/src/usb/usb.cpp index 9598f6ff..a430c574 100644 --- a/device/src/usb/usb.cpp +++ b/device/src/usb/usb.cpp @@ -1,18 +1,17 @@ extern "C" { #include "usb.h" +#include "connections.h" #include "device.h" +#include "device_state.h" #include "key_states.h" #include "keyboard/charger.h" #include "keyboard/key_scanner.h" +#include "logger.h" #include "power_mode.h" #include "timer.h" +#include "usb_report_updater.h" #include "user_logic.h" -#include "logger.h" -#include #include -#include "logger.h" -#include "power_mode.h" -#include "connections.h" } #include "command_app.hpp" #include "controls_app.hpp" @@ -26,13 +25,6 @@ extern "C" { #include "usb/df/vendor/microsoft_xinput.hpp" #include -extern "C" { -#include "device_state.h" -#include "usb_report_updater.h" -} -#if DEVICE_HAS_BATTERY - #include "hid_battery_app.hpp" -#endif #if DEVICE_IS_UHK80_RIGHT #include "port/zephyr/bluetooth/hid.hpp" @@ -58,7 +50,7 @@ class multi_hid : public hid::multi_application { } private: - std::array app_array_{(&Args::handle())..., nullptr}; + std::array app_array_{(&Args::ble_handle())..., nullptr}; multi_hid() : multi_application({{}, 0, 0, 0}, app_array_) { static constexpr const auto desc = report_desc(); @@ -103,7 +95,7 @@ struct usb_manager { // attempt to avoid unnecessary races int new_conf = next_config_.fetch_and(~(launch_flag | change_flag)); for (; new_conf & (launch_flag | change_flag); - new_conf = next_config_.fetch_and(~(launch_flag | change_flag))) { + new_conf = next_config_.fetch_and(~(launch_flag | change_flag))) { k_msleep(50); // TODO: this is guesswork so far } @@ -114,15 +106,12 @@ struct usb_manager { { static constexpr auto speed = usb::speed::FULL; static usb::df::hid::function usb_kb{ - keyboard_app::handle(), usb::hid::boot_protocol_mode::KEYBOARD}; - static usb::df::hid::function usb_mouse{mouse_app::handle()}; + keyboard_app::usb_handle(), usb::hid::boot_protocol_mode::KEYBOARD}; + static usb::df::hid::function usb_mouse{mouse_app::usb_handle()}; static usb::df::hid::function usb_command{command_app::usb_handle()}; - static usb::df::hid::function usb_controls{controls_app::handle()}; - static usb::df::hid::function usb_gamepad{gamepad_app::handle()}; - static usb::df::microsoft::xfunction usb_xpad{gamepad_app::handle()}; -#if DEVICE_HAS_BATTERY - static usb::df::hid::function usb_battery{hid_battery_app::handle()}; -#endif + static usb::df::hid::function usb_controls{controls_app::usb_handle()}; + static usb::df::hid::function usb_gamepad{gamepad_app::usb_handle()}; + static usb::df::microsoft::xfunction usb_xpad{gamepad_app::usb_handle()}; constexpr auto config_header = usb::df::config::header(usb::df::config::power::bus(500, true)); @@ -130,20 +119,7 @@ struct usb_manager { usb::df::hid::config(usb_kb, speed, usb::endpoint::address(0x81), 1), usb::df::hid::config(usb_mouse, speed, usb::endpoint::address(0x82), 1), usb::df::hid::config(usb_command, speed, usb::endpoint::address(0x83), 10), - usb::df::hid::config(usb_controls, speed, usb::endpoint::address(0x84), 1) -#if DEVICE_HAS_BATTERY - , - usb::df::hid::config(usb_battery, speed, usb::endpoint::address(0x86), 1) - // not very useful at the moment -#endif - ); - static const auto inactive_config = usb::df::config::make_config(config_header, - usb::df::hid::config(usb_command, speed, usb::endpoint::address(0x83), 10) -#if DEVICE_HAS_BATTERY - , - usb::df::hid::config(usb_battery, speed, usb::endpoint::address(0x86), 1) -#endif - ); + usb::df::hid::config(usb_controls, speed, usb::endpoint::address(0x84), 1)); static const auto base_config = usb::df::config::make_config(config_header, shared_config_elems); @@ -158,19 +134,12 @@ struct usb_manager { usb_xpad, usb::endpoint::address(0x85), 1, usb::endpoint::address(0x05), 255)); printk("USB config changing to %s\n", magic_enum::enum_name(conf).data()); - switch (conf) { - case Hid_Empty: - ms_enum_.set_config({}); - device_.set_config(inactive_config); - break; - case Hid_NoGamepad: + if (conf == Hid_NoGamepad) { ms_enum_.set_config({}); device_.set_config(base_config); - break; - default: + } else { ms_enum_.set_config(xpad_config); device_.set_config(gamepad_config); - break; } device_.open(); } @@ -218,18 +187,11 @@ struct usb_manager { std::atomic next_config_{0xff}; }; -extern "C" void USB_EnableHid() +extern "C" void USB_Enable() { - printk(" === Usb Enable Hid\n"); usb_manager::instance().select_config(HID_GetGamepadActive() ? Hid_Full : Hid_NoGamepad); } -extern "C" void USB_DisableHid() -{ - printk(" === Usb Disable Hid\n"); - usb_manager::instance().select_config(Hid_Empty); -} - extern "C" void USB_RemoteWakeup() { printk("USB: requesting remote wakeup\n"); @@ -312,34 +274,6 @@ bool app_base::active() const return usb_manager::instance().device().power_state() == usb::power::state::L0_ON; } -void hidmgr_set_transport(const hid::transport *tp) -{ - connection_id_t usbHidConnId = DEVICE_IS_UHK80_LEFT ? ConnectionId_UsbHidLeft : ConnectionId_UsbHidRight; - - // tp is the transport of the keyboard app - if (tp == nullptr) { - printk(" === set transport null\n"); - bool btIsConnected = Connections_GetState(ConnectionId_BtHid) != ConnectionState_Disconnected; - connection_state_t btState = btIsConnected ? ConnectionState_Connected : ConnectionState_Disconnected; - Connections_SetState(ConnectionId_BtHid, btState); - Connections_SetState(usbHidConnId, ConnectionState_Disconnected); - } -#if DEVICE_IS_UHK80_RIGHT - else if (tp == &hogp_manager::instance().main_service()) { - printk(" === set transport hogp\n"); - Connections_SetState(ConnectionId_BtHid, ConnectionState_Ready); - Connections_SetState(usbHidConnId, ConnectionState_Disconnected); - } -#endif - else { - printk(" === set transport usb\n"); - bool btIsConnected = Connections_GetState(ConnectionId_BtHid) != ConnectionState_Disconnected; - connection_state_t btState = btIsConnected ? ConnectionState_Connected : ConnectionState_Disconnected; - Connections_SetState(ConnectionId_BtHid, btState); - Connections_SetState(usbHidConnId, ConnectionState_Ready); - } -} - static bool gamepadActive = true; extern "C" bool HID_GetGamepadActive() @@ -351,7 +285,7 @@ extern "C" void HID_SetGamepadActive(bool active) { gamepadActive = active; if (usb_manager::active()) { - USB_EnableHid(); + USB_Enable(); } #if DEVICE_IS_UHK80_RIGHT if (hogp_manager::active()) { @@ -364,12 +298,15 @@ extern "C" rollover_t HID_GetKeyboardRollover() { static_assert(((uint8_t)Rollover_6Key == (uint8_t)keyboard_app::rollover::SIX_KEY) && ((uint8_t)Rollover_NKey == (uint8_t)keyboard_app::rollover::N_KEY)); - return (rollover_t)keyboard_app::handle().get_rollover(); + return (rollover_t)keyboard_app::usb_handle().get_rollover(); } extern "C" void HID_SetKeyboardRollover(rollover_t mode) { - keyboard_app::handle().set_rollover((keyboard_app::rollover)mode); + keyboard_app::usb_handle().set_rollover((keyboard_app::rollover)mode); +#if DEVICE_IS_UHK80_RIGHT + keyboard_app::ble_handle().set_rollover((keyboard_app::rollover)mode); +#endif } extern "C" void USB_SetSerialNumber(uint32_t serialNumber) diff --git a/device/src/usb/usb.h b/device/src/usb/usb.h index fb8e0036..90f70ede 100644 --- a/device/src/usb/usb.h +++ b/device/src/usb/usb.h @@ -33,8 +33,7 @@ bool HID_GetGamepadActive(void); void HOGP_Enable(void); void HOGP_Disable(void); - void USB_DisableHid(void); - void USB_EnableHid(void); + void USB_Enable(void); void USB_SetSerialNumber(uint32_t serialNumber); void USB_RemoteWakeup(void); diff --git a/device/src/usb/usb_compatibility.cpp b/device/src/usb/usb_compatibility.cpp index b99f658f..e14a9868 100644 --- a/device/src/usb/usb_compatibility.cpp +++ b/device/src/usb/usb_compatibility.cpp @@ -23,20 +23,10 @@ extern "C" { #include "mouse_app.hpp" #include "usb/df/class/hid.hpp" -static scancode_buffer keys; -static mouse_buffer mouseState; static controls_buffer controls; keyboard_led_state_t KeyboardLedsState; - /* - gamepad.set_button(gamepad_button::X, KeyStates[CURRENT_SLOT_ID][3].current); - // gamepad.left.X = 50; - // gamepad.right.Y = 50; - // gamepad.right_trigger = 50; - gamepad_app::handle().set_report_state(gamepad); - */ - static bool sendOverC2usb() { if (DEVICE_IS_UHK_DONGLE) { return true; @@ -67,11 +57,12 @@ static bool sendOverC2usb() { extern "C" void UsbCompatibility_SendKeyboardReport(const usb_basic_keyboard_report_t* report) { - keyboard_app &keyboard_app = keyboard_app::handle(); + keyboard_app *keyboard_app = &keyboard_app::usb_handle(); + // TODO: keyboard_app = &keyboard_app::ble_handle(); if (sendOverC2usb()) { printk("Handing report over to c2usb!\n"); - keyboard_app.set_report_state(*reinterpret_cast(report)); + keyboard_app->set_report_state(*reinterpret_cast(report)); } else if (DEVICE_IS_UHK80_RIGHT){ Messenger_Send2(DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_KeyboardReport, (const uint8_t*)report, sizeof(*report)); } @@ -79,10 +70,11 @@ extern "C" void UsbCompatibility_SendKeyboardReport(const usb_basic_keyboard_rep extern "C" void UsbCompatibility_SendMouseReport(const usb_mouse_report_t *report) { - mouse_app &mouse_app = mouse_app::handle(); + mouse_app *mouse_app = &mouse_app::usb_handle(); + // TODO: mouse_app = &mouse_app::ble_handle(); if (sendOverC2usb()) { - mouse_app.set_report_state(*reinterpret_cast(report)); + mouse_app->set_report_state(*reinterpret_cast(report)); } else if (DEVICE_IS_UHK80_RIGHT) { Messenger_Send2(DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_MouseReport, (const uint8_t*)report, sizeof(*report)); } @@ -103,10 +95,11 @@ extern "C" void UsbCompatibility_SendConsumerReport(const usb_media_keyboard_rep } UsbSystemKeyboard_ForeachScancode(systemReport, &UsbCompatibility_ConsumerKeyboardAddScancode); - controls_app &controls_app = controls_app::handle(); + controls_app *controls_app = &controls_app::usb_handle(); + // TODO: controls_app = &controls_app::ble_handle(); if (sendOverC2usb()) { - controls_app.set_report_state(controls); + controls_app->set_report_state(controls); } else if (DEVICE_IS_UHK80_RIGHT) { Messenger_Send2(DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_ControlsReport, (const uint8_t*)(&controls), sizeof(controls)); } @@ -114,20 +107,18 @@ extern "C" void UsbCompatibility_SendConsumerReport(const usb_media_keyboard_rep extern "C" void UsbCompatibility_SendConsumerReport2(const uint8_t *report) { - controls_app &controls_app = controls_app::handle(); + controls_app *controls_app = &controls_app::usb_handle(); + // TODO: controls_app = &controls_app::ble_handle(); - if (controls_app.active()) { - controls_app.set_report_state(*(const controls_buffer *)report); + if (controls_app->active()) { + controls_app->set_report_state(*(const controls_buffer *)report); } } -extern "C" bool UsbCompatibility_UsbConnected() -{ - return keyboard_app::handle().has_transport(); -} - -extern "C" void UsbCompatibility_SetKeyboardLedsState(bool capsLock, bool numLock, bool scrollLock) +extern "C" void UsbCompatibility_SetKeyboardLedsState( + connection_id_t connectionId, bool capsLock, bool numLock, bool scrollLock) { + // TODO: deal with connectionId if (KeyboardLedsState.capsLock != capsLock) { KeyboardLedsState.capsLock = capsLock; UsbBasicKeyboard_CapsLockOn = capsLock; diff --git a/device/src/usb/usb_compatibility.h b/device/src/usb/usb_compatibility.h index 7f94758a..866cdbeb 100644 --- a/device/src/usb/usb_compatibility.h +++ b/device/src/usb/usb_compatibility.h @@ -9,6 +9,7 @@ #include "usb_interfaces/usb_interface_media_keyboard.h" #include "usb_interfaces/usb_interface_system_keyboard.h" #include "usb_interfaces/usb_interface_mouse.h" + #include "connections.h" // Macros: @@ -30,7 +31,6 @@ void UsbCompatibility_SendMouseReport(const usb_mouse_report_t* report) ; void UsbCompatibility_SendConsumerReport(const usb_media_keyboard_report_t* mediaReport, const usb_system_keyboard_report_t* systemReport); void UsbCompatibility_SendConsumerReport2(const uint8_t* report); - void UsbCompatibility_SetKeyboardLedsState(bool capsLock, bool numLock, bool scrollLock); - bool UsbCompatibility_UsbConnected(); + void UsbCompatibility_SetKeyboardLedsState(connection_id_t connectionId, bool capsLock, bool numLock, bool scrollLock); #endif // __USB_HEADER__