diff options
| author | hathach <[email protected]> | 2018-07-31 13:31:03 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-07-31 13:31:03 +0700 |
| commit | 1a0ffcee25566c03cc267c96cceb7a0189d2b026 (patch) | |
| tree | c3654442341baef6f1ae630fbb7abaa33c1e29bd /src/class | |
| parent | 8eeee22ffc82bd63adc85a36bd6194d0fd879c11 (diff) | |
add tud_hid_generic_report()
Diffstat (limited to 'src/class')
| -rw-r--r-- | src/class/hid/hid_device.c | 44 | ||||
| -rw-r--r-- | src/class/hid/hid_device.h | 2 |
2 files changed, 33 insertions, 13 deletions
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index d6671e4f3..e52952e08 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -53,7 +53,13 @@ //--------------------------------------------------------------------+
// Max report len is keyboard's one with 8 byte + 1 byte report id
-#define REPORT_BUFSIZE 9
+#define REPORT_BUFSIZE 12
+
+
+#define ITF_IDX_BOOT_KBD 0
+#define ITF_IDX_BOOT_MSE ( ITF_IDX_BOOT_KBD + (CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT) )
+#define ITF_IDX_GENERIC ( ITF_IDX_BOOT_MSE + (CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT) )
+#define ITF_COUNT ( ITF_IDX_GENERIC + TUD_OPT_HID_GENERIC )
typedef struct
{
@@ -85,12 +91,6 @@ typedef struct hidd_interface_t* itf;
} hidd_report_t ;
-
-#define ITF_IDX_BOOT_KBD 0
-#define ITF_IDX_BOOT_MSE ( ITF_IDX_BOOT_KBD + (CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT) )
-#define ITF_IDX_GENERIC ( ITF_IDX_BOOT_MSE + (CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT) )
-#define ITF_COUNT ( ITF_IDX_GENERIC + TUD_OPT_HID_GENERIC )
-
CFG_TUSB_ATTR_USBRAM static hidd_interface_t _hidd_itf[ITF_COUNT];
@@ -102,7 +102,7 @@ static hidd_report_t _kbd_rpt; static hidd_report_t _mse_rpt;
#endif
-/*------------- -------------*/
+/*------------- Helpers -------------*/
static inline hidd_interface_t* get_interface_by_itfnum(uint8_t itf_num)
{
@@ -118,15 +118,35 @@ static inline hidd_interface_t* get_interface_by_itfnum(uint8_t itf_num) //--------------------------------------------------------------------+
// HID GENERIC API
//--------------------------------------------------------------------+
+#if TUD_OPT_HID_GENERIC
+
bool tud_hid_generic_ready(void)
{
-#if TUD_OPT_HID_GENERIC
return (_hidd_itf[ITF_IDX_GENERIC].ep_in != 0) && !dcd_edpt_busy(TUD_OPT_RHPORT, _hidd_itf[ITF_IDX_GENERIC].ep_in);
-#else
- return false;
-#endif
}
+bool tud_hid_generic_report(uint8_t report_id, void const* report, uint8_t len)
+{
+ VERIFY( tud_hid_generic_ready() && (len < REPORT_BUFSIZE) );
+
+ hidd_interface_t * p_hid = &_hidd_itf[ITF_IDX_GENERIC];
+
+ // If report id = 0, skip ID field
+ if (report_id)
+ {
+ p_hid->report_buf[0] = report_id;
+ memcpy(p_hid->report_buf+1, report, len);
+ }else
+ {
+ memcpy(p_hid->report_buf, report, len);
+ }
+
+ // TODO idle rate
+ return dcd_edpt_xfer(TUD_OPT_RHPORT, p_hid->ep_in, p_hid->report_buf, len + ( report_id ? 1 : 0) );
+}
+
+#endif // TUD_OPT_HID_GENERIC
+
//--------------------------------------------------------------------+
// KEYBOARD APPLICATION API
//--------------------------------------------------------------------+
diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 5f21878e0..43181b1a9 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -71,7 +71,7 @@ // HID GENERIC API
//--------------------------------------------------------------------+
bool tud_hid_generic_ready(void);
-bool tud_hid_generic_report(void);
+bool tud_hid_generic_report(uint8_t report_id, void const* report, uint8_t len);
/*------------- Callbacks -------------*/
ATTR_WEAK uint16_t tud_hid_generic_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen);
|
