From d2b9489a5e19fabb5d6ec285192b19dc25b36d5e Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 22 Feb 2011 01:21:53 +0900 Subject: [PATCH] fixed hhkb to comply new API. --- command.c | 5 +-- hhkb/Makefile | 10 +++++- hhkb/config.h | 13 +++---- hhkb/keymap.c | 8 +---- hhkb/matrix.c | 2 +- host.h | 3 +- pjrc/host.c | 18 ++++++---- tmk.c | 97 --------------------------------------------------- 8 files changed, 33 insertions(+), 123 deletions(-) delete mode 100644 tmk.c diff --git a/command.c b/command.c index 0152ccd8..7afed5d7 100644 --- a/command.c +++ b/command.c @@ -32,7 +32,7 @@ uint8_t command_proc(void) uint8_t processed = 1; bool last_print_enable = print_enable; print_enable = true; - switch (keyboard_report->keys[0]) { + switch (host_get_first_key()) { case KB_H: help(); break; @@ -89,7 +89,7 @@ uint8_t command_proc(void) print("timer: "); phex16(timer_count); print("\n"); break; case KB_P: // print toggle - if (print_enable) { + if (last_print_enable) { print("print disabled.\n"); last_print_enable = false; } else { @@ -107,6 +107,7 @@ uint8_t command_proc(void) break; #ifdef USB_NKRO_ENABLE case KB_N: + // send empty report before change host_clear_keyboard_report(); host_send_keyboard_report(); keyboard_nkro = !keyboard_nkro; diff --git a/hhkb/Makefile b/hhkb/Makefile index 7c7ed0ee..2c8cd5af 100644 --- a/hhkb/Makefile +++ b/hhkb/Makefile @@ -8,11 +8,13 @@ COMMON_DIR = .. TARGET_DIR = . # keyboard dependent files -TARGET_SRC = tmk.c \ +TARGET_SRC = main_pjrc.c \ keymap.c \ matrix.c \ led.c +CONFIG_H = config.h + # MCU name, you MUST set this to match the board you are using # type "make clean" after changing this, so all files will be rebuilt @@ -38,5 +40,11 @@ USB_EXTRA_ENABLE = yes # Enhanced feature for Windows(Audio control and System c USB_NKRO_ENABLE = yes # USB Nkey Rollover + +#---------------- Programming Options -------------------------- +PROGRAM_CMD = teensy_loader_cli.exe -mmcu=$(MCU) -w -v $(TARGET).hex + + + include $(COMMON_DIR)/Makefile.pjrc include $(COMMON_DIR)/Makefile.common diff --git a/hhkb/config.h b/hhkb/config.h index b8392aa8..886eef92 100644 --- a/hhkb/config.h +++ b/hhkb/config.h @@ -10,26 +10,27 @@ #define PRODUCT HHKB mod #define DESCRIPTION t.m.k. keyboard firmware for HHKB mod + /* matrix size */ #define MATRIX_ROWS 8 #define MATRIX_COLS 8 - /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST -/* key combination for command */ -#define IS_COMMAND() (keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT)) +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \ + keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \ +) -/* USB NKey Rollover */ -#ifdef USB_NKRO_ENABLE -#endif /* mouse keys */ #ifdef MOUSEKEY_ENABLE # define MOUSEKEY_DELAY_TIME 192 #endif + /* PS/2 mouse */ #ifdef PS2_MOUSE_ENABLE /* diff --git a/hhkb/keymap.c b/hhkb/keymap.c index d6acf459..78f1a7f7 100644 --- a/hhkb/keymap.c +++ b/hhkb/keymap.c @@ -9,7 +9,7 @@ #include "print.h" #include "debug.h" #include "util.h" -#include "keymap_skel.h" +#include "keymap.h" // Convert physical keyboard layout to matrix array. @@ -193,9 +193,3 @@ uint8_t keymap_fn_keycode(uint8_t fn_bits) { return pgm_read_byte(&fn_keycode[(biton(fn_bits))]); } - -// define a condition to enter special function mode -bool keymap_is_special_mode(uint8_t fn_bits) -{ - return host_get_mods() == (BIT_LSHIFT | BIT_RSHIFT) || host_get_mods() == (BIT_LCTRL | BIT_RSHIFT); -} diff --git a/hhkb/matrix.c b/hhkb/matrix.c index 15633d53..fefd2478 100644 --- a/hhkb/matrix.c +++ b/hhkb/matrix.c @@ -7,7 +7,7 @@ #include #include "print.h" #include "util.h" -#include "matrix_skel.h" +#include "matrix.h" #if (MATRIX_COLS > 16) diff --git a/host.h b/host.h index 5764e02c..045ccd8e 100644 --- a/host.h +++ b/host.h @@ -70,8 +70,7 @@ void host_add_code(uint8_t code); void host_swap_keyboard_report(void); void host_clear_keyboard_report(void); uint8_t host_has_anykey(void); -uint8_t *host_get_keys(void); -uint8_t host_get_mods(void); +uint8_t host_get_first_key(void); void host_send_keyboard_report(void); diff --git a/pjrc/host.c b/pjrc/host.c index 7247288b..8da88517 100644 --- a/pjrc/host.c +++ b/pjrc/host.c @@ -4,6 +4,7 @@ #include "usb_mouse.h" #include "debug.h" #include "host.h" +#include "util.h" #ifdef USB_NKRO_ENABLE @@ -80,14 +81,17 @@ uint8_t host_has_anykey(void) return cnt; } -uint8_t *host_get_keys(void) +uint8_t host_get_first_key(void) { - return keyboard_report->keys; -} - -uint8_t host_get_mods(void) -{ - return keyboard_report->mods; +#ifdef USB_NKRO_ENABLE + if (keyboard_nkro) { + uint8_t i = 0; + for (; i < REPORT_KEYS && !keyboard_report->keys[i]; i++) + ; + return i<<3 | biton(keyboard_report->keys[i]); + } +#endif + return keyboard_report->keys[0]; } diff --git a/tmk.c b/tmk.c deleted file mode 100644 index 18a05ffd..00000000 --- a/tmk.c +++ /dev/null @@ -1,97 +0,0 @@ -/* 2010/08/23 noname - * keyboard firmware based on PJRC USB keyboard example - */ -/* Keyboard example with debug channel, for Teensy USB Development Board - * http://www.pjrc.com/teensy/usb_keyboard.html - * Copyright (c) 2008 PJRC.COM, LLC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include -#include -#include -#include -#include "keyboard.h" -#include "usb.h" -#include "matrix.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "jump_bootloader.h" -#ifdef PS2_MOUSE_ENABLE -# include "ps2_mouse.h" -#endif - - -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) - - -bool debug_enable = false; -bool debug_matrix = false; -bool debug_keyboard = false; -bool debug_mouse = false; - - -int main(void) -{ - DEBUG_LED_CONFIG; - DEBUG_LED_OFF; - - // set for 16 MHz clock - CPU_PRESCALE(0); - - // Initialize the USB, and then wait for the host to set configuration. - // If the Teensy is powered without a PC connected to the USB port, - // this will wait forever. - usb_init(); - while (!usb_configured()) /* wait */ ; - - keyboard_init(); - matrix_scan(); - if (matrix_key_count() >= 3) { -#ifdef DEBUG_LED - for (int i = 0; i < 6; i++) { - DEBUG_LED_CONFIG; - DEBUG_LED_ON; - _delay_ms(500); - DEBUG_LED_OFF; - _delay_ms(500); - } -#else - _delay_ms(5000); -#endif - print_enable = true; - debug_enable = true; - debug_matrix = true; - debug_keyboard = true; - debug_mouse = true; - print("debug enabled.\n"); - } - if (matrix_key_count() >= 4) { - print("jump to bootloader...\n"); - _delay_ms(1000); - jump_bootloader(); // not return - } - - - while (1) { - keyboard_proc(); - } -}