@@ -19,6 +19,7 @@ extern "C" {
1919#include " led_display.h"
2020#include " jitter_test.h"
2121#include " usb_state.h"
22+ #include " utils.h"
2223}
2324#include " command_app.hpp"
2425#include " controls_app.hpp"
@@ -173,6 +174,9 @@ extern "C" errno_t Hid_SendKeyboardReport(const hid_keyboard_report_t *report)
173174 noteReportDispatched (sink);
174175 Trace_Printf (" z11,%d" , sink);
175176 errno_t err;
177+ if (DEBUG_STRESS_REPORTS && Utils_Random () % 16 == 0 ) {
178+ return 1 ;
179+ }
176180 switch (sink) {
177181 case ReportSink_Usb:
178182 err = keyboard_app::usb_handle ().send_report (*report);
@@ -187,6 +191,8 @@ extern "C" errno_t Hid_SendKeyboardReport(const hid_keyboard_report_t *report)
187191 err = Messenger_Send2 (DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_KeyboardReport, (const uint8_t *)report, sizeof (*report));
188192 if (err != 0 ) {
189193 printk (" Failed to send keyboard report to dongle: %d\n " , err);
194+ } else {
195+ UsbReportUpdater_ConfirmKeyboardReportSent ();
190196 }
191197 break ;
192198#endif
@@ -203,7 +209,11 @@ extern "C" errno_t Hid_SendKeyboardReport(const hid_keyboard_report_t *report)
203209
204210extern " C" void Hid_KeyboardReportSentCallback (hid_transport_t transport)
205211{
206- UsbReportUpdateSemaphore &= ~UsbReportUpdate_Keyboard;
212+ if (DEBUG_STRESS_REPORTS && Utils_Random () % 16 == 0 ) {
213+ // 666
214+ return ;
215+ }
216+ UsbReportUpdater_ConfirmKeyboardReportSent ();
207217 noteReportSent (transport == HID_TRANSPORT_USB ? ReportSink_Usb : ReportSink_BleHid);
208218#if DEVICE_IS_UHK_DONGLE
209219 Dongle_SignalUsbReportSent ();
@@ -230,6 +240,8 @@ extern "C" errno_t Hid_SendMouseReport(const hid_mouse_report_t *report)
230240 err = Messenger_Send2 (DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_MouseReport, (const uint8_t *)report, sizeof (*report));
231241 if (err != 0 ) {
232242 printk (" Failed to send mouse report to dongle: %d\n " , err);
243+ } else {
244+ UsbReportUpdater_ConfirmMouseReportSent ();
233245 }
234246 break ;
235247#endif
@@ -249,7 +261,7 @@ extern "C" errno_t Hid_SendMouseReport(const hid_mouse_report_t *report)
249261
250262extern " C" void Hid_MouseReportSentCallback (hid_transport_t transport)
251263{
252- UsbReportUpdateSemaphore &= ~UsbReportUpdate_Mouse ;
264+ UsbReportUpdater_ConfirmMouseReportSent () ;
253265 noteReportSent ( transport == HID_TRANSPORT_USB ? ReportSink_Usb : ReportSink_BleHid);
254266#if DEVICE_IS_UHK_DONGLE
255267 Dongle_SignalUsbReportSent ();
@@ -276,6 +288,8 @@ extern "C" errno_t Hid_SendControlsReport(const hid_controls_report_t *report)
276288 err = Messenger_Send2 (DeviceId_Uhk_Dongle, MessageId_SyncableProperty, SyncablePropertyId_ControlsReport, (const uint8_t *)report, sizeof (*report));
277289 if (err != 0 ) {
278290 printk (" Failed to send controls report to dongle: %d\n " , err);
291+ } else {
292+ UsbReportUpdater_ConfirmControlsReportSent ();
279293 }
280294 break ;
281295#endif
@@ -292,7 +306,7 @@ extern "C" errno_t Hid_SendControlsReport(const hid_controls_report_t *report)
292306
293307extern " C" void Hid_ControlsReportSentCallback (hid_transport_t transport)
294308{
295- UsbReportUpdateSemaphore &= ~UsbReportUpdate_Controls ;
309+ UsbReportUpdater_ConfirmControlsReportSent () ;
296310 noteReportSent ( transport == HID_TRANSPORT_USB ? ReportSink_Usb : ReportSink_BleHid);
297311#if DEVICE_IS_UHK_DONGLE
298312 Dongle_SignalUsbReportSent ();
0 commit comments