#include <avr/pgmspace.h>#include <avr/interrupt.h>#include <avr/signal.h>#include "common.h"#include "usart.h"void USART0::SendData(uint8_t aData) {while(!TESTBIT(UCSR0A,(1 << UDRE0)));UDR0 = aData;}uint8_t USART0::ReceiveData() {while(!TESTBIT(UCSR0A,(1 << RXC0)));return UDR0;}// a non-exported helper functionstatic char MakeHexDigit(uint8_t aDigit) {if (aDigit > 9) return 'a'+aDigit-10; else return '0'+aDigit;}void USART0::SendHexData(uint8_t aData) {SendData(MakeHexDigit(aData >> 4));SendData(MakeHexDigit(aData & 0x0f));}void USART0::SendHexData(uint16_t aData) {SendHexData((uint8_t)(aData >> 8));SendHexData((uint8_t)(aData & 0xff));}void USART0::SendHexData(uint32_t aData) {SendHexData((uint16_t)(aData >> 16));SendHexData((uint16_t)(aData & 0xffff));}void USART0::SendHexData(int16_t aData) {if (aData < 0) {SendData('-');aData = -aData;} else {SendData(' ');}SendHexData((uint16_t)aData);}void USART0::SendHexData(int32_t aData) {if (aData < 0) {SendData('-');aData = -aData;} else {SendData(' ');}SendHexData((uint32_t)aData);}void USART0::SendString(const char *aString) {while(aString != 0) SendData(*(aString++));}void USART0::SendPGString(const char *aString) {while(aString != 0) SendData(pgm_read_byte(aString++));}