diff options
| author | cr3473 <joe@createtank.com> | 2015-05-27 08:29:48 -0700 | 
|---|---|---|
| committer | cr3473 <joe@createtank.com> | 2015-05-27 08:29:48 -0700 | 
| commit | b36d1a87da2395fd5429e2817409c76f065387b5 (patch) | |
| tree | 1e4a76822deaf92db83896548fa3c3003f7640f3 /converter | |
| parent | a4cf9ae660b16d1952738139ba8f788368b73eff (diff) | |
| parent | d61d1f5ca3a7dcccc495ac6688e0632c601c0623 (diff) | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'converter')
| -rw-r--r-- | converter/adb_usb/README.md | 2 | ||||
| -rw-r--r-- | converter/m0110_usb/Makefile | 8 | ||||
| -rw-r--r-- | converter/m0110_usb/Makefile.teensy | 98 | ||||
| -rw-r--r-- | converter/m0110_usb/README.md | 25 | ||||
| -rw-r--r-- | converter/m0110_usb/keymap.c | 223 | ||||
| -rw-r--r-- | converter/m0110_usb/keymap_common.h | 36 | ||||
| -rw-r--r-- | converter/m0110_usb/keymap_default.c | 85 | ||||
| -rw-r--r-- | converter/m0110_usb/keymap_intl.c | 85 | ||||
| -rw-r--r-- | converter/m0110_usb/keymap_plain.c | 2 | ||||
| -rw-r--r-- | converter/m0110_usb/led.c | 10 | 
10 files changed, 330 insertions, 244 deletions
diff --git a/converter/adb_usb/README.md b/converter/adb_usb/README.md index defc477e2c..21ad318c1d 100644 --- a/converter/adb_usb/README.md +++ b/converter/adb_usb/README.md @@ -88,7 +88,7 @@ modifiers except for GUI key(Windows/Command).  And most ADB keyboard has no diodes in its matrix so they are not NKRO,  though ADB protocol itself supports it. See protocol/adb.c for more info. -If keyobard has ISO layout you need to use ISO keymap with `make KEYMAP=iso`. With ANSI +If keyboard has ISO layout you need to use ISO keymap with `make KEYMAP=iso`. With ANSI  keymap you will suffer from swapped keys problem.  https://github.com/tmk/tmk_keyboard/issues/35 diff --git a/converter/m0110_usb/Makefile b/converter/m0110_usb/Makefile index ac54945e73..6f20396f59 100644 --- a/converter/m0110_usb/Makefile +++ b/converter/m0110_usb/Makefile @@ -17,7 +17,7 @@ SRC =	matrix.c \  ifdef KEYMAP      SRC += keymap_$(KEYMAP).c  else -    SRC += keymap_plain.c +    SRC += keymap_default.c  endif  CONFIG_H = config.h @@ -25,10 +25,8 @@ 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 +MCU = atmega32u2       # TMK converter rev2 +#MCU = atmega32u4       # TMK converter rev1  # Processor frequency. diff --git a/converter/m0110_usb/Makefile.teensy b/converter/m0110_usb/Makefile.teensy new file mode 100644 index 0000000000..9a5c41068e --- /dev/null +++ b/converter/m0110_usb/Makefile.teensy @@ -0,0 +1,98 @@ +# 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 =	matrix.c \ +	led.c \ +	keymap_common.c \ +	m0110.c + +# To use own keymap file run make like: make keymap=hasu +ifdef KEYMAP +    SRC += keymap_$(KEYMAP).c +else +    SRC += keymap_default.c +endif + +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 + + +# Boot Section Size in bytes +#   Teensy halfKay   512 +#   Atmel DFU loader 4096 +#   LUFA bootloader  4096 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +#   *Comment out* to disable the options. +# +#BOOTMAGIC_ENABLE = yes	# Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes	# Mouse keys(+4700) +EXTRAKEY_ENABLE = yes	# Audio control and System control(+450) +CONSOLE_ENABLE = yes	# Console for debug(+400) +COMMAND_ENABLE = yes    # Commands for debug and configuration +#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend +#NKRO_ENABLE = yes	# USB Nkey Rollover - not yet supported in LUFA +#KEYMAP_SECTION_ENABLE = yes	# fixed address keymap for keymap editor + + + +#---------------- 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 diff --git a/converter/m0110_usb/README.md b/converter/m0110_usb/README.md index 7de36d5de1..c1ecb53b0b 100644 --- a/converter/m0110_usb/README.md +++ b/converter/m0110_usb/README.md @@ -1,6 +1,6 @@  M0110/M0110A to USB keyboard converter  ====================================== -This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer. +This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller like **ATmega32U2** and **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer.  Read README of top directory too. @@ -20,12 +20,13 @@ Update  - 2013/08: Change port for signals `PF` to `PD`  - 2013/09: Change port again, it uses inversely `PD0` for data and `PD1` for clock line now.  - 2014/06: Change keymaps +- 2015/03: Add support for "International"(ISO) keyboard(keymap_intl.c)  Building Hardware  ----------------- -You need **4P4C** cable and **ATMega32U4** board like PJRC [Teensy]. Port of the MCU `PD1` is assigned to `CLOCK` line and `PD0` to `DATA` by default, you can change pin configuration with editing `config.h`. +You need [TMK converter] or AVR dev board like PJRC [Teensy]. Port of the MCU `PD1` is assigned to `CLOCK` line and `PD0` to `DATA` by default, you can change pin configuration with editing `config.h`.  [](http://i.imgur.com/4G2ZOeg.jpg) @@ -38,6 +39,7 @@ Close-up picture of handset cable. You can see one end of plug has reverse color  [](http://i.imgur.com/3S9P1mY.jpg?1)  [Teensy]: http://www.pjrc.com/teensy/ +[TMK converter]: https://github.com/tmk/keyboard_converter  ### Socket Pinout @@ -53,17 +55,14 @@ You may need pull-up resistors on signal lines(`CLOCK`, `DATA`) in particular wh  Building Firmware  ----------------- -To compile firmware you need AVR GCC. You can edit *Makefile* and *config.h* to change compile options and pin configuration. +To compile firmware you need AVR GCC. You can edit *Makefile* and *config.h* to change compile options and pin configuration. Also `KEYMAP` option can be used to select keymap.      $ git clone git://github.com/tmk/tmk_keyboard.git (or download source)      $ cd m0110_usb -    $ make clean -    $ make +    $ make -f Makefile clean +    $ make -f Makefile [KEYMAP={default|plain|intl|spacefn|hasu}] -To select keymap use `KEYMAP` option. - -    $ make clean -    $ make KEYMAP={plain|spacefn|hasu} +Use `Makefile.teensy` instead for Teensy. @@ -71,13 +70,13 @@ Keymap  ------  To create your own keymap copy existent keymap file to `keymap_name.c` and edit it. You can build it like this. -    $ make clean -    $ make KEYMAP=name +    $ make -f Makefile clean +    $ make -f Makefile KEYMAP=name  Debug  ----- -You can use [PJRC HID listen](http://www.pjrc.com/teensy/hid_listen.html) to see debug output. The converter has some functions for debug, press `<Command>+H` simultaneously to get help. +You can use [PJRC HID listen](http://www.pjrc.com/teensy/hid_listen.html) to see debug output. The converter has some functions for debug, press `<Magic>+H` simultaneously to get help. -- Command: `Shift+Option+Command`(`Shift+Alt+Gui` or `Shift+Alt+Control`) +- Magic combo: `Shift+Option+⌘` or `Shift+Option+Ctrl`(`Shift+Alt+Gui` or `Shift+Alt+Control`) diff --git a/converter/m0110_usb/keymap.c b/converter/m0110_usb/keymap.c deleted file mode 100644 index 4570dd2832..0000000000 --- a/converter/m0110_usb/keymap.c +++ /dev/null @@ -1,223 +0,0 @@ -/* -Copyright 2011,2012 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/>. -*/ -/* M0110A Support was contributed by skagon@github */ - -#include <stdint.h> -#include <stdbool.h> -#include <avr/pgmspace.h> -#include "keycode.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "keymap.h" - - -/*  - * The keymap works with both M0110 and M0110A keyboards. As you can see, the M0110A is a superset - * of the M0110 keyboard, with only one exception: 'Enter' in M0110 does not exist - * on the M0110A, but since it generates a unique scan code which is not used for some other key in - * the M0110A, they are totally interchangeable.  In fact, the M0110A is functionally (almost) - * identical to the combination of the M0110 along with the M0120 keypad. The only difference - * (which is causing some problems as you will read below) is that the M0110+M0120 don't have - * dedicated arrow keys, while the M0110A does. However, the M0120 did have arrow keys, which - * doubled as the [comma], [/], [*] and [+] keys, when used with the [Shift] key. The M0110A has - * substituted the [comma] key with the [=] key, however its scancode is the same. - * - * Physical layout: - * M0110A - * ,---------------------------------------------------------. ,---------------. - * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Bcksp| |Clr|  =|  /|  *| - * |---------------------------------------------------------| |---------------| - * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -| - * |-----------------------------------------------------'   | |---------------| - * |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter | |  4|  5|  6|  +| - * |---------------------------------------------------------| |---------------| - * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   | - * |---------------------------------------------------------' |-----------|Ent| - * |Opt  |Mac    |           Space           |  \|Lft|Rgt|Dn | |      0|  .|   | - * `---------------------------------------------------------' `---------------' - * - * M0110                                                       M0120 - * ,---------------------------------------------------------. ,---------------. - * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Clr|  -|  +|  *| - * |---------------------------------------------------------| |---------------| - * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \| |  7|  8|  9|  /| - * |---------------------------------------------------------| |---------------| - * |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter | |  4|  5|  6|  ,| - * |---------------------------------------------------------| |---------------| - * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   | - * `---------------------------------------------------------' |-----------|Ent| - *      |Opt|Mac |         Space               |Ent |Opt|      |      0|  .|   | - *      `-----------------------------------------------'      `---------------' - * With Shift keys on M0120 work as curosor.(-:Left *:Right /:Up ,:Down) - * - * NOTE: \ is located differently. - * NOTE: Enter on M0110 is different from Enter on keypad(M0120 and M0110A). - * NOTE: Left Shift and right Shift are logically same key. - * NOTE: Left Option and right Option are logically same key. - */ - -/* Keymap definition Macro - * ,---------------------------------------------------------. ,---------------. - * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Clr|  =|  /|  *| - * |---------------------------------------------------------| |---------------| - * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -| - * |-----------------------------------------------------'   | |---------------| - * |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter | |  4|  5|  6|  +| - * |---------------------------------------------------------| |---------------| - * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   | - * |---------------------------------------------------------| |-----------|Ent| - * |Opt  |Mac    |         Space         |Ent|  \|Lft|Rgt|Dn | |      0|  .|   | - * `---------------------------------------------------------' `---------------' - * NOTE: Ent between Space and \ means Enter on M0110. - */ -#define KEYMAP( \ -    K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33,  K47,K68,K6D,K62, \ -    K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,      K59,K5B,K5C,K4E, \ -    K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,    K24,  K56,K57,K58,K66, \ -    K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,        K4D,  K53,K54,K55,K4C, \ -    K3A,K37,            K31,            K34,K2A,K46,K42,K48,  K52,    K41      \ -) { \ -    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \ -    { KC_##K08, KC_##K09, KC_NO,    KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \ -    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \ -    { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \ -    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \ -    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \ -    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO,    KC_NO,    KC_##K37 }, \ -    { KC_##K38, KC_##K39, KC_##K3A, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }, \ -    { KC_NO,    KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_NO,    KC_##K46, KC_##K47 }, \ -    { KC_##K48, KC_NO,    KC_NO,    KC_NO,    KC_##K4C, KC_##K4D, KC_##K4E, KC_NO    }, \ -    { KC_NO,    KC_NO,    KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \ -    { KC_##K58, KC_##K59, KC_NO,    KC_##K5B, KC_##K5C, KC_NO,    KC_NO,    KC_NO    }, \ -    { KC_NO,    KC_NO,    KC_##K62, KC_NO,    KC_NO,    KC_NO,    KC_##K66, KC_NO    }, \ -    { KC_##K68, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K6D, KC_NO,    KC_NO    }, \ -} - -#ifdef KEYMAP_SECTION_ENABLE -const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = { -#else -static const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { -#endif -    /* Default: -     * ,---------------------------------------------------------. ,---------------. -     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Clr|  =|  /|  *| -     * |---------------------------------------------------------| |---------------| -     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -| -     * |-----------------------------------------------------'   | |---------------| -     * |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter | |  4|  5|  6|  +| -     * |---------------------------------------------------------| |---------------| -     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   | -     * |---------------------------------------------------------| |-----------|Ent| -     * |Ctl  |Gui    |         Space         |Alt|  \|Lft|Rgt|Dn | |      0|  .|   | -     * `---------------------------------------------------------' `---------------' -     */ -    [0] = KEYMAP( -    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,    CLR, EQL, PSLS,PAST, -    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,         P7,  P8,  P9,  PMNS, -    LCAP,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     FN15,    P4,  P5,  P6,  PPLS, -    LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,          UP,      P1,  P2,  P3,  PENT, -    LCTL,LGUI,               FN16,               LALT,FN31,LEFT,RGHT,DOWN,    P0,       PDOT -    ), -    /* Cursor Layer(WASD, IJKL) -     * ,---------------------------------------------------------. ,---------------. -     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk|  =|  /|  *| -     * |---------------------------------------------------------| |---------------| -     * |Caps |Hom| Up|PgU|   |   |   |   |Psc|Slk|Pau|Up |Ins|   | |  7|  8|  9|  -| -     * |-----------------------------------------------------'   | |---------------| -     * |Caps  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Enter | |  4|  5|  6|  +| -     * |---------------------------------------------------------| |---------------| -     * |Shift   |End|   |PgD|   |   |   |   |End|PgD|Dow|Shif|PgU| |  1|  2|  3|   | -     * |---------------------------------------------------------| |-----------|Ent| -     * |Ctl  |Gui    |         Space        |Alt |  \|Hom|End|PgD| |      0|  .|   | -     * `---------------------------------------------------------' `---------------' -     */ -    [3] = KEYMAP( -    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST, -    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  INS,          P7,  P8,  P9,  PMNS, -    LCAP,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,     FN15,    P4,  P5,  P6,  PPLS, -    LSFT,END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,          PGUP,    P1,  P2,  P3,  PENT, -    LCTL,LGUI,               FN16,               LALT,FN31,HOME,END, PGDN,    P0,       PDOT -    ), -    [4] = KEYMAP( -    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST, -    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  INS,          P7,  P8,  P9,  PMNS, -    LCAP,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,     FN15,    P4,  P5,  P6,  PPLS, -    LSFT,END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,          PGUP,    P1,  P2,  P3,  PENT, -    LCTL,LGUI,               FN16,               LALT,FN31,HOME,END, PGDN,    P0,       PDOT -    ), -    [7] = {}, -}; - - -/* - * Fn action definition - */ -#ifdef KEYMAP_SECTION_ENABLE -const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = { -#else -static const uint16_t fn_actions[] PROGMEM = { -#endif -    [0]  = ACTION_LAYER_MOMENTARY(1), -    [1]  = ACTION_LAYER_MOMENTARY(2), -    [2]  = ACTION_LAYER_MOMENTARY(3), -    [3]  = ACTION_LAYER_MOMENTARY(4), -    [4]  = ACTION_LAYER_MOMENTARY(5), -    [5]  = ACTION_LAYER_MOMENTARY(6), -    [6]  = ACTION_LAYER_MOMENTARY(7), -    [7]  = ACTION_LAYER_TOGGLE(1), -    [8]  = ACTION_LAYER_TOGGLE(2), -    [9]  = ACTION_LAYER_TOGGLE(3), -    [10] = ACTION_LAYER_TAP_TOGGLE(1), -    [11] = ACTION_LAYER_TAP_TOGGLE(2), -    [12] = ACTION_LAYER_TAP_TOGGLE(3), -    [13] = ACTION_LAYER_TAP_KEY(1, KC_F), -    [14] = ACTION_LAYER_TAP_KEY(2, KC_J), -    [15] = ACTION_LAYER_TAP_KEY(3, KC_ENTER), -    [16] = ACTION_LAYER_TAP_KEY(4, KC_SPACE), -    [17] = ACTION_LAYER_TAP_KEY(5, KC_SCOLON), -    [18] = ACTION_LAYER_TAP_KEY(6, KC_QUOTE), -    [19] = ACTION_LAYER_TAP_KEY(7, KC_SLASH), -    [20] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPACE), -    [21] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_SPACE), -    [22] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_QUOTE), -    [23] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENTER), -    [24] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC), -    [25] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPACE), -    [26] = ACTION_MODS_ONESHOT(MOD_LCTL), -    [27] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC), -    [28] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPACE), -    [29] = ACTION_MODS_ONESHOT(MOD_LSFT), -    [30] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRAVE), -    [31] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_BSLASH), -}; - - - -/* translates key to keycode */ -uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key) -{ -    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); -} - -/* translates Fn index to action */ -action_t keymap_fn_to_action(uint8_t keycode) -{ -    action_t action; -    action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]); -    return action; -} diff --git a/converter/m0110_usb/keymap_common.h b/converter/m0110_usb/keymap_common.h index e1d47342ef..8bde7473dd 100644 --- a/converter/m0110_usb/keymap_common.h +++ b/converter/m0110_usb/keymap_common.h @@ -105,3 +105,39 @@ extern const uint16_t fn_actions[];      { KC_NO,    KC_NO,    KC_##K62, KC_NO,    KC_NO,    KC_NO,    KC_##K66, KC_NO    }, \      { KC_##K68, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K6D, KC_NO,    KC_NO    }, \  } + +/* International keyboard + *  ,---------------------------------------------------------. + *  | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33| + *  |---------------------------------------------------------| + *  |   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| + *  |------------------------------------------------------,  | + *  |    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24|  | + *  |---------------------------------------------------------| + *  |  38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A|      38| + *  `---------------------------------------------------------' + *       | 3A|  37|             34              |   31| 3A| + *       `------------------------------------------------' + */ +#define KEYMAP_INTL( \ +    K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33,  K47,K68,K6D,K62, \ +    K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A,  K59,K5B,K5C,K4E, \ +    K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K24,      K56,K57,K58,K66, \ +    K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,K0A,    K4D,  K53,K54,K55,K4C, \ +    K3A,K37,            K34,            K31,    K46,K42,K48,  K52,    K41      \ +) { \ +    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \ +    { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \ +    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \ +    { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \ +    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \ +    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \ +    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO,    KC_NO,    KC_##K37 }, \ +    { KC_##K38, KC_##K39, KC_##K3A, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }, \ +    { KC_NO,    KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_NO,    KC_##K46, KC_##K47 }, \ +    { KC_##K48, KC_NO,    KC_NO,    KC_NO,    KC_##K4C, KC_##K4D, KC_##K4E, KC_NO    }, \ +    { KC_NO,    KC_NO,    KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \ +    { KC_##K58, KC_##K59, KC_NO,    KC_##K5B, KC_##K5C, KC_NO,    KC_NO,    KC_NO    }, \ +    { KC_NO,    KC_NO,    KC_##K62, KC_NO,    KC_NO,    KC_NO,    KC_##K66, KC_NO    }, \ +    { KC_##K68, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K6D, KC_NO,    KC_NO    }, \ +} diff --git a/converter/m0110_usb/keymap_default.c b/converter/m0110_usb/keymap_default.c new file mode 100644 index 0000000000..b0b8ee220a --- /dev/null +++ b/converter/m0110_usb/keymap_default.c @@ -0,0 +1,85 @@ +/* +Copyright 2011,2012,2015 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/>. +*/ +#include <stdint.h> +#include "keycode.h" +#include "keymap_common.h" + + + +const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { +    /* Default: +     * M0110                                                       M0120 +     * ,---------------------------------------------------------. ,---------------. +     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  -|  +|  *| +     * |---------------------------------------------------------| |---------------| +     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \| |  7|  8|  9|  /| +     * |---------------------------------------------------------| |---------------| +     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  ,| +     * |---------------------------------------------------------| |---------------| +     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   | +     * `---------------------------------------------------------' |-----------|Ent| +     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   | +     *      `-----------------------------------------------'      `---------------' +     * M0110A +     * ,---------------------------------------------------------. ,---------------. +     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  =|  /|  *| +     * |---------------------------------------------------------| |---------------| +     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -| +     * |-----------------------------------------------------'   | |---------------| +     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  +| +     * |---------------------------------------------------------| |---------------| +     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   | +     * |---------------------------------------------------------| |-----------|Ent| +     * |Opt  |Mac    |         Space             |  \|Lft|Rgt|Dn | |      0|  .|   | +     * `---------------------------------------------------------' `---------------' +     */ +    [0] = KEYMAP( +    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,    NLCK,EQL, PSLS,PAST, +    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,         P7,  P8,  P9,  PMNS, +    LCTL,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,                FN0, BSLS,LEFT,RGHT,DOWN,    P0,       PDOT +    ), +    /* Cursor Layer +     * ,---------------------------------------------------------. ,---------------. +     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk|  -|  +|  *| +     * |---------------------------------------------------------| |---------------| +     * |Caps |Hom| Up|PgU|   |   |   |   |Psc|Slk|Pau|Up |   |INS| |  7|  8|  9|  /| +     * |---------------------------------------------------------| |---------------| +     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Return| |  4|  5|  6|  ,| +     * |---------------------------------------------------------| |---------------| +     * |Shift   |End|   |PgD|   |   |   |   |End|PgD|Dow|Shift   | |  1|  2|  3|   | +     * `---------------------------------------------------------' |-----------|Ent| +     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   | +     *      `-----------------------------------------------'      `---------------' +     */ +    [1] = KEYMAP( +    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST, +    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  NO,           P7,  P8,  P9,  PMNS, +    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,     ENT,     P4,  P5,  P6,  PPLS, +    LSFT,END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,          PGUP,    P1,  P2,  P3,  PENT, +    LALT,LGUI,               SPC,                FN0, INS, HOME,END, PGDN,    P0,       PDOT +    ), +}; + + +/* + * Fn action definition + */ +const uint16_t fn_actions[] PROGMEM = { +    [0]  = ACTION_LAYER_MOMENTARY(1), +}; diff --git a/converter/m0110_usb/keymap_intl.c b/converter/m0110_usb/keymap_intl.c new file mode 100644 index 0000000000..80b029305f --- /dev/null +++ b/converter/m0110_usb/keymap_intl.c @@ -0,0 +1,85 @@ +/* +Copyright 2015 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/>. +*/ +#include <stdint.h> +#include "keycode.h" +#include "keymap_common.h" + + + +const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { +    /* International keyboard +     * M0110                                                       M0120 +     * ,---------------------------------------------------------. ,---------------. +     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  -|  +|  *| +     * |---------------------------------------------------------| |---------------| +     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Ret| |  7|  8|  9|  /| +     * |------------------------------------------------------,  | |---------------| +     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|  | |  4|  5|  6|  ,| +     * |---------------------------------------------------------| |---------------| +     * |Shif|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   | +     * `---------------------------------------------------------' |-----------|Ent| +     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   | +     *      `-----------------------------------------------'      `---------------' +     * M0110A(not existent?) +     * ,---------------------------------------------------------. ,---------------. +     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  =|  /|  *| +     * |---------------------------------------------------------| |---------------| +     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Ret| |  7|  8|  9|  -| +     * |------------------------------------------------------,  | |---------------| +     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|  | |  4|  5|  6|  +| +     * |---------------------------------------------------------| |---------------| +     * |Shif|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   | +     * |---------------------------------------------------------| |-----------|Ent| +     * |Opt  |Mac    |         Space             |  \|Lft|Rgt|Dn | |      0|  .|   | +     * `---------------------------------------------------------' `---------------' +     */ +    [0] = KEYMAP_INTL( +    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,    NLCK,EQL, PSLS,PAST, +    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,ENT,     P7,  P8,  P9,  PMNS, +    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,BSLS,         P4,  P5,  P6,  PPLS, +    LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     UP,      P1,  P2,  P3,  PENT, +    LALT,LGUI,               SPC,                FN0,      LEFT,RGHT,DOWN,    P0,       PDOT +    ), +    /* Cursor Layer +     * ,---------------------------------------------------------. ,---------------. +     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk|  -|  +|  *| +     * |---------------------------------------------------------| |---------------| +     * |Caps |Hom| Up|PgU|   |   |   |   |Psc|Slk|Pau|Up |   |Ret| |  7|  8|  9|  /| +     * |------------------------------------------------------,  | |---------------| +     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Ins|  | |  4|  5|  6|  ,| +     * |---------------------------------------------------------| |---------------| +     * |Shif|  <|End|   |PgD|   |   |   |   |End|PgD|Dow|Shift   | |  1|  2|  3|   | +     * `---------------------------------------------------------' |-----------|Ent| +     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   | +     *      `-----------------------------------------------'      `---------------' +     */ +    [1] = KEYMAP_INTL( +    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST, +    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  NO,  ENT,     P7,  P8,  P9,  PMNS, +    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,INS,          P4,  P5,  P6,  PPLS, +    LSFT,NO,  END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,     PGUP,    P1,  P2,  P3,  PENT, +    LALT,LGUI,               SPC,                FN0,      HOME,END, PGDN,    P0,       PDOT +    ), +}; + + +/* + * Fn action definition + */ +const uint16_t fn_actions[] PROGMEM = { +    [0]  = ACTION_LAYER_MOMENTARY(1), +}; diff --git a/converter/m0110_usb/keymap_plain.c b/converter/m0110_usb/keymap_plain.c index f262dca224..d1507fcaa9 100644 --- a/converter/m0110_usb/keymap_plain.c +++ b/converter/m0110_usb/keymap_plain.c @@ -27,7 +27,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {       * |---------------------------------------------------------| |---------------|       * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \| |  7|  8|  9|  /|       * |---------------------------------------------------------| |---------------| -     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  ,| +     * |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  ,|       * |---------------------------------------------------------| |---------------|       * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   |       * `---------------------------------------------------------' |-----------|Ent| diff --git a/converter/m0110_usb/led.c b/converter/m0110_usb/led.c index f76545f0ba..3822a131b8 100644 --- a/converter/m0110_usb/led.c +++ b/converter/m0110_usb/led.c @@ -15,10 +15,18 @@ You should have received a copy of the GNU General Public License  along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ -#include "stdint.h" +#include <stdint.h> +#include <avr/io.h>  #include "led.h"  void led_set(uint8_t usb_led)  { +    if (usb_led &  (1<<USB_LED_CAPS_LOCK)) { +        DDRD |= (1<<6); +        PORTD |= (1<<6); +    } else { +        DDRD |= (1<<6); +        PORTD &= ~(1<<6); +    }  }  | 
