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