summaryrefslogtreecommitdiff
path: root/protocol/vusb/vusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocol/vusb/vusb.c')
-rw-r--r--protocol/vusb/vusb.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/protocol/vusb/vusb.c b/protocol/vusb/vusb.c
index 0bfe21e92e..4e11836e16 100644
--- a/protocol/vusb/vusb.c
+++ b/protocol/vusb/vusb.c
@@ -91,20 +91,38 @@ static void send_keyboard(report_keyboard_t *report)
}
+typedef struct {
+ uint8_t report_id;
+ report_mouse_t report;
+} __attribute__ ((packed)) vusb_mouse_report_t;
+
static void send_mouse(report_mouse_t *report)
{
- report->report_id = REPORT_ID_MOUSE;
+ vusb_mouse_report_t r = {
+ .report_id = REPORT_ID_MOUSE,
+ .report = *report
+ };
if (usbInterruptIsReady3()) {
- usbSetInterrupt3((void *)report, sizeof(*report));
+ usbSetInterrupt3((void *)&r, sizeof(vusb_mouse_report_t));
}
}
+
+typedef struct {
+ uint8_t report_id;
+ uint16_t usage;
+} __attribute__ ((packed)) report_extra_t;
+
static void send_system(uint16_t data)
{
- // Not need static?
- static uint8_t report[] = { REPORT_ID_SYSTEM, 0, 0 };
- report[1] = data&0xFF;
- report[2] = (data>>8)&0xFF;
+ static uint16_t last_data = 0;
+ if (data == last_data) return;
+ last_data = data;
+
+ report_extra_t report = {
+ .report_id = REPORT_ID_SYSTEM,
+ .usage = data
+ };
if (usbInterruptIsReady3()) {
usbSetInterrupt3((void *)&report, sizeof(report));
}
@@ -116,10 +134,10 @@ static void send_consumer(uint16_t data)
if (data == last_data) return;
last_data = data;
- // Not need static?
- static uint8_t report[] = { REPORT_ID_CONSUMER, 0, 0 };
- report[1] = data&0xFF;
- report[2] = (data>>8)&0xFF;
+ report_extra_t report = {
+ .report_id = REPORT_ID_CONSUMER,
+ .usage = data
+ };
if (usbInterruptIsReady3()) {
usbSetInterrupt3((void *)&report, sizeof(report));
}