From 5808317b694004c43a6e0f76e9715415cce19a25 Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 5 Mar 2013 15:41:21 +0900 Subject: Fix keymap for new framework --- README.md | 2 +- common/keymap.c | 18 +- converter/m0110_usb/Makefile.lufa | 91 +++++++ converter/m0110_usb/README.md | 7 +- converter/m0110_usb/config.h | 1 + converter/m0110_usb/keymap.c | 9 +- converter/pc98_usb/keymap.c | 2 +- keyboard/IIgs/Makefile | 95 ++++++++ keyboard/IIgs/README | 45 ++++ keyboard/IIgs/config.h | 68 ++++++ keyboard/IIgs/doc/PIN_BYPASS.jpg | Bin 0 -> 329437 bytes keyboard/IIgs/doc/Teensy++_Mod.jpg | Bin 0 -> 74137 bytes keyboard/IIgs/hid_listen.mac | Bin 0 -> 13524 bytes keyboard/IIgs/keymap.c | 142 +++++++++++ keyboard/IIgs/led.c | 24 ++ keyboard/IIgs/matrix.c | 363 ++++++++++++++++++++++++++++ keyboard/IIgs_Standard/Makefile | 95 -------- keyboard/IIgs_Standard/README | 45 ---- keyboard/IIgs_Standard/config.h | 68 ------ keyboard/IIgs_Standard/doc/PIN_BYPASS.jpg | Bin 329437 -> 0 bytes keyboard/IIgs_Standard/doc/Teensy++_Mod.jpg | Bin 74137 -> 0 bytes keyboard/IIgs_Standard/hid_listen.mac | Bin 13524 -> 0 bytes keyboard/IIgs_Standard/keymap.c | 142 ----------- keyboard/IIgs_Standard/led.c | 24 -- keyboard/IIgs_Standard/matrix.c | 363 ---------------------------- keyboard/hhkb/keymap.c | 6 +- protocol/vusb/vusb.c | 4 + 27 files changed, 854 insertions(+), 760 deletions(-) create mode 100644 converter/m0110_usb/Makefile.lufa create mode 100644 keyboard/IIgs/Makefile create mode 100644 keyboard/IIgs/README create mode 100644 keyboard/IIgs/config.h create mode 100644 keyboard/IIgs/doc/PIN_BYPASS.jpg create mode 100644 keyboard/IIgs/doc/Teensy++_Mod.jpg create mode 100755 keyboard/IIgs/hid_listen.mac create mode 100644 keyboard/IIgs/keymap.c create mode 100644 keyboard/IIgs/led.c create mode 100644 keyboard/IIgs/matrix.c delete mode 100644 keyboard/IIgs_Standard/Makefile delete mode 100644 keyboard/IIgs_Standard/README delete mode 100644 keyboard/IIgs_Standard/config.h delete mode 100644 keyboard/IIgs_Standard/doc/PIN_BYPASS.jpg delete mode 100644 keyboard/IIgs_Standard/doc/Teensy++_Mod.jpg delete mode 100755 keyboard/IIgs_Standard/hid_listen.mac delete mode 100644 keyboard/IIgs_Standard/keymap.c delete mode 100644 keyboard/IIgs_Standard/led.c delete mode 100644 keyboard/IIgs_Standard/matrix.c diff --git a/README.md b/README.md index b85e03ddbf..e9dad457d8 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di * [hhkb](keyboard/hhkb/) - [Happy Hacking Keyboard professional][GH_hhkb] * [macway](keyboard/macway/) - [Compact keyboard mod][GH_macway] * [hbkb](keyboard/hbkb/) - [Happy Buckling sprint keyboard(IBM Model M mod)][GH_hbkb] -* [IIgs_Standard](keyboard/IIgs_Standard/) - Apple [IIGS] keyboard mod(by JeffreySung) +* [IIgs_Standard](keyboard/IIgs/) - Apple [IIGS] keyboard mod(by JeffreySung) * [hid_liber](keyboard/hid_liber/) - [HID liberation controller][HID_liber](by alaricljs) * [phantom](keyboard/phantom/) - [Phantom keyboard][PHANTOM] (by Tranquilite) * [gh60](keyboard/gh60/) - [GH60 keyboard][GH60] diff --git a/common/keymap.c b/common/keymap.c index f72be57794..aa8d944a79 100644 --- a/common/keymap.c +++ b/common/keymap.c @@ -38,12 +38,6 @@ action_t action_for_key(uint8_t layer, key_t key) return keycode_to_action(keycode); } } - -__attribute__ ((weak)) -const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } - -__attribute__ ((weak)) -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} #else /* * legacy keymap support @@ -71,13 +65,17 @@ action_t action_for_key(uint8_t layer, key_t key) return keycode_to_action(keycode); } } -/* not used for legacy keymap */ -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -} #endif +__attribute__ ((weak)) +const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } + +__attribute__ ((weak)) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} + + + /* translates keycode to action */ static action_t keycode_to_action(uint8_t keycode) diff --git a/converter/m0110_usb/Makefile.lufa b/converter/m0110_usb/Makefile.lufa new file mode 100644 index 0000000000..028bdf9331 --- /dev/null +++ b/converter/m0110_usb/Makefile.lufa @@ -0,0 +1,91 @@ +# Target file name (without extension). +TARGET = m0110_lufa + +# Directory common source filess exist +TOP_DIR = ../.. + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# keyboard dependent files +SRC = keymap.c \ + matrix.c \ + led.c \ + m0110.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 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# 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 +CONSOLE_ENABLE = yes # Console for debug +#NKRO_ENABLE = yes # USB Nkey Rollover + + +# Boot Section Size in bytes +# Teensy halfKay 512 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +OPT_DEFS += -DBOOT_SIZE=4096 + + + +#---------------- Programming Options -------------------------- +PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex + + +# Search Path +VPATH += $(TARGET_DIR) +VPATH += $(TOP_DIR) + + +include $(TOP_DIR)/protocol/lufa.mk +include $(TOP_DIR)/protocol.mk +include $(TOP_DIR)/common.mk +include $(TOP_DIR)/rules.mk + +hasu: EXTRAFLAGS += -DHASU +hasu: all diff --git a/converter/m0110_usb/README.md b/converter/m0110_usb/README.md index 206f434251..80503e8755 100644 --- a/converter/m0110_usb/README.md +++ b/converter/m0110_usb/README.md @@ -53,7 +53,8 @@ You can edit *Makefile* and *config.h* to change compile options and pin configu $ git clone git://github.com/tmk/tmk_keyboard.git (or download source) $ cd m0110_usb - $ make + $ make -f Makefile.lufa clean + $ make -f Makefile.lufa and program your Teensy with [PJRC Teensy loader](http://www.pjrc.com/teensy/loader.html). @@ -74,7 +75,7 @@ You can change keymaps by editing *keymap.c*. |---------------------------------------------------------| |---------------| |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| | `---------------------------------------------------------' |-----------|Ent| - |Alt|Gui | Space |Ctl |Alt| | 0| .| | + |Ctl|Alt | Space |Gui |Ctl| | 0| .| | `-----------------------------------------------' `---------------' #### *HHKB/WASD Layer(WASD/IJKL)* ,---------------------------------------------------------. ,---------------. @@ -86,7 +87,7 @@ You can change keymaps by editing *keymap.c*. |---------------------------------------------------------| |---------------| |Shift |End| |PgD| | | |PgD| |End| |Shift | | 1| 2| 3| | `---------------------------------------------------------' |-----------|Ent| - |Alt|Gui | Space |Ctl |Alt| | 0| .| | + |Ctl|Alt | Space |Gui |Ctl| | 0| .| | `-----------------------------------------------' `---------------' ### M0110A diff --git a/converter/m0110_usb/config.h b/converter/m0110_usb/config.h index be00259e6b..d43f283838 100644 --- a/converter/m0110_usb/config.h +++ b/converter/m0110_usb/config.h @@ -24,6 +24,7 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x0110 +#define DEVICE_VER 0x0100 #define MANUFACTURER t.m.k. #define PRODUCT M0110 keyboard converter #define DESCRIPTION convert M0110 keyboard to USB diff --git a/converter/m0110_usb/keymap.c b/converter/m0110_usb/keymap.c index 191bf3a156..7a3bc35856 100644 --- a/converter/m0110_usb/keymap.c +++ b/converter/m0110_usb/keymap.c @@ -19,7 +19,6 @@ along with this program. If not, see . #include #include #include -#include "usb_keyboard.h" #include "keycode.h" #include "print.h" #include "debug.h" @@ -148,7 +147,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------| |---------------| * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| | * |---------------------------------------------------------| |-----------|Ent| - * |Alt |Gui | Space |Ctl| \|Lft|Rgt|Dn | | 0| .| | + * |Ctl |Alt | Space |Gui| \|Lft|Rgt|Dn | | 0| .| | * `---------------------------------------------------------' `---------------' */ KEYMAP( @@ -156,7 +155,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS, FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT, - LALT,LGUI, SPC, LCTL,BSLS,LEFT,RGHT,DOWN, P0, PDOT + LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT ), /* Cursor Layer(WASD, IJKL) * ,---------------------------------------------------------. ,---------------. @@ -168,7 +167,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------| |---------------| * |Shift |End| |PgD| | | |PgD| |End| |Shif|PgU| | 1| 2| 3| | * |---------------------------------------------------------| |-----------|Ent| - * |Alt |Gui | Space |Gui |Ins|Hom|End|PgD| | 0| .| | + * |Ctl |Alt | Space |Gui |Ins|Hom|End|PgD| | 0| .| | * `---------------------------------------------------------' `---------------' */ KEYMAP( @@ -176,7 +175,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { CAPS,HOME,UP, PGUP,NO, NO, NO, PGUP,UP, HOME,PSCR,SLCK,PAUS, P7, P8, P9, PMNS, FN0, LEFT,DOWN,RGHT,NO, NO, NO, LEFT,DOWN,RGHT,NO, NO, ENT, P4, P5, P6, PPLS, LSFT,END, NO, PGDN,NO, NO, NO, PGDN,NO, END, NO, PGUP, P1, P2, P3, PENT, - LALT,LGUI, SPC, LCTL,INS, HOME,END, PGDN, P0, PDOT + LCTL,LALT, SPC, LGUI,INS, HOME,END, PGDN, P0, PDOT ), }; diff --git a/converter/pc98_usb/keymap.c b/converter/pc98_usb/keymap.c index f793539dfd..279b2b60c0 100644 --- a/converter/pc98_usb/keymap.c +++ b/converter/pc98_usb/keymap.c @@ -168,7 +168,7 @@ static const uint16_t PROGMEM fn_actions[] = { ACTION_KEYMAP_TAP_TOGGLE(0), // FN0 ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1 ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2 - ACTION_KEYMAP(2), // FN3 + ACTION_KEYMAP_MOMENTARY(2), // FN3 ACTION_MACRO(LBRACKET), // FN4 ACTION_MACRO(RBRACKET), // FN5 ACTION_MACRO(DUMMY), // FN6 diff --git a/keyboard/IIgs/Makefile b/keyboard/IIgs/Makefile new file mode 100644 index 0000000000..c18e9720c7 --- /dev/null +++ b/keyboard/IIgs/Makefile @@ -0,0 +1,95 @@ +#---------------------------------------------------------------------------- +# 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. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# make flip-ee = Download the eeprom file to the device, using Atmel FLIP +# (must have Atmel FLIP installed). +# +# 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 = IIgs_Standard + +# Directory common source filess exist +TOP_DIR = ../.. + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# keyboard dependent files +SRC = 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 +#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 = no # 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) +VPATH += $(TOP_DIR) + +include $(TOP_DIR)/protocol/pjrc.mk +include $(TOP_DIR)/common.mk +include $(TOP_DIR)/rules.mk diff --git a/keyboard/IIgs/README b/keyboard/IIgs/README new file mode 100644 index 0000000000..4f9cad1ca1 --- /dev/null +++ b/keyboard/IIgs/README @@ -0,0 +1,45 @@ +Replacable USB Controller for Apple IIgs/Standard(M0116) +JeffreySung(nattyman@gmail.com) + +=============================== + +Feature +------- +- Replaceable keyboard controller for Apple IIgs(A9M0330)/Standard(M0116) +- Teensy++ 2.0 required +- Some signal bypass required +- ADB keyboard doesn't use matrix for modifier keys. With virtual row for modifier keys, + these keys are merged into key matrix using virtual row. + +History +======= +- 2012.09.17 First Release +- 2012.09.17 CapsLock support +- 2012.09.19 Power button added +Build +===== +0. Just Type "Make" and return. + +Hardware +======== +PJRC Teensy +----------- +0. The following ports should not be connected to board. + From top view of Teensy++, from GND and counter clock wise. + -7,26(in keyboard PCB, these pins are VDD,GND) + -30,31(in Teensy++, these pins are Ref,GND respectively) + -5,6(D2,D3 for bluetooth in future) +1. Bypass #31 pin(from board) to E4(Teensy) +2. Bypass #30 pin(from board) to F2(Teensy) +3. Bypass #6 pin(from board) to A0(Teensy) +4. Refer doc directory + +To Do +===== +0. When DEBOUNCE defined, there is a errors. +1. Layer Change by toggling Clear Key +2. Eject Key add. (following files should be modified.) + common/keycode.h + common/keyboard.c +3. Use bluetooth +EOF diff --git a/keyboard/IIgs/config.h b/keyboard/IIgs/config.h new file mode 100644 index 0000000000..11acf87c07 --- /dev/null +++ b/keyboard/IIgs/config.h @@ -0,0 +1,68 @@ +/* +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" + + +/* USB Device descriptor parameter */ +/* for Apple +#define VENDOR_ID 0x05AC +#define PRODUCT_ID 0xBEE0 +*/ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0xBEE0 +#define DEVICE_VER 0x0202 +#define MANUFACTURER t.m.k. +#define PRODUCT Apple Desktop Bus Keyboard + + +/* message strings */ +#define DESCRIPTION Apple M0116/A9M0660 keyboard firmware + + +/* matrix size */ +#define MATRIX_ROWS 11 // last row is virtual for modifier +#define MATRIX_COLS 8 +/* define if matrix has ghost */ +#define MATRIX_HAS_GHOST +/* Set 0 if need no debouncing */ +#define DEBOUNCE 5 + + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LGUI)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + + +/* layer switching */ +#define LAYER_SWITCH_DELAY 100 +#define LAYER_SEND_FN_TERM 300 + + +/* mouse keys */ +#ifdef MOUSEKEY_ENABLE +# define MOUSEKEY_DELAY_TIME 192 +#endif + + +#endif diff --git a/keyboard/IIgs/doc/PIN_BYPASS.jpg b/keyboard/IIgs/doc/PIN_BYPASS.jpg new file mode 100644 index 0000000000..2998f0c3f8 Binary files /dev/null and b/keyboard/IIgs/doc/PIN_BYPASS.jpg differ diff --git a/keyboard/IIgs/doc/Teensy++_Mod.jpg b/keyboard/IIgs/doc/Teensy++_Mod.jpg new file mode 100644 index 0000000000..146c1ab93c Binary files /dev/null and b/keyboard/IIgs/doc/Teensy++_Mod.jpg differ diff --git a/keyboard/IIgs/hid_listen.mac b/keyboard/IIgs/hid_listen.mac new file mode 100755 index 0000000000..8758fdf886 Binary files /dev/null and b/keyboard/IIgs/hid_listen.mac differ diff --git a/keyboard/IIgs/keymap.c b/keyboard/IIgs/keymap.c new file mode 100644 index 0000000000..cd33e223ac --- /dev/null +++ b/keyboard/IIgs/keymap.c @@ -0,0 +1,142 @@ +/* +Copyright 2012 Jeffrey Sung + +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 Apple IIgs/Standard Keyboard + */ +#include +#include +#include +#include "keycode.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( R10C5, \ + R3C7, R3C6, R3C5, R3C4, R3C3, R3C2, R3C1, R8C1, R8C0, R3C0, R0C0, R0C1, R0C2, R0C3, R4C4, R4C5, R4C6, R4C7, \ + R9C7, R9C6, R9C5, R9C4, R9C3, R9C2, R9C1, R9C0, R1C0, R1C1, R1C2, R1C3, R1C4, R2C4, R2C5, R2C6, R2C3, \ + R10C0,R7C7, R7C6, R7C5, R7C4, R7C3, R7C2, R7C1, R7C0, R0C4, R1C6, R1C7, R1C5, R2C0, R2C1, R2C2, R2C7, \ + R10C1,R6C7, R6C6, R6C5, R6C4, R6C3, R6C2, R6C1, R6C0, R0C5, R0C6, R4C0, R4C1, R4C2, \ + R10C4,R10C2,R10C3,R5C4, R5C7, R5C5, R5C6, R5C0, R5C2, R0C7, R5C1, R5C3, R4C3 \ +) { \ + { R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \ + { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \ + { R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7 }, \ + { R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \ + { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7 }, \ + { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \ + { R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, R6C7 }, \ + { R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, R7C7 }, \ + { R8C0, R8C1, KC_NO, KC_NO, KC_NO,KC_NO, KC_NO, KC_NO }, \ + { R9C0, R9C1, R9C2, R9C3, R9C4, R9C5, R9C6, R9C7 }, \ + { R10C0,R10C1, R10C2, R10C3, R10C4,R10C5, KC_NO, KC_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 + 4, // Fn4 + 0, // Fn5 + 3, // Fn6 + 3 // 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[] = { + KC_NO, // Fn0 + KC_NO, // Fn1 + KC_SLSH, // Fn2 + KC_SCLN, // Fn3 + KC_SPC, // Fn4 + KC_NO, // Fn5 + KC_NO, // Fn6 + KC_NO // Fn7 +}; + +static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: Default Layer + * ,-----------------------------------------------------------. ,---------------, + * | POWER | | | + * |-----------------------------------------------------------| |---------------| + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |FN0| = | / | * | + * |-----------------------------------------------------------| |---------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7 | 8 | 9 | + | + * |-----------------------------------------------------' | |---------------| + * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | | 4 | 5 | 6 | - | + * |-----------------------------------------------------------| |---------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | | 1 | 2 | 3 | E | + * |-----------------------------------------------------------| |-----------| N | + * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | + * `-----------------------------------------------------------' |---------------' + */ + KEYMAP( KC_PWR, + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_FN1, KC_PEQL, KC_PSLS, KC_PAST, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PPLS, \ + KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PMNS, \ + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_P1, KC_P2, KC_P3, \ + KC_CAPS,KC_LALT,KC_LGUI,KC_GRV, KC_SPC, KC_BSLS,KC_LEFT,KC_RGHT,KC_DOWN,KC_UP, KC_P0, KC_PDOT, KC_PENT), + + + /* Layer 1: Tenkey use Layer + * ,-----------------------------------------------------------. ,---------------, + * | POWER | | | + * |-----------------------------------------------------------| |---------------| + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |NLK| = | / | * | + * |-----------------------------------------------------------| |---------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |INS| 8 |PGU|V+ | + * |-----------------------------------------------------' | |---------------| + * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | |DEL|UP |PGD|V- | + * |-----------------------------------------------------------| |---------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | |LFT|DN |RGT| E | + * |-----------------------------------------------------------| |-----------| N | + * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | + * `-----------------------------------------------------------' `---------------' + */ + KEYMAP( KC_PWR, \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_FN1, KC_PEQL, KC_PSLS, KC_MUTE, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_INS, KC_P8, KC_PGUP, KC_VOLU, \ + KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_ENT, KC_DEL, KC_UP, KC_PGDN, KC_VOLD, \ + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_LEFT, KC_DOWN, KC_RIGHT, \ + KC_CAPS,KC_LALT,KC_LGUI,KC_GRV, KC_SPC, KC_BSLS,KC_LEFT,KC_RGHT,KC_DOWN,KC_UP, KC_P0, KC_PDOT, KC_PENT), +}; + + +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 index) +{ + return pgm_read_byte(&fn_layer[index]); +} + +uint8_t keymap_fn_keycode(uint8_t index) +{ + return pgm_read_byte(&fn_keycode[index]); +} diff --git a/keyboard/IIgs/led.c b/keyboard/IIgs/led.c new file mode 100644 index 0000000000..f76545f0ba --- /dev/null +++ b/keyboard/IIgs/led.c @@ -0,0 +1,24 @@ +/* +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" + + +void led_set(uint8_t usb_led) +{ +} diff --git a/keyboard/IIgs/matrix.c b/keyboard/IIgs/matrix.c new file mode 100644 index 0000000000..6ca55b7ea2 --- /dev/null +++ b/keyboard/IIgs/matrix.c @@ -0,0 +1,363 @@ +/* +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 "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "led.h" + + +#if (MATRIX_COLS > 16) +# error "MATRIX_COLS must not exceed 16" +#endif +#if (MATRIX_ROWS > 255) +# error "MATRIX_ROWS must not exceed 255" +#endif + + +#ifndef DEBOUNCE +# define DEBOUNCE 0 +#endif +static uint8_t debouncing = DEBOUNCE; + +// 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 + +#ifdef MATRIX_HAS_GHOST +static bool matrix_has_ghost_in_row(uint8_t row); +#endif +static uint8_t read_col(uint8_t row); +static void unselect_rows(void); +static void select_row(uint8_t row); + + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + // initialize row and col + unselect_rows(); + // Input with pull-up(DDR:0, PORT:1) + // Column C1 ~ C7 (PortC0-6) + // Column C0(Port E1) + DDRC &= ~0b01111111; + PORTC |= 0b01111111; + DDRE &= ~0b00000010; + PORTE |= 0b00000010; + //DDRB &= ~0b00000100; + //PORTB |= 0b00000100; + // modifier B3/4,F4/5,E4 always input + // A0 + //DDRA |= 0b00000001; + //PORTA &= 0b00000001; + //DDRB |= 0b00011000; + //PORTB &= 0b00011000; + //DDRF |= ~0b00110000; + //PORTF &= 0b00110000; + //DDRB &= ~0b00011000; + //PORTB |= 0b00011000; + //DDRF &= ~0b00110000; + //PORTF |= 0b00110000; + //DDRE &= ~0b00010000; + //PORTE |= 0b00010000; + + // 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) +{ + if (!debouncing) { + uint8_t *tmp = matrix_prev; + matrix_prev = matrix; + matrix = tmp; + } + + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + unselect_rows(); + select_row(i); + _delay_us(30); // without this wait read unstable value. + if ( i == ( MATRIX_ROWS - 1 ) ) { // CHECK CAPS LOCK + if (host_keyboard_leds() & (1<");debug_hex(matrix[row]);debug("\n"); +// } +// } +// } + return (matrix[row] & (1<mods except E4(CAPSLOCK) + uint8_t tmp; + if ( row == 10 ) { + tmp = 0xC0; + tmp |= (PINB >> 3 ) & 0b00000011; // LEFT CTRL is 0bit in modifier (HID Spec) + // LEFT SHIFT is 1bit in modifier (HID Spec) + tmp |= (PINF >> 3 ) & 0b00000100; // LEFT ALT is 2bit in modifier (HID Spec) + tmp |= (PINF >> 1 ) & 0b00001000; // LEFT GUI is 3bit in modifier (HID Spec) + tmp |= (PINA << 4 ) & 0b00010000; // CAPSLOCK + tmp |= (PINB << 3 ) & 0b00100000; // POWER + } else { + tmp = 0x00; + tmp = (PINE >> 1)&0b00000001; + tmp |= PINC << 1 ; + } + return tmp; +} + +inline +static void unselect_rows(void) +{ + // Hi-Z(DDR:0, PORT:0) to unselect + // DDR : 1, output 0, input + DDRB &= ~0b00000011; // PB: 1,0 + PORTB &= ~0b00000011; + DDRD &= ~0b00010000; // PD: 4 + PORTD &= ~0b00010000; + DDRE &= ~0b11000000; // PE: 7,6 + PORTE &= ~0b11000000; + DDRF &= ~0b11000111; // PF: 7,6,2,1,0 + PORTF &= ~0b11000111; + // to unselect virtual row(modifier), set port to output with low + DDRA |= 0b00000001; // PA: 0 for CAPSLOCK + PORTA &= ~0b00000001; + DDRB |= 0b00011100; // PB: 3,4 for modifier(row10) + PORTB &= ~0b00011100; // PB: 2 for power + DDRF |= 0b00110000; // PF: 4,5 for modifier + PORTF &= ~0b00110000; +} + +inline +static void select_row(uint8_t row) +{ + // Output low(DDR:1, PORT:0) to select + // with row enable, column could send low to AVR when pressed + // row: 0 1 2 3 4 5 6 7 8 9 + // pin: PB1, PB0, PE7, PE6, PD4, PF2, PF0, PF1, PF6 PF7 + switch (row) { + case 0: + DDRB |= (1<<1); + PORTB &= ~(1<<1); + break; + case 1: + DDRB |= (1<<0); + PORTB &= ~(1<<0); + break; + case 2: + DDRE |= (1<<7); + PORTE &= ~(1<<7); + break; + case 3: + DDRE |= (1<<6); + PORTE &= ~(1<<6); + break; + case 4: + DDRD |= (1<<4); + PORTD &= ~(1<<4); + break; + case 5: + DDRF |= (1<<2); + PORTF &= ~(1<<2); + break; + case 6: + DDRF |= (1<<0); + PORTF &= ~(1<<0); + break; + case 7: + DDRF |= (1<<1); + PORTF &= ~(1<<1); + break; + case 8: + DDRF |= (1<<6); + PORTF &= ~(1<<6); + break; + case 9: + DDRF |= (1<<7); + PORTF &= ~(1<<7); + break; + case 10: + // modifier has no row enable + // to select virtual row, set port as input + DDRA &= ~0b00000001; + PORTA |= 0b00000001; + DDRB &= ~0b00011100; + PORTB |= 0b00011100; + DDRF &= ~0b00110000; + PORTF |= 0b00110000; + break; + + } +} diff --git a/keyboard/IIgs_Standard/Makefile b/keyboard/IIgs_Standard/Makefile deleted file mode 100644 index c18e9720c7..0000000000 --- a/keyboard/IIgs_Standard/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -#---------------------------------------------------------------------------- -# 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. -# Please customize your programmer settings(PROGRAM_CMD) -# -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# make flip-ee = Download the eeprom file to the device, using Atmel FLIP -# (must have Atmel FLIP installed). -# -# 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 = IIgs_Standard - -# Directory common source filess exist -TOP_DIR = ../.. - -# Directory keyboard dependent files exist -TARGET_DIR = . - -# keyboard dependent files -SRC = 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 -#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 = no # 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) -VPATH += $(TOP_DIR) - -include $(TOP_DIR)/protocol/pjrc.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk diff --git a/keyboard/IIgs_Standard/README b/keyboard/IIgs_Standard/README deleted file mode 100644 index 4f9cad1ca1..0000000000 --- a/keyboard/IIgs_Standard/README +++ /dev/null @@ -1,45 +0,0 @@ -Replacable USB Controller for Apple IIgs/Standard(M0116) -JeffreySung(nattyman@gmail.com) - -=============================== - -Feature -------- -- Replaceable keyboard controller for Apple IIgs(A9M0330)/Standard(M0116) -- Teensy++ 2.0 required -- Some signal bypass required -- ADB keyboard doesn't use matrix for modifier keys. With virtual row for modifier keys, - these keys are merged into key matrix using virtual row. - -History -======= -- 2012.09.17 First Release -- 2012.09.17 CapsLock support -- 2012.09.19 Power button added -Build -===== -0. Just Type "Make" and return. - -Hardware -======== -PJRC Teensy ------------ -0. The following ports should not be connected to board. - From top view of Teensy++, from GND and counter clock wise. - -7,26(in keyboard PCB, these pins are VDD,GND) - -30,31(in Teensy++, these pins are Ref,GND respectively) - -5,6(D2,D3 for bluetooth in future) -1. Bypass #31 pin(from board) to E4(Teensy) -2. Bypass #30 pin(from board) to F2(Teensy) -3. Bypass #6 pin(from board) to A0(Teensy) -4. Refer doc directory - -To Do -===== -0. When DEBOUNCE defined, there is a errors. -1. Layer Change by toggling Clear Key -2. Eject Key add. (following files should be modified.) - common/keycode.h - common/keyboard.c -3. Use bluetooth -EOF diff --git a/keyboard/IIgs_Standard/config.h b/keyboard/IIgs_Standard/config.h deleted file mode 100644 index 11acf87c07..0000000000 --- a/keyboard/IIgs_Standard/config.h +++ /dev/null @@ -1,68 +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" - - -/* USB Device descriptor parameter */ -/* for Apple -#define VENDOR_ID 0x05AC -#define PRODUCT_ID 0xBEE0 -*/ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0xBEE0 -#define DEVICE_VER 0x0202 -#define MANUFACTURER t.m.k. -#define PRODUCT Apple Desktop Bus Keyboard - - -/* message strings */ -#define DESCRIPTION Apple M0116/A9M0660 keyboard firmware - - -/* matrix size */ -#define MATRIX_ROWS 11 // last row is virtual for modifier -#define MATRIX_COLS 8 -/* define if matrix has ghost */ -#define MATRIX_HAS_GHOST -/* Set 0 if need no debouncing */ -#define DEBOUNCE 5 - - -/* key combination for command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LGUI)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - - -/* layer switching */ -#define LAYER_SWITCH_DELAY 100 -#define LAYER_SEND_FN_TERM 300 - - -/* mouse keys */ -#ifdef MOUSEKEY_ENABLE -# define MOUSEKEY_DELAY_TIME 192 -#endif - - -#endif diff --git a/keyboard/IIgs_Standard/doc/PIN_BYPASS.jpg b/keyboard/IIgs_Standard/doc/PIN_BYPASS.jpg deleted file mode 100644 index 2998f0c3f8..0000000000 Binary files a/keyboard/IIgs_Standard/doc/PIN_BYPASS.jpg and /dev/null differ diff --git a/keyboard/IIgs_Standard/doc/Teensy++_Mod.jpg b/keyboard/IIgs_Standard/doc/Teensy++_Mod.jpg deleted file mode 100644 index 146c1ab93c..0000000000 Binary files a/keyboard/IIgs_Standard/doc/Teensy++_Mod.jpg and /dev/null differ diff --git a/keyboard/IIgs_Standard/hid_listen.mac b/keyboard/IIgs_Standard/hid_listen.mac deleted file mode 100755 index 8758fdf886..0000000000 Binary files a/keyboard/IIgs_Standard/hid_listen.mac and /dev/null differ diff --git a/keyboard/IIgs_Standard/keymap.c b/keyboard/IIgs_Standard/keymap.c deleted file mode 100644 index cd33e223ac..0000000000 --- a/keyboard/IIgs_Standard/keymap.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -Copyright 2012 Jeffrey Sung - -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 Apple IIgs/Standard Keyboard - */ -#include -#include -#include -#include "keycode.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( R10C5, \ - R3C7, R3C6, R3C5, R3C4, R3C3, R3C2, R3C1, R8C1, R8C0, R3C0, R0C0, R0C1, R0C2, R0C3, R4C4, R4C5, R4C6, R4C7, \ - R9C7, R9C6, R9C5, R9C4, R9C3, R9C2, R9C1, R9C0, R1C0, R1C1, R1C2, R1C3, R1C4, R2C4, R2C5, R2C6, R2C3, \ - R10C0,R7C7, R7C6, R7C5, R7C4, R7C3, R7C2, R7C1, R7C0, R0C4, R1C6, R1C7, R1C5, R2C0, R2C1, R2C2, R2C7, \ - R10C1,R6C7, R6C6, R6C5, R6C4, R6C3, R6C2, R6C1, R6C0, R0C5, R0C6, R4C0, R4C1, R4C2, \ - R10C4,R10C2,R10C3,R5C4, R5C7, R5C5, R5C6, R5C0, R5C2, R0C7, R5C1, R5C3, R4C3 \ -) { \ - { R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \ - { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \ - { R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7 }, \ - { R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \ - { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7 }, \ - { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \ - { R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, R6C7 }, \ - { R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, R7C7 }, \ - { R8C0, R8C1, KC_NO, KC_NO, KC_NO,KC_NO, KC_NO, KC_NO }, \ - { R9C0, R9C1, R9C2, R9C3, R9C4, R9C5, R9C6, R9C7 }, \ - { R10C0,R10C1, R10C2, R10C3, R10C4,R10C5, KC_NO, KC_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 - 4, // Fn4 - 0, // Fn5 - 3, // Fn6 - 3 // 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[] = { - KC_NO, // Fn0 - KC_NO, // Fn1 - KC_SLSH, // Fn2 - KC_SCLN, // Fn3 - KC_SPC, // Fn4 - KC_NO, // Fn5 - KC_NO, // Fn6 - KC_NO // Fn7 -}; - -static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Layer 0: Default Layer - * ,-----------------------------------------------------------. ,---------------, - * | POWER | | | - * |-----------------------------------------------------------| |---------------| - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |FN0| = | / | * | - * |-----------------------------------------------------------| |---------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7 | 8 | 9 | + | - * |-----------------------------------------------------' | |---------------| - * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | | 4 | 5 | 6 | - | - * |-----------------------------------------------------------| |---------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | | 1 | 2 | 3 | E | - * |-----------------------------------------------------------| |-----------| N | - * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | - * `-----------------------------------------------------------' |---------------' - */ - KEYMAP( KC_PWR, - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_FN1, KC_PEQL, KC_PSLS, KC_PAST, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PPLS, \ - KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PMNS, \ - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_P1, KC_P2, KC_P3, \ - KC_CAPS,KC_LALT,KC_LGUI,KC_GRV, KC_SPC, KC_BSLS,KC_LEFT,KC_RGHT,KC_DOWN,KC_UP, KC_P0, KC_PDOT, KC_PENT), - - - /* Layer 1: Tenkey use Layer - * ,-----------------------------------------------------------. ,---------------, - * | POWER | | | - * |-----------------------------------------------------------| |---------------| - * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |NLK| = | / | * | - * |-----------------------------------------------------------| |---------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |INS| 8 |PGU|V+ | - * |-----------------------------------------------------' | |---------------| - * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | |DEL|UP |PGD|V- | - * |-----------------------------------------------------------| |---------------| - * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | |LFT|DN |RGT| E | - * |-----------------------------------------------------------| |-----------| N | - * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | - * `-----------------------------------------------------------' `---------------' - */ - KEYMAP( KC_PWR, \ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_FN1, KC_PEQL, KC_PSLS, KC_MUTE, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_INS, KC_P8, KC_PGUP, KC_VOLU, \ - KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_ENT, KC_DEL, KC_UP, KC_PGDN, KC_VOLD, \ - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_LEFT, KC_DOWN, KC_RIGHT, \ - KC_CAPS,KC_LALT,KC_LGUI,KC_GRV, KC_SPC, KC_BSLS,KC_LEFT,KC_RGHT,KC_DOWN,KC_UP, KC_P0, KC_PDOT, KC_PENT), -}; - - -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 index) -{ - return pgm_read_byte(&fn_layer[index]); -} - -uint8_t keymap_fn_keycode(uint8_t index) -{ - return pgm_read_byte(&fn_keycode[index]); -} diff --git a/keyboard/IIgs_Standard/led.c b/keyboard/IIgs_Standard/led.c deleted file mode 100644 index f76545f0ba..0000000000 --- a/keyboard/IIgs_Standard/led.c +++ /dev/null @@ -1,24 +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" - - -void led_set(uint8_t usb_led) -{ -} diff --git a/keyboard/IIgs_Standard/matrix.c b/keyboard/IIgs_Standard/matrix.c deleted file mode 100644 index 6ca55b7ea2..0000000000 --- a/keyboard/IIgs_Standard/matrix.c +++ /dev/null @@ -1,363 +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 "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "led.h" - - -#if (MATRIX_COLS > 16) -# error "MATRIX_COLS must not exceed 16" -#endif -#if (MATRIX_ROWS > 255) -# error "MATRIX_ROWS must not exceed 255" -#endif - - -#ifndef DEBOUNCE -# define DEBOUNCE 0 -#endif -static uint8_t debouncing = DEBOUNCE; - -// 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 - -#ifdef MATRIX_HAS_GHOST -static bool matrix_has_ghost_in_row(uint8_t row); -#endif -static uint8_t read_col(uint8_t row); -static void unselect_rows(void); -static void select_row(uint8_t row); - - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // initialize row and col - unselect_rows(); - // Input with pull-up(DDR:0, PORT:1) - // Column C1 ~ C7 (PortC0-6) - // Column C0(Port E1) - DDRC &= ~0b01111111; - PORTC |= 0b01111111; - DDRE &= ~0b00000010; - PORTE |= 0b00000010; - //DDRB &= ~0b00000100; - //PORTB |= 0b00000100; - // modifier B3/4,F4/5,E4 always input - // A0 - //DDRA |= 0b00000001; - //PORTA &= 0b00000001; - //DDRB |= 0b00011000; - //PORTB &= 0b00011000; - //DDRF |= ~0b00110000; - //PORTF &= 0b00110000; - //DDRB &= ~0b00011000; - //PORTB |= 0b00011000; - //DDRF &= ~0b00110000; - //PORTF |= 0b00110000; - //DDRE &= ~0b00010000; - //PORTE |= 0b00010000; - - // 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) -{ - if (!debouncing) { - uint8_t *tmp = matrix_prev; - matrix_prev = matrix; - matrix = tmp; - } - - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - unselect_rows(); - select_row(i); - _delay_us(30); // without this wait read unstable value. - if ( i == ( MATRIX_ROWS - 1 ) ) { // CHECK CAPS LOCK - if (host_keyboard_leds() & (1<");debug_hex(matrix[row]);debug("\n"); -// } -// } -// } - return (matrix[row] & (1<mods except E4(CAPSLOCK) - uint8_t tmp; - if ( row == 10 ) { - tmp = 0xC0; - tmp |= (PINB >> 3 ) & 0b00000011; // LEFT CTRL is 0bit in modifier (HID Spec) - // LEFT SHIFT is 1bit in modifier (HID Spec) - tmp |= (PINF >> 3 ) & 0b00000100; // LEFT ALT is 2bit in modifier (HID Spec) - tmp |= (PINF >> 1 ) & 0b00001000; // LEFT GUI is 3bit in modifier (HID Spec) - tmp |= (PINA << 4 ) & 0b00010000; // CAPSLOCK - tmp |= (PINB << 3 ) & 0b00100000; // POWER - } else { - tmp = 0x00; - tmp = (PINE >> 1)&0b00000001; - tmp |= PINC << 1 ; - } - return tmp; -} - -inline -static void unselect_rows(void) -{ - // Hi-Z(DDR:0, PORT:0) to unselect - // DDR : 1, output 0, input - DDRB &= ~0b00000011; // PB: 1,0 - PORTB &= ~0b00000011; - DDRD &= ~0b00010000; // PD: 4 - PORTD &= ~0b00010000; - DDRE &= ~0b11000000; // PE: 7,6 - PORTE &= ~0b11000000; - DDRF &= ~0b11000111; // PF: 7,6,2,1,0 - PORTF &= ~0b11000111; - // to unselect virtual row(modifier), set port to output with low - DDRA |= 0b00000001; // PA: 0 for CAPSLOCK - PORTA &= ~0b00000001; - DDRB |= 0b00011100; // PB: 3,4 for modifier(row10) - PORTB &= ~0b00011100; // PB: 2 for power - DDRF |= 0b00110000; // PF: 4,5 for modifier - PORTF &= ~0b00110000; -} - -inline -static void select_row(uint8_t row) -{ - // Output low(DDR:1, PORT:0) to select - // with row enable, column could send low to AVR when pressed - // row: 0 1 2 3 4 5 6 7 8 9 - // pin: PB1, PB0, PE7, PE6, PD4, PF2, PF0, PF1, PF6 PF7 - switch (row) { - case 0: - DDRB |= (1<<1); - PORTB &= ~(1<<1); - break; - case 1: - DDRB |= (1<<0); - PORTB &= ~(1<<0); - break; - case 2: - DDRE |= (1<<7); - PORTE &= ~(1<<7); - break; - case 3: - DDRE |= (1<<6); - PORTE &= ~(1<<6); - break; - case 4: - DDRD |= (1<<4); - PORTD &= ~(1<<4); - break; - case 5: - DDRF |= (1<<2); - PORTF &= ~(1<<2); - break; - case 6: - DDRF |= (1<<0); - PORTF &= ~(1<<0); - break; - case 7: - DDRF |= (1<<1); - PORTF &= ~(1<<1); - break; - case 8: - DDRF |= (1<<6); - PORTF &= ~(1<<6); - break; - case 9: - DDRF |= (1<<7); - PORTF &= ~(1<<7); - break; - case 10: - // modifier has no row enable - // to select virtual row, set port as input - DDRA &= ~0b00000001; - PORTA |= 0b00000001; - DDRB &= ~0b00011100; - PORTB |= 0b00011100; - DDRF &= ~0b00110000; - PORTF |= 0b00110000; - break; - - } -} diff --git a/keyboard/hhkb/keymap.c b/keyboard/hhkb/keymap.c index 0d07c79cf3..094d33af11 100644 --- a/keyboard/hhkb/keymap.c +++ b/keyboard/hhkb/keymap.c @@ -82,7 +82,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Gui|Alt | Space |Alt |Gui| * `-------------------------------------------' */ - KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ + KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, 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,TRNS, \ @@ -101,7 +101,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Gui|Alt | Space |Alt |Gui| * `-------------------------------------------' */ - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ + KEYMAP(GRV, 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, TRNS,RSFT,NO, \ @@ -121,7 +121,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------------------------------' * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel */ - KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ + KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \ LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,SLSH,RSFT,NO, \ diff --git a/protocol/vusb/vusb.c b/protocol/vusb/vusb.c index 1d5f4a8528..328885a9b5 100644 --- a/protocol/vusb/vusb.c +++ b/protocol/vusb/vusb.c @@ -88,6 +88,10 @@ static void send_keyboard(report_keyboard_t *report) } else { debug("kbuf: full\n"); } + + // NOTE: send key strokes of Macro + usbPoll(); + vusb_transfer_keyboard(); } -- cgit v1.2.3