keymap.c 5.0 KB

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