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");
+ }
}
}
}
}
}
-/*
+
typedef struct {
- uint8_t report_id;
- uint8_t data0;
- uint8_t data1;
-} __attribute__ ((packed)) vusb_system_report_t;
-*/
+ uint8_t report_id;
+ uint16_t usage;
+} __attribute__ ((packed)) report_extra_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 = {
+ static uint16_t last_data = 0;
+ if (data == last_data) return;
+ last_data = data;
+
+ report_extra_t report = {
.report_id = REPORT_ID_SYSTEM,
- .data0 = data&0xFF,
- .data1 = (data>>8)&0xFF
+ .usage = data
};
if (usbInterruptIsReady3()) {
- usbSetInterrupt3((void *)&r, sizeof(vusb_system_report_t));
+ usbSetInterrupt3((void *)&report, sizeof(report));
}
-*/
}
static void send_consumer(uint16_t data)
if (data == last_data) return;
last_data = data;
- // Not need static?
- static uint8_t report[] = { REPORT_ID_CONSUMER, 0, 0 };
- report[1] = data&0xFF;
- report[2] = (data>>8)&0xFF;
+ report_extra_t report = {
+ .report_id = REPORT_ID_CONSUMER,
+ .usage = data
+ };
if (usbInterruptIsReady3()) {
usbSetInterrupt3((void *)&report, sizeof(report));
}
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_prev;
- return sizeof(*keyboard_report_prev);
+ usbMsgPtr = (void *)keyboard_report;
+ return sizeof(*keyboard_report);
}else if(rq->bRequest == USBRQ_HID_GET_IDLE){
debug("GET_IDLE: ");
//debug_hex(vusb_idle_rate);