1
0
tmk_keyboard/editor/index.md
2013-09-12 14:40:57 +09:00

156 lines
3.8 KiB
Markdown

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`