C программа останавливается при изменении пути последовательного устройства - PullRequest
0 голосов
/ 05 января 2020

In Linux Я в фоновом режиме запускаю программу, написанную на C, которая периодически обменивается данными с устройством, подключенным к одному из портов USB. Хотя устройство всегда подключено к одному и тому же порту, со временем оно переключается с /dev/ttyACM0 на /dev/ttyACM1 и обратно, даже если другие устройства не подключены. Следовательно, каждый раз, когда происходит переключение, я должен перезапустить программу.

Чтобы справиться с проблемой, я попытался настроить правило UDEV для новой символической ссылки , и символическая ссылка работает независимо от изменений пути подключенного устройства. Однако, когда происходит переключение, программа по-прежнему останавливается и требует перезапуска.

Существует ли системное правило, которое я могу реализовать для устройства, чтобы оно всегда сохраняло один и тот же путь, или есть другой более общий подход?

1 Ответ

0 голосов
/ 13 января 2020

Первый подход (проще):
Если у вас есть доступ к коду устройства другого, я бы реализовал сообщение ping от него.
Затем я бы прослушал это сообщение ping на обоих устройствах tty, чтобы узнать, на каком порту оно получено ( / dev / ttyACM0 или / dev / ttyACM1 ).

Второй подход:
В отдельном потоке реализовать монитор UDEV .
Монитор проверяет, какой порт TTY используется вашим устройством.
В случае смены порта просто переустановите коммуникационный поток ... См. udev_monitor_usb. c для получения usb-кода монитора udev.

...