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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*
  2. Copyright 2012 Jun Wako <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include <stdint.h>
  15. #include <stdbool.h>
  16. #include <avr/pgmspace.h>
  17. #include "keycode.h"
  18. #include "util.h"
  19. #include "keymap.h"
  20. /* PC-9801-98-S02 Raku Raku keyboard(Luckyboard) Normal Mode
  21. ,---------------------------------------------------------------.
  22. | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
  23. `---------------------------------------------------------------'
  24. ,---------------------------------------------------------------.
  25. | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
  26. |---------------------------------------------------------------|
  27. | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
  28. |---------------------------------------------------------------|
  29. | 74| 20| 21| 22| 23| 24| 3B | 3C | 25| 26| 27| 28| 29| |
  30. |---------------------------------------------------------------|
  31. | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
  32. `---------------------------------------------------------------'
  33. | 73| 51| 5B| 59| 34| 5A| 35| xx|
  34. `-----------------------------------------------'
  35. xx: 74 35 F4 B5
  36. */
  37. #define KEYMAP( \
  38. K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K36, K37, K3F, K3E, \
  39. K00, K01, K02, K03, K04, K05, K58, K71, K06, K07, K08, K09, K0A, K0E, \
  40. K0F, K10, K11, K12, K13, K14, K3A, K15, K16, K17, K18, K19, K1C, \
  41. K74, K20, K21, K22, K23, K24, K3B, K3C, K25, K26, K27, K28, K29, \
  42. K70,K2A, K2B, K2C, K2D, K2E, K38, K3D, K39, K2F, K30, K31, K32, K33, \
  43. K73, K51, K5B, K59, K34, K5A, K35 \
  44. ) { \
  45. { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
  46. { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_NO, KC_NO, KC_##K0E, KC_##K0F }, \
  47. { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
  48. { KC_##K18, KC_##K19, KC_NO, KC_NO, KC_##K1C, KC_NO, KC_NO, KC_NO }, \
  49. { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
  50. { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
  51. { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
  52. { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
  53. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  54. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  55. { KC_NO, KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  56. { KC_NO, KC_NO, KC_##K5A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  57. { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
  58. { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO }, \
  59. { KC_##K70, KC_NO, KC_NO, KC_##K73, KC_##K74, KC_NO, KC_NO, KC_NO }, \
  60. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
  61. }
  62. // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
  63. static const uint8_t PROGMEM fn_layer[] = {
  64. 2, // Fn0
  65. 3, // Fn1
  66. 4, // Fn2
  67. 0, // Fn3
  68. 0, // Fn4
  69. 0, // Fn5
  70. 0, // Fn6
  71. 0 // Fn7
  72. };
  73. // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
  74. // See layer.c for details.
  75. static const uint8_t PROGMEM fn_keycode[] = {
  76. KC_NO, // Fn0
  77. KC_SCLN, // Fn1
  78. KC_SLSH, // Fn2
  79. KC_NO, // Fn3
  80. KC_NO, // Fn4
  81. KC_NO, // Fn5
  82. KC_NO, // Fn6
  83. KC_NO // Fn7
  84. };
  85. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  86. /*
  87. ,---------------------------------------------------------------.
  88. | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
  89. `---------------------------------------------------------------'
  90. ,---------------------------------------------------------------.
  91. | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
  92. |---------------------------------------------------------------|
  93. | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
  94. |---------------------------------------------------------------|
  95. | 74| 20| 21| 22| 23| 24| MINS| EQL| 25| 26| 27| 28| 29| |
  96. |---------------------------------------------------------------|
  97. | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
  98. `---------------------------------------------------------------'
  99. | 73| 51| 5B| 59| 34| 5A| 35| xx|
  100. `-----------------------------------------------'
  101. */
  102. KEYMAP(
  103. PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
  104. ESC, 1, 2, 3, 4, 5, NO, NO, 6, 7, 8, 9, 0, BSPC,
  105. TAB, Q, W, E, R, T, UP, Y, U, I, O, P, ENT,
  106. LCTL, A, S, D, F, G, MINS, EQL, H, J, K, L,SCLN,
  107. LSFT, Z, X, C, V, B, INS, DOWN, DEL, N, M,COMM, DOT,SLSH,
  108. LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
  109. ),
  110. };
  111. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  112. {
  113. return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
  114. }
  115. uint8_t keymap_fn_layer(uint8_t index)
  116. {
  117. return pgm_read_byte(&fn_layer[index]);
  118. }
  119. uint8_t keymap_fn_keycode(uint8_t index)
  120. {
  121. return pgm_read_byte(&fn_keycode[index]);
  122. }
  123. #if 0
  124. /* PC-9801-98-S02 Raku Raku keyboard(Luckyboard) M-siki mode
  125. ,---------------------------------------------------------------.
  126. | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
  127. `---------------------------------------------------------------'
  128. ,---------------------------------------------------------------.
  129. | 00| 01| 02| 03| 04| 05| NUM|CAPS| 06| 07| 08| 09| 0A| 0E|
  130. |---------------------------------------------------------------|
  131. | 0F| 10| 25| 20| 23| 2B| 3A | 2F| 15| 13| 11| 19| 1C|
  132. |---------------------------------------------------------------|
  133. | 74| 12| 16| 17| 1D| 18| 3B | 3C | 24| 1E| 14| 2E| 22| |
  134. |---------------------------------------------------------------|
  135. | 70| xx| 2A| 2C| xx| xx| 38| 3D | 39| 21| 29| 1F| xx| 2D| 70|
  136. `---------------------------------------------------------------'
  137. | 73| 51| xx| xx| 34| xx| 35| xx|
  138. `-----------------------------------------------'
  139. */
  140. #define KEYMAP_M( \
  141. K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K36, K37, K3F, K3E, \
  142. K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0E, \
  143. K0F, K10, K25, K23, K20, K2B, K3A, K2F, K15, K13, K11, K19, K1C, \
  144. K74, K12, K16, K17, K1D, K18, K3B, K3C, K24, K1E, K14, K2E, K22, \
  145. K70, K2A, K2C, K38, K3D, K39, K21, K29, K1F, K2D, \
  146. K73, K51, K34, K35 \
  147. ) { \
  148. { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
  149. { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_NO, KC_NO, KC_##K0E, KC_##K0F }, \
  150. { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
  151. { KC_##K18, KC_##K19, KC_NO, KC_NO, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
  152. { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_NO, KC_NO }, \
  153. { KC_NO, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
  154. { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
  155. { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
  156. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  157. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  158. { KC_NO, KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  159. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  160. { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
  161. { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO }, \
  162. { KC_##K70, KC_NO, KC_NO, KC_##K73, KC_##K74, KC_NO, KC_NO, KC_NO }, \
  163. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
  164. }
  165. #endif