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