summaryrefslogtreecommitdiff
path: root/ports/stm32/usbd_hid_interface.c
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2018-07-11 16:45:30 -0400
committerDan Halbert <halbert@halwitz.org>2018-07-11 16:45:30 -0400
commit7c219600a246d8956d0b23ea3f5d125a820e6b6a (patch)
tree4cf793a66284322d48a8f430815c31cd1c9ffa1d /ports/stm32/usbd_hid_interface.c
parent4962468ffffac9ec4e36b2b1fc3f132516df3127 (diff)
parent25ae98f07cb3c4488cb955403dfe56b8bb8db6f0 (diff)
WIP: after merge; before testing
Diffstat (limited to 'ports/stm32/usbd_hid_interface.c')
-rw-r--r--ports/stm32/usbd_hid_interface.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/ports/stm32/usbd_hid_interface.c b/ports/stm32/usbd_hid_interface.c
index 4ee533c21..3ffc0b425 100644
--- a/ports/stm32/usbd_hid_interface.c
+++ b/ports/stm32/usbd_hid_interface.c
@@ -42,8 +42,9 @@
#include "irq.h"
#include "usb.h"
-uint8_t *usbd_hid_init(usbd_hid_itf_t *hid, usbd_cdc_msc_hid_state_t *usbd) {
- hid->usbd = usbd;
+uint8_t *usbd_hid_init(usbd_hid_state_t *hid_in) {
+ usbd_hid_itf_t *hid = (usbd_hid_itf_t*)hid_in;
+
hid->current_read_buffer = 0;
hid->last_read_len = 0;
hid->current_write_buffer = 0;
@@ -55,13 +56,15 @@ uint8_t *usbd_hid_init(usbd_hid_itf_t *hid, usbd_cdc_msc_hid_state_t *usbd) {
// Data received over USB OUT endpoint is processed here.
// len: number of bytes received into the buffer we passed to USBD_HID_ReceivePacket
// Returns USBD_OK if all operations are OK else USBD_FAIL
-int8_t usbd_hid_receive(usbd_hid_itf_t *hid, size_t len) {
+int8_t usbd_hid_receive(usbd_hid_state_t *hid_in, size_t len) {
+ usbd_hid_itf_t *hid = (usbd_hid_itf_t*)hid_in;
+
hid->current_write_buffer = !hid->current_write_buffer;
hid->last_read_len = len;
// initiate next USB packet transfer, to append to existing data in buffer
- USBD_HID_ReceivePacket(hid->usbd, hid->buffer[hid->current_write_buffer]);
+ USBD_HID_ReceivePacket(&hid->base, hid->buffer[hid->current_write_buffer]);
// Set NAK to indicate we need to process read buffer
- USBD_HID_SetNAK(hid->usbd);
+ USBD_HID_SetNAK(&hid->base);
return USBD_OK;
}
@@ -94,12 +97,13 @@ int usbd_hid_rx(usbd_hid_itf_t *hid, size_t len, uint8_t *buf, uint32_t timeout)
}
// Copy bytes from device to user buffer
- memcpy(buf, hid->buffer[hid->current_read_buffer], hid->last_read_len);
+ int read_len = hid->last_read_len;
+ memcpy(buf, hid->buffer[hid->current_read_buffer], read_len);
hid->current_read_buffer = !hid->current_read_buffer;
// Clear NAK to indicate we are ready to read more data
- USBD_HID_ClearNAK(hid->usbd);
+ USBD_HID_ClearNAK(&hid->base);
// Success, return number of bytes read
- return hid->last_read_len;
+ return read_len;
}