#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); }