#include "string-extras.h"
#include "cli.h"
#include "config.h"
+#include "hexdigit_tab.h"
cli_rx_fpt cli_rx = NULL;
cli_tx_fpt cli_tx = NULL;
* will have 2*n continous hexadecimal characters.
*/
void cli_hexdump(void* data, uint16_t length){
- char hex_tab[] = {'0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 'A', 'B',
- 'C', 'D', 'E', 'F'};
if(!cli_tx)
return;
while(length--){
- cli_tx(hex_tab[(*((uint8_t*)data))>>4]);
- cli_tx(hex_tab[(*((uint8_t*)data))&0xf]);
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))>>4)));
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))&0xf)));
data = (uint8_t*)data +1;
}
}
+/**
+ * \brief dumps the contents of a buffer to the console
+ * This function behaves like cli_hexdump except that the
+ * bytes are dumped in reverse order. This is usefull to dump
+ * integers which ar e in little endian order.
+ */
+void cli_hexdump_rev(void* data, uint16_t length){
+ if(!cli_tx)
+ return;
+ data = (uint8_t*)data + length -1;
+ while(length--){
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))>>4)));
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))&0xf)));
+ data = (uint8_t*)data -1;
+ }
+}
+
/**
* \brief dumps the contents of a buffer to the console
* Like cli_hexdump but bytes are seperated with a single space
* on the console output.
*/
void cli_hexdump2(void* data, uint16_t length){
- char hex_tab[] = {'0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 'A', 'B',
- 'C', 'D', 'E', 'F'};
if(!cli_tx)
return;
while(length--){
- cli_tx(hex_tab[(*((uint8_t*)data))>>4]);
- cli_tx(hex_tab[(*((uint8_t*)data))&0xf]);
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))>>4)));
+ cli_tx(pgm_read_byte(hexdigit_tab_P +((*((uint8_t*)data))&0xf)));
cli_tx(' ');
data = (uint8_t*)data +1;
}
cli_putstr_P(PSTR(" \t- 0x"));
}
}
- cli_hexdump(&item.cmd_function, 2);
+ cli_hexdump_rev(&item.cmd_function, 2);
cli_putstr_P(PSTR("\r\n"));
}
}