diff options
Diffstat (limited to 'protocol')
-rw-r--r-- | protocol/vusb/main.c | 16 | ||||
-rw-r--r-- | protocol/vusb/vusb.c | 31 |
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) |