Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 10 години
преди 9 години
преди 12 години
преди 10 години
преди 11 години
преди 12 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. TMK Keyboard Firmware Collection
  2. ================================
  3. This is a keyboard firmware with some useful features for Atmel AVR controller.
  4. Source code is available here: <http://github.com/tmk/tmk_keyboard>
  5. Features
  6. --------
  7. These features can be used in your keyboard.
  8. * Multi-layer Keymap - Multiple keyboard layouts with layer switching
  9. * Mouse key - Mouse control with keyboard
  10. * System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up
  11. * Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc
  12. * USB NKRO - 120 keys(+ 8 modifiers) simultaneously
  13. * PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device
  14. * Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols
  15. * User Function - Customizable function of key with writing code
  16. * Macro - Very primitive at this time
  17. * Keyboard Tricks - Oneshot modifier and modifier with tapping feature
  18. * Debug Console - Messages for debug and interaction with firmware
  19. * Virtual DIP Switch - Configurations stored EEPROM(Boot Magic)
  20. * Locking CapsLock - Mechanical switch support for CapsLock
  21. * Breathing Sleep LED - Sleep indicator with charm during USB suspend
  22. * Backlight - Control backlight levels
  23. Projects
  24. --------
  25. You can find some keyboard specific projects under `converter` and `keyboard` directory.
  26. ### converter
  27. * [ps2_usb](converter/ps2_usb/) - [PS/2 keyboard to USB][GH_ps2]
  28. * [adb_usb](converter/adb_usb/) - [ADB keyboard to USB][GH_adb]
  29. * [m0110_usb](converter/m0110_usb) - [Macintosh 128K/512K/Plus keyboard to USB][GH_m0110]
  30. * [terminal_usb](converter/terminal_usb/) - [IBM Model M terminal keyboard(PS/2 scancode set3) to USB][GH_terminal]
  31. * [news_usb](converter/news_usb/) - [Sony NEWS keyboard to USB][GH_news]
  32. * [x68k_usb](converter/x68k_usb/) - [Sharp X68000 keyboard to USB][GH_x68k]
  33. * [sun_usb](converter/sun_usb/) - [Sun] to USB(type4, 5 and 3?)
  34. * [pc98_usb](converter/pc98_usb/) - [PC98] to USB
  35. * [usb_usb](converter/usb_usb/) - USB to USB(experimental)
  36. * [ascii_usb](converter/ascii_usb/) - ASCII(Serial console terminal) to USB
  37. * [ibm4704_usb](converter/ibm4704_usb) - [IBM 4704 keyboard Converter][GH_ibm4704]
  38. ### keyboard
  39. * [hhkb](keyboard/hhkb/) - [Happy Hacking Keyboard pro][GH_hhkb] **my main board**
  40. * [gh60](keyboard/gh60/) - [GH60] DIY 60% keyboard [prototype][GH60_proto] **my second board**
  41. * [hbkb](keyboard/hbkb/) - [Happy Buckling spring keyboard][GH_hbkb](IBM Model M 60% mod)
  42. * [hid_liber](keyboard/hid_liber/) - [HID liberation][HID_liber] controller (by alaricljs)
  43. * [phantom](keyboard/phantom/) - [Phantom] keyboard (by Tranquilite)
  44. * [IIgs_Standard](keyboard/IIgs/) - Apple [IIGS] keyboard mod(by JeffreySung)
  45. * [macway](keyboard/macway/) - [Compact keyboard mod][GH_macway] [retired]
  46. * [KMAC](keyboard/kmac/) - Korean custom keyboard
  47. * [Lightsaber](keyboard/lightsaber/) - Korean custom keyboard
  48. * [Infinity](keyboard/infinity/) - Massdrop [Infinity keyboard][Infinity]
  49. * [NerD](keyboard/nerd/) - Korean custom keyboard
  50. * [KittenPaw](keyboard/kitten_paw) - Custom Majestouch controller
  51. * [Lightpad](keyboard/lightpad) - Korean custom keypad
  52. * [ghost_squid](keyboard/ghost_squid/) - [The Ghost Squid][ghost_squid] controller for [Cooler Master QuickFire XT][cmxt]
  53. ### Extenal projects using tmk_keyboard
  54. * [ErgoDox_cub-uanic][cub-uanic] - Split Ergonomic Keyboard [ErgoDox][ergodox_org]
  55. * [mcdox][mcdox_tmk] - [mcdox][mcdox]
  56. [GH_macway]: http://geekhack.org/showwiki.php?title=Island:11930
  57. [GH_hhkb]: http://geekhack.org/showwiki.php?title=Island:12047
  58. [GH_ps2]: http://geekhack.org/showwiki.php?title=Island:14618
  59. [GH_adb]: http://geekhack.org/showwiki.php?title=Island:14290
  60. [GH_hhkb_bt]: http://geekhack.org/showwiki.php?title=Island:20851
  61. [GH_m0110]: http://geekhack.org/showwiki.php?title=Island:24965
  62. [GH_news]: http://geekhack.org/showwiki.php?title=Island:25759
  63. [GH_terminal]: http://geekhack.org/showwiki.php?title=Island:27272
  64. [GH_x68k]: http://geekhack.org/showwiki.php?title=Island:29060
  65. [GH_hbkb]: http://geekhack.org/showwiki.php?title=Island:29483
  66. [GH_ibm4704]: http://geekhack.org/index.php?topic=54706.0
  67. [HID_liber]: http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions
  68. [Phantom]: http://geekhack.org/index.php?topic=26742
  69. [GH60]: http://geekhack.org/index.php?topic=34959
  70. [GH60_proto]: http://geekhack.org/index.php?topic=37570.0
  71. [PC98]: http://en.wikipedia.org/wiki/NEC_PC-9801
  72. [Sun]: http://en.wikipedia.org/wiki/Sun-3
  73. [IIGS]: http://en.wikipedia.org/wiki/Apple_IIGS
  74. [Infinity]: https://www.massdrop.com/buy/infinity-keyboard-kit
  75. [ghost_squid]: http://deskthority.net/wiki/Costar_replacement_controllers#The_Ghost_Squid
  76. [cmxt]: http://gaming.coolermaster.com/en/products/keyboards/quickfirext/
  77. [ergodox_org]: http://ergodox.org/
  78. [cub-uanic]: https://github.com/cub-uanic/tmk_keyboard/tree/master/keyboard/ergodox
  79. [mcdox]: https://github.com/DavidMcEwan/mcdox
  80. [mcdox_tmk]: https://github.com/DavidMcEwan/tmk_keyboard/tree/master/keyboard/mcdox
  81. License
  82. -------
  83. **GPLv2** or later. Some protocol files are under **Modified BSD License**.
  84. LUFA, PJRC and V-USB stack have their own license respectively.
  85. Build Firmware and Program Controller
  86. -------------------------------------
  87. See [doc/build.md](doc/build.md).
  88. Change your keymap
  89. ------------------
  90. See [doc/keymap.md](doc/keymap.md).
  91. Magic Commands
  92. --------------
  93. To see help press `Magic` + `H`.
  94. `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.
  95. Following commands can be also executed with `Magic` + key. In console mode `Magic` keybind is not needed.
  96. ----- Command Help -----
  97. c: enter console mode
  98. d: toggle debug enable
  99. x: toggle matrix debug
  100. k: toggle keyboard debug
  101. m: toggle mouse debug
  102. v: print device version & info
  103. t: print timer count
  104. s: print status
  105. e: print eeprom config
  106. n: toggle NKRO
  107. 0/F10: switch to Layer0
  108. 1/F1: switch to Layer1
  109. 2/F2: switch to Layer2
  110. 3/F3: switch to Layer3
  111. 4/F4: switch to Layer4
  112. PScr: power down/remote wake-up
  113. Caps: Lock Keyboard(Child Proof)
  114. Paus: jump to bootloader
  115. **TBD**
  116. ### Boot Magic Configuration - Virtual DIP Switch
  117. Boot Magic are executed during boot up time. Press Magic key below then plug in keyboard cable.
  118. 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.
  119. 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).
  120. #### General
  121. - Skip reading EEPROM to start with default configuration(`ESC`)
  122. - Clear configuration stored in EEPROM to reset configuration(`Backspace`)
  123. #### Bootloader
  124. - Kick up Bootloader(`B`)
  125. #### Debug
  126. - Debug enable(`D`)
  127. - Debug matrix enable(`D`+`X`)
  128. - Debug keyboard enable(`D`+`K`)
  129. - Debug mouse enable(`D`+`M`)
  130. #### Keymap
  131. - Swap Control and CapsLock(`Left Control`)
  132. - Change CapsLock to Control(`Caps Lock`)
  133. - Swap LeftAlt and Gui(`Left Alt`)
  134. - Swap RightAlt and Gui(`Right Alt`)
  135. - Disable Gui(`Left Gui`)
  136. - Swap Grave and Escape(`Grave`)
  137. - Swap BackSlash and BackSpace(`Back Slash`)
  138. - Enable NKRO on boot(`N`)
  139. #### Default Layer
  140. - Set Default Layer to 0(`0`)
  141. - Set Default Layer to 1(`1`)
  142. - Set Default Layer to 2(`2`)
  143. - Set Default Layer to 3(`3`)
  144. - Set Default Layer to 4(`4`)
  145. - Set Default Layer to 5(`5`)
  146. - Set Default Layer to 6(`6`)
  147. - Set Default Layer to 7(`7`)
  148. #### Caution
  149. Unintentional use of this feature will cause user confusion.
  150. TODO: Magic key combination to avoid unintentional press during plug in
  151. **TBD**
  152. Mechanical Locking support
  153. --------------------------
  154. 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.
  155. #define LOCKING_SUPPORT_ENABLE
  156. #define LOCKING_RESYNC_ENABLE
  157. Start Your Own Project
  158. -----------------------
  159. **TBD**
  160. ### Config.h Options
  161. #### 1. USB vendor/product ID and device description
  162. #define VENDOR_ID 0xFEED
  163. #define PRODUCT_ID 0xBEEF
  164. #define MANUFACTURER t.m.k.
  165. #define PRODUCT Macway mod
  166. #define DESCRIPTION t.m.k. keyboard firmware for Macway mod
  167. #### 2. Keyboard matrix configuration
  168. #define MATRIX_ROWS 8
  169. #define MATRIX_COLS 8
  170. #define MATRIX_HAS_GHOST
  171. Architecture
  172. ------------
  173. Architecture Diagram
  174. +---------------+---------------+-------------+
  175. | Host | Keyboard | Matrix, LED |
  176. ___________ |-----------+-+ +-------------+ | +-----------|
  177. / /| Keys/Mouse | Protocol |d| | Action | | | Protocol |
  178. /__________/ |<-----------| LUFA |r| | Layer, Tap | | | Matrix |
  179. |.--------.| | LED | V-USB |i| |-------------| | | PS/2,IBM | __________________
  180. || || |----------->| PJRC |v| | Keymap | | | ADB,M0110| Keys / /_/_/_/_/_/_/_/ /|
  181. || Host || | Console | iWRAP(BT)|e| | Mousekey | | | SUN/NEWS |<----------/ /_/_/_/_/_/_/_/ / /
  182. ||________||/.<-----------| UART |r| | Report | | | X68K/PC98| Control / /_/_/_/_/_/_/_/ / /
  183. `_========_'/| |---------------------------------------------|-------->/___ /_______/ ___/ /
  184. |_o______o_|/ | Sendchar, Print, Debug, Command, ... | |_________________|/
  185. +---------------------------------------------+ Keyboard
  186. Debugging
  187. --------
  188. Use PJRC's `hid_listen` to see debug messages. You can use the tool for debug even if firmware use LUFA stack.
  189. You can use xprintf() to display debug info on `hid_listen`, see `common/xprintf.h`.
  190. Files and Directories
  191. -------------------
  192. ### Top
  193. * common/ - common codes
  194. * protocol/ - keyboard protocol support
  195. * keyboard/ - keyboard projects
  196. * converter/ - protocol converter projects
  197. * doc/ - documents
  198. * common.mk - Makefile for common
  199. * protocol.mk - Makefile for protocol
  200. * rules.mk - Makefile for build rules
  201. ### Common
  202. * host.h
  203. * host_driver.h
  204. * keyboard.h
  205. * command.h
  206. * keymap.h
  207. * action.h
  208. * keycode.h
  209. * matrix.h
  210. * led.h
  211. * mousekey.h
  212. * report.h
  213. * debug.h
  214. * print.h
  215. * bootloader.h
  216. * sendchar.h
  217. * timer.h
  218. * util.h
  219. ### Keyboard Protocols
  220. * lufa/ - LUFA USB stack
  221. * pjrc/ - PJRC USB stack
  222. * vusb/ - Objective Development V-USB
  223. * iwrap/ - Bluetooth HID for Bluegiga iWRAP
  224. * ps2.c - PS/2 protocol
  225. * adb.c - Apple Desktop Bus protocol
  226. * m0110.c - Macintosh 128K/512K/Plus keyboard protocol
  227. * news.c - Sony NEWS keyboard protocol
  228. * x68k.c - Sharp X68000 keyboard protocol
  229. * serial_soft.c - Asynchronous Serial protocol implemented by software
  230. Coding Style
  231. -------------
  232. - Doesn't use Tab to indent, use 4-spaces instead.
  233. Other Keyboard Firmware Projects
  234. ------------------
  235. You can learn a lot about keyboard firmware from these. See [doc/other_projects.md](doc/other_projects.md).