Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #include <stdint.h>
  2. #include <stdbool.h>
  3. #include <util/delay.h>
  4. #include "usb_keycodes.h"
  5. #include "host.h"
  6. #include "print.h"
  7. #include "debug.h"
  8. #include "util.h"
  9. #include "timer.h"
  10. #include "layer.h"
  11. #include "matrix.h"
  12. #include "command.h"
  13. #ifdef HOST_PJRC
  14. # include "jump_bootloader.h"
  15. # include "usb_keyboard.h"
  16. # ifdef USB_EXTRA_ENABLE
  17. # include "usb_extra.h"
  18. # endif
  19. #endif
  20. static void help(void);
  21. static void switch_layer(uint8_t layer);
  22. uint8_t command_proc(void)
  23. {
  24. if (!IS_COMMAND())
  25. return 0;
  26. uint8_t processed = 1;
  27. bool last_print_enable = print_enable;
  28. print_enable = true;
  29. switch (host_get_first_key()) {
  30. case KB_H:
  31. help();
  32. break;
  33. case KB_B:
  34. #ifdef HOST_PJRC
  35. host_clear_keyboard_report();
  36. host_send_keyboard_report();
  37. print("jump to bootloader...\n");
  38. _delay_ms(1000);
  39. jump_bootloader(); // not return
  40. #endif
  41. break;
  42. case KB_D:
  43. debug_enable = !debug_enable;
  44. if (debug_enable) {
  45. last_print_enable = true;
  46. print("debug enabled.\n");
  47. debug_matrix = true;
  48. debug_keyboard = true;
  49. debug_mouse = true;
  50. } else {
  51. print("debug disabled.\n");
  52. last_print_enable = false;
  53. debug_matrix = false;
  54. debug_keyboard = false;
  55. debug_mouse = false;
  56. }
  57. break;
  58. case KB_X: // debug matrix toggle
  59. debug_matrix = !debug_matrix;
  60. if (debug_matrix)
  61. print("debug matrix enabled.\n");
  62. else
  63. print("debug matrix disabled.\n");
  64. break;
  65. case KB_K: // debug keyboard toggle
  66. debug_keyboard = !debug_keyboard;
  67. if (debug_keyboard)
  68. print("debug keyboard enabled.\n");
  69. else
  70. print("debug keyboard disabled.\n");
  71. break;
  72. case KB_M: // debug mouse toggle
  73. debug_mouse = !debug_mouse;
  74. if (debug_mouse)
  75. print("debug mouse enabled.\n");
  76. else
  77. print("debug mouse disabled.\n");
  78. break;
  79. case KB_V: // print version & information
  80. print(STR(DESCRIPTION) "\n");
  81. break;
  82. case KB_T: // print timer
  83. print("timer: "); phex16(timer_count); print("\n");
  84. break;
  85. case KB_P: // print toggle
  86. if (last_print_enable) {
  87. print("print disabled.\n");
  88. last_print_enable = false;
  89. } else {
  90. last_print_enable = true;
  91. print("print enabled.\n");
  92. }
  93. break;
  94. case KB_S:
  95. #ifdef HOST_PJRC
  96. print("UDCON: "); phex(UDCON); print("\n");
  97. print("UDIEN: "); phex(UDIEN); print("\n");
  98. print("UDINT: "); phex(UDINT); print("\n");
  99. print("host_keyboard_leds:"); phex(host_keyboard_leds()); print("\n");
  100. #endif
  101. break;
  102. #ifdef USB_NKRO_ENABLE
  103. case KB_N:
  104. // send empty report before change
  105. host_clear_keyboard_report();
  106. host_send_keyboard_report();
  107. keyboard_nkro = !keyboard_nkro;
  108. if (keyboard_nkro)
  109. print("USB_NKRO: enabled\n");
  110. else
  111. print("USB_NKRO: disabled\n");
  112. break;
  113. #endif
  114. #ifdef USB_EXTRA_ENABLE
  115. case KB_ESC:
  116. if (suspend && remote_wakeup) {
  117. usb_remote_wakeup();
  118. } else {
  119. usb_extra_system_send(SYSTEM_POWER_DOWN);
  120. }
  121. break;
  122. #endif
  123. case KB_BSPC:
  124. matrix_init();
  125. print("clear matrix\n");
  126. break;
  127. case KB_0:
  128. switch_layer(0);
  129. break;
  130. case KB_1:
  131. switch_layer(1);
  132. break;
  133. case KB_2:
  134. switch_layer(2);
  135. break;
  136. case KB_3:
  137. switch_layer(3);
  138. break;
  139. case KB_4:
  140. switch_layer(4);
  141. break;
  142. default:
  143. processed = 0;
  144. }
  145. if (processed)
  146. _delay_ms(500);
  147. print_enable = last_print_enable;
  148. return processed;
  149. }
  150. static void help(void)
  151. {
  152. print("b: jump to bootloader\n");
  153. print("d: toggle debug enable\n");
  154. print("x: toggle matrix debug\n");
  155. print("k: toggle keyboard debug\n");
  156. print("m: toggle mouse debug\n");
  157. print("p: toggle print enable\n");
  158. print("v: print version\n");
  159. print("t: print timer count\n");
  160. print("s: print status\n");
  161. #ifdef USB_NKRO_ENABLE
  162. print("n: toggle USB_NKRO\n");
  163. #endif
  164. print("Backspace: clear matrix\n");
  165. print("ESC: power down/wake up\n");
  166. print("0: switch to Layer0 \n");
  167. print("1: switch to Layer1 \n");
  168. print("2: switch to Layer2 \n");
  169. print("3: switch to Layer3 \n");
  170. print("4: switch to Layer4 \n");
  171. }
  172. static void switch_layer(uint8_t layer)
  173. {
  174. print("current_layer: "); phex(current_layer); print("\n");
  175. print("default_layer: "); phex(default_layer); print("\n");
  176. current_layer = layer;
  177. default_layer = layer;
  178. print("switch to Layer: "); phex(layer); print("\n");
  179. }