logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (8011B)


  1. #include QMK_KEYBOARD_H
  2. enum custom_keycodes {
  3. M_TGLHF = SAFE_RANGE,
  4. M_TGG
  5. };
  6. /*
  7. * Copy of knopps mini default May 16,2018
  8. * Added comments in code to more easilly understand it.
  9. *
  10. * Key Layout
  11. * _____ _____ _____
  12. * | | | | | |
  13. * | 1 | | 2 | | 3 |
  14. * |_____| |_____| |_____|
  15. * _____ _____ _____
  16. * | | | | | |
  17. * | 4 | | 5 | | 6 |
  18. * |_____| |_____| |_____|
  19. *
  20. * Each Layout row below keys. 1,2,3,4,5,6
  21. *
  22. * Hold 3 when powering on for DFU Program Mode
  23. */
  24. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  25. /*
  26. * Layer 0 (Default)
  27. * _____ _____ _____
  28. * | | | | | |
  29. * Stop VolUp Play
  30. * |_____| |_____| |_____|
  31. * _____ _____ _____
  32. * | | | | | |
  33. * Prev VolDwn Next
  34. * |_____| |_____| |_____|
  35. *
  36. * Button 1 (stop) is Held to activate Layer 3 only while held, User then selects the keymap to change to
  37. */
  38. LAYOUT(
  39. LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT),
  40. /*
  41. * Layer 1
  42. * _____ _____ _____
  43. * | | | | | |
  44. * ESC Ctl+Z CSf+Z
  45. * |_____| |_____| |_____|
  46. * _____ _____ _____
  47. * | | | | | |
  48. * Ctl+X Ctl+C Ctl+V
  49. * |_____| |_____| |_____|
  50. *
  51. */
  52. LAYOUT(
  53. LT(3, KC_ESC), C(KC_Z), C(S(KC_Z)), C(KC_X), C(KC_C), C(KC_V)),
  54. /*
  55. * Layer 2
  56. * _____ _____ _____
  57. * | | | | | |
  58. * | 1 | | 2 | | 3 |
  59. * |_____| |_____| |_____|
  60. * _____ _____ _____
  61. * | | | | | |
  62. * | 4 | |Macro0 Macro1
  63. * |_____| |_____| |_____|
  64. *
  65. */
  66. LAYOUT(
  67. LT(3, KC_1), KC_2, KC_3, KC_4, M_TGLHF, M_TGG),
  68. /*
  69. * Layer 3 Key Layout
  70. * This Layer does the Layer Selection
  71. * _____ _____ _____
  72. * | | | | | DFU
  73. * |None | |None | | FLash
  74. * |_____| |_____| |_____|
  75. * _____ _____ _____
  76. * | | | | | |
  77. * Layer Layer Layer
  78. * 0 1 2
  79. * |_____| |_____| |_____|
  80. *
  81. * Layers 0,1,2 have Button 1 held to activate this layer. Then press the specific layer to switch to it.
  82. *
  83. */
  84. LAYOUT(
  85. KC_TRNS, KC_TRNS, QK_BOOT, TO(0), TO(1), TO(2)),
  86. // More Layers that can be used, but are not by default
  87. LAYOUT(
  88. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  89. LAYOUT(
  90. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  91. LAYOUT(
  92. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  93. LAYOUT(
  94. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  95. LAYOUT(
  96. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  97. LAYOUT(
  98. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  99. LAYOUT(
  100. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  101. LAYOUT(
  102. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  103. LAYOUT(
  104. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  105. LAYOUT(
  106. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  107. LAYOUT(
  108. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  109. LAYOUT(
  110. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
  111. };
  112. void set_switch_led(int ledId, bool state) {
  113. if(state) {
  114. switch(ledId) {
  115. case 1:
  116. gpio_write_pin_high(D7);
  117. break;
  118. case 2:
  119. if(gpio_read_pin(B7)) {
  120. gpio_write_pin_high(C6);
  121. } else {
  122. gpio_write_pin_high(C7);
  123. }
  124. break;
  125. case 3:
  126. gpio_write_pin_high(D4);
  127. break;
  128. case 4:
  129. gpio_write_pin_high(E6);
  130. break;
  131. case 5:
  132. gpio_write_pin_high(B4);
  133. break;
  134. case 6:
  135. gpio_write_pin_high(D6);
  136. break;
  137. }
  138. } else {
  139. switch(ledId) {
  140. case 1:
  141. gpio_write_pin_low(D7);
  142. break;
  143. case 2:
  144. if(gpio_read_pin(B7)) {
  145. gpio_write_pin_low(C6);
  146. } else {
  147. gpio_write_pin_low(C7);
  148. }
  149. break;
  150. case 3:
  151. gpio_write_pin_low(D4);
  152. break;
  153. case 4:
  154. gpio_write_pin_low(E6);
  155. break;
  156. case 5:
  157. gpio_write_pin_low(B4);
  158. break;
  159. case 6:
  160. gpio_write_pin_low(D6);
  161. break;
  162. }
  163. }
  164. }
  165. void set_layer_led(int layerId) {
  166. gpio_write_pin_high(D5);
  167. gpio_write_pin_low(B6);
  168. gpio_write_pin_high(B0);
  169. switch(layerId) {
  170. case 0:
  171. gpio_write_pin_low(D5);
  172. break;
  173. case 1:
  174. gpio_write_pin_high(B6);
  175. break;
  176. case 2:
  177. gpio_write_pin_low(B0);
  178. break;
  179. }
  180. }
  181. void led_init_ports_user(void) {
  182. // led voor switch #1
  183. gpio_set_pin_output(D7);
  184. gpio_write_pin_low(D7);
  185. // led voor switch #2
  186. gpio_set_pin_output(C6);
  187. gpio_set_pin_output(C7);
  188. gpio_write_pin_low(C6);
  189. gpio_write_pin_low(C7);
  190. // led voor switch #3
  191. gpio_set_pin_output(D4);
  192. gpio_write_pin_low(D4);
  193. // led voor switch #4
  194. gpio_set_pin_output(E6);
  195. gpio_write_pin_low(E6);
  196. // led voor switch #5
  197. gpio_set_pin_output(B4);
  198. gpio_write_pin_low(B4);
  199. // led voor switch #6
  200. gpio_set_pin_output(D6);
  201. gpio_write_pin_low(D6);
  202. /*
  203. gpio_set_pin_output(D7);
  204. gpio_write_pin_high(D7);
  205. gpio_set_pin_output(C6);
  206. gpio_write_pin_high(C6);
  207. gpio_set_pin_output(D4);
  208. gpio_write_pin_high(D4);
  209. gpio_set_pin_output(E6);
  210. gpio_write_pin_high(E6);
  211. gpio_set_pin_output(B4);
  212. gpio_write_pin_high(B4);
  213. gpio_set_pin_output(D6);
  214. gpio_write_pin_high(D6);
  215. // */
  216. gpio_set_pin_output(D5);
  217. gpio_set_pin_output(B6);
  218. gpio_set_pin_output(B0);
  219. //led_set_layer(0);
  220. }
  221. void matrix_init_user(void) {
  222. led_init_ports_user();
  223. gpio_write_pin_high(B7);
  224. gpio_set_pin_input(B7);
  225. gpio_write_pin_high(D7);
  226. gpio_write_pin_high(C6);
  227. gpio_write_pin_high(C7);
  228. gpio_write_pin_high(D4);
  229. gpio_write_pin_high(E6);
  230. gpio_write_pin_high(B4);
  231. gpio_write_pin_high(D6);
  232. set_layer_led(0);
  233. }
  234. /*
  235. * NOTE:
  236. *
  237. * In case you don't understand this coding stuff, please
  238. * feel free to mail me or post something
  239. * at the /r/knops subreddit and I will configure the code as
  240. * you wish for your needs to make the LEDs do what you want :-).
  241. *
  242. * Contact me at: support@knops.io
  243. *
  244. *
  245. * Knops Mini LED Numbers:
  246. * _____ _____ _____
  247. * | | | | | |
  248. * | 1 | | 2 | | 3 | <---
  249. * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs'
  250. * _____ _____ _____ |----- To turn on/off these leds, use:
  251. * | | | | | | | set_switch_led( [1-6], [true/false]);
  252. * | 4 | | 5 | | 6 | <---
  253. * |_____| |_____| |_____|
  254. *
  255. * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs'
  256. * To turn one of them on, use:
  257. * set_layer_led( [0-2] );
  258. *
  259. */
  260. /*
  261. * This function led_set_layer gets called when you switch between layers.
  262. * It allows you to turn on and off leds for each different layer and do
  263. * other cool stuff. Currently the GUI does not have LED support. I am working
  264. * on that, but takes time.
  265. */
  266. void led_set_layer(int layer) {
  267. switch(layer) {
  268. /**
  269. * Here is an example to turn LEDs on and of. By default:
  270. * - the LEDs are turned on in layer 0
  271. * - the LEDs are turned off in layer 1
  272. * - the LEDs don't change from state for layer 2
  273. */
  274. case 0:
  275. set_layer_led(0); // Turn on only the first/left layer indicator
  276. set_switch_led(1, true);
  277. set_switch_led(2, true);
  278. set_switch_led(3, true);
  279. set_switch_led(4, true);
  280. set_switch_led(5, true);
  281. set_switch_led(6, true);
  282. break;
  283. case 1:
  284. set_layer_led(1); // Turn on only the second/middle layer indicator
  285. set_switch_led(1, false);
  286. set_switch_led(2, false);
  287. set_switch_led(3, false);
  288. set_switch_led(4, false);
  289. set_switch_led(5, false);
  290. set_switch_led(6, false);
  291. break;
  292. case 2:
  293. set_layer_led(2); // Turn on only the third/right layer indicator
  294. // Keep leds for layer two in their current state, since we don't use set_switch_led(SWITCH_ID, TRUE_OR_FALSE)
  295. break;
  296. }
  297. }
  298. bool process_record_user (uint16_t keycode, keyrecord_t *record) {
  299. switch(keycode) {
  300. case TO(0):
  301. if (record->event.pressed) {
  302. led_set_layer(0);
  303. }
  304. break;
  305. case TO(1):
  306. if (record->event.pressed) {
  307. led_set_layer(1);
  308. }
  309. break;
  310. case TO(2):
  311. if (record->event.pressed) {
  312. led_set_layer(2);
  313. }
  314. break;
  315. case M_TGLHF:
  316. if (record->event.pressed) {
  317. SEND_STRING("tglhf");
  318. tap_code(KC_ENT);
  319. }
  320. case M_TGG:
  321. if (record->event.pressed) {
  322. SEND_STRING("tgg");
  323. tap_code(KC_ENT);
  324. }
  325. return false;
  326. }
  327. return true;
  328. }