]> git.donarmstrong.com Git - qmk_firmware.git/blob - command.c
7afed5d7bf09d076996ccb6998ec9d7e38d74207
[qmk_firmware.git] / command.c
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
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 (host_get_first_key()) {
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 (last_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             // send empty report before change
111             host_clear_keyboard_report();
112             host_send_keyboard_report();
113             keyboard_nkro = !keyboard_nkro;
114             if (keyboard_nkro)
115                 print("USB_NKRO: enabled\n");
116             else
117                 print("USB_NKRO: disabled\n");
118             break;
119 #endif
120 #ifdef USB_EXTRA_ENABLE
121         case KB_ESC:
122             if (suspend && remote_wakeup) {
123                 usb_remote_wakeup();
124             } else {
125                 usb_extra_system_send(SYSTEM_POWER_DOWN);
126             }
127             break;
128 #endif
129         case KB_BSPC:
130             matrix_init();
131             print("clear matrix\n");
132             break;
133         case KB_0:
134             switch_layer(0);
135             break;
136         case KB_1:
137             switch_layer(1);
138             break;
139         case KB_2:
140             switch_layer(2);
141             break;
142         case KB_3:
143             switch_layer(3);
144             break;
145         case KB_4:
146             switch_layer(4);
147             break;
148         default:
149             processed = 0;
150     }
151     if (processed)
152         _delay_ms(500);
153     print_enable = last_print_enable;
154     return processed;
155 }
156
157 static void help(void)
158 {
159     print("b: jump to bootloader\n");
160     print("d: toggle debug enable\n");
161     print("x: toggle matrix debug\n");
162     print("k: toggle keyboard debug\n");
163     print("m: toggle mouse debug\n");
164     print("p: toggle print enable\n");
165     print("v: print version\n");
166     print("t: print timer count\n");
167     print("s: print status\n");
168 #ifdef USB_NKRO_ENABLE
169     print("n: toggle USB_NKRO\n");
170 #endif
171     print("Backspace: clear matrix\n");
172     print("ESC: power down/wake up\n");
173     print("0: switch to Layer0 \n");
174     print("1: switch to Layer1 \n");
175     print("2: switch to Layer2 \n");
176     print("3: switch to Layer3 \n");
177     print("4: switch to Layer4 \n");
178 }
179
180 static void switch_layer(uint8_t layer)
181 {
182     print("current_layer: "); phex(current_layer); print("\n");
183     print("default_layer: "); phex(default_layer); print("\n");
184     current_layer = layer;
185     default_layer = layer;
186     print("switch to Layer: "); phex(layer); print("\n");
187 }