]> git.donarmstrong.com Git - tmk_firmware.git/blob - command.c
fixed: not to send key if fn_keycode is modifier
[tmk_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_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 }