Browse Source

Merge remote-tracking branch 'tmk_keyboard/master' into exp

Conflicts:
	common.mk
	common/action.c
	common/avr/suspend.c
	common/command.c
	common/keyboard.c
	keyboard/gh60/Makefile
	keyboard/gh60/Makefile.pjrc
exp
Kai Ryu 9 years ago
parent
commit
432b1df3e4
100 changed files with 986 additions and 5209 deletions
  1. 0
    6
      .gitmodules
  2. 27
    79
      README.md
  3. 0
    105
      common/breathing_led.c
  4. 0
    25
      common/breathing_led.h
  5. 0
    111
      common/keymap_in_eeprom.c
  6. 0
    73
      common/keymap_in_eeprom.h
  7. 0
    91
      common/led_matrix.c
  8. 0
    65
      common/led_matrix.h
  9. 0
    135
      common/ledmap.c
  10. 0
    59
      common/ledmap.h
  11. 0
    35
      common/ledmap_in_eeprom.c
  12. 0
    26
      common/ledmap_in_eeprom.h
  13. 0
    419
      common/softpwm_led.c
  14. 0
    113
      common/softpwm_led.h
  15. 10
    6
      converter/adb_usb/Makefile
  16. 10
    6
      converter/adb_usb/Makefile.pjrc
  17. 56
    49
      converter/adb_usb/README.md
  18. 1
    1
      converter/adb_usb/keymap_ansi.c
  19. 2
    2
      converter/adb_usb/keymap_hasu.c
  20. 1
    1
      converter/adb_usb/keymap_iso.c
  21. 61
    0
      converter/adb_usb/matrix.c
  22. 6
    6
      converter/ascii_usb/Makefile
  23. 6
    6
      converter/ibm4704_usb/Makefile
  24. 11
    4
      converter/ibm4704_usb/README.md
  25. 5
    18
      converter/ibm4704_usb/config.h
  26. 11
    10
      converter/ibm4704_usb/ibm4704.txt
  27. 17
    0
      converter/ibm4704_usb/keymap_50key.c
  28. 71
    25
      converter/ibm4704_usb/keymap_common.h
  29. 5
    5
      converter/ibm4704_usb/keymap_hasu.c
  30. 26
    14
      converter/ibm4704_usb/keymap_plain.c
  31. 21
    30
      converter/ibm4704_usb/matrix.c
  32. 6
    6
      converter/m0110_usb/Makefile
  33. 6
    6
      converter/m0110_usb/Makefile.pjrc
  34. 6
    6
      converter/m0110_usb/Makefile.teensy
  35. 6
    6
      converter/news_usb/Makefile.pjrc
  36. 6
    6
      converter/next_usb/Makefile
  37. 6
    6
      converter/next_usb/Makefile.pjrc
  38. 6
    6
      converter/pc98_usb/Makefile
  39. 8
    8
      converter/ps2_usb/Makefile
  40. 1
    1
      converter/ps2_usb/Makefile.mbed
  41. 6
    6
      converter/ps2_usb/Makefile.pjrc
  42. 6
    6
      converter/ps2_usb/Makefile.tmk_rev1
  43. 6
    6
      converter/ps2_usb/Makefile.tmk_rev2
  44. 6
    6
      converter/ps2_usb/Makefile.vusb
  45. 1
    1
      converter/ps2_usb/README.md
  46. 3
    3
      converter/ps2_usb/config.h
  47. 6
    6
      converter/serialmouse_usb/Makefile
  48. 6
    6
      converter/sun_usb/Makefile
  49. 9
    2
      converter/sun_usb/README
  50. 173
    0
      converter/sun_usb/keymap_sun3.c
  51. 7
    7
      converter/terminal_bluefruit/Makefile
  52. 6
    6
      converter/terminal_usb/Makefile
  53. 60
    0
      converter/terminal_usb/keymap.c
  54. 12
    7
      converter/usb_usb/Makefile
  55. 4
    26
      converter/usb_usb/keymap.c
  56. 29
    17
      converter/usb_usb/main.cpp
  57. 6
    6
      converter/x68k_usb/Makefile
  58. 1
    1
      doc/keycode.txt
  59. 1
    1
      doc/keymap.md
  60. 5
    5
      keyboard/IIgs/Makefile
  61. 5
    5
      keyboard/alps64/Makefile
  62. 15
    15
      keyboard/alps64/keymap_hasu.c
  63. 5
    6
      keyboard/gh60/Makefile
  64. 17
    5
      keyboard/gh60/Makefile.pjrc
  65. 5
    5
      keyboard/ghost_squid/Makefile.lufa
  66. 5
    5
      keyboard/hbkb/Makefile.lufa
  67. 9
    5
      keyboard/hhkb/Makefile
  68. 5
    5
      keyboard/hhkb/Makefile.pjrc
  69. 6
    6
      keyboard/hhkb/Makefile.rn42
  70. 11
    10
      keyboard/hhkb/doc/HHKB.txt
  71. 1
    1
      keyboard/hhkb/hhkb_avr.h
  72. 37
    4
      keyboard/hhkb/keymap_hhkb.c
  73. 6
    0
      keyboard/hhkb/matrix.c
  74. 6
    6
      keyboard/hhkb/not_supported/Makefile.iwrap
  75. 5
    5
      keyboard/hhkb/not_supported/Makefile.vusb
  76. 5
    5
      keyboard/hid_liber/Makefile.lufa
  77. 5
    5
      keyboard/hid_liber/Makefile.pjrc
  78. 2
    2
      keyboard/infinity/Makefile
  79. 17
    15
      keyboard/infinity/mbed-infinity.mk
  80. 5
    5
      keyboard/kitten_paw/Makefile.lufa
  81. 5
    5
      keyboard/kmac/Makefile.lufa
  82. 5
    5
      keyboard/kmac/Makefile.pjrc
  83. 5
    5
      keyboard/lightpad/Makefile.lufa
  84. 5
    5
      keyboard/lightsaber/Makefile.lufa
  85. 5
    5
      keyboard/lightsaber/Makefile.pjrc
  86. 5
    5
      keyboard/macway/Makefile.lufa
  87. 5
    5
      keyboard/macway/Makefile.pjrc
  88. 1
    1
      keyboard/mbed_onekey/Makefile
  89. 5
    5
      keyboard/nerd/Makefile
  90. 6
    6
      keyboard/onekey/Makefile
  91. 6
    6
      keyboard/onekey/Makefile.pjrc
  92. 5
    5
      keyboard/phantom/Makefile.lufa
  93. 5
    5
      keyboard/phantom/Makefile.pjrc
  94. 0
    116
      protocol/lufa/LUFA-120730/LUFA/Build/lufa_sources.mk
  95. 0
    1809
      protocol/lufa/LUFA-120730/LUFA/Doxygen.conf
  96. 0
    223
      protocol/lufa/LUFA-120730/LUFA/DoxygenPages/CompileTimeTokens.txt
  97. 0
    44
      protocol/lufa/LUFA-120730/LUFA/DoxygenPages/KnownIssues.txt
  98. 0
    22
      protocol/lufa/LUFA-120730/LUFA/DoxygenPages/LicenseInfo.txt
  99. 0
    1123
      protocol/lufa/LUFA-120730/LUFA/DoxygenPages/Style/Style.css
  100. 0
    0
      protocol/lufa/LUFA-120730/LUFA/DoxygenPages/VIDAndPIDValues.txt

+ 0
- 6
.gitmodules View File

@@ -1,6 +0,0 @@
[submodule "protocol/lufa/LUFA-git"]
path = protocol/lufa/LUFA-git
url = https://github.com/abcminiuser/lufa.git
[submodule "protocol/usb_hid/USB_Host_Shield_2.0"]
path = protocol/usb_hid/USB_Host_Shield_2.0
url = https://github.com/felis/USB_Host_Shield_2.0.git

+ 27
- 79
README.md View File

@@ -5,6 +5,17 @@ This is a keyboard firmware with some useful features for Atmel AVR controller.
Source code is available here: <http://github.com/tmk/tmk_keyboard>


Updates
-------
#### 2015/04/22
Core library was separated to other branch `core`. <https://github.com/tmk/tmk_keyboard/tree/core>

In `Makefile` you need to set `TMK_DIR` to indicate core library location now.

TMK_DIR = ../../tmk_core



Features
--------
These features can be used in your keyboard.
@@ -26,6 +37,7 @@ These features can be used in your keyboard.
* Backlight - Control backlight levels



Projects
--------
You can find some keyboard specific projects under `converter` and `keyboard` directory.
@@ -95,7 +107,8 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
License
-------
**GPLv2** or later. Some protocol files are under **Modified BSD License**.
LUFA, PJRC and V-USB stack have their own license respectively.

Third party libraries like LUFA, PJRC and V-USB have their own license respectively.



@@ -115,7 +128,8 @@ Magic Commands
--------------
To see help press `Magic` + `H`.

`Magic` key bind may be `LShift` + `RShift` in many project, but `Power` key on ADB converter. `Magic` keybind can be vary on each project, check `config.h` in project directory.
`Magic` key combination is `LShift` + `RShift` in many project, but `Power` key on ADB converter.
`Magic` keybind can be vary on each project, check `config.h` in project directory.

Following commands can be also executed with `Magic` + key. In console mode `Magic` keybind is not needed.

@@ -139,13 +153,14 @@ Following commands can be also executed with `Magic` + key. In console mode `Mag
Caps: Lock Keyboard(Child Proof)
Paus: jump to bootloader

**TBD**

### Boot Magic Configuration - Virtual DIP Switch

Boot Magic Configuration - Virtual DIP Switch
---------------------------------------------
Boot Magic are executed during boot up time. Press Magic key below then plug in keyboard cable.
Note that you must use keys of **Layer 0** as Magic keys. These settings are stored in EEPROM so that retain your configure over power cycles.

To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [common/bootmagic.h](common/bootmagic.h).
To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [tmk_core/common/bootmagic.h](tmk_core/common/bootmagic.h).

#### General
- Skip reading EEPROM to start with default configuration(`ESC`)
@@ -180,55 +195,23 @@ To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be
- Set Default Layer to 6(`6`)
- Set Default Layer to 7(`7`)

#### Caution
Unintentional use of this feature will cause user confusion.

TODO: Magic key combination to avoid unintentional press during plug in

**TBD**


Mechanical Locking support
--------------------------
This feature makes it possible for you to use mechanical switch for `CapsLock`, `NumLock` or `ScrollLock`. To enable this feature define these macros in `config.h` and use `KC_LCAP`, `KC_LNUM` or `KC_LSCR` in keymap for locking key instead of normal `KC_CAPS`, `KC_NLCK` or `KC_SLCK`. Resync option tries to keep lock switch state consistent with keyboard LED state.
This feature makes it possible for you to use mechanical locking switch for `CapsLock`, `NumLock`
or `ScrollLock`. To enable this feature define these macros in `config.h` and use `KC_LCAP`, `KC_LN
UM` or `KC_LSCR` in keymap for locking key instead of normal `KC_CAPS`, `KC_NLCK` or `KC_SLCK`. Res
ync option tries to keep switch state consistent with keyboard LED state.
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE



Start Your Own Project
-----------------------
**TBD**
### Config.h Options
#### 1. USB vendor/product ID and device description
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xBEEF
#define MANUFACTURER t.m.k.
#define PRODUCT Macway mod
#define DESCRIPTION t.m.k. keyboard firmware for Macway mod

#### 2. Keyboard matrix configuration
#define MATRIX_ROWS 8
#define MATRIX_COLS 8
#define MATRIX_HAS_GHOST



Architecture
------------
Architecture Diagram
+---------------+---------------+-------------+
| Host | Keyboard | Matrix, LED |
___________ |-----------+-+ +-------------+ | +-----------|
/ /| Keys/Mouse | Protocol |d| | Action | | | Protocol |
/__________/ |<-----------| LUFA |r| | Layer, Tap | | | Matrix |
|.--------.| | LED | V-USB |i| |-------------| | | PS/2,IBM | __________________
|| || |----------->| PJRC |v| | Keymap | | | ADB,M0110| Keys / /_/_/_/_/_/_/_/ /|
|| Host || | Console | iWRAP(BT)|e| | Mousekey | | | SUN/NEWS |<----------/ /_/_/_/_/_/_/_/ / /
||________||/.<-----------| UART |r| | Report | | | X68K/PC98| Control / /_/_/_/_/_/_/_/ / /
`_========_'/| |---------------------------------------------|-------->/___ /_______/ ___/ /
|_o______o_|/ | Sendchar, Print, Debug, Command, ... | |_________________|/
+---------------------------------------------+ Keyboard



@@ -236,52 +219,17 @@ Debugging
--------
Use PJRC's `hid_listen` to see debug messages. You can use the tool for debug even if firmware use LUFA stack.

You can use xprintf() to display debug info on `hid_listen`, see `common/xprintf.h`.
You can use xprintf() to display debug info on `hid_listen`, see `tmk_core/common/xprintf.h`.



Files and Directories
-------------------
### Top
* common/ - common codes
* protocol/ - keyboard protocol support
* tmk_core/ - core library
* keyboard/ - keyboard projects
* converter/ - protocol converter projects
* doc/ - documents
* common.mk - Makefile for common
* protocol.mk - Makefile for protocol
* rules.mk - Makefile for build rules

### Common
* host.h
* host_driver.h
* keyboard.h
* command.h
* keymap.h
* action.h
* keycode.h
* matrix.h
* led.h
* mousekey.h
* report.h
* debug.h
* print.h
* bootloader.h
* sendchar.h
* timer.h
* util.h

### Keyboard Protocols
* lufa/ - LUFA USB stack
* pjrc/ - PJRC USB stack
* vusb/ - Objective Development V-USB
* iwrap/ - Bluetooth HID for Bluegiga iWRAP
* ps2.c - PS/2 protocol
* adb.c - Apple Desktop Bus protocol
* m0110.c - Macintosh 128K/512K/Plus keyboard protocol
* news.c - Sony NEWS keyboard protocol
* x68k.c - Sharp X68000 keyboard protocol
* serial_soft.c - Asynchronous Serial protocol implemented by software




+ 0
- 105
common/breathing_led.c View File

@@ -1,105 +0,0 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include "led.h"
#include "breathing_led.h"
#include "debug.h"

#define BREATHING_LED_TIMER_TOP F_CPU/256

static uint8_t breathing_led_duration = 0;

void breathing_led_init(void)
{
#ifdef BREATHING_LED_TIMER1
/* Timer1 setup */
/* CTC mode */
TCCR1B |= (1<<WGM12);
/* Clock selelct: clk/8 */
TCCR1B |= (1<<CS10);
/* Set TOP value */
uint8_t sreg = SREG;
cli();
OCR1AH = (BREATHING_LED_TIMER_TOP>>8)&0xff;
OCR1AL = BREATHING_LED_TIMER_TOP&0xff;
#else
/* Timer3 setup */
/* CTC mode */
TCCR3B |= (1<<WGM32);
/* Clock selelct: clk/8 */
TCCR3B |= (1<<CS30);
/* Set TOP value */
uint8_t sreg = SREG;
cli();
OCR3AH = (BREATHING_LED_TIMER_TOP>>8)&0xff;
OCR3AL = BREATHING_LED_TIMER_TOP&0xff;
#endif
SREG = sreg;
}

void breathing_led_enable(void)
{
/* Enable Compare Match Interrupt */
#ifdef BREATHING_LED_TIMER1
TIMSK1 |= (1<<OCIE1A);
dprintf("breathing led on: %u\n", TIMSK1 & (1<<OCIE1A));
#else
TIMSK3 |= (1<<OCIE3A);
dprintf("breathing led on: %u\n", TIMSK3 & (1<<OCIE3A));
#endif
}

void breathing_led_disable(void)
{
/* Disable Compare Match Interrupt */
#ifdef BREATHING_LED_TIMER1
TIMSK1 &= ~(1<<OCIE1A);
dprintf("breathing led off: %u\n", TIMSK1 & (1<<OCIE1A));
#else
TIMSK3 &= ~(1<<OCIE3A);
dprintf("breathing led off: %u\n", TIMSK3 & (1<<OCIE3A));
#endif
}

void breathing_led_toggle(void)
{
/* Disable Compare Match Interrupt */
#ifdef BREATHING_LED_TIMER1
TIMSK1 ^= (1<<OCIE1A);
dprintf("breathing led toggle: %u\n", TIMSK1 & (1<<OCIE1A));
#else
TIMSK3 ^= (1<<OCIE3A);
dprintf("breathing led toggle: %u\n", TIMSK3 & (1<<OCIE3A));
#endif
}

