From 89928728a2bb7ac8b58083ff2450e45df61f0c2d Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 28 Jun 2012 20:15:56 +0900 Subject: [PATCH] Add consumer/system control feature to LUFA. --- common/keyboard.c | 17 +++++------------ common/mousekey.c | 4 ++-- protocol/vusb/main.c | 5 ----- protocol/vusb/vusb.c | 37 +++++++++++++++---------------------- 4 files changed, 22 insertions(+), 41 deletions(-) diff --git a/common/keyboard.c b/common/keyboard.c index 5c2643c9..25f32eb0 100644 --- a/common/keyboard.c +++ b/common/keyboard.c @@ -49,6 +49,7 @@ void keyboard_proc(void) uint8_t fn_bits = 0; #ifdef EXTRAKEY_ENABLE uint16_t consumer_code = 0; + uint16_t system_code = 0; #endif matrix_scan(); @@ -89,22 +90,13 @@ void keyboard_proc(void) #ifdef HOST_PJRC if (suspend && remote_wakeup) { usb_remote_wakeup(); - } else { - host_system_send(SYSTEM_POWER_DOWN); } -#else - host_system_send(SYSTEM_POWER_DOWN); #endif - host_system_send(0); - _delay_ms(500); + system_code = SYSTEM_POWER_DOWN; } else if (code == KB_SYSTEM_SLEEP) { - host_system_send(SYSTEM_SLEEP); - host_system_send(0); - _delay_ms(500); + system_code = SYSTEM_SLEEP; } else if (code == KB_SYSTEM_WAKE) { - host_system_send(SYSTEM_WAKE_UP); - host_system_send(0); - _delay_ms(500); + system_code = SYSTEM_WAKE_UP; } // Consumer Page else if (code == KB_AUDIO_MUTE) { @@ -173,6 +165,7 @@ void keyboard_proc(void) host_send_keyboard_report(); #ifdef EXTRAKEY_ENABLE host_consumer_send(consumer_code); + host_system_send(system_code); #endif #ifdef DEBUG_LED // LED flash for debug diff --git a/common/mousekey.c b/common/mousekey.c index 76bd0fd3..1d35355b 100644 --- a/common/mousekey.c +++ b/common/mousekey.c @@ -121,12 +121,12 @@ void mousekey_clear_report(void) static void mousekey_debug(void) { if (!debug_mouse) return; - print("mousekey[btn|x y v h]: "); + print("mousekey [btn|x y v h]rep: ["); phex(report.buttons); print("|"); phex(report.x); print(" "); phex(report.y); print(" "); phex(report.v); print(" "); - phex(report.h); + phex(report.h); print("]"); phex(mousekey_repeat); print("\n"); } diff --git a/protocol/vusb/main.c b/protocol/vusb/main.c index 1ba40a27..3deb8223 100644 --- a/protocol/vusb/main.c +++ b/protocol/vusb/main.c @@ -62,11 +62,6 @@ int main(void) debug("initForUsbConnectivity()\n"); initForUsbConnectivity(); - int i; - while(--i){ /* To configured */ - usbPoll(); - _delay_ms(1); - } debug("main loop\n"); while (1) { diff --git a/protocol/vusb/vusb.c b/protocol/vusb/vusb.c index 1dff5dea..4e11836e 100644 --- a/protocol/vusb/vusb.c +++ b/protocol/vusb/vusb.c @@ -107,32 +107,25 @@ static void send_mouse(report_mouse_t *report) } } -/* + 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) @@ -141,10 +134,10 @@ 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)); }