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