summaryrefslogtreecommitdiff
path: root/shared-module/usb_hid
diff options
context:
space:
mode:
authorBenjamin Shockley <benjaminshockley@hotmail.com>2020-08-20 13:48:15 -0500
committerGitHub <noreply@github.com>2020-08-20 13:48:15 -0500
commit0084f0af24e4e219bc040c52ee723959423de6e2 (patch)
tree1aebdb362f08bf6417caa87836e3e4e739afc964 /shared-module/usb_hid
parent9aebe2f1efc99871fcf283c304e3a8700050d736 (diff)
parent4d7b9cde33934a44c4c905a49d2f831339fc8bd2 (diff)
Merge pull request #2 from adafruit/master
Master
Diffstat (limited to 'shared-module/usb_hid')
-rw-r--r--shared-module/usb_hid/Device.c37
-rw-r--r--shared-module/usb_hid/__init__.c129
2 files changed, 24 insertions, 142 deletions
diff --git a/shared-module/usb_hid/Device.c b/shared-module/usb_hid/Device.c
index 820e14ad0..8e9df6f04 100644
--- a/shared-module/usb_hid/Device.c
+++ b/shared-module/usb_hid/Device.c
@@ -25,11 +25,12 @@
*/
#include <string.h>
-#include "tick.h"
+
#include "py/runtime.h"
#include "shared-bindings/usb_hid/Device.h"
#include "shared-module/usb_hid/Device.h"
#include "supervisor/shared/translate.h"
+#include "supervisor/shared/tick.h"
#include "tusb.h"
uint8_t common_hal_usb_hid_device_get_usage_page(usb_hid_device_obj_t *self) {
@@ -46,41 +47,49 @@ void common_hal_usb_hid_device_send_report(usb_hid_device_obj_t *self, uint8_t*
}
// Wait until interface is ready, timeout = 2 seconds
- uint64_t end_ticks = ticks_ms + 2000;
- while ( (ticks_ms < end_ticks) && !tud_hid_generic_ready() ) { }
+ uint64_t end_ticks = supervisor_ticks_ms64() + 2000;
+ while ( (supervisor_ticks_ms64() < end_ticks) && !tud_hid_ready() ) {
+ RUN_BACKGROUND_TASKS;
+ }
- if ( !tud_hid_generic_ready() ) {
+ if ( !tud_hid_ready() ) {
mp_raise_msg(&mp_type_OSError, translate("USB Busy"));
}
memcpy(self->report_buffer, report, len);
- if ( !tud_hid_generic_report(self->report_id, self->report_buffer, len) ) {
+ if ( !tud_hid_report(self->report_id, self->report_buffer, len) ) {
mp_raise_msg(&mp_type_OSError, translate("USB Error"));
}
}
+static usb_hid_device_obj_t* get_hid_device(uint8_t report_id) {
+ for (uint8_t i = 0; i < USB_HID_NUM_DEVICES; i++) {
+ if (usb_hid_devices[i].report_id == report_id) {
+ return &usb_hid_devices[i];
+ }
+ }
+ return NULL;
+}
+
// Callbacks invoked when receive Get_Report request through control endpoint
-uint16_t tud_hid_generic_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) {
+uint16_t tud_hid_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) {
// only support Input Report
if ( report_type != HID_REPORT_TYPE_INPUT ) return 0;
- // index is ID-1
- uint8_t idx = ( report_id ? (report_id-1) : 0 );
-
// fill buffer with current report
- memcpy(buffer, usb_hid_devices[idx].report_buffer, reqlen);
+ memcpy(buffer, get_hid_device(report_id)->report_buffer, reqlen);
return reqlen;
}
// Callbacks invoked when receive Set_Report request through control endpoint
-void tud_hid_generic_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) {
- // index is ID-1
- uint8_t idx = ( report_id ? (report_id-1) : 0 );
+void tud_hid_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) {
+ usb_hid_device_obj_t* hid_device = get_hid_device(report_id);
if ( report_type == HID_REPORT_TYPE_OUTPUT ) {
// Check if it is Keyboard device
- if ( (usb_hid_devices[idx].usage_page == HID_USAGE_PAGE_DESKTOP) && (usb_hid_devices[idx].usage == HID_USAGE_DESKTOP_KEYBOARD) ) {
+ if (hid_device->usage_page == HID_USAGE_PAGE_DESKTOP &&
+ hid_device->usage == HID_USAGE_DESKTOP_KEYBOARD) {
// This is LED indicator (CapsLock, NumLock)
// TODO Light up some LED here
}
diff --git a/shared-module/usb_hid/__init__.c b/shared-module/usb_hid/__init__.c
index f14fdd41e..d88f9787a 100644
--- a/shared-module/usb_hid/__init__.c
+++ b/shared-module/usb_hid/__init__.c
@@ -24,131 +24,4 @@
* THE SOFTWARE.
*/
-#include "py/obj.h"
-#include "py/mphal.h"
-#include "py/runtime.h"
-
-#include "genhdr/autogen_usb_descriptor.h"
-#include "shared-module/usb_hid/Device.h"
-#include "shared-bindings/usb_hid/Device.h"
-#include "tusb.h"
-
-#ifdef USB_HID_REPORT_ID_KEYBOARD
-static uint8_t keyboard_report_buffer[USB_HID_REPORT_LENGTH_KEYBOARD];
-#endif
-
-#ifdef USB_HID_REPORT_ID_MOUSE
-static uint8_t mouse_report_buffer[USB_HID_REPORT_LENGTH_MOUSE];
-#endif
-
-#ifdef USB_HID_REPORT_ID_CONSUMER
-static uint8_t consumer_report_buffer[USB_HID_REPORT_LENGTH_CONSUMER];
-#endif
-
-#ifdef USB_HID_REPORT_ID_SYS_CONTROL
-static uint8_t sys_control_report_buffer[USB_HID_REPORT_LENGTH_SYS_CONTROL];
-#endif
-
-#ifdef USB_HID_REPORT_ID_GAMEPAD
-static uint8_t gamepad_report_buffer[USB_HID_REPORT_LENGTH_GAMEPAD];
-#endif
-
-#ifdef USB_HID_REPORT_ID_DIGITIZER
-static uint8_t digitizer_report_buffer[USB_HID_REPORT_LENGTH_DIGITIZER];
-#endif
-
-usb_hid_device_obj_t usb_hid_devices[] = {
-#ifdef USB_HID_REPORT_ID_KEYBOARD
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = keyboard_report_buffer ,
- .report_id = USB_HID_REPORT_ID_KEYBOARD ,
- .report_length = USB_HID_REPORT_LENGTH_KEYBOARD ,
- .usage_page = HID_USAGE_PAGE_DESKTOP ,
- .usage = HID_USAGE_DESKTOP_KEYBOARD ,
- },
-#endif
-
-#ifdef USB_HID_REPORT_ID_MOUSE
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = mouse_report_buffer ,
- .report_id = USB_HID_REPORT_ID_MOUSE ,
- .report_length = USB_HID_REPORT_LENGTH_MOUSE ,
- .usage_page = HID_USAGE_PAGE_DESKTOP ,
- .usage = HID_USAGE_DESKTOP_MOUSE ,
- },
-#endif
-
-#ifdef USB_HID_REPORT_ID_CONSUMER
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = consumer_report_buffer ,
- .report_id = USB_HID_REPORT_ID_CONSUMER ,
- .report_length = USB_HID_REPORT_LENGTH_CONSUMER ,
- .usage_page = HID_USAGE_PAGE_CONSUMER ,
- .usage = HID_USAGE_CONSUMER_CONTROL ,
- },
-#endif
-
-#ifdef USB_HID_REPORT_ID_SYS_CONTROL
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = sys_control_report_buffer ,
- .report_id = USB_HID_REPORT_ID_SYS_CONTROL ,
- .report_length = USB_HID_REPORT_LENGTH_SYS_CONTROL ,
- .usage_page = HID_USAGE_PAGE_DESKTOP ,
- .usage = HID_USAGE_DESKTOP_SYSTEM_CONTROL ,
- },
-#endif
-
-#ifdef USB_HID_REPORT_ID_GAMEPAD
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = gamepad_report_buffer ,
- .report_id = USB_HID_REPORT_ID_GAMEPAD ,
- .report_length = USB_HID_REPORT_LENGTH_GAMEPAD ,
- .usage_page = HID_USAGE_PAGE_DESKTOP ,
- .usage = HID_USAGE_DESKTOP_GAMEPAD ,
- },
-#endif
-
-#ifdef USB_HID_REPORT_ID_DIGITIZER
- {
- .base = { .type = &usb_hid_device_type } ,
- .report_buffer = digitizer_report_buffer ,
- .report_id = USB_HID_REPORT_ID_DIGITIZER ,
- .report_length = USB_HID_REPORT_LENGTH_DIGITIZER ,
- .usage_page = 0x0D ,
- .usage = 0x02 ,
- },
-#endif
-};
-
-
-mp_obj_tuple_t common_hal_usb_hid_devices = {
- .base = {
- .type = &mp_type_tuple,
- },
- .len = USB_HID_NUM_DEVICES,
- .items = {
-#if USB_HID_NUM_DEVICES >= 1
- (mp_obj_t) &usb_hid_devices[0],
-#endif
-#if USB_HID_NUM_DEVICES >= 2
- (mp_obj_t) &usb_hid_devices[1],
-#endif
-#if USB_HID_NUM_DEVICES >= 3
- (mp_obj_t) &usb_hid_devices[2],
-#endif
-#if USB_HID_NUM_DEVICES >= 4
- (mp_obj_t) &usb_hid_devices[3],
-#endif
-#if USB_HID_NUM_DEVICES >= 5
- (mp_obj_t) &usb_hid_devices[4],
-#endif
-#if USB_HID_NUM_DEVICES >= 6
- (mp_obj_t) &usb_hid_devices[5],
-#endif
- }
-};
+// Nothing needed here. Tables of HID devices are generated in autogen_usb_descriptor.c at compile-time.