Add editor/index.md
This commit is contained in:
parent
fffcf07ad7
commit
adc3d77ed0
@ -1,419 +0,0 @@
|
|||||||
TODO
|
|
||||||
----
|
|
||||||
Better source output
|
|
||||||
KEYMAP macro
|
|
||||||
|
|
||||||
layer operation
|
|
||||||
copy, swap, set all, clear...
|
|
||||||
|
|
||||||
X Share URL
|
|
||||||
X shoten service? 09/07
|
|
||||||
|
|
||||||
Bootloader jump doesn't work
|
|
||||||
|
|
||||||
Keyobard external line graphic
|
|
||||||
|
|
||||||
X test on remote site
|
|
||||||
tmk.github.io/tmk_editor/hhkb/?
|
|
||||||
github pages
|
|
||||||
https://help.github.com/articles/user-organization-and-project-pages
|
|
||||||
|
|
||||||
X save file button
|
|
||||||
https://developer.mozilla.org/en-US/docs/Web/API/Blob
|
|
||||||
var typedArray = GetTheTypedArraySomehow();
|
|
||||||
var blob = new Blob([typedArray], {type: "application/octet-binary"}); // pass a useful mime type here
|
|
||||||
"application/octet-stream"
|
|
||||||
var url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
TrueErgonomic
|
|
||||||
var a = document.getElementById("download-link");
|
|
||||||
a.href = window.URL.createObjectURL(blob);
|
|
||||||
a.download = 'TrulyErgonomic_v3_3.hex';
|
|
||||||
// a.textContent = 'Download file.';
|
|
||||||
a.className = 'TE_link';
|
|
||||||
a.click()
|
|
||||||
|
|
||||||
X keyboard key text css
|
|
||||||
X align of wrapped text
|
|
||||||
|
|
||||||
edit action for FN key
|
|
||||||
action map support
|
|
||||||
Macro editor
|
|
||||||
|
|
||||||
Where it converts key postion into matrix position at?
|
|
||||||
Convert table? UI can use position of elemen placing.
|
|
||||||
UI uses matrix posiotn for ID of element.
|
|
||||||
|
|
||||||
X save hex(binary)
|
|
||||||
|
|
||||||
X firmware
|
|
||||||
P load binary
|
|
||||||
P Mass Storage or HID comm
|
|
||||||
X fixed address for keymaps
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ld script/Firmware structure
|
|
||||||
----------------------------
|
|
||||||
Flash Map of ATMega32U4(32KB)
|
|
||||||
+------------+ 0x0000
|
|
||||||
| .vectors | 0xac (43vectors * 4bytes)
|
|
||||||
| .progmem | PROGMEM variables and PSTR
|
|
||||||
| .init0-9 |
|
|
||||||
| .text | code
|
|
||||||
| .fini9-0 |
|
|
||||||
| | > text region
|
|
||||||
|------------| _etext
|
|
||||||
| .data |
|
|
||||||
| .bss |
|
|
||||||
| .noinit |
|
|
||||||
| | > data region
|
|
||||||
|------------| 0x6800
|
|
||||||
| .keymap | > keymap region(2KB)
|
|
||||||
|------------| 0x7000
|
|
||||||
| bootloader | 4KB
|
|
||||||
+------------+ 0x7FFF
|
|
||||||
|
|
||||||
|
|
||||||
TMK keymapping mode
|
|
||||||
-------------------
|
|
||||||
keymap 8bit code
|
|
||||||
Special 8bit code Fn0-32 can be assigned for action code.
|
|
||||||
actions[] -> ---------------
|
|
||||||
| action x 32 |
|
|
||||||
keymaps[] -> ---------------
|
|
||||||
| keymap 0 |
|
|
||||||
---------------
|
|
||||||
| keymap 1 |
|
|
||||||
---------------
|
|
||||||
| keymap 2 |
|
|
||||||
---------------
|
|
||||||
| keymap 3 |
|
|
||||||
---------------
|
|
||||||
Interface: uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) in keymap.h
|
|
||||||
action_t keymap_fn_to_action(uint8_t keycode) in keymap.h
|
|
||||||
|
|
||||||
static const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[0] = ACTION_LAYER_MOMENTARY(0),
|
|
||||||
[1] = ACTION_LAYER_MOMENTARY(1),
|
|
||||||
[2] = ACTION_LAYER_MOMENTARY(2),
|
|
||||||
[3] = ACTION_LAYER_MOMENTARY(3),
|
|
||||||
[4] = ACTION_LAYER_TOGGLE(0),
|
|
||||||
[5] = ACTION_LAYER_TOGGLE(1),
|
|
||||||
[6] = ACTION_LAYER_TOGGLE(2),
|
|
||||||
[7] = ACTION_LAYER_TOGGLE(3),
|
|
||||||
[8] = ACTION_LAYER_TAP_TOGGLE(0),
|
|
||||||
[9] = ACTION_LAYER_TAP_TOGGLE(1),
|
|
||||||
[10] = ACTION_LAYER_TAP_TOGGLE(2),
|
|
||||||
[11] = ACTION_LAYER_TAP_TOGGLE(3),
|
|
||||||
};
|
|
||||||
|
|
||||||
actionmap 16bit code
|
|
||||||
All key action can be defined in 16bit code.
|
|
||||||
Memory usage will be about doubled size compared to keymap 8bit code.
|
|
||||||
Map Structure:
|
|
||||||
actionmaps[] -> ---------------
|
|
||||||
| actionmap 0 |
|
|
||||||
---------------
|
|
||||||
| actionmap 1 |
|
|
||||||
---------------
|
|
||||||
| actionmap 2 |
|
|
||||||
---------------
|
|
||||||
| actionmap 3 |
|
|
||||||
---------------
|
|
||||||
Interface: action_t action_for_key(uint8_t layer, key_t key) in action.h
|
|
||||||
|
|
||||||
Flash usage cosidaration
|
|
||||||
ATmega32U4
|
|
||||||
32KB Firmware -24KB(with full option)
|
|
||||||
Keymapping 4KB-
|
|
||||||
Bootloader 4KB(Atmel stock) or 512B(Teensy)
|
|
||||||
ATmega16U4
|
|
||||||
16KB Firmware -10KB
|
|
||||||
Keymapping 2KB-
|
|
||||||
Bootloader 4KB(Atmel stock) or 512B(Teensy)
|
|
||||||
PS/2 and ADB have 256 keys in map, so use 512B each layer.
|
|
||||||
8layers will be available for ATMega32U4 and 4layers for 16U4. This seems like enough in most case.
|
|
||||||
|
|
||||||
|
|
||||||
Hex file format
|
|
||||||
http://en.wikipedia.org/wiki/Intel_HEX
|
|
||||||
1.Start code: ':'
|
|
||||||
2.Byte Count: 2 hex(0-255)
|
|
||||||
3.Address: 4 hex(0-2^16)
|
|
||||||
4.Record Type: 2 hex(00-05)
|
|
||||||
00: Data record. which contains 16bit address and data.
|
|
||||||
01: End of File record. It must appear in the last line.(usually :00000001FF)
|
|
||||||
02: Extended Segment Address Record.
|
|
||||||
03: Start Segment Address Record.
|
|
||||||
04: Extended Linear Address Record. Upper two bytes of 32 bit address.
|
|
||||||
05: Start Linear Address Record.
|
|
||||||
5.Data: byte_count * hex(a sequence of bytes)
|
|
||||||
6.Checksum: 2 hex LSB of 2's complement of the sum of fields: 'Byte Count', 'Address', 'Record Type' and 'Data'.
|
|
||||||
checksum = ~(the sum of bytes)&0xff + 1 = (the sum)&0xff^0xff + 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
HHKB key matrix
|
|
||||||
COL 0 1 2 3 4 5 6 7
|
|
||||||
ROW ---------------------------------------------------------------
|
|
||||||
0| 2 q w s a z x c
|
|
||||||
1| 3 4 r e d f v b
|
|
||||||
2| 5 6 y t g h n _NONE_
|
|
||||||
3| 1 Esc Tab Control LShift LAlt LMeta Space
|
|
||||||
4| 7 8 u i k j m _NONE_
|
|
||||||
5| \ ` Delete Return Fn RShift RAlt RMeta
|
|
||||||
6| 9 0 o p ; l , _NONE_
|
|
||||||
7| - + ] [ ' / . _NONE_
|
|
||||||
|
|
||||||
|
|
||||||
Key to matrix Table
|
|
||||||
/* Qwerty
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
* |Gui|Alt | Space |Alt |Gui|
|
|
||||||
* `-------------------------------------------'
|
|
||||||
*/
|
|
||||||
[
|
|
||||||
0x31, 0x30, 0x00, 0x10, 0x11, 0x20, 0x21, 0x40, 0x41, 0x60, 0x61, 0x70, 0x71, 0x50, 0x51,
|
|
||||||
0x32, 0x01, 0x02, 0x13, 0x12, 0x23, 0x22, 0x42, 0x43, 0x62, 0x63, 0x73, 0x72, 0x52,
|
|
||||||
0x33, 0x04, 0x03, 0x14, 0x15, 0x24, 0x25, 0x45, 0x44, 0x65, 0x64, 0x66, 0x53,
|
|
||||||
0x34, 0x05, 0x06, 0x07, 0x16, 0x17, 0x26, 0x46, 0x66, 0x76, 0x75, 0x55, 0x54,
|
|
||||||
0x35, 0x36, 0x37, 0x57, 0x56,
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Keycodes
|
|
||||||
KC_NO = 0x00,
|
|
||||||
KC_ROLL_OVER,
|
|
||||||
KC_POST_FAIL,
|
|
||||||
KC_UNDEFINED,
|
|
||||||
KC_A,
|
|
||||||
KC_B,
|
|
||||||
KC_C,
|
|
||||||
KC_D,
|
|
||||||
KC_E,
|
|
||||||
KC_F,
|
|
||||||
KC_G,
|
|
||||||
KC_H,
|
|
||||||
KC_I,
|
|
||||||
KC_J,
|
|
||||||
KC_K,
|
|
||||||
KC_L,
|
|
||||||
KC_M, /* 0x10 */
|
|
||||||
KC_N,
|
|
||||||
KC_O,
|
|
||||||
KC_P,
|
|
||||||
KC_Q,
|
|
||||||
KC_R,
|
|
||||||
KC_S,
|
|
||||||
KC_T,
|
|
||||||
KC_U,
|
|
||||||
KC_V,
|
|
||||||
KC_W,
|
|
||||||
KC_X,
|
|
||||||
KC_Y,
|
|
||||||
KC_Z,
|
|
||||||
KC_1,
|
|
||||||
KC_2,
|
|
||||||
KC_3, /* 0x20 */
|
|
||||||
KC_4,
|
|
||||||
KC_5,
|
|
||||||
KC_6,
|
|
||||||
KC_7,
|
|
||||||
KC_8,
|
|
||||||
KC_9,
|
|
||||||
KC_0,
|
|
||||||
KC_ENTER,
|
|
||||||
KC_ESCAPE,
|
|
||||||
KC_BSPACE,
|
|
||||||
KC_TAB,
|
|
||||||
KC_SPACE,
|
|
||||||
KC_MINUS,
|
|
||||||
KC_EQUAL,
|
|
||||||
KC_LBRACKET,
|
|
||||||
KC_RBRACKET, /* 0x30 */
|
|
||||||
KC_BSLASH, /* \ (and |) */
|
|
||||||
KC_NONUS_HASH, /* Non-US # and ~ */
|
|
||||||
KC_SCOLON, /* ; (and :) */
|
|
||||||
KC_QUOTE, /* ' and " */
|
|
||||||
KC_GRAVE, /* Grave accent and tilde */
|
|
||||||
KC_COMMA, /* , and < */
|
|
||||||
KC_DOT, /* . and > */
|
|
||||||
KC_SLASH, /* / and ? */
|
|
||||||
KC_CAPSLOCK,
|
|
||||||
KC_F1,
|
|
||||||
KC_F2,
|
|
||||||
KC_F3,
|
|
||||||
KC_F4,
|
|
||||||
KC_F5,
|
|
||||||
KC_F6,
|
|
||||||
KC_F7, /* 0x40 */
|
|
||||||
KC_F8,
|
|
||||||
KC_F9,
|
|
||||||
KC_F10,
|
|
||||||
KC_F11,
|
|
||||||
KC_F12,
|
|
||||||
KC_PSCREEN,
|
|
||||||
KC_SCROLLLOCK,
|
|
||||||
KC_PAUSE,
|
|
||||||
KC_INSERT,
|
|
||||||
KC_HOME,
|
|
||||||
KC_PGUP,
|
|
||||||
KC_DELETE,
|
|
||||||
KC_END,
|
|
||||||
KC_PGDOWN,
|
|
||||||
KC_RIGHT,
|
|
||||||
KC_LEFT, /* 0x50 */
|
|
||||||
KC_DOWN,
|
|
||||||
KC_UP,
|
|
||||||
KC_NUMLOCK,
|
|
||||||
KC_KP_SLASH,
|
|
||||||
KC_KP_ASTERISK,
|
|
||||||
KC_KP_MINUS,
|
|
||||||
KC_KP_PLUS,
|
|
||||||
KC_KP_ENTER,
|
|
||||||
KC_KP_1,
|
|
||||||
KC_KP_2,
|
|
||||||
KC_KP_3,
|
|
||||||
KC_KP_4,
|
|
||||||
KC_KP_5,
|
|
||||||
KC_KP_6,
|
|
||||||
KC_KP_7,
|
|
||||||
KC_KP_8, /* 0x60 */
|
|
||||||
KC_KP_9,
|
|
||||||
KC_KP_0,
|
|
||||||
KC_KP_DOT,
|
|
||||||
KC_NONUS_BSLASH, /* Non-US \ and | */
|
|
||||||
KC_APPLICATION,
|
|
||||||
KC_POWER,
|
|
||||||
KC_KP_EQUAL,
|
|
||||||
KC_F13,
|
|
||||||
KC_F14,
|
|
||||||
KC_F15,
|
|
||||||
KC_F16,
|
|
||||||
KC_F17,
|
|
||||||
KC_F18,
|
|
||||||
KC_F19,
|
|
||||||
KC_F20,
|
|
||||||
KC_F21, /* 0x70 */
|
|
||||||
KC_F22,
|
|
||||||
KC_F23,
|
|
||||||
KC_F24,
|
|
||||||
KC_EXECUTE,
|
|
||||||
KC_HELP,
|
|
||||||
KC_MENU,
|
|
||||||
KC_SELECT,
|
|
||||||
KC_STOP,
|
|
||||||
KC_AGAIN,
|
|
||||||
KC_UNDO,
|
|
||||||
KC_CUT,
|
|
||||||
KC_COPY,
|
|
||||||
KC_PASTE,
|
|
||||||
KC_FIND,
|
|
||||||
KC__MUTE,
|
|
||||||
KC__VOLUP, /* 0x80 */
|
|
||||||
KC__VOLDOWN,
|
|
||||||
KC_LOCKING_CAPS, /* locking Caps Lock */
|
|
||||||
KC_LOCKING_NUM, /* locking Num Lock */
|
|
||||||
KC_LOCKING_SCROLL, /* locking Scroll Lock */
|
|
||||||
KC_KP_COMMA,
|
|
||||||
KC_KP_EQUAL_AS400, /* equal sign on AS/400 */
|
|
||||||
KC_INT1,
|
|
||||||
KC_INT2,
|
|
||||||
KC_INT3,
|
|
||||||
KC_INT4,
|
|
||||||
KC_INT5,
|
|
||||||
KC_INT6,
|
|
||||||
KC_INT7,
|
|
||||||
KC_INT8,
|
|
||||||
KC_INT9,
|
|
||||||
KC_LANG1, /* 0x90 */
|
|
||||||
KC_LANG2,
|
|
||||||
KC_LANG3,
|
|
||||||
KC_LANG4,
|
|
||||||
KC_LANG5,
|
|
||||||
KC_LANG6,
|
|
||||||
KC_LANG7,
|
|
||||||
KC_LANG8,
|
|
||||||
KC_LANG9,
|
|
||||||
KC_ALT_ERASE,
|
|
||||||
KC_SYSREQ,
|
|
||||||
KC_CANCEL,
|
|
||||||
KC_CLEAR,
|
|
||||||
KC_PRIOR,
|
|
||||||
KC_RETURN,
|
|
||||||
KC_SEPARATOR,
|
|
||||||
KC_OUT, /* 0xA0 */
|
|
||||||
KC_OPER,
|
|
||||||
KC_CLEAR_AGAIN,
|
|
||||||
KC_CRSEL,
|
|
||||||
KC_EXSEL, /* 0xA4 */
|
|
||||||
|
|
||||||
/* NOTE: Following codes(0xB0-DD) are not used. Leave them for reference. */
|
|
||||||
KC_KP_00 = 0xB0,
|
|
||||||
KC_KP_000,
|
|
||||||
KC_THOUSANDS_SEPARATOR,
|
|
||||||
KC_DECIMAL_SEPARATOR,
|
|
||||||
KC_CURRENCY_UNIT,
|
|
||||||
KC_CURRENCY_SUB_UNIT,
|
|
||||||
KC_KP_LPAREN,
|
|
||||||
KC_KP_RPAREN,
|
|
||||||
KC_KP_LCBRACKET, /* { */
|
|
||||||
KC_KP_RCBRACKET, /* } */
|
|
||||||
KC_KP_TAB,
|
|
||||||
KC_KP_BSPACE,
|
|
||||||
KC_KP_A,
|
|
||||||
KC_KP_B,
|
|
||||||
KC_KP_C,
|
|
||||||
KC_KP_D,
|
|
||||||
KC_KP_E, /* 0xC0 */
|
|
||||||
KC_KP_F,
|
|
||||||
KC_KP_XOR,
|
|
||||||
KC_KP_HAT,
|
|
||||||
KC_KP_PERC,
|
|
||||||
KC_KP_LT,
|
|
||||||
KC_KP_GT,
|
|
||||||
KC_KP_AND,
|
|
||||||
KC_KP_LAZYAND,
|
|
||||||
KC_KP_OR,
|
|
||||||
KC_KP_LAZYOR,
|
|
||||||
KC_KP_COLON,
|
|
||||||
KC_KP_HASH,
|
|
||||||
KC_KP_SPACE,
|
|
||||||
KC_KP_ATMARK,
|
|
||||||
KC_KP_EXCLAMATION,
|
|
||||||
KC_KP_MEM_STORE, /* 0xD0 */
|
|
||||||
KC_KP_MEM_RECALL,
|
|
||||||
KC_KP_MEM_CLEAR,
|
|
||||||
KC_KP_MEM_ADD,
|
|
||||||
KC_KP_MEM_SUB,
|
|
||||||
KC_KP_MEM_MUL,
|
|
||||||
KC_KP_MEM_DIV,
|
|
||||||
KC_KP_PLUS_MINUS,
|
|
||||||
KC_KP_CLEAR,
|
|
||||||
KC_KP_CLEAR_ENTRY,
|
|
||||||
KC_KP_BINARY,
|
|
||||||
KC_KP_OCTAL,
|
|
||||||
KC_KP_DECIMAL,
|
|
||||||
KC_KP_HEXADECIMAL, /* 0xDD */
|
|
||||||
|
|
||||||
/* Modifiers */
|
|
||||||
KC_LCTRL = 0xE0,
|
|
||||||
KC_LSHIFT,
|
|
||||||
KC_LALT,
|
|
||||||
KC_LGUI,
|
|
||||||
KC_RCTRL,
|
|
||||||
KC_RSHIFT,
|
|
||||||
KC_RALT,
|
|
||||||
KC_RGUI,
|
|
155
editor/index.md
Normal file
155
editor/index.md
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
Keymap Editor for TMK firmware
|
||||||
|
==============================
|
||||||
|
|
||||||
|
- [HHKB](hhkb/index.html)
|
||||||
|
|
||||||
|
|
||||||
|
Instruction
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
Limitation
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
TODO & MEMO
|
||||||
|
------------
|
||||||
|
### Edit action for FN key
|
||||||
|
### Better source output
|
||||||
|
KEYMAP macro
|
||||||
|
### Actionmap support
|
||||||
|
### Macro editor
|
||||||
|
### Layer operation
|
||||||
|
copy, swap, set all, clear...
|
||||||
|
### Compress share URL
|
||||||
|
lz-string.js
|
||||||
|
|
||||||
|
### Bootloader jump doesn't work
|
||||||
|
### Better Keyobard graphic
|
||||||
|
### Keyobard layout screenshot
|
||||||
|
- HTML5 canvas
|
||||||
|
- png image file output
|
||||||
|
|
||||||
|
|
||||||
|
ldscript and Flash Memory
|
||||||
|
-------------------------
|
||||||
|
`ldscript_keymap_avr5.x` is ldscript and located at top directory. Using
|
||||||
|
|
||||||
|
Flash Memroy Map of ATMega32U4(32KB)
|
||||||
|
|
||||||
|
+--------------------+ 0x0000
|
||||||
|
| .vectors | 0xac (43vectors * 4bytes)
|
||||||
|
| .progmem | PROGMEM variables and PSTR
|
||||||
|
| .init0-9 |
|
||||||
|
| .text | code
|
||||||
|
| .fini9-0 |
|
||||||
|
| | > text region
|
||||||
|
|--------------------| _etext
|
||||||
|
| .data |
|
||||||
|
| .bss |
|
||||||
|
| .noinit |
|
||||||
|
| | > data region
|
||||||
|
|--------------------| 0x6800
|
||||||
|
| .keymap.fn_actions |
|
||||||
|
| .keymap.keymaps | > keymap region(2KB)
|
||||||
|
|--------------------| 0x7000
|
||||||
|
| bootloader | 4KB
|
||||||
|
+--------------------+ 0x7FFF
|
||||||
|
|
||||||
|
|
||||||
|
Keymap(8bit code)
|
||||||
|
-----------------
|
||||||
|
`const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions")))`
|
||||||
|
`const uint8_t keymaps[8][ROW][COL] __attribute__ ((section (".keymap.keymaps")))`
|
||||||
|
|
||||||
|
These arrays are placed at fixed address in .keymap section:
|
||||||
|
|
||||||
|
|
||||||
|
actions[] -> +-------------+
|
||||||
|
| action x 32 |
|
||||||
|
keymaps[] -> |-------------|
|
||||||
|
| keymap 0 |
|
||||||
|
|-------------|
|
||||||
|
| keymap 1 |
|
||||||
|
|-------------|
|
||||||
|
| keymap 2 |
|
||||||
|
|-------------|
|
||||||
|
| keymap 3 |
|
||||||
|
|-------------|
|
||||||
|
| : : |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Actionmap(16bit code)
|
||||||
|
---------------------
|
||||||
|
`const uint16_t actionmaps[] __attribute__ ((section (".keymap.actionmaps")))`
|
||||||
|
|
||||||
|
All key action can be defined in 16bit code. Memory usage will be about doubled size compared to keymap(8bit code).
|
||||||
|
|
||||||
|
actionmaps[] -> +-------------+
|
||||||
|
| actionmap 0 |
|
||||||
|
|-------------|
|
||||||
|
| actionmap 1 |
|
||||||
|
|-------------|
|
||||||
|
| actionmap 2 |
|
||||||
|
|-------------|
|
||||||
|
| actionmap 3 |
|
||||||
|
|-------------|
|
||||||
|
| : : |
|
||||||
|
|
||||||
|
|
||||||
|
Flash usage cosidaration
|
||||||
|
------------------------
|
||||||
|
For example of biggest ever map, PS/2 and ADB converter have 256 keys in a layer, so use 256 bytes each layer in keymap and 512 bytes in actionmap.
|
||||||
|
In most cases map size of keyboard will be far smaller than that.
|
||||||
|
|
||||||
|
### ATmega32U4
|
||||||
|
|
||||||
|
Firmware -24KB(with full option)
|
||||||
|
Keymapping 4KB-
|
||||||
|
Bootloader 4KB(Atmel stock) or 512B(Teensy)
|
||||||
|
|
||||||
|
### ATmega16U4(Not suppoeted yet)
|
||||||
|
|
||||||
|
Firmware -10KB
|
||||||
|
Keymapping 2KB-
|
||||||
|
Bootloader 4KB(Atmel stock) or 512B(Teensy)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Hex file format
|
||||||
|
---------------
|
||||||
|
[Intel Hex(wikipedia)](http://en.wikipedia.org/wiki/Intel_HEX)
|
||||||
|
|
||||||
|
### 1.Start code
|
||||||
|
':'
|
||||||
|
|
||||||
|
### 2.Byte Count
|
||||||
|
2 x hex(0-FF)
|
||||||
|
|
||||||
|
### 3.Address
|
||||||
|
4 x hex(0-FFFF)
|
||||||
|
|
||||||
|
### 4.Record Type
|
||||||
|
2 x hex(00-05)
|
||||||
|
|
||||||
|
#### Record Type code
|
||||||
|
00: Data record. which contains 16bit address and data.
|
||||||
|
01: End of File record. It must appear in the last line.(usually :00000001FF)
|
||||||
|
02: Extended Segment Address Record.
|
||||||
|
03: Start Segment Address Record.
|
||||||
|
04: Extended Linear Address Record. Upper two bytes of 32 bit address.
|
||||||
|
05: Start Linear Address Record.
|
||||||
|
|
||||||
|
### 5.Data
|
||||||
|
byte_count * hex(00-FF)
|
||||||
|
|
||||||
|
a sequence of data bytes
|
||||||
|
|
||||||
|
### 6.Checksum
|
||||||
|
2 x hex(00-FF)
|
||||||
|
|
||||||
|
LSB of 2's complement of the sum of fields[ 'Byte Count', 'Address', 'Record Type' and 'Data' ]
|
||||||
|
|
||||||
|
`checksum = ~(the sum of bytes)&0xff + 1 = (the sum)&0xff^0xff + 1`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user