Пример #1
0
void uartRecv_thread(void *inContext)
{
  uart_recv_log_trace();
  mico_Context_t *Context = inContext;
  int recvlen;
  uint8_t *inDataBuffer;
  
  inDataBuffer = malloc(UART_ONE_PACKAGE_LENGTH);
  require(inDataBuffer, exit);
  
  while(1) {
    recvlen = _uart_get_one_packet(inDataBuffer, UART_ONE_PACKAGE_LENGTH);
    if (recvlen <= 0)
      continue; 
    sppUartCommandProcess(inDataBuffer, recvlen, Context);
  }
  
exit:
  if(inDataBuffer) free(inDataBuffer);
}
Пример #2
0
/* 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)
{
  uart_recv_log_trace();

  int datalen;
  
  while(1) {
    if( PlatformUartRecv(inBuf, inBufLen, UART_RECV_TIMEOUT) == kNoErr){
      return inBufLen;
    }else{
      datalen = PlatformUartRecvedDataLen();
      if(datalen){
        PlatformUartRecv(inBuf, datalen, UART_RECV_TIMEOUT);
        return datalen;
      }
    }
    
  }
  
}
Пример #3
0
/* Packet format: BB 00 CMD(2B) Status(2B) datalen(2B) data(x) checksum(2B)
* copy to buf, return len = datalen+10
*/
int _uart_get_one_packet(uint8_t* inBuf, int inBufLen)
{
  uart_recv_log_trace();
  OSStatus err = kNoErr;
  int datalen;
  uint8_t *p;
  
  while(1) {
    p = inBuf;
    err = PlatformUartRecv(p, 1, MICO_WAIT_FOREVER);
    require_noerr(err, exit);
    require(*p == 0xBB, exit);
    
    p++;
    err = PlatformUartRecv(p, 1, 1000);
    require_noerr(err, exit);
    require(*p == 0x00, exit);
    
    p++;
    err = PlatformUartRecv(p, 6, 1000);
    require_noerr(err, exit);
    datalen = p[4] + (p[5]<<8);
    require(datalen + 10 <= inBufLen, exit);
    
    p += 6;
    err = PlatformUartRecv(p, datalen+2, 1000);
    require_noerr(err, exit);
    
    err = check_sum(inBuf, datalen + 10);
    require_noerr(err, exit);
    
    return datalen + 10;
  }
  
exit:
  return -1;
  
}
Пример #4
0
/* 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)
{
    uart_recv_log_trace();

    int datalen;

    while(1)
    {
        if( MicoUartRecv( UART_FOR_APP, inBuf, inBufLen, UART_RECV_TIMEOUT) == kNoErr)
        {
            return inBufLen;
        }
        else
        {
            datalen = MicoUartGetLengthInBuffer( UART_FOR_APP );
            if(datalen)
            {
                MicoUartRecv(UART_FOR_APP, inBuf, datalen, UART_RECV_TIMEOUT);
                return datalen;
            }
        }
    }

}