X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=keyboard.c;h=5c2643c951e53ee3a5869b50d792b8878091fc5f;hb=3f9de37310f670e6289738c628747e6787d42b22;hp=fd6e23042d1747e8f4fe300f3a68de097783066a;hpb=74f7e19863ced21bf5d27c1fb1207f79f2195e24;p=max%2Ftmk_keyboard.git diff --git a/keyboard.c b/keyboard.c index fd6e2304..5c2643c9 100644 --- a/keyboard.c +++ b/keyboard.c @@ -1,3 +1,19 @@ +/* +Copyright 2011 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ #include "keyboard.h" #include "host.h" #include "layer.h" @@ -11,7 +27,7 @@ #ifdef MOUSEKEY_ENABLE #include "mousekey.h" #endif -#ifdef USB_EXTRA_ENABLE +#ifdef EXTRAKEY_ENABLE #include #endif @@ -31,6 +47,9 @@ void keyboard_init(void) void keyboard_proc(void) { uint8_t fn_bits = 0; +#ifdef EXTRAKEY_ENABLE + uint16_t consumer_code = 0; +#endif matrix_scan(); @@ -63,21 +82,10 @@ void keyboard_proc(void) } else if (IS_FN(code)) { fn_bits |= FN_BIT(code); } -#ifdef USB_EXTRA_ENABLE - // audio control & system control - else if (code == KB_MUTE) { - host_audio_send(AUDIO_MUTE); - _delay_ms(500); - host_audio_send(0); - } else if (code == KB_VOLU) { - host_audio_send(AUDIO_VOL_UP); - _delay_ms(200); - host_audio_send(0); - } else if (code == KB_VOLD) { - host_audio_send(AUDIO_VOL_DOWN); - _delay_ms(200); - host_audio_send(0); - } else if (code == KB_PWR) { +// TODO: use table or something +#ifdef EXTRAKEY_ENABLE + // System Control + else if (code == KB_SYSTEM_POWER) { #ifdef HOST_PJRC if (suspend && remote_wakeup) { usb_remote_wakeup(); @@ -87,7 +95,57 @@ void keyboard_proc(void) #else host_system_send(SYSTEM_POWER_DOWN); #endif - _delay_ms(1000); + host_system_send(0); + _delay_ms(500); + } else if (code == KB_SYSTEM_SLEEP) { + host_system_send(SYSTEM_SLEEP); + host_system_send(0); + _delay_ms(500); + } else if (code == KB_SYSTEM_WAKE) { + host_system_send(SYSTEM_WAKE_UP); + host_system_send(0); + _delay_ms(500); + } + // Consumer Page + else if (code == KB_AUDIO_MUTE) { + consumer_code = AUDIO_MUTE; + } else if (code == KB_AUDIO_VOL_UP) { + consumer_code = AUDIO_VOL_UP; + } else if (code == KB_AUDIO_VOL_DOWN) { + consumer_code = AUDIO_VOL_DOWN; + } + else if (code == KB_MEDIA_NEXT_TRACK) { + consumer_code = TRANSPORT_NEXT_TRACK; + } else if (code == KB_MEDIA_PREV_TRACK) { + consumer_code = TRANSPORT_PREV_TRACK; + } else if (code == KB_MEDIA_STOP) { + consumer_code = TRANSPORT_STOP; + } else if (code == KB_MEDIA_PLAY_PAUSE) { + consumer_code = TRANSPORT_PLAY_PAUSE; + } else if (code == KB_MEDIA_SELECT) { + consumer_code = AL_CC_CONFIG; + } + else if (code == KB_MAIL) { + consumer_code = AL_EMAIL; + } else if (code == KB_CALCULATOR) { + consumer_code = AL_CALCULATOR; + } else if (code == KB_MY_COMPUTER) { + consumer_code = AL_LOCAL_BROWSER; + } + else if (code == KB_WWW_SEARCH) { + consumer_code = AC_SEARCH; + } else if (code == KB_WWW_HOME) { + consumer_code = AC_HOME; + } else if (code == KB_WWW_BACK) { + consumer_code = AC_BACK; + } else if (code == KB_WWW_FORWARD) { + consumer_code = AC_FORWARD; + } else if (code == KB_WWW_STOP) { + consumer_code = AC_STOP; + } else if (code == KB_WWW_REFRESH) { + consumer_code = AC_REFRESH; + } else if (code == KB_WWW_FAVORITES) { + consumer_code = AC_BOOKMARKS; } #endif else if (IS_KEY(code)) { @@ -113,6 +171,9 @@ void keyboard_proc(void) // TODO: should send only when changed from last report if (matrix_is_modified()) { host_send_keyboard_report(); +#ifdef EXTRAKEY_ENABLE + host_consumer_send(consumer_code); +#endif #ifdef DEBUG_LED // LED flash for debug DEBUG_LED_CONFIG;