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