diff --git a/firmware/src/commands.c b/firmware/src/commands.c index 51b8a8f..4a71afc 100644 --- a/firmware/src/commands.c +++ b/firmware/src/commands.c @@ -6,9 +6,13 @@ #include #include +#include #include #include +// Internal function prototypes +void _uartPutAsciiBlock(DataBuffer buffer); + // Mode: ASCII (false) or binary (true) bool binary_mode = false; @@ -123,17 +127,25 @@ void commandRead(char* arg) { } } else { // Fancy ASCII output - uartPrintf("<%d>", buffer.bytes); - - for (int i = 0; i < buffer.bytes; i++) { - uartPrintf(" %02X", buffer.data[i]); - } - uartPutLine(NULL); + _uartPutAsciiBlock(buffer); } } while (buffer.bytes > 0); } +void _uartPutAsciiBlock(DataBuffer buffer) { + char outBuffer[20]; + sprintf(outBuffer, "<%d>", buffer.bytes); + uartPutString(outBuffer); + + for (int i = 0; i < buffer.bytes; i++) { + sprintf(outBuffer, " %02X", buffer.data[i]); + uartPutString(outBuffer); + } + + uartPutLine(NULL); +} + void commandWrite(char* arg) { if (arg == NULL) { uartPutLine("ERR WRITE needs a start address"); @@ -164,20 +176,26 @@ void commandErase() { // TESTREAD command: for testing purposes, reads a few bytes and returns them in a human readable format. void commandTestRead() { + uint8_t byte; + char outBuffer[20]; + eepromSetReadMode(); for (int i = 0x00; i < 0x20; i++) { - uartPrintf("TESTREAD 0x%02X: ", i); + itoa(i, outBuffer, 16); + uartPutString("TESTREAD 0x"); + uartPutString(outBuffer); + uartPutString(": "); - uint8_t byte = eepromReadByte(i); + byte = eepromReadByte(i); + itoa(byte, outBuffer, 16); - if (byte >= 32 && byte <= 126) { - uartPutChar(byte); - } else { - uartPutChar('?'); - } + uartPutChar(byte); + uartPutString(" (0x"); + uartPutString(outBuffer); + uartPutString(")"); - uartPrintf(" (0x%02X)\n"); + uartPutLine(NULL); } } diff --git a/firmware/src/commands.h b/firmware/src/commands.h index f31a471..b1bf0ac 100644 --- a/firmware/src/commands.h +++ b/firmware/src/commands.h @@ -6,8 +6,7 @@ void executeCommand(CommandLine cmdLine); -void commandHelp(); -void commandInit(char* arg); +void commandInit(); void commandRead(char* arg); void commandWrite(char* arg); void commandErase(); diff --git a/firmware/src/uart.c b/firmware/src/uart.c index 1d6fcba..b68bab2 100644 --- a/firmware/src/uart.c +++ b/firmware/src/uart.c @@ -2,8 +2,6 @@ #include "uart.h" #include -#include -#include #include // Initialize UART @@ -56,19 +54,6 @@ void uartPutLine(char* data) { uartPutChar('\n'); } -// Transmit a sprintf formatted string (maximum buffer: 256 bytes!) -void uartPrintf(const char* format, ...) { - char outBuffer[256]; - - va_list args; - va_start(args, format); - - vsprintf(outBuffer, format, args); - uartPutString(outBuffer); - - va_end(args); -} - // Receive a single character (blocking) unsigned char uartGetChar() { // Block until a character has been received diff --git a/firmware/src/uart.h b/firmware/src/uart.h index 7421af4..b47c953 100644 --- a/firmware/src/uart.h +++ b/firmware/src/uart.h @@ -16,9 +16,6 @@ void uartPutString(char* data); // Transmit a string followed by a line break void uartPutLine(char* data); -// Transmit a sprintf formatted string (maximum buffer: 256 bytes!) -void uartPrintf(const char* format, ...); - // Read a single character (blocking) unsigned char uartGetChar();