]> git.gir.st - tmk_keyboard.git/blob - command.c
added copyright and license notice.
[tmk_keyboard.git] / command.c
1 /*
2 Copyright 2011 Jun Wako <wakojun@gmail.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17 #include <stdint.h>
18 #include <stdbool.h>
19 #include <util/delay.h>
20 #include "usb_keycodes.h"
21 #include "host.h"
22 #include "print.h"
23 #include "debug.h"
24 #include "util.h"
25 #include "timer.h"
26 #include "layer.h"
27 #include "matrix.h"
28 #include "command.h"
29
30 #ifdef HOST_PJRC
31 # include "jump_bootloader.h"
32 # include "usb_keyboard.h"
33 # ifdef USB_EXTRA_ENABLE
34 # include "usb_extra.h"
35 # endif
36 #endif
37
38
39 static void help(void);
40 static void switch_layer(uint8_t layer);
41
42
43 uint8_t command_proc(void)
44 {
45 if (!IS_COMMAND())
46 return 0;
47
48 uint8_t processed = 1;
49 bool last_print_enable = print_enable;
50 print_enable = true;
51 switch (host_get_first_key()) {
52 case KB_H:
53 help();
54 break;
55 case KB_B:
56 #ifdef HOST_PJRC
57 host_clear_keyboard_report();
58 host_send_keyboard_report();
59 print("jump to bootloader...\n");
60 _delay_ms(1000);
61 jump_bootloader(); // not return
62 #endif
63 break;
64 case KB_D:
65 debug_enable = !debug_enable;
66 if (debug_enable) {
67 last_print_enable = true;
68 print("debug enabled.\n");
69 debug_matrix = true;
70 debug_keyboard = true;
71 debug_mouse = true;
72 } else {
73 print("debug disabled.\n");
74 last_print_enable = false;
75 debug_matrix = false;
76 debug_keyboard = false;
77 debug_mouse = false;
78 }
79 break;
80 case KB_X: // debug matrix toggle
81 debug_matrix = !debug_matrix;
82 if (debug_matrix)
83 print("debug matrix enabled.\n");
84 else
85 print("debug matrix disabled.\n");
86 break;
87 case KB_K: // debug keyboard toggle
88 debug_keyboard = !debug_keyboard;
89 if (debug_keyboard)
90 print("debug keyboard enabled.\n");
91 else
92 print("debug keyboard disabled.\n");
93 break;
94 case KB_M: // debug mouse toggle
95 debug_mouse = !debug_mouse;
96 if (debug_mouse)
97 print("debug mouse enabled.\n");
98 else
99 print("debug mouse disabled.\n");
100 break;
101 case KB_V: // print version & information
102 print(STR(DESCRIPTION) "\n");
103 break;
104 case KB_T: // print timer
105 print("timer: "); phex16(timer_count); print("\n");
106 break;
107 case KB_P: // print toggle
108 if (last_print_enable) {
109 print("print disabled.\n");
110 last_print_enable = false;
111 } else {
112 last_print_enable = true;
113 print("print enabled.\n");
114 }
115 break;
116 case KB_S:
117 #ifdef HOST_PJRC
118 print("UDCON: "); phex(UDCON); print("\n");
119 print("UDIEN: "); phex(UDIEN); print("\n");
120 print("UDINT: "); phex(UDINT); print("\n");
121 print("usb_keyboard_leds:"); phex(usb_keyboard_leds); print("\n");
122 print("usb_keyboard_protocol: "); phex(usb_keyboard_protocol); print("\n");
123 print("usb_keyboard_idle_config:"); phex(usb_keyboard_idle_config); print("\n");
124 print("usb_keyboard_idle_count:"); phex(usb_keyboard_idle_count); print("\n");
125 #endif
126 break;
127 #ifdef USB_NKRO_ENABLE
128 case KB_N:
129 // send empty report before change
130 host_clear_keyboard_report();
131 host_send_keyboard_report();
132 keyboard_nkro = !keyboard_nkro;
133 if (keyboard_nkro)
134 print("USB_NKRO: enabled\n");
135 else
136 print("USB_NKRO: disabled\n");
137 break;
138 #endif
139 #ifdef USB_EXTRA_ENABLE
140 case KB_ESC:
141 host_clear_keyboard_report();
142 host_send_keyboard_report();
143 #ifdef HOST_PJRC
144 if (suspend && remote_wakeup) {
145 usb_remote_wakeup();
146 } else {
147 host_system_send(SYSTEM_POWER_DOWN);
148 host_system_send(0);
149 _delay_ms(500);
150 }
151 #else
152 host_system_send(SYSTEM_POWER_DOWN);
153 host_system_send(0);
154 _delay_ms(500);
155 #endif
156 break;
157 #endif
158 case KB_BSPC:
159 matrix_init();
160 print("clear matrix\n");
161 break;
162 case KB_0:
163 switch_layer(0);
164 break;
165 case KB_1:
166 switch_layer(1);
167 break;
168 case KB_2:
169 switch_layer(2);
170 break;
171 case KB_3:
172 switch_layer(3);
173 break;
174 case KB_4:
175 switch_layer(4);
176 break;
177 default:
178 processed = 0;
179 }
180 if (processed)
181 _delay_ms(500);
182 print_enable = last_print_enable;
183 return processed;
184 }
185
186 static void help(void)
187 {
188 print("b: jump to bootloader\n");
189 print("d: toggle debug enable\n");
190 print("x: toggle matrix debug\n");
191 print("k: toggle keyboard debug\n");
192 print("m: toggle mouse debug\n");
193 print("p: toggle print enable\n");
194 print("v: print version\n");
195 print("t: print timer count\n");
196 print("s: print status\n");
197 #ifdef USB_NKRO_ENABLE
198 print("n: toggle USB_NKRO\n");
199 #endif
200 print("Backspace: clear matrix\n");
201 print("ESC: power down/wake up\n");
202 print("0: switch to Layer0 \n");
203 print("1: switch to Layer1 \n");
204 print("2: switch to Layer2 \n");
205 print("3: switch to Layer3 \n");
206 print("4: switch to Layer4 \n");
207 }
208
209 static void switch_layer(uint8_t layer)
210 {
211 print("current_layer: "); phex(current_layer); print("\n");
212 print("default_layer: "); phex(default_layer); print("\n");
213 current_layer = layer;
214 default_layer = layer;
215 print("switch to Layer: "); phex(layer); print("\n");
216 }
Imprint / Impressum