debug_enable = false; | debug_enable = false; | ||||
} else { | } else { | ||||
print("\nDEBUG: enabled.\n"); | print("\nDEBUG: enabled.\n"); | ||||
debug_matrix = true; | |||||
debug_keyboard = true; | |||||
debug_mouse = true; | |||||
debug_enable = true; | debug_enable = true; | ||||
} | } | ||||
break; | break; | ||||
print("VERSION: " STR(DEVICE_VER) "\n"); | print("VERSION: " STR(DEVICE_VER) "\n"); | ||||
break; | break; | ||||
case KC_T: // print timer | case KC_T: // print timer | ||||
pv_hex32(timer_count); | |||||
print_val_hex32(timer_count); | |||||
break; | break; | ||||
case KC_P: // print toggle | case KC_P: // print toggle | ||||
if (print_enable) { | if (print_enable) { | ||||
break; | break; | ||||
case KC_S: | case KC_S: | ||||
print("\n\n----- Status -----\n"); | print("\n\n----- Status -----\n"); | ||||
pv_hex8(host_keyboard_leds()); | |||||
print_val_hex8(host_keyboard_leds()); | |||||
#ifdef HOST_PJRC | #ifdef HOST_PJRC | ||||
pv_hex8(UDCON); | |||||
pv_hex8(UDIEN); | |||||
pv_hex8(UDINT); | |||||
pv_hex8(usb_keyboard_leds); | |||||
pv_hex8(usb_keyboard_protocol); | |||||
pv_hex8(usb_keyboard_idle_config); | |||||
pv_hex8(usb_keyboard_idle_count); | |||||
print_val_hex8(UDCON); | |||||
print_val_hex8(UDIEN); | |||||
print_val_hex8(UDINT); | |||||
print_val_hex8(usb_keyboard_leds); | |||||
print_val_hex8(usb_keyboard_protocol); | |||||
print_val_hex8(usb_keyboard_idle_config); | |||||
print_val_hex8(usb_keyboard_idle_count); | |||||
#endif | #endif | ||||
#ifdef HOST_VUSB | #ifdef HOST_VUSB | ||||
# if USB_COUNT_SOF | # if USB_COUNT_SOF | ||||
pv_hex8(usbSofCount); | |||||
print_val_hex8(usbSofCount); | |||||
# endif | # endif | ||||
#endif | #endif | ||||
break; | break; | ||||
print("6: mk_wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n"); | print("6: mk_wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n"); | ||||
} | } | ||||
#define PRINT_SET_VAL(v) print(#v " = "); print_dec8(v); print("\n"); | |||||
#define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n"); | |||||
static void mousekey_param_inc(uint8_t param, uint8_t inc) | static void mousekey_param_inc(uint8_t param, uint8_t inc) | ||||
{ | { | ||||
switch (param) { | switch (param) { | ||||
static void switch_layer(uint8_t layer) | static void switch_layer(uint8_t layer) | ||||
{ | { | ||||
pv_hex8(current_layer); | |||||
pv_hex8(default_layer); | |||||
print_val_hex8(current_layer); | |||||
print_val_hex8(default_layer); | |||||
current_layer = layer; | current_layer = layer; | ||||
default_layer = layer; | default_layer = layer; | ||||
print("switch to "); pv_hex8(layer); | |||||
print("switch to "); print_val_hex8(layer); | |||||
} | } | ||||
static void clear_keyboard(void) | static void clear_keyboard(void) |
bool debug_matrix = false; | bool debug_matrix = false; | ||||
bool debug_keyboard = false; | bool debug_keyboard = false; | ||||
bool debug_mouse = false; | bool debug_mouse = false; | ||||
#include "print.h" | #include "print.h" | ||||
#define debug(s) if(debug_enable) print_P(PSTR(s)) | |||||
#define debug_P(s) if(debug_enable) print_P(s) | |||||
#define debug_S(s) if(debug_enable) print_S(s) | |||||
#define debug_hex(c) if(debug_enable) phex(c) | |||||
#define debug_hex16(i) if(debug_enable) phex16(i) | |||||
#define debug_bin(c) if(debug_enable) pbin(c) | |||||
#define debug_bin_reverse(c) if(debug_enable) pbin_reverse(c) | |||||
#define debug(s) do { if (debug_enable) print(s); } while (0) | |||||
#define debugln(s) do { if (debug_enable) println(s); } while (0) | |||||
#define debug_S(s) do { if (debug_enable) print_S(s); } while (0) | |||||
#define debug_P(s) do { if (debug_enable) print_P(s); } while (0) | |||||
#define debug_msg(s) do { \ | |||||
if (debug_enable) { \ | |||||
print(__FILE__); print(" at "); print_dec(__LINE__); print(" in "); print(": "); print(s); \ | |||||
} \ | |||||
} while (0) | |||||
#define debug_dec(data) do { if (debug_enable) print_dec(data); } while (0) | |||||
#define debug_decs(data) do { if (debug_enable) print_decs(data); } while (0) | |||||
#define debug_hex8(data) do { if (debug_enable) print_hex8(data); } while (0) | |||||
#define debug_hex16(data) do { if (debug_enable) print_hex16(data); } while (0) | |||||
#define debug_hex32(data) do { if (debug_enable) print_hex32(data); } while (0) | |||||
#define debug_bin8(data) do { if (debug_enable) print_bin8(data); } while (0) | |||||
#define debug_bin16(data) do { if (debug_enable) print_bin16(data); } while (0) | |||||
#define debug_bin32(data) do { if (debug_enable) print_bin32(data); } while (0) | |||||
#define debug_bin_reverse8(data) do { if (debug_enable) print_bin_reverse8(data); } while (0) | |||||
#define debug_bin_reverse16(data) do { if (debug_enable) print_bin_reverse16(data); } while (0) | |||||
#define debug_bin_reverse32(data) do { if (debug_enable) print_bin_reverse32(data); } while (0) | |||||
#define debug_dec(data) debug_dec(data) | |||||
#define debug_hex(data) debug_hex8(data) | |||||
#define debug_bin(data) debug_bin8(data) | |||||
#define debug_bin_reverse(data) debug_bin8(data) | |||||
#ifdef __cplusplus | #ifdef __cplusplus |
if (!debug_mouse) return; | if (!debug_mouse) return; | ||||
print("mousekey [btn|x y v h](rep/acl): ["); | print("mousekey [btn|x y v h](rep/acl): ["); | ||||
phex(mouse_report.buttons); print("|"); | phex(mouse_report.buttons); print("|"); | ||||
phex(mouse_report.x); print(" "); | |||||
phex(mouse_report.y); print(" "); | |||||
phex(mouse_report.v); print(" "); | |||||
phex(mouse_report.h); print("]("); | |||||
phex(mousekey_repeat); print("/"); | |||||
phex(mousekey_accel); print(")\n"); | |||||
print_decs(mouse_report.x); print(" "); | |||||
print_decs(mouse_report.y); print(" "); | |||||
print_decs(mouse_report.v); print(" "); | |||||
print_decs(mouse_report.h); print("]("); | |||||
print_dec(mousekey_repeat); print("/"); | |||||
print_dec(mousekey_accel); print(")\n"); | |||||
} | } |
* THE SOFTWARE. | * THE SOFTWARE. | ||||
*/ | */ | ||||
#include <stdio.h> | |||||
#include <avr/io.h> | #include <avr/io.h> | ||||
#include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||||
#include "print.h" | #include "print.h" | ||||
#define sendchar(c) do { if (print_enable && print_sendchar_func) (print_sendchar_func)(c); } while (0) | #define sendchar(c) do { if (print_enable && print_sendchar_func) (print_sendchar_func)(c); } while (0) | ||||
int8_t (*print_sendchar_func)(uint8_t) = NULL; | |||||
int8_t (*print_sendchar_func)(uint8_t) = 0; | |||||
bool print_enable = false; | bool print_enable = false; | ||||
/* print string stored in data memory(SRAM) | /* print string stored in data memory(SRAM) | ||||
* print_P("hello world"); | * print_P("hello world"); | ||||
* This consumes precious SRAM memory space for string. | * This consumes precious SRAM memory space for string. | ||||
} | } | ||||
} | } | ||||
void print_CRLF(void) | |||||
{ | |||||
sendchar('\r'); sendchar('\n'); | |||||
} | |||||
#define SIGNED 0x80 | |||||
#define BIN 2 | |||||
#define OCT 8 | |||||
#define DEC 10 | |||||
#define HEX 16 | |||||
static inline | |||||
char itoc(uint8_t i) | |||||
{ | |||||
return (i < 10 ? '0' + i : 'A' + i - 10); | |||||
} | |||||
static inline | |||||
void print_int(uint16_t data, uint8_t base) | |||||
{ | |||||
char buf[7] = {'\0'}; | |||||
char *p = &buf[6]; | |||||
if ((base & SIGNED) && (data & 0x8000)) { | |||||
data = -data; | |||||
buf[0] = '-'; | |||||
} | |||||
base &= ~SIGNED; | |||||
uint16_t n; | |||||
do { | |||||
n = data; | |||||
data /= base; | |||||
*(--p) = itoc(n - data*base); | |||||
} while (data); | |||||
if (buf[0]) *(--p) = buf[0]; | |||||
print_S(p); | |||||
} | |||||
void print_dec(uint16_t data) | |||||
{ | |||||
print_int(data, DEC); | |||||
} | |||||
void print_decs(int16_t data) | |||||
{ | |||||
print_int(data, DEC|SIGNED); | |||||
} | |||||
static inline | static inline | ||||
void print_hex4(uint8_t data) | void print_hex4(uint8_t data) | ||||
{ | { | ||||
print_hex16(data); | print_hex16(data); | ||||
} | } | ||||
void print_dec8(uint8_t data) | |||||
{ | |||||
if (data/100) sendchar('0' + (data/100)); | |||||
if (data/100 || data%100/10) sendchar('0' + (data%100/10)); | |||||
sendchar('0' + (data%10)); | |||||
} | |||||
void print_dec16(uint16_t data) | |||||
{ | |||||
// TODO | |||||
} | |||||
void print_dec32(uint32_t data) | |||||
{ | |||||
// TODO | |||||
} | |||||
void print_bin(uint8_t data) | void print_bin(uint8_t data) | ||||
{ | { |
#ifndef __cplusplus | #ifndef __cplusplus | ||||
// this macro allows you to write print("some text") and | // this macro allows you to write print("some text") and | ||||
// the string is automatically placed into flash memory :) | // the string is automatically placed into flash memory :) | ||||
#define print(s) print_P(PSTR(s)) | |||||
#define print(s) print_P(PSTR(s)) | |||||
#endif | #endif | ||||
#define println(s) print_P(PSTR(s "\n")) | |||||
#define println(s) print_P(PSTR(s "\n")) | |||||
/* for old name */ | |||||
#define pdec(data) print_dec(data) | |||||
#define pdec16(data) print_dec(data) | |||||
#define phex(data) print_hex8(data) | #define phex(data) print_hex8(data) | ||||
#define phex16(data) print_hex16(data) | #define phex16(data) print_hex16(data) | ||||
#define pdec(data) print_dec8(data) | |||||
#define pdec16(data) print_dec16(data) | |||||
#define pbin(data) print_bin8(data) | #define pbin(data) print_bin8(data) | ||||
#define pbin16(data) print_bin16(data) | #define pbin16(data) print_bin16(data) | ||||
#define pbin_reverse(data) print_bin_reverse8(data) | #define pbin_reverse(data) print_bin_reverse8(data) | ||||
/* print value utility */ | /* print value utility */ | ||||
#define pv_hex8(v) do { print_P(PSTR(#v ": ")); print_hex8(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_hex16(v) do { print_P(PSTR(#v ": ")); print_hex16(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_hex32(v) do { print_P(PSTR(#v ": ")); print_hex32(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_dec8(v) do { print_P(PSTR(#v ": ")); print_dec8(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_dec16(v) do { print_P(PSTR(#v ": ")); print_dec16(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_dec32(v) do { print_P(PSTR(#v ": ")); print_dec32(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin8(v) do { print_P(PSTR(#v ": ")); print_bin8(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin16(v) do { print_P(PSTR(#v ": ")); print_bin16(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin32(v) do { print_P(PSTR(#v ": ")); print_bin32(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin_reverse8(v) do { print_P(PSTR(#v ": ")); print_bin_reverse8(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin_reverse16(v) do { print_P(PSTR(#v ": ")); print_bin_reverse16(v); print_P(PSTR("\n")); } while (0) | |||||
#define pv_bin_reverse32(v) do { print_P(PSTR(#v ": ")); print_bin_reverse32(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_dec(v) do { print_P(PSTR(#v ": ")); print_dec(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_decs(v) do { print_P(PSTR(#v ": ")); print_decs(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_hex8(v) do { print_P(PSTR(#v ": ")); print_hex8(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_hex16(v) do { print_P(PSTR(#v ": ")); print_hex16(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_hex32(v) do { print_P(PSTR(#v ": ")); print_hex32(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin8(v) do { print_P(PSTR(#v ": ")); print_bin8(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin16(v) do { print_P(PSTR(#v ": ")); print_bin16(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin32(v) do { print_P(PSTR(#v ": ")); print_bin32(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin_reverse8(v) do { print_P(PSTR(#v ": ")); print_bin_reverse8(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin_reverse16(v) do { print_P(PSTR(#v ": ")); print_bin_reverse16(v); print_P(PSTR("\n")); } while (0) | |||||
#define print_val_bin_reverse32(v) do { print_P(PSTR(#v ": ")); print_bin_reverse32(v); print_P(PSTR("\n")); } while (0) | |||||
/* print string stored in program memory(FLASH) */ | /* print string stored in program memory(FLASH) */ | ||||
void print_P(const char *s); | void print_P(const char *s); | ||||
void print_CRLF(void); | |||||
/* decimal */ | |||||
void print_dec(uint16_t data); | |||||
void print_decs(int16_t data); | |||||
/* hex */ | |||||
void print_hex8(uint8_t data); | void print_hex8(uint8_t data); | ||||
void print_hex16(uint16_t data); | void print_hex16(uint16_t data); | ||||
void print_hex32(uint32_t data); | void print_hex32(uint32_t data); | ||||
void print_dec8(uint8_t data); | |||||
void print_dec16(uint16_t data); | |||||
/* binary */ | |||||
void print_bin8(uint8_t data); | void print_bin8(uint8_t data); | ||||
void print_bin16(uint16_t data); | void print_bin16(uint16_t data); | ||||
void print_bin32(uint32_t data); | |||||
void print_bin_reverse8(uint8_t data); | void print_bin_reverse8(uint8_t data); | ||||
void print_bin_reverse16(uint16_t data); | void print_bin_reverse16(uint16_t data); | ||||
void print_bin_reverse32(uint32_t data); | |||||
#ifdef __cplusplus | #ifdef __cplusplus | ||||
} | } |