@@ -205,7 +205,7 @@ static bool command_common(uint8_t code) | |||
print("VERSION: " STR(DEVICE_VER) "\n"); | |||
break; | |||
case KC_T: // print timer | |||
print("timer: "); phex16(timer_count>>16); phex16(timer_count); print("\n"); | |||
pv_hex32(timer_count); | |||
break; | |||
case KC_P: // print toggle | |||
if (print_enable) { | |||
@@ -218,20 +218,20 @@ static bool command_common(uint8_t code) | |||
break; | |||
case KC_S: | |||
print("\n\n----- Status -----\n"); | |||
print("host_keyboard_leds:"); phex(host_keyboard_leds()); print("\n"); | |||
pv_hex8(host_keyboard_leds()); | |||
#ifdef HOST_PJRC | |||
print("UDCON: "); phex(UDCON); print("\n"); | |||
print("UDIEN: "); phex(UDIEN); print("\n"); | |||
print("UDINT: "); phex(UDINT); print("\n"); | |||
print("usb_keyboard_leds:"); phex(usb_keyboard_leds); print("\n"); | |||
print("usb_keyboard_protocol: "); phex(usb_keyboard_protocol); print("\n"); | |||
print("usb_keyboard_idle_config:"); phex(usb_keyboard_idle_config); print("\n"); | |||
print("usb_keyboard_idle_count:"); phex(usb_keyboard_idle_count); print("\n"); | |||
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); | |||
#endif | |||
#ifdef HOST_VUSB | |||
# if USB_COUNT_SOF | |||
print("usbSofCount: "); phex(usbSofCount); print("\n"); | |||
pv_hex8(usbSofCount); | |||
# endif | |||
#endif | |||
break; | |||
@@ -350,6 +350,7 @@ static void mousekey_param_print(void) | |||
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"); | |||
static void mousekey_param_inc(uint8_t param, uint8_t inc) | |||
{ | |||
switch (param) { | |||
@@ -358,42 +359,42 @@ static void mousekey_param_inc(uint8_t param, uint8_t inc) | |||
mk_delay += inc; | |||
else | |||
mk_delay = UINT8_MAX; | |||
print("mk_delay = "); pdec(mk_delay); print("\n"); | |||
PRINT_SET_VAL(mk_delay); | |||
break; | |||
case 2: | |||
if (mk_interval + inc < UINT8_MAX) | |||
mk_interval += inc; | |||
else | |||
mk_interval = UINT8_MAX; | |||
print("mk_interval = "); pdec(mk_interval); print("\n"); | |||
PRINT_SET_VAL(mk_interval); | |||
break; | |||
case 3: | |||
if (mk_max_speed + inc < UINT8_MAX) | |||
mk_max_speed += inc; | |||
else | |||
mk_max_speed = UINT8_MAX; | |||
print("mk_max_speed = "); pdec(mk_max_speed); print("\n"); | |||
PRINT_SET_VAL(mk_max_speed); | |||
break; | |||
case 4: | |||
if (mk_time_to_max + inc < UINT8_MAX) | |||
mk_time_to_max += inc; | |||
else | |||
mk_time_to_max = UINT8_MAX; | |||
print("mk_time_to_max = "); pdec(mk_time_to_max); print("\n"); | |||
PRINT_SET_VAL(mk_time_to_max); | |||
break; | |||
case 5: | |||
if (mk_wheel_max_speed + inc < UINT8_MAX) | |||
mk_wheel_max_speed += inc; | |||
else | |||
mk_wheel_max_speed = UINT8_MAX; | |||
print("mk_wheel_max_speed = "); pdec(mk_wheel_max_speed); print("\n"); | |||
PRINT_SET_VAL(mk_wheel_max_speed); | |||
break; | |||
case 6: | |||
if (mk_wheel_time_to_max + inc < UINT8_MAX) | |||
mk_wheel_time_to_max += inc; | |||
else | |||
mk_wheel_time_to_max = UINT8_MAX; | |||
print("mk_wheel_time_to_max = "); pdec(mk_wheel_time_to_max); print("\n"); | |||
PRINT_SET_VAL(mk_wheel_time_to_max); | |||
break; | |||
} | |||
} | |||
@@ -406,42 +407,42 @@ static void mousekey_param_dec(uint8_t param, uint8_t dec) | |||
mk_delay -= dec; | |||
else | |||
mk_delay = 0; | |||
print("mk_delay = "); pdec(mk_delay); print("\n"); | |||
PRINT_SET_VAL(mk_delay); | |||
break; | |||
case 2: | |||
if (mk_interval > dec) | |||
mk_interval -= dec; | |||
else | |||
mk_interval = 0; | |||
print("mk_interval = "); pdec(mk_interval); print("\n"); | |||
PRINT_SET_VAL(mk_interval); | |||
break; | |||
case 3: | |||
if (mk_max_speed > dec) | |||
mk_max_speed -= dec; | |||
else | |||
mk_max_speed = 0; | |||
print("mk_max_speed = "); pdec(mk_max_speed); print("\n"); | |||
PRINT_SET_VAL(mk_max_speed); | |||
break; | |||
case 4: | |||
if (mk_time_to_max > dec) | |||
mk_time_to_max -= dec; | |||
else | |||
mk_time_to_max = 0; | |||
print("mk_time_to_max = "); pdec(mk_time_to_max); print("\n"); | |||
PRINT_SET_VAL(mk_time_to_max); | |||
break; | |||
case 5: | |||
if (mk_wheel_max_speed > dec) | |||
mk_wheel_max_speed -= dec; | |||
else | |||
mk_wheel_max_speed = 0; | |||
print("mk_wheel_max_speed = "); pdec(mk_wheel_max_speed); print("\n"); | |||
PRINT_SET_VAL(mk_wheel_max_speed); | |||
break; | |||
case 6: | |||
if (mk_wheel_time_to_max > dec) | |||
mk_wheel_time_to_max -= dec; | |||
else | |||
mk_wheel_time_to_max = 0; | |||
print("mk_wheel_time_to_max = "); pdec(mk_wheel_time_to_max); print("\n"); | |||
PRINT_SET_VAL(mk_wheel_time_to_max); | |||
break; | |||
} | |||
} | |||
@@ -551,11 +552,11 @@ static uint8_t numkey2num(uint8_t code) | |||
static void switch_layer(uint8_t layer) | |||
{ | |||
print("current_layer: "); phex(current_layer); print("\n"); | |||
print("default_layer: "); phex(default_layer); print("\n"); | |||
pv_hex8(current_layer); | |||
pv_hex8(default_layer); | |||
current_layer = layer; | |||
default_layer = layer; | |||
print("switch to Layer: "); phex(layer); print("\n"); | |||
print("switch to "); pv_hex8(layer); | |||
} | |||
static void clear_keyboard(void) |
@@ -1,5 +1,5 @@ | |||
/* | |||
Copyright 2011 Jun Wako <[email protected]> | |||
Copyright 2011,2012 Jun Wako <[email protected]> | |||
This program is free software: you can redistribute it and/or modify | |||
it under the terms of the GNU General Public License as published by | |||
@@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include "debug.h" | |||
#include "command.h" | |||
#include "util.h" | |||
#include "sendchar.h" | |||
#ifdef MOUSEKEY_ENABLE | |||
#include "mousekey.h" | |||
#endif | |||
@@ -545,6 +546,9 @@ void keyboard_init(void) | |||
{ | |||
debug_keyboard = true; | |||
// TODO: configuration of sendchar impl | |||
print_sendchar_func = sendchar; | |||
timer_init(); | |||
matrix_init(); | |||
#ifdef PS2_MOUSE_ENABLE |
@@ -1,3 +1,4 @@ | |||
/* Copyright 2012 Jun Wako <[email protected]> */ | |||
/* Very basic print functions, intended to be used with usb_debug_only.c | |||
* http://www.pjrc.com/teensy/ | |||
* Copyright (c) 2008 PJRC.COM, LLC | |||
@@ -21,81 +22,125 @@ | |||
* THE SOFTWARE. | |||
*/ | |||
#include <stdio.h> | |||
#include <avr/io.h> | |||
#include <avr/pgmspace.h> | |||
#include "print.h" | |||
#include "sendchar.h" | |||
#define sendchar(c) do { if (print_enable && print_sendchar_func) (print_sendchar_func)(c); } while (0) | |||
int8_t (*print_sendchar_func)(uint8_t) = NULL; | |||
bool print_enable = false; | |||
/* print string stored in data memory(SRAM) | |||
* print_P("hello world"); | |||
* This consumes precious SRAM memory space for string. | |||
*/ | |||
void print_S(const char *s) | |||
{ | |||
if (!print_enable) return; | |||
char c; | |||
while (1) { | |||
c = *s++; | |||
if (!c) break; | |||
if (c == '\n') sendchar('\r'); | |||
sendchar(c); | |||
} | |||
uint8_t c; | |||
while (1) { | |||
c = *s++; | |||
if (!c) break; | |||
if (c == '\n') sendchar('\r'); | |||
sendchar(c); | |||
} | |||
} | |||
/* print string stored in program memory(FLASH) | |||
* print_P(PSTR("hello world"); | |||
* This consumes relatively abundant FLASH memory area not SRAM. | |||
*/ | |||
void print_P(const char *s) | |||
{ | |||
if (!print_enable) return; | |||
char c; | |||
while (1) { | |||
c = pgm_read_byte(s++); | |||
if (!c) break; | |||
if (c == '\n') sendchar('\r'); | |||
sendchar(c); | |||
} | |||
uint8_t c; | |||
while (1) { | |||
c = pgm_read_byte(s++); | |||
if (!c) break; | |||
if (c == '\n') sendchar('\r'); | |||
sendchar(c); | |||
} | |||
} | |||
static inline | |||
void print_hex4(uint8_t data) | |||
{ | |||
sendchar(data + ((data < 10) ? '0' : 'A' - 10)); | |||
} | |||
void print_hex8(uint8_t data) | |||
{ | |||
print_hex4(data>>4); | |||
print_hex4(data&0x0F); | |||
} | |||
void phex1(unsigned char c) | |||
void print_hex16(uint16_t data) | |||
{ | |||
if (!print_enable) return; | |||
sendchar(c + ((c < 10) ? '0' : 'A' - 10)); | |||
print_hex8(data>>8); | |||
print_hex8(data); | |||
} | |||
void phex(unsigned char c) | |||
void print_hex32(uint32_t data) | |||
{ | |||
if (!print_enable) return; | |||
phex1(c >> 4); | |||
phex1(c & 15); | |||
print_hex16(data>>16); | |||
print_hex16(data); | |||
} | |||
void phex16(unsigned int i) | |||
void print_dec8(uint8_t data) | |||
{ | |||
if (!print_enable) return; | |||
phex(i >> 8); | |||
phex(i); | |||
if (data/100) sendchar('0' + (data/100)); | |||
if (data/100 || data%100/10) sendchar('0' + (data%100/10)); | |||
sendchar('0' + (data%10)); | |||
} | |||
void pdec(uint8_t i) | |||
void print_dec16(uint16_t data) | |||
{ | |||
if (!print_enable) return; | |||
if (i/100) sendchar('0' + (i/100)); | |||
if (i/100 || i%100/10) sendchar('0' + (i%100/10)); | |||
sendchar('0' + (i%10)); | |||
// TODO | |||
} | |||
void print_dec32(uint32_t data) | |||
{ | |||
// TODO | |||
} | |||
void pbin(unsigned char c) | |||
void print_bin(uint8_t data) | |||
{ | |||
if (!print_enable) return; | |||
for (int i = 7; i >= 0; i--) { | |||
sendchar((c & (1<<i)) ? '1' : '0'); | |||
sendchar((data & (1<<i)) ? '1' : '0'); | |||
} | |||
} | |||
void pbin_reverse(unsigned char c) | |||
void print_bin16(uint16_t data) | |||
{ | |||
print_bin8(data>>8); | |||
print_bin8(data); | |||
} | |||
void print_bin32(uint32_t data) | |||
{ | |||
print_bin8(data>>24); | |||
print_bin8(data>>16); | |||
print_bin8(data>>8); | |||
print_bin8(data); | |||
} | |||
void print_bin_reverse8(uint8_t data) | |||
{ | |||
if (!print_enable) return; | |||
for (int i = 0; i < 8; i++) { | |||
sendchar((c & (1<<i)) ? '1' : '0'); | |||
sendchar((data & (1<<i)) ? '1' : '0'); | |||
} | |||
} | |||
void print_bin_reverse16(uint16_t data) | |||
{ | |||
print_bin_reverse8(data); | |||
print_bin_reverse8(data>>8); | |||
} | |||
void print_bin_reverse32(uint32_t data) | |||
{ | |||
print_bin_reverse8(data); | |||
print_bin_reverse8(data>>8); | |||
print_bin_reverse8(data>>16); | |||
print_bin_reverse8(data>>24); | |||
} |
@@ -1,3 +1,4 @@ | |||
/* Copyright 2012 Jun Wako <[email protected]> */ | |||
/* Very basic print functions, intended to be used with usb_debug_only.c | |||
* http://www.pjrc.com/teensy/ | |||
* Copyright (c) 2008 PJRC.COM, LLC | |||
@@ -36,18 +37,57 @@ | |||
#define print(s) print_P(PSTR(s)) | |||
#endif | |||
#define println(s) print_P(PSTR(s "\n")) | |||
#define phex(data) print_hex8(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 pbin16(data) print_bin16(data) | |||
#define pbin_reverse(data) print_bin_reverse8(data) | |||
#define pbin_reverse16(data) print_bin_reverse16(data) | |||
/* 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) | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* function pointer of sendchar to be used by print utility */ | |||
extern int8_t (*print_sendchar_func)(uint8_t); | |||
extern bool print_enable; | |||
/* print string stored in data memory(SRAM) */ | |||
void print_S(const char *s); | |||
/* print string stored in program memory(FLASH) */ | |||
void print_P(const char *s); | |||
void phex(unsigned char c); | |||
void phex16(unsigned int i); | |||
void pdec(uint8_t i); | |||
void pbin(unsigned char c); | |||
void pbin_reverse(unsigned char c); | |||
void print_hex8(uint8_t data); | |||
void print_hex16(uint16_t data); | |||
void print_hex32(uint32_t data); | |||
void print_dec8(uint8_t data); | |||
void print_dec16(uint16_t data); | |||
void print_bin8(uint8_t data); | |||
void print_bin16(uint16_t data); | |||
void print_bin_reverse8(uint8_t data); | |||
void print_bin_reverse16(uint16_t data); | |||
#ifdef __cplusplus | |||
} | |||
#endif |