Keyboard firmwares for Atmel AVR and Cortex-M
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

MEMO.txt 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. TODO
  2. ----
  3. Better source output
  4. KEYMAP macro
  5. layer operation
  6. copy, swap, set all, clear...
  7. X Share URL
  8. X shoten service? 09/07
  9. Bootloader jump doesn't work
  10. Keyobard external line graphic
  11. X test on remote site
  12. tmk.github.io/tmk_editor/hhkb/?
  13. github pages
  14. https://help.github.com/articles/user-organization-and-project-pages
  15. X save file button
  16. https://developer.mozilla.org/en-US/docs/Web/API/Blob
  17. var typedArray = GetTheTypedArraySomehow();
  18. var blob = new Blob([typedArray], {type: "application/octet-binary"}); // pass a useful mime type here
  19. "application/octet-stream"
  20. var url = URL.createObjectURL(blob);
  21. TrueErgonomic
  22. var a = document.getElementById("download-link");
  23. a.href = window.URL.createObjectURL(blob);
  24. a.download = 'TrulyErgonomic_v3_3.hex';
  25. // a.textContent = 'Download file.';
  26. a.className = 'TE_link';
  27. a.click()
  28. X keyboard key text css
  29. X align of wrapped text
  30. edit action for FN key
  31. action map support
  32. Macro editor
  33. Where it converts key postion into matrix position at?
  34. Convert table? UI can use position of elemen placing.
  35. UI uses matrix posiotn for ID of element.
  36. X save hex(binary)
  37. X firmware
  38. P load binary
  39. P Mass Storage or HID comm
  40. X fixed address for keymaps
  41. ld script/Firmware structure
  42. ----------------------------
  43. Flash Map of ATMega32U4(32KB)
  44. +------------+ 0x0000
  45. | .vectors | 0xac (43vectors * 4bytes)
  46. | .progmem | PROGMEM variables and PSTR
  47. | .init0-9 |
  48. | .text | code
  49. | .fini9-0 |
  50. | | > text region
  51. |------------| _etext
  52. | .data |
  53. | .bss |
  54. | .noinit |
  55. | | > data region
  56. |------------| 0x6800
  57. | .keymap | > keymap region(2KB)
  58. |------------| 0x7000
  59. | bootloader | 4KB
  60. +------------+ 0x7FFF
  61. TMK keymapping mode
  62. -------------------
  63. keymap 8bit code
  64. Special 8bit code Fn0-32 can be assigned for action code.
  65. actions[] -> ---------------
  66. | action x 32 |
  67. keymaps[] -> ---------------
  68. | keymap 0 |
  69. ---------------
  70. | keymap 1 |
  71. ---------------
  72. | keymap 2 |
  73. ---------------
  74. | keymap 3 |
  75. ---------------
  76. Interface: uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) in keymap.h
  77. action_t keymap_fn_to_action(uint8_t keycode) in keymap.h
  78. static const uint16_t PROGMEM fn_actions[] = {
  79. [0] = ACTION_LAYER_MOMENTARY(0),
  80. [1] = ACTION_LAYER_MOMENTARY(1),
  81. [2] = ACTION_LAYER_MOMENTARY(2),
  82. [3] = ACTION_LAYER_MOMENTARY(3),
  83. [4] = ACTION_LAYER_TOGGLE(0),
  84. [5] = ACTION_LAYER_TOGGLE(1),
  85. [6] = ACTION_LAYER_TOGGLE(2),
  86. [7] = ACTION_LAYER_TOGGLE(3),
  87. [8] = ACTION_LAYER_TAP_TOGGLE(0),
  88. [9] = ACTION_LAYER_TAP_TOGGLE(1),
  89. [10] = ACTION_LAYER_TAP_TOGGLE(2),
  90. [11] = ACTION_LAYER_TAP_TOGGLE(3),
  91. };
  92. actionmap 16bit code
  93. All key action can be defined in 16bit code.
  94. Memory usage will be about doubled size compared to keymap 8bit code.
  95. Map Structure:
  96. actionmaps[] -> ---------------
  97. | actionmap 0 |
  98. ---------------
  99. | actionmap 1 |
  100. ---------------
  101. | actionmap 2 |
  102. ---------------
  103. | actionmap 3 |
  104. ---------------
  105. Interface: action_t action_for_key(uint8_t layer, key_t key) in action.h
  106. Flash usage cosidaration
  107. ATmega32U4
  108. 32KB Firmware -24KB(with full option)
  109. Keymapping 4KB-
  110. Bootloader 4KB(Atmel stock) or 512B(Teensy)
  111. ATmega16U4
  112. 16KB Firmware -10KB
  113. Keymapping 2KB-
  114. Bootloader 4KB(Atmel stock) or 512B(Teensy)
  115. PS/2 and ADB have 256 keys in map, so use 512B each layer.
  116. 8layers will be available for ATMega32U4 and 4layers for 16U4. This seems like enough in most case.
  117. Hex file format
  118. http://en.wikipedia.org/wiki/Intel_HEX
  119. 1.Start code: ':'
  120. 2.Byte Count: 2 hex(0-255)
  121. 3.Address: 4 hex(0-2^16)
  122. 4.Record Type: 2 hex(00-05)
  123. 00: Data record. which contains 16bit address and data.
  124. 01: End of File record. It must appear in the last line.(usually :00000001FF)
  125. 02: Extended Segment Address Record.
  126. 03: Start Segment Address Record.
  127. 04: Extended Linear Address Record. Upper two bytes of 32 bit address.
  128. 05: Start Linear Address Record.
  129. 5.Data: byte_count * hex(a sequence of bytes)
  130. 6.Checksum: 2 hex LSB of 2's complement of the sum of fields: 'Byte Count', 'Address', 'Record Type' and 'Data'.
  131. checksum = ~(the sum of bytes)&0xff + 1 = (the sum)&0xff^0xff + 1
  132. HHKB key matrix
  133. COL 0 1 2 3 4 5 6 7
  134. ROW ---------------------------------------------------------------
  135. 0| 2 q w s a z x c
  136. 1| 3 4 r e d f v b
  137. 2| 5 6 y t g h n _NONE_
  138. 3| 1 Esc Tab Control LShift LAlt LMeta Space
  139. 4| 7 8 u i k j m _NONE_
  140. 5| \ ` Delete Return Fn RShift RAlt RMeta
  141. 6| 9 0 o p ; l , _NONE_
  142. 7| - + ] [ ' / . _NONE_
  143. Key to matrix Table
  144. /* Qwerty
  145. * ,-----------------------------------------------------------.
  146. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
  147. * |-----------------------------------------------------------|
  148. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
  149. * |-----------------------------------------------------------|
  150. * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
  151. * |-----------------------------------------------------------|
  152. * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
  153. * `-----------------------------------------------------------'
  154. * |Gui|Alt | Space |Alt |Gui|
  155. * `-------------------------------------------'
  156. */
  157. [
  158. 0x31, 0x30, 0x00, 0x10, 0x11, 0x20, 0x21, 0x40, 0x41, 0x60, 0x61, 0x70, 0x71, 0x50, 0x51,
  159. 0x32, 0x01, 0x02, 0x13, 0x12, 0x23, 0x22, 0x42, 0x43, 0x62, 0x63, 0x73, 0x72, 0x52,
  160. 0x33, 0x04, 0x03, 0x14, 0x15, 0x24, 0x25, 0x45, 0x44, 0x65, 0x64, 0x66, 0x53,
  161. 0x34, 0x05, 0x06, 0x07, 0x16, 0x17, 0x26, 0x46, 0x66, 0x76, 0x75, 0x55, 0x54,
  162. 0x35, 0x36, 0x37, 0x57, 0x56,
  163. ]
  164. Keycodes
  165. KC_NO = 0x00,
  166. KC_ROLL_OVER,
  167. KC_POST_FAIL,
  168. KC_UNDEFINED,
  169. KC_A,
  170. KC_B,
  171. KC_C,
  172. KC_D,
  173. KC_E,
  174. KC_F,
  175. KC_G,
  176. KC_H,
  177. KC_I,
  178. KC_J,
  179. KC_K,
  180. KC_L,
  181. KC_M, /* 0x10 */
  182. KC_N,
  183. KC_O,
  184. KC_P,
  185. KC_Q,
  186. KC_R,
  187. KC_S,
  188. KC_T,
  189. KC_U,
  190. KC_V,
  191. KC_W,
  192. KC_X,
  193. KC_Y,
  194. KC_Z,
  195. KC_1,
  196. KC_2,
  197. KC_3, /* 0x20 */
  198. KC_4,
  199. KC_5,
  200. KC_6,
  201. KC_7,
  202. KC_8,
  203. KC_9,
  204. KC_0,
  205. KC_ENTER,
  206. KC_ESCAPE,
  207. KC_BSPACE,
  208. KC_TAB,
  209. KC_SPACE,
  210. KC_MINUS,
  211. KC_EQUAL,
  212. KC_LBRACKET,
  213. KC_RBRACKET, /* 0x30 */
  214. KC_BSLASH, /* \ (and |) */
  215. KC_NONUS_HASH, /* Non-US # and ~ */
  216. KC_SCOLON, /* ; (and :) */
  217. KC_QUOTE, /* ' and " */
  218. KC_GRAVE, /* Grave accent and tilde */
  219. KC_COMMA, /* , and < */
  220. KC_DOT, /* . and > */
  221. KC_SLASH, /* / and ? */
  222. KC_CAPSLOCK,
  223. KC_F1,
  224. KC_F2,
  225. KC_F3,
  226. KC_F4,
  227. KC_F5,
  228. KC_F6,
  229. KC_F7, /* 0x40 */
  230. KC_F8,
  231. KC_F9,
  232. KC_F10,
  233. KC_F11,
  234. KC_F12,
  235. KC_PSCREEN,
  236. KC_SCROLLLOCK,
  237. KC_PAUSE,
  238. KC_INSERT,
  239. KC_HOME,
  240. KC_PGUP,
  241. KC_DELETE,
  242. KC_END,
  243. KC_PGDOWN,
  244. KC_RIGHT,
  245. KC_LEFT, /* 0x50 */
  246. KC_DOWN,
  247. KC_UP,
  248. KC_NUMLOCK,
  249. KC_KP_SLASH,
  250. KC_KP_ASTERISK,
  251. KC_KP_MINUS,
  252. KC_KP_PLUS,
  253. KC_KP_ENTER,
  254. KC_KP_1,
  255. KC_KP_2,
  256. KC_KP_3,
  257. KC_KP_4,
  258. KC_KP_5,
  259. KC_KP_6,
  260. KC_KP_7,
  261. KC_KP_8, /* 0x60 */
  262. KC_KP_9,
  263. KC_KP_0,
  264. KC_KP_DOT,
  265. KC_NONUS_BSLASH, /* Non-US \ and | */
  266. KC_APPLICATION,
  267. KC_POWER,
  268. KC_KP_EQUAL,
  269. KC_F13,
  270. KC_F14,
  271. KC_F15,
  272. KC_F16,
  273. KC_F17,
  274. KC_F18,
  275. KC_F19,
  276. KC_F20,
  277. KC_F21, /* 0x70 */
  278. KC_F22,
  279. KC_F23,
  280. KC_F24,
  281. KC_EXECUTE,
  282. KC_HELP,
  283. KC_MENU,
  284. KC_SELECT,
  285. KC_STOP,
  286. KC_AGAIN,
  287. KC_UNDO,
  288. KC_CUT,
  289. KC_COPY,
  290. KC_PASTE,
  291. KC_FIND,
  292. KC__MUTE,
  293. KC__VOLUP, /* 0x80 */
  294. KC__VOLDOWN,
  295. KC_LOCKING_CAPS, /* locking Caps Lock */
  296. KC_LOCKING_NUM, /* locking Num Lock */
  297. KC_LOCKING_SCROLL, /* locking Scroll Lock */
  298. KC_KP_COMMA,
  299. KC_KP_EQUAL_AS400, /* equal sign on AS/400 */
  300. KC_INT1,
  301. KC_INT2,
  302. KC_INT3,
  303. KC_INT4,
  304. KC_INT5,
  305. KC_INT6,
  306. KC_INT7,
  307. KC_INT8,
  308. KC_INT9,
  309. KC_LANG1, /* 0x90 */
  310. KC_LANG2,
  311. KC_LANG3,
  312. KC_LANG4,
  313. KC_LANG5,
  314. KC_LANG6,
  315. KC_LANG7,
  316. KC_LANG8,
  317. KC_LANG9,
  318. KC_ALT_ERASE,
  319. KC_SYSREQ,
  320. KC_CANCEL,
  321. KC_CLEAR,
  322. KC_PRIOR,
  323. KC_RETURN,
  324. KC_SEPARATOR,
  325. KC_OUT, /* 0xA0 */
  326. KC_OPER,
  327. KC_CLEAR_AGAIN,
  328. KC_CRSEL,
  329. KC_EXSEL, /* 0xA4 */
  330. /* NOTE: Following codes(0xB0-DD) are not used. Leave them for reference. */
  331. KC_KP_00 = 0xB0,
  332. KC_KP_000,
  333. KC_THOUSANDS_SEPARATOR,
  334. KC_DECIMAL_SEPARATOR,
  335. KC_CURRENCY_UNIT,
  336. KC_CURRENCY_SUB_UNIT,
  337. KC_KP_LPAREN,
  338. KC_KP_RPAREN,
  339. KC_KP_LCBRACKET, /* { */
  340. KC_KP_RCBRACKET, /* } */
  341. KC_KP_TAB,
  342. KC_KP_BSPACE,
  343. KC_KP_A,
  344. KC_KP_B,
  345. KC_KP_C,
  346. KC_KP_D,
  347. KC_KP_E, /* 0xC0 */
  348. KC_KP_F,
  349. KC_KP_XOR,
  350. KC_KP_HAT,
  351. KC_KP_PERC,
  352. KC_KP_LT,
  353. KC_KP_GT,
  354. KC_KP_AND,
  355. KC_KP_LAZYAND,
  356. KC_KP_OR,
  357. KC_KP_LAZYOR,
  358. KC_KP_COLON,
  359. KC_KP_HASH,
  360. KC_KP_SPACE,
  361. KC_KP_ATMARK,
  362. KC_KP_EXCLAMATION,
  363. KC_KP_MEM_STORE, /* 0xD0 */
  364. KC_KP_MEM_RECALL,
  365. KC_KP_MEM_CLEAR,
  366. KC_KP_MEM_ADD,
  367. KC_KP_MEM_SUB,
  368. KC_KP_MEM_MUL,
  369. KC_KP_MEM_DIV,
  370. KC_KP_PLUS_MINUS,
  371. KC_KP_CLEAR,
  372. KC_KP_CLEAR_ENTRY,
  373. KC_KP_BINARY,
  374. KC_KP_OCTAL,
  375. KC_KP_DECIMAL,
  376. KC_KP_HEXADECIMAL, /* 0xDD */
  377. /* Modifiers */
  378. KC_LCTRL = 0xE0,
  379. KC_LSHIFT,
  380. KC_LALT,
  381. KC_LGUI,
  382. KC_RCTRL,
  383. KC_RSHIFT,
  384. KC_RALT,
  385. KC_RGUI,