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
This commit is contained in:
commit
432b1df3e4
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -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
|
106
README.md
106
README.md
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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++;
|
||||
}
|
||||
}
|
@ -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
|
@ -1,111 +0,0 @@
|
||||
/*
|
||||
Copyright 2013,2014 Kai Ryu <kai1103@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <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
|
@ -1,73 +0,0 @@
|
||||
/*
|
||||
Copyright 2013,2014 Kai Ryu <kai1103@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef 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
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
Copyright 2013,2014 Kai Ryu <kai1103@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <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();
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
/*
|
||||
Copyright 2013,2014 Kai Ryu <kai1103@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef 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
|
135
common/ledmap.c
135
common/ledmap.c
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
),
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
converter/ibm4704_usb/keymap_50key.c
Normal file
17
converter/ibm4704_usb/keymap_50key.c
Normal 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[] = {
|
||||
};
|
||||
|
||||
|
@ -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 } \
|
||||
}
|
||||
|
||||
/* 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 \
|
||||
)
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
{ 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 }, \
|
||||
*/
|
||||
|
@ -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, \
|
||||
|
@ -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 \
|
||||
),
|
||||
};
|
||||
|
||||
|
@ -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_setup(void)
|
||||
{
|
||||
ibm4704_init();
|
||||
}
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
uint8_t ret;
|
||||
debug_enable = true;
|
||||
|
||||
ibm4704_init();
|
||||
matrix_clear();
|
||||
|
||||
// read keyboard id
|
||||
while ((ret = ibm4704_recv()) == 0xFF) {
|
||||
ibm4704_send(0xFE);
|
||||
_delay_us(100);
|
||||
}
|
||||
|
||||
_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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,6 +1,6 @@
|
||||
PROJECT = ps2_usb
|
||||
|
||||
TMK_DIR = ../..
|
||||
TMK_DIR = ../../tmk_core
|
||||
MBED_DIR = $(TMK_DIR)/mbed-sdk
|
||||
|
||||
#VPATH += $(MBED_DIR):$(TMK_DIR)
|
||||
|
@ -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,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,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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)); \
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
converter/sun_usb/keymap_sun3.c
Normal file
173
converter/sun_usb/keymap_sun3.c
Normal file
@ -0,0 +1,173 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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]);
|
||||
}
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
),
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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|
|
||||
* |-----------------------------------------------------------|
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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*
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,6 +1,6 @@
|
||||
PROJECT = mbed_onekey
|
||||
|
||||
TMK_DIR = ../..
|
||||
TMK_DIR = ../../tmk_core
|
||||
MBED_DIR = $(TMK_DIR)/mbed-sdk
|
||||
|
||||
#VPATH += $(MBED_DIR):$(TMK_DIR)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
File diff suppressed because it is too large
Load Diff
@ -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.
|
||||
*/
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,424 +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_VIDPID VID and PID values
|
||||
*
|
||||
* \section Sec_VIDPID_Allocations VID and PID Allocations
|
||||
* The LUFA library uses VID/PID combinations generously donated by Atmel. The following VID/PID combinations
|
||||
* are used within the LUFA demos, and thus may be re-used by derivations of each demo. Free PID values may be
|
||||
* used by future LUFA demo projects.
|
||||
*
|
||||
* <b>These VID/PID values should not be used in commercial designs under any circumstances.</b> Private projects
|
||||
* may use the following values freely, but must accept any collisions due to other LUFA derived private projects
|
||||
* sharing identical values. It is suggested that private projects using interfaces compatible with existing
|
||||
* demos share the same VID/PID value.
|
||||
*
|
||||
* <table>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* <b>VID</b>
|
||||
* </td>
|
||||
* <td>
|
||||
* <b>PID</b>
|
||||
* </td>
|
||||
* <td>
|
||||
* <b>Usage</b>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2040
|
||||
* </td>
|
||||
* <td>
|
||||
* Test VID/PID (See below)
|
||||
* </td>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2041
|
||||
* </td>
|
||||
* <td>
|
||||
* Mouse Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2042
|
||||
* </td>
|
||||
* <td>
|
||||
* Keyboard Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2043
|
||||
* </td>
|
||||
* <td>
|
||||
* Joystick Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2044
|
||||
* </td>
|
||||
* <td>
|
||||
* CDC Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2045
|
||||
* </td>
|
||||
* <td>
|
||||
* Mass Storage Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2046
|
||||
* </td>
|
||||
* <td>
|
||||
* Audio Output Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2047
|
||||
* </td>
|
||||
* <td>
|
||||
* Audio Input Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2048
|
||||
* </td>
|
||||
* <td>
|
||||
* MIDI Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2049
|
||||
* </td>
|
||||
* <td>
|
||||
* MagStripe Project
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204A
|
||||
* </td>
|
||||
* <td>
|
||||
* CDC Bootloader
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204B
|
||||
* </td>
|
||||
* <td>
|
||||
* USB to Serial Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204C
|
||||
* </td>
|
||||
* <td>
|
||||
* RNDIS Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204D
|
||||
* </td>
|
||||
* <td>
|
||||
* Combined Keyboard and Mouse Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204E
|
||||
* </td>
|
||||
* <td>
|
||||
* Dual CDC Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x204F
|
||||
* </td>
|
||||
* <td>
|
||||
* Generic HID Demo Application
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2060
|
||||
* </td>
|
||||
* <td>
|
||||
* Benito Programmer Project
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2061
|
||||
* </td>
|
||||
* <td>
|
||||
* Combined Mass Storage and Keyboard Demo
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2062
|
||||
* </td>
|
||||
* <td>
|
||||
* Combined CDC and Mouse Demo
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2063
|
||||
* </td>
|
||||
* <td>
|
||||
* Mass Storage/HID Interface Datalogger Project
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2064
|
||||
* </td>
|
||||
* <td>
|
||||
* Interfaceless Control-Only LUFA Devices
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2065
|
||||
* </td>
|
||||
* <td>
|
||||
* Test and Measurement Demo
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2066
|
||||
* </td>
|
||||
* <td>
|
||||
* Multiple Report Keyboard/Mouse HID Demo
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2067
|
||||
* </td>
|
||||
* <td>
|
||||
* HID Class Bootloader
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2068
|
||||
* </td>
|
||||
* <td>
|
||||
* Virtual Serial/Mass Storage Demo
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x2069
|
||||
* </td>
|
||||
* <td>
|
||||
* Webserver Project
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206A
|
||||
* </td>
|
||||
* <td>
|
||||
* Media Control Project
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206B
|
||||
* </td>
|
||||
* <td>
|
||||
* <i>Currently Unallocated</i>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206C
|
||||
* </td>
|
||||
* <td>
|
||||
* <i>Currently Unallocated</i>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206D
|
||||
* </td>
|
||||
* <td>
|
||||
* <i>Currently Unallocated</i>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206E
|
||||
* </td>
|
||||
* <td>
|
||||
* <i>Currently Unallocated</i>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>
|
||||
* 0x03EB
|
||||
* </td>
|
||||
* <td>
|
||||
* 0x206F
|
||||
* </td>
|
||||
* <td>
|
||||
* <i>Currently Unallocated</i>
|
||||
* </td>
|
||||
* </tr>
|
||||
*
|
||||
* </table>
|
||||
*
|
||||
* \section Sec_Test_VIDPID The Test VID/PID Combination
|
||||
* For use in testing of LUFA powered devices during development only, by non-commercial entities.
|
||||
* All devices must accept collisions on this VID/PID range (from other in-development LUFA devices)
|
||||
* to be resolved by using a unique release number in the Device Descriptor. No devices using this
|
||||
* VID/PID combination may be released to the general public.
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user