From afb08462085132acf7a1962522952f7dbf064519 Mon Sep 17 00:00:00 2001 From: tmk Date: Fri, 8 Jun 2012 00:37:46 +0900 Subject: Made directories for keyboard and converter projects. --- hhkb/Makefile.iwrap | 93 -------- hhkb/Makefile.pjrc | 60 ----- hhkb/Makefile.vusb | 91 -------- hhkb/README | 151 ------------- hhkb/config_iwrap.h | 55 ----- hhkb/config_pjrc.h | 62 ----- hhkb/config_vusb.h | 49 ---- hhkb/doc/Bluetooth.txt | 4 - hhkb/doc/Bluetooth_img/.picasa.ini | 2 - hhkb/doc/Bluetooth_img/BT_circuit.jpg | Bin 502118 -> 0 bytes hhkb/doc/HHKB.txt | 199 ---------------- hhkb/doc/HHKB_img/HHKB_TP1684.jpg | Bin 149082 -> 0 bytes hhkb/doc/HHKB_img/HHKB_chart1.jpg | Bin 155342 -> 0 bytes hhkb/doc/HHKB_img/HHKB_chart2.jpg | Bin 148225 -> 0 bytes hhkb/doc/HHKB_img/HHKB_connector.jpg | Bin 193900 -> 0 bytes hhkb/doc/HHKB_img/HHKB_controller.jpg | Bin 135100 -> 0 bytes hhkb/doc/HHKB_img/HHKB_keyswitch.jpg | Bin 171469 -> 0 bytes hhkb/doc/HHKB_img/connector_contact.jpg | Bin 192830 -> 0 bytes hhkb/doc/HHKB_img/logic_analyzer.jpg | Bin 169564 -> 0 bytes hhkb/doc/HHKB_img/probe_contact.jpg | Bin 208477 -> 0 bytes hhkb/doc/HHKB_img/teensy_install.jpg | Bin 135851 -> 0 bytes hhkb/doc/HHKB_img/teensy_wiring.jpg | Bin 154695 -> 0 bytes hhkb/keymap.c | 221 ------------------ hhkb/led.c | 26 --- hhkb/matrix.c | 294 ------------------------ hhkb/usbconfig.h | 388 -------------------------------- 26 files changed, 1695 deletions(-) delete mode 100644 hhkb/Makefile.iwrap delete mode 100644 hhkb/Makefile.pjrc delete mode 100644 hhkb/Makefile.vusb delete mode 100644 hhkb/README delete mode 100644 hhkb/config_iwrap.h delete mode 100644 hhkb/config_pjrc.h delete mode 100644 hhkb/config_vusb.h delete mode 100644 hhkb/doc/Bluetooth.txt delete mode 100755 hhkb/doc/Bluetooth_img/.picasa.ini delete mode 100644 hhkb/doc/Bluetooth_img/BT_circuit.jpg delete mode 100644 hhkb/doc/HHKB.txt delete mode 100644 hhkb/doc/HHKB_img/HHKB_TP1684.jpg delete mode 100644 hhkb/doc/HHKB_img/HHKB_chart1.jpg delete mode 100644 hhkb/doc/HHKB_img/HHKB_chart2.jpg delete mode 100644 hhkb/doc/HHKB_img/HHKB_connector.jpg delete mode 100644 hhkb/doc/HHKB_img/HHKB_controller.jpg delete mode 100644 hhkb/doc/HHKB_img/HHKB_keyswitch.jpg delete mode 100644 hhkb/doc/HHKB_img/connector_contact.jpg delete mode 100644 hhkb/doc/HHKB_img/logic_analyzer.jpg delete mode 100644 hhkb/doc/HHKB_img/probe_contact.jpg delete mode 100644 hhkb/doc/HHKB_img/teensy_install.jpg delete mode 100644 hhkb/doc/HHKB_img/teensy_wiring.jpg delete mode 100644 hhkb/keymap.c delete mode 100644 hhkb/led.c delete mode 100644 hhkb/matrix.c delete mode 100644 hhkb/usbconfig.h (limited to 'hhkb') diff --git a/hhkb/Makefile.iwrap b/hhkb/Makefile.iwrap deleted file mode 100644 index d922b0f501..0000000000 --- a/hhkb/Makefile.iwrap +++ /dev/null @@ -1,93 +0,0 @@ -# -# Makefile for iWRAP -# - - -# Target file name (without extension). -TARGET = hhkb_iwrap - -# Directory common source filess exist -TOP_DIR = .. - -# Directory keyboard dependent files exist -TARGET_DIR = . - -# keyboard dependent files -SRC = main.c \ - keymap.c \ - matrix.c \ - led.c - -CONFIG_H = config_iwrap.h - - -# V-USB debug level: To use ps2_usart.c level must be 0 -# ps2_usart.c requires USART to receive PS/2 signal. -OPT_DEFS = -DDEBUG_LEVEL=0 - - -# 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 -MCU = atmega168p -# avrdude doesn't know atmega168p -AVRDUDE_MCU = atmega168 - - -# Processor frequency. -# Normally the first thing your program should do is set the clock prescaler, -# so your program will run at the correct speed. You should also set this -# variable to same clock speed. The _delay_ms() macro uses this, and many -# examples use this variable to calculate timings. Do not add a "UL" here. -F_CPU = 12000000 - - -# Build Options -# comment out to disable the options. -# -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -#NKRO_ENABLE = yes # USB Nkey Rollover - - - -#---------------- Programming Options -------------------------- -AVRDUDE = avrdude -# Type: avrdude -c ? to get a full listing. -AVRDUDE_PROGRAMMER = usbasp -AVRDUDE_PORT = -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -#AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - -PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - - -# Search Path -VPATH = $(TARGET_DIR) - -include $(TOP_DIR)/protocol/iwrap.mk -# To be swatchable btween Bluetooth and USB. Comment out if you don't need USB. -include $(TOP_DIR)/protocol/vusb.mk -include $(TOP_DIR)/protocol.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk diff --git a/hhkb/Makefile.pjrc b/hhkb/Makefile.pjrc deleted file mode 100644 index 28b6b589dd..0000000000 --- a/hhkb/Makefile.pjrc +++ /dev/null @@ -1,60 +0,0 @@ -# -# Makefile for PJRC Teensy -# - - -# Target file name (without extension). -TARGET = hhkb_pjrc - -# Directory common source filess exist -TOP_DIR = .. - -# Directory keyboard dependent files exist -TARGET_DIR = . - -# keyboard dependent files -SRC = main.c \ - keymap.c \ - matrix.c \ - led.c - -CONFIG_H = config_pjrc.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 -#MCU = at90usb162 # Teensy 1.0 -#MCU = atmega32u4 # Teensy 2.0 -#MCU = at90usb646 # Teensy++ 1.0 -MCU = at90usb1286 # Teensy++ 2.0 - - -# Processor frequency. -# Normally the first thing your program should do is set the clock prescaler, -# so your program will run at the correct speed. You should also set this -# variable to same clock speed. The _delay_ms() macro uses this, and many -# examples use this variable to calculate timings. Do not add a "UL" here. -F_CPU = 16000000 - - -# Build Options -# comment out to disable the options. -MOUSEKEY_ENABLE = yes # Mouse keys -#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support -EXTRAKEY_ENABLE = yes # Audio control and System control -NKRO_ENABLE = yes # USB Nkey Rollover - - - -#---------------- Programming Options -------------------------- -PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex - - - -# Search Path -VPATH = $(TARGET_DIR) - -include $(TOP_DIR)/protocol/pjrc.mk -include $(TOP_DIR)/protocol.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk diff --git a/hhkb/Makefile.vusb b/hhkb/Makefile.vusb deleted file mode 100644 index 734b73a029..0000000000 --- a/hhkb/Makefile.vusb +++ /dev/null @@ -1,91 +0,0 @@ -# -# Makefile for V-USB -# - - -# Target file name (without extension). -TARGET = hhkb_vusb - -# Directory common source filess exist -TOP_DIR = .. - -# Directory keyboard dependent files exist -TARGET_DIR = . - -# keyboard dependent files -SRC = main.c \ - keymap.c \ - matrix.c \ - led.c - -CONFIG_H = config_vusb.h - - -# V-USB debug level: To use ps2_usart.c level must be 0 -# ps2_usart.c requires USART to receive PS/2 signal. -OPT_DEFS = -DDEBUG_LEVEL=0 - - -# 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 -MCU = atmega328p -# avrdude doesn't know atmega168p -AVRDUDE_MCU = $(MCU) - - -# Processor frequency. -# Normally the first thing your program should do is set the clock prescaler, -# so your program will run at the correct speed. You should also set this -# variable to same clock speed. The _delay_ms() macro uses this, and many -# examples use this variable to calculate timings. Do not add a "UL" here. -F_CPU = 12000000 - - -# Build Options -# comment out to disable the options. -# -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -#NKRO_ENABLE = yes # USB Nkey Rollover - - - -#---------------- Programming Options -------------------------- -AVRDUDE = avrdude -# Type: avrdude -c ? to get a full listing. -AVRDUDE_PROGRAMMER = usbasp -AVRDUDE_PORT = -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -#AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - -PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - - -# Search Path -VPATH = $(TARGET_DIR) - -include $(TOP_DIR)/protocol/vusb.mk -include $(TOP_DIR)/protocol.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk diff --git a/hhkb/README b/hhkb/README deleted file mode 100644 index 65f7dcab5a..0000000000 --- a/hhkb/README +++ /dev/null @@ -1,151 +0,0 @@ -Alternative Controller for HHKB -=============================== - -Feature -------- -- Mouse Keys -- NKRO on USB(PJRC Tennsy only) -- Keymap Layers - - -Customize Keymap ----------------- -see keymap.c. - - - -Build -===== -PJRC Teensy ------------ -0. Edit matrix.c. - adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts) -1. Define macros in config_pjrc.h.(Optional) - VENDOR_ID, PRODUCT_ID and string descriptor. - IS_COMMAND -2. Edit Makefile for MCU setting and build options. - MCU, F_CPU - MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, NKRO_ENABLE -3. Build hex file. - $ make -f Makefile.pjrc -4. Program MCU. - $ make -f Makefile.pjrc program - - -V-USB ------ -0. Edit matrix.c and usbconfig.h. - adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts) - define macros for V-USB in usbconfig.h. -1. Define macros in config_vusb.h.(Optional) - IS_COMMAND -2. Edit Makefile.vusb for MCU setting and build options. - MCU, F_CPU - MOUSEKEY_ENABLE, EXTRAKEY_ENABLE -3. Build hex file. - $ make -f Makefile.vusb -4. Program MCU. - $ make -f Makefile.vusb program - - Using a bootloader to program for convenience is recommended. - Once program this V-USB bootloader at first, you can program MCU without - extra programmer. You should have reset switch to start up as bootloader - mode in this case. - USBaspLoader: - http://www.obdev.at/products/vusb/usbasploader.html - - -iWRAP ------ -0. Edit matrix.c and usbconfig.h. - adjust scan code to your pin configuration.(see doc/HHKB.txt for pinouts) - define macros for V-USB in usbconfig.h. -1. Define macros in config_iwrap.h.(Optional) - IS_COMMAND -2. Edit Makefile.iwrap for MCU setting and build options. - MCU, F_CPU - MOUSEKEY_ENABLE, EXTRAKEY_ENABLE -3. Build hex file. - $ make -f Makefile.iwrap -4. Program MCU. - $ make -f Makefile.iwrap program - - - -Hardware -======== -PJRC Teensy ------------ - +---------------+ - | Teensy++ | - | | - | | HHKB - | | ~~~~ - | PB0-2|------->ROW(6-8) - | PB3-5|------->COL(9-11) - | PB6|------->ENABLE(12) - | PE6|<-------KEY(4) - | PE7|------->PREV(5) - | | - | | - | | - +---------------+ - - -V-USB ------ - +---+ +---------------+ -USB GND | | ATmega168 | -~~~ C3 | | -5V <-------+--------+---|Vcc,AVCC | HHKB - R1 | | ~~~~ -D- <----+--+-----R2-----|INT1 PB2-4|------->ROW(6-8) -D+ <----|---+----R3-----|INT0 PC0-2|------->COL(9-11) - Z1 Z2 | PC3|------->ENABLE(12) -GND<----+---+-----------|GND PB0|<-------KEY(4) - | PB1|------->PREV(5) - | | - GND+-C2--+--|XTAL1 RXD|------->Debug Console - X1 | TXD|<-------Debug Console - GND+-C3--+--|XTAL2 RST|---SW--+GND - +---------------+ -R1: 1.5K Ohm -R2,R3: 68 Ohm -Z1,Z2: Zener 3.6V -C1,C2: 22pF -C3: 0.1uF -X1: Crystal 20MHz(16MHz/12MHz) -SW: Push Switch(Optional for bootloader) - - -iWRAP ------ - +---------------+ WT12 - 5V | ATmega168 | 5V/3.3V~~~~ - +-----+---|Vcc,AVCC PC4|---/--->iWRAP(RxD) -USB | C3 | PC5|<--/----iWRAP(TxD) -~~~ | + | | -5V <--BATT + GND | | HHKB - R1 | | ~~~~ -D- <----+-----+--R2-----|INT1 PB2-4|------->ROW(6-8) -D+ <----|---+----R3-----|INT0 PC0-2|------->COL(9-11) - Z1 Z2 | PC3|------->ENABLE(12) -GND<----+---+-----------|GND PB0|<-------KEY(4) - | PB1|------->PREV(5) - | | - GND+-C2--+--|XTAL1 RXD|------->Debug Console - X1 | TXD|<-------Debug Console - GND+-C3--+--|XTAL2 RST|---SW--+GND - +---------------+ - -R1: 1.5K Ohm -R2,R3: 68 Ohm -Z1,Z2: Zener 3.6V -C1,C2: 22pF -C3: 0.1uF -X1: Crystal 12MHz -SW: Push Switch(Optional) -BATT: Li-Po Battery, Battery Charger and Voltage Regulator(5V and 3.3V). - - -EOF diff --git a/hhkb/config_iwrap.h b/hhkb/config_iwrap.h deleted file mode 100644 index 80ab64398b..0000000000 --- a/hhkb/config_iwrap.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0xBEEA -// TODO: share these strings with usbconfig.h -// Edit usbconfig.h to change these. -#define MANUFACTURER t.m.k. -#define PRODUCT HHKB mod -#define DESCRIPTION t.m.k. keyboard firmware for HHKB mod - - -/* matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 8 - - -/* key combination for command */ -#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT))) - -/* mouse keys */ -#ifdef MOUSEKEY_ENABLE -# define MOUSEKEY_DELAY_TIME 255 -#endif - -/* pins for Software UART */ -#define SUART_IN_PIN PINC -#define SUART_IN_BIT 5 -#define SUART_OUT_PORT PORTC -#define SUART_OUT_BIT 4 - - -#define DEBUG_LED 1 -#define DEBUG_LED_CONFIG (DDRD |= (1<<4)) -#define DEBUG_LED_OFF (PORTD |= (1<<4)) -#define DEBUG_LED_ON (PORTD &= ~(1<<4)) - -#endif diff --git a/hhkb/config_pjrc.h b/hhkb/config_pjrc.h deleted file mode 100644 index fffe3522c7..0000000000 --- a/hhkb/config_pjrc.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -/* controller configuration */ -#include "controller_teensy.h" - -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0xCAFE -#define DEVICE_VER 0x0101 -#define MANUFACTURER t.m.k. -#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 == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT))) - -/* mouse keys */ -#ifdef MOUSEKEY_ENABLE -# define MOUSEKEY_DELAY_TIME 192 -#endif - - -/* PS/2 mouse */ -#ifdef PS2_MOUSE_ENABLE -/* -# define PS2_CLOCK_PORT PORTF -# define PS2_CLOCK_PIN PINF -# define PS2_CLOCK_DDR DDRF -# define PS2_CLOCK_BIT 0 -# define PS2_DATA_PORT PORTF -# define PS2_DATA_PIN PINF -# define PS2_DATA_DDR DDRF -# define PS2_DATA_BIT 1 -*/ -#endif - -#endif diff --git a/hhkb/config_vusb.h b/hhkb/config_vusb.h deleted file mode 100644 index 268644849e..0000000000 --- a/hhkb/config_vusb.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0xC0FE -// TODO: share these strings with usbconfig.h -// Edit usbconfig.h to change these. -#define MANUFACTURER t.m.k. -#define PRODUCT HHKB mod -#define DESCRIPTION t.m.k. keyboard firmware for HHKB mod - - -/* matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 8 - - -/* key combination for command */ -#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT))) - -/* mouse keys */ -#ifdef MOUSEKEY_ENABLE -# define MOUSEKEY_DELAY_TIME 255 -#endif - - -#define DEBUG_LED 1 -#define DEBUG_LED_CONFIG (DDRD |= (1<<4)) -#define DEBUG_LED_OFF (PORTD |= (1<<4)) -#define DEBUG_LED_ON (PORTD &= ~(1<<4)) - -#endif diff --git a/hhkb/doc/Bluetooth.txt b/hhkb/doc/Bluetooth.txt deleted file mode 100644 index b27f197006..0000000000 --- a/hhkb/doc/Bluetooth.txt +++ /dev/null @@ -1,4 +0,0 @@ -HHKB Bluetooth mod -================== -See this article: -http://geekhack.org/showwiki.php?title=Island:20851 diff --git a/hhkb/doc/Bluetooth_img/.picasa.ini b/hhkb/doc/Bluetooth_img/.picasa.ini deleted file mode 100755 index f6a4f60674..0000000000 --- a/hhkb/doc/Bluetooth_img/.picasa.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Picasa] -name=Bluetooth_img diff --git a/hhkb/doc/Bluetooth_img/BT_circuit.jpg b/hhkb/doc/Bluetooth_img/BT_circuit.jpg deleted file mode 100644 index 2e5a25e81e..0000000000 Binary files a/hhkb/doc/Bluetooth_img/BT_circuit.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB.txt b/hhkb/doc/HHKB.txt deleted file mode 100644 index ace931de38..0000000000 --- a/hhkb/doc/HHKB.txt +++ /dev/null @@ -1,199 +0,0 @@ -Alternative Controller for HHKB pro -=================================== -I want to add vi cursor and mouse keys to HHKB. Original HHKB controller is not programmable and -firmware source code is not open. So, customizing HHKB needs to replace original controller with programmable one. -I used Teensy++ as alternative controller. Though a Teensy has enough ports to drive HHKB, -Teensy++ has clean pinout and it makes programing and wiring easier. - -This is just a proof of concept for replacing controller of HHKB, not a complete firmware. - -My prototype firmware source tree is here: - github(http://github.com/tmk/tmk_keyboard) -This firmware is a port of my previous project: - HHKB style Mod(http://geekhack.org/showwiki.php?title=Island:11930) -PJRC: - Teensy++/Teensy(http://www.pjrc.com/teensy/) - - -Pros: - * without pattern cutting, case mod and soldering - * can keep original controller intact - * can change HHKB behaviour as you like(by C programming) - -Cons: - * void your warranty - * unavailability of Teensy++/Teensy(because of PS3 cracking boom?) - -Features: - * customized keymap - * more keymap layers - * mouse keys for minimum mouse operation(never comfortable for normal use) - * and more...(in the future) - -Any suggestions or ideas are welcome. - - -NOTE: - My HHKB is just "Professional". This means followings may not be applied to "Professional2". - -DISCLAIMER: - I'm not a professional for electronics and MCU programming. This may damage your HHKB. - And my English writing is poor, I'm not sure I can convey my notions accurately. - - -Teensy++ installation ---------------------- -Angled USB mini B adapter is used to install Teensy++ laterally. -(teensy_install.jpg) - -Bread baord wires are used to connect Teensy++. -(teensy_wiring.jpg) -(connector_contact.jpg) - - -HHKB internal -------------- -HHKB pro has some chips on separate two PCBs. - -Controller PCB: - M38K07M4 Renesas MCU with USB function - http://documentation.renesas.com/eng/products/mpumcu/rej03b0192_38k0ds.pdf - - (HHKB_controller.jpg) - -Keyswitch PCB: - HC4051 Analog Multiplexer: select a row line. - http://www.alldatasheet.com/datasheet-pdf/pdf/203989/KODENSHI/KK74HC4051A.html - LS145 BCD Decoder: select a column line. - http://www.alldatasheet.com/datasheet-pdf/pdf/27373/TI/SN74LS145D.html - BU9831 Non-volatile electronic potentiometer: for calibration? - http://www.alldatasheet.com/datasheet-pdf/pdf/36387/ROHM/BU9831.html - TP1683/4 Capacitive Sensing controller: no datasheet available. - - (HHKB_keyswitch.jpg) - - Topre original chip? - (HHKB_TP1684.jpg) - - -Two PCBs are connected by 15 lines. Vcc and GND use 3 lines each, other 9 lines are for keyboard signaling. - - Keyswitch PCB connector Teensy++ pins - ------------------------------------------------------------------------------- - 1 Vcc(5V) 5V - 2 Vcc(5V) - 3 Vcc(5V) - 4 TP1684 KEY: Low(0) when key pressed PE6 input(with pullup) - 5 TP1684 KEY_PREV: assert previous key state??? PE7 output - 6 HC4051 A(bit0) select 8 rows(0 to 7) PB0 output - 7 HC4051 B(bit1) PB1 output - 8 HC4051 C(bit2) PB2 output - 9 LS145 A(bit0) select 8 columns(0 to 7) PB3 output - 10 LS145 B(bit1) PB4 output - 11 LS145 C(bit2) PB5 output - 12 LS145 D(enable) Low(0) enable selected column PB6 output - 13 GND - 14 GND - 15 GND GND - - (HHKB_connector.jpg) - - -Keyswitch matrix ----------------- -60 keyswitches in 8*8 matrix. It is ghost-free and bounce-free. - - COL 0 1 2 3 4 5 6 7 -ROW --------------------------------------------------------------- - 0| 2 q w s a z x c - 1| 3 4 r e d f v b - 2| 5 6 y t g h n _NONE_ - 3| 1 Esc Tab Control LShift LAlt LMeta Space - 4| 7 8 u i k j m _NONE_ - 5| \ ` Delete Return Fn RShift RAlt RMeta - 6| 9 0 o p ; l , _NONE_ - 7| - + ] [ ' / . _NONE_ - - -Matrix diagram: - +-------------------------+-+-+-+-+-+-+-+ Vcc - |bias control? - - - - - - - - --- - | 3.9K*8 R R R R R R R R | - +--------^+ +--------+ - - - - - - - - | - | 2| | HC4051 <0-------|-|-|-|-|-|-|-|--|R|-+ - | |capa. | <1-------|-|-|-|-|-|-|-|--|R|-+ - | TP1684 |sense | <2-------|-|-|-|-|-|-|-|--|R|-+ - | 11<------| <3-------|-|-|-|-|-|-|-|--|R|-+ - | | | <4-------|-|-|-|-|-|-|-|--|R|-+ - | | | <5-------|-|-|-|-|-|-|-|--|R|-+ - | <-+ | <6-------|-|-|-|-|-|-|-|--|R|-+ - | 1 4 | | | <7-------|-|-|-|-|-|-|-|--|R|-+ - +---V---^-+ | +-^-^-^--+ 0 1 2 3 4 5 6 7 33K*8 - KEY PREV | A B C +-----------------+ - | | +-^----+ | | | | LS145 | - Vcc | | |BU9831| | | | +-^--^--^--^------+ - --- | | +------+ | | | A B C D +------+ - | | | | | | | | | | | | - 1-3 4 5 6 7 8 9 10 11 12 13-15 | - +--------------------------------------------------+ | - | connector | --- - +--------------------------------------------------+ GND - to controller - - -Signals charts: - While pressing space bar, watched HHKB original controller signals by logic analyzer. - Row and column is looping between 0-7 each for selecting a key. - A key is scaned every about 15ms, so scan rate is 66Hz. - - (HHKB_chart1.jpg) - - Space bar locate at ROW:3 COL:7. A key is selected by HC4051(C,B,A) and LS145(C,B,A). - Key state can be read on TP1684(4/KEY) while asserting low on LS145(D). - - Usage of TP1684(5) is not clear. Controller seemed to output previous key state on this line. - However key state can be read without using this signal. - - (HHKB_chart2.jpg) - - -Matrix scan pseudo code: - for (row: 0-7) { - SELECT_ROW(row); // set HC4051(A,B,C) - - for (col: 0-7) { - SELECT_COL(col); // set LS145(A,B,C) - - _delay_us(40); - - if (prev_key_state(row, col)) { - KEY_PREV_ON; - } - - _delay_us(7); - - ENALBLE_COL(); // set LS145(D) to low - - _delay_us(10); - - if (KEY == 0) { // read TP1684(KEY) - // key pressed - } else { - // not pressed - } - - KEY_PREV_OFF; - UNALBLE_COL(); // set LS145(D) to high - - _delay_us(150); - } - } - - -Keymap layers -------------- -Followings are added layers with additional Fn keys. - -see keymap.c - -EOF diff --git a/hhkb/doc/HHKB_img/HHKB_TP1684.jpg b/hhkb/doc/HHKB_img/HHKB_TP1684.jpg deleted file mode 100644 index 0a03164094..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_TP1684.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/HHKB_chart1.jpg b/hhkb/doc/HHKB_img/HHKB_chart1.jpg deleted file mode 100644 index 1f09bd185c..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_chart1.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/HHKB_chart2.jpg b/hhkb/doc/HHKB_img/HHKB_chart2.jpg deleted file mode 100644 index 45f5ada905..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_chart2.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/HHKB_connector.jpg b/hhkb/doc/HHKB_img/HHKB_connector.jpg deleted file mode 100644 index e8a09e9b28..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_connector.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/HHKB_controller.jpg b/hhkb/doc/HHKB_img/HHKB_controller.jpg deleted file mode 100644 index e3dae8e86c..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_controller.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/HHKB_keyswitch.jpg b/hhkb/doc/HHKB_img/HHKB_keyswitch.jpg deleted file mode 100644 index 3afc269e7b..0000000000 Binary files a/hhkb/doc/HHKB_img/HHKB_keyswitch.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/connector_contact.jpg b/hhkb/doc/HHKB_img/connector_contact.jpg deleted file mode 100644 index 5304bc8d7e..0000000000 Binary files a/hhkb/doc/HHKB_img/connector_contact.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/logic_analyzer.jpg b/hhkb/doc/HHKB_img/logic_analyzer.jpg deleted file mode 100644 index f1b438ae77..0000000000 Binary files a/hhkb/doc/HHKB_img/logic_analyzer.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/probe_contact.jpg b/hhkb/doc/HHKB_img/probe_contact.jpg deleted file mode 100644 index dc79afa0cc..0000000000 Binary files a/hhkb/doc/HHKB_img/probe_contact.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/teensy_install.jpg b/hhkb/doc/HHKB_img/teensy_install.jpg deleted file mode 100644 index 873d988edb..0000000000 Binary files a/hhkb/doc/HHKB_img/teensy_install.jpg and /dev/null differ diff --git a/hhkb/doc/HHKB_img/teensy_wiring.jpg b/hhkb/doc/HHKB_img/teensy_wiring.jpg deleted file mode 100644 index 1c4eb67434..0000000000 Binary files a/hhkb/doc/HHKB_img/teensy_wiring.jpg and /dev/null differ diff --git a/hhkb/keymap.c b/hhkb/keymap.c deleted file mode 100644 index 85a7c31b7e..0000000000 --- a/hhkb/keymap.c +++ /dev/null @@ -1,221 +0,0 @@ -/* -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 . -*/ - -/* - * Keymap for PFU HHKB Pro - */ -#include -#include -#include -#include "host.h" -#include "usb_keycodes.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "keymap.h" - - -// Convert physical keyboard layout to matrix array. -// This is a macro to define keymap easily in keyboard layout form. -#define KEYMAP( \ - K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \ - K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \ - K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \ - K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \ - K35, K36, K37, K57, K56 \ -) \ -{ \ - { KB_##K00, KB_##K01, KB_##K02, KB_##K03, KB_##K04, KB_##K05, KB_##K06, KB_##K07 }, \ - { KB_##K10, KB_##K11, KB_##K12, KB_##K13, KB_##K14, KB_##K15, KB_##K16, KB_##K17 }, \ - { KB_##K20, KB_##K21, KB_##K22, KB_##K23, KB_##K24, KB_##K25, KB_##K26, KB_NO }, \ - { KB_##K30, KB_##K31, KB_##K32, KB_##K33, KB_##K34, KB_##K35, KB_##K36, KB_##K37 }, \ - { KB_##K40, KB_##K41, KB_##K42, KB_##K43, KB_##K44, KB_##K45, KB_##K46, KB_NO }, \ - { KB_##K50, KB_##K51, KB_##K52, KB_##K53, KB_##K54, KB_##K55, KB_##K56, KB_##K57 }, \ - { KB_##K60, KB_##K61, KB_##K62, KB_##K63, KB_##K64, KB_##K65, KB_##K66, KB_NO }, \ - { KB_##K70, KB_##K71, KB_##K72, KB_##K73, KB_##K74, KB_##K75, KB_##K76, KB_NO } \ -} - -#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) - - -// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. -static const uint8_t PROGMEM fn_layer[] = { - 0, // Fn0 - 1, // Fn1 - 2, // Fn2 - 3, // Fn3 - 3, // Fn4 - 4, // Fn5 - 0, // Fn6 - 0 // Fn7 -}; - -// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer. -// See layer.c for details. -static const uint8_t PROGMEM fn_keycode[] = { - KB_NO, // Fn0 - KB_NO, // Fn1 - KB_SLSH, // Fn2 - KB_SCLN, // Fn3 - KB_NO, // Fn4 - KB_SPC, // Fn5 - KB_NO, // Fn6 - KB_NO // Fn7 -}; - -static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layer 0: Default Layer - * ,-----------------------------------------------------------. - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| - * |-----------------------------------------------------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs| - * |-----------------------------------------------------------| - * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | - * |-----------------------------------------------------------| - * |Shift | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1| - * `-----------------------------------------------------------' - * |Gui|Alt |Fn5 |Alt |Fn4| - * `-------------------------------------------' - */ - KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ - LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,ENT, \ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \ - LGUI,LALT, FN5, RALT,FN4), - - /* Layer 1: HHKB mode (HHKB Fn) - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs| - * |-----------------------------------------------------------| - * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter | - * |-----------------------------------------------------------| - * |Shift | | | | | | +| -|End|PgD|Dow|Shift |xxx| - * `-----------------------------------------------------------' - * |Gui |Alt |Space |Alt |xxx| - * `--------------------------------------------' - */ - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,BRK, UP, NO, BSPC, \ - LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \ - LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT,FN1, \ - LGUI,LALT, SPC, RALT,FN7), - - /* Layer 2: Vi mode (Slash) - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs| - * |-----------------------------------------------------------| - * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return | - * |-----------------------------------------------------------| - * |Shift | | | | | |Hom|PgD|PgUlEnd|xxx|Shift | | - * `-----------------------------------------------------------' - * |Gui|Alt |Space |Alt |Gui| - * `-------------------------------------------' - */ - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \ - LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \ - LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,NO, \ - LGUI,LALT, SPC, RALT,RGUI), - - /* Layer 3: Mouse mode (Semicolon) - * ,-----------------------------------------------------------. - * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| - * |-----------------------------------------------------------| - * |Tab |MwL|MwU|McU|MwD|MwR|MwL|MwD|MwU|MwR| | | |Backs| - * |-----------------------------------------------------------| - * |Contro| |McL|McD|McR| |McL|McD|McU|McR|xxx| |Return | - * |-----------------------------------------------------------| - * |Shift |Mb4|Mb5|Mb1|Mb2|Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | | - * `-----------------------------------------------------------' - * |Gui |Alt |Mb1 |Alt |Gui| - * `--------------------------------------------' - * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel - */ -#ifdef HOST_IWRAP -// iWRAP does not support mouse wheel, use these keycodes to remap as wheel -#define KB_KPPL KB_KP_PLUS -#define KB_KPMI KB_KP_MINUS -#define KB_KPAS KB_KP_ASTERISK -#define KB_KPSL KB_KP_SLASH - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, KPAS,KPPL,MS_U,KPMI,KPSL,KPAS,KPPL,KPMI,KPSL,NO, NO, NO, BSPC, \ - LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ - LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,NO, NO, NO, RSFT,NO, \ - LGUI,LALT, BTN1, RALT,FN4), -#else - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, WH_L,WH_U,MS_U,WH_D,WH_R,WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ - LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ - LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \ - LGUI,LALT, BTN1, RALT,FN4), -#endif - - /* Layer 4: Matias half keyboard style (Space) - * ,-----------------------------------------------------------. - * | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc| - * |-----------------------------------------------------------| - * |Backs| P| O| I| U| Y| T| R| E| W| Q| | |Tab | - * |-----------------------------------------------------------| - * |Contro| ;| L| K| J| H| G| F| D| S| A|Con|Control | - * |-----------------------------------------------------------| - * |Shift | /| .| ,| M| N| B| V| C| X| Z|Shift | | - * `-----------------------------------------------------------' - * |Gui |Alt |xxxxxxxxxxxxxxxxxxxxxxx|Alt |Gui| - * `--------------------------------------------' - */ -/* - KEYMAP(MINS,0, 9, 8, 7, 6, 5, 4, 3, 2, 1, NO, NO, NO, ESC, \ - BSPC,P, O, I, U, Y, T, R, E, W, Q, NO, NO, TAB, \ - LCTL,SCLN,L, K, J, H, G, F, D, S, A, RCTL,RCTL, \ - LSFT,SLSH,DOT, COMM,M, N, B, V, C, X, Z, RSFT,NO, \ - LGUI,LALT, FN5, RALT,RGUI) -*/ - /* Mouse mode (Space) */ -#ifdef HOST_IWRAP - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, KPAS,KPPL,MS_U,KPMI,KPSL,KPAS,KPPL,KPMI,KPSL,NO, NO, NO, BSPC, \ - LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ - LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \ - LGUI,LALT, FN5, RALT,RGUI), -#else - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ - TAB, WH_L,WH_U,MS_U,WH_D,WH_R,WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ - LCTL,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN3, NO, ENT, \ - LSFT,BTN4,BTN5,BTN1,BTN2,BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \ - LGUI,LALT, FN5, RALT,RGUI), -#endif -}; - - -uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) -{ - return KEYCODE(layer, row, col); -} - -uint8_t keymap_fn_layer(uint8_t fn_bits) -{ - return pgm_read_byte(&fn_layer[biton(fn_bits)]); -} - -uint8_t keymap_fn_keycode(uint8_t fn_bits) -{ - return pgm_read_byte(&fn_keycode[(biton(fn_bits))]); -} diff --git a/hhkb/led.c b/hhkb/led.c deleted file mode 100644 index 669b6107fa..0000000000 --- a/hhkb/led.c +++ /dev/null @@ -1,26 +0,0 @@ -/* -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 "stdint.h" -#include "led.h" - - -/* HHKB has no LEDs */ -void led_set(uint8_t usb_led) -{ -} - diff --git a/hhkb/matrix.c b/hhkb/matrix.c deleted file mode 100644 index 350066b904..0000000000 --- a/hhkb/matrix.c +++ /dev/null @@ -1,294 +0,0 @@ -/* -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 . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include -#include -#include "print.h" -#include "util.h" -#include "timer.h" -#include "matrix.h" - - -// Timer resolution check -#if (1000000/TIMER_RAW_FREQ > 20) -# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB." -#endif - -#if (MATRIX_COLS > 16) -# error "MATRIX_COLS must not exceed 16" -#endif -#if (MATRIX_ROWS > 255) -# error "MATRIX_ROWS must not exceed 255" -#endif - - -// matrix state buffer(1:on, 0:off) -#if (MATRIX_COLS <= 8) -static uint8_t *matrix; -static uint8_t *matrix_prev; -static uint8_t _matrix0[MATRIX_ROWS]; -static uint8_t _matrix1[MATRIX_ROWS]; -#else -static uint16_t *matrix; -static uint16_t *matrix_prev; -static uint16_t _matrix0[MATRIX_ROWS]; -static uint16_t _matrix1[MATRIX_ROWS]; -#endif - -// HHKB has no ghost and no bounce. -#ifdef MATRIX_HAS_GHOST -static bool matrix_has_ghost_in_row(uint8_t row); -#endif - - -// Matrix I/O ports -// -// row: HC4051[A,B,C] selects scan row0-7 -// col: LS145[A,B,C,D] selects scan col0-7 and enable(D) -// key: on: 0/off: 1 -// prev: unknown: output previous key state(negated)? - -#ifdef HOST_PJRC -// Ports for Teensy -// row: PB0-2 -// col: PB3-5,6 -// key: PE6(pull-uped) -// prev: PE7 -#define KEY_INIT() do { \ - DDRB |= 0x7F; \ - DDRE |= (1<<7); \ - DDRE &= ~(1<<6); \ - PORTE |= (1<<6); \ -} while (0) -#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \ - (((COL) & 0x07)<<3) | \ - ((ROW) & 0x07)) -#define KEY_ENABLE() (PORTB &= ~(1<<6)) -#define KEY_UNABLE() (PORTB |= (1<<6)) -#define KEY_STATE() (PINE & (1<<6)) -#define KEY_PREV_ON() (PORTE |= (1<<7)) -#define KEY_PREV_OFF() (PORTE &= ~(1<<7)) -#define KEY_POWER_ON() -#define KEY_POWER_OFF() -#else -// Ports for V-USB -// key: PB0(pull-uped) -// prev: PB1 -// row: PB2-4 -// col: PC0-2,3 -// power: PB5(Low:on/Hi-z:off) -#define KEY_INIT() do { \ - DDRB |= 0x3E; \ - DDRB &= ~(1<<0); \ - PORTB |= 1<<0; \ - DDRC |= 0x0F; \ - KEY_UNABLE(); \ - KEY_PREV_OFF(); \ -} while (0) -#define KEY_SELECT(ROW, COL) do { \ - PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \ - PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \ -} while (0) -#define KEY_ENABLE() (PORTC &= ~(1<<3)) -#define KEY_UNABLE() (PORTC |= (1<<3)) -#define KEY_STATE() (PINB & (1<<0)) -#define KEY_PREV_ON() (PORTB |= (1<<1)) -#define KEY_PREV_OFF() (PORTB &= ~(1<<1)) -// Power supply switching -#define KEY_POWER_ON() do { \ - KEY_INIT(); \ - PORTB &= ~(1<<5); \ - _delay_us(200); \ -} while (0) -#define KEY_POWER_OFF() do { \ - DDRB &= ~0x3F; \ - PORTB &= ~0x3F; \ - DDRC &= ~0x0F; \ - PORTC &= ~0x0F; \ -} while (0) -#endif - - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - KEY_INIT(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00; - for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00; - matrix = _matrix0; - matrix_prev = _matrix1; -} - -uint8_t matrix_scan(void) -{ - uint8_t *tmp; - - tmp = matrix_prev; - matrix_prev = matrix; - matrix = tmp; - - KEY_POWER_ON(); - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - KEY_SELECT(row, col); - _delay_us(40); - - // Not sure this is needed. This just emulates HHKB controller's behaviour. - if (matrix_prev[row] & (1< 20/(1000000/TIMER_RAW_FREQ)) { - matrix[row] = matrix_prev[row]; - } - - KEY_PREV_OFF(); - KEY_UNABLE(); - // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE. - // This takes 25us or more to make sure KEY_STATE returns to idle state. - _delay_us(150); - } - } - KEY_POWER_OFF(); - return 1; -} - -bool matrix_is_modified(void) -{ - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - if (matrix[i] != matrix_prev[i]) - return true; - } - return false; -} - -inline -bool matrix_has_ghost(void) -{ -#ifdef MATRIX_HAS_GHOST - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - if (matrix_has_ghost_in_row(i)) - return true; - } -#endif - return false; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & (1<> 8) & 0xFF) -/* USB vendor ID for the device, low byte first. If you have registered your - * own Vendor ID, define it here. Otherwise you may use one of obdev's free - * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! - * *** IMPORTANT NOTE *** - * This template uses obdev's shared VID/PID pair for Vendor Class devices - * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand - * the implications! - */ -#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) -/* This is the ID of the product, low byte first. It is interpreted in the - * scope of the vendor ID. If you have registered your own VID with usb.org - * or if you have licensed a PID from somebody else, define it here. Otherwise - * you may use one of obdev's free shared VID/PID pairs. See the file - * USB-IDs-for-free.txt for details! - * *** IMPORTANT NOTE *** - * This template uses obdev's shared VID/PID pair for Vendor Class devices - * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand - * the implications! - */ -#define USB_CFG_DEVICE_VERSION 0x00, 0x01 -/* Version number of the device: Minor number first, then major number. - */ -#define USB_CFG_VENDOR_NAME 't', '.', 'm', '.', 'k', '.' -#define USB_CFG_VENDOR_NAME_LEN 6 -/* These two values define the vendor name returned by the USB device. The name - * must be given as a list of characters under single quotes. The characters - * are interpreted as Unicode (UTF-16) entities. - * If you don't want a vendor name string, undefine these macros. - * ALWAYS define a vendor name containing your Internet domain name if you use - * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for - * details. - */ -#define USB_CFG_DEVICE_NAME 'H', 'H', 'K', 'B', ' ', 'm', 'o', 'd' -#define USB_CFG_DEVICE_NAME_LEN 8 -/* Same as above for the device name. If you don't want a device name, undefine - * the macros. See the file USB-IDs-for-free.txt before you assign a name if - * you use a shared VID/PID. - */ -/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ -/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ -/* Same as above for the serial number. If you don't want a serial number, - * undefine the macros. - * It may be useful to provide the serial number through other means than at - * compile time. See the section about descriptor properties below for how - * to fine tune control over USB descriptors such as the string descriptor - * for the serial number. - */ -#define USB_CFG_DEVICE_CLASS 0 -#define USB_CFG_DEVICE_SUBCLASS 0 -/* See USB specification if you want to conform to an existing device class. - * Class 0xff is "vendor specific". - */ -#define USB_CFG_INTERFACE_CLASS 3 /* HID */ -#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ -#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ -/* See USB specification if you want to conform to an existing device class or - * protocol. The following classes must be set at interface level: - * HID class is 3, no subclass and protocol required (but may be useful!) - * CDC class is 2, use subclass 2 and protocol 1 for ACM - */ -#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 -/* Define this to the length of the HID report descriptor, if you implement - * an HID device. Otherwise don't define it or define it to 0. - * If you use this define, you must add a PROGMEM character array named - * "usbHidReportDescriptor" to your code which contains the report descriptor. - * Don't forget to keep the array and this define in sync! - */ - -/* #define USB_PUBLIC static */ -/* Use the define above if you #include usbdrv.c instead of linking against it. - * This technique saves a couple of bytes in flash memory. - */ - -/* ------------------- Fine Control over USB Descriptors ------------------- */ -/* If you don't want to use the driver's default USB descriptors, you can - * provide our own. These can be provided as (1) fixed length static data in - * flash memory, (2) fixed length static data in RAM or (3) dynamically at - * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more - * information about this function. - * Descriptor handling is configured through the descriptor's properties. If - * no properties are defined or if they are 0, the default descriptor is used. - * Possible properties are: - * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched - * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is - * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if - * you want RAM pointers. - * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found - * in static memory is in RAM, not in flash memory. - * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), - * the driver must know the descriptor's length. The descriptor itself is - * found at the address of a well known identifier (see below). - * List of static descriptor names (must be declared PROGMEM if in flash): - * char usbDescriptorDevice[]; - * char usbDescriptorConfiguration[]; - * char usbDescriptorHidReport[]; - * char usbDescriptorString0[]; - * int usbDescriptorStringVendor[]; - * int usbDescriptorStringDevice[]; - * int usbDescriptorStringSerialNumber[]; - * Other descriptors can't be provided statically, they must be provided - * dynamically at runtime. - * - * Descriptor properties are or-ed or added together, e.g.: - * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) - * - * The following descriptors are defined: - * USB_CFG_DESCR_PROPS_DEVICE - * USB_CFG_DESCR_PROPS_CONFIGURATION - * USB_CFG_DESCR_PROPS_STRINGS - * USB_CFG_DESCR_PROPS_STRING_0 - * USB_CFG_DESCR_PROPS_STRING_VENDOR - * USB_CFG_DESCR_PROPS_STRING_PRODUCT - * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER - * USB_CFG_DESCR_PROPS_HID - * USB_CFG_DESCR_PROPS_HID_REPORT - * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) - * - * Note about string descriptors: String descriptors are not just strings, they - * are Unicode strings prefixed with a 2 byte header. Example: - * int serialNumberDescriptor[] = { - * USB_STRING_DESCRIPTOR_HEADER(6), - * 'S', 'e', 'r', 'i', 'a', 'l' - * }; - */ - -#define USB_CFG_DESCR_PROPS_DEVICE 0 -#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC -//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 -#define USB_CFG_DESCR_PROPS_STRINGS 0 -#define USB_CFG_DESCR_PROPS_STRING_0 0 -#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 -#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 -#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 -#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC -//#define USB_CFG_DESCR_PROPS_HID 0 -#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC -//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 -#define USB_CFG_DESCR_PROPS_UNKNOWN 0 - -/* ----------------------- Optional MCU Description ------------------------ */ - -/* The following configurations have working defaults in usbdrv.h. You - * usually don't need to set them explicitly. Only if you want to run - * the driver on a device which is not yet supported or with a compiler - * which is not fully supported (such as IAR C) or if you use a differnt - * interrupt than INT0, you may have to define some of these. - */ -/* #define USB_INTR_CFG MCUCR */ -/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ -/* #define USB_INTR_CFG_CLR 0 */ -/* #define USB_INTR_ENABLE GIMSK */ -/* #define USB_INTR_ENABLE_BIT INT0 */ -/* #define USB_INTR_PENDING GIFR */ -/* #define USB_INTR_PENDING_BIT INTF0 */ -/* #define USB_INTR_VECTOR INT0_vect */ - -/* Set INT1 for D- falling edge to count SOF */ -/* #define USB_INTR_CFG EICRA */ -#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10)) -/* #define USB_INTR_CFG_CLR 0 */ -/* #define USB_INTR_ENABLE EIMSK */ -#define USB_INTR_ENABLE_BIT INT1 -/* #define USB_INTR_PENDING EIFR */ -#define USB_INTR_PENDING_BIT INTF1 -#define USB_INTR_VECTOR INT1_vect - -#endif /* __usbconfig_h_included__ */ -- cgit v1.2.3