130 lines
3.6 KiB
C
Executable File
130 lines
3.6 KiB
C
Executable File
#include "uart.h"
|
|
#include "dtest_printf.h"
|
|
|
|
#define DTEST_UART_TO_PC 0
|
|
|
|
#define DBUF_MAX_LEN (DTEST_PRINTF_MAX_DATA_BUF * 3)
|
|
|
|
static char dtestbuf[DBUF_MAX_LEN + 64];
|
|
|
|
extern struct uart_ctrl uart_e_ctrl;
|
|
|
|
void dtest_puts_data(char *mnane, char *pntr, int len)
|
|
{
|
|
int offset = 0, i;
|
|
|
|
offset = iot_sprintf(dtestbuf, "\r\n[DATA] - %s:#START#", mnane);
|
|
|
|
for (i = 0; i < len; i++) {
|
|
offset += iot_sprintf(dtestbuf + offset, "%02X ", pntr[i]);
|
|
if (DBUF_MAX_LEN <= offset + 4) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
offset += iot_sprintf(dtestbuf + offset, "%s", "#END#");
|
|
|
|
dtestbuf[offset] = 0;
|
|
|
|
iot_printf("%s\n", dtestbuf);
|
|
|
|
return;
|
|
}
|
|
|
|
int dtest_get_config(char *mname)
|
|
{
|
|
/* TODO */
|
|
return 0xFFFFFFFF;
|
|
}
|
|
|
|
static int dtest_atoi(char *s)
|
|
{
|
|
int i = 0, n = 0;
|
|
int is_hex = 0;
|
|
|
|
|
|
if (*s == '0' && (*(s+1) == 'x' || *(s+1) == 'X')) {
|
|
is_hex = 1;
|
|
}
|
|
if (is_hex == 1) {
|
|
char c ;
|
|
int num = 0;
|
|
for(i = 2; *(s+i) != '\0' && i < 10; i++) { //The limited length is 10
|
|
if( (*(s+i) < '0') || (*(s+i) > '9' && *(s+i) < 'A')
|
|
|| (*(s+i) > 'F' && *(s+i) < 'a') || *(s+i) > 'f') {
|
|
return -1;
|
|
}
|
|
c = *(s+i);
|
|
switch(c) {
|
|
case 'a': case 'A': num = 10; break;
|
|
case 'b': case 'B': num = 11; break;
|
|
case 'c': case 'C': num = 12; break;
|
|
case 'd': case 'D': num = 13; break;
|
|
case 'e': case 'E': num = 14; break;
|
|
case 'f': case 'F': num = 15; break;
|
|
default : num = c - '0'; break;
|
|
}
|
|
n = 16 * n + num;
|
|
}
|
|
} else {
|
|
for(i = 0; *(s+i) != '\0'; i++) {
|
|
if( *(s+i) < 0x30 || *(s+i) > 0x39 ) {
|
|
return -1;
|
|
}
|
|
n = 10 * n + (*(s+i) - '0');
|
|
}
|
|
}
|
|
return n;
|
|
}
|
|
|
|
int dtest_get_case_group(uint32_t *case_group)
|
|
{
|
|
char buf[32] = {0}; //cmd len 21 bytes: [CONFIG] - 0x0000000B
|
|
char key[] = "[CONFIG] - ";
|
|
int result;
|
|
uint32_t i, len_buf, len_key, len_fifo, idx_buf = 0;
|
|
uint32_t timeout_cnt = 5000000; //about 9s
|
|
|
|
len_buf = sizeof(buf);
|
|
len_key = sizeof(key) - 1;
|
|
do {
|
|
timeout_cnt--;
|
|
if (timeout_cnt == 0) {
|
|
return -1;
|
|
}
|
|
if (idx_buf >= (len_key + 10)) {
|
|
for(i = 0; i < len_key; i++) {
|
|
if (buf[i] != key[i]) {
|
|
idx_buf = 0;
|
|
for (uint32_t j = 0; j < sizeof(buf); j++) {
|
|
buf[j] = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (idx_buf) {
|
|
*case_group = dtest_atoi(&buf[len_key]);
|
|
if (*case_group == -1) {
|
|
*case_group = 0;
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
len_fifo = uart_e_ctrl.rx_fifo_cnt(DTEST_UART_TO_PC);
|
|
if (len_fifo <= 0) {
|
|
continue;
|
|
}
|
|
len_fifo = ((len_buf - idx_buf) > len_fifo ? len_fifo : len_buf - idx_buf);
|
|
for (i = 0; i < len_fifo; i++) {
|
|
result = uart_e_ctrl.getc(DTEST_UART_TO_PC);
|
|
if ((idx_buf == 0) && ((result & 0xff) != key[0])) {
|
|
continue;
|
|
}
|
|
buf[idx_buf] = result & 0xff;
|
|
idx_buf++;
|
|
// dprintf("recv uart data: %s\n", buf);
|
|
}
|
|
} while(1);
|
|
}
|