@@ -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; |
@@ -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 |
@@ -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 | |||
/* |
@@ -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); | |||
} |
@@ -7,7 +7,7 @@ | |||
#include <util/delay.h> | |||
#include "print.h" | |||
#include "util.h" | |||
#include "matrix_skel.h" | |||
#include "matrix.h" | |||
#if (MATRIX_COLS > 16) |
@@ -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); |
@@ -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]; | |||
} | |||
@@ -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 <stdbool.h> | |||
#include <avr/io.h> | |||
#include <avr/interrupt.h> | |||
#include <util/delay.h> | |||
#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(); | |||
} | |||
} |