aboutsummaryrefslogtreecommitdiffstats
path: root/protocol/vusb
diff options
context:
space:
mode:
authorGravatar tmk <nobody@nowhere>2012-06-28 16:51:56 +0900
committerGravatar tmk <nobody@nowhere>2012-06-28 16:51:56 +0900
commita9a3610dd4a168e473d2d6a2eb3fbc37aabb46c9 (patch)
tree89f274c6cf58a9b4fcd8d768dda78da10afac3b9 /protocol/vusb
parenteffa5914bff71fa7ad6506271c9ba4baa32a1eca (diff)
downloadqmk_firmware-a9a3610dd4a168e473d2d6a2eb3fbc37aabb46c9.tar.gz
Add LUFA mouse feature and fix mouse report.
- add LUFA boot mouse feature - remove report_id from mouse report - fix LUFA descriptor
Diffstat (limited to 'protocol/vusb')
-rw-r--r--protocol/vusb/main.c16
-rw-r--r--protocol/vusb/vusb.c31
2 files changed, 41 insertions, 6 deletions
diff --git a/protocol/vusb/main.c b/protocol/vusb/main.c
index 1bf9035b3..1ba40a27a 100644
--- a/protocol/vusb/main.c
+++ b/protocol/vusb/main.c
@@ -62,6 +62,11 @@ int main(void)
debug("initForUsbConnectivity()\n");
initForUsbConnectivity();
+ int i;
+ while(--i){ /* To configured */
+ usbPoll();
+ _delay_ms(1);
+ }
debug("main loop\n");
while (1) {
@@ -90,10 +95,15 @@ int main(void)
}
}
#endif
- if (!suspended)
+ if (!suspended) {
usbPoll();
- keyboard_proc();
- if (!suspended)
+
+ // TODO: configuration process is incosistent. it sometime fails.
+ // To prevent failing to configure NOT scan keyboard during configuration
+ if (usbConfiguration && usbInterruptIsReady()) {
+ keyboard_proc();
+ }
vusb_transfer_keyboard();
+ }
}
}
diff --git a/protocol/vusb/vusb.c b/protocol/vusb/vusb.c
index 0bfe21e92..1dff5dea2 100644
--- a/protocol/vusb/vusb.c
+++ b/protocol/vusb/vusb.c
@@ -91,23 +91,48 @@ 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;
+ uint8_t data0;
+ uint8_t data1;
+} __attribute__ ((packed)) vusb_system_report_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;
+*/
+/*
+ vusb_system_report_t r = {
+ .report_id = REPORT_ID_SYSTEM,
+ .data0 = data&0xFF,
+ .data1 = (data>>8)&0xFF
+ };
if (usbInterruptIsReady3()) {
- usbSetInterrupt3((void *)&report, sizeof(report));
+ usbSetInterrupt3((void *)&r, sizeof(vusb_system_report_t));
}
+*/
}
static void send_consumer(uint16_t data)