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)
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");
+ }
}
}
}
} else {
debug("kbuf: full\n");
}
+
+ // NOTE: send key strokes of Macro
+ usbPoll();
+ vusb_transfer_keyboard();
}
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);
*
* 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),
* 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)
* 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,