aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/protocol/iwrap/main.c
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2019-08-30 11:19:03 -0700
committerskullydazed <skullydazed@users.noreply.github.com>2019-08-30 15:01:52 -0700
commitb624f32f944acdc59dcb130674c09090c5c404cb (patch)
treebc13adbba137d122d9a2c2fb2fafcbb08ac10e25 /tmk_core/protocol/iwrap/main.c
parent61af76a10d00aba185b8338604171de490a13e3b (diff)
downloadqmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.tar.gz
qmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.zip
clang-format changes
Diffstat (limited to 'tmk_core/protocol/iwrap/main.c')
-rw-r--r--tmk_core/protocol/iwrap/main.c312
1 files changed, 174 insertions, 138 deletions
diff --git a/tmk_core/protocol/iwrap/main.c b/tmk_core/protocol/iwrap/main.c
index 3abdce8df..7ba780ede 100644
--- a/tmk_core/protocol/iwrap/main.c
+++ b/tmk_core/protocol/iwrap/main.c
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18#include <avr/interrupt.h> 18#include <avr/interrupt.h>
19#include <avr/io.h> 19#include <avr/io.h>
20//#include <avr/wdt.h> 20//#include <avr/wdt.h>
21#include "wd.h" // in order to use watchdog in interrupt mode 21#include "wd.h" // in order to use watchdog in interrupt mode
22#include <avr/sleep.h> 22#include <avr/sleep.h>
23#include <util/delay.h> 23#include <util/delay.h>
24#include <avr/power.h> 24#include <avr/power.h>
@@ -28,8 +28,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28#include "action.h" 28#include "action.h"
29#include "iwrap.h" 29#include "iwrap.h"
30#ifdef PROTOCOL_VUSB 30#ifdef PROTOCOL_VUSB
31# include "vusb.h" 31# include "vusb.h"
32# include "usbdrv.h" 32# include "usbdrv.h"
33#endif 33#endif
34#include "uart.h" 34#include "uart.h"
35#include "suart.h" 35#include "suart.h"
@@ -38,13 +38,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
38#include "keycode.h" 38#include "keycode.h"
39#include "command.h" 39#include "command.h"
40 40
41 41static void sleep(uint8_t term);
42static void sleep(uint8_t term); 42static bool console(void);
43static bool console(void); 43static bool console_command(uint8_t c);
44static bool console_command(uint8_t c);
45static uint8_t key2asc(uint8_t key); 44static uint8_t key2asc(uint8_t key);
46 45
47
48/* 46/*
49static void set_prr(void) 47static void set_prr(void)
50{ 48{
@@ -78,37 +76,32 @@ static void pullup_pins(void)
78} 76}
79*/ 77*/
80 78
81
82#ifdef PROTOCOL_VUSB 79#ifdef PROTOCOL_VUSB
83static void disable_vusb(void) 80static void disable_vusb(void) {
84{
85 // disable interrupt & disconnect to prevent host from enumerating 81 // disable interrupt & disconnect to prevent host from enumerating
86 USB_INTR_ENABLE &= ~(1 << USB_INTR_ENABLE_BIT); 82 USB_INTR_ENABLE &= ~(1 << USB_INTR_ENABLE_BIT);
87 usbDeviceDisconnect(); 83 usbDeviceDisconnect();
88} 84}
89 85
90static void enable_vusb(void) 86static void enable_vusb(void) {
91{
92 USB_INTR_ENABLE |= (1 << USB_INTR_ENABLE_BIT); 87 USB_INTR_ENABLE |= (1 << USB_INTR_ENABLE_BIT);
93 usbDeviceConnect(); 88 usbDeviceConnect();
94} 89}
95 90
96static void init_vusb(void) 91static void init_vusb(void) {
97{
98 uint8_t i = 0; 92 uint8_t i = 0;
99 93
100 usbInit(); 94 usbInit();
101 disable_vusb(); 95 disable_vusb();
102 /* fake USB disconnect for > 250 ms */ 96 /* fake USB disconnect for > 250 ms */
103 while(--i){ 97 while (--i) {
104 _delay_ms(1); 98 _delay_ms(1);
105 } 99 }
106 enable_vusb(); 100 enable_vusb();
107} 101}
108#endif 102#endif
109 103
110void change_driver(host_driver_t *driver) 104void change_driver(host_driver_t *driver) {
111{
112 /* 105 /*
113 host_clear_keyboard_report(); 106 host_clear_keyboard_report();
114 host_swap_keyboard_report(); 107 host_swap_keyboard_report();
@@ -120,20 +113,18 @@ void change_driver(host_driver_t *driver)
120 host_set_driver(driver); 113 host_set_driver(driver);
121} 114}
122 115
123 116static bool sleeping = false;
124static bool sleeping = false; 117static bool insomniac = false; // TODO: should be false for power saving
125static bool insomniac = false; // TODO: should be false for power saving
126static uint16_t last_timer = 0; 118static uint16_t last_timer = 0;
127 119
128int main(void) 120int main(void) {
129{
130 MCUSR = 0; 121 MCUSR = 0;
131 clock_prescale_set(clock_div_1); 122 clock_prescale_set(clock_div_1);
132 WD_SET(WD_OFF); 123 WD_SET(WD_OFF);
133 124
134 // power saving: the result is worse than nothing... why? 125 // power saving: the result is worse than nothing... why?
135 //pullup_pins(); 126 // pullup_pins();
136 //set_prr(); 127 // set_prr();
137 128
138#ifdef PROTOCOL_VUSB 129#ifdef PROTOCOL_VUSB
139 disable_vusb(); 130 disable_vusb();
@@ -146,11 +137,11 @@ int main(void)
146 print("suart init\n"); 137 print("suart init\n");
147 // suart init 138 // suart init
148 // PC4: Tx Output IDLE(Hi) 139 // PC4: Tx Output IDLE(Hi)
149 PORTC |= (1<<4); 140 PORTC |= (1 << 4);
150 DDRC |= (1<<4); 141 DDRC |= (1 << 4);
151 // PC5: Rx Input(pull-up) 142 // PC5: Rx Input(pull-up)
152 PORTC |= (1<<5); 143 PORTC |= (1 << 5);
153 DDRC &= ~(1<<5); 144 DDRC &= ~(1 << 5);
154 // suart receive interrut(PC5/PCINT13) 145 // suart receive interrut(PC5/PCINT13)
155 PCMSK1 = 0b00100000; 146 PCMSK1 = 0b00100000;
156 PCICR = 0b00000010; 147 PCICR = 0b00000010;
@@ -164,18 +155,16 @@ int main(void)
164 last_timer = timer_read(); 155 last_timer = timer_read();
165 while (true) { 156 while (true) {
166#ifdef PROTOCOL_VUSB 157#ifdef PROTOCOL_VUSB
167 if (host_get_driver() == vusb_driver()) 158 if (host_get_driver() == vusb_driver()) usbPoll();
168 usbPoll();
169#endif 159#endif
170 keyboard_task(); 160 keyboard_task();
171#ifdef PROTOCOL_VUSB 161#ifdef PROTOCOL_VUSB
172 if (host_get_driver() == vusb_driver()) 162 if (host_get_driver() == vusb_driver()) vusb_transfer_keyboard();
173 vusb_transfer_keyboard();
174#endif 163#endif
175 // TODO: depricated 164 // TODO: depricated
176 if (matrix_is_modified() || console()) { 165 if (matrix_is_modified() || console()) {
177 last_timer = timer_read(); 166 last_timer = timer_read();
178 sleeping = false; 167 sleeping = false;
179 } else if (!sleeping && timer_elapsed(last_timer) > 4000) { 168 } else if (!sleeping && timer_elapsed(last_timer) > 4000) {
180 sleeping = true; 169 sleeping = true;
181 iwrap_check_connection(); 170 iwrap_check_connection();
@@ -184,7 +173,7 @@ int main(void)
184 // TODO: suspend.h 173 // TODO: suspend.h
185 if (host_get_driver() == iwrap_driver()) { 174 if (host_get_driver() == iwrap_driver()) {
186 if (sleeping && !insomniac) { 175 if (sleeping && !insomniac) {
187 _delay_ms(1); // wait for UART to send 176 _delay_ms(1); // wait for UART to send
188 iwrap_sleep(); 177 iwrap_sleep();
189 sleep(WDTO_60MS); 178 sleep(WDTO_60MS);
190 } 179 }
@@ -192,8 +181,7 @@ int main(void)
192 } 181 }
193} 182}
194 183
195static void sleep(uint8_t term) 184static void sleep(uint8_t term) {
196{
197 WD_SET(WD_IRQ, term); 185 WD_SET(WD_IRQ, term);
198 186
199 cli(); 187 cli();
@@ -207,51 +195,46 @@ static void sleep(uint8_t term)
207 WD_SET(WD_OFF); 195 WD_SET(WD_OFF);
208} 196}
209 197
210static bool console(void) 198static bool console(void) {
211{ 199 // Send to Bluetoot module WT12
212 // Send to Bluetoot module WT12 200 static bool breaked = false;
213 static bool breaked = false; 201 if (!uart_available())
214 if (!uart_available()) 202 return false;
215 return false; 203 else {
216 else { 204 uint8_t c;
217 uint8_t c; 205 c = uart_getchar();
218 c = uart_getchar(); 206 uart_putchar(c);
219 uart_putchar(c); 207 switch (c) {
220 switch (c) { 208 case 0x00: // BREAK signal
221 case 0x00: // BREAK signal 209 if (!breaked) {
222 if (!breaked) { 210 print("break(? for help): ");
223 print("break(? for help): "); 211 breaked = true;
224 breaked = true; 212 }
225 } 213 break;
226 break; 214 case '\r':
227 case '\r': 215 uart_putchar('\n');
228 uart_putchar('\n'); 216 iwrap_buf_send();
229 iwrap_buf_send(); 217 break;
230 break; 218 case '\b':
231 case '\b': 219 iwrap_buf_del();
232 iwrap_buf_del(); 220 break;
233 break; 221 default:
234 default: 222 if (breaked) {
235 if (breaked) { 223 print("\n");
236 print("\n"); 224 console_command(c);
237 console_command(c); 225 breaked = false;
238 breaked = false; 226 } else {
239 } else { 227 iwrap_buf_add(c);
240 iwrap_buf_add(c); 228 }
241 } 229 break;
242 break;
243 }
244 return true;
245 } 230 }
231 return true;
232 }
246} 233}
247 234
248bool command_extra(uint8_t code) 235bool command_extra(uint8_t code) { return console_command(key2asc(code)); }
249{
250 return console_command(key2asc(code));
251}
252 236
253static bool console_command(uint8_t c) 237static bool console_command(uint8_t c) {
254{
255 switch (c) { 238 switch (c) {
256 case 'h': 239 case 'h':
257 case '?': 240 case '?':
@@ -287,11 +270,11 @@ static bool console_command(uint8_t c)
287 print("USB mode\n"); 270 print("USB mode\n");
288 init_vusb(); 271 init_vusb();
289 change_driver(vusb_driver()); 272 change_driver(vusb_driver());
290 //iwrap_kill(); 273 // iwrap_kill();
291 //iwrap_sleep(); 274 // iwrap_sleep();
292 // disable suart receive interrut(PC5/PCINT13) 275 // disable suart receive interrut(PC5/PCINT13)
293 PCMSK1 &= ~(0b00100000); 276 PCMSK1 &= ~(0b00100000);
294 PCICR &= ~(0b00000010); 277 PCICR &= ~(0b00000010);
295 return 1; 278 return 1;
296 case 'w': 279 case 'w':
297 print("iWRAP mode\n"); 280 print("iWRAP mode\n");
@@ -299,7 +282,7 @@ static bool console_command(uint8_t c)
299 disable_vusb(); 282 disable_vusb();
300 // enable suart receive interrut(PC5/PCINT13) 283 // enable suart receive interrut(PC5/PCINT13)
301 PCMSK1 |= 0b00100000; 284 PCMSK1 |= 0b00100000;
302 PCICR |= 0b00000010; 285 PCICR |= 0b00000010;
303 return 1; 286 return 1;
304#endif 287#endif
305 case 'k': 288 case 'k':
@@ -315,62 +298,115 @@ static bool console_command(uint8_t c)
315} 298}
316 299
317// convert keycode into ascii charactor 300// convert keycode into ascii charactor
318static uint8_t key2asc(uint8_t key) 301static uint8_t key2asc(uint8_t key) {
319{
320 switch (key) { 302 switch (key) {
321 case KC_A: return 'a'; 303 case KC_A:
322 case KC_B: return 'b'; 304 return 'a';
323 case KC_C: return 'c'; 305 case KC_B:
324 case KC_D: return 'd'; 306 return 'b';
325 case KC_E: return 'e'; 307 case KC_C:
326 case KC_F: return 'f'; 308 return 'c';
327 case KC_G: return 'g'; 309 case KC_D:
328 case KC_H: return 'h'; 310 return 'd';
329 case KC_I: return 'i'; 311 case KC_E:
330 case KC_J: return 'j'; 312 return 'e';
331 case KC_K: return 'k'; 313 case KC_F:
332 case KC_L: return 'l'; 314 return 'f';
333 case KC_M: return 'm'; 315 case KC_G:
334 case KC_N: return 'n'; 316 return 'g';
335 case KC_O: return 'o'; 317 case KC_H:
336 case KC_P: return 'p'; 318 return 'h';
337 case KC_Q: return 'q'; 319 case KC_I:
338 case KC_R: return 'r'; 320 return 'i';
339 case KC_S: return 's'; 321 case KC_J:
340 case KC_T: return 't'; 322 return 'j';
341 case KC_U: return 'u'; 323 case KC_K:
342 case KC_V: return 'v'; 324 return 'k';
343 case KC_W: return 'w'; 325 case KC_L:
344 case KC_X: return 'x'; 326 return 'l';
345 case KC_Y: return 'y'; 327 case KC_M:
346 case KC_Z: return 'z'; 328 return 'm';
347 case KC_1: return '1'; 329 case KC_N:
348 case KC_2: return '2'; 330 return 'n';
349 case KC_3: return '3'; 331 case KC_O:
350 case KC_4: return '4'; 332 return 'o';
351 case KC_5: return '5'; 333 case KC_P:
352 case KC_6: return '6'; 334 return 'p';
353 case KC_7: return '7'; 335 case KC_Q:
354 case KC_8: return '8'; 336 return 'q';
355 case KC_9: return '9'; 337 case KC_R:
356 case KC_0: return '0'; 338 return 'r';
357 case KC_ENTER: return '\n'; 339 case KC_S:
358 case KC_ESCAPE: return 0x1B; 340 return 's';
359 case KC_BSPACE: return '\b'; 341 case KC_T:
360 case KC_TAB: return '\t'; 342 return 't';
361 case KC_SPACE: return ' '; 343 case KC_U:
362 case KC_MINUS: return '-'; 344 return 'u';
363 case KC_EQUAL: return '='; 345 case KC_V:
364 case KC_LBRACKET: return '['; 346 return 'v';
365 case KC_RBRACKET: return ']'; 347 case KC_W:
366 case KC_BSLASH: return '\\'; 348 return 'w';
367 case KC_NONUS_HASH: return '\\'; 349 case KC_X:
368 case KC_SCOLON: return ';'; 350 return 'x';
369 case KC_QUOTE: return '\''; 351 case KC_Y:
370 case KC_GRAVE: return '`'; 352 return 'y';
371 case KC_COMMA: return ','; 353 case KC_Z:
372 case KC_DOT: return '.'; 354 return 'z';
373 case KC_SLASH: return '/'; 355 case KC_1:
374 default: return 0x00; 356 return '1';
357 case KC_2:
358 return '2';
359 case KC_3:
360 return '3';
361 case KC_4:
362 return '4';
363 case KC_5:
364 return '5';
365 case KC_6:
366 return '6';
367 case KC_7:
368 return '7';
369 case KC_8:
370 return '8';
371 case KC_9:
372 return '9';
373 case KC_0:
374 return '0';
375 case KC_ENTER:
376 return '\n';
377 case KC_ESCAPE:
378 return 0x1B;
379 case KC_BSPACE:
380 return '\b';
381 case KC_TAB:
382 return '\t';
383 case KC_SPACE:
384 return ' ';
385 case KC_MINUS:
386 return '-';
387 case KC_EQUAL:
388 return '=';
389 case KC_LBRACKET:
390 return '[';
391 case KC_RBRACKET:
392 return ']';
393 case KC_BSLASH:
394 return '\\';
395 case KC_NONUS_HASH:
396 return '\\';
397 case KC_SCOLON:
398 return ';';
399 case KC_QUOTE:
400 return '\'';
401 case KC_GRAVE:
402 return '`';
403 case KC_COMMA:
404 return ',';
405 case KC_DOT:
406 return '.';
407 case KC_SLASH:
408 return '/';
409 default:
410 return 0x00;
375 } 411 }
376} 412}