Added Bulegiga iWRAP support into HHKB.(Bluetooth)
This commit is contained in:
1 parent
b703de7b29
commit
e67c988824
90 files changed
+3154
-541
No files matched your search
@@ -0,0 +1,40 @@
|
||||
ATMega168P Fuse/Lock Bits
|
||||
=========================
|
||||
This configuration is from usbasploader's Makefile.
|
||||
|
||||
HFUSE 0xD6
|
||||
LFUSE 0xDF
|
||||
EFUSE 0x00
|
||||
LOCK 0x3F(intact)
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# ATMega168P
|
||||
#---------------------------------------------------------------------
|
||||
# Fuse extended byte:
|
||||
# 0x00 = 0 0 0 0 0 0 0 0 <-- BOOTRST (boot reset vector at 0x1800)
|
||||
# \+/
|
||||
# +------- BOOTSZ (00 = 2k bytes)
|
||||
# Fuse high byte:
|
||||
# 0xd6 = 1 1 0 1 0 1 1 0
|
||||
# ^ ^ ^ ^ ^ \-+-/
|
||||
# | | | | | +------ BODLEVEL 0..2 (110 = 1.8 V)
|
||||
# | | | | + --------- EESAVE (preserve EEPROM over chip erase)
|
||||
# | | | +-------------- WDTON (if 0: watchdog always on)
|
||||
# | | +---------------- SPIEN (allow serial programming)
|
||||
# | +------------------ DWEN (debug wire enable)
|
||||
# +-------------------- RSTDISBL (reset pin is enabled)
|
||||
# Fuse low byte:
|
||||
# 0xdf = 1 1 0 1 1 1 1 1
|
||||
# ^ ^ \ / \--+--/
|
||||
# | | | +------- CKSEL 3..0 (external >8M crystal)
|
||||
# | | +--------------- SUT 1..0 (crystal osc, BOD enabled)
|
||||
# | +------------------ CKOUT (if 0: Clock output enabled)
|
||||
# +-------------------- CKDIV8 (if 0: divide by 8)
|
||||
|
||||
|
||||
# Lock Bits
|
||||
# 0x3f = - - 1 1 1 1 1 1
|
||||
# \ / \-/ \-/
|
||||
# | | +----- LB 2..1 (No memory lock features enabled)
|
||||
# | +--------- BLB0 2..1 (No restrictions for SPM or LPM accessing the Application section)
|
||||
# +--------------- BLB1 2..1 (No restrictions for SPM or LPM accessing the Boot Loader section)
|
||||
@@ -0,0 +1,91 @@
|
||||
#
|
||||
# Makefile for iWRAP
|
||||
#
|
||||
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = hhkb_iwrap
|
||||
|
||||
# Directory common source filess exist
|
||||
COMMON_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 <http://savannah.nongnu.org/projects/avrdude>
|
||||
# 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 $(COMMON_DIR)/iwrap.mk
|
||||
# To be swatchable btween Bluetooth and USB. Comment out if you don't need USB.
|
||||
include $(COMMON_DIR)/vusb.mk
|
||||
include $(COMMON_DIR)/common.mk
|
||||
@@ -13,10 +13,10 @@ COMMON_DIR = ..
|
||||
TARGET_DIR = .
|
||||
|
||||
# keyboard dependent files
|
||||
TARGET_SRC = main_pjrc.c \
|
||||
keymap.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
SRC = main.c \
|
||||
keymap.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
CONFIG_H = config_pjrc.h
|
||||
|
||||
@@ -41,8 +41,8 @@ F_CPU = 16000000
|
||||
# comment out to disable the options.
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||
USB_EXTRA_ENABLE = yes # Audio control and System control
|
||||
USB_NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
|
||||
|
||||
|
||||
@@ -51,5 +51,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
|
||||
|
||||
|
||||
|
||||
include $(COMMON_DIR)/Makefile.pjrc
|
||||
include $(COMMON_DIR)/Makefile.common
|
||||
# Search Path
|
||||
VPATH = $(TARGET_DIR)
|
||||
|
||||
include $(COMMON_DIR)/pjrc.mk
|
||||
include $(COMMON_DIR)/common.mk
|
||||
+17
-12
@@ -13,10 +13,10 @@ COMMON_DIR = ..
|
||||
TARGET_DIR = .
|
||||
|
||||
# keyboard dependent files
|
||||
TARGET_SRC = main_vusb.c \
|
||||
keymap.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
SRC = main.c \
|
||||
keymap.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
CONFIG_H = config_vusb.h
|
||||
|
||||
@@ -28,7 +28,9 @@ 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 = atmega168
|
||||
MCU = atmega168p
|
||||
# avrdude doesn't know atmega168p
|
||||
AVRDUDE_MCU = atmega168
|
||||
|
||||
|
||||
# Processor frequency.
|
||||
@@ -36,15 +38,15 @@ MCU = atmega168
|
||||
# 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 = 20000000
|
||||
F_CPU = 12000000
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
USB_EXTRA_ENABLE = yes # Audio control and System control
|
||||
#USB_NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
#NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
|
||||
|
||||
|
||||
@@ -70,8 +72,8 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
|
||||
# to submit bug reports.
|
||||
#AVRDUDE_VERBOSE = -v -v
|
||||
|
||||
#AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
|
||||
AVRDUDE_FLAGS = -p $(MCU) -c $(AVRDUDE_PROGRAMMER)
|
||||
#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)
|
||||
@@ -80,5 +82,8 @@ PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE
|
||||
|
||||
|
||||
|
||||
include $(COMMON_DIR)/Makefile.vusb
|
||||
include $(COMMON_DIR)/Makefile.common
|
||||
# Search Path
|
||||
VPATH = $(TARGET_DIR)
|
||||
|
||||
include $(COMMON_DIR)/vusb.mk
|
||||
include $(COMMON_DIR)/common.mk
|
||||
+92
-21
@@ -4,7 +4,7 @@ Alternative Controller for HHKB
|
||||
Feature
|
||||
-------
|
||||
- Mouse Keys
|
||||
- NKRO on USB
|
||||
- NKRO on USB(PJRC Tennsy only)
|
||||
- Keymap Layers
|
||||
|
||||
|
||||
@@ -13,8 +13,11 @@ Customize Keymap
|
||||
see keymap.c.
|
||||
|
||||
|
||||
Build for Teensy
|
||||
----------------
|
||||
|
||||
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)
|
||||
@@ -22,15 +25,15 @@ Build for Teensy
|
||||
IS_COMMAND
|
||||
2. Edit Makefile for MCU setting and build options.
|
||||
MCU, F_CPU
|
||||
MOUSEKEY_ENABLE, USB_EXTRA_ENABLE, USB_NKRO_ENABLE
|
||||
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, NKRO_ENABLE
|
||||
3. Build hex file.
|
||||
$ make
|
||||
$ make -f Makefile.pjrc
|
||||
4. Program MCU.
|
||||
$ make program
|
||||
$ make -f Makefile.pjrc program
|
||||
|
||||
|
||||
Build for V-USB
|
||||
---------------
|
||||
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.
|
||||
@@ -38,7 +41,7 @@ Build for V-USB
|
||||
IS_COMMAND
|
||||
2. Edit Makefile.vusb for MCU setting and build options.
|
||||
MCU, F_CPU
|
||||
MOUSEKEY_ENABLE, USB_EXTRA_ENABLE, USB_NKRO_ENABLE
|
||||
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE
|
||||
3. Build hex file.
|
||||
$ make -f Makefile.vusb
|
||||
4. Program MCU.
|
||||
@@ -52,21 +55,59 @@ Build for V-USB
|
||||
http://www.obdev.at/products/vusb/usbasploader.html
|
||||
|
||||
|
||||
V-USB Circuit
|
||||
-------------
|
||||
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 | |
|
||||
~~~ C3 | |
|
||||
5V <-------+--------+---|Vcc,AVCC | HHKB
|
||||
R1 | | ====
|
||||
D- <----+--+-----R2-----|INT1 PB0-2|------->ROW
|
||||
D+ <----|---+----R3-----|INT0 PB3-5|------->COL
|
||||
Z1 Z2 | PB6|------->ENABLE
|
||||
GND<----+---+--+--+-----|GND PE6|------->KEY
|
||||
| | | PE7|------->PREV
|
||||
| C2-+--|XTAL1 | (see doc/HHKB.txt for pinouts)
|
||||
| X1 | |
|
||||
+--C3-+--|XTAL2 RST|---SW--+GND
|
||||
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
|
||||
@@ -77,4 +118,34 @@ 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
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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
|
||||
+1
-5
@@ -36,11 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \
|
||||
keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \
|
||||
)
|
||||
|
||||
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)))
|
||||
|
||||
/* mouse keys */
|
||||
#ifdef MOUSEKEY_ENABLE
|
||||
|
||||
+6
-6
@@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0xC0FE
|
||||
// TODO: share these strings with usbconfig.h
|
||||
@@ -34,11 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \
|
||||
keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \
|
||||
)
|
||||
|
||||
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)))
|
||||
|
||||
/* mouse keys */
|
||||
#ifdef MOUSEKEY_ENABLE
|
||||
@@ -46,4 +41,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#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
|
||||
@@ -0,0 +1,4 @@
|
||||
HHKB Bluetooth mod
|
||||
==================
|
||||
See this article:
|
||||
http://geekhack.org/showwiki.php?title=Island:20851
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
[Picasa]
|
||||
name=Bluetooth_img
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 490 KiB |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+68
-47
@@ -32,21 +32,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
// Convert physical keyboard layout to matrix array.
|
||||
// This is a macro to define keymap easily in keyboard layout form.
|
||||
#define KEYMAP( \
|
||||
R3C1, R3C0, R0C0, R1C0, R1C1, R2C0, R2C1, R4C0, R4C1, R6C0, R6C1, R7C0, R7C1, R5C0, R5C1, \
|
||||
R3C2, R0C1, R0C2, R1C3, R1C2, R2C3, R2C2, R4C2, R4C3, R6C2, R6C3, R7C3, R7C2, R5C2, \
|
||||
R3C3, R0C4, R0C3, R1C4, R1C5, R2C4, R2C5, R4C5, R4C4, R6C5, R6C4, R7C4, R5C3, \
|
||||
R3C4, R0C5, R0C6, R0C7, R1C6, R1C7, R2C6, R4C6, R6C6, R7C6, R7C5, R5C5, R5C4, \
|
||||
R3C5, R3C6, R3C7, R5C7, R5C6 \
|
||||
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 \
|
||||
) \
|
||||
{ \
|
||||
{ R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \
|
||||
{ R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \
|
||||
{ R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, KB_NO }, \
|
||||
{ R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \
|
||||
{ R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, KB_NO }, \
|
||||
{ R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \
|
||||
{ R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, KB_NO }, \
|
||||
{ R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, KB_NO } \
|
||||
{ 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)]))
|
||||
@@ -58,8 +58,8 @@ static const uint8_t PROGMEM fn_layer[] = {
|
||||
1, // Fn1
|
||||
2, // Fn2
|
||||
3, // Fn3
|
||||
4, // Fn4
|
||||
0, // Fn5
|
||||
3, // Fn4
|
||||
4, // Fn5
|
||||
0, // Fn6
|
||||
0 // Fn7
|
||||
};
|
||||
@@ -71,8 +71,8 @@ static const uint8_t PROGMEM fn_keycode[] = {
|
||||
KB_NO, // Fn1
|
||||
KB_SLSH, // Fn2
|
||||
KB_SCLN, // Fn3
|
||||
KB_SPC, // Fn4
|
||||
KB_NO, // Fn5
|
||||
KB_NO, // Fn4
|
||||
KB_SPC, // Fn5
|
||||
KB_NO, // Fn6
|
||||
KB_NO // Fn7
|
||||
};
|
||||
@@ -91,11 +91,11 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Gui|Alt |Fn5 |Alt |Fn4|
|
||||
* `-------------------------------------------'
|
||||
*/
|
||||
KEYMAP(KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSLS,KB_GRV, \
|
||||
KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC,KB_BSPC, \
|
||||
KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_FN3, KB_QUOT,KB_ENT, \
|
||||
KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_FN2, KB_RSFT,KB_FN1, \
|
||||
KB_LGUI,KB_LALT,KB_FN4, KB_RALT,KB_RGUI),
|
||||
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)
|
||||
* ,-----------------------------------------------------------.
|
||||
@@ -110,11 +110,11 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Gui |Alt |Space |Alt |xxx|
|
||||
* `--------------------------------------------'
|
||||
*/
|
||||
KEYMAP(KB_ESC, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_INS, KB_DEL, \
|
||||
KB_CAPS,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_PSCR,KB_SLCK,KB_BRK, KB_UP, KB_NO, KB_BSPC, \
|
||||
KB_LCTL,KB_VOLD,KB_VOLU,KB_MUTE,KB_NO, KB_NO, KB_PAST,KB_PSLS,KB_HOME,KB_PGUP,KB_LEFT,KB_RGHT,KB_ENT, \
|
||||
KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_PPLS,KB_PMNS,KB_END, KB_PGDN,KB_DOWN,KB_RSFT,KB_FN1, \
|
||||
KB_LGUI,KB_LALT,KB_SPC, KB_RALT,KB_FN7),
|
||||
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)
|
||||
* ,-----------------------------------------------------------.
|
||||
@@ -129,11 +129,11 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Gui|Alt |Space |Alt |Gui|
|
||||
* `-------------------------------------------'
|
||||
*/
|
||||
KEYMAP(KB_ESC, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_INS, KB_DEL, \
|
||||
KB_TAB, KB_HOME,KB_PGDN,KB_UP, KB_PGUP,KB_END, KB_HOME,KB_PGDN,KB_PGUP,KB_END, KB_NO, KB_NO, KB_NO, KB_BSPC, \
|
||||
KB_LCTL,KB_NO, KB_LEFT,KB_DOWN,KB_RGHT,KB_NO, KB_LEFT,KB_DOWN,KB_UP, KB_RGHT,KB_NO, KB_NO, KB_ENT, \
|
||||
KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_HOME,KB_PGDN,KB_PGUP,KB_END, KB_FN2, KB_RSFT,KB_NO, \
|
||||
KB_LGUI,KB_LALT,KB_SPC, KB_RALT,KB_RGUI),
|
||||
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)
|
||||
* ,-----------------------------------------------------------.
|
||||
@@ -149,11 +149,24 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `--------------------------------------------'
|
||||
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
|
||||
*/
|
||||
KEYMAP(KB_ESC, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_INS, KB_DEL, \
|
||||
KB_TAB, KB_WH_L,KB_WH_U,KB_MS_U,KB_WH_D,KB_WH_R,KB_WH_L,KB_WH_D,KB_WH_U,KB_WH_R,KB_NO, KB_NO, KB_NO, KB_BSPC, \
|
||||
KB_LCTL,KB_NO, KB_MS_L,KB_MS_D,KB_MS_R,KB_NO, KB_MS_L,KB_MS_D,KB_MS_U,KB_MS_R,KB_FN3, KB_NO, KB_ENT, \
|
||||
KB_LSFT,KB_BTN4,KB_BTN5,KB_BTN1,KB_BTN2,KB_BTN3,KB_BTN2,KB_BTN1,KB_BTN4,KB_BTN5,KB_NO, KB_RSFT,KB_NO, \
|
||||
KB_LGUI,KB_LALT,KB_BTN1,KB_RALT,KB_RGUI),
|
||||
#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)
|
||||
* ,-----------------------------------------------------------.
|
||||
@@ -169,18 +182,26 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `--------------------------------------------'
|
||||
*/
|
||||
/*
|
||||
KEYMAP(KB_MINS,KB_0, KB_9, KB_8, KB_7, KB_6, KB_5, KB_4, KB_3, KB_2, KB_1, KB_NO, KB_NO, KB_NO, KB_ESC, \
|
||||
KB_BSPC,KB_P, KB_O, KB_I, KB_U, KB_Y, KB_T, KB_R, KB_E, KB_W, KB_Q, KB_NO, KB_NO, KB_TAB, \
|
||||
KB_LCTL,KB_SCLN,KB_L, KB_K, KB_J, KB_H, KB_G, KB_F, KB_D, KB_S, KB_A, KB_RCTL,KB_RCTL, \
|
||||
KB_LSFT,KB_SLSH,KB_DOT, KB_COMM,KB_M, KB_N, KB_B, KB_V, KB_C, KB_X, KB_Z, KB_RSFT,KB_NO, \
|
||||
KB_LGUI,KB_LALT,KB_FN4, KB_RALT,KB_RGUI)
|
||||
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) */
|
||||
KEYMAP(KB_ESC, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_INS, KB_DEL, \
|
||||
KB_TAB, KB_WH_L,KB_WH_U,KB_MS_U,KB_WH_D,KB_WH_R,KB_WH_L,KB_WH_D,KB_WH_U,KB_WH_R,KB_NO, KB_NO, KB_NO, KB_BSPC, \
|
||||
KB_LCTL,KB_NO, KB_MS_L,KB_MS_D,KB_MS_R,KB_NO, KB_MS_L,KB_MS_D,KB_MS_U,KB_MS_R,KB_FN3, KB_NO, KB_ENT, \
|
||||
KB_LSFT,KB_BTN4,KB_BTN5,KB_BTN1,KB_BTN2,KB_BTN3,KB_BTN2,KB_BTN1,KB_BTN4,KB_BTN5,KB_NO, KB_RSFT,KB_NO, \
|
||||
KB_LGUI,KB_LALT,KB_FN4, KB_RALT,KB_RGUI),
|
||||
#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
|
||||
};
|
||||
|
||||
|
||||
|
||||
+49
-17
@@ -25,9 +25,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include <util/delay.h>
|
||||
#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
|
||||
@@ -82,18 +88,22 @@ static bool matrix_has_ghost_in_row(uint8_t row);
|
||||
#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 |= 0x1E; \
|
||||
DDRB &= ~(1<<0); \
|
||||
PORTB |= (1<<0); \
|
||||
DDRC |= 0x0F; \
|
||||
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; \
|
||||
@@ -104,6 +114,18 @@ static bool matrix_has_ghost_in_row(uint8_t row);
|
||||
#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
|
||||
|
||||
|
||||
@@ -138,36 +160,46 @@ uint8_t matrix_scan(void)
|
||||
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); // from logic analyzer chart
|
||||
_delay_us(40);
|
||||
|
||||
// Not sure this is needed. This just emulates HHKB controller's behaviour.
|
||||
if (matrix_prev[row] & (1<<col)) {
|
||||
KEY_PREV_ON();
|
||||
}
|
||||
_delay_us(7); // from logic analyzer chart
|
||||
_delay_us(7);
|
||||
|
||||
// NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE.
|
||||
// If V-USB interrupts in this section we could lose 40us or so
|
||||
// and would read invalid value from KEY_STATE.
|
||||
uint8_t last = TIMER_RAW;
|
||||
|
||||
#if HOST_VUSB
|
||||
// to avoid V-USB interrupt during read key state
|
||||
uint8_t sreg = SREG;
|
||||
cli();
|
||||
#endif
|
||||
KEY_ENABLE();
|
||||
_delay_us(10); // from logic analyzer chart
|
||||
// Wait for KEY_STATE outputs its value.
|
||||
// 1us was ok on one HHKB, but not worked on another.
|
||||
_delay_us(10);
|
||||
if (KEY_STATE()) {
|
||||
matrix[row] &= ~(1<<col);
|
||||
} else {
|
||||
matrix[row] |= (1<<col);
|
||||
}
|
||||
#if HOST_VUSB
|
||||
SREG = sreg;
|
||||
#endif
|
||||
|
||||
// Ignore if this code region execution time elapses more than 20us.
|
||||
if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) {
|
||||
matrix[row] = matrix_prev[row];
|
||||
}
|
||||
|
||||
KEY_PREV_OFF();
|
||||
KEY_UNABLE();
|
||||
_delay_us(150); // from logic analyzer chart
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
+13
-3
@@ -171,7 +171,7 @@ section at the end of this file).
|
||||
/* This macro (if defined) is executed when a USB SET_ADDRESS request was
|
||||
* received.
|
||||
*/
|
||||
#define USB_COUNT_SOF 0
|
||||
#define USB_COUNT_SOF 1
|
||||
/* define this macro to 1 if you need the global variable "usbSofCount" which
|
||||
* counts SOF packets. This feature requires that the hardware interrupt is
|
||||
* connected to D- instead of D+.
|
||||
@@ -352,8 +352,8 @@ section at the end of this file).
|
||||
#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 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
|
||||
@@ -375,4 +375,14 @@ section at the end of this file).
|
||||
/* #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__ */
|
||||
Reference in new issue
Block a user