void breathing_led_set_duration(uint8_t dur)
{
breathing_led_duration = dur;
dprintf("breathing led set duration: %u\n", breathing_led_duration);
}

/* Breathing LED brighness(PWM On period) table
*
* http://www.wolframalpha.com/input/?i=Table%5Bfloor%28%28exp%28sin%28x%2F256*2*pi%2B3%2F2*pi%29%29-1%2Fe%29*%28256%2F%28e-1%2Fe%29%29%29%2C+%7Bx%2C0%2C255%2C1%7D%5D
* Table[floor((exp(sin(x/256*2*pi+3/2*pi))-1/e)*(256/(e-1/e))), {x,0,255,1}]
* (0..255).each {|x| print ((exp(sin(x/256.0*2*PI+3.0/2*PI))-1/E)*(256/(E-1/E))).to_i, ', ' }
*/
static const uint8_t breathing_table[256] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 29, 30, 32, 34, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 56, 58, 61, 63, 66, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98, 102, 105, 108, 112, 116, 119, 123, 126, 130, 134, 138, 142, 145, 149, 153, 157, 161, 165, 169, 173, 176, 180, 184, 188, 192, 195, 199, 203, 206, 210, 213, 216, 219, 223, 226, 228, 231, 234, 236, 239, 241, 243, 245, 247, 248, 250, 251, 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 254, 253, 252, 251, 250, 248, 247, 245, 243, 241, 239, 236, 234, 231, 228, 226, 223, 219, 216, 213, 210, 206, 203, 199, 195, 192, 188, 184, 180, 176, 173, 169, 165, 161, 157, 153, 149, 145, 142, 138, 134, 130, 126, 123, 119, 116, 112, 108, 105, 102, 98, 95, 92, 89, 86, 83, 80, 77, 74, 71, 68, 66, 63, 61, 58, 56, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 34, 32, 30, 29, 27, 26, 25, 23, 22, 21, 19, 18, 17, 16, 15, 14, 13, 12, 11, 11, 10, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

#ifdef BREATHING_LED_TIMER1
ISR(TIMER1_COMPA_vect)
#else
ISR(TIMER3_COMPA_vect)
#endif
{
static uint8_t index = 0;
static uint8_t step = 0;
step++;
if (step > breathing_led_duration) {
step = 0;
breathing_led_set_raw(pgm_read_byte(&breathing_table[index]));
index++;
}
}

+ 0
- 25
common/breathing_led.h View File

@@ -1,25 +0,0 @@
#ifndef BREATHING_LED_H
#define BREATHING_LED_H


#ifdef BREATHING_LED_ENABLE

void breathing_led_init(void);
void breathing_led_enable(void);
void breathing_led_disable(void);
void breathing_led_toggle(void);
void breathing_led_set_duration(uint8_t dur);
void breathing_led_set_raw(uint8_t raw);

#else

#define breathing_led_init()
#define breathing_led_enable()
#define breathing_led_disable()
#define breathing_led_toggle()
#define breathing_led_set_duration()
#define breathing_led_set_raw()

#endif

#endif

+ 0
- 111
common/keymap_in_eeprom.c View File

@@ -1,111 +0,0 @@
/*
Copyright 2013,2014 Kai Ryu <[email protected]>

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 <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "eeconfig.h"
#include "keymap_in_eeprom.h"
#include "matrix.h"
#include "debug.h"

#ifdef KEYMAP_IN_EEPROM_ENABLE

void keymap_in_eeprom_init(void) {
if (!check_keymap_in_eeprom()) {
write_keymap_to_eeprom();
}
}

void keymap_in_eeprom_disable(void) {
eeprom_write_word(EECONFIG_KEYMAP_CHECKSUM, eeprom_read_word(EECONFIG_KEYMAP_CHECKSUM) + 1);
}

bool check_keymap_in_eeprom(void) {
uint16_t checksum_in_eeprom = eeprom_read_word(EECONFIG_KEYMAP_CHECKSUM);
uint16_t checksum = EECONFIG_MAGIC_NUMBER;
for (uint16_t i = 0; i < KEYMAP_SIZE; i++) {
uint8_t byte = eeprom_read_byte((uint8_t *)EECONFIG_KEYMAP_FN_ACTIONS + i);
uint16_t word = (i & 1) ? byte << 8 : byte;
checksum += word;
}
#ifdef DEBUG
eeprom_write_word(EECONFIG_KEYMAP_DEBUG, checksum);
#endif
return (checksum_in_eeprom == checksum);
}

void write_keymap_to_eeprom(void) {
uint16_t checksum = EECONFIG_MAGIC_NUMBER;
const uint16_t *fn_actions = fn_actions_pointer();
const uint8_t *keymaps = keymaps_pointer();
// write fn_actions
if (fn_actions != NULL) {
uint16_t fn_actions_count_in_flash = fn_actions_count();
for (uint16_t i = 0; i < FN_ACTIONS_COUNT; i++) {
uint16_t fn_action = 0;
if (i < fn_actions_count_in_flash) {
fn_action = pgm_read_word(fn_actions + i);
}
eeconfig_write_keymap_fn_action(i, fn_action);
checksum += fn_action;
}
}
// write keymaps
if (keymaps != NULL) {
uint16_t keys_count_in_flash = keys_count();
for (uint16_t i = 0; i < KEYS_COUNT; i++) {
uint8_t keymap = 0;
if (i < keys_count_in_flash) {
keymap = pgm_read_byte(keymaps + i);
}
eeconfig_write_keymap_key_by_index(i, keymap);
uint16_t keymap_word = keymap;
if (i & 1) {
keymap_word = keymap << 8;
}
checksum += keymap_word;
}
}
// write checksum
eeprom_write_word(EECONFIG_KEYMAP_CHECKSUM, checksum);
}

uint16_t eeconfig_read_keymap_fn_action(uint8_t index) {
return eeprom_read_word(EECONFIG_KEYMAP_FN_ACTIONS + index);
}

void eeconfig_write_keymap_fn_action(uint8_t index, uint16_t fn_action) {
return eeprom_write_word(EECONFIG_KEYMAP_FN_ACTIONS + index, fn_action);
}

uint8_t eeconfig_read_keymap_key(uint8_t layer, uint8_t row, uint8_t col) {
return eeprom_read_byte(EECONFIG_KEYMAP_KEYMAPS + KEY_OFFSET(layer, row, col));
}

void eeconfig_write_keymap_key(uint8_t layer, uint8_t row, uint8_t col, uint8_t key) {
return eeprom_write_byte(EECONFIG_KEYMAP_KEYMAPS + KEY_OFFSET(layer, row, col), key);
}

uint8_t eeconfig_read_keymap_key_by_index(uint16_t index) {
return eeprom_read_byte(EECONFIG_KEYMAP_KEYMAPS + index);
}

void eeconfig_write_keymap_key_by_index(uint16_t index, uint8_t key) {
return eeprom_write_byte(EECONFIG_KEYMAP_KEYMAPS + index, key);
}

#endif

+ 0
- 73
common/keymap_in_eeprom.h View File

@@ -1,73 +0,0 @@
/*
Copyright 2013,2014 Kai Ryu <[email protected]>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef KEYMAP_IN_EEPROM_H
#define KEYMAP_IN_EEPROM_H

#ifdef KEYMAP_IN_EEPROM_ENABLE

#include <stdint.h>
#include <stdbool.h>

#ifndef EECONFIG_KEYMAP_IN_EEPROM
#define EECONFIG_KEYMAP_IN_EEPROM 0x10
#endif
#ifndef FN_ACTIONS_COUNT
#define FN_ACTIONS_COUNT 32
#endif
#ifndef KEYMAPS_COUNT
#define KEYMAPS_COUNT 1
#endif
#ifndef MATRIX_SIZE
#define MATRIX_SIZE (matrix_rows() * matrix_cols())
#endif
#define KEYS_COUNT (KEYMAPS_COUNT * MATRIX_SIZE)

typedef struct {
uint16_t checksum;
uint16_t fn_actions[FN_ACTIONS_COUNT];
uint8_t keymaps[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS];
} keymap_in_eeprom_t;

#define EECONFIG_KEYMAP_CHECKSUM (uint16_t *)(EECONFIG_KEYMAP_IN_EEPROM)
#define EECONFIG_KEYMAP_FN_ACTIONS (uint16_t *)(EECONFIG_KEYMAP_CHECKSUM + 1)
#define EECONFIG_KEYMAP_KEYMAPS (uint8_t *)(EECONFIG_KEYMAP_FN_ACTIONS + FN_ACTIONS_COUNT)
#define EECONFIG_KEYMAP_DEBUG (uint16_t *)(EECONFIG_KEYMAP_CHECKSUM - 1)

#define KEYMAP_SIZE (sizeof(uint16_t) * FN_ACTIONS_COUNT + sizeof(uint8_t) * KEYS_COUNT)
#define KEYMAP_WORD_SIZE ((KEYMAP_SIZE + 1) / 2)
#define KEY_OFFSET(layer, row, col) (layer * matrix_rows() * matrix_cols() + row * matrix_cols() + col)

void keymap_in_eeprom_init(void);
void keymap_in_eeprom_disable(void);
bool check_keymap_in_eeprom(void);
void write_keymap_to_eeprom(void);
uint8_t eeconfig_read_keymap_key(uint8_t layer, uint8_t row, uint8_t col);
void eeconfig_write_keymap_key(uint8_t layer, uint8_t row, uint8_t col, uint8_t key);
uint8_t eeconfig_read_keymap_key_by_index(uint16_t index);
void eeconfig_write_keymap_key_by_index(uint16_t index, uint8_t key);
uint16_t eeconfig_read_keymap_fn_action(uint8_t index);
void eeconfig_write_keymap_fn_action(uint8_t index, uint16_t fn_action);

const uint8_t* keymaps_pointer(void);
const uint16_t* fn_actions_pointer(void);
uint16_t keys_count(void);
uint16_t fn_actions_count(void);

#endif

#endif

+ 0
- 91
common/led_matrix.c View File

@@ -1,91 +0,0 @@
/*
Copyright 2013,2014 Kai Ryu <[email protected]>

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 <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "led_matrix.h"

#define LED_MATRIX_TIMER_TOP F_CPU/(256*64)/LED_MATRIX_ROWS

static led_matrix_element_t led_matrix[LED_MATRIX_ROWS][LED_MATRIX_COLS];

void led_matrix_init(void)
{
led_matrix_unselect_rows();
led_matrix_write_cols(0);
/* Timer1 setup */
/* CTC mode */
TCCR1B |= (1<<WGM12);
/* Clock selelct: clk/1 */
TCCR1B |= (1<<CS10);
/* Set TOP value */
uint8_t sreg = SREG;
cli();
OCR1AH = (LED_MATRIX_TIMER_TOP >> 8) & 0xFF;
OCR1AL = LED_MATRIX_TIMER_TOP & 0xFF;
SREG = sreg;
}

void led_matrix_enable(void)
{
/* Enable Compare Match Interrupt */
TIMSK1 |= _BV(OCIE1A);
}

void led_matrix_disable(void)
{
/* Disable Compare Match Interrupt */
TIMSK1 &= ~_BV(OCIE1A);
}

inline
led_matrix_row_t led_matrix_make_cols(uint8_t row, uint8_t pwm)
{
led_matrix_row_t cols = 0;
for (uint8_t i = 0; i < LED_MATRIX_COLS; i++) {
cols |= ((led_matrix[row][i].value < pwm ? 1 : 0) << i);
}
return cols;
}

inline
void led_matrix_set_value(uint8_t row, uint8_t col, uint8_t value)
{
led_matrix[row][col].value = value;
}

inline
void led_matrix_set_delta(uint8_t row, uint8_t col, int8_t delta)
{
led_matrix[row][col].delta = delta;
}

ISR(TIMER1_COMPA_vect)
{
static uint8_t row = 0;
static uint8_t pwm = 0;

row = (row + 1) % LED_MATRIX_ROWS;
pwm++;

led_matrix_select_row(row);
_delay_us(10);
led_matrix_write_cols(led_matrix_make_cols(row, pwm));
_delay_us(10);
led_matrix_unselect_rows();
}

+ 0
- 65
common/led_matrix.h View File

@@ -1,65 +0,0 @@
/*
Copyright 2013,2014 Kai Ryu <[email protected]>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef LED_MATRIX_H
#define LED_MATRIX_H

#include <stdint.h>
#include <stdbool.h>

#if (LED_MATRIX_COLS <= 8)
typedef uint8_t led_matrix_row_t;
#elif (LED_MATRIX_COLS <= 16)
typedef uint16_t led_matrix_row_t;
#elif (LED_MATRIX_COLS <= 32)
typedef uint32_t led_matrix_row_t;
#else
#error "LED_MATRIX_COLS: invalid value"
#endif

typedef struct {
union {
int8_t delta;
struct {
bool direction:1;
};
};
uint8_t value;
} led_matrix_element_t;

#ifdef LED_MATRIX_ENABLE
void led_matrix_init(void);
void led_matrix_enable(void);
void led_matrix_disable(void);
void led_matrix_init_cols(void);
led_matrix_row_t led_matrix_make_cols(uint8_t row, uint8_t pwm);
void led_matrix_set_value(uint8_t row, uint8_t col, uint8_t value);
void led_matrix_set_delta(uint8_t row, uint8_t col, int8_t delta);
extern void led_matrix_write_cols(led_matrix_row_t cols);
extern void led_matrix_unselect_rows(void);
extern void led_matrix_select_row(uint8_t row);
#else
#define led_matrix_init()
#define led_matrix_enable()
#define led_matrix_disable()
#define led_matrix_init_cols()
#define led_matrix_write_cols()
#define led_matrix_unselect_rows()
#define led_matrix_select_row()
#endif

#endif

+ 0
- 135
common/ledmap.c View File

@@ -1,135 +0,0 @@
#include "ledmap.h"
#include "ledmap_in_eeprom.h"
#include "led.h"
#include "softpwm_led.h"
#include "action_layer.h"
#include "debug.h"

static led_state_t led_state_last = 0;
static led_binding_t usb_led_binding = 0;
static led_binding_t default_layer_binding = 0;
static led_binding_t layer_binding = 0;
static led_binding_t backlight_binding = 0;
static led_binding_t reverse_binding = 0;

static void update_led_state(led_state_t state, uint8_t force);

void ledmap_init(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
ledmap_t ledmap = ledmap_get_code(i);
if (ledmap.reverse) {
LED_BIT_SET(reverse_binding, i);
}
if (ledmap.backlight) {
LED_BIT_SET(backlight_binding, i);
}
switch (ledmap.binding) {
case LEDMAP_BINDING_DEFAULT_LAYER:
LED_BIT_SET(default_layer_binding, i);
break;
case LEDMAP_BINDING_LAYER:
LED_BIT_SET(layer_binding, i);
break;
case LEDMAP_BINDING_USB_LED:
LED_BIT_SET(usb_led_binding, i);
break;
}
}
ledmap_led_init();
update_led_state(0, 1);
}

void led_set(uint8_t usb_led)
{
if (usb_led_binding) {
led_state_t led_state = led_state_last;
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (usb_led_binding & LED_BIT(i)) {
uint8_t param = ledmap_get_code(i).param;
(usb_led & (1 << param)) ? LED_BIT_SET(led_state, i) : LED_BIT_CLEAR(led_state, i);
}
}
update_led_state(led_state, 0);
}
}

#ifndef NO_ACTION_LAYER
void default_layer_state_change(uint32_t state)
{
if (default_layer_binding) {
led_state_t led_state = led_state_last;
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (default_layer_binding & LED_BIT(i)) {
uint8_t param = ledmap_get_code(i).param;
(state & (1UL << param)) ? LED_BIT_SET(led_state, i) : LED_BIT_CLEAR(led_state, i);
}
}
update_led_state(led_state, 0);
}
}

void layer_state_change(uint32_t state)
{
if (layer_binding) {
led_state_t led_state = led_state_last;
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (layer_binding & LED_BIT(i)) {
uint8_t param = ledmap_get_code(i).param;
(state & (1UL << param)) ? LED_BIT_SET(led_state, i) : LED_BIT_CLEAR(led_state, i);
}
}
update_led_state(led_state, 0);
}
}
#endif

#ifdef SOFTPWM_LED_ENABLE
void softpwm_led_init(void)
{
}

void softpwm_led_on(uint8_t index)
{
if (backlight_binding & LED_BIT(index)) {
ledmap_led_on(index);
}
}

void softpwm_led_off(uint8_t index)
{
if (backlight_binding & LED_BIT(index)) {
ledmap_led_off(index);
}
}

void softpwm_led_state_change(uint8_t state)
{
if (state) {
}
else {
update_led_state(led_state_last, 1);
}
}
#endif

void update_led_state(led_state_t state, uint8_t force)
{
led_state_t diff = led_state_last ^ state;
if (force || diff) {
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (softpwm_led_get_state() && (backlight_binding & LED_BIT(i))) {
continue;
}
if (force || diff & LED_BIT(i)) {
if ((state ^ reverse_binding) & LED_BIT(i)) {
ledmap_led_on(i);
}
else {
ledmap_led_off(i);
}
}
}
led_state_last = state;
}
}

+ 0
- 59
common/ledmap.h View File

@@ -1,59 +0,0 @@
#ifndef LEDMAP_H
#define LEDMAP_H

#include "stdint.h"
#include "stdbool.h"
#include "led.h"

typedef led_pack_t led_state_t;
typedef led_pack_t led_binding_t;

enum ledmap_binding {
LEDMAP_BINDING_NO = 0,
LEDMAP_BINDING_DEFAULT_LAYER,
LEDMAP_BINDING_LAYER,
LEDMAP_BINDING_USB_LED
};

enum ledmap_usb_led {
LEDMAP_USB_LED_NUM_LOCK = 0,
LEDMAP_USB_LED_CAPS_LOCK,
LEDMAP_USB_LED_SCROLL_LOCK,
LEDMAP_USB_LED_COMPOSE,
LEDMAP_USB_LED_KANA,
};

typedef union {
uint16_t code;
struct {
uint8_t param: 8;
uint8_t binding: 4;
bool reverse: 1;
bool backlight: 1;
uint8_t reserved: 2;
};
} ledmap_t;

#define LEDMAP_DEFAULT_LAYER(layer) (LEDMAP_BINDING_DEFAULT_LAYER<<8 | layer)
#define LEDMAP_LAYER(layer) (LEDMAP_BINDING_LAYER<<8 | layer )
#define LEDMAP_NUM_LOCK (LEDMAP_BINDING_USB_LED<<8 | LEDMAP_USB_LED_NUM_LOCK)
#define LEDMAP_CAPS_LOCK (LEDMAP_BINDING_USB_LED<<8 | LEDMAP_USB_LED_CAPS_LOCK)
#define LEDMAP_SCROLL_LOCK (LEDMAP_BINDING_USB_LED<<8 | LEDMAP_USB_LED_SCROLL_LOCK)
#define LEDMAP_REVERSE (1<<12)
#define LEDMAP_BACKLIGHT (1<<13)

void ledmap_init(void);

#ifdef LEDMAP_ENABLE
ledmap_t ledmap_get_code(uint8_t index);
void ledmap_led_init(void);
void ledmap_led_on(uint8_t index);
void ledmap_led_off(uint8_t index);
#else
#define ledmap_get_code()
#define ledmap_led_init()
#define ledmap_led_on()
#define ledmap_led_off()
#endif

#endif

+ 0
- 35
common/ledmap_in_eeprom.c View File

@@ -1,35 +0,0 @@
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "ledmap_in_eeprom.h"

#ifdef LEDMAP_IN_EEPROM_ENABLE

#undef ledmap_get_code

static ledmap_t ledmap[LED_COUNT];

void ledmap_in_eeprom_init(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
ledmap[i].code = eeprom_read_word(EECONFIG_LEDMAP + i);
/* ledmap[i].code = LEDMAP_UNCONFIGURED; */
if (ledmap[i].code == LEDMAP_UNCONFIGURED) {
ledmap[i] = ledmap_get_code(i);
eeprom_write_word(EECONFIG_LEDMAP + i, ledmap[i].code);
}
}
}

