diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/command.c | 51 | ||||
| -rw-r--r-- | common/keyboard.c | 6 | ||||
| -rw-r--r-- | common/print.c | 127 | ||||
| -rw-r--r-- | common/print.h | 50 | 
4 files changed, 162 insertions, 72 deletions
diff --git a/common/command.c b/common/command.c index 8e2e21a70..85cc05733 100644 --- a/common/command.c +++ b/common/command.c @@ -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) diff --git a/common/keyboard.c b/common/keyboard.c index b0e0ed793..bda7c0625 100644 --- a/common/keyboard.c +++ b/common/keyboard.c @@ -1,5 +1,5 @@  /* -Copyright 2011 Jun Wako <wakojun@gmail.com> +Copyright 2011,2012 Jun Wako <wakojun@gmail.com>  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 diff --git a/common/print.c b/common/print.c index 4e36d3935..dd73ff59d 100644 --- a/common/print.c +++ b/common/print.c @@ -1,3 +1,4 @@ +/* Copyright 2012 Jun Wako <wakojun@gmail.com> */  /* 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); +} diff --git a/common/print.h b/common/print.h index 1c4567862..3a949ba05 100644 --- a/common/print.h +++ b/common/print.h @@ -1,3 +1,4 @@ +/* Copyright 2012 Jun Wako <wakojun@gmail.com> */  /* 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  | 
