Последовательный порт Win API должен ждать после инициализации

У меня следующая проблема. У меня есть устройство последовательного порта, которое должно связываться с компьютером. На самом деле это плата Arduino Due, но я не думаю, что это связано.

Я использую CreateFile для открытия порта, а затем устанавливаю параметры с помощью GetCommState()&SetCommState() и GetCommTimeouts()&SetCommTimeouts().

Порт открывается правильно - проблем нет. Но в этот момент я хочу проверить, подключено ли устройство. Поэтому я отправляю конкретное сообщение. Устройство должно реагировать определенным образом, чтобы я знал, что оно подключено.

Теперь к проблеме: это работает, только если поставить Sleep(1000) после создания порта (перед отправкой запроса на рукопожатие). Похоже, что WinAPI нужно некоторое время, прежде чем он сможет начать использовать порт. Поскольку решение Sleep обычно непригодно для использования, мне нужно найти альтернативу...

Под это не работает я имею в виду время ожидания ReadFile. Время ожидания истекает, даже если время ожидания установлено примерно на 5 секунд — обратите внимание, что интервал ожидания составляет всего одну секунду. Таким образом, запрос на рукопожатие даже не отправляется. Если я установлю тайм-аут на 1 секунду и интервал сна на одну секунду, это сработает. Если я установил тайм-аут на 5 секунд, но сна нет, это не сработает. Видите проблему?

Я собираюсь попробовать NetworkMonitor, но я уверен, что проблема не в устройстве...


person Aros    schedule 31.03.2015    source источник


Ответы (1)


Хорошо, я мог бы поискать немного больше, прежде чем публиковать этот вопрос.

Дело в том, что Arduino перезагружается, когда вы открываете соединение с вашего ПК.

Когда вы используете терминал, вы сначала подключаетесь, а пишете через несколько секунд, чтобы у платы Arduino было достаточно времени для загрузки, и вы этого не заметили. Это то, что смутило меня достаточно, чтобы написать вопрос.

На это есть 3 решения, только 2 из которых вообще имеет смысл упомянуть:

1) решение, которое я использовал, не зная всего этого (вы ждете около секунды, пока плата снова загрузится...) 2) вы отключаете автоматический сброс, модифицируя плату Arduino

Оба они глупы, если вы спросите меня, для этого должен быть переключатель или флэш-переменная...

person Aros    schedule 31.03.2015
comment
Вероятно, ничто не мешает вам перепрограммировать прошивку в вашем Due, если у вас есть другое устройство, которое вы можете использовать в качестве программатора. Клоны Pro-Mini стоят около 4 долларов каждый на Ebay... Добавьте еще 4 или 5 для платы последовательного интерфейса USB FTDI, и вы получите 2 менее чем за 15 долларов. - person enhzflep; 31.03.2015