Guest User

Untitled

a guest
Jul 20th, 2018
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.64 KB | None | 0 0
  1. #include "crkbd.h"
  2. #include "bootloader.h"
  3. #include "action_layer.h"
  4. #include "action_util.h"
  5. #include "eeconfig.h"
  6. #ifdef PROTOCOL_LUFA
  7. #include "lufa.h"
  8. #include "split_util.h"
  9. #endif
  10. #include "LUFA/Drivers/Peripheral/TWI.h"
  11. #ifdef SSD1306OLED
  12. #include "ssd1306.h"
  13. #endif
  14.  
  15. #include "../lib/mode_icon_reader.c"
  16. #include "../lib/layer_state_reader.c"
  17. #include "../lib/host_led_state_reader.c"
  18. #include "../lib/logo_reader.c"
  19. #include "../lib/keylogger.c"
  20. #include "../lib/timelogger.c"
  21.  
  22. extern keymap_config_t keymap_config;
  23.  
  24. #ifdef RGBLIGHT_ENABLE
  25. //Following line allows macro to read current RGB settings
  26. extern rgblight_config_t rgblight_config;
  27. #endif
  28.  
  29. extern uint8_t is_master;
  30.  
  31. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  32. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  33. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  34. // entirely and just use numbers.
  35. #define _QWERTY 0
  36. #define _LOWER 3
  37. #define _RAISE 4
  38. #define _ADJUST 16
  39.  
  40. enum custom_keycodes {
  41. QWERTY = SAFE_RANGE,
  42. LOWER,
  43. RAISE,
  44. ADJUST,
  45. BACKLIT,
  46. RGBRST
  47. };
  48.  
  49. enum macro_keycodes {
  50. KC_SAMPLEMACRO,
  51. };
  52.  
  53. #define KC______ KC_TRNS
  54. #define KC_XXXXX KC_NO
  55. #define KC_LOWER LOWER
  56. #define KC_RAISE RAISE
  57. #define KC_RST RESET
  58. #define KC_LRST RGBRST
  59. #define KC_LTOG RGB_TOG
  60. #define KC_LHUI RGB_HUI
  61. #define KC_LHUD RGB_HUD
  62. #define KC_LSAI RGB_SAI
  63. #define KC_LSAD RGB_SAD
  64. #define KC_LVAI RGB_VAI
  65. #define KC_LVAD RGB_VAD
  66. #define KC_LSMOD RGB_SMOD
  67. #define KC_CTLTB CTL_T(KC_TAB)
  68. #define KC_GUIEI GUI_T(KC_LANG2)
  69. #define KC_ALTKN ALT_T(KC_LANG1)
  70.  
  71. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  72. [_QWERTY] = LAYOUT_kc( \
  73. //,-----------------------------------------. ,-----------------------------------------.
  74. ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
  75. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  76. CTLTB, A, S, D, F, G, H, J, K, L, QUOT, LALT,\
  77. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  78. LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, LGUI,\
  79. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  80. SLSH, LOWER, SPC, ENT, RAISE, SCLN \
  81. //`--------------------' `--------------------'
  82. ),
  83.  
  84. [_RAISE] = LAYOUT_kc( \
  85. //,-----------------------------------------. ,-----------------------------------------.
  86. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
  87. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  88. CTLTB, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, XXXXX,\
  89. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  90. LSFT, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, XXXXX,\
  91. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  92. SLSH, LOWER, SPC, ENT, RAISE, SCLN \
  93. //`--------------------' `--------------------'
  94. ),
  95.  
  96. [_LOWER] = LAYOUT_kc( \
  97. //,-----------------------------------------. ,-----------------------------------------.
  98. ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
  99. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  100. CTLTB, XXXXX, XXXXX, COMM, DOT, XXXXX, GRV, MINS, EQL, LCBR, RCBR, PIPE,\
  101. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  102. LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, TILD, UNDS, PLUS, LBRC, RBRC, BSLS,\
  103. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  104. SLSH, LOWER, SPC, ENT, RAISE, SCLN \
  105. //`--------------------' `--------------------'
  106. ),
  107.  
  108. [_ADJUST] = LAYOUT_kc( \
  109. //,-----------------------------------------. ,-----------------------------------------.
  110. RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, PGUP, END, XXXXX, DEL,\
  111. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  112. LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, LEFT, DOWN, UP, RGHT, XXXXX, XXXXX,\
  113. //|------+------+------+------+------+------| |------+------+------+------+------+------|
  114. LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
  115. //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
  116. SLSH, LOWER, SPC, ENT, RAISE, SCLN \
  117. //`--------------------' `--------------------'
  118. )
  119. };
  120.  
  121. int RGB_current_mode;
  122.  
  123. void persistent_default_layer_set(uint16_t default_layer) {
  124. eeconfig_update_default_layer(default_layer);
  125. default_layer_set(default_layer);
  126. }
  127.  
  128. // Setting ADJUST layer RGB back to default
  129. void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
  130. if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
  131. layer_on(layer3);
  132. } else {
  133. layer_off(layer3);
  134. }
  135. }
  136.  
  137. void matrix_init_user(void) {
  138. #ifdef RGBLIGHT_ENABLE
  139. RGB_current_mode = rgblight_config.mode;
  140. #endif
  141. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  142. #ifdef SSD1306OLED
  143. TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
  144. iota_gfx_init(!has_usb()); // turns on the display
  145. #endif
  146. }
  147.  
  148. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  149. #ifdef SSD1306OLED
  150.  
  151. void matrix_scan_user(void) {
  152. iota_gfx_task();
  153. }
  154.  
  155. void matrix_render_user(struct CharacterMatrix *matrix) {
  156. if (is_master) {
  157. matrix_write_ln(matrix, read_layer_state());
  158. matrix_write_ln(matrix, read_keylog());
  159. matrix_write_ln(matrix, read_keylogs());
  160. //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
  161. //matrix_write_ln(matrix, read_host_led_state());
  162. //matrix_write_ln(matrix, read_timelog());
  163. } else {
  164. matrix_write(matrix, read_logo());
  165. }
  166. }
  167.  
  168. void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
  169. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  170. memcpy(dest->display, source->display, sizeof(dest->display));
  171. dest->dirty = true;
  172. }
  173. }
  174.  
  175. void iota_gfx_task_user(void) {
  176. struct CharacterMatrix matrix;
  177. matrix_clear(&matrix);
  178. matrix_render_user(&matrix);
  179. matrix_update(&display, &matrix);
  180. }
  181.  
  182. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  183. if (record->event.pressed) {
  184. set_keylog(keycode, record);
  185. set_timelog();
  186. }
  187.  
  188. switch (keycode) {
  189. case QWERTY:
  190. if (record->event.pressed) {
  191. persistent_default_layer_set(1UL<<_QWERTY);
  192. }
  193. return false;
  194. break;
  195. case LOWER:
  196. if (record->event.pressed) {
  197. layer_on(_LOWER);
  198. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  199. } else {
  200. layer_off(_LOWER);
  201. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  202. }
  203. return false;
  204. break;
  205. case RAISE:
  206. if (record->event.pressed) {
  207. layer_on(_RAISE);
  208. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  209. } else {
  210. layer_off(_RAISE);
  211. update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
  212. }
  213. return false;
  214. break;
  215. case ADJUST:
  216. if (record->event.pressed) {
  217. layer_on(_ADJUST);
  218. } else {
  219. layer_off(_ADJUST);
  220. }
  221. return false;
  222. break;
  223. case RGB_MOD:
  224. #ifdef RGBLIGHT_ENABLE
  225. if (record->event.pressed) {
  226. rgblight_mode(RGB_current_mode);
  227. rgblight_step();
  228. RGB_current_mode = rgblight_config.mode;
  229. }
  230. #endif
  231. return false;
  232. break;
  233. case RGBRST:
  234. #ifdef RGBLIGHT_ENABLE
  235. if (record->event.pressed) {
  236. eeconfig_update_rgblight_default();
  237. rgblight_enable();
  238. RGB_current_mode = rgblight_config.mode;
  239. }
  240. #endif
  241. break;
  242. }
  243. return true;
  244. }
  245.  
  246. #endif
Add Comment
Please, Sign In to add comment