Как настроить горячую замену usb устройства в Linux?
Приветствую!
Вопрос таков. Пишу ПО под Линукс, которое общается с USB девайсами типа ttyUSB*/ttyACM* необходимо реализовать восстановление работы после обрыва связи. Проблема возникает, если порт был открыт в момент переопределения устройства. Устройство в таком случае получает новое имя (ttyUSB0->ttyUSB1), и программа перестаёт его видеть. Написал правило UDEV, которое пересоздаёт устройство с одним и тем же псевдонимом, однако это не помогает. Псевдоним один (dev/mydevice) но ссылается он при переподключенини на новый tty, и дескрирптор файла, видимо, становится неверным. Есть ли какие-то настройки, которые могли бы помочь это обойти? Версия ПО для windows не имеет такой проблемы, Я могу сколько угодно переподключать USB девайс...
То есть логика работы ПО в результате должна быть такой:
1. Открыли порт.
2. Ждём в цикле данных из порта
3. Произошёл обрыв связи
4. Восстановление связи
5. Пришли данные из порта
6. Завершение цикла, закрытие порта.
Выложите сюда ваше правило для UDEV (сомнительно что там ошибка, конечно).
Возможно особенность вашего устройства.
Возможно вам придётся в приложении реализовать функционал поиска порта устройства.
Пришёл к выводу, что необходимо вручную управлять открытием/закрытием дескриптора порта. Винда каким-то образом прощает переподключение устройств, вероятно из-за того, что не работает с портами как с файлами, в отличие от *NIX. Также, на поведение ПО влияет ряд параметров - настройки USB, наличие/отсутствие modemmanager в системе, скорость переподключенния устройства.