Всегда читайте тайм-аут

В настоящее время я пытаюсь заставить порт PIC32UBL Qt/Linux/Mac работать по последовательному порту. Пока я всегда получаю тайм-ауты при чтении последовательного порта.

Вот полный проект с открытым исходным кодом PIC32UBL-qt.

я использую /dev/ttyUSB0 как последовательный порт, этот адаптер был протестирован. Также я проверил, что целевая схема получает / отправляет данные в хост-программу (PIC32UBL-qt) с помощью логического анализатора. Также он полностью работает с версией PIC32UBL для Windows.

Дефектная часть находится на comport.cpp:156

unsigned short CComPort::ReadComPort(char* buffer, int MaxLen)
{
  if (serialPort != NULL)
  {
    SerialPort::DataBuffer dataBuffer;

    // Added a catch for timeouts
    try
    {
      serialPort->Read(dataBuffer, MaxLen,10);

      std::copy(dataBuffer.begin(), dataBuffer.end(), buffer);
    }
    catch(std::exception &e)
    {

    }

    return dataBuffer.size();
  }
  return 0;
}

Итак Read всегда выбрасывает тайм-аут, пробовал другое время (100, 1000): всегда тайм-аут, а также пробовал бесконечный (0): никогда не выходить

Может ли проблема быть связана с тем, что libserial работает с обработчиком сигнала, и я использую адаптер FTDI serial / usb?

1 ответ

Решение

Судя по комментариям chux, я проверял, читая только один символ за раз, и он работает отлично, вот окончательная версия метода в программе:

unsigned short CComPort::ReadComPort(char* buffer, int MaxLen)
{
  if (serialPort != NULL)
  {
    int nCount = 0;

    while(serialPort->IsDataAvailable() && nCount < MaxLen)
    {
      buffer[nCount++] = serialPort->ReadByte(10);
    }

    return nCount;
  }

  return 0;
}
Другие вопросы по тегам