summary refs log tree commit diff
path: root/protocol
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2012-06-28 16:51:56 +0900
committertmk <nobody@nowhere>2012-06-28 16:51:56 +0900
commita9a3610dd4a168e473d2d6a2eb3fbc37aabb46c9 (patch)
tree89f274c6cf58a9b4fcd8d768dda78da10afac3b9 /protocol
parenteffa5914bff71fa7ad6506271c9ba4baa32a1eca (diff)
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')
-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 1bf9035b39..1ba40a27a2 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 0bfe21e92e..1dff5dea26 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)