keymap.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. #include QMK_KEYBOARD_H
  2. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  3. LAYOUT(
  4. TO(1), KC_A, KC_B, KC_C, KC_D, KC_E),
  5. LAYOUT(
  6. TO(2), KC_F, KC_G, KC_H, KC_I, KC_J),
  7. LAYOUT(
  8. TO(3), KC_K, KC_L, KC_M, KC_N, KC_O),
  9. LAYOUT(
  10. TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T),
  11. LAYOUT(
  12. TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y),
  13. LAYOUT(
  14. TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4)};
  15. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  16. {
  17. //keyevent_t event = record->event;
  18. switch (id)
  19. {
  20. case 0:
  21. if (record->event.pressed)
  22. {
  23. return MACRO(T(T), T(G), T(L), T(H), T(F), T(ENT), END);
  24. }
  25. break;
  26. case 1:
  27. if (record->event.pressed)
  28. {
  29. return MACRO(T(T), T(G), T(G), T(ENT), END);
  30. }
  31. break;
  32. case 2:
  33. if (record->event.pressed)
  34. {
  35. return MACRO(D(NO), T(L), U(NO), END);
  36. }
  37. break;
  38. case 3:
  39. if (record->event.pressed)
  40. {
  41. return MACRO(D(LCTL), T(Z), U(LCTL), END);
  42. }
  43. break;
  44. case 4:
  45. if (record->event.pressed)
  46. {
  47. return MACRO(D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END);
  48. }
  49. break;
  50. case 5:
  51. if (record->event.pressed)
  52. {
  53. return MACRO(D(LCTL), T(X), U(LCTL), END);
  54. }
  55. break;
  56. case 6:
  57. if (record->event.pressed)
  58. {
  59. return MACRO(D(LCTL), T(C), U(LCTL), END);
  60. }
  61. break;
  62. case 7:
  63. if (record->event.pressed)
  64. {
  65. return MACRO(D(LCTL), T(V), U(LCTL), END);
  66. }
  67. break;
  68. }
  69. return MACRO_NONE;
  70. }
  71. // M6-A LEDs are connected to D6, B6, F5, B4, C7, F7
  72. // This is 1-based because I copied it from Knops code.
  73. void set_switch_led(int ledId, bool state)
  74. {
  75. if (state)
  76. {
  77. switch (ledId)
  78. {
  79. case 1:
  80. PORTD |= (1 << 6);
  81. break;
  82. case 2:
  83. PORTB |= (1 << 6);
  84. break;
  85. case 3:
  86. PORTF |= (1 << 5);
  87. break;
  88. case 4:
  89. PORTB |= (1 << 4);
  90. break;
  91. case 5:
  92. PORTC |= (1 << 7);
  93. break;
  94. case 6:
  95. PORTF |= (1 << 7);
  96. break;
  97. }
  98. }
  99. else
  100. {
  101. switch (ledId)
  102. {
  103. case 1:
  104. PORTD &= ~(1 << 6);
  105. break;
  106. case 2:
  107. PORTB &= ~(1 << 6);
  108. break;
  109. case 3:
  110. PORTF &= ~(1 << 5);
  111. break;
  112. case 4:
  113. PORTB &= ~(1 << 4);
  114. break;
  115. case 5:
  116. PORTC &= ~(1 << 7);
  117. break;
  118. case 6:
  119. PORTF &= ~(1 << 7);
  120. break;
  121. }
  122. }
  123. }
  124. void set_layer_led(int layerId)
  125. {
  126. // UNUSED
  127. }
  128. void led_set_layer(int layer);
  129. void matrix_init_user(void)
  130. {
  131. led_init_ports();
  132. led_set_layer(0);
  133. }
  134. void matrix_scan_user(void)
  135. {
  136. }
  137. // M6-A LEDs are connected to D6, B6, F5, B4, C7, F7
  138. void led_init_ports()
  139. {
  140. // Switch #1
  141. DDRD |= (1 << 6);
  142. PORTD &= ~(1 << 6);
  143. // Switch #2
  144. DDRB |= (1 << 6);
  145. PORTB &= ~(1 << 6);
  146. // Switch #3
  147. DDRF |= (1 << 5);
  148. PORTF &= ~(1 << 5);
  149. // Switch #4
  150. DDRB |= (1 << 4);
  151. PORTB &= ~(1 << 4);
  152. // Switch #5
  153. DDRC |= (1 << 7);
  154. PORTC &= ~(1 << 7);
  155. // Switch #6
  156. DDRF |= (1 << 7);
  157. PORTF &= ~(1 << 7);
  158. }
  159. void led_set_user(uint8_t usb_led)
  160. {
  161. if (usb_led & (1 << USB_LED_NUM_LOCK))
  162. {
  163. }
  164. else
  165. {
  166. }
  167. if (usb_led & (1 << USB_LED_CAPS_LOCK))
  168. {
  169. }
  170. else
  171. {
  172. }
  173. if (usb_led & (1 << USB_LED_SCROLL_LOCK))
  174. {
  175. }
  176. else
  177. {
  178. }
  179. if (usb_led & (1 << USB_LED_COMPOSE))
  180. {
  181. }
  182. else
  183. {
  184. }
  185. if (usb_led & (1 << USB_LED_KANA))
  186. {
  187. }
  188. else
  189. {
  190. }
  191. }
  192. void led_set_layer(int layer)
  193. {
  194. switch (layer)
  195. {
  196. case 0:
  197. set_switch_led(1, true);
  198. set_switch_led(2, false);
  199. set_switch_led(3, false);
  200. set_switch_led(4, false);
  201. set_switch_led(5, false);
  202. set_switch_led(6, false);
  203. break;
  204. case 1:
  205. set_switch_led(1, false);
  206. set_switch_led(2, true);
  207. set_switch_led(3, false);
  208. set_switch_led(4, false);
  209. set_switch_led(5, false);
  210. set_switch_led(6, false);
  211. break;
  212. case 2:
  213. set_switch_led(1, false);
  214. set_switch_led(2, false);
  215. set_switch_led(3, true);
  216. set_switch_led(4, false);
  217. set_switch_led(5, false);
  218. set_switch_led(6, false);
  219. break;
  220. case 3:
  221. set_switch_led(1, false);
  222. set_switch_led(2, false);
  223. set_switch_led(3, false);
  224. set_switch_led(4, true);
  225. set_switch_led(5, false);
  226. set_switch_led(6, false);
  227. break;
  228. case 4:
  229. set_switch_led(1, false);
  230. set_switch_led(2, false);
  231. set_switch_led(3, false);
  232. set_switch_led(4, false);
  233. set_switch_led(5, true);
  234. set_switch_led(6, false);
  235. break;
  236. case 5:
  237. set_switch_led(1, false);
  238. set_switch_led(2, false);
  239. set_switch_led(3, false);
  240. set_switch_led(4, false);
  241. set_switch_led(5, false);
  242. set_switch_led(6, true);
  243. break;
  244. default:
  245. set_switch_led(1, true);
  246. set_switch_led(2, true);
  247. set_switch_led(3, true);
  248. set_switch_led(4, true);
  249. set_switch_led(5, true);
  250. set_switch_led(6, true);
  251. break;
  252. }
  253. }
  254. bool process_record_user(uint16_t keycode, keyrecord_t *record)
  255. {
  256. switch (keycode)
  257. {
  258. case TO(0):
  259. if (record->event.pressed)
  260. {
  261. led_set_layer(0);
  262. }
  263. break;
  264. case TO(1):
  265. if (record->event.pressed)
  266. {
  267. led_set_layer(1);
  268. }
  269. break;
  270. case TO(2):
  271. if (record->event.pressed)
  272. {
  273. led_set_layer(2);
  274. }
  275. break;
  276. case TO(3):
  277. if (record->event.pressed)
  278. {
  279. led_set_layer(3);
  280. }
  281. break;
  282. case TO(4):
  283. if (record->event.pressed)
  284. {
  285. led_set_layer(4);
  286. }
  287. break;
  288. case TO(5):
  289. if (record->event.pressed)
  290. {
  291. led_set_layer(5);
  292. }
  293. break;
  294. }
  295. return true;
  296. }