
#include "compiler.h"
#include "delay.h"

#include "avr/pgmspace.h"

/*-----------------------------------------------------------------------------------*/
static void
delay(void)
{
  unsigned char i;
  for(i = 0; i < 1; ++i) {
    Delay_10ms(1);
  }
}
/*-----------------------------------------------------------------------------------*/
static char buffer[40];
static prog_char hextab[] =
  {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
/*-----------------------------------------------------------------------------------*/
static void
print_buffer(unsigned char len)
{
  unsigned char i;

  for(i = 0; i < len; ++i) {
    delay();
    UDR0 = buffer[i];
  }
}
/*-----------------------------------------------------------------------------------*/
void
debug_print8(unsigned char v)
{
  buffer[0] = v / 100 + '0';
  buffer[1] = (v / 10) % 10 + '0';
  buffer[2] = v % 10 + '0';
  buffer[3] = ' ';
  buffer[4] = PRG_RDB(hextab + (v >> 4));
  buffer[5] = PRG_RDB(hextab + (v & 0x0f));    
  buffer[6] = '\n';
  print_buffer(7);
}
/*-----------------------------------------------------------------------------------*/
void
debug_print16(unsigned short v)
{
  buffer[0] = v / 10000 + '0';
  buffer[1] = (v / 1000) % 10 + '0';
  buffer[2] = (v / 100) % 10 + '0';
  buffer[3] = (v / 10) % 10 + '0';
  buffer[4] = v % 10 + '0';
  buffer[5] = ' ';
  buffer[6] = PRG_RDB(hextab + ((v & 0xf000) >> 12));
  buffer[7] = PRG_RDB(hextab + ((v & 0x0f00) >> 8));
  buffer[8] = PRG_RDB(hextab + ((v & 0xf0) >> 4));
  buffer[9] = PRG_RDB(hextab + (v & 0x0f));    
  buffer[10] = '\n';
  print_buffer(11);
}
/*-----------------------------------------------------------------------------------*/
void
debug_print(prog_char *str)
{
  unsigned char i;

  for(i = 0; PRG_RDB(str + i) != 0; ++i) {
    buffer[i] = PRG_RDB(str + i);
  }
  print_buffer(i);
}
/*-----------------------------------------------------------------------------------*/
