2
0

keymap.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. #include QMK_KEYBOARD_H
  2. /*
  3. * Copy of knopps mini default May 16,2018
  4. * Added comments in code to more easilly understand it.
  5. *
  6. * Key Layout
  7. * _____ _____ _____
  8. * | | | | | |
  9. * | 1 | | 2 | | 3 |
  10. * |_____| |_____| |_____|
  11. * _____ _____ _____
  12. * | | | | | |
  13. * | 4 | | 5 | | 6 |
  14. * |_____| |_____| |_____|
  15. *
  16. * Each Layout row below keys. 1,2,3,4,5,6
  17. *
  18. * Hold 3 when powering on for DFU Program Mode
  19. */
  20. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  21. /*
  22. * Layer 0 (Default)
  23. * _____ _____ _____
  24. * | | | | | |
  25. * Stop VolUp Play
  26. * |_____| |_____| |_____|
  27. * _____ _____ _____
  28. * | | | | | |
  29. * Prev VolDwn Next
  30. * |_____| |_____| |_____|
  31. *
  32. * Button 1 (stop) is Held to activate Layer 3 only while held, User then selects the keymap to change to
  33. */
  34. LAYOUT(
  35. LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT),
  36. /*
  37. * Layer 1
  38. * _____ _____ _____
  39. * | | | | | |
  40. * ESC Macro3 Macro4
  41. * |_____| |_____| |_____|
  42. * _____ _____ _____
  43. * | | | | | |
  44. * Macro5 Macro6 Macro7
  45. * |_____| |_____| |_____|
  46. *
  47. */
  48. LAYOUT(
  49. LT(3, KC_ESC), M(3), M(4), M(5), M(6), M(7)),
  50. /*
  51. * Layer 2
  52. * _____ _____ _____
  53. * | | | | | |
  54. * | 1 | | 2 | | 3 |
  55. * |_____| |_____| |_____|
  56. * _____ _____ _____
  57. * | | | | | |
  58. * | 4 | |Macro0 Macro1
  59. * |_____| |_____| |_____|
  60. *
  61. */
  62. LAYOUT(
  63. LT(3, KC_1), KC_2, KC_3, KC_4, M(0), M(1)),
  64. /*
  65. * Layer 3 Key Layout
  66. * This Layer does the Layer Selection
  67. * _____ _____ _____
  68. * | | | | | DFU
  69. * |None | |None | | FLash
  70. * |_____| |_____| |_____|
  71. * _____ _____ _____
  72. * | | | | | |
  73. * Layer Layer Layer
  74. * 0 1 2
  75. * |_____| |_____| |_____|
  76. *
  77. * Layers 0,1,2 have Button 1 held to activate this layer. Then press the specific layer to switch to it.
  78. *
  79. */
  80. LAYOUT(
  81. KC_TRNS, KC_TRNS, RESET, TO(0), TO(1), TO(2)),
  82. // More Layers that can be used, but are not by default
  83. LAYOUT(
  84. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  85. LAYOUT(
  86. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
  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. };
  108. // Older way of Macros found here: https://docs.qmk.fm/features/macros
  109. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
  110. //keyevent_t event = record->event;
  111. switch (id) {
  112. case 0:
  113. if (record->event.pressed) {
  114. /*
  115. * This is Macro 0
  116. * Content: tglhf<enter>
  117. */
  118. return MACRO( T(T), T(G), T(L), T(H), T(F), T(ENT), END );
  119. }
  120. break;
  121. case 1:
  122. if (record->event.pressed) {
  123. /*
  124. * This is Macro 1
  125. * Content: tgg<enter>
  126. */
  127. return MACRO( T(T), T(G), T(G), T(ENT), END );
  128. }
  129. break;
  130. case 2:
  131. if (record->event.pressed) {
  132. /*
  133. * This is Macro 2
  134. * Content: Press and hold "no" , type "l", release "no"<enter>
  135. * I haven't found what this "NO" key maps to
  136. */
  137. return MACRO( D(NO), T(L), U(NO), END );
  138. }
  139. break;
  140. case 3:
  141. if (record->event.pressed) {
  142. /*
  143. * This is Macro 3
  144. * Content: press/hold LCTRL, type "2", release LCTRL
  145. */
  146. return MACRO( D(LCTL), T(Z), U(LCTL), END );
  147. }
  148. break;
  149. case 4:
  150. if (record->event.pressed) {
  151. /*
  152. * This is Macro 4
  153. * Content: press/hold LCTRL, type "2", release LCTRL
  154. */
  155. return MACRO( D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END );
  156. }
  157. break;
  158. case 5:
  159. if (record->event.pressed) {
  160. /*
  161. * This is Macro 5
  162. * Content: press/hold LCTRL, type "x", release LCTRL
  163. */
  164. return MACRO( D(LCTL), T(X), U(LCTL), END );
  165. }
  166. break;
  167. case 6:
  168. if (record->event.pressed) {
  169. /*
  170. * This is Macro 6
  171. * Content: press/hold LCTRL, type "c", release LCTRL
  172. */
  173. return MACRO( D(LCTL), T(C), U(LCTL), END );
  174. }
  175. break;
  176. case 7:
  177. if (record->event.pressed) {
  178. /*
  179. * This is Macro 7
  180. * Content: press/hold LCTRL, type "v", release LCTRL
  181. */
  182. return MACRO( D(LCTL), T(V), U(LCTL), END );
  183. }
  184. break;
  185. }
  186. return MACRO_NONE;
  187. }
  188. void set_switch_led(int ledId, bool state) {
  189. if(state) {
  190. switch(ledId) {
  191. case 1:
  192. PORTD |= (1<<7);
  193. break;
  194. case 2:
  195. if((PINB & (1 << 7)) != 0) {
  196. PORTC |= (1<<6);
  197. } else {
  198. PORTC |= (1<<7);
  199. }
  200. break;
  201. case 3:
  202. PORTD |= (1<<4);
  203. break;
  204. case 4:
  205. PORTE |= (1<<6);
  206. break;
  207. case 5:
  208. PORTB |= (1<<4);
  209. break;
  210. case 6:
  211. PORTD |= (1<<6);
  212. break;
  213. }
  214. } else {
  215. switch(ledId) {
  216. case 1:
  217. PORTD &= ~(1<<7);
  218. break;
  219. case 2:
  220. if((PINB & (1 << 7)) != 0) {
  221. PORTC &= ~(1<<6);
  222. } else {
  223. PORTC &= ~(1<<7);
  224. }
  225. break;
  226. case 3:
  227. PORTD &= ~(1<<4);
  228. break;
  229. case 4:
  230. PORTE &= ~(1<<6);
  231. break;
  232. case 5:
  233. PORTB &= ~(1<<4);
  234. break;
  235. case 6:
  236. PORTD &= ~(1<<6);
  237. break;
  238. }
  239. }
  240. }
  241. void set_layer_led(int layerId) {
  242. PORTD |= (1<<5);
  243. PORTB &= ~(1<<6);
  244. PORTB |= (1<<0);
  245. switch(layerId) {
  246. case 0:
  247. PORTD &= ~(1<<5);
  248. break;
  249. case 1:
  250. PORTB |= (1<<6);
  251. break;
  252. case 2:
  253. PORTB &= ~(1<<0);
  254. break;
  255. }
  256. }
  257. void matrix_init_user(void) {
  258. led_init_ports();
  259. PORTB |= (1 << 7);
  260. DDRB &= ~(1<<7);
  261. PORTD |= (1<<7);
  262. PORTC |= (1<<6);
  263. PORTC |= (1<<7);
  264. PORTD |= (1<<4);
  265. PORTE |= (1<<6);
  266. PORTB |= (1<<4);
  267. PORTD |= (1<<6);
  268. set_layer_led(0);
  269. }
  270. void matrix_scan_user(void) {
  271. }
  272. void led_init_ports() {
  273. // led voor switch #1
  274. DDRD |= (1<<7);
  275. PORTD &= ~(1<<7);
  276. // led voor switch #2
  277. DDRC |= (1<<6);
  278. DDRC |= (1<<7);
  279. PORTC &= ~(1<<6);
  280. PORTC &= ~(1<<7);
  281. // led voor switch #3
  282. DDRD |= (1<<4);
  283. PORTD &= ~(1<<4);
  284. // led voor switch #4
  285. DDRE |= (1<<6);
  286. PORTE &= ~(1<<6);
  287. // led voor switch #5
  288. DDRB |= (1<<4);
  289. PORTB &= ~(1<<4);
  290. // led voor switch #6
  291. DDRD |= (1<<6);
  292. PORTD &= ~(1<<6);
  293. /*
  294. DDRD |= (1<<7);
  295. PORTD |= (1<<7);
  296. DDRC |= (1<<6);
  297. PORTC |= (1<<6);
  298. DDRD |= (1<<4);
  299. PORTD |= (1<<4);
  300. DDRE |= (1<<6);
  301. PORTE |= (1<<6);
  302. DDRB |= (1<<4);
  303. PORTB |= (1<<4);
  304. DDRD |= (1<<6);
  305. PORTD |= (1<<6);
  306. // */
  307. DDRD |= (1<<5);
  308. DDRB |= (1<<6);
  309. DDRB |= (1<<0);
  310. //led_set_layer(0);
  311. }
  312. void led_set_user(uint8_t usb_led) {
  313. if (usb_led & (1 << USB_LED_NUM_LOCK)) {
  314. } else {
  315. }
  316. if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
  317. } else {
  318. }
  319. if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
  320. } else {
  321. }
  322. if (usb_led & (1 << USB_LED_COMPOSE)) {
  323. } else {
  324. }
  325. if (usb_led & (1 << USB_LED_KANA)) {
  326. } else {
  327. }
  328. }
  329. /*
  330. * NOTE:
  331. *
  332. * In case you don't understand this coding stuff, please
  333. * feel free to mail me or post something
  334. * at the /r/knops subreddit and I will configure the code as
  335. * you wish for your needs to make the LEDs do what you want :-).
  336. *
  337. * Contact me at: support@knops.io
  338. *
  339. *
  340. * Knops Mini LED Numbers:
  341. * _____ _____ _____
  342. * | | | | | |
  343. * | 1 | | 2 | | 3 | <---
  344. * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs'
  345. * _____ _____ _____ |----- To turn on/off these leds, use:
  346. * | | | | | | | set_switch_led( [1-6], [true/false]);
  347. * | 4 | | 5 | | 6 | <---
  348. * |_____| |_____| |_____|
  349. *
  350. * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs'
  351. * To turn one of them on, use:
  352. * set_layer_led( [0-2] );
  353. *
  354. */
  355. /*
  356. * This function led_set_layer gets called when you switch between layers.
  357. * It allows you to turn on and off leds for each different layer and do
  358. * other cool stuff. Currently the GUI does not have LED support. I am working
  359. * on that, but takes time.
  360. */
  361. void led_set_layer(int layer) {
  362. switch(layer) {
  363. /**
  364. * Here is an example to turn LEDs on and of. By default:
  365. * - the LEDs are turned on in layer 0
  366. * - the LEDs are turned off in layer 1
  367. * - the LEDs don't change from state for layer 2
  368. */
  369. case 0:
  370. set_layer_led(0); // Turn on only the first/left layer indicator
  371. set_switch_led(1, true);
  372. set_switch_led(2, true);
  373. set_switch_led(3, true);
  374. set_switch_led(4, true);
  375. set_switch_led(5, true);
  376. set_switch_led(6, true);
  377. break;
  378. case 1:
  379. set_layer_led(1); // Turn on only the second/middle layer indicator
  380. set_switch_led(1, false);
  381. set_switch_led(2, false);
  382. set_switch_led(3, false);
  383. set_switch_led(4, false);
  384. set_switch_led(5, false);
  385. set_switch_led(6, false);
  386. break;
  387. case 2:
  388. set_layer_led(2); // Turn on only the third/right layer indicator
  389. // Keep leds for layer two in their current state, since we don't use set_switch_led(SWITCH_ID, TRUE_OR_FALSE)
  390. break;
  391. }
  392. }
  393. bool process_record_user (uint16_t keycode, keyrecord_t *record) {
  394. switch(keycode) {
  395. case TO(0):
  396. if (record->event.pressed) {
  397. led_set_layer(0);
  398. }
  399. break;
  400. case TO(1):
  401. if (record->event.pressed) {
  402. led_set_layer(1);
  403. }
  404. break;
  405. case TO(2):
  406. if (record->event.pressed) {
  407. led_set_layer(2);
  408. }
  409. break;
  410. }
  411. return true;
  412. }