# Hey Emacs, this is a -*- makefile -*- | |||||
#---------------------------------------------------------------------------- | |||||
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. | |||||
# | |||||
# Released to the Public Domain | |||||
# | |||||
# Additional material for this makefile was written by: | |||||
# Peter Fleury | |||||
# Tim Henigan | |||||
# Colin O'Flynn | |||||
# Reiner Patommel | |||||
# Markus Pfaff | |||||
# Sander Pool | |||||
# Frederik Rouleau | |||||
# Carlos Lamas | |||||
# | |||||
#---------------------------------------------------------------------------- | |||||
# On command line: | |||||
# | |||||
# make all = Make software. | |||||
# | |||||
# make clean = Clean out built project files. | |||||
# | |||||
# make coff = Convert ELF to AVR COFF. | |||||
# | |||||
# make extcoff = Convert ELF to AVR Extended COFF. | |||||
# | |||||
# make program = Download the hex file to the device, using avrdude. | |||||
# Please customize the avrdude settings below first! | |||||
# | |||||
# make debug = Start either simulavr or avarice as specified for debugging, | |||||
# with avr-gdb or avr-insight as the front end for debugging. | |||||
# | |||||
# make filename.s = Just compile filename.c into the assembler code only. | |||||
# | |||||
# make filename.i = Create a preprocessed source file for use in submitting | |||||
# bug reports to the GCC project. | |||||
# | |||||
# To rebuild project do "make clean" then "make all". | |||||
#---------------------------------------------------------------------------- | |||||
# Target file name (without extension). | |||||
TARGET = tmk_adb | |||||
# Directory common source filess exist | |||||
COMMON_DIR = .. | |||||
# Directory keyboard dependent files exist | |||||
TARGET_DIR = . | |||||
# keyboard dependent files | |||||
TARGET_SRC = keymap.c \ | |||||
matrix.c \ | |||||
adb.c | |||||
# 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 | |||||
USB_EXTRA_ENABLE = yes # Enhanced feature for Windows(Audio control and System control) | |||||
#USB_NKRO_ENABLE = yes # USB Nkey Rollover | |||||
include $(COMMON_DIR)/Makefile.common |
# Target file name (without extension). | |||||
TARGET = adb_usb | |||||
# Directory common source filess exist | |||||
COMMON_DIR = .. | |||||
# Directory keyboard dependent files exist | |||||
TARGET_DIR = . | |||||
# keyboard dependent files | |||||
TARGET_SRC = main_pjrc.c \ | |||||
keymap.c \ | |||||
matrix.c \ | |||||
led.c \ | |||||
adb.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 | |||||
#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 | |||||
USB_EXTRA_ENABLE = yes # Enhanced feature for Windows(Audio control and System control) | |||||
#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 |
/* matrix size */ | /* matrix size */ | ||||
#define MATRIX_ROWS 16 // keycode bit: 3-0 | #define MATRIX_ROWS 16 // keycode bit: 3-0 | ||||
#define MATRIX_COLS 8 // keycode bit: 6-4 | #define MATRIX_COLS 8 // keycode bit: 6-4 | ||||
/* define if matrix has ghost */ | |||||
//#define MATRIX_HAS_GHOST | |||||
/* USB NKey Rollover */ | |||||
#ifdef USB_NKRO_ENABLE | |||||
#endif | |||||
/* key combination for command */ | |||||
#define IS_COMMAND() ( \ | |||||
keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \ | |||||
keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \ | |||||
) | |||||
/* mouse keys */ | /* mouse keys */ | ||||
#ifdef MOUSEKEY_ENABLE | #ifdef MOUSEKEY_ENABLE | ||||
# define MOUSEKEY_DELAY_TIME 192 | # define MOUSEKEY_DELAY_TIME 192 | ||||
#endif | #endif | ||||
/* PS/2 mouse */ | /* PS/2 mouse */ | ||||
#ifdef PS2_MOUSE_ENABLE | #ifdef PS2_MOUSE_ENABLE | ||||
# define PS2_CLOCK_PORT PORTF | # define PS2_CLOCK_PORT PORTF | ||||
# define PS2_DATA_BIT 1 | # define PS2_DATA_BIT 1 | ||||
#endif | #endif | ||||
/* ADB port setting */ | /* ADB port setting */ | ||||
#define ADB_PORT PORTF | #define ADB_PORT PORTF | ||||
#define ADB_PIN PINF | #define ADB_PIN PINF |
#include "print.h" | #include "print.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "util.h" | #include "util.h" | ||||
#include "keymap_skel.h" | |||||
#include "keymap.h" | |||||
#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) | #define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) | ||||
{ | { | ||||
return pgm_read_byte(&fn_keycode[(biton(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 (usb_keyboard_mods == (BIT_LCTRL | BIT_LSHIFT | BIT_LALT | BIT_LGUI)); | |||||
return (usb_keyboard_mods == (BIT_RSHIFT)); | |||||
} |
#include "stdint.h" | |||||
#include "adb.h" | |||||
#include "led.h" | |||||
void led_set(uint8_t usb_led) | |||||
{ | |||||
adb_host_kbd_led(~usb_led); | |||||
} |
#include "util.h" | #include "util.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "adb.h" | #include "adb.h" | ||||
#include "usb_keyboard.h" | |||||
#include "matrix_skel.h" | |||||
#include "matrix.h" | |||||
#if (MATRIX_COLS > 16) | #if (MATRIX_COLS > 16) | ||||
uint16_t codes; | uint16_t codes; | ||||
uint8_t key0, key1; | uint8_t key0, key1; | ||||
static uint8_t prev_led = 0; | |||||
if (prev_led != usb_keyboard_leds) { | |||||
adb_host_kbd_led(~usb_keyboard_leds); | |||||
prev_led = usb_keyboard_leds; | |||||
} | |||||
_matrix_is_modified = false; | _matrix_is_modified = false; | ||||
codes = adb_host_kbd_recv(); | codes = adb_host_kbd_recv(); | ||||
key0 = codes>>8; | key0 = codes>>8; |
UENUM = endpoint; | UENUM = endpoint; | ||||
} | } | ||||
UEDATX = report->mods; | UEDATX = report->mods; | ||||
#ifdef USB_NKRO_ENABLE | |||||
if (!keyboard_nkro) | if (!keyboard_nkro) | ||||
UEDATX = 0; | UEDATX = 0; | ||||
#else | |||||
UEDATX = 0; | |||||
#endif | |||||
for (uint8_t i = keys_start; i < keys_end; i++) { | for (uint8_t i = keys_start; i < keys_end; i++) { | ||||
UEDATX = report->keys[i]; | UEDATX = report->keys[i]; | ||||
} | } |