usb: hid: fix write to interrupt IN endpoint

A HID application can no longer write to the default
interrupt IN endpoint because the addresses are assigned
dynamically. Add hid_int_ep_write() function  and leave
it to the hid-core to call the usb_write() with the correct
endpoint address.

fixes: #8424

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
This commit is contained in:
Johann Fischer 2018-06-16 01:35:51 +02:00 committed by Carles Cufí
commit 085a8b75c5
4 changed files with 14 additions and 4 deletions

View file

@ -154,6 +154,9 @@ struct hid_ops {
void usb_hid_register_device(const u8_t *desc, size_t size, void usb_hid_register_device(const u8_t *desc, size_t size,
const struct hid_ops *op); const struct hid_ops *op);
/* Write to hid interrupt endpoint */
int hid_int_ep_write(const u8_t *data, u32_t data_len, u32_t *bytes_ret);
/* Initialize USB HID */ /* Initialize USB HID */
int usb_hid_init(void); int usb_hid_init(void);

View file

@ -153,7 +153,6 @@ void main(void)
k_sem_take(&sem, K_FOREVER); k_sem_take(&sem, K_FOREVER);
report[0] = status; report[0] = status;
usb_write(CONFIG_HID_INT_EP_ADDR, report, hid_int_ep_write(report, sizeof(report), NULL);
sizeof(report), NULL);
} }
} }

View file

@ -108,8 +108,7 @@ void main(void)
report_1[1]++; report_1[1]++;
ret = usb_write(CONFIG_HID_INT_EP_ADDR, report_1, ret = hid_int_ep_write(report_1, sizeof(report_1), &wrote);
sizeof(report_1), &wrote);
SYS_LOG_DBG("Wrote %d bytes with ret %d", wrote, ret); SYS_LOG_DBG("Wrote %d bytes with ret %d", wrote, ret);
} }
} }

View file

@ -17,6 +17,9 @@
#include <usb_descriptor.h> #include <usb_descriptor.h>
#include <class/usb_hid.h> #include <class/usb_hid.h>
#define HID_INT_IN_EP_IDX 0
#define HID_INT_OUT_EP_IDX 1
struct usb_hid_config { struct usb_hid_config {
struct usb_if_descriptor if0; struct usb_if_descriptor if0;
struct usb_hid_descriptor if0_hid; struct usb_hid_descriptor if0_hid;
@ -270,3 +273,9 @@ void usb_hid_register_device(const u8_t *desc, size_t size,
hid_device.ops = ops; hid_device.ops = ops;
} }
int hid_int_ep_write(const u8_t *data, u32_t data_len, u32_t *bytes_ret)
{
return usb_write(hid_ep_data[HID_INT_IN_EP_IDX].ep_addr, data,
data_len, bytes_ret);
}