void write_ledmap_to_eeprom(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
eeprom_write_word(EECONFIG_LEDMAP + i, ledmap_get_code(i).code);
}
}

ledmap_t ledmap_in_eeprom_get_code(uint8_t i)
{
return ledmap[i];
}

#endif

+ 0
- 26
common/ledmap_in_eeprom.h View File

@@ -1,26 +0,0 @@
#ifndef LEDMAP_IN_EEPROM_H
#define LEDMAP_IN_EEPROM_H

#include "ledmap.h"

#ifndef EECONFIG_LEDMAP_IN_EEPROM
#define EECONFIG_LEDMAP_IN_EEPROM 7
#endif

#define EECONFIG_LEDMAP (uint16_t*)EECONFIG_LEDMAP_IN_EEPROM
#define LEDMAP_SIZE (sizeof(uint16_t) * LED_COUNT)

#define LEDMAP_UNCONFIGURED 0xFFFF

#ifdef LEDMAP_IN_EEPROM_ENABLE
#define ledmap_get_code ledmap_in_eeprom_get_code
void ledmap_in_eeprom_init(void);
void write_ledmap_to_eeprom(void);
ledmap_t ledmap_in_eeprom_get_code(uint8_t index);
#else
#define ledmap_in_eeprom_init()
#define write_ledmap_to_eeprom()
#define ledmap_in_eeprom_get_code()
#endif

#endif

+ 0
- 419
common/softpwm_led.c View File

@@ -1,419 +0,0 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "led.h"
#include "softpwm_led.h"
#include "debug.h"

#define SOFTPWM_LED_FREQ 64
#define SOFTPWM_LED_TIMER_TOP F_CPU / (256 * SOFTPWM_LED_FREQ)

static uint8_t softpwm_led_state = 0;
static uint8_t softpwm_led_ocr[LED_COUNT] = {0};
static uint8_t softpwm_led_ocr_buff[LED_COUNT] = {0};

#ifdef FADING_LED_ENABLE
static void fading_led_proc(void);
#else
#define fading_led_proc()
#endif

#ifdef BREATHING_LED_ENABLE
static void breathing_led_proc(void);
#else
#define fading_led_proc()
#endif

void softpwm_init(void)
{
#ifdef SOFTPWM_LED_TIMER3
/* Timer3 setup */
/* CTC mode */
TCCR3B |= (1<<WGM32);
/* Clock selelct: clk/8 */
TCCR3B |= (1<<CS30);
/* Set TOP value */
uint8_t sreg = SREG;
cli();
OCR3AH = (SOFTPWM_LED_TIMER_TOP >> 8) & 0xff;
OCR3AL = SOFTPWM_LED_TIMER_TOP & 0xff;
SREG = sreg;
#else
/* Timer1 setup */
/* CTC mode */
TCCR1B |= (1<<WGM12);
/* Clock selelct: clk/8 */
TCCR1B |= (1<<CS10);
/* Set TOP value */
uint8_t sreg = SREG;
cli();
OCR1AH = (SOFTPWM_LED_TIMER_TOP >> 8) & 0xff;
OCR1AL = SOFTPWM_LED_TIMER_TOP & 0xff;
SREG = sreg;
#endif
softpwm_led_init();
}

void softpwm_led_enable(void)
{
/* Enable Compare Match Interrupt */
#ifdef SOFTPWM_LED_TIMER3
TIMSK3 |= (1<<OCIE3A);
//dprintf("softpwm led on: %u\n", TIMSK3 & (1<<OCIE3A));
#else
TIMSK1 |= (1<<OCIE1A);
//dprintf("softpwm led on: %u\n", TIMSK1 & (1<<OCIE1A));
#endif
softpwm_led_state = 1;
#ifdef LEDMAP_ENABLE
softpwm_led_state_change(softpwm_led_state);
#endif
}

void softpwm_led_disable(void)
{
/* Disable Compare Match Interrupt */
#ifdef SOFTPWM_LED_TIMER3
TIMSK3 &= ~(1<<OCIE3A);
//dprintf("softpwm led off: %u\n", TIMSK3 & (1<<OCIE3A));
#else
TIMSK1 &= ~(1<<OCIE1A);
//dprintf("softpwm led off: %u\n", TIMSK1 & (1<<OCIE1A));
#endif
softpwm_led_state = 0;
for (uint8_t i = 0; i < LED_COUNT; i++) {
softpwm_led_off(i);
}
#ifdef LEDMAP_ENABLE
softpwm_led_state_change(softpwm_led_state);
#endif
}

void softpwm_led_toggle(void)
{
if (softpwm_led_state) {
softpwm_led_disable();
}
else {
softpwm_led_enable();
}
}

void softpwm_led_set(uint8_t index, uint8_t val)
{
softpwm_led_ocr_buff[index] = val;
}

void softpwm_led_set_all(uint8_t val)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
softpwm_led_ocr_buff[i] = val;
}
}

void softpwm_led_increase(uint8_t index, uint8_t offset)
{
if (softpwm_led_ocr_buff[index] > 0xFF - offset) {
softpwm_led_ocr_buff[index] = 0xFF;
}
else {
softpwm_led_ocr_buff[index] += offset;
}
}

void softpwm_led_increase_all(uint8_t offset)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
softpwm_led_increase(i, offset);
}
}

void softpwm_led_decrease(uint8_t index, uint8_t offset)
{
if (softpwm_led_ocr_buff[index] < offset) {
softpwm_led_ocr_buff[index] = 0;
}
else {
softpwm_led_ocr_buff[index] -= offset;
}
}

void softpwm_led_decrease_all(uint8_t offset)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
softpwm_led_decrease(i, offset);
}
}

inline uint8_t softpwm_led_get_state(void)
{
return softpwm_led_state;
}

#ifdef FADING_LED_ENABLE

static led_pack_t fading_led_state = 0;
static led_pack_t fading_led_direction = 0;
static uint8_t fading_led_duration = 0;
static uint8_t fading_led_delay[LED_COUNT] = {0};

void fading_led_enable(uint8_t index)
{
LED_BIT_SET(fading_led_state, index);
}

void fading_led_enable_all(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
LED_BIT_SET(fading_led_state, i);
}
}

void fading_led_disable(uint8_t index)
{
LED_BIT_CLEAR(fading_led_state, index);
}

void fading_led_disable_all(void)
{
fading_led_state = 0;
}

void fading_led_toggle(uint8_t index)
{
LED_BIT_XOR(fading_led_state, index);
}

void fading_led_toggle_all(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
LED_BIT_XOR(fading_led_state, i);
}
}

void fading_led_set_direction(uint8_t index, uint8_t dir)
{
if (dir) {
LED_BIT_SET(fading_led_direction, index);
}
else {
LED_BIT_CLEAR(fading_led_direction, index);
}
}

void fading_led_set_direction_all(uint8_t dir)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
fading_led_set_direction(i, dir);
}
}

void fading_led_set_duration(uint8_t dur)
{
fading_led_duration = dur;
}

void fading_led_set_delay(uint8_t index, uint8_t delay)
{
fading_led_delay[index] = delay;
}

void fading_led_set_delay_all(uint8_t delay)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
fading_led_delay[i] = delay;
}
}

#endif

#ifdef BREATHING_LED_ENABLE

/* Breathing LED brighness(PWM On period) table
*
* http://www.wolframalpha.com/input/?i=Table%5Bfloor%28%28exp%28sin%28x%2F256*2*pi%2B3%2F2*pi%29%29-1%2Fe%29*%28256%2F%28e-1%2Fe%29%29%29%2C+%7Bx%2C0%2C255%2C1%7D%5D
* Table[floor((exp(sin(x/256*2*pi+3/2*pi))-1/e)*(256/(e-1/e))), {x,0,255,1}]
* (0..255).each {|x| print ((exp(sin(x/256.0*2*PI+3.0/2*PI))-1/E)*(256/(E-1/E))).to_i, ', ' }
*/
static const uint8_t breathing_table[128] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 29, 30, 32, 34, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 56, 58, 61, 63, 66, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98, 102, 105, 108, 112, 116, 119, 123, 126, 130, 134, 138, 142, 145, 149, 153, 157, 161, 165, 169, 173, 176, 180, 184, 188, 192, 195, 199, 203, 206, 210, 213, 216, 219, 223, 226, 228, 231, 234, 236, 239, 241, 243, 245, 247, 248, 250, 251, 252, 253, 254, 255, 255, 255
};

static led_pack_t breathing_led_state = 0;
static led_pack_t breathing_led_once = 0;
static uint8_t breathing_led_duration = 0;
static uint8_t breathing_led_index[LED_COUNT] = {0};
static led_pack_t breathing_led_direction = 0;

void breathing_led_enable(uint8_t index)
{
LED_BIT_SET(breathing_led_state, index);
}

void breathing_led_enable_once(uint8_t index)
{
LED_BIT_SET(breathing_led_state, index);
LED_BIT_SET(breathing_led_once, index);
}

void breathing_led_enable_all(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
LED_BIT_SET(breathing_led_state, i);
}
}

void breathing_led_disable(uint8_t index)
{
LED_BIT_CLEAR(breathing_led_state, index);
}

void breathing_led_disable_all(void)
{
breathing_led_state = 0;
}

void breathing_led_toggle(uint8_t index)
{
LED_BIT_XOR(breathing_led_state, index);
}

void breathing_led_toggle_all(void)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
LED_BIT_XOR(breathing_led_state, i);
}
}

void breathing_led_set_duration(uint8_t dur)
{
breathing_led_duration = dur;
}

void breathing_led_set_index(uint8_t index, uint8_t value)
{
if (value & 0x80) {
LED_BIT_SET(breathing_led_direction, index);
}
else {
LED_BIT_CLEAR(breathing_led_direction, index);
}
breathing_led_index[index] = value & 0x7F;
}

void breathing_led_set_index_all(uint8_t value)
{
for (uint8_t i = 0; i < LED_COUNT; i++) {
breathing_led_set_index(i, value);
}
}

#endif

#ifdef SOFTPWM_LED_TIMER3
ISR(TIMER3_COMPA_vect)
#else
ISR(TIMER1_COMPA_vect)
#endif
{
static uint8_t pwm = 0;
pwm++;
for (uint8_t i = 0; i < LED_COUNT; i++) {
// LED on
if (pwm == 0) {
if (softpwm_led_ocr[i]) softpwm_led_on(i);
softpwm_led_ocr[i] = softpwm_led_ocr_buff[i];
}
// LED off
if (pwm == softpwm_led_ocr[i]) {
softpwm_led_off(i);
}
}

#if defined(FADING_LED_ENABLE) || defined(BREATHING_LED_ENABLE) || defined(CUSTOM_LED_ENABLE)
static uint8_t counter = 0;
if (++counter >= SOFTPWM_LED_FREQ) {
counter = 0;
#ifdef FADING_LED_ENABLE
fading_led_proc();
#endif
#ifdef BREATHING_LED_ENABLE
breathing_led_proc();
#endif
#if CUSTOM_LED_ENABLE
softpwm_led_custom();
#endif
}
#endif
}

#ifdef FADING_LED_ENABLE
void fading_led_proc(void)
{
static uint8_t step = 0;
if (fading_led_state) {
if (++step > fading_led_duration) {
step = 0;
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (fading_led_state & LED_BIT(i)) {
if (fading_led_delay[i]) {
fading_led_delay[i]--;
}
else {
if (fading_led_direction & LED_BIT(i)) {
softpwm_led_decrease(i, 1);
}
else {
softpwm_led_increase(i, 1);
}
}
}
}
#ifdef CUSTOM_LED_ENABLE
fading_led_custom(softpwm_led_ocr);
#endif
}
}
}
#endif

#ifdef BREATHING_LED_ENABLE
void breathing_led_proc(void)
{
static uint8_t step = 0;
if (breathing_led_state) {
if (++step > breathing_led_duration) {
step = 0;
for (uint8_t i = 0; i < LED_COUNT; i++) {
if (breathing_led_state & LED_BIT(i)) {
softpwm_led_ocr_buff[i] = pgm_read_byte(&breathing_table[breathing_led_index[i]]);
if (breathing_led_direction & LED_BIT(i)) {
if (breathing_led_index[i] == 0) {
LED_BIT_CLEAR(breathing_led_direction, i);
if (breathing_led_once & LED_BIT(i)) {
LED_BIT_CLEAR(breathing_led_state, i);
LED_BIT_CLEAR(breathing_led_once, i);
}
}
else {
breathing_led_index[i]--;
}

}
else {
if (breathing_led_index[i] == 127) {
LED_BIT_SET(breathing_led_direction, i);
}
else {
breathing_led_index[i]++;
}
}
}
}
#ifdef CUSTOM_LED_ENABLE
breathing_led_custom(softpwm_led_ocr);
#endif
}
}
}
#endif

+ 0
- 113
common/softpwm_led.h View File

@@ -1,113 +0,0 @@
#ifndef SOFTPWM_LED_H
#define SOFTPWM_LED_H

#include "stdint.h"
#include "led.h"


#ifdef SOFTPWM_LED_ENABLE

