keymap.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  1. #include "tetris.h"
  2. #include "action_layer.h"
  3. #ifdef AUDIO_ENABLE
  4. #include "audio.h"
  5. float tone_caps[][2] = SONG( CAPS_LOCK_ON_SOUND );
  6. float tone_taps[][2] = SONG( E__NOTE( _A6 ) );
  7. #endif
  8. /* Fillers to make layering more clear */
  9. #define _______ KC_TRNS
  10. #define XXXXXXX KC_NO
  11. #define _BASE 0
  12. #define _CODE 1
  13. #define _NAVI 2
  14. #define _FUNC 3
  15. #define _SYMB 4
  16. #define _NUMB 5
  17. #define _MARO 6
  18. #define _RGB 7
  19. #define _ADJUST 8
  20. #define _GAME 9
  21. /* RGB colors */
  22. #define RGB_Layer_1_Base_Color 0, 128, 0
  23. #define RGB_Layer_2_Base_Color 0,0,0
  24. #define RGB_Layer_3_Base_Color 0,0,0
  25. #define RGB_Layer_4_Base_Color 0,0,0
  26. #define RGB_Layer_5_Base_Color 0,0,0
  27. #define RGB_Layer_6_Base_Color 64, 0, 64
  28. #define RGB_Layer_7_Base_Color 0, 0,0
  29. #define RGB_Layer_8_Base_Color 0,0,0
  30. #define RGB_Layer_9_Base_Color 0,0,0
  31. #define RGB_Caps_Color 6,50,50
  32. #define RGB_TAP_On_Color 0,128,0
  33. #define RGB_TAP_Off_Color 128,0,0
  34. #define RGB_TAP_Base_Color 0,0,0
  35. extern rgblight_config_t rgblight_config;
  36. bool NUMLAY_STATUS = false;
  37. int RGB_LAYER0_mode = 6;
  38. bool RGB_TAP_STATE = false;
  39. static uint8_t current_layer = 0;
  40. static bool has_layer_changed = true;
  41. static bool save_rgbmode = true;
  42. static bool caps = false;
  43. /* Tap Dance function */
  44. void dance_cln_finished( qk_tap_dance_state_t* state, void* user_data )
  45. {
  46. if ( state->count == 1 )
  47. {
  48. register_code( KC_LSFT );
  49. } else {
  50. layer_on( _SYMB );
  51. #ifdef AUDIO_ENABLE
  52. PLAY_SONG( tone_taps );
  53. #endif
  54. }
  55. }
  56. void dance_cln_reset( qk_tap_dance_state_t* state, void* user_data )
  57. {
  58. if ( state->count == 1 )
  59. {
  60. unregister_code( KC_LSFT );
  61. }else {
  62. uint8_t layer = biton32( layer_state );
  63. if ( layer == _SYMB )
  64. {
  65. layer_off( _SYMB );
  66. rgblight_mode( RGB_LAYER0_mode );
  67. }
  68. }
  69. }
  70. enum my_keycodes {
  71. RGB_TAP = SAFE_RANGE,
  72. KC_00
  73. };
  74. /* Tap Dance Declarations */
  75. enum {
  76. TD_Mute_Next = 0,
  77. TD_SFT,
  78. TD_LBRC,
  79. TD_RBRC
  80. };
  81. /* Tap Dance Definitions */
  82. qk_tap_dance_action_t tap_dance_actions[] = {
  83. [TD_Mute_Next] = ACTION_TAP_DANCE_DOUBLE( KC_MUTE, KC_MNXT )
  84. ,[TD_SFT] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, dance_cln_finished, dance_cln_reset )
  85. ,[TD_LBRC] = ACTION_TAP_DANCE_DOUBLE( KC_LBRC, KC_LCBR )
  86. ,[TD_RBRC] = ACTION_TAP_DANCE_DOUBLE( KC_RBRC, KC_RCBR )
  87. };
  88. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  89. /* BASE - QWERTY
  90. * ,-----------------------------------------------------------------------------------.
  91. * | Tab | Q | W | E | R | T | Y | U | I | O | P | BS |
  92. * |------+------+------+------+------+-------------+------+------+------+------+------|
  93. * shift + Esc = ~ --> | Esc | A | S | D | F | G | H | J | K | L | ; | Enter| <-- shift + Enter = "
  94. * |------+------+------+------+------+------|------+------+------+------+------+------|
  95. * | Shift| Z | X | C | V | B | N | M | , | . | / | Mute |
  96. * |------+------+------+------+------+------+------+------+------+------+------+------| <-- tap: 1.Mute 2.Next
  97. * | Ctrl | GUI | Alt | [ | - | Space | = | ] | Fx | \ | Del |
  98. * `-----------------------------------------------------------------------------------'
  99. */
  100. [_BASE] = LAYOUT_planck_mit(
  101. LT( _ADJUST,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  102. LT( _NUMB,KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT( _RGB, KC_L ), KC_SCLN, KC_ENT,
  103. TD( TD_SFT ), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, TD( TD_Mute_Next ),
  104. KC_LCTL, KC_LGUI, KC_LALT, TD( TD_LBRC ), LT( _NAVI, KC_MINS ), LT( _CODE, KC_SPC ), LT( _FUNC, KC_EQL ), TD( TD_RBRC ), KC_LEFT, KC_DOWN, KC_RGHT ),
  105. /* Code
  106. * ,-----------------------------------------------------------------------------------.
  107. * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  108. * |------+------+------+------+------+-------------+------+------+------+------+------|
  109. * | ` | < | [ | { | ( | & | Left | Down | Up | Down | ; | ' |
  110. * |------+------+------+------+------+------|------+------+------+------+------+------|
  111. * | | > | ] | } | ) | | | | | , | . | / | Play |
  112. * |------+------+------+------+------+------+------+------+------+------+------+------|
  113. * | | | | [ | BkSp | ======= | Del | ] | | \ | |
  114. * `-----------------------------------------------------------------------------------'
  115. */
  116. [_CODE] = LAYOUT_planck_mit( /* 1 - Code */
  117. _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  118. KC_GRV, KC_LABK, KC_LBRC, KC_LCBR, KC_LPRN, KC_AMPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_QUOT,
  119. _______, KC_RABK, KC_RBRC, KC_RCBR, KC_RPRN, KC_PIPE, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, KC_MPLY,
  120. _______, _______, _______, KC_LBRC, KC_BSPC, _______, KC_DEL, KC_RBRC, _______, KC_BSLS, _______ ),
  121. /* Navi
  122. * ,-----------------------------------------------------------------------------------.
  123. * | | | | PgUp | | | | |Insert| |Prtsc | |
  124. * |------+------+------+------+------+-------------+------+------+------+------+------|
  125. * | ~ | | Home | PgDn | End | | | | |SrcLck| | |
  126. * |------+------+------+------+------+------|------+------+------+------+------+------|
  127. * | | | | | | Break| | | | | PgUp | |
  128. * |------+------+------+------+------+------+------+------+------+------+------+------|
  129. * | | | | | | | | | Home | PgDn | End |
  130. * `-----------------------------------------------------------------------------------'
  131. */
  132. [_NAVI] = LAYOUT_planck_mit(
  133. _______, XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, _______,
  134. KC_TILD, XXXXXXX, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK, _______, _______,
  135. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______,
  136. _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END ),
  137. /* Func
  138. * ,-----------------------------------------------------------------------------------.
  139. * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
  140. * |------+------+------+------+------+-------------+------+------+------+------+------|
  141. * | | F11 | F12 | | | | | | | | | |
  142. * |------+------+------+------+------+------|------+------+------+------+------+------|
  143. * | | | | | | | | | | | | |
  144. * |------+------+------+------+------+------+------+------+------+------+------+------|
  145. * | | | | | | | | | | | |
  146. * `-----------------------------------------------------------------------------------'
  147. */
  148. [_FUNC] = LAYOUT_planck_mit(
  149. _______ , KC_F1, KC_F2 , KC_F3, KC_F4, KC_F5, KC_F6 , KC_F7, KC_F8, KC_F9, KC_F10, _______,
  150. _______ , KC_F12, KC_F12 , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  151. _______ , XXXXXXX, XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  152. _______ , _______, _______ , _______, _______, _______, _______ , _______, _______, _______, _______ ),
  153. /* Symb - double tap shift
  154. * ,-----------------------------------------------------------------------------------.
  155. * | | | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
  156. * |------+------+------+------+------+-------------+------+------+------+------+------|
  157. * | | | | | | | | | | | : | " |
  158. * |------+------+------+------+------+------|------+------+------+------+------+------|
  159. * | | | | | | | | | < | > | ? | |
  160. * |------+------+------+------+------+------+------+------+------+------+------+------|
  161. * | | | | { | _ | | + | } | | | |
  162. * `-----------------------------------------------------------------------------------'
  163. */
  164. [_SYMB] = LAYOUT_planck_mit(
  165. KC_PIPE, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  166. KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COLN, KC_DQUO,
  167. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LABK, KC_RABK, KC_QUES, _______,
  168. _______, _______, _______, KC_LCBR, KC_UNDS, _______, KC_PLUS, KC_RCBR, _______, KC_PIPE, _______ ),
  169. /* Number
  170. * ,-----------------------------------------------------------------------------------.
  171. * | | + | - | | | | | 7 | 8 | 9 | | |
  172. * |------+------+------+------+------+-------------+------+------+------+------+------|
  173. * | | * | / | = | | | | 4 | 5 | 6 | | |
  174. * |------+------+------+------+------+------|------+------+------+------+------+------|
  175. * | | | | | | | | 1 | 2 | 3 | |Layer0|
  176. * |------+------+------+------+------+------+------+------+------+------+------+------|
  177. * | | | | | | | 0 | 00 | . | | |
  178. * `-----------------------------------------------------------------------------------'
  179. */
  180. [_NUMB] = LAYOUT_planck_mit( /* 5 - Numpad */
  181. _______, KC_PPLS, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, XXXXXXX, _______,
  182. _______, KC_PAST, KC_PSLS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, XXXXXXX, _______,
  183. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, XXXXXXX, TO( 0 ),
  184. _______, _______, _______, _______, _______, XXXXXXX, KC_0, KC_00, KC_DOT, XXXXXXX, _______ ),
  185. /* MARO Empty
  186. * ,-----------------------------------------------------------------------------------.
  187. * | | | | | | | | | | | | |
  188. * |------+------+------+------+------+-------------+------+------+------+------+------|
  189. * | | | | | | | | | | | | |
  190. * |------+------+------+------+------+------|------+------+------+------+------+------|
  191. * | | | | | | | | | | | | |
  192. * |------+------+------+------+------+------+------+------+------+------+------+------|
  193. * | | | | | | | | | | | |
  194. * `-----------------------------------------------------------------------------------'
  195. */
  196. [_MARO] = LAYOUT_planck_mit(
  197. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  198. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  199. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  200. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
  201. /* RGB
  202. * ,-----------------------------------------------------------------------------------.
  203. * | | | | | | _TAP | | | | | | |
  204. * |------+------+------+------+------+-------------+------+------+------+------+------|
  205. * | MOD | M_R | M_SW | M_K | M_X | M_G | | | | | | |
  206. * |------+------+------+------+------+------|------+------+------+------+------+------|
  207. * | HUI | SAI | VAI | | | | | | | | | |
  208. * |------+------+------+------+------+------+------+------+------+------+------+------|
  209. * | HUD | SAD | VAD | | | RGB_TOG | | | | | |
  210. * `-----------------------------------------------------------------------------------'
  211. */
  212. [_RGB] = LAYOUT_planck_mit(
  213. _______, _______, _______, _______, _______, RGB_TAP, _______, _______, _______, _______, _______, _______,
  214. RGB_MOD, RGB_M_R, RGB_M_SW, RGB_M_K, RGB_M_X, RGB_M_G, _______, _______, _______, _______, _______, _______,
  215. RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  216. RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, RGB_TOG, _______, _______, _______, _______, _______ ),
  217. /* Func
  218. * ,-----------------------------------------------------------------------------------.
  219. * | | | | | | | | | | |Layer0| Rest |
  220. * |------+------+------+------+------+-------------+------+------+------+------+------|
  221. * | Caps | | | | | Game | | | | | | |
  222. * |------+------+------+------+------+------|------+------+------+------+------+------|
  223. * | | | | | | | Numb | Music| | | | |
  224. * |------+------+------+------+------+------+------+------+------+------+------+------|
  225. * | | | | | | | | | | | |
  226. * `-----------------------------------------------------------------------------------'
  227. */
  228. [_ADJUST] = LAYOUT_planck_mit(
  229. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO( 0 ), RESET ,
  230. KC_CAPS, _______, _______, _______, _______, TO(_GAME), _______, _______, _______, _______, _______, _______,
  231. _______, _______, _______, _______, _______, _______, TO(_NUMB), MU_TOG, _______, _______, _______, _______,
  232. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
  233. [_GAME] = LAYOUT_planck_mit(
  234. XXXXXXX,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX,
  235. XXXXXXX,KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  236. XXXXXXX,KC_LCTL, KC_A, KC_S, KC_D, KC_B, KC_N, KC_M, XXXXXXX, XXXXXXX, KC_UP, TO( 0 ),
  237. XXXXXXX,KC_LSFT, KC_Z, KC_X, KC_C, KC_SPC, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT ),
  238. };
  239. /* Encoder */
  240. static uint8_t encoder_state = 0;
  241. static int8_t encoder_value = 0;
  242. static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 };
  243. /* Timer */
  244. static uint16_t TAP_RGB_timer;
  245. static uint16_t RGB_encoder_timer;
  246. /* Encoder state RGB_display */
  247. static uint8_t RGB_encoder_count=6;
  248. static bool RGB_encoder_bool = false;
  249. /* RGB tap HUE */
  250. static uint16_t Type_Hue=270;
  251. void matrix_init_user( void )
  252. {
  253. _delay_ms( 200 );
  254. /* Encoder init */
  255. encoder_state = PIND & 0x3;
  256. /* Timer init */
  257. RGB_encoder_timer= timer_read();
  258. TAP_RGB_timer= timer_read();
  259. }
  260. void matrix_scan_user( void )
  261. {
  262. /* Layer */
  263. uint8_t layer = biton32( layer_state );
  264. /* Encoder */
  265. encoder_state <<= 2;
  266. encoder_state |= (PIND & 0x3);
  267. encoder_value += encoder_LUT[encoder_state & 0xF];
  268. /* Encoder state RGB display */
  269. if (RGB_encoder_bool){
  270. if (timer_elapsed(RGB_encoder_timer) > 2500) {
  271. RGB_encoder_bool=false;
  272. if (RGB_TAP_STATE) {
  273. rgblight_mode( 1 );
  274. rgblight_setrgb( RGB_TAP_Base_Color );
  275. }else{
  276. rgblight_mode( RGB_LAYER0_mode );
  277. }
  278. }
  279. }
  280. /* Display the Caps state */
  281. if (caps==true){
  282. rgblight_setrgb_at(RGB_Caps_Color,12);
  283. }
  284. /* Start of Encoder clockwise */
  285. if ( encoder_value >= 4 ) {
  286. /* Start of Encoder state RGB_display */
  287. if (!RGB_encoder_bool){
  288. RGB_encoder_timer=timer_read();
  289. RGB_encoder_bool=true;
  290. RGB_encoder_count=5;
  291. rgblight_mode(1);
  292. rgblight_setrgb( 0,0,0 );
  293. }else if (RGB_encoder_bool && timer_elapsed(RGB_encoder_timer) < 800) {
  294. RGB_encoder_timer=timer_read();
  295. RGB_encoder_count-=1;
  296. if (RGB_encoder_count>5 || RGB_encoder_count<1){
  297. RGB_encoder_count=5;
  298. rgblight_setrgb(0, 0, 0);
  299. }
  300. }
  301. rgblight_setrgb_at(0,255,0,5);
  302. if (RGB_encoder_count<1) {RGB_encoder_count=1;}
  303. switch (RGB_encoder_count) {
  304. case 5:
  305. rgblight_setrgb_at(0, 255, 0,4);
  306. break;
  307. case 4:
  308. rgblight_setrgb_at(0, 255, 0,3);
  309. break;
  310. case 3:
  311. rgblight_setrgb_at(0, 255, 0,2);
  312. break;
  313. case 2:
  314. rgblight_setrgb_at(0, 255, 0,1);
  315. break;
  316. case 1:
  317. rgblight_setrgb_at(0, 255, 0,0);
  318. break;
  319. }
  320. /* End of Encoder state RGB_display */
  321. /* Start of Set Encoder Keycode */
  322. switch ( layer )
  323. {
  324. case 0:
  325. register_code( KC_VOLD );
  326. unregister_code( KC_VOLD );
  327. break;
  328. case _CODE:
  329. register_code( KC_LEFT );
  330. unregister_code( KC_LEFT );
  331. break;
  332. case _RGB:
  333. rgblight_decrease_val();
  334. break;
  335. case _NUMB:
  336. register_code( KC_LEFT );
  337. unregister_code( KC_LEFT );
  338. break;
  339. case _MARO:
  340. register_code( KC_UP );
  341. unregister_code( KC_UP );
  342. break;
  343. default:
  344. register_code( KC_VOLD );
  345. unregister_code( KC_VOLD );
  346. }
  347. /* End of Set Encoder Keycode */
  348. }
  349. /* End of Encoder clockwise */
  350. /* Start of Encoder anti-clockwise */
  351. if ( encoder_value <= -4 )
  352. {
  353. /* Start of Encoder state RGB_display */
  354. if (!RGB_encoder_bool){
  355. RGB_encoder_timer=timer_read();
  356. RGB_encoder_bool=true;
  357. RGB_encoder_count=6;
  358. rgblight_mode(1);
  359. rgblight_setrgb( 0,0,0 );
  360. }else if (RGB_encoder_bool && timer_elapsed(RGB_encoder_timer) < 800) {
  361. RGB_encoder_timer=timer_read();
  362. RGB_encoder_count+=1;
  363. if (RGB_encoder_count<6 || RGB_encoder_count> 10){
  364. RGB_encoder_count=6;
  365. rgblight_setrgb(0, 0, 0);
  366. }
  367. }
  368. rgblight_setrgb_at(0, 0,255,6);
  369. if (RGB_encoder_count>11) {
  370. RGB_encoder_count=11;
  371. }
  372. switch (RGB_encoder_count) {
  373. case 6:
  374. rgblight_setrgb_at(0, 0,255,7);
  375. break;
  376. case 7:
  377. rgblight_setrgb_at(0, 0,255,8);
  378. break;
  379. case 8:
  380. rgblight_setrgb_at(0, 0,255,9);
  381. break;
  382. case 9:
  383. rgblight_setrgb_at(0, 0,255,10);
  384. break;
  385. case 10:
  386. rgblight_setrgb_at(0, 0,128,11);
  387. break;
  388. }
  389. /* End of Encoder state RGB_display */
  390. /* Start of Set Encoder Keycode */
  391. switch ( layer )
  392. {
  393. case 0:
  394. register_code( KC_VOLU );
  395. unregister_code( KC_VOLU );
  396. break;
  397. case _CODE:
  398. register_code( KC_RGHT );
  399. unregister_code( KC_RGHT );
  400. break;
  401. case _RGB:
  402. rgblight_increase_val();
  403. break;
  404. case _NUMB:
  405. register_code( KC_RGHT );
  406. unregister_code( KC_RGHT );
  407. break;
  408. case _MARO:
  409. register_code( KC_DOWN );
  410. unregister_code( KC_DOWN );
  411. break;
  412. default:
  413. register_code( KC_VOLU );
  414. unregister_code( KC_VOLU );
  415. }
  416. /* End of Set Encoder Keycode */
  417. }
  418. /* End of Encoder anti-clockwise */
  419. encoder_value %= 4;
  420. /* Start of RGB with Layer change */
  421. /* Save the Layer0 RGB state */
  422. if ( save_rgbmode == true ) {
  423. if (RGB_TAP_STATE==false)
  424. {
  425. RGB_LAYER0_mode = rgblight_config.mode;
  426. }
  427. }
  428. save_rgbmode = false;
  429. /* When the layer is changed */
  430. if ( layer != current_layer && caps == false) {
  431. has_layer_changed = true;
  432. current_layer = layer; /* update layer information */
  433. }
  434. /* Check for layer change, and apply color if its changed since last check */
  435. if ( has_layer_changed )
  436. {
  437. /* change backlight based on layer. These should be numbers or whatever you defined the layers as */
  438. switch ( layer )
  439. {
  440. case 0:
  441. /* if the key tap RGB effect is enable */
  442. if (RGB_TAP_STATE==true){
  443. rgblight_mode(1);
  444. rgblight_setrgb( RGB_TAP_Base_Color );
  445. }
  446. else{
  447. rgblight_mode( RGB_LAYER0_mode );
  448. }
  449. break;
  450. case _CODE: //1
  451. /* Save Layer0 RGB state */
  452. RGB_LAYER0_mode = rgblight_config.mode;
  453. /* set all the RGB color under the switch */
  454. rgblight_mode( 1 );
  455. rgblight_setrgb(RGB_Layer_1_Base_Color);
  456. /* set each of the RGB led color under the switch */
  457. rgblight_setrgb_at(64, 64, 64,1); // Q
  458. rgblight_setrgb_at(64, 64, 64,2); // W
  459. rgblight_setrgb_at(64, 64, 64,3); // E
  460. rgblight_setrgb_at(64, 64, 64,4); // R
  461. rgblight_setrgb_at(64, 64, 64,5); // T
  462. rgblight_setrgb_at(64, 64, 64,6); // Y
  463. rgblight_setrgb_at(64, 64, 64,7); // U
  464. rgblight_setrgb_at(64, 64, 64,8); // I
  465. rgblight_setrgb_at(64, 64, 64,9); // O
  466. rgblight_setrgb_at(64, 64, 64,10); // P
  467. rgblight_setrgb_at(64, 0, 0,40); // -
  468. rgblight_setrgb_at(64, 0, 0,42); // =
  469. break;
  470. case _NAVI: //2
  471. RGB_LAYER0_mode = rgblight_config.mode;
  472. rgblight_mode( 1 );
  473. rgblight_setrgb(RGB_Layer_2_Base_Color);
  474. rgblight_setrgb_at(64, 0, 64,3);
  475. rgblight_setrgb_at(64, 0, 64,14);
  476. rgblight_setrgb_at(64, 0, 64,15);
  477. rgblight_setrgb_at(64, 0, 64,16);
  478. rgblight_setrgb_at(64, 64, 0,8);
  479. rgblight_setrgb_at(64, 64, 0,10);
  480. rgblight_setrgb_at(64, 64, 0,21);
  481. rgblight_setrgb_at(64, 64, 0,29);
  482. rgblight_setrgb_at(64, 0, 0,11);
  483. rgblight_setrgb_at(0, 0, 64,34);
  484. rgblight_setrgb_at(0, 0, 64,44);
  485. rgblight_setrgb_at(0, 0, 64,45);
  486. rgblight_setrgb_at(0, 0, 64,46);
  487. break;
  488. case _FUNC: //3
  489. RGB_LAYER0_mode = rgblight_config.mode;
  490. rgblight_mode( 1 );
  491. rgblight_setrgb(RGB_Layer_3_Base_Color);
  492. rgblight_setrgb_at(0, 0, 64,1);
  493. rgblight_setrgb_at(0, 0, 64,2);
  494. rgblight_setrgb_at(0, 0, 64,3);
  495. rgblight_setrgb_at(0, 0, 64,4);
  496. rgblight_setrgb_at(0, 0, 64,5);
  497. rgblight_setrgb_at(0, 0, 64,6);
  498. rgblight_setrgb_at(0, 0, 64,7);
  499. rgblight_setrgb_at(0, 0, 64,8);
  500. rgblight_setrgb_at(0, 0, 64,9);
  501. rgblight_setrgb_at(0, 0, 64,10);
  502. rgblight_setrgb_at(0, 0, 64,13);
  503. rgblight_setrgb_at(0, 0, 64,14);
  504. break;
  505. case _SYMB: //4
  506. RGB_LAYER0_mode = rgblight_config.mode;
  507. rgblight_mode( 1 );
  508. rgblight_setrgb(RGB_Layer_4_Base_Color);
  509. rgblight_setrgb_at(0, 64, 64,1);
  510. rgblight_setrgb_at(0, 64, 64,2);
  511. rgblight_setrgb_at(0, 64, 64,3);
  512. rgblight_setrgb_at(0, 64, 64,4);
  513. rgblight_setrgb_at(0, 64, 64,5);
  514. rgblight_setrgb_at(0, 64, 64,6);
  515. rgblight_setrgb_at(0, 64, 64,7);
  516. rgblight_setrgb_at(0, 64, 64,8);
  517. rgblight_setrgb_at(0, 64, 64,9);
  518. rgblight_setrgb_at(0, 64, 64,10);
  519. rgblight_setrgb_at(0, 64, 64,12);
  520. rgblight_setrgb_at(0, 64, 64,22);
  521. rgblight_setrgb_at(0, 64, 64,23);
  522. rgblight_setrgb_at(0, 64, 64,32);
  523. rgblight_setrgb_at(0, 64, 64,33);
  524. rgblight_setrgb_at(0, 64, 64,34);
  525. rgblight_setrgb_at(0, 64, 64,39);
  526. rgblight_setrgb_at(0, 64, 64,40);
  527. rgblight_setrgb_at(0, 64, 64,42);
  528. rgblight_setrgb_at(0, 64, 64,43);
  529. break;
  530. case _NUMB: //5
  531. RGB_LAYER0_mode = rgblight_config.mode;
  532. rgblight_mode( 1 );
  533. rgblight_setrgb(RGB_Layer_5_Base_Color);
  534. rgblight_setrgb_at(0,64,0,1);
  535. rgblight_setrgb_at(0,64,0,2);
  536. rgblight_setrgb_at(0,64,0,13);
  537. rgblight_setrgb_at(0,64,0,14);
  538. rgblight_setrgb_at(0,64,64,15);
  539. rgblight_setrgb_at(64,64,64,7);
  540. rgblight_setrgb_at(64,64,64,8);
  541. rgblight_setrgb_at(64,64,64,9);
  542. rgblight_setrgb_at(64,64,64,19);
  543. rgblight_setrgb_at(64,64,64,20);
  544. rgblight_setrgb_at(64,64,64,21);
  545. rgblight_setrgb_at(64,64,64,31);
  546. rgblight_setrgb_at(64,64,64,32);
  547. rgblight_setrgb_at(64,64,64,33);
  548. rgblight_setrgb_at(64,64,64,42);
  549. rgblight_setrgb_at(64,64,64,43);
  550. rgblight_setrgb_at(0,128,0,44);
  551. break;
  552. case _MARO: //6
  553. RGB_LAYER0_mode = rgblight_config.mode;
  554. rgblight_mode( 1 );
  555. rgblight_setrgb(RGB_Layer_6_Base_Color);
  556. break;
  557. case _RGB: //7
  558. RGB_LAYER0_mode = rgblight_config.mode;
  559. rgblight_mode( 1 );
  560. rgblight_setrgb(RGB_Layer_7_Base_Color);
  561. rgblight_setrgb_at(1,143,225,0);
  562. rgblight_setrgb_at(39,21,107,1);
  563. rgblight_setrgb_at(208,0,0,2);
  564. rgblight_setrgb_at(64,64,64,21);
  565. break;
  566. case _ADJUST: //8
  567. RGB_LAYER0_mode = rgblight_config.mode;
  568. rgblight_mode( 1 );
  569. rgblight_setrgb(RGB_Layer_8_Base_Color);
  570. rgblight_setrgb_at(0,64,0,10);
  571. rgblight_setrgb_at(64,0,0,11);
  572. rgblight_setrgb_at(0,64,0,17);
  573. rgblight_setrgb_at(0,64,0,30);
  574. rgblight_setrgb_at(6,50,50,12);
  575. break;
  576. case _GAME: //9
  577. RGB_LAYER0_mode = rgblight_config.mode;
  578. rgblight_mode( 1 );
  579. rgblight_setrgb(RGB_Layer_9_Base_Color);
  580. rgblight_setrgb_at(0,0,64,15);
  581. rgblight_setrgb_at(0,0,64,26);
  582. rgblight_setrgb_at(0,0,64,27);
  583. rgblight_setrgb_at(0,0,64,28);
  584. rgblight_setrgb_at(64,0,0,35);
  585. break;
  586. default:
  587. rgblight_mode( RGB_LAYER0_mode );
  588. }
  589. has_layer_changed = false;
  590. }
  591. /* End of RGB with Layer change */
  592. } // End of matrix_scan_user
  593. /* shift + enter = " from:https://github.com/qmk/qmk_firmware/blob/e899cb8940da04fa2610604f0aab417db7fac119/keyboards/mitosis/keymaps/datagrok/keymap.c */
  594. bool comm_shifted = false;
  595. bool ques_shifted = false;
  596. static uint8_t key_index = 0;
  597. uint8_t shifted;
  598. uint16_t s_keycode;
  599. bool *k_shifted;
  600. bool process_record_user( uint16_t keycode, keyrecord_t *record ){
  601. /* Start of key tap RGB effect */
  602. if ( RGB_TAP_STATE ==true ) {
  603. key_index=(record->event.key.col)+(record->event.key.row)*12;
  604. /* Change the Hue of the RGB color with the type speed */
  605. if (timer_elapsed(TAP_RGB_timer) >10000){
  606. TAP_RGB_timer=timer_read();
  607. Type_Hue=270;
  608. }else if (timer_elapsed(TAP_RGB_timer) >1000){
  609. Type_Hue+=30;
  610. if (Type_Hue>270) {
  611. Type_Hue=270;}
  612. }else{
  613. TAP_RGB_timer=timer_read();
  614. Type_Hue-=10;
  615. if (Type_Hue<10) {
  616. Type_Hue=10;}
  617. }
  618. if (key_index>42){ //fix the RGB index of the MIT layout position
  619. key_index=key_index-1;
  620. }
  621. if ( record->event.pressed ) {
  622. rgblight_sethsv_at(Type_Hue,255,255,key_index);
  623. } else {
  624. rgblight_setrgb_at(RGB_TAP_Base_Color,key_index);
  625. }
  626. }
  627. /* End of key tap RGB effect */
  628. switch ( keycode )
  629. {
  630. /* save the RGB state when set the new */
  631. case RGB_M_R:
  632. save_rgbmode = true;
  633. break;
  634. case RGB_M_SW:
  635. save_rgbmode = true;
  636. break;
  637. case RGB_M_X:
  638. save_rgbmode = true;
  639. break;
  640. case RGB_M_G:
  641. save_rgbmode = true;
  642. break;
  643. case RGB_MODE_KNIGHT:
  644. save_rgbmode = true;
  645. break;
  646. /* Define a New Keycode: double zero */
  647. case KC_00:
  648. if (record->event.pressed) {
  649. // Do something when pressed
  650. } else {
  651. register_code( KC_0 ); // send 0
  652. unregister_code( KC_0 );
  653. register_code( KC_0 ); // send 0 twice without macro
  654. unregister_code( KC_0 );
  655. }
  656. return false; // Skip all further processing of this key
  657. /* when the REST key is pressed the 'R' key will RED,the "Bottom Left"(esc of qmk-dfu) will be GREEN */
  658. case RESET:
  659. rgblight_mode( 1 );
  660. rgblight_setrgb( 0, 0, 0 );
  661. rgblight_setrgb_at(128, 0, 0,4); // R
  662. rgblight_setrgb_at(6, 128, 24,36); // Bottom Left key
  663. break;
  664. /* Define a New Keycode: key tap RGB effect toggle */
  665. case RGB_TAP:
  666. if ( !(record->event.pressed)) {
  667. /* If enable,the 'On' key will be green */
  668. if (RGB_TAP_STATE) {
  669. RGB_TAP_STATE=false;
  670. rgblight_mode( 1 );
  671. rgblight_setrgb( RGB_TAP_Base_Color );
  672. rgblight_setrgb_at(RGB_TAP_Off_Color,16); // O - on
  673. }else{
  674. /* If disenable,the 'oFf' key will be red */
  675. RGB_TAP_STATE=true;
  676. rgblight_mode( 1 );
  677. rgblight_setrgb( RGB_TAP_Base_Color );
  678. rgblight_setrgb_at(RGB_TAP_On_Color,9); // F - off
  679. }
  680. }
  681. break;
  682. /* special shift keys */
  683. case KC_ENT:
  684. s_keycode = KC_QUOT;
  685. k_shifted = &ques_shifted;
  686. break;
  687. case KC_UP:
  688. s_keycode = KC_SLSH;
  689. k_shifted = &ques_shifted;
  690. break;
  691. case KC_DOWN:
  692. s_keycode = KC_BSLS;
  693. k_shifted = &ques_shifted;
  694. break;
  695. default:
  696. return(true);
  697. }
  698. shifted = get_mods() & (MOD_BIT( KC_LSHIFT ) | MOD_BIT( KC_RSHIFT ) );
  699. /* Keydown. If shift is currently pressed, register its alternate keycode. */
  700. if ( record->event.pressed && shifted )
  701. {
  702. *k_shifted = true;
  703. register_code( s_keycode );
  704. return(false);
  705. /*
  706. * Keyup. If shift was pressed back when the key was pressed, unregister
  707. * its alternate keycode.
  708. */
  709. } else if ( !(record->event.pressed) && *k_shifted ) {
  710. *k_shifted = false;
  711. unregister_code( s_keycode );
  712. return(false);
  713. /* Otherwise, behave as normal. */
  714. } else {
  715. return(true);
  716. }
  717. } // End ofprocess_record_user
  718. void led_set_user( uint8_t usb_led )
  719. {
  720. static uint8_t old_usb_led = 0;
  721. _delay_ms( 10 ); /* gets rid of tick */
  722. if ( (usb_led & (1 << USB_LED_CAPS_LOCK) ) && !(old_usb_led & (1 << USB_LED_CAPS_LOCK) ) ) {
  723. /* CAPS on */
  724. caps= true;
  725. rgblight_setrgb( 0,0,0 );
  726. rgblight_setrgb_at(RGB_Caps_Color,12); // caps key
  727. #ifdef AUDIO_ENABLE
  728. PLAY_SONG( tone_caps );
  729. #endif
  730. }else if ( !(usb_led & (1 << USB_LED_CAPS_LOCK) ) && (old_usb_led & (1 << USB_LED_CAPS_LOCK) ) ) {
  731. /* CAPS off */
  732. caps= false;
  733. if (RGB_TAP_STATE==false){
  734. rgblight_mode( RGB_LAYER0_mode );
  735. }else{
  736. rgblight_mode(1);
  737. rgblight_setrgb( 0,0,0 );
  738. }
  739. #ifdef AUDIO_ENABLE
  740. PLAY_SONG( tone_caps );
  741. #endif
  742. }
  743. old_usb_led = usb_led;
  744. } // End of led_set_user