Index: firmware/usbstack/usb_hid.c =================================================================== --- firmware/usbstack/usb_hid.c (revision 24309) +++ firmware/usbstack/usb_hid.c (working copy) @@ -25,7 +25,7 @@ #include "kernel.h" #include "usb_hid.h" #include "usb_class_driver.h" -/*#define LOGF_ENABLE*/ +#define LOGF_ENABLE #include "logf.h" /* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */ @@ -180,6 +180,7 @@ static int cur_buf_send; static bool active = false; +static bool currently_sending = false; static int ep_in; static int usb_interface; @@ -595,6 +596,7 @@ logf("hid: init connection"); active = true; + currently_sending = false; } /* called by usb_core_init() */ @@ -611,12 +613,14 @@ cur_buf_send = 0; active = true; + currently_sending = false; } void usb_hid_disconnect(void) { logf("hid: disconnect"); active = false; + currently_sending = false; } /* called by usb_core_transfer_complete() */ @@ -627,6 +631,7 @@ (void)status; (void)length; + logf("HID: transfer complete: %d %d %d %d",ep,dir,status,length); switch (dir) { case USB_DIR_OUT: @@ -638,6 +643,7 @@ send_buffer_len[cur_buf_send] = 0; HID_BUF_INC(cur_buf_send); + currently_sending = false; usb_hid_try_send_drv(); break; } @@ -787,7 +793,15 @@ if (!length) return; + if (currently_sending) + { + logf("HID: Already sending"); + return; + } + + logf("HID: Sending %d bytes",length); rc = usb_drv_send_nonblocking(ep_in, send_buffer[cur_buf_send], length); + currently_sending = true; if (rc) { send_buffer_len[cur_buf_send] = 0;