void softpwm_init(void);
void softpwm_led_init(void);
void softpwm_led_enable(void);
void softpwm_led_disable(void);
void softpwm_led_toggle(void);
void softpwm_led_set(uint8_t index, uint8_t val);
void softpwm_led_set_all(uint8_t val);
void softpwm_led_increase(uint8_t index, uint8_t offset);
void softpwm_led_increase_all(uint8_t offset);
void softpwm_led_decrease(uint8_t index, uint8_t offset);
void softpwm_led_decrease_all(uint8_t offset);
void softpwm_led_on(uint8_t index);
void softpwm_led_off(uint8_t index);
uint8_t softpwm_led_get_state(void);
void softpwm_led_state_change(uint8_t state);

enum {
FADING_LED_FADE_IN = 0,
FADING_LED_FADE_OUT
};
#ifdef FADING_LED_ENABLE
void fading_led_enable(uint8_t index);
void fading_led_enable_all(void);
void fading_led_disable(uint8_t index);
void fading_led_disable_all(void);
void fading_led_toggle(uint8_t index);
void fading_led_toggle_all(void);
void fading_led_set_direction(uint8_t index, uint8_t dir);
void fading_led_set_direction_all(uint8_t dir);
void fading_led_set_duration(uint8_t dur);
void fading_led_set_delay(uint8_t index, uint8_t delay);
void fading_led_set_delay_all(uint8_t delay);
#else
#define fading_led_enable()
#define fading_led_enable_all()
#define fading_led_disable()
#define fading_led_disable_all()
#define fading_led_toggle()
#define fading_led_toggle_all()
#define fading_led_set_direction()
#define fading_led_set_direction_all()
#define fading_led_set_duration()
#define fading_led_set_delay()
#define fading_led_set_delay_all()
#endif

#ifdef BREATHING_LED_ENABLE
#define breathing_led_init()
void breathing_led_enable(uint8_t index);
void breathing_led_enable_once(uint8_t index);
void breathing_led_enable_all(void);
void breathing_led_disable(uint8_t index);
void breathing_led_disable_all(void);
void breathing_led_toggle(uint8_t index);
void breathing_led_toggle_all(void);
void breathing_led_set_duration(uint8_t dur);
void breathing_led_set_index(uint8_t index, uint8_t value);
void breathing_led_set_index_all(uint8_t value);
void breathing_led_set_delay(uint8_t index, uint8_t delay);
void breathing_led_set_delay_all(uint8_t delay);
#else
#define breathing_led_init()
#define breathing_led_enable()
#define breathing_led_enable_all()
#define breathing_led_disable()
#define breathing_led_disable_all()
#define breathing_led_toggle()
#define breathing_led_toggle_all()
#define breathing_led_set_duration()
#define breathing_led_set_index()
#define breathing_led_set_index_all()
#define breathing_led_set_delay()
#define breathing_led_set_delay_all()
#endif

#ifdef CUSTOM_LED_ENABLE
void softpwm_led_custom(void);
void fading_led_custom(uint8_t *value);
void breathing_led_custom(uint8_t *value);
#else
#define custom_led_proc()
#endif

#else

#define softpwm_init()
#define softpwm_led_init()
#define softpwm_led_enable()
#define softpwm_led_disable()
#define softpwm_led_toggle()
#define softpwm_led_set()
#define softpwm_led_set_all()
#define softpwm_led_increase()
#define softpwm_led_increase_all()
#define softpwm_led_decrease()
#define softpwm_led_decrease_all()
#define softpwm_led_on()
#define softpwm_led_off()
#define softpwm_led_get_state()
#define softpwm_led_state_change()

#endif

#endif

+ 10
- 6
converter/adb_usb/Makefile View File

@@ -42,7 +42,7 @@
TARGET = adb_usb_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -122,6 +122,10 @@ 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
ADB_MOUSE_ENABLE = yes

# ADB Mice need acceleration for todays much bigger screens.
OPT_DEFS += -DADB_MOUSE_MAXACC=8


# Optimize size but this may cause error "relocation truncated to fit"
@@ -129,9 +133,9 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 10
- 6
converter/adb_usb/Makefile.pjrc View File

@@ -2,7 +2,7 @@
TARGET = adb_usb_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -57,13 +57,17 @@ CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE = yes # USB Nkey Rollover(+500)
ADB_MOUSE_ENABLE = yes

# ADB Mice need acceleration for todays much bigger screens.
OPT_DEFS += -DADB_MOUSE_MAXACC=8


# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 56
- 49
converter/adb_usb/README.md View File

@@ -7,70 +7,69 @@ But binary size is about 10KB or more it doesn't fit into 8K flash like ATMega8U
Discuss: http://geekhack.org/showwiki.php?title=Island:14290



README FIRST
------------
https://github.com/tmk/tmk_keyboard
https://github.com/tmk/tmk_keyboard/tree/master/converter/adb_usb

Also check these when you are in trouble.

https://github.com/tmk/tmk_keyboard/wiki
https://github.com/tmk/tmk_keyboard/labels/NOTE


Wiring
------
0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port PD0.
This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable.
The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.
1. Define following macros for ADB connection in config.h if you use other than port PD0.
ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
2. make
3. program Teensy
Connect ADB pins to controller just by 3 lines(Vcc, GND, Data). By default Data line uses port PD0.

ADB female socket from the front:

,--_--.
/ o4 3o \ 1: DATA
| o2 1o | 2: Power SW
- === - 3: VCC
`-___-' 4: GND

This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable. The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.(It is almost must!)
https://github.com/tmk/tmk_keyboard/wiki/FAQ#pull-up-resistor

Pull-up resister:

Keyboard Conveter
,------.
5V------+------|VCC |
| | |
[R] | |
| | |
Signal--+------|PD0 |
| |
GND------------|GND |
`------'
R: 1K Ohm resistor


Define following macros for ADB connection in config.h if you use other than port PD0.

ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT


Build
-----
Just make
See doc/build.md. In short,

$ make clean
$ make

If your keyboard is ISO layout
You can select keymap(ansi is default) like this:

$ make KEYMAP=iso


LOCKING CAPSLOCK
----------------
Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.

Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.
http://www.youtube.com/watch?v=9wqnt2mGJ2Y
$ make KEYMAP=[ansi|iso|hasu]


Keymap
------
You can change a keymap by editing code of keymap.c like following.
This is a keymap for AEK, however, also used for other keyboards.
How to define the keymap is probably obvious. You can find key symbols in keycode.h.
If you want to define some keymaps than just one, see hhkb/keymap.c and
macway/keymap.c as examples. Keymap(layer) switching may needs a bit of
effort at this time.

/* Default Layer: plain keymap
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
* `---' `---------------' `---------------' `---------------' `-----------' `---'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
* |-----------------------------------------------------------| |-----------| |---------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -|
* |-----------------------------------------------------------| `-----------' |---------------|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
* |-----------------------------------------------------------| ,---. |---------------|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
* |Ctrl |Alt |Gui | Space |Gui |Alt |Ctrl | |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, PWR,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
LCAP,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, RSFT, UP, P1, P2, P3,
LCTL,LGUI,LALT, SPC, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
You can change a keymap by editing code of keymap_[ansi|iso|hasu|yours].c.
How to define the keymap is probably obvious. You can find key symbols in common/keycode.h. And see doc/keymap.md for more detail.


Magic command
@@ -78,6 +77,14 @@ Magic command
To get help press `h` holding Magic key. Magic key is `Power key`.


Locking CapsLock
----------------
Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.
https://github.com/tmk/tmk_keyboard/blob/master/README.md#mechanical-locking-support

Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.


Notes
-----
Not-extended ADB keyboards have no discrimination between right modifier and left one,

+ 1
- 1
converter/adb_usb/keymap_ansi.c View File

@@ -3,7 +3,7 @@

const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KEYMAP_EXT_ANSI(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, NO,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,

+ 2
- 2
converter/adb_usb/keymap_hasu.c View File

@@ -22,7 +22,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,FN0, DEL, END, PGDN, P7, P8, P9, PMNS,
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
LCAP,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, RSFT, UP, P1, P2, P3,
LCTL,LGUI,LALT, SPC, RGUI,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
@@ -47,7 +47,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,BTN1,BTN2,BTN3,
TAB, Q, W, E, R, T, Y, U, PSCR,SLCK,PAUS,UP, INS, FN0, DEL, END, PGDN, WH_D,MS_U,WH_U,WH_D,
CAPS,VOLD,VOLU,MUTE,F, G, H, J, HOME,PGUP,LEFT,RGHT, ENT, MS_L,MS_D,MS_R,WH_U,
LCAP,VOLD,VOLU,MUTE,F, G, H, J, HOME,PGUP,LEFT,RGHT, ENT, MS_L,MS_D,MS_R,WH_U,
LSFT,Z, X, C, V, B, N, M, END, PGDN,DOWN, RSFT, PGUP, WH_L,MS_D,WH_R,
LCTL,LGUI,LALT, SPC, RGUI,RCTL, HOME,PGDN,END, BTN1, BTN2,BTN3
),

+ 1
- 1
converter/adb_usb/keymap_iso.c View File

@@ -3,7 +3,7 @@

const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KEYMAP_EXT_ISO(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, NO,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PMNS,
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, PPLS,

+ 61
- 0
converter/adb_usb/matrix.c View File

@@ -27,6 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "adb.h"
#include "matrix.h"
#include "report.h"
#include "host.h"


#if (MATRIX_COLS > 16)
@@ -38,6 +40,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.


static bool is_modified = false;
static report_mouse_t mouse_report = {};

// matrix state buffer(1:on, 0:off)
#if (MATRIX_COLS <= 8)
@@ -86,6 +89,64 @@ void matrix_init(void)
return;
}

#ifdef ADB_MOUSE_ENABLE

#ifdef MAX
#undef MAX
#endif
#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))

void adb_mouse_task(void)
{
uint16_t codes;
int16_t x, y;
static int8_t mouseacc;
_delay_ms(12); // delay for preventing overload of poor ADB keyboard controller
codes = adb_host_mouse_recv();
// If nothing received reset mouse acceleration, and quit.
if (!codes) {
mouseacc = 1;
return;
};
// Bit sixteen is button.
if (~codes & (1 << 15))
mouse_report.buttons |= MOUSE_BTN1;
if (codes & (1 << 15))
mouse_report.buttons &= ~MOUSE_BTN1;
// lower seven bits are movement, as signed int_7.
// low byte is X-axis, high byte is Y.
y = (codes>>8 & 0x3F);
x = (codes>>0 & 0x3F);
// bit seven and fifteen is negative
// usb does not use int_8, but int_7 (measuring distance) with sign-bit.
if (codes & (1 << 6))
x = (x-0x40);
if (codes & (1 << 14))
y = (y-0x40);
// Accelerate mouse. (They weren't meant to be used on screens larger than 320x200).
x *= mouseacc;
y *= mouseacc;
// Cap our two bytes per axis to one byte.
// Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)...
// I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127)
mouse_report.x = -MAX(-MAX(x, -127), -127);
mouse_report.y = -MAX(-MAX(y, -127), -127);
if (debug_mouse) {
print("adb_host_mouse_recv: "); print_bin16(codes); print("\n");
print("adb_mouse raw: [");
phex(mouseacc); print(" ");
phex(mouse_report.buttons); print("|");
print_decs(mouse_report.x); print(" ");
print_decs(mouse_report.y); print("]\n");
}
// Send result by usb.
host_mouse_send(&mouse_report);
// increase acceleration of mouse
mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 );
return;
}
#endif

uint8_t matrix_scan(void)
{
/* extra_key is volatile and more convoluted than necessary because gcc refused

+ 6
- 6
converter/ascii_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = ascii_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -73,10 +73,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/ibm4704_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = ibm4704_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -85,9 +85,9 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 11
- 4
converter/ibm4704_usb/README.md View File

@@ -5,13 +5,20 @@ This firmware converts IBM 4704 keyboard protocol to USB HID.
Keyboard initialization process takes a few seconds at start up. During that you will hear buzzer from the keyboard. **You need to plug USB cable after hooking up your keyboard to the converter.**


Update
------
2015/05/05 Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack!
2015/05/19 Fixed a protocol handling bug.



Supported Keyboard
------------------
### IBM capacitive switch models:
- 6019273 Model 100 50-key (grid layout) http://kishy.dyndns.org/?p=977
- 6019284 Model 200 62-key Alpha(60% layout) http://kishy.dyndns.org/?p=894
- 6019303 Model 300 77-key Expanded Alpha http://kbtalking.cool3c.com/article/23272
- 6020218 Model 400 107-key Full key http://kishy.dyndns.org/?p=980
- 6019273 Model 100 50-key (grid layout) http://kishy.ca/?p=894
- 6019284 Model 200 62-key Alpha(60% layout) http://kishy.ca/?p=894
- 6019303 Model 300 77-key Expanded Alpha http://deskthority.net/photos-f62/ibm-6019303-t8502.html
- 6020218 Model 400 107-key Full key http://kishy.ca/?p=894

### Alps switch(vintage Green) models:


+ 5
- 18
converter/ibm4704_usb/config.h View File

@@ -41,9 +41,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.



/*
* Busywait
*/
/* Pin configuration */
#define IBM4704_CLOCK_PORT PORTD
#define IBM4704_CLOCK_PIN PIND
#define IBM4704_CLOCK_DDR DDRD
@@ -53,22 +51,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define IBM4704_DATA_DDR DDRD
#define IBM4704_DATA_BIT 0

/*
* Pin interrupt
*/
#ifdef IBM4704_USE_INT
#define IBM4704_INT_INIT() do { \
EICRA |= ((1<<ISC11) | \
(0<<ISC10)); \
} while (0)
#define IBM4704_INT_ON() do { \
EIMSK |= (1<<INT1); \
} while (0)
#define IBM4704_INT_OFF() do { \
EIMSK &= ~(1<<INT1); \
} while (0)
/* Pin interrupt on rising edge of clock */
#define IBM4704_INT_INIT() do { EICRA |= ((1<<ISC11)|(1<<ISC10)); } while (0)
#define IBM4704_INT_ON() do { EIFR |= (1<<INTF1); EIMSK |= (1<<INT1); } while (0)
#define IBM4704_INT_OFF() do { EIMSK &= ~(1<<INT1); } while (0)
#define IBM4704_INT_VECT INT1_vect
#endif


#endif

+ 11
- 10
converter/ibm4704_usb/ibm4704.txt View File

@@ -1,10 +1,10 @@
IBM 4704 Keyboard
=================
IBM capacitive switch models:
6019273 Model 100 50-key (grid layout) http://kishy.dyndns.org/?p=977
6019284 Model 200 62-key Alpha(60% layout) http://kishy.dyndns.org/?p=894
6019303 Model 300 77-key Expanded Alpha http://kbtalking.cool3c.com/article/23272
6020218 Model 400 107-key Full key http://kishy.dyndns.org/?p=980
6019273 Model 100 50-key (grid layout) http://kishy.ca/?p=894
6019284 Model 200 62-key Alpha(60% layout) http://kishy.ca/?p=894
6019303 Model 300 77-key Expanded Alpha http://deskthority.net/photos-f62/ibm-6019303-t8502.html
6020218 Model 400 107-key Full key http://kishy.ca/?p=894

Alps switch(vintage Green) models:
5954339 Japanese 102-key http://deskthority.net/post87127.html#p87127
@@ -33,7 +33,7 @@ so that it doesn't send any scancode until you send 'FF'(End of FC command mode)
Model 100 50-key A2h
Model 200 62-key A3h
Model 300 77-key A4h
Model 400 107-key ??
Model 400 107-key A5h
Japanese/Chinese 102-key A6h


@@ -57,15 +57,15 @@ Keyboard to Host
----------------
Data bits are LSB first and Pairty is odd. Clock has around 60us high and 30us low part.

____ __ __ __ __ __ __ __ __ __ ________
Clock \____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
____ __ __ __ __ __ __ __ __ __ _______
Clock \_____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
Data ____/ X____X____X____X____X____X____X____X____X____X________
Start 0 1 2 3 4 5 6 7 P Stop

Start bit: can be long as 300-350us.
Inhibit: Pull Data line down to inhibit keyboard to send.
Timing: Host reads bit while Clock is hi.
Timing: Host reads bit while Clock is hi.(rising edge)
Stop bit: Keyboard pulls down Data line to lo after 9th clock.


@@ -166,13 +166,14 @@ Data sent from host:
| `-----`--- scan code
`------------- enable bit(0: enable repeat, 1: enable break)

00-77 Enable repeat(78-7F: invalid scancode)
80-F7 Enable break(F8-FF: invalid scancode)
00-79 Enable repeat
80-F9 Enable break(FA-FF are used as other commands, see above.)
FE Resend(011ah) no need to use
FF End(0114h) exits FC command mode.

Response from keyboard:
FD Out of bound - Invalid scancode
-- OK - No response means that command is accepted.

Examples:
To enable break code of all keys.

+ 17
- 0
converter/ibm4704_usb/keymap_50key.c View File

@@ -0,0 +1,17 @@
#include "keymap_common.h"


const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KEYMAP_50(
F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, \
1, 2, 3, 4, 5, 6, 7, 8, 9, 0, \
Q, W, E, R, T, Y, U, I, O, P, \
A, S, D, F, G, H, J, K, L, SCLN, \
Z, X, C, V, B, N, M, COMM,DOT, SLSH \
),
};

const uint16_t PROGMEM fn_actions[] = {
};



+ 71
- 25
converter/ibm4704_usb/keymap_common.h View File

@@ -34,15 +34,15 @@ extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
extern const uint16_t fn_actions[];


/* Original keys */
/* 107-key */
#define KEYMAP( \
K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, \
K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, \
K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, \
K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, \
K31,K41,K3F, K40, K42,K2F \
K46,K64, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, K47,K48,K49,K4A, \
K56,K66, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, K4B,K4C,K4D,K4E, \
K71,K77, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, K50,K51,K52,K53, \
K44,K45, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, K5E,K58,K59,K5A, \
K54,K55, K31,K41,K3F, K40, K42,K2F, K78,K67,K79, K5B,K5C,K5D,K57 \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO }, \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO }, \
{ KC_##K08, KC_##K09, KC_##K0A, KC_NO, 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_NO, KC_##K1F }, \
@@ -50,24 +50,70 @@ extern const uint16_t fn_actions[];
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO, KC_##K2F }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
{ KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
{ KC_NO, KC_NO, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_NO, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
{ KC_##K78, KC_##K79, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}

#endif
/* 77-key */
#define KEYMAP_77( \
K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, \
K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, \
K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, \
K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, \
K31,K41,K3F, K40, K42,K2F, K78,K67,K79 \
) KEYMAP( \
F1, F2, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, NLCK,PSLS,PAST,PMNS, \
F3, F4, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, P7, P8, P9, PPLS, \
F5, F6, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, P4, P5, P6, PPLS, \
F7, F8, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, P1, P2, P3, PENT, \
F9, F10, K31,K41,K3F, K40, K42,K2F, K78,K67,K79 P0, P0, PDOT,PENT \
)

/*
{ K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
{ K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
{ K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ K78, K79, K7A, K7B, K7C, K7D, K7E, K7F }, \
*/
/* 62-key */
#define KEYMAP_62( \
K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, \
K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, \
K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, \
K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, \
K31,K41,K3F, K40, K42,K2F \
) KEYMAP( \
F1, F2, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
F3, F4, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, DEL, END, PGDN, P7, P8, P9, PPLS, \
F5, F6, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
F7, F8, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, F11, UP, F12, P1, P2, P3, PENT, \
F9, F10, K31,K41,K3F, K40, K42,K2F, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
)

/* 50-key */
#define KEYMAP_50( \
K00,K01,K02, K03,K04,K05, K20,K21,K22,K23, \
K08,K09,K0A, K0B,K0C,K0D, K28,K29,K2A,K35, \
K10,K11,K12, K13,K14,K15, K30,K31,K32,K36, \
K18,K19,K1A, K1B,K1C,K1D, K38,K39,K3A,K37, \
K16,K1E,K0E, K0F,K1F,K17, K33,K3B,K2B,K3F \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_NO, KC_NO, }, \
{ 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_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO, KC_NO, KC_NO, KC_##K3F }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, } \
}

#endif

+ 5
- 5
converter/ibm4704_usb/keymap_hasu.c View File

@@ -15,7 +15,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |Gui|Alt | Space |Alt |Gui|Ctrl |
* `-----------------------------------------------------------'
*/
KEYMAP(
KEYMAP_62(
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
LCTL,A, S, D, F, G, H, J, K, L, FN1, QUOT,NO, ENT, \
@@ -23,7 +23,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, FN3, RGUI,RCTL \
),

KEYMAP(
KEYMAP_62(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \
LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO, ENT, \
@@ -31,7 +31,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, SPC, RGUI,RCTL \
),

KEYMAP(
KEYMAP_62(
ESC, 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,WSTP,WBAK,WFWD,BSPC, \
LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,NO, NO, ENT, \
@@ -39,7 +39,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, BTN1, RGUI,RCTL \
),

KEYMAP(
KEYMAP_62(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, NO, ENT, \
@@ -47,7 +47,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, SPC, RGUI,RCTL \
),

KEYMAP(
KEYMAP_62(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
TAB, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN4, \
LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,BTN1,NO, NO, ENT, \

+ 26
- 14
converter/ibm4704_usb/keymap_plain.c View File

@@ -8,28 +8,40 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| #|Ret |
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |
* |-----------------------------------------------------------|
* |Shif| \| Z| X| C| V| B| N| M| ,| ,| /|???|Shift |
* |Shif|Shf| Z| X| C| V| B| N| M| ,| ,| /|???|Shift |
* |-----------------------------------------------------------|
* |Ctrl |Gui|Alt | Space |Alt* |Gui|Ctrl |
* |Ctrl |Gui|Alt | Space |Alt* |Gui|Fn |
* `-----------------------------------------------------------'
*/
KEYMAP(
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,NO, FN0, \
LCTL,LGUI,LALT, SPC, RGUI,RCTL \
F1, F2, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NO, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
F3, F4, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, \
F5, F6, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, ENT, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
F7, F8, LSFT,LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,NO, RSFT, F11, UP, F12, P1, P2, P3, PENT, \
F9, F10, LCTL,LGUI,LALT, SPC, RGUI,FN0, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
),

/* 1: HHKB */
/* 1: HHKB
* ,-----------------------------------------------------------.
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|???|Del|
* |-----------------------------------------------------------|
* |Caps | | | | | | | |Psc|Slk|Pau| Up| | Ins|
* |-----------------------------------------------------------|
* |Ctrl |VoD|VoU|VoM| | | *| /|Hom|PgU|Lef|Rig|Ret|Ret |
* |-----------------------------------------------------------|
* |Shif|Shi| | | | | | +| -|End|PgD|Dow|???|Shift |
* |-----------------------------------------------------------|
* |Ctrl |Gui|Alt | Space |Alt* |Gui|Fn |
* `-----------------------------------------------------------'
*/
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, INS, \
LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO, ENT, \
LSFT,NO, NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,NO, TRNS, \
LCTL,LGUI,LALT, SPC, RGUI,RCTL \
F1, F2, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, NO, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
F3, F4, CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, INS, DEL, END, PGDN, P7, P8, P9, PPLS, \
F5, F6, TRNS,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, ENT, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
F7, F8, TRNS,TRNS,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,NO, TRNS, F11, UP, F12, P1, P2, P3, PENT, \
F9, F10, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
),
};


+ 21
- 30
converter/ibm4704_usb/matrix.c View File

@@ -67,43 +67,32 @@ uint8_t matrix_cols(void)

static void enable_break(void)
{
uint8_t ret;
print("Enable break: ");
// valid scancode: 00-77h
for (uint8_t code = 0; code < 0x78; code++) {
while (ibm4704_send(0x80|code) != 0) {
print("z");
_delay_us(500);
}
_delay_us(2000);
ret = ibm4704_recv();
if (ret != 0xff) {
xprintf("c%02X:r%02X ", code, ret);
}
_delay_us(1000);
// valid scancode: 00-79h
for (uint8_t code = 0; code < 0x7A; code++) {
while (ibm4704_send(0x80|code)) _delay_ms(10);
_delay_ms(5); // wait for response
// No response(FF) when ok, FD when out of bound
xprintf("s%02X:r%02X ", code, ibm4704_recv());
}
_delay_us(1000);
while (ibm4704_send(0xFF) != 0) { _delay_us(500); } // End
while (ibm4704_send(0xFF)) { _delay_ms(10); } // End
print("End\n");
}

void matrix_init(void)
{
uint8_t ret;
debug_enable = true;

void matrix_setup(void)
{
ibm4704_init();
matrix_clear();
}

// read keyboard id
while ((ret = ibm4704_recv()) == 0xFF) {
ibm4704_send(0xFE);
_delay_us(100);
}
void matrix_init(void)
{
debug_enable = true;

_delay_ms(2000); // wait for starting up debug console
print("IBM 4704 converter\n");
xprintf("Keyboard ID: %02X\n", ret);
matrix_clear();
_delay_ms(2000); // wait for keyboard starting up
xprintf("Keyboard ID: %02X\n", ibm4704_recv());
enable_break();
}

@@ -116,14 +105,16 @@ uint8_t matrix_scan(void)
if (code==0xFF) {
// Not receivd
return 0;
} else if ((code&0x78)==0x78) {
// 0xFF-F8 and 0x7F-78 is not scancode
xprintf("Error: %0X\n", code);
} else if ((code&0x7F) >= 0x7A) {
// 0xFF-FA and 0x7F-7A is not scancode
xprintf("Error: %02X\n", code);
matrix_clear();
return 0;
} else if (code&0x80) {
dprintf("%02X\n", code);
matrix_make(code);
} else {
dprintf("%02X\n", code);
matrix_break(code);
}
return 1;

+ 6
- 6
converter/m0110_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = m0110_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -87,10 +87,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/m0110_usb/Makefile.pjrc View File

@@ -2,7 +2,7 @@
TARGET = m0110_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -64,10 +64,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/m0110_usb/Makefile.teensy View File

@@ -2,7 +2,7 @@
TARGET = m0110_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -89,10 +89,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/news_usb/Makefile.pjrc View File

@@ -7,7 +7,7 @@
TARGET = news_usb_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -65,10 +65,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/next_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = next_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -78,10 +78,10 @@ SRC += next_kbd.c

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/next_usb/Makefile.pjrc View File

@@ -2,7 +2,7 @@
TARGET = next_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -54,10 +54,10 @@ SRC += next_kbd.c

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/pc98_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = pc98_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -74,10 +74,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 8
- 8
converter/ps2_usb/Makefile View File

@@ -5,7 +5,7 @@
TARGET = ps2_usb_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -87,8 +87,8 @@ NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA

# PS/2 Options
#
PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
#PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
#PS2_USE_BUSYWAIT = yes # uses primitive reference code


@@ -97,9 +97,9 @@ PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomen

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 1
- 1
converter/ps2_usb/Makefile.mbed View File

@@ -1,6 +1,6 @@
PROJECT = ps2_usb

TMK_DIR = ../..
TMK_DIR = ../../tmk_core
MBED_DIR = $(TMK_DIR)/mbed-sdk

#VPATH += $(MBED_DIR):$(TMK_DIR)

+ 6
- 6
converter/ps2_usb/Makefile.pjrc View File

@@ -2,7 +2,7 @@
TARGET = ps2_usb_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -66,10 +66,10 @@ PS2_USE_BUSYWAIT = yes # uses primitive reference code

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/ps2_usb/Makefile.tmk_rev1 View File

@@ -6,7 +6,7 @@
TARGET = ps2_usb_tmk_rev1

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -90,9 +90,9 @@ PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomen

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/ps2_usb/Makefile.tmk_rev2 View File

@@ -6,7 +6,7 @@
TARGET = ps2_usb_tmk_rev2

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -90,9 +90,9 @@ PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/ps2_usb/Makefile.vusb View File

@@ -2,7 +2,7 @@
TARGET = ps2_usb_vusb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -98,10 +98,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=2048

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/protocol/vusb.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/protocol/vusb.mk
include $(TMK_DIR)/rules.mk

+ 1
- 1
converter/ps2_usb/README.md View File

@@ -14,7 +14,7 @@ In case of Teensy2.0(ATMega32U4):
- **USART**: **Clock** is on `PD5` and **Data** on `PD2`.
3. Optionally you need pull-up resistor. 1K-10K Ohm is OK.

To change pin configuration edit config.h.
To change pin configuration edit **config.h** and **Makefile**.


Build Firmware

+ 3
- 3
converter/ps2_usb/config.h View File

@@ -50,11 +50,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PS2_CLOCK_PORT PORTD
#define PS2_CLOCK_PIN PIND
#define PS2_CLOCK_DDR DDRD
#define PS2_CLOCK_BIT 5
#define PS2_CLOCK_BIT 1
#define PS2_DATA_PORT PORTD
#define PS2_DATA_PIN PIND
#define PS2_DATA_DDR DDRD
#define PS2_DATA_BIT 2
#define PS2_DATA_BIT 0
#endif

/*
@@ -69,7 +69,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PS2_DATA_PORT PORTD
#define PS2_DATA_PIN PIND
#define PS2_DATA_DDR DDRD
#define PS2_DATA_BIT 2
#define PS2_DATA_BIT 0
#define PS2_INT_INIT() do { \
EICRA |= ((1<<ISC11) | \
(0<<ISC10)); \

+ 6
- 6
converter/serialmouse_usb/Makefile View File

@@ -5,7 +5,7 @@
TARGET = serialmouse_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -98,9 +98,9 @@ SERIAL_MOUSE_USE_SOFT = yes # use software serial implementation

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/sun_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = sun_usb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -76,10 +76,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 9
- 2
converter/sun_usb/README View File

@@ -1,11 +1,18 @@
Sun to USB keyboard protocol converter
======================================
Target MCU is ATMega32u4 but other USB capable AVR will also work.
Supported keyboards: Sun Type 5 Keyboard, CTCSP SHORT TYPE KEYBOARD(CKUB)

CTCSP SHORT TYPE KEYBOARD: http://imgur.com/a/QIv6p
This converter will work with Sun Type 2-5 Keyboards.


Tested on:
Sun Type 3 Keyboard: http://blog.daveastels.com.s3-website-us-west-2.amazonaws.com/2014/12/27/type-3-keyboard.html
CTCSP SHORT TYPE KEYBOARD(Type 5): http://imgur.com/a/QIv6p


Keymap of Type 3(keymap_sun3.c) were impoted from dastels's repository.
https://github.com/dastels/tmk_keyboard/tree/master/converter/sun3_usb



Connector

+ 173
- 0
converter/sun_usb/keymap_sun3.c View File

@@ -0,0 +1,173 @@
/*
Copyright 2012 Jun Wako <[email protected]>

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 <stdbool.h>
#include <avr/pgmspace.h>
#include "keycode.h"
#include "util.h"
#include "keymap.h"


/* Sun type 3 keyboard
,-------. ,-----------------------------------------------------------. ,-----------.
| 01| 03| | 05| 06| 08| 0A| 0C| 0E| 10| 11| 12| 2B| | 15| 16| 17|
|-------| |-----------------------------------------------------------| |-----------|
| 19| 1A| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2D| 2E| 2F|
|-------| |-----------------------------------------------------------| |-----------|
| 31| 33| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 44| 45| 46|
|-------| |-----------------------------------------------------------| |-----------|
| 48| 49| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D|
|-------| |-----------------------------------------------------------| |-----------|
| 5F| 61| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 6F| | 70| 71| 72|
`-------' |-----------------------------------------------------------| `-----------'
| 77 | 78 | 79 | 7A | 13 |
`-----------------------------------------------------------'
*/


#define KEYMAP( \
K01,K03, K05,K06, K08, K0A, K0C, K0E, K10,K11,K12,K2B, K15,K16,K17, \
K19,K1A, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2D,K2E,K2F, \
K31,K33, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K44,K45,K46, \
K48,K49, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
K5F,K61, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E,K6F, K70,K71,K72, \
K77,K78, K79, K7A,K13 \
) { \
{ KC_NO, KC_##K01, KC_NO, KC_##K03, KC_NO, KC_##K05, KC_##K06, KC_NO }, \
{ KC_##K08, KC_NO, KC_##K0A, KC_NO, KC_##K0C, KC_NO, KC_##K0E, KC_NO }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_NO, KC_##K15, KC_##K16, KC_##K17 }, \
{ KC_NO, KC_##K19, KC_##K1A, KC_NO, KC_NO, 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_NO, KC_##K2D, KC_##K2E, KC_##K2F }, \
{ KC_NO, KC_##K31, KC_NO, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_NO }, \
{ KC_##K48, KC_##K49, KC_NO, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_##K5D, KC_NO, KC_##K5F }, \
{ KC_NO, KC_##K61, KC_NO, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
{ KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K77 }, \
{ KC_##K78, KC_##K79, KC_##K7A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}

// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
static const uint8_t PROGMEM fn_layer[] = {
2, // Fn0
3, // Fn1
4, // Fn2
0, // Fn3
0, // Fn4
0, // Fn5
0, // Fn6
0 // Fn7
};

// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
// See layer.c for details.
static const uint8_t PROGMEM fn_keycode[] = {
KC_NO, // Fn0
KC_SCLN, // Fn1
KC_SLSH, // Fn2
KC_NO, // Fn3
KC_NO, // Fn4
KC_NO, // Fn5
KC_NO, // Fn6
KC_NO // Fn7
};


static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

KEYMAP(
F10, F11, F1, F2, F3, F4, F5, F6, F7, F8, F9, BSPC, VOLD, MUTE, VOLU,
F12, F13, ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,MINS, EQL, BSLS, GRV, MPRV, MPLY, MNXT,
F14, F15, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, DEL, HOME, UP, PGUP,
F16, F17, LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, LEFT, INSERT, RIGHT,
F18, F19, LSFT, Z, X, C, V, B, N, M, COMM,DOT,SLSH, RSFT,RCTL, END, DOWN, PGDOWN,
LGUI, LALT, SPC, RALT,RGUI
),
/*
// 0: default
SHORT_TYPE(
STOP, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT,
LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RALT,UP, RSFT,
CAPS,LALT,LGUI, SPC, RGUI,APP, NLCK,LEFT,DOWN,RGHT
),
// 1: with layer keys
SHORT_TYPE(
ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
LCTL, A, S, D, F, G, H, J, K, L, FN1, QUOT, ENT,
LSFT, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,UP, FN0,
CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, LEFT,DOWN,RGHT
),
// 2: HHKB
SHORT_TYPE(
ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
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, NO, NO, HOME,PGUP,LEFT,RGHT, ENT,
LSFT, Z, X, C, V, B, NO, NO, END, PGDN,DOWN, RSFT,PGUP,FN0,
CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, HOME,PGDN,END
),
// 3: Mousekey
SHORT_TYPE(
ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
CAPS, 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,FN1, NO, ENT,
LSFT, NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, RSFT,UP, NO,
CAPS,LALT,LGUI, BTN1, RGUI,RALT,NO, LEFT,DOWN,RGHT
),
// 4: Cursor
SHORT_TYPE(
ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
CAPS, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC,
LCTL, NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT,
LSFT, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,UP, NO,
CAPS,LALT,LGUI, BTN1, RGUI,RALT,NO, LEFT,DOWN,RGHT
),
*/
};


uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
{
return pgm_read_byte(&keymaps[(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]);
}

+ 7
- 7
converter/terminal_bluefruit/Makefile View File

@@ -2,7 +2,7 @@
TARGET = terminal_bluefruit

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -89,11 +89,11 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/bluefruit.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/bluefruit.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
converter/terminal_usb/Makefile View File

@@ -2,7 +2,7 @@
TARGET = terminal_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -89,10 +89,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 60
- 0
converter/terminal_usb/keymap.c View File

@@ -70,6 +70,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ KC_NO, KC_NO, KC_NO, KC_##K83, KC_##K84, KC_NO, KC_NO, KC_NO, }, \
}

/*
* IBM Terminal keyboard 1399625, 101-key
*/
#define KEYMAP_101( \
K08, K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, K57,K5F,K62, \
\
K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5C, K64,K65,K6D, K6C,K75,K7D, \
K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K7C, \
K12, K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, K63, K69,K72,K7A, \
K11, K19, K29, K39, K58, K61,K60,K6A, K70, K71,K79 \
) { \
{ KC_NO, KC_NO , KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_##K07 }, \
{ KC_##K08, KC_NO , KC_NO , KC_NO , KC_NO , KC_##K0D, KC_##K0E, KC_##K0F }, \
{ KC_NO , KC_##K11, KC_##K12, KC_NO , KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
{ KC_NO , KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
{ KC_NO , KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
{ KC_NO , KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
{ KC_NO , KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_NO , KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
{ KC_NO , KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
{ KC_NO , KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
{ KC_NO , KC_NO , KC_##K52, KC_NO , KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_NO , KC_##K5E, KC_##K5F }, \
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
{ KC_NO , KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
{ KC_NO , KC_##K79, KC_##K7A, KC_NO , KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO , KC_##K84, KC_NO, KC_NO, KC_NO, }, \
}

// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
static const uint8_t PROGMEM fn_layer[] = {
@@ -137,6 +167,36 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
APP, INT6, LSFT,LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, NO, RSFT, LEFT,INT2,RGHT, P1, P2, P3, PENT,
RGUI,LGUI, LCTL, LALT, SPC, LGUI, GRV, DOWN, NO, P0, PDOT,NO
),

/* 101-key keymaps
*/
/* 0: default
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| /| *| -|
* |-----------------------------------------------------------| |-----------| |---------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| |
* |-----------------------------------------------------------| `-----------' |-----------| +|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| |
* |-----------------------------------------------------------| ,---. |---------------|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
* |Ctrl| |Alt | Space |Alt | |Ctrl| |Lef|Dow|Rig| | 0| .| |
* `----' `---------------------------------------' `----' `-----------' `---------------'
*/
/*
KEYMAP_101(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK, BRK,

GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,MINS, EQL,BSPC, INS,HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P,LBRC,RBRC,BSLS, DEL, END,PGDN, P7, P8, P9,
CAPS, 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, RSFT, UP, P1, P2, P3,
LCTL, LALT, SPC, RALT, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
*/
};



+ 12
- 7
converter/usb_usb/Makefile View File

@@ -27,7 +27,7 @@
# 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,
# 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.
@@ -41,7 +41,7 @@
# Target file name (without extension).
TARGET = usb_usb

TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -93,6 +93,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Media control and System control
CONSOLE_ENABLE = yes # Console for debug
#COMMAND_ENABLE = yes # Commands for debug and configuration
#NKRO_ENABLE = yes # USB Nkey Rollover

# Boot Section Size in bytes
@@ -101,7 +102,11 @@ CONSOLE_ENABLE = yes # Console for debug
# LUFA bootloader 4096
OPT_DEFS += -DBOOTLOADER_SIZE=4096

#LDFLAGS += -Wl,--relax

#OPT_DEFS += -DNO_ACTION_TAPPING
#OPT_DEFS += -DNO_ACTION_LAYER
#OPT_DEFS += -DNO_ACTION_MACRO

SRC = \
keymap_common.c \
@@ -121,7 +126,7 @@ CONFIG_H = config.h

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)



@@ -130,7 +135,7 @@ PROGRAM_CMD = avrdude -p$(MCU) -cavr109 -b57600 -Uflash:w:$(TARGET).hex -P$(DEV)



include $(TOP_DIR)/protocol/usb_hid.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/usb_hid.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 4
- 26
converter/usb_usb/keymap.c View File

@@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.


const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: default
/* 0: plain Qwerty without layer switching
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|Slp|Wak|
* `---' `---------------' `---------------' `---------------' `-----------' `-----------'
@@ -37,28 +37,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
CAPS,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, RSFT, UP, P1, P2, P3,
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, GRV, LEFT,DOWN,RGHT, P0, PDOT,PENT
),

/* 1: plain Qwerty without layer switching
* ,-----------------------------------------------------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
* |-----------------------------------------------------------|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift |
* |-----------------------------------------------------------|
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `-----------------------------------------------------------'
*/
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
@@ -66,7 +44,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),

/* 2: Colemak http://colemak.com
/* 1: Colemak http://colemak.com
* ,-----------------------------------------------------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
* |-----------------------------------------------------------|
@@ -88,7 +66,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),

/* 3: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
/* 2: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
* ,-----------------------------------------------------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
* |-----------------------------------------------------------|
@@ -110,7 +88,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),

/* 4: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
/* 3: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
* ,-----------------------------------------------------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
* |-----------------------------------------------------------|

+ 29
- 17
converter/usb_usb/main.cpp View File

@@ -18,7 +18,28 @@
#include "debug.h"
#include "keyboard.h"

#include "leonardo_led.h"

/* LED ping configuration */
#define TMK_LED
//#define LEONARDO_LED
#if defined(TMK_LED)
// For TMK converter and Teensy
#define LED_TX_INIT (DDRD |= (1<<6))
#define LED_TX_ON (PORTD |= (1<<6))
#define LED_TX_OFF (PORTD &= ~(1<<6))
#define LED_TX_TOGGLE (PORTD ^= (1<<6))
#elif defined(LEONARDO_LED)
// For Leonardo(TX LED)
#define LED_TX_INIT (DDRD |= (1<<5))
#define LED_TX_ON (PORTD &= ~(1<<5))
#define LED_TX_OFF (PORTD |= (1<<5))
#define LED_TX_TOGGLE (PORTD ^= (1<<5))
#else
#define LED_TX_INIT
#define LED_TX_ON
#define LED_TX_OFF
#define LED_TX_TOGGLE
#endif


static USB usb_host;
@@ -56,12 +77,11 @@ static void LUFA_setup(void)
static void HID_setup()
{
if (usb_host.Init() == -1) {
debug("HID init: failed\n");
LED_TX_OFF;
}
_delay_ms(200);
kbd.SetReportParser(0, (HIDReportParser*)&kbd_parser);
}

@@ -72,35 +92,27 @@ int main(void)
LED_TX_ON;

debug_enable = true;
/*
debug_matrix = true;
debug_keyboard = true;
debug_mouse = true;
*/

host_set_driver(&lufa_driver);
keyboard_init();

LUFA_setup();
HID_setup();
/* NOTE: Don't insert time consuming job here.
* It'll cause unclear initialization failure when DFU reset(worm start).
*/
sei();

uint8_t ret;
// wait for startup of sendchar routine
while (USB_DeviceState != DEVICE_STATE_Configured) ;
if (debug_enable) {
_delay_ms(1000);
}

debug("init: start\n");
HID_setup();
debug("init: done\n");

uint16_t timer;
// to see loop pulse with oscillo scope
DDRF = (1<<7);
for (;;) {
PORTF ^= (1<<7);
keyboard_task();

timer = timer_read();
@@ -115,6 +127,6 @@ if (timer > 100) {
USB_USBTask();
#endif
}
return 0;
}

+ 6
- 6
converter/x68k_usb/Makefile View File

@@ -7,7 +7,7 @@
TARGET = x68k_usb_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -92,10 +92,10 @@ PROGRAM_CMD = dfu-programmer atmega32u4 flash $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)


include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 1
- 1
doc/keycode.txt View File

@@ -174,7 +174,7 @@ KC_CLEAR_AGAIN A2 Keyboard Clear/Again
KC_CRSEL A3 Keyboard CrSel/Props
KC_EXSEL A4 Keyboard ExSel
/* Modifiers */
KC_LCTRL KC_LCTRL E0 Keyboard LeftControl
KC_LCTRL KC_LCTL E0 Keyboard LeftControl
KC_LSHIFT KC_LSFT E1 Keyboard LeftShift
KC_LALT E2 Keyboard LeftAlt
KC_LGUI E3 Keyboard Left GUI(Windows/Apple/Meta key)

+ 1
- 1
doc/keymap.md View File

@@ -198,7 +198,7 @@ There are 8 modifiers which has discrimination between left and right.
See keycode table in [`doc/keycode.txt`](./keycode.txt) for description of keycodes.

In regard to implementation side most of keycodes are identical with [HID usage][HID_usage](pdf) sent to host for real and some virtual keycodes are defined to support special actions.
[HID_usage]: http://www.usb.org/developers/devclass_docs/Hut1_11.pdf
[HID_usage]: http://www.usb.org/developers/hidpage/Hut1_12v2.pdf




+ 5
- 5
keyboard/IIgs/Makefile View File

@@ -42,7 +42,7 @@
TARGET = IIgs_Standard

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -88,8 +88,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/alps64/Makefile View File

@@ -42,7 +42,7 @@
TARGET = alps64

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -127,8 +127,8 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 15
- 15
keyboard/alps64/keymap_hasu.c View File

@@ -6,9 +6,9 @@
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default Layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|FN1 |
* |-----------------------------------------------------------|
@@ -18,17 +18,17 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[0] = KEYMAP_AEK( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN1, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT, \
LCTL,LGUI,LALT, FN4, RALT,FN5, RCTL),
LCTL,LGUI,LALT, FN4, RALT,FN5, FN0),

/* HHKB mode[HHKB Fn]
* ,-----------------------------------------------------------.
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Del |
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| ` |
* |-----------------------------------------------------------|
* |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
* |Caps | | | | | | | |Psc|Slk|Pus|Up | |Del |
* |-----------------------------------------------------------|
* |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
* |-----------------------------------------------------------|
@@ -38,11 +38,11 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[1] = KEYMAP_AEK( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, BSPC, \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, GRV, \
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, DEL, \
LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,TRNS, \
LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT, \
LCTL,LGUI,LALT, TRNS, RALT,RGUI,RCTL),
LCTL,LGUI,LALT, TRNS, RALT,RGUI,TRNS),

/* Vi mode[Slash]
* ,-----------------------------------------------------------.
@@ -58,8 +58,8 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[2] = KEYMAP_AEK( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, GRV, \
TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, DEL, \
LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,RCTL),
@@ -79,7 +79,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
*/
[3] = KEYMAP_AEK( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, GRV, \
FN8, NO, NO, NO, NO, NO, NO, WH_D,MS_U,WH_U,RGHT,FN9, FN10,FN8, \
LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,TRNS,NO, ENT, \
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT, \
@@ -100,7 +100,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
*/
[4] = KEYMAP_AEK( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, GRV, \
FN8, NO, NO, NO, NO, NO, NO, WH_D,MS_U,WH_U,RGHT,FN9, FN10,FN8, \
LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT, \
@@ -122,7 +122,7 @@ enum macro_id {
* Fn action definition
*/
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used)
[0] = ACTION_LAYER_MOMENTARY(1), // HHKB layer
[1] = ACTION_LAYER_TAP_KEY(1, KC_ENTER), // HHKB layer
[2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
[3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*

+ 5
- 6
keyboard/gh60/Makefile View File

@@ -42,7 +42,7 @@
TARGET = gh60_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -151,9 +151,8 @@ LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 17
- 5
keyboard/gh60/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = gh60_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -118,8 +118,20 @@ LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

plain: OPT_DEFS += -DKEYMAP_PLAIN
plain: all

poker: OPT_DEFS += -DKEYMAP_POKER
poker: all

poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
poker_set: all

poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
poker_bit: all

+ 5
- 5
keyboard/ghost_squid/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = ghostsquid_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/hbkb/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = hbkb_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -113,8 +113,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 9
- 5
keyboard/hhkb/Makefile View File

@@ -42,7 +42,7 @@
TARGET = hhkb_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -120,6 +120,10 @@ NKRO_ENABLE = yes # USB Nkey Rollover
#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
#HHKB_JP = yes # HHKB JP support

#OPT_DEFS += -DNO_ACTION_TAPPING
#OPT_DEFS += -DNO_ACTION_LAYER
#OPT_DEFS += -DNO_ACTION_MACRO


#
# Keymap file
@@ -142,11 +146,11 @@ endif

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
debug-on: all

+ 5
- 5
keyboard/hhkb/Makefile.pjrc View File

@@ -7,7 +7,7 @@
TARGET = hhkb_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -61,8 +61,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
keyboard/hhkb/Makefile.rn42 View File

@@ -42,7 +42,7 @@
TARGET = hhkb_rn42

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -139,13 +139,13 @@ endif

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include rn42.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
debug-on: all

+ 11
- 10
keyboard/hhkb/doc/HHKB.txt View File

@@ -31,27 +31,28 @@ Two PCBs are connected by 15 lines(13 in case of Pro2).
Vcc and GND use 3(2) lines each, other lines are for keyboard signaling.

HHKB connector lines:
JP Pro2 Pro Function Description Teensy++ pins
JP Pro2 Pro Function Description TMK pin usage
--------------------------------------------------------------------------------------------
1 Vcc(5V) 5V
1 1 2 Vcc(5V) 5V
2 2 3 Vcc(5V) 5V
3 3 4 TP1684 KEY: Low(0) when key pressed PE6 input(with pullup)
4 4 5 TP1684 KEY_PREV: make threshold PE7 output
3 3 4 TP1684 ~KEY: Low(0) when key is pressed PD7 input(with pullup)
4 4 5 TP1684 HYS: High(1) when key is pressed PB7 output
5 5 6 HC4051 A(bit0)\ PB0 output
6 6 7 HC4051 B(bit1) > select row 0-7 PB1 output
7 7 8 HC4051 C(bit2)/ PB2 output
8 8 9 LS145 A(bit0)\ PB3 output
9 9 10 LS145 B(bit1) > select column 0-7 PB4 output
10 10 11 LS145 C(bit2)/ PB5 output
11 11 12 LS145 D(enable) Low(0) enables selected column PB6 output
11 11 12 LS145 ~D(enable) Low(0) enables selected column PB6 output
12 12 13 GND GND
13 13 14 GND GND
15 GND
14 HC4051(Z2) ~Enable of Z2 row0-7
15 HC4051(Z3) ~Enable of Z3 row8-15
14 HC4051(Z2) ~Enable of Z2 row0-7 PC6
15 HC4051(Z3) ~Enable of Z3 row8-15 PC7

NOTE: guessing pin5(KEY_PREV) may work for hysteresis of capacitive sensing.
NOTE: Probably HYS changes threshold for upstroke and makes hysteresis in the result.
NOTE: HYS should be given High(1) when previous KEY state is Low(0).
NOTE: 1KOhm didn't work as pullup resistor on KEY. AVR internal pullup or 10KOhm resistor was OK.
NOTE: JP has two HC4051(Z2,Z3) and line 5, 6 and 7 are connected to both of them.

@@ -112,7 +113,7 @@ Matrix diagram:
| <-+ | <6-------|-|-|-|-|-|-|-|--|R|-+
| 1 4 | | | <7-------|-|-|-|-|-|-|-|--|R|-+
+---V---^-+ | +-^-^-^--+ 0 1 2 3 4 5 6 7 33K*8
KEY PREV | A B C +-----------------+
KEY HYS | A B C +-----------------+
| | +-^----+ | | | | LS145 |
Vcc | | |BU9831| | | | +-^--^--^--^------+
--- | | +------+ | | | A B C D +-------+
@@ -138,7 +139,7 @@ Matrix diagram:
| | +----> <6-----------|-|-|-|-|----|R|-+
| | | | | A B C <7-----------|-|-|-|-|----|R|-+
+---V---^-+ | | +-^-^-^--+ | | | | | |
KEY PREV | | | | | | | | | | |
KEY HYS | | | | | | | | | | |
| | | | +--------+ | | | | | |
| | | | | HC4051 <8-----------|-|-|-|-|----|R|-+
| | | | | Z3 <9-----------|-|-|-|-|----|R|-+
@@ -192,7 +193,7 @@ Signals charts
0123456701234567 selected column

3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it.
prev _~~~~_____ 20us if previous key state is low
hys _~~~~_____ 20us if previous key state is low
colD ~~~__~~~~~ 10us strobe
key ~~~____~~~ 22us indicates current state of the key


+ 1
- 1
keyboard/hhkb/hhkb_avr.h View File

@@ -70,7 +70,7 @@ static inline void KEY_INIT(void)
#ifdef HHKB_JP
/* row extention for HHKB JP */
DDRC |= (1<<6|1<<7);
PORTC &= ~(1<<6|1<<7);
PORTC |= (1<<6|1<<7);
#endif
KEY_UNABLE();
KEY_PREV_OFF();

+ 37
- 4
keyboard/hhkb/keymap_hhkb.c View File

@@ -1,4 +1,4 @@
/*
/*
* HHKB Layout
*/
#include "keymap_common.h"
@@ -40,7 +40,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* `-----------------------------------------------------------'
* | | | | | |
* `-------------------------------------------'
*/
*/
KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC, \
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT, \
@@ -55,8 +55,41 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
*/
#ifdef KEYMAP_SECTION_ENABLE
const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
[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_A),
[14] = ACTION_LAYER_TAP_KEY(2, KC_F),
[15] = ACTION_LAYER_TAP_KEY(3, KC_J),
[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_ESC),
[31] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_BSPACE),
};
#else
const uint16_t fn_actions[] PROGMEM = {
#endif
[0] = ACTION_LAYER_MOMENTARY(1),
[0] = ACTION_LAYER_MOMENTARY(1),
};
#endif

+ 6
- 0
keyboard/hhkb/matrix.c View File

@@ -132,7 +132,13 @@ uint8_t matrix_scan(void)

// NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
// This takes 25us or more to make sure KEY_STATE returns to idle state.
#ifdef HHKB_JP
// Looks like JP needs faster scan due to its twice larger matrix
// or it can drop keys in fast key typing
_delay_us(30);
#else
_delay_us(75);
#endif
}
if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
}

+ 6
- 6
keyboard/hhkb/not_supported/Makefile.iwrap View File

@@ -7,7 +7,7 @@
TARGET = hhkb_iwrap

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -94,10 +94,10 @@ PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/iwrap.mk
include $(TMK_DIR)/protocol/iwrap.mk
# TODO: to be selectable: V-USB, LUFA or PJRC
#include $(TOP_DIR)/protocol/vusb.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
#include $(TMK_DIR)/protocol/vusb.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/hhkb/not_supported/Makefile.vusb View File

@@ -7,7 +7,7 @@
TARGET = hhkb_vusb

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -87,11 +87,11 @@ PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/vusb.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/vusb.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

debug-on: EXTRAFLAGS += -DDEBUG
debug-on: all

+ 5
- 5
keyboard/hid_liber/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = hid_liber_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -119,11 +119,11 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all

+ 5
- 5
keyboard/hid_liber/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = hid_liber_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -92,11 +92,11 @@ NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all

+ 2
- 2
keyboard/infinity/Makefile View File

@@ -1,7 +1,7 @@
PROJECT = infinity

TMK_DIR = ../..
MBED_DIR = $(TMK_DIR)/mbed-sdk
TMK_DIR = ../../tmk_core
MBED_DIR = $(TMK_DIR)/tool/mbed/mbed-sdk

#VPATH += $(MBED_DIR):$(TMK_DIR)
vpath %.s .:$(MBED_DIR):$(TMK_DIR)

+ 17
- 15
keyboard/infinity/mbed-infinity.mk View File

@@ -20,28 +20,30 @@ OBJECTS += \
$(OBJDIR)/mbed-infinity/system_MK20D5.o \
$(OBJDIR)/mbed-infinity/USBHAL_KL25Z.o \
$(OBJDIR)/mbed-infinity/startup_MK20D5.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/analogin_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/i2c_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pinmap.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/port_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pwmout_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/rtc_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/serial_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/sleep.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/spi_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/us_ticker.o
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/analogin_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/gpio_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/gpio_irq_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/i2c_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/pinmap.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/port_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/pwmout_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/rtc_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/serial_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/sleep.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/spi_api.o \
$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/us_ticker.o

INCLUDE_PATHS += \
-Imbed \
-I$(MBED_DIR)/libraries/mbed/targets \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M \
-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M/TOOLCHAIN_GCC_ARM \
-I$(MBED_DIR)/libraries/mbed/targets/hal \
-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale \
-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M
-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX \
-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M

LINKER_SCRIPT = mbed-infinity/infinity.ld

+ 5
- 5
keyboard/kitten_paw/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = kittenpaw_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/kmac/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = kmac_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -117,11 +117,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

winkey: OPT_DEFS += -DLAYOUT_WINKEY
winkey: all

+ 5
- 5
keyboard/kmac/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = kmac_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -88,11 +88,11 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

winkey: OPT_DEFS += -DLAYOUT_WINKEY
winkey: all

+ 5
- 5
keyboard/lightpad/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = lightpad_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/lightsaber/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = lightsaber_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -116,11 +116,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

winkey: OPT_DEFS += -DLAYOUT_WINKEY
winkey: all

+ 5
- 5
keyboard/lightsaber/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = lightsaber_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -84,11 +84,11 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

winkey: OPT_DEFS += -DLAYOUT_WINKEY
winkey: all

+ 5
- 5
keyboard/macway/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = macway_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -114,8 +114,8 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/macway/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = macway_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -90,8 +90,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 1
- 1
keyboard/mbed_onekey/Makefile View File

@@ -1,6 +1,6 @@
PROJECT = mbed_onekey

TMK_DIR = ../..
TMK_DIR = ../../tmk_core
MBED_DIR = $(TMK_DIR)/mbed-sdk

#VPATH += $(MBED_DIR):$(TMK_DIR)

+ 5
- 5
keyboard/nerd/Makefile View File

@@ -42,7 +42,7 @@
TARGET = nerd_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -119,8 +119,8 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
keyboard/onekey/Makefile View File

@@ -42,7 +42,7 @@
TARGET = onekey_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -124,9 +124,9 @@ CONSOLE_ENABLE = yes # Console for debug(+400)

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/common.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/rules.mk

+ 6
- 6
keyboard/onekey/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = onekey_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -95,9 +95,9 @@ PS2_USE_BUSYWAIT = yes # uses primitive reference code

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/common.mk
include $(TOP_DIR)/protocol.mk
include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/protocol.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/rules.mk

+ 5
- 5
keyboard/phantom/Makefile.lufa View File

@@ -42,7 +42,7 @@
TARGET = phantom_lufa

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -115,11 +115,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/lufa.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all

+ 5
- 5
keyboard/phantom/Makefile.pjrc View File

@@ -42,7 +42,7 @@
TARGET = phantom_pjrc

# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core

# Directory keyboard dependent files exist
TARGET_DIR = .
@@ -86,11 +86,11 @@ COMMAND_ENABLE = yes # Commands for debug and configuration

# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)

include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TMK_DIR)/protocol/pjrc.mk
include $(TMK_DIR)/common.mk
include $(TMK_DIR)/rules.mk

ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all

+ 0
- 116
protocol/lufa/LUFA-120730/LUFA/Build/lufa_sources.mk View File

@@ -1,116 +0,0 @@
#
# LUFA Library
# Copyright (C) Dean Camera, 2012.
#
# dean [at] fourwalledcubicle [dot] com
# www.lufa-lib.org
#
LUFA_BUILD_MODULES += SOURCES
LUFA_BUILD_TARGETS +=
LUFA_BUILD_MANDATORY_VARS += LUFA_PATH ARCH
LUFA_BUILD_OPTIONAL_VARS +=
LUFA_BUILD_PROVIDED_VARS += LUFA_SRC_USB LUFA_SRC_USBCLASS LUFA_SRC_TEMPERATURE LUFA_SRC_SERIAL LUFA_SRC_TWI LUFA_SRC_PLATFORM
LUFA_BUILD_PROVIDED_MACROS +=
# -----------------------------------------------------------------------------
# LUFA Sources Buildsystem Makefile Module.
# -----------------------------------------------------------------------------
# DESCRIPTION:
# Provides a set of makefile variables for the various LUFA module sources.
# Once included, the sources required to use a given LUFA module will become
# available using the makefile variable names listed in the LUFA project
# documentation.
# -----------------------------------------------------------------------------
# TARGETS:
#
# (None)
#
# MANDATORY PARAMETERS:
#
# LUFA_PATH - Path to the LUFA library core
# ARCH - Device architecture name
#
# OPTIONAL PARAMETERS:
#
# (None)
#
# PROVIDED VARIABLES:
#
# LUFA_SRC_USB - List of LUFA USB driver source files
# LUFA_SRC_USBCLASS - List of LUFA USB Class driver source files
# LUFA_SRC_TEMPERATURE - List of LUFA temperature sensor driver source
# files
# LUFA_SRC_SERIAL - List of LUFA Serial U(S)ART driver source files
# LUFA_SRC_TWI - List of LUFA TWI driver source files
# LUFA_SRC_PLATFORM - List of LUFA architecture specific platform
# management source files
#
# PROVIDED MACROS:
#
# (None)
#
# -----------------------------------------------------------------------------
SHELL = /bin/sh
ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set))
ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank))
ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N))
# Sanity check user supplied values
$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))
$(call ERROR_IF_EMPTY, LUFA_PATH)
$(call ERROR_IF_EMPTY, ARCH)
# Allow LUFA_ROOT_PATH to be overridden elsewhere to support legacy LUFA makefiles
LUFA_ROOT_PATH ?= $(patsubst %/,%,$(LUFA_PATH))
# Construct LUFA module source variables
LUFA_SRC_USB := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Endpoint_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Host_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Pipe_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBController_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/EndpointStream_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/PipeStream_$(ARCH).c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptors.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/USBTask.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Common/HIDParser.c
LUFA_SRC_USBCLASS := $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/AudioClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/HIDClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MassStorageClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MIDIClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/RNDISClassDevice.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AudioClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/CDCClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/HIDClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MassStorageClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MIDIClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/PrinterClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/RNDISClassHost.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/StillImageClassHost.c
LUFA_SRC_TEMPERATURE := $(LUFA_ROOT_PATH)/Drivers/Board/Temperature.c
LUFA_SRC_SERIAL := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/Serial_$(ARCH).c
LUFA_SRC_TWI := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/TWI_$(ARCH).c
ifeq ($(ARCH), UC3)
LUFA_SRC_PLATFORM := $(LUFA_ROOT_PATH)/Platform/UC3/Exception.S \
$(LUFA_ROOT_PATH)/Platform/UC3/InterruptManagement.c
else
LUFA_SRC_PLATFORM :=
endif
# Build a list of all available module sources
LUFA_SRC_ALL_FILES := $(LUFA_SRC_USB) \
$(LUFA_SRC_USBCLASS) \
$(LUFA_SRC_TEMPERATURE) \
$(LUFA_SRC_SERIAL) \
$(LUFA_SRC_TWI) \
$(LUFA_SRC_PLATFORM)

+ 0
- 1809
protocol/lufa/LUFA-120730/LUFA/Doxygen.conf
File diff suppressed because it is too large
View File


+ 0
- 223
protocol/lufa/LUFA-120730/LUFA/DoxygenPages/CompileTimeTokens.txt View File

@@ -1,223 +0,0 @@
/** \file
*
* This file contains special DoxyGen information for the generation of the main page and other special
* documentation pages. It is not a project source file.
*/
/** \page Page_TokenSummary Summary of Compile Tokens
*
* The following lists all the possible tokens which can be defined in a project makefile, and passed to the
* compiler via the -D switch, to alter the LUFA library code. These tokens may alter the library behaviour,
* or remove features unused by a given application in order to save flash space.
*
* \note If the \c USE_LUFA_CONFIG_HEADER token is defined, the library will include a header file named \c LUFAConfig.h located
* in the user directory where the below compile time tokens may be defined. This allows for an alternative to makefile
* defined tokens for configuring the library.
*
* \section Sec_SummaryNonUSBTokens Non USB Related Tokens
* This section describes compile tokens which affect non-USB sections of the LUFA library.
*
* - <b>DISABLE_TERMINAL_CODES</b> - (\ref Group_Terminal) - <i>All Architectures</i> \n
* If an application contains ANSI terminal control codes listed in TerminalCodes.h, it might be desired to remove them
* at compile time for use with a terminal which is non-ANSI control code aware, without modifying the source code. If
* this token is defined, all ANSI control codes in the application code from the TerminalCodes.h header are removed from
* the source code at compile time.
*
*
* \section Sec_SummaryUSBClassTokens USB Class Driver Related Tokens
* This section describes compile tokens which affect USB class-specific drivers in the LUFA library.
*
* - <b>HID_HOST_BOOT_PROTOCOL_ONLY</b> - (\ref Group_USBClassHIDHost) - <i>All Architectures</i> \n
* By default, the USB HID Host class driver is designed to work with HID devices using either the Boot or Report HID
* communication protocols. On devices where the Report protocol is not used (i.e. in applications where only basic
* Mouse or Keyboard operation is desired, using boot compatible devices), the code responsible for the Report protocol
* mode can be removed to save space in the compiled application by defining this token. When defined, it is still necessary
* to explicitly put the attached device into Boot protocol mode via a call to \ref HID_Host_SetBootProtocol().
*
* - <b>HID_STATETABLE_STACK_DEPTH</b>=<i>x</i> - (\ref Group_HIDParser) - <i>All Architectures</i> \n
* HID reports may contain PUSH and POP elements, to store and retrieve the current HID state table onto a stack. This
* allows for reports to save the state table before modifying it slightly for a data item, and then restore the previous
* state table in a compact manner. This token may be defined to a non-zero 8-bit value to give the maximum depth of the state
* table stack. If not defined, this defaults to the value indicated in the HID.h file documentation.
*
* - <b>HID_USAGE_STACK_DEPTH</b>=<i>x</i> - (\ref Group_HIDParser) - <i>All Architectures</i> \n
* HID reports generally contain many USAGE elements, which are assigned to INPUT, OUTPUT and FEATURE items in succession
* when multiple items are defined at once (via REPORT COUNT elements). This allows for several items to be defined with
* different usages in a compact manner. This token may be defined to a non-zero 8-bit value to set the maximum depth of the
* usage stack, indicating the maximum number of USAGE items which can be stored temporarily until the next INPUT, OUTPUT
* and FEATURE item. If not defined, this defaults to the value indicated in the HID.h file documentation.
*
* - <b>HID_MAX_COLLECTIONS</b>=<i>x</i> - (\ref Group_HIDParser) - <i>All Architectures</i> \n
* HID reports generally contain several COLLECTION elements, used to group related data items together. Collection information
* is stored separately in the processed usage structure (and referred to by the data elements in the structure) to save space.
* This token may be defined to a non-zero 8-bit value to set the maximum number of COLLECTION items which can be processed by the
* parser into the resultant processed report structure. If not defined, this defaults to the value indicated in the HID.h file
* documentation.
*
* - <b>HID_MAX_REPORTITEMS</b>=<i>x</i> - (\ref Group_HIDParser) - <i>All Architectures</i> \n
* All HID reports contain one or more INPUT, OUTPUT and/or FEATURE items describing the data which can be sent to and from the HID
* device. Each item has associated usages, bit offsets in the item reports and other associated data indicating the manner in which
* the report data should be interpreted by the host. This token may be defined to a non-zero 8-bit value to set the maximum number of
* data elements which can be stored in the processed HID report structure, including INPUT, OUTPUT and (if enabled) FEATURE items.
* If a item has a multiple count (i.e. a REPORT COUNT of more than 1), each item in the report count is placed separately in the
* processed HID report table. If not defined, this defaults to the value indicated in the HID.h file documentation.
*
* - <b>HID_MAX_REPORT_IDS</b>=<i>x</i> - (\ref Group_HIDParser) - <i>All Architectures</i> \n
* HID reports may contain several report IDs, to logically distinguish grouped device data from one another - for example, a combination
* keyboard and mouse might use report IDs to separate the keyboard reports from the mouse reports. In order to determine the size of each
* report, and thus know how many bytes must be read or written, the size of each report (IN, OUT and FEATURE) must be calculated and
* stored. This token may be defined to a non-zero 8-bit value to set the maximum number of report IDs in a device which can be processed
* and their sizes calculated/stored into the resultant processed report structure. If not defined, this defaults to the value indicated in
* the HID.h file documentation.
*
* - <b>NO_CLASS_DRIVER_AUTOFLUSH</b> - (\ref Group_USBClassDrivers) - <i>All Architectures</i> \n
* Many of the device and host mode class drivers automatically flush any data waiting to be written to an interface, when the corresponding
* USB management task is executed. This is usually desirable to ensure that any queued data is sent as soon as possible once and new data is
* constructed in the main program loop. However, if flushing is to be controlled manually by the user application via the *_Flush() commands,
* the compile time token may be defined in the application's makefile to disable automatic flushing during calls to the class driver USB
* management tasks.
*
*
* \section Sec_SummaryUSBTokens General USB Driver Related Tokens
* This section describes compile tokens which affect USB driver stack as a whole in the LUFA library.
*
* - <b>ORDERED_EP_CONFIG</b> - (\ref Group_EndpointManagement , \ref Group_PipeManagement) - <i>AVR8, UC3</i> \n
* The USB AVRs do not allow for Endpoints and Pipes to be configured out of order; they <i>must</i> be configured in an ascending order to
* prevent data corruption issues. However, by default LUFA employs a workaround to allow for unordered Endpoint/Pipe initialization. This compile
* time token may be used to restrict the initialization order to ascending indexes only in exchange for a smaller compiled binary size. Use
* caution when applied to applications using the library USB Class drivers; the user application must ensure that all endpoints and pipes are
* allocated sequentially.
*
* - <b>USE_STATIC_OPTIONS</b>=<i>x</i> - (\ref Group_USBManagement) - <i>All Architectures</i> \n
* By default, the USB_Init() function accepts dynamic options at runtime to alter the library behaviour, including whether the USB pad
* voltage regulator is enabled, and the device speed when in device mode. By defining this token to a mask comprised of the USB options
* mask defines usually passed as the Options parameter to USB_Init(), the resulting compiled binary can be decreased in size by removing
* the dynamic options code, and replacing it with the statically set options. When defined, the USB_Init() function no longer accepts an
* Options parameter.
*
* - <b>USB_DEVICE_ONLY</b> - (\ref Group_USBManagement) - <i>All Architectures</i> \n
* For the USB AVR models supporting both device and host USB modes, the USB_Init() function contains a Mode parameter which specifies the
* mode the library should be initialized to. If only device mode is required, the code for USB host mode can be removed from the binary to
* save space. When defined, the USB_Init() function no longer accepts a Mode parameter. This define is irrelevant on smaller USB AVRs which
* do not support host mode.
*
* - <b>USB_HOST_ONLY</b> - (\ref Group_USBManagement) - <i>All Architectures</i> \n
* Same as USB_DEVICE_ONLY, except the library is fixed to USB host mode rather than USB device mode. Not available on some USB AVR models.
*
* - <b>USB_STREAM_TIMEOUT_MS</b>=<i>x</i> - (\ref Group_USBManagement) - <i>All Architectures</i> \n
* When endpoint and/or pipe stream functions are used, by default there is a timeout between each transfer which the connected device or host
* must satisfy, or the stream function aborts the remaining data transfer. This token may be defined to a non-zero 16-bit value to set the timeout
* period for stream transfers, specified in milliseconds. If not defined, the default value specified in LowLevel.h is used instead.
*
* - <b>NO_LIMITED_CONTROLLER_CONNECT</b> - (\ref Group_Events) - <i>AVR8 Only</i> \n
* On the smaller USB AVRs, the USB controller lacks VBUS events to determine the physical connection state of the USB bus to a host. In lieu of
* VBUS events, the library attempts to determine the connection state via the bus suspension and wake up events instead. This however may be
* slightly inaccurate due to the possibility of the host suspending the bus while the device is still connected. If accurate connection status is
* required, the VBUS line of the USB connector should be routed to an AVR pin to detect its level, so that the USB_DeviceState global
* can be accurately set and the \ref EVENT_USB_Device_Connect() and \ref EVENT_USB_Device_Disconnect() events manually raised by the RAISE_EVENT macro.
* When defined, this token disables the library's auto-detection of the connection state by the aforementioned suspension and wake up events.
*
* - <b>NO_SOF_EVENTS</b> - (\ref Group_Events) - <i>All Architectures</i> \n
* By default, there exists a LUFA application event for the start of each USB frame while the USB bus is not suspended in either host or device mode.
* This event can be selectively enabled or disabled by calling the appropriate device or host mode function. When this compile time token is defined,
* the ability to receive USB Start of Frame events via the \ref EVENT_USB_Device_StartOfFrame() or \ref EVENT_USB_Host_StartOfFrame() events is removed,
* reducing the compiled program's binary size.
*
*
* \section Sec_SummaryUSBDeviceTokens USB Device Mode Driver Related Tokens
* This section describes compile tokens which affect USB driver stack of the LUFA library when used in Device mode.
*
* - <b>USE_RAM_DESCRIPTORS</b> - (\ref Group_StdDescriptors) - <i>AVR8 Only</i> \n
* Define this token to indicate to the USB driver that all device descriptors are stored in RAM, rather than being located in any one
* of the AVR's memory spaces. RAM descriptors may be desirable in applications where the descriptors need to be modified at runtime.
*
* - <b>USE_FLASH_DESCRIPTORS</b> - (\ref Group_StdDescriptors) - <i>AVR8 Only</i> \n
* Similar to USE_RAM_DESCRIPTORS, but all descriptors are stored in the AVR's FLASH memory rather than RAM.
*
* - <b>USE_EEPROM_DESCRIPTORS</b> - (\ref Group_StdDescriptors) - <i>AVR8 Only</i> \n
* Similar to USE_RAM_DESCRIPTORS, but all descriptors are stored in the AVR's EEPROM memory rather than RAM.
*
* - <b>NO_INTERNAL_SERIAL</b> - (\ref Group_StdDescriptors) - <i>All Architectures</i> \n
* Some AVR models contain a unique serial number which can be used as the device serial number, while in device mode. This allows
* the host to uniquely identify the device regardless of if it is moved between USB ports on the same computer, allowing allocated
* resources (such as drivers, COM Port number allocations) to be preserved. This is not needed in many apps, and so the code that
* performs this task can be disabled by defining this option and passing it to the compiler via the -D switch.
*
* - <b>FIXED_CONTROL_ENDPOINT_SIZE</b>=<i>x</i> - (\ref Group_EndpointManagement) - <i>All Architectures</i> \n
* By default, the library determines the size of the control endpoint (when in device mode) by reading the device descriptor.
* Normally this reduces the amount of configuration required for the library, allows the value to change dynamically (if
* descriptors are stored in EEPROM or RAM rather than flash memory) and reduces code maintenance. However, this token can be
* defined to a non-zero value instead to give the size in bytes of the control endpoint, to reduce the size of the compiled
* binary.
*
* - <b>DEVICE_STATE_AS_GPIOR</b> - (\ref Group_Device) - <i>AVR8 Only</i> \n
* One of the most frequently used global variables in the stack is the USB_DeviceState global, which indicates the current state of
* the Device State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token
* may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR
* reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except
* implicitly via the library APIs.
*
* - <b>FIXED_NUM_CONFIGURATIONS</b>=<i>x</i> - (\ref Group_Device) - <i>All Architectures</i> \n
* By default, the library determines the number of configurations a USB device supports by reading the device descriptor. This reduces
* the amount of configuration required to set up the library, and allows the value to change dynamically (if descriptors are stored in
* EEPROM or RAM rather than flash memory) and reduces code maintenance. However, this value may be fixed via this token in the project
* makefile to reduce the compiled size of the binary at the expense of flexibility.
*
* - <b>CONTROL_ONLY_DEVICE</b> - (\ref Group_Device) - <i>All Architectures</i> \n
* In some limited USB device applications, there are no device endpoints other than the control endpoint; i.e. all device communication
* is through control endpoint requests. Defining this token will remove several features related to the selection and control of device
* endpoints internally, saving space. Generally, this is usually only useful in (some) bootloaders and is best avoided.
*
* - <b>MAX_ENDPOINT_INDEX</b> - (\ref Group_Device) - <i>XMEGA Only</i> \n
* Defining this value to the highest index (not address - this excludes the direction flag) endpoint within the device will restrict the
* number of FIFOs created internally for the endpoint buffers, reducing the total RAM usage.
*
* - <b>INTERRUPT_CONTROL_ENDPOINT</b> - (\ref Group_USBManagement) - <i>All Architectures</i> \n
* Some applications prefer to not call the USB_USBTask() management task regularly while in device mode, as it can complicate code significantly.
* Instead, when device mode is used this token can be passed to the library via the -D switch to allow the library to manage the USB control
* endpoint entirely via USB controller interrupts asynchronously to the user application. When defined, USB_USBTask() does not need to be called
* when in USB device mode.
*
* - <b>NO_DEVICE_REMOTE_WAKEUP</b> - (\ref Group_Device) - <i>All Architectures</i> \n
* Many devices do not require the use of the Remote Wakeup features of USB, used to wake up the USB host when suspended. On these devices,
* the code required to manage device Remote Wakeup can be disabled by defining this token and passing it to the library via the -D switch.
*
* - <b>NO_DEVICE_SELF_POWER</b> - (\ref Group_Device) - <i>All Architectures</i> \n
* USB devices may be bus powered, self powered, or a combination of both. When a device can be both bus powered and self powered, the host may
* query the device to determine the current power source, via \ref USB_Device_CurrentlySelfPowered. For solely bus powered devices, this global
* and the code required to manage it may be disabled by passing this token to the library via the -D switch.
*
*
* \section Sec_SummaryUSBHostTokens USB Host Mode Driver Related Tokens
*
* This section describes compile tokens which affect USB driver stack of the LUFA library when used in Host mode.
*
* - <b>HOST_STATE_AS_GPIOR</b> - (\ref Group_Host) - <i>AVR8 Only</i> \n
* One of the most frequently used global variables in the stack is the USB_HostState global, which indicates the current state of
* the Host State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token
* may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR
* reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except
* implicitly via the library APIs.
*
* - <b>USB_HOST_TIMEOUT_MS</b>=<i>x</i> - (\ref Group_Host) - <i>All Architectures</i> \n
* When a control transfer is initiated in host mode to an attached device, a timeout is used to abort the transfer if the attached
* device fails to respond within the timeout period. This token may be defined to a non-zero 16-bit value to set the timeout period for
* control transfers, specified in milliseconds. If not defined, the default value specified in Host.h is used instead.
*
* - <b>HOST_DEVICE_SETTLE_DELAY_MS</b>=<i>x</i> - (\ref Group_Host) - <i>All Architectures</i> \n
* Some devices require a delay of up to 5 seconds after they are connected to VBUS before the enumeration process can be started, or
* they will fail to enumerate correctly. By placing a delay before the enumeration process, it can be ensured that the bus has settled
* back to a known idle state before communications occur with the device. This token may be defined to a 16-bit value to set the device
* settle period, specified in milliseconds. If not defined, the default value specified in Host.h is used instead.
*
* - <b>INVERTED_VBUS_ENABLE_LINE</b> - (\ref Group_Host) - <i>All Architectures</i> \n
* If enabled, this will indicate that the USB target VBUS line polarity is inverted; i.e. it should be pulled low to enable VBUS to the
* target, and pulled high to stop the target VBUS generation.
*
* \attention On AVR8 architecture devices, this compile time option requires \c NO_AUTO_VBUS_MANAGEMENT to be set.
*
* - <b>NO_AUTO_VBUS_MANAGEMENT</b> - (\ref Group_Host) - <i>All Architectures</i> \n
* Disables the automatic management of VBUS to the target, i.e. automatic shut down in the even of an overcurrent situation. When enabled, VBUS
* is enabled while the USB controller is initialized in USB Host mode.
*/

+ 0
- 44
protocol/lufa/LUFA-120730/LUFA/DoxygenPages/KnownIssues.txt View File

@@ -1,44 +0,0 @@
/** \file
*
* This file contains special DoxyGen information for the generation of the main page and other special
* documentation pages. It is not a project source file.
*/
/** \page Page_KnownIssues Known Issues
* The following are known issues present in each official LUFA release. This list should contain all known
* issues in the library. Most of these issues should be corrected in the future release - see
* \ref Page_FutureChanges for a list of planned changes in future releases.
*
* \section Sec_KnownIssues120730 Version 120730
* - AVR8 Architecture
* - No known issues.
* - UC3 Architecture
* \warning The UC3 device support is currently <b>experimental</b> (incomplete and/or non-functional), and is included for preview purposes only. \n
*
* - No demos, bootloaders or projects have been ported for the UC3 devices in the current release,
* although the architecture is supported in the LUFA core library.
* - DMA transfers to and from the USB controller are not yet implemented for this release.
* - The UC3C, UC3D and UC3L sub-families of UC3 are not currently supported by the library due to their
* altered USB controller design.
* - The various \c CreateStream() functions for creating standard \c <stdio.h> compatible virtual file
* streams are not available on the UC3 architecture, due to a lack of suitable library support.
* - XMEGA Architecture
* \warning The XMEGA device support is currently <b>experimental</b> (incomplete and/or non-functional), and is included for preview purposes only.
*
* - No demos, bootloaders or projects have been ported for the XMEGA devices in the current release,
* although the architecture is supported in the LUFA core library.
* - Endpoints of more than 64 bytes are not currently supported in this release.
* - Isochronous endpoints are not currently supported in this release. As a result, the audio class
* cannot be used on XMEGA devices.
* - Multiple-bank endpoints are not currently supported in this release.
* - Early revisions of the ATXMEGA128A1U are incompatible with LUFA, due to their various errata
* relating to the USB controller.
* - Architecture Independent
* - The HID parser fails for array type elements that have a MIN and MAX usage applied; each element
* in the array will receive a unique incrementing usage from the MIN value, up to MAX.
* - The LUFA library is not watchdog aware, and thus timeouts are possible if short periods are used
* and a lengthy USB operation is initiated.
* - Build System
* - No known issues.
*/

+ 0
- 22
protocol/lufa/LUFA-120730/LUFA/DoxygenPages/LicenseInfo.txt View File

@@ -1,22 +0,0 @@
/** \file
*
* This file contains special DoxyGen information for the generation of the main page and other special
* documentation pages. It is not a project source file.
*/
/**
* \page Page_LicenseInfo Source Code License
*
* The LUFA library is currently released under the MIT license, included below.
*
* Commercial entities can opt out of the public disclosure clause in this license
* for a one-time US$1500 payment. This provides a non-exclusive modified MIT licensed which
* allows for the free use of the LUFA library, bootloaders and (where the sole copyright
* is attributed to Dean Camera) demos without public disclosure within an organization, in
* addition to three free hours of consultation with the library author, and priority support.
* Please visit the Commercial License link on \ref Page_Resources for more information on
* ordering a commercial license for your company.
*
* \verbinclude License.txt
*/

+ 0
- 1123
protocol/lufa/LUFA-120730/LUFA/DoxygenPages/Style/Style.css
File diff suppressed because it is too large
View File


+ 0
- 0
protocol/lufa/LUFA-120730/LUFA/DoxygenPages/VIDAndPIDValues.txt View File


Some files were not shown because too many files changed in this diff