keymap.c 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  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, RESET, 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. PORTD |= (1<<7);
  117. break;
  118. case 2:
  119. if((PINB & (1 << 7)) != 0) {
  120. PORTC |= (1<<6);
  121. } else {
  122. PORTC |= (1<<7);
  123. }
  124. break;
  125. case 3:
  126. PORTD |= (1<<4);
  127. break;
  128. case 4:
  129. PORTE |= (1<<6);
  130. break;
  131. case 5:
  132. PORTB |= (1<<4);
  133. break;
  134. case 6:
  135. PORTD |= (1<<6);
  136. break;
  137. }
  138. } else {
  139. switch(ledId) {
  140. case 1:
  141. PORTD &= ~(1<<7);
  142. break;
  143. case 2:
  144. if((PINB & (1 << 7)) != 0) {
  145. PORTC &= ~(1<<6);
  146. } else {
  147. PORTC &= ~(1<<7);
  148. }
  149. break;
  150. case 3:
  151. PORTD &= ~(1<<4);
  152. break;
  153. case 4:
  154. PORTE &= ~(1<<6);
  155. break;
  156. case 5:
  157. PORTB &= ~(1<<4);
  158. break;
  159. case 6:
  160. PORTD &= ~(1<<6);
  161. break;
  162. }
  163. }
  164. }
  165. void set_layer_led(int layerId) {
  166. PORTD |= (1<<5);
  167. PORTB &= ~(1<<6);
  168. PORTB |= (1<<0);
  169. switch(layerId) {
  170. case 0:
  171. PORTD &= ~(1<<5);
  172. break;
  173. case 1:
  174. PORTB |= (1<<6);
  175. break;
  176. case 2:
  177. PORTB &= ~(1<<0);
  178. break;
  179. }
  180. }
  181. void matrix_init_user(void) {
  182. led_init_ports();
  183. PORTB |= (1 << 7);
  184. DDRB &= ~(1<<7);
  185. PORTD |= (1<<7);
  186. PORTC |= (1<<6);
  187. PORTC |= (1<<7);
  188. PORTD |= (1<<4);
  189. PORTE |= (1<<6);
  190. PORTB |= (1<<4);
  191. PORTD |= (1<<6);
  192. set_layer_led(0);
  193. }
  194. void matrix_scan_user(void) {
  195. }
  196. void led_init_ports() {
  197. // led voor switch #1
  198. DDRD |= (1<<7);
  199. PORTD &= ~(1<<7);
  200. // led voor switch #2
  201. DDRC |= (1<<6);
  202. DDRC |= (1<<7);
  203. PORTC &= ~(1<<6);
  204. PORTC &= ~(1<<7);
  205. // led voor switch #3
  206. DDRD |= (1<<4);
  207. PORTD &= ~(1<<4);
  208. // led voor switch #4
  209. DDRE |= (1<<6);
  210. PORTE &= ~(1<<6);
  211. // led voor switch #5
  212. DDRB |= (1<<4);
  213. PORTB &= ~(1<<4);
  214. // led voor switch #6
  215. DDRD |= (1<<6);
  216. PORTD &= ~(1<<6);
  217. /*
  218. DDRD |= (1<<7);
  219. PORTD |= (1<<7);
  220. DDRC |= (1<<6);
  221. PORTC |= (1<<6);
  222. DDRD |= (1<<4);
  223. PORTD |= (1<<4);
  224. DDRE |= (1<<6);
  225. PORTE |= (1<<6);
  226. DDRB |= (1<<4);
  227. PORTB |= (1<<4);
  228. DDRD |= (1<<6);
  229. PORTD |= (1<<6);
  230. // */
  231. DDRD |= (1<<5);
  232. DDRB |= (1<<6);
  233. DDRB |= (1<<0);
  234. //led_set_layer(0);
  235. }
  236. void led_set_user(uint8_t usb_led) {
  237. if (usb_led & (1 << USB_LED_NUM_LOCK)) {
  238. } else {
  239. }
  240. if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
  241. } else {
  242. }
  243. if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
  244. } else {
  245. }
  246. if (usb_led & (1 << USB_LED_COMPOSE)) {
  247. } else {
  248. }
  249. if (usb_led & (1 << USB_LED_KANA)) {
  250. } else {
  251. }
  252. }
  253. /*
  254. * NOTE:
  255. *
  256. * In case you don't understand this coding stuff, please
  257. * feel free to mail me or post something
  258. * at the /r/knops subreddit and I will configure the code as
  259. * you wish for your needs to make the LEDs do what you want :-).
  260. *
  261. * Contact me at: support@knops.io
  262. *
  263. *
  264. * Knops Mini LED Numbers:
  265. * _____ _____ _____
  266. * | | | | | |
  267. * | 1 | | 2 | | 3 | <---
  268. * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs'
  269. * _____ _____ _____ |----- To turn on/off these leds, use:
  270. * | | | | | | | set_switch_led( [1-6], [true/false]);
  271. * | 4 | | 5 | | 6 | <---
  272. * |_____| |_____| |_____|
  273. *
  274. * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs'
  275. * To turn one of them on, use:
  276. * set_layer_led( [0-2] );
  277. *
  278. */
  279. /*
  280. * This function led_set_layer gets called when you switch between layers.
  281. * It allows you to turn on and off leds for each different layer and do
  282. * other cool stuff. Currently the GUI does not have LED support. I am working
  283. * on that, but takes time.
  284. */
  285. void led_set_layer(int layer) {
  286. switch(layer) {
  287. /**
  288. * Here is an example to turn LEDs on and of. By default:
  289. * - the LEDs are turned on in layer 0
  290. * - the LEDs are turned off in layer 1
  291. * - the LEDs don't change from state for layer 2
  292. */
  293. case 0:
  294. set_layer_led(0); // Turn on only the first/left layer indicator
  295. set_switch_led(1, true);
  296. set_switch_led(2, true);
  297. set_switch_led(3, true);
  298. set_switch_led(4, true);
  299. set_switch_led(5, true);
  300. set_switch_led(6, true);
  301. break;
  302. case 1:
  303. set_layer_led(1); // Turn on only the second/middle layer indicator
  304. set_switch_led(1, false);
  305. set_switch_led(2, false);
  306. set_switch_led(3, false);
  307. set_switch_led(4, false);
  308. set_switch_led(5, false);
  309. set_switch_led(6, false);
  310. break;
  311. case 2:
  312. set_layer_led(2); // Turn on only the third/right layer indicator
  313. // Keep leds for layer two in their current state, since we don't use set_switch_led(SWITCH_ID, TRUE_OR_FALSE)
  314. break;
  315. }
  316. }
  317. bool process_record_user (uint16_t keycode, keyrecord_t *record) {
  318. switch(keycode) {
  319. case TO(0):
  320. if (record->event.pressed) {
  321. led_set_layer(0);
  322. }
  323. break;
  324. case TO(1):
  325. if (record->event.pressed) {
  326. led_set_layer(1);
  327. }
  328. break;
  329. case TO(2):
  330. if (record->event.pressed) {
  331. led_set_layer(2);
  332. }
  333. break;
  334. case M_TGLHF:
  335. if (record->event.pressed) {
  336. SEND_STRING("tglhf");
  337. tap_code(KC_ENT);
  338. }
  339. case M_TGG:
  340. if (record->event.pressed) {
  341. SEND_STRING("tgg");
  342. tap_code(KC_ENT);
  343. }
  344. return false;
  345. }
  346. return true;
  347. }