From 21ab86a574f8ceb80ff585aeffe60847ad442b24 Mon Sep 17 00:00:00 2001 From: gaoyichuan Date: Wed, 25 May 2022 09:51:58 +0800 Subject: [PATCH 1/4] add fido hid descriptors --- src/class/hid/hid.h | 9 +++++++++ src/class/hid/hid_device.h | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/class/hid/hid.h b/src/class/hid/hid.h index 44a464be11..296664f623 100644 --- a/src/class/hid/hid.h +++ b/src/class/hid/hid.h @@ -708,6 +708,7 @@ enum { HID_USAGE_PAGE_MSR = 0x8e, HID_USAGE_PAGE_CAMERA = 0x90, HID_USAGE_PAGE_ARCADE = 0x91, + HID_USAGE_PAGE_FIDO_ALLIANCE = 0xF1D0, HID_USAGE_PAGE_VENDOR = 0xFF00 // 0xFF00 - 0xFFFF }; @@ -844,6 +845,14 @@ enum HID_USAGE_CONSUMER_AC_PAN = 0x0238, }; +/// HID Usage Table: FIDO Alliance Page (0xF1D0) +enum +{ + HID_USAGE_FIDO_U2F_AUTHENTICATOR_DEVICE = 0x01, + HID_USAGE_FIDO_INPUT_REPORT_DATA = 0x20, + HID_USAGE_FIDO_OUTPUT_REPORT_DATA = 0x21 +}; + /*-------------------------------------------------------------------- * ASCII to KEYCODE Conversion * Expand to array of [128][2] (shift, keycode) diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 078b67349d..e6514ac344 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -352,6 +352,29 @@ static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ +// FIDO U2F Authenticator Descriptor Template +#define TUD_HID_REPORT_DESC_FIDO_U2F(...) \ + HID_USAGE_PAGE_N ( HID_USAGE_PAGE_FIDO_ALLIANCE, 2 ) ,\ + HID_USAGE ( HID_USAGE_FIDO_U2F_AUTHENTICATOR_DEVICE ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + /* Report ID if any */ \ + __VA_ARGS__ \ + /* Usage Data In */ \ + HID_USAGE_PAGE ( HID_USAGE_FIDO_INPUT_REPORT_DATA ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 255 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( 64 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + /* Usage Data Out */ \ + HID_USAGE_PAGE ( HID_USAGE_FIDO_OUTPUT_REPORT_DATA ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX ( 255 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( 64 ) ,\ + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + HID_COLLECTION_END \ + // HID Generic Input & Output // - 1st parameter is report size (mandatory) // - 2nd parameter is report id HID_REPORT_ID(n) (optional) From 030b34a914d0c6436d34aa510461724d50f77c1d Mon Sep 17 00:00:00 2001 From: gaoyichuan Date: Thu, 26 May 2022 15:52:25 +0800 Subject: [PATCH 2/4] fix fido hid report descriptor format --- src/class/hid/hid_device.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index e6514ac344..15c7e4b1b8 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -360,19 +360,19 @@ static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y /* Report ID if any */ \ __VA_ARGS__ \ /* Usage Data In */ \ - HID_USAGE_PAGE ( HID_USAGE_FIDO_INPUT_REPORT_DATA ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 255 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( 64 ) ,\ - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + HID_USAGE ( HID_USAGE_FIDO_INPUT_REPORT_DATA ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX_N ( 255, 2 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( 64 ) ,\ + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* Usage Data Out */ \ - HID_USAGE_PAGE ( HID_USAGE_FIDO_OUTPUT_REPORT_DATA ) ,\ - HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX ( 255 ) ,\ - HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( 64 ) ,\ - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ + HID_USAGE ( HID_USAGE_FIDO_OUTPUT_REPORT_DATA ) ,\ + HID_LOGICAL_MIN ( 0 ) ,\ + HID_LOGICAL_MAX_N ( 255, 2 ) ,\ + HID_REPORT_SIZE ( 8 ) ,\ + HID_REPORT_COUNT ( 64 ) ,\ + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \ // HID Generic Input & Output From 085412cd6b61286bad4a7d32081e619964f0f231 Mon Sep 17 00:00:00 2001 From: gaoyichuan Date: Thu, 28 Jul 2022 10:12:29 +0800 Subject: [PATCH 3/4] fix build with older nrfx api --- src/portable/nordic/nrf5x/dcd_nrf5x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c index 430d8ededa..f9d26b4440 100644 --- a/src/portable/nordic/nrf5x/dcd_nrf5x.c +++ b/src/portable/nordic/nrf5x/dcd_nrf5x.c @@ -912,7 +912,7 @@ static bool hfclk_running(void) } #endif - return nrf_clock_hf_is_running(NRF_CLOCK, NRF_CLOCK_HFCLK_HIGH_ACCURACY); + return nrf_clock_hf_is_running(NRF_CLOCK_HFCLK_HIGH_ACCURACY); } static void hfclk_enable(void) @@ -933,8 +933,8 @@ static void hfclk_enable(void) } #endif - nrf_clock_event_clear(NRF_CLOCK, NRF_CLOCK_EVENT_HFCLKSTARTED); - nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTART); + nrf_clock_event_clear(NRF_CLOCK_EVENT_HFCLKSTARTED); + nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTART); #endif } @@ -953,7 +953,7 @@ static void hfclk_disable(void) } #endif - nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTOP); + nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTOP); #endif } From af0e7a8a2fbfa7eef2c097b477464314e5266123 Mon Sep 17 00:00:00 2001 From: gaoyichuan Date: Sat, 15 Oct 2022 19:22:21 +0800 Subject: [PATCH 4/4] hid: add configurable report size for fido --- src/class/hid/hid_device.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index d6cf27bd80..a9f47d6442 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -353,7 +353,9 @@ static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y HID_COLLECTION_END \ // FIDO U2F Authenticator Descriptor Template -#define TUD_HID_REPORT_DESC_FIDO_U2F(...) \ +// - 1st parameter is report size, which is 64 bytes maximum in U2F +// - 2nd parameter is HID_REPORT_ID(n) (optional) +#define TUD_HID_REPORT_DESC_FIDO_U2F(report_size, ...) \ HID_USAGE_PAGE_N ( HID_USAGE_PAGE_FIDO_ALLIANCE, 2 ) ,\ HID_USAGE ( HID_USAGE_FIDO_U2F_AUTHENTICATOR_DEVICE ) ,\ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ @@ -362,16 +364,16 @@ static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y /* Usage Data In */ \ HID_USAGE ( HID_USAGE_FIDO_INPUT_REPORT_DATA ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX_N ( 255, 2 ) ,\ + HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( 64 ) ,\ + HID_REPORT_COUNT ( report_size ) ,\ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ /* Usage Data Out */ \ HID_USAGE ( HID_USAGE_FIDO_OUTPUT_REPORT_DATA ) ,\ HID_LOGICAL_MIN ( 0 ) ,\ - HID_LOGICAL_MAX_N ( 255, 2 ) ,\ + HID_LOGICAL_MAX_N ( 0xff, 2 ) ,\ HID_REPORT_SIZE ( 8 ) ,\ - HID_REPORT_COUNT ( 64 ) ,\ + HID_REPORT_COUNT ( report_size ) ,\ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ HID_COLLECTION_END \