static void lua_usr_usart_thread(void *data) { uint16_t len=0,index=0; uint32_t lastTick=0; while(1) { if((len=MicoUartGetLengthInBuffer(LUA_USR_UART))==0) { if(index>0 && mico_get_time() - lastTick>=100) goto doUartData; mico_thread_msleep(10); continue; } if(index ==0) lastTick = mico_get_time(); if(index+len>=USR_UART_LENGTH) len = USR_UART_LENGTH - index; MicoUartRecv(LUA_USR_UART, pinbuf+index, len, 10); index = index+len;pinbuf[index]=0x00; doUartData: if(index>=USR_UART_LENGTH || mico_get_time() - lastTick>=100) { index = 0; if(usr_uart_cb_ref == LUA_NOREF) continue; lua_rawgeti(gL, LUA_REGISTRYINDEX, usr_uart_cb_ref); lua_pushstring(gL,(char const*)pinbuf); lua_call(gL, 1, 0); } } //mico_rtos_delete_thread(NULL); }
uint32_t user_uartRecv(unsigned char *outBuf, unsigned int getLen) { unsigned int data_len = 0; if( (NULL == outBuf) || (0 == getLen) ) { user_uart_log("ERROR: user_uartRecv input params error!"); return 0; } if( MicoUartRecv( USER_UART, outBuf, getLen, USER_UART_RECV_TIMEOUT) == kNoErr) { data_len = getLen; } else { data_len = MicoUartGetLengthInBuffer( USER_UART ); if(data_len) { MicoUartRecv(USER_UART, outBuf, data_len, USER_UART_RECV_TIMEOUT); } else { data_len = 0; } } return data_len; }
static size_t _uart_get_one_packet(uint8_t* inBuf, int inBufLen) { int datalen; while(1) { if( MicoUartRecv( UART_FOR_APP, inBuf, inBufLen, 500) == kNoErr){ return inBufLen; } else{ datalen = MicoUartGetLengthInBuffer( UART_FOR_APP ); if(datalen){ MicoUartRecv(UART_FOR_APP, inBuf, datalen, 500); return datalen; } } } }
/* Packet format: BB 00 CMD(2B) Status(2B) datalen(2B) data(x) checksum(2B) * copy to buf, return len = datalen+10 */ size_t _uart_get_one_packet(uint8_t* inBuf, int inBufLen) { dev_if_log_trace(); int datalen; while(1) { if( MicoUartRecv( UART_FOR_MCU, inBuf, inBufLen, UART_RECV_TIMEOUT) == kNoErr){ return inBufLen; } else{ datalen = MicoUartGetLengthInBuffer( UART_FOR_MCU ); if(datalen){ MicoUartRecv(UART_FOR_MCU, inBuf, datalen, UART_RECV_TIMEOUT); return datalen; } } } }