v2.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. /* Copyright 2018 Yiancar
  2. *
  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. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "v2.h"
  17. //#include "is31fl3733.h"
  18. // Please ignore this is for upcoming features
  19. /*#ifdef RAW_ENABLE
  20. void raw_hid_receive( uint8_t *data, uint8_t length )
  21. {
  22. uint8_t command = data[0];
  23. switch ( command )
  24. {
  25. case id_protocol_version:
  26. {
  27. msg_protocol_version *msg = (msg_protocol_version*)&data[1];
  28. msg->version = PROTOCOL_VERSION;
  29. break;
  30. }
  31. #if USE_KEYMAPS_IN_EEPROM
  32. case id_keymap_keycode_load:
  33. {
  34. msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
  35. msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
  36. break;
  37. }
  38. case id_keymap_keycode_save:
  39. {
  40. msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
  41. keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
  42. break;
  43. }
  44. case id_keymap_default_save:
  45. {
  46. keymap_default_save();
  47. break;
  48. }
  49. #endif // USE_KEYMAPS_IN_EEPROM
  50. case id_backlight_config_set_values:
  51. {
  52. msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
  53. backlight_config_set_values(msg);
  54. backlight_config_save();
  55. break;
  56. }
  57. case id_backlight_config_set_alphas_mods:
  58. {
  59. msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
  60. backlight_config_set_alphas_mods( msg->alphas_mods );
  61. backlight_config_save();
  62. break;
  63. }
  64. case id_backlight_set_key_color:
  65. {
  66. msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
  67. backlight_set_key_color(msg->row, msg->column, msg->hsv);
  68. break;
  69. }
  70. case id_system_get_state:
  71. {
  72. msg_system_state *msg = (msg_system_state*)&data[1];
  73. msg->value = backlight_get_tick();
  74. break;
  75. }
  76. default:
  77. {
  78. // Unhandled message.
  79. data[0] = id_unhandled;
  80. break;
  81. }
  82. }
  83. // Return same buffer with values changed
  84. raw_hid_send( data, length );
  85. }
  86. #endif*/
  87. #ifdef HS60_ANSI
  88. const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
  89. /* Refer to IS31 manual for these locations
  90. * driver
  91. * | R location
  92. * | | G location
  93. * | | | B location
  94. * | | | | */
  95. {0, B_1, A_1, C_1}, //MX1
  96. {0, E_1, D_1, F_1}, //MX2
  97. {0, H_1, G_1, I_1}, //MX3
  98. {0, K_1, J_1, L_1}, //MX4
  99. {0, B_2, A_2, C_2}, //MX6
  100. {0, E_2, D_2, F_2}, //MX7
  101. {0, H_2, G_2, I_2}, //MX8
  102. {0, K_2, J_2, L_2}, //MX14
  103. {0, B_3, A_3, C_3}, //MX11
  104. {0, E_3, D_3, F_3}, //MX12
  105. {0, H_3, G_3, I_3}, //MX13
  106. {0, K_3, J_3, L_3}, //MX19
  107. {0, B_4, A_4, C_4}, //MX16
  108. {0, E_4, D_4, F_4}, //MX17
  109. {0, H_4, G_4, I_4}, //MX18
  110. {0, K_4, J_4, L_4}, //MX23
  111. {0, B_5, A_5, C_5}, //MX20
  112. {0, E_5, D_5, F_5}, //MX21
  113. {0, H_5, G_5, I_5}, //MX22
  114. {0, K_5, J_5, L_5}, //MX27
  115. {0, B_6, A_6, C_6}, //MX24
  116. {0, E_6, D_6, F_6}, //MX25
  117. {0, H_6, G_6, I_6}, //MX26
  118. {0, K_6, J_6, L_6}, //MX31
  119. {0, B_7, A_7, C_7}, //MX28
  120. {0, E_7, D_7, F_7}, //MX29
  121. {0, H_7, G_7, I_7}, //MX30
  122. {0, K_7, J_7, L_7}, //MX36
  123. {0, B_8, A_8, C_8}, //MX33
  124. {0, E_8, D_8, F_8}, //MX34
  125. {0, H_8, G_8, I_8}, //MX35
  126. {0, K_8, J_8, L_8}, //MX40
  127. {0, B_9, A_9, C_9}, //MX37
  128. {0, E_9, D_9, F_9}, //MX38
  129. {0, H_9, G_9, I_9}, //MX39
  130. {0, K_9, J_9, L_9}, //MX44
  131. {0, B_10, A_10, C_10}, //MX41
  132. {0, E_10, D_10, F_10}, //MX42
  133. {0, H_10, G_10, I_10}, //MX43
  134. {0, K_10, J_10, L_10}, //MX48
  135. {0, B_11, A_11, C_11}, //MX45
  136. {0, E_11, D_11, F_11}, //MX46
  137. {0, H_11, G_11, I_11}, //MX47
  138. {0, K_11, J_11, L_11}, //MX53
  139. {0, B_12, A_12, C_12}, //MX50
  140. {0, E_12, D_12, F_12}, //MX51
  141. {0, H_12, G_12, I_12}, //MX52
  142. {0, B_13, A_13, C_13}, //MX55
  143. {0, E_13, D_13, F_13}, //MX56
  144. {0, K_13, J_13, L_13}, //MX61
  145. {0, B_14, A_14, C_14}, //MX59
  146. {0, E_14, D_14, F_14}, //MX57
  147. {0, H_14, G_14, I_14}, //MX60
  148. {0, K_14, J_14, L_14}, //MX62
  149. {0, B_15, A_15, C_15}, //MX5
  150. {0, E_15, D_15, F_15}, //MX10
  151. {0, H_15, G_15, I_15}, //MX15
  152. {0, K_15, J_15, L_15}, //MX32
  153. {0, E_16, D_16, F_16}, //MX49
  154. {0, H_16, G_16, I_16}, //MX54
  155. {0, K_16, J_16, L_16}, //MX58
  156. };
  157. const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
  158. //
  159. // MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
  160. // MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
  161. // MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
  162. // MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
  163. // MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
  164. /* {row | col << 4}
  165. * | {x=0..224, y=0..64}
  166. * | | modifier
  167. * | | | */
  168. {{0|(0<<4)}, { 0, 0}, 1}, //MX1
  169. {{1|(0<<4)}, { 0, 16}, 1}, //MX2
  170. {{2|(0<<4)}, { 0, 32}, 1}, //MX3
  171. {{3|(0<<4)}, { 0, 48}, 1}, //MX4
  172. {{0|(1<<4)}, { 17, 0}, 0}, //MX6
  173. {{1|(1<<4)}, { 17, 16}, 0}, //MX7
  174. {{2|(1<<4)}, { 17, 32}, 0}, //MX8
  175. {{3|(2<<4)}, { 34, 48}, 0}, //MX14
  176. {{0|(2<<4)}, { 34, 0}, 0}, //MX11
  177. {{1|(2<<4)}, { 34, 16}, 0}, //MX12
  178. {{2|(2<<4)}, { 34, 32}, 0}, //MX13
  179. {{3|(3<<4)}, { 51, 48}, 0}, //MX19
  180. {{0|(3<<4)}, { 51, 0}, 0}, //MX16
  181. {{1|(3<<4)}, { 51, 16}, 0}, //MX17
  182. {{2|(3<<4)}, { 51, 32}, 0}, //MX18
  183. {{3|(4<<4)}, { 68, 48}, 0}, //MX23
  184. {{0|(4<<4)}, { 68, 0}, 0}, //MX20
  185. {{1|(4<<4)}, { 68, 16}, 0}, //MX21
  186. {{2|(4<<4)}, { 68, 32}, 0}, //MX22
  187. {{3|(5<<4)}, { 85, 48}, 0}, //MX27
  188. {{0|(5<<4)}, { 85, 0}, 0}, //MX24
  189. {{1|(5<<4)}, { 85, 16}, 0}, //MX25
  190. {{2|(5<<4)}, { 85, 32}, 0}, //MX26
  191. {{3|(6<<4)}, {102, 48}, 0}, //MX31
  192. {{0|(6<<4)}, {102, 0}, 0}, //MX28
  193. {{1|(6<<4)}, {102, 16}, 0}, //MX29
  194. {{2|(6<<4)}, {102, 32}, 0}, //MX30
  195. {{3|(7<<4)}, {119, 48}, 0}, //MX36
  196. {{0|(7<<4)}, {119, 0}, 0}, //MX33
  197. {{1|(7<<4)}, {119, 16}, 0}, //MX34
  198. {{2|(7<<4)}, {119, 32}, 0}, //MX35
  199. {{3|(8<<4)}, {136, 48}, 0}, //MX40
  200. {{0|(8<<4)}, {136, 0}, 0}, //MX37
  201. {{1|(8<<4)}, {136, 16}, 0}, //MX38
  202. {{2|(8<<4)}, {136, 32}, 0}, //MX39
  203. {{3|(9<<4)}, {153, 48}, 0}, //MX44
  204. {{0|(9<<4)}, {153, 0}, 0}, //MX41
  205. {{1|(9<<4)}, {153, 16}, 0}, //MX42
  206. {{2|(9<<4)}, {153, 32}, 0}, //MX43
  207. {{3|(10<<4)}, {170, 48}, 0}, //MX48
  208. {{0|(10<<4)}, {170, 0}, 0}, //MX45
  209. {{1|(10<<4)}, {170, 16}, 0}, //MX46
  210. {{2|(10<<4)}, {170, 32}, 0}, //MX47
  211. {{3|(11<<4)}, {187, 48}, 0}, //MX53
  212. {{0|(11<<4)}, {187, 0}, 0}, //MX50
  213. {{1|(11<<4)}, {187, 16}, 0}, //MX51
  214. {{2|(11<<4)}, {187, 32}, 0}, //MX52
  215. {{0|(12<<4)}, {204, 0}, 0}, //MX55
  216. {{1|(12<<4)}, {204, 16}, 0}, //MX56
  217. {{3|(13<<4)}, {221, 48}, 1}, //MX61
  218. {{0|(13<<4)}, {221, 0}, 1}, //MX59
  219. {{2|(12<<4)}, {221, 16}, 0}, //MX57
  220. {{2|(13<<4)}, {221, 32}, 1}, //MX60
  221. {{4|(13<<4)}, {221, 64}, 1}, //MX62
  222. {{4|(0<<4)}, { 0, 64}, 1}, //MX5
  223. {{4|(1<<4)}, { 17, 64}, 1}, //MX10
  224. {{4|(2<<4)}, { 34, 64}, 1}, //MX15
  225. {{4|(5<<4)}, {102, 64}, 0}, //MX32
  226. {{4|(10<<4)}, {170, 64}, 1}, //MX49
  227. {{4|(11<<4)}, {187, 64}, 1}, //MX54
  228. {{4|(12<<4)}, {204, 64}, 1} //MX58
  229. };
  230. #elif defined(HS60_HHKB)
  231. const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
  232. /* Refer to IS31 manual for these locations
  233. * driver
  234. * | R location
  235. * | | G location
  236. * | | | B location
  237. * | | | | */
  238. {0, B_1, A_1, C_1}, //MX1
  239. {0, E_1, D_1, F_1}, //MX2
  240. {0, H_1, G_1, I_1}, //MX3
  241. {0, K_1, J_1, L_1}, //MX4
  242. {0, B_2, A_2, C_2}, //MX6
  243. {0, E_2, D_2, F_2}, //MX7
  244. {0, H_2, G_2, I_2}, //MX8
  245. {0, K_2, J_2, L_2}, //MX14
  246. {0, B_3, A_3, C_3}, //MX11
  247. {0, E_3, D_3, F_3}, //MX12
  248. {0, H_3, G_3, I_3}, //MX13
  249. {0, K_3, J_3, L_3}, //MX19
  250. {0, B_4, A_4, C_4}, //MX16
  251. {0, E_4, D_4, F_4}, //MX17
  252. {0, H_4, G_4, I_4}, //MX18
  253. {0, K_4, J_4, L_4}, //MX23
  254. {0, B_5, A_5, C_5}, //MX20
  255. {0, E_5, D_5, F_5}, //MX21
  256. {0, H_5, G_5, I_5}, //MX22
  257. {0, K_5, J_5, L_5}, //MX27
  258. {0, B_6, A_6, C_6}, //MX24
  259. {0, E_6, D_6, F_6}, //MX25
  260. {0, H_6, G_6, I_6}, //MX26
  261. {0, K_6, J_6, L_6}, //MX31
  262. {0, B_7, A_7, C_7}, //MX28
  263. {0, E_7, D_7, F_7}, //MX29
  264. {0, H_7, G_7, I_7}, //MX30
  265. {0, K_7, J_7, L_7}, //MX36
  266. {0, B_8, A_8, C_8}, //MX33
  267. {0, E_8, D_8, F_8}, //MX34
  268. {0, H_8, G_8, I_8}, //MX35
  269. {0, K_8, J_8, L_8}, //MX40
  270. {0, B_9, A_9, C_9}, //MX37
  271. {0, E_9, D_9, F_9}, //MX38
  272. {0, H_9, G_9, I_9}, //MX39
  273. {0, K_9, J_9, L_9}, //MX44
  274. {0, B_10, A_10, C_10}, //MX41
  275. {0, E_10, D_10, F_10}, //MX42
  276. {0, H_10, G_10, I_10}, //MX43
  277. {0, K_10, J_10, L_10}, //MX48
  278. {0, B_11, A_11, C_11}, //MX45
  279. {0, E_11, D_11, F_11}, //MX46
  280. {0, H_11, G_11, I_11}, //MX47
  281. {0, K_11, J_11, L_11}, //MX53
  282. {0, B_12, A_12, C_12}, //MX50
  283. {0, E_12, D_12, F_12}, //MX51
  284. {0, H_12, G_12, I_12}, //MX52
  285. {0, K_12, J_12, L_12}, //MX64
  286. {0, B_13, A_13, C_13}, //MX55
  287. {0, E_13, D_13, F_13}, //MX56
  288. {0, H_13, G_13, I_13}, //MX63
  289. {0, K_13, J_13, L_13}, //MX61
  290. {0, B_14, A_14, C_14}, //MX59
  291. {0, E_14, D_14, F_14}, //MX57
  292. {0, H_14, G_14, I_14}, //MX60
  293. {0, K_14, J_14, L_14}, //MX62
  294. {0, B_15, A_15, C_15}, //MX5
  295. {0, E_15, D_15, F_15}, //MX10
  296. {0, H_15, G_15, I_15}, //MX15
  297. {0, K_15, J_15, L_15}, //MX32
  298. {0, H_16, G_16, I_16}, //MX54
  299. {0, K_16, J_16, L_16}, //MX58
  300. };
  301. const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
  302. //
  303. // MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
  304. // MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, MX64,
  305. // MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
  306. // MX4, ----, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, MX63, MX61,
  307. // MX5, MX10, MX15, ----, ----, ----, MX32, ----, ---, ----, ----, MX54, MX58, MX62
  308. /* {row | col << 4}
  309. * | {x=0..224, y=0..64}
  310. * | | modifier
  311. * | | | */
  312. {{0|(0<<4)}, { 0, 0}, 1}, //MX1
  313. {{1|(0<<4)}, { 0, 16}, 1}, //MX2
  314. {{2|(0<<4)}, { 0, 32}, 1}, //MX3
  315. {{3|(0<<4)}, { 0, 48}, 1}, //MX4
  316. {{0|(1<<4)}, { 17, 0}, 0}, //MX6
  317. {{1|(1<<4)}, { 17, 16}, 0}, //MX7
  318. {{2|(1<<4)}, { 17, 32}, 0}, //MX8
  319. {{3|(2<<4)}, { 34, 48}, 0}, //MX14
  320. {{0|(2<<4)}, { 34, 0}, 0}, //MX11
  321. {{1|(2<<4)}, { 34, 16}, 0}, //MX12
  322. {{2|(2<<4)}, { 34, 32}, 0}, //MX13
  323. {{3|(3<<4)}, { 51, 48}, 0}, //MX19
  324. {{0|(3<<4)}, { 51, 0}, 0}, //MX16
  325. {{1|(3<<4)}, { 51, 16}, 0}, //MX17
  326. {{2|(3<<4)}, { 51, 32}, 0}, //MX18
  327. {{3|(4<<4)}, { 68, 48}, 0}, //MX23
  328. {{0|(4<<4)}, { 68, 0}, 0}, //MX20
  329. {{1|(4<<4)}, { 68, 16}, 0}, //MX21
  330. {{2|(4<<4)}, { 68, 32}, 0}, //MX22
  331. {{3|(5<<4)}, { 85, 48}, 0}, //MX27
  332. {{0|(5<<4)}, { 85, 0}, 0}, //MX24
  333. {{1|(5<<4)}, { 85, 16}, 0}, //MX25
  334. {{2|(5<<4)}, { 85, 32}, 0}, //MX26
  335. {{3|(6<<4)}, {102, 48}, 0}, //MX31
  336. {{0|(6<<4)}, {102, 0}, 0}, //MX28
  337. {{1|(6<<4)}, {102, 16}, 0}, //MX29
  338. {{2|(6<<4)}, {102, 32}, 0}, //MX30
  339. {{3|(7<<4)}, {119, 48}, 0}, //MX36
  340. {{0|(7<<4)}, {119, 0}, 0}, //MX33
  341. {{1|(7<<4)}, {119, 16}, 0}, //MX34
  342. {{2|(7<<4)}, {119, 32}, 0}, //MX35
  343. {{3|(8<<4)}, {136, 48}, 0}, //MX40
  344. {{0|(8<<4)}, {136, 0}, 0}, //MX37
  345. {{1|(8<<4)}, {136, 16}, 0}, //MX38
  346. {{2|(8<<4)}, {136, 32}, 0}, //MX39
  347. {{3|(9<<4)}, {153, 48}, 0}, //MX44
  348. {{0|(9<<4)}, {153, 0}, 0}, //MX41
  349. {{1|(9<<4)}, {153, 16}, 0}, //MX42
  350. {{2|(9<<4)}, {153, 32}, 0}, //MX43
  351. {{3|(10<<4)}, {170, 48}, 0}, //MX48
  352. {{0|(10<<4)}, {170, 0}, 0}, //MX45
  353. {{1|(10<<4)}, {170, 16}, 0}, //MX46
  354. {{2|(10<<4)}, {170, 32}, 0}, //MX47
  355. {{3|(11<<4)}, {187, 48}, 0}, //MX53
  356. {{0|(11<<4)}, {187, 0}, 0}, //MX50
  357. {{1|(11<<4)}, {187, 16}, 0}, //MX51
  358. {{2|(11<<4)}, {187, 32}, 0}, //MX52
  359. {{1|(13<<4)}, {221, 0}, 1}, //MX64
  360. {{0|(12<<4)}, {204, 0}, 0}, //MX55
  361. {{1|(12<<4)}, {204, 16}, 0}, //MX56
  362. {{3|(12<<4)}, {204, 48}, 0}, //MX63
  363. {{3|(13<<4)}, {212, 48}, 1}, //MX61
  364. {{0|(13<<4)}, {221, 0}, 0}, //MX59
  365. {{2|(12<<4)}, {221, 16}, 0}, //MX57
  366. {{2|(13<<4)}, {221, 32}, 1}, //MX60
  367. {{4|(13<<4)}, {221, 64}, 1}, //MX62
  368. {{4|(0<<4)}, { 0, 64}, 1}, //MX5
  369. {{4|(1<<4)}, { 17, 64}, 1}, //MX10
  370. {{4|(2<<4)}, { 34, 64}, 1}, //MX15
  371. {{4|(5<<4)}, {102, 64}, 0}, //MX32
  372. {{4|(11<<4)}, {187, 64}, 1}, //MX54
  373. {{4|(12<<4)}, {204, 64}, 1} //MX58
  374. };
  375. #else //ISO layout
  376. const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
  377. /* Refer to IS31 manual for these locations
  378. * driver
  379. * | R location
  380. * | | G location
  381. * | | | B location
  382. * | | | | */
  383. {0, B_1, A_1, C_1}, //MX1
  384. {0, E_1, D_1, F_1}, //MX2
  385. {0, H_1, G_1, I_1}, //MX3
  386. {0, K_1, J_1, L_1}, //MX4
  387. {0, B_2, A_2, C_2}, //MX6
  388. {0, E_2, D_2, F_2}, //MX7
  389. {0, H_2, G_2, I_2}, //MX8
  390. {0, K_2, J_2, L_2}, //MX14
  391. {0, B_3, A_3, C_3}, //MX11
  392. {0, E_3, D_3, F_3}, //MX12
  393. {0, H_3, G_3, I_3}, //MX13
  394. {0, K_3, J_3, L_3}, //MX19
  395. {0, B_4, A_4, C_4}, //MX16
  396. {0, E_4, D_4, F_4}, //MX17
  397. {0, H_4, G_4, I_4}, //MX18
  398. {0, K_4, J_4, L_4}, //MX23
  399. {0, B_5, A_5, C_5}, //MX20
  400. {0, E_5, D_5, F_5}, //MX21
  401. {0, H_5, G_5, I_5}, //MX22
  402. {0, K_5, J_5, L_5}, //MX27
  403. {0, B_6, A_6, C_6}, //MX24
  404. {0, E_6, D_6, F_6}, //MX25
  405. {0, H_6, G_6, I_6}, //MX26
  406. {0, K_6, J_6, L_6}, //MX31
  407. {0, B_7, A_7, C_7}, //MX28
  408. {0, E_7, D_7, F_7}, //MX29
  409. {0, H_7, G_7, I_7}, //MX30
  410. {0, K_7, J_7, L_7}, //MX36
  411. {0, B_8, A_8, C_8}, //MX33
  412. {0, E_8, D_8, F_8}, //MX34
  413. {0, H_8, G_8, I_8}, //MX35
  414. {0, K_8, J_8, L_8}, //MX40
  415. {0, B_9, A_9, C_9}, //MX37
  416. {0, E_9, D_9, F_9}, //MX38
  417. {0, H_9, G_9, I_9}, //MX39
  418. {0, K_9, J_9, L_9}, //MX44
  419. {0, B_10, A_10, C_10}, //MX41
  420. {0, E_10, D_10, F_10}, //MX42
  421. {0, H_10, G_10, I_10}, //MX43
  422. {0, K_10, J_10, L_10}, //MX48
  423. {0, B_11, A_11, C_11}, //MX45
  424. {0, E_11, D_11, F_11}, //MX46
  425. {0, H_11, G_11, I_11}, //MX47
  426. {0, K_11, J_11, L_11}, //MX53
  427. {0, B_12, A_12, C_12}, //MX50
  428. {0, E_12, D_12, F_12}, //MX51
  429. {0, H_12, G_12, I_12}, //MX52
  430. {0, K_12, J_12, L_12}, //MX9
  431. {0, B_13, A_13, C_13}, //MX55
  432. {0, E_13, D_13, F_13}, //MX56
  433. {0, K_13, J_13, L_13}, //MX61
  434. {0, B_14, A_14, C_14}, //MX59
  435. {0, E_14, D_14, F_14}, //MX57
  436. {0, H_14, G_14, I_14}, //MX60
  437. {0, K_14, J_14, L_14}, //MX62
  438. {0, B_15, A_15, C_15}, //MX5
  439. {0, E_15, D_15, F_15}, //MX10
  440. {0, H_15, G_15, I_15}, //MX15
  441. {0, K_15, J_15, L_15}, //MX32
  442. {0, E_16, D_16, F_16}, //MX49
  443. {0, H_16, G_16, I_16}, //MX54
  444. {0, K_16, J_16, L_16}, //MX58
  445. };
  446. const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
  447. //
  448. // MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
  449. // MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
  450. // MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
  451. // MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
  452. // MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
  453. /* {row | col << 4}
  454. * | {x=0..224, y=0..64}
  455. * | | modifier
  456. * | | | */
  457. {{0|(0<<4)}, { 0, 0}, 1}, //MX1
  458. {{1|(0<<4)}, { 0, 16}, 1}, //MX2
  459. {{2|(0<<4)}, { 0, 32}, 1}, //MX3
  460. {{3|(0<<4)}, { 0, 48}, 1}, //MX4
  461. {{0|(1<<4)}, { 17, 0}, 0}, //MX6
  462. {{1|(1<<4)}, { 17, 16}, 0}, //MX7
  463. {{2|(1<<4)}, { 17, 32}, 0}, //MX8
  464. {{3|(2<<4)}, { 34, 48}, 0}, //MX14
  465. {{0|(2<<4)}, { 34, 0}, 0}, //MX11
  466. {{1|(2<<4)}, { 34, 16}, 0}, //MX12
  467. {{2|(2<<4)}, { 34, 32}, 0}, //MX13
  468. {{3|(3<<4)}, { 51, 48}, 0}, //MX19
  469. {{0|(3<<4)}, { 51, 0}, 0}, //MX16
  470. {{1|(3<<4)}, { 51, 16}, 0}, //MX17
  471. {{2|(3<<4)}, { 51, 32}, 0}, //MX18
  472. {{3|(4<<4)}, { 68, 48}, 0}, //MX23
  473. {{0|(4<<4)}, { 68, 0}, 0}, //MX20
  474. {{1|(4<<4)}, { 68, 16}, 0}, //MX21
  475. {{2|(4<<4)}, { 68, 32}, 0}, //MX22
  476. {{3|(5<<4)}, { 85, 48}, 0}, //MX27
  477. {{0|(5<<4)}, { 85, 0}, 0}, //MX24
  478. {{1|(5<<4)}, { 85, 16}, 0}, //MX25
  479. {{2|(5<<4)}, { 85, 32}, 0}, //MX26
  480. {{3|(6<<4)}, {102, 48}, 0}, //MX31
  481. {{0|(6<<4)}, {102, 0}, 0}, //MX28
  482. {{1|(6<<4)}, {102, 16}, 0}, //MX29
  483. {{2|(6<<4)}, {102, 32}, 0}, //MX30
  484. {{3|(7<<4)}, {119, 48}, 0}, //MX36
  485. {{0|(7<<4)}, {119, 0}, 0}, //MX33
  486. {{1|(7<<4)}, {119, 16}, 0}, //MX34
  487. {{2|(7<<4)}, {119, 32}, 0}, //MX35
  488. {{3|(8<<4)}, {136, 48}, 0}, //MX40
  489. {{0|(8<<4)}, {136, 0}, 0}, //MX37
  490. {{1|(8<<4)}, {136, 16}, 0}, //MX38
  491. {{2|(8<<4)}, {136, 32}, 0}, //MX39
  492. {{3|(9<<4)}, {153, 48}, 0}, //MX44
  493. {{0|(9<<4)}, {153, 0}, 0}, //MX41
  494. {{1|(9<<4)}, {153, 16}, 0}, //MX42
  495. {{2|(9<<4)}, {153, 32}, 0}, //MX43
  496. {{3|(10<<4)}, {170, 48}, 0}, //MX48
  497. {{0|(10<<4)}, {170, 0}, 0}, //MX45
  498. {{1|(10<<4)}, {170, 16}, 0}, //MX46
  499. {{2|(10<<4)}, {170, 32}, 0}, //MX47
  500. {{3|(11<<4)}, {187, 48}, 0}, //MX53
  501. {{0|(11<<4)}, {187, 0}, 0}, //MX50
  502. {{1|(11<<4)}, {187, 16}, 0}, //MX51
  503. {{2|(11<<4)}, {187, 32}, 0}, //MX52
  504. {{3|(2<<4)}, { 17, 32}, 1}, //MX9
  505. {{0|(12<<4)}, {204, 0}, 0}, //MX55
  506. {{1|(12<<4)}, {204, 16}, 0}, //MX56
  507. {{3|(13<<4)}, {221, 48}, 1}, //MX61
  508. {{0|(13<<4)}, {221, 0}, 1}, //MX59
  509. {{2|(12<<4)}, {204, 32}, 0}, //MX57
  510. {{2|(13<<4)}, {221, 24}, 1}, //MX60
  511. {{4|(13<<4)}, {221, 64}, 1}, //MX62
  512. {{4|(0<<4)}, { 0, 64}, 1}, //MX5
  513. {{4|(1<<4)}, { 17, 64}, 1}, //MX10
  514. {{4|(2<<4)}, { 34, 64}, 1}, //MX15
  515. {{4|(5<<4)}, {102, 64}, 0}, //MX32
  516. {{4|(10<<4)}, {170, 64}, 1}, //MX49
  517. {{4|(11<<4)}, {187, 64}, 1}, //MX54
  518. {{4|(12<<4)}, {204, 64}, 1} //MX58
  519. };
  520. #endif
  521. void bootmagic_lite(void)
  522. {
  523. // The lite version of TMK's bootmagic made by Wilba.
  524. // 100% less potential for accidentally making the
  525. // keyboard do stupid things.
  526. // We need multiple scans because debouncing can't be turned off.
  527. matrix_scan();
  528. wait_ms(10);
  529. matrix_scan();
  530. // If the Esc and space bar are held down on power up,
  531. // reset the EEPROM valid state and jump to bootloader.
  532. // Assumes Esc is at [0,0] and spacebar is at [4,6].
  533. // This isn't very generalized, but we need something that doesn't
  534. // rely on user's keymaps in firmware or EEPROM.
  535. if ( ( matrix_get_row(0) & (1<<0) ) &&
  536. ( matrix_get_row(4) & (1<<6) ) )
  537. {
  538. // Set the TMK/QMK EEPROM state as invalid.
  539. eeconfig_disable();
  540. //eeprom_set_valid(false);
  541. // Jump to bootloader.
  542. bootloader_jump();
  543. }
  544. }
  545. void matrix_init_kb(void) {
  546. // put your keyboard start-up code here
  547. // runs once when the firmware starts up
  548. bootmagic_lite();
  549. // Please ignore this is for upcoming features
  550. // If the EEPROM has the magic, the data is good.
  551. // OK to load from EEPROM.
  552. /*if (eeprom_is_valid())
  553. {
  554. backlight_config_load();
  555. // TODO: do something to "turn on" keymaps in EEPROM?
  556. }
  557. else
  558. {
  559. // If the EEPROM has not been saved before, or is out of date,
  560. // save the default values to the EEPROM. Default values
  561. // come from construction of the zeal_backlight_config instance.
  562. backlight_config_save();
  563. // Clear the LED colors stored in EEPROM
  564. for ( int row=0; row < MATRIX_ROWS; row++ )
  565. {
  566. HSV hsv;
  567. for ( int column=0; column < MATRIX_COLS; column++ )
  568. {
  569. hsv.h = rand() & 0xFF;
  570. hsv.s = rand() & 0x7F;
  571. hsv.v = 255;
  572. backlight_set_key_color( row, column, hsv );
  573. }
  574. }
  575. #ifdef USE_KEYMAPS_IN_EEPROM
  576. keymap_default_save();
  577. #endif
  578. // Save the magic number last, in case saving was interrupted
  579. eeprom_set_valid(true);
  580. }*/
  581. matrix_init_user();
  582. }
  583. void matrix_scan_kb(void) {
  584. matrix_scan_user();
  585. }
  586. bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
  587. return process_record_user(keycode, record);
  588. }
  589. void led_set_kb(uint8_t usb_led) {
  590. //backlight_set_indicator_state(usb_led);
  591. }