]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - protocol/vusb/vusb.c
Add LUFA device state to command info
[max/tmk_keyboard.git] / protocol / vusb / vusb.c
index 59834e69187a2acb44459b0e34e023b045bec079..7d0292ed171336022bf16ee7c54fa40f3217dd72 100644 (file)
@@ -35,6 +35,13 @@ static report_keyboard_t kbuf[KBUF_SIZE];
 static uint8_t kbuf_head = 0;
 static uint8_t kbuf_tail = 0;
 
+typedef struct {
+        uint8_t modifier;
+        uint8_t reserved;
+        uint8_t keycode[6];
+} keyboard_report_t;
+
+static keyboard_report_t keyboard_report; // sent to PC
 
 /* transfer keyboard report from buffer */
 void vusb_transfer_keyboard(void)
@@ -42,12 +49,12 @@ void vusb_transfer_keyboard(void)
     if (usbInterruptIsReady()) {
         if (kbuf_head != kbuf_tail) {
             usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t));
-            if (!debug_keyboard) {
-                print("keys: ");
-                for (int i = 0; i < REPORT_KEYS; i++) { phex(kbuf[kbuf_tail].keys[i]); print(" "); }
-                print(" mods: "); phex((kbuf[kbuf_tail]).mods); print("\n");
-            }
             kbuf_tail = (kbuf_tail + 1) % KBUF_SIZE;
+            if (debug_keyboard) {
+                print("V-USB: kbuf["); pdec(kbuf_tail); print("->"); pdec(kbuf_head); print("](");
+                phex((kbuf_head < kbuf_tail) ? (KBUF_SIZE - kbuf_tail + kbuf_head) : (kbuf_head - kbuf_tail));
+                print(")\n");
+            }
         }
     }
 }
@@ -88,6 +95,10 @@ static void send_keyboard(report_keyboard_t *report)
     } else {
         debug("kbuf: full\n");
     }
+
+    // NOTE: send key strokes of Macro
+    usbPoll();
+    vusb_transfer_keyboard();
 }
 
 
@@ -164,8 +175,8 @@ usbRequest_t    *rq = (void *)data;
         if(rq->bRequest == USBRQ_HID_GET_REPORT){
             debug("GET_REPORT:");
             /* we only have one report type, so don't look at wValue */
-            usbMsgPtr = (void *)keyboard_report;
-            return sizeof(*keyboard_report);
+            usbMsgPtr = (void *)&keyboard_report;
+            return sizeof(keyboard_report);
         }else if(rq->bRequest == USBRQ_HID_GET_IDLE){
             debug("GET_IDLE: ");
             //debug_hex(vusb_idle_rate);
@@ -228,7 +239,7 @@ uchar usbFunctionWrite(uchar *data, uchar len)
  *
  * from an example in HID spec appendix
  */
-PROGMEM uchar keyboard_hid_report[] = {
+const PROGMEM uchar keyboard_hid_report[] = {
     0x05, 0x01,          // Usage Page (Generic Desktop),
     0x09, 0x06,          // Usage (Keyboard),
     0xA1, 0x01,          // Collection (Application),
@@ -271,7 +282,7 @@ PROGMEM uchar keyboard_hid_report[] = {
  * http://www.keil.com/forum/15671/
  * http://www.microsoft.com/whdc/device/input/wheel.mspx
  */
-PROGMEM uchar mouse_hid_report[] = {
+const PROGMEM uchar mouse_hid_report[] = {
     /* mouse */
     0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
     0x09, 0x02,                    // USAGE (Mouse)
@@ -354,7 +365,7 @@ PROGMEM uchar mouse_hid_report[] = {
  * contains: device, interface, HID and endpoint descriptors
  */
 #if USB_CFG_DESCR_PROPS_CONFIGURATION
-PROGMEM char usbDescriptorConfiguration[] = {    /* USB configuration descriptor */
+const PROGMEM char usbDescriptorConfiguration[] = {    /* USB configuration descriptor */
     9,          /* sizeof(usbDescriptorConfiguration): length of descriptor in bytes */
     USBDESCR_CONFIG,    /* descriptor type */
     9 + (9 + 9 + 7) + (9 + 9 + 7), 0,