Пример #1
0
static void flush_serial()
{
  // Flush all data in serial port
  ser_set_timeout_ms( ser, SER_NO_TIMEOUT );
  while( ser_read_byte( ser ) != -1 );
  ser_set_timeout_ms( ser, SER_INF_TIMEOUT );
}
Пример #2
0
// Open the serial port
ser_handler ser_open( const char* sername )
{
    char portname[ WIN_MAX_PORT_NAME + 1 ];
    HANDLE hComm;
    ser_handler hnd;

    portname[ WIN_MAX_PORT_NAME ] = '\0';
    _snprintf( portname, WIN_MAX_PORT_NAME, "\\\\.\\%s", sername );
    hComm = CreateFile( portname, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );
    if( hComm == INVALID_HANDLE_VALUE )
        return SER_HANDLER_INVALID;
    if( !SetupComm( hComm, 2048, 2048 ) )
        return SER_HANDLER_INVALID;
    if( ser_set_timeout_ms( hComm, SER_INF_TIMEOUT ) != SER_OK )
        return SER_HANDLER_INVALID;
    if( ( hnd = malloc( sizeof( SERIAL_DATA ) ) ) == NULL )
        return SER_HANDLER_INVALID;
    memset( hnd, 0, sizeof( SERIAL_DATA ) );
    hnd->hnd = hComm;
    hnd->fWaitingOnRead = FALSE;
    if( ( hnd->o.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ) ) == NULL )
    {
        free( hnd );
        return SER_HANDLER_INVALID;
    }
    if( ( hnd->o_wr.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ) ) == NULL )
    {
        free( hnd );
        CloseHandle( hnd->o.hEvent );
        return SER_HANDLER_INVALID;
    }
    return hnd;
}
Пример #3
0
void transport_open( Transport *tpt, const char *path )
{
  struct exception e;
  
  tpt->fd = ser_open( path );

  if( tpt->fd == INVALID_TRANSPORT)
  {
    e.errnum = transport_errno;
    e.type = fatal;
    Throw( e );
  }
  
  ser_setup( tpt->fd, 115200, SER_DATABITS_8, SER_PARITY_NONE, SER_STOPBITS_1 );
  ser_set_timeout_ms( tpt->fd, 1000 );
}
Пример #4
0
BOOL msg_get_resp( uint8_t chan, mavlink_message_t *p_msg, uint32_t timeout)
{
  BOOL ret = FALSE;
  int  ch_ret;
  uint8_t ch;
  static mavlink_message_t msg[MSG_CH_MAX];
  static mavlink_status_t status[MSG_CH_MAX];
  uint32_t retry = timeout;



  ser_set_timeout_ms( stm32_ser_id, 1 );

  while(1)
  {
    ch_ret = read_byte();

    if( ch_ret < 0 )
    {
      if( retry-- <= 0 )
      {
	ret = FALSE;
	break;
      }
      else
      {
	continue;
      }
    }
    else
    {
      ch = (uint8_t)(ch_ret);
      retry = timeout;
    }

    ret = msg_recv( chan, ch, &msg[chan], &status[chan] );

    if( ret == TRUE )
    {
      *p_msg = msg[chan];
      break;
    }
  }

  return ret;
}