drashna.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. #include "drashna.h"
  2. #include "quantum.h"
  3. #include "action.h"
  4. #include "version.h"
  5. __attribute__ ((weak))
  6. void matrix_init_keymap(void) {}
  7. __attribute__ ((weak))
  8. void matrix_scan_keymap(void) {}
  9. __attribute__ ((weak))
  10. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  11. return true;
  12. }
  13. void matrix_init_user(void) {
  14. #ifdef RGBLIGHT_ENABLE
  15. uint8_t default_layer = eeconfig_read_default_layer();
  16. rgblight_enable();
  17. if (true) {
  18. if (default_layer & (1UL << _COLEMAK)) {
  19. rgblight_set_magenta;
  20. }
  21. else if (default_layer & (1UL << _DVORAK)) {
  22. rgblight_set_green;
  23. }
  24. else if (default_layer & (1UL << _WORKMAN)) {
  25. rgblight_set_purple;
  26. }
  27. else {
  28. rgblight_set_teal;
  29. }
  30. }
  31. else
  32. {
  33. rgblight_set_red;
  34. rgblight_mode(5);
  35. }
  36. #endif
  37. matrix_init_keymap();
  38. }
  39. void matrix_scan_user(void) {
  40. matrix_scan_keymap();
  41. }
  42. #ifdef AUDIO_ENABLE
  43. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  44. float tone_dvorak[][2] = SONG(DVORAK_SOUND);
  45. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  46. float tone_workman[][2] = SONG(PLOVER_SOUND);
  47. #endif
  48. void persistent_default_layer_set(uint16_t default_layer) {
  49. eeconfig_update_default_layer(default_layer);
  50. default_layer_set(default_layer);
  51. }
  52. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  53. uint16_t kc;
  54. if (is_overwatch) {
  55. kc = KC_BSPC;
  56. }
  57. else {
  58. kc = KC_ENTER;
  59. }
  60. #ifdef CONSOLE_ENABLE
  61. xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
  62. #endif
  63. switch (keycode) {
  64. case KC_QWERTY:
  65. if (record->event.pressed) {
  66. #ifdef AUDIO_ENABLE
  67. PLAY_SONG(tone_qwerty);
  68. #endif
  69. persistent_default_layer_set(1UL << _QWERTY);
  70. }
  71. return false;
  72. break;
  73. case KC_COLEMAK:
  74. if (record->event.pressed) {
  75. #ifdef AUDIO_ENABLE
  76. PLAY_SONG(tone_colemak);
  77. #endif
  78. persistent_default_layer_set(1UL << _COLEMAK);
  79. }
  80. return false;
  81. break;
  82. case KC_DVORAK:
  83. if (record->event.pressed) {
  84. #ifdef AUDIO_ENABLE
  85. PLAY_SONG(tone_dvorak);
  86. #endif
  87. persistent_default_layer_set(1UL << _DVORAK);
  88. }
  89. return false;
  90. break;
  91. case KC_WORKMAN:
  92. if (record->event.pressed) {
  93. #ifdef AUDIO_ENABLE
  94. PLAY_SONG(tone_workman);
  95. #endif
  96. persistent_default_layer_set(1UL << _WORKMAN);
  97. }
  98. return false;
  99. break;
  100. case LOWER:
  101. if (record->event.pressed) {
  102. layer_on(_LOWER);
  103. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  104. }
  105. else {
  106. layer_off(_LOWER);
  107. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  108. }
  109. return false;
  110. break;
  111. case RAISE:
  112. if (record->event.pressed) {
  113. layer_on(_RAISE);
  114. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  115. }
  116. else {
  117. layer_off(_RAISE);
  118. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  119. }
  120. return false;
  121. break;
  122. case ADJUST:
  123. if (record->event.pressed) {
  124. layer_on(_ADJUST);
  125. }
  126. else {
  127. layer_off(_ADJUST);
  128. }
  129. return false;
  130. break;
  131. case KC_OVERWATCH:
  132. if (record->event.pressed) {
  133. is_overwatch = !is_overwatch;
  134. }
  135. #ifdef RGBLIGHT_ENABLE
  136. is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
  137. #endif
  138. return false;
  139. break;
  140. case KC_SALT:
  141. if (!record->event.pressed) {
  142. register_code(kc);
  143. unregister_code(kc);
  144. _delay_ms(50);
  145. SEND_STRING("Salt, salt, salt...");
  146. register_code(KC_ENTER);
  147. unregister_code(KC_ENTER);
  148. }
  149. return false;
  150. break;
  151. case KC_MORESALT:
  152. if (!record->event.pressed) {
  153. register_code(kc);
  154. unregister_code(kc);
  155. _delay_ms(50);
  156. SEND_STRING("Please sir, can I have some more salt?!");
  157. register_code(KC_ENTER);
  158. unregister_code(KC_ENTER);
  159. }
  160. return false;
  161. break;
  162. case KC_SALTHARD:
  163. if (!record->event.pressed) {
  164. register_code(kc);
  165. unregister_code(kc);
  166. _delay_ms(50);
  167. SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
  168. register_code(KC_ENTER);
  169. unregister_code(KC_ENTER);
  170. }
  171. return false;
  172. break;
  173. case KC_GOODGAME:
  174. if (!record->event.pressed) {
  175. register_code(kc);
  176. unregister_code(kc);
  177. _delay_ms(50);
  178. SEND_STRING("Good game, everyone!");
  179. register_code(KC_ENTER);
  180. unregister_code(KC_ENTER);
  181. }
  182. return false;
  183. break;
  184. case KC_GLHF:
  185. if (!record->event.pressed) {
  186. register_code(kc);
  187. unregister_code(kc);
  188. _delay_ms(50);
  189. SEND_STRING("Good luck, have fun!!!");
  190. register_code(KC_ENTER);
  191. unregister_code(KC_ENTER);
  192. }
  193. return false;
  194. break;
  195. case KC_SYMM:
  196. if (!record->event.pressed) {
  197. register_code(kc);
  198. unregister_code(kc);
  199. _delay_ms(50);
  200. SEND_STRING("Left click to win!");
  201. register_code(KC_ENTER);
  202. unregister_code(KC_ENTER);
  203. }
  204. return false;
  205. break;
  206. case KC_DOOMFIST:
  207. if (!record->event.pressed) {
  208. register_code(kc);
  209. unregister_code(kc);
  210. _delay_ms(50);
  211. SEND_STRING("Hey, look at me. I'm Doomfist, and I'm overpowered! All I do is spam punches all day! I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
  212. register_code(KC_ENTER);
  213. unregister_code(KC_ENTER);
  214. }
  215. return false;
  216. break;
  217. case KC_JUSTGAME:
  218. if (!record->event.pressed) {
  219. register_code(kc);
  220. unregister_code(kc);
  221. _delay_ms(50);
  222. SEND_STRING("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.");
  223. register_code(KC_ENTER);
  224. unregister_code(KC_ENTER);
  225. }
  226. return false;
  227. break;
  228. case KC_TORB:
  229. if (!record->event.pressed) {
  230. register_code(kc);
  231. unregister_code(kc);
  232. _delay_ms(50);
  233. SEND_STRING("That was positively riveting!");
  234. register_code(KC_ENTER);
  235. unregister_code(KC_ENTER);
  236. }
  237. return false;
  238. break;
  239. case KC_AIM:
  240. if (!record->event.pressed) {
  241. register_code(kc);
  242. unregister_code(kc);
  243. _delay_ms(50);
  244. SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
  245. _delay_ms(50);
  246. SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
  247. }
  248. return false;
  249. break;
  250. case KC_MAKE:
  251. if (!record->event.pressed) {
  252. #ifdef RGBLIGHT_ENABLE
  253. SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes" SS_TAP(X_ENTER));
  254. #else
  255. SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER));
  256. #endif
  257. }
  258. return false;
  259. break;
  260. case KC_RESET:
  261. if (!record->event.pressed) {
  262. #ifdef RGBLIGHT_ENABLE
  263. rgblight_enable();
  264. rgblight_mode(1);
  265. rgblight_setrgb(0xff, 0x00, 0x00);
  266. #endif
  267. reset_keyboard();
  268. }
  269. return false;
  270. break;
  271. case EPRM:
  272. if (record->event.pressed) {
  273. eeconfig_init();
  274. }
  275. return false;
  276. break;
  277. case VRSN:
  278. if (record->event.pressed) {
  279. SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  280. }
  281. return false;
  282. break;
  283. case KC_P00:
  284. if (!record->event.pressed) {
  285. register_code(KC_P0);
  286. unregister_code(KC_P0);
  287. register_code(KC_P0);
  288. unregister_code(KC_P0);
  289. }
  290. return false;
  291. break;
  292. }
  293. return process_record_keymap(keycode, record);
  294. }
  295. uint32_t layer_state_set_kb(uint32_t state) {
  296. #ifdef RGBLIGHT_ENABLE
  297. uint8_t default_layer = eeconfig_read_default_layer();
  298. switch (biton32(state)) {
  299. case _NAV:
  300. rgblight_set_blue;
  301. rgblight_mode(1);
  302. break;
  303. case _SYMB:
  304. rgblight_set_blue;
  305. rgblight_mode(2);
  306. break;
  307. case _MOUS:
  308. rgblight_set_yellow;
  309. rgblight_mode(1);
  310. break;
  311. case _MACROS:
  312. rgblight_set_orange;
  313. is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
  314. rgblight_mode(18);
  315. break;
  316. case _MEDIA:
  317. rgblight_set_green;
  318. rgblight_mode(22);
  319. break;
  320. case _OVERWATCH:
  321. rgblight_set_orange;
  322. rgblight_mode(17);
  323. break;
  324. case _DIABLO:
  325. rgblight_set_red;
  326. rgblight_mode(5);
  327. break;
  328. case _RAISE:
  329. rgblight_set_yellow;
  330. rgblight_mode(5);
  331. break;
  332. case _LOWER:
  333. rgblight_set_orange;
  334. rgblight_mode(5);
  335. break;
  336. case _ADJUST:
  337. rgblight_set_red;
  338. rgblight_mode(23);
  339. break;
  340. case _COVECUBE:
  341. rgblight_set_green;
  342. rgblight_mode(2);
  343. default:
  344. if (default_layer & (1UL << _COLEMAK)) {
  345. rgblight_set_magenta;
  346. }
  347. else if (default_layer & (1UL << _DVORAK)) {
  348. rgblight_set_green;
  349. }
  350. else if (default_layer & (1UL << _WORKMAN)) {
  351. rgblight_set_purple;
  352. }
  353. else {
  354. rgblight_set_teal;
  355. }
  356. rgblight_mode(1);
  357. break;
  358. }
  359. #endif
  360. return state;
  361. }