QSerialDevice - Библиотека для работы с COM-портами |
Здравствуйте, гость ( Вход | Регистрация )
QSerialDevice - Библиотека для работы с COM-портами |
kuzulis |
27.5.2010, 17:28
Сообщение
#71
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата и что самое главное isExists=false. значит нету COM1 Кстати, этот порт в мамку встроен или это USB\RS-232 конвертер? Он есть, проверил все что были. Конвертер USB\RS-485 тоже не определяется хм.. о_О. , а посмотрите в реестре, по пути: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Serenum\\Enum есть ли там что нибудь? |
|
|
kuzulis |
27.5.2010, 20:37
Сообщение
#72
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Да так там и работает. Ловятся любые события от UDEV а потом просто смотрим что изменилось в директории /dev, и если там пропало у-во которое является tty* - то мы сообщаем об этом. Значит при выдергивании порта когда он открыт события не приходят от UDEV. Нужно проверить как нибудь попозже. --- Резюмирую: чтобы реализовать полностью такую фичу как "отлов втыкания/выдергивания" конвертеров в любых состояниях (открыт или закрыт или что-то там еще) необходимо найти те механизмы в ОС которые позволяли бы обнаружить втыкание/извлечение конвертера. Вот к примеру, если конвертер (порт) закрыт, то его "втыкание/извлечение" в принципе легко отслеживается. Но, если он открыт и в этот момент его мы "выдернули" - то это проблема ОС ! Если в ней еще сохраняется состояние того что порт присутствует - то виноват "индус" который писал ОС! Если вы найдете механизм, который четко и однозначно определял наличие порта в системе - то я это реализую. Присылайте патчи.. Я только ЗА всеми руками! Мы подключаем устройство. Вот события удева: CODE KERNEL[1273928448.612580] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1 (usb) KERNEL[1273928448.615458] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb) KERNEL[1273928448.622468] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/tty/ttyACM0 (tty) KERNEL[1273928448.622593] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.1 (usb) KERNEL[1273928448.622606] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/usb_device/usbdev2.112 (usb_device) UDEV [1273928448.626864] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1 (usb) UDEV [1273928448.627187] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb) UDEV [1273928448.628576] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.1 (usb) UDEV [1273928448.640491] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/tty/ttyACM0 (tty) UDEV [1273928448.644527] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/usb_device/usbdev2.112 (usb_device) Мы видим, что подключено устройство, связанное с tty Теперь мы порт открываем, после чего вытаскиваем устройство. Результат: CODE KERNEL[1273928469.995045] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb) KERNEL[1273928469.995079] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.1 (usb) KERNEL[1273928469.996906] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/usb_device/usbdev2.112 (usb_device) UDEV [1273928469.996923] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0 (usb) KERNEL[1273928469.996937] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1 (usb) UDEV [1273928469.998121] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.1 (usb) UDEV [1273928469.999564] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/usb_device/usbdev2.112 (usb_device) UDEV [1273928469.999826] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1 (usb) Видно, что ttyACM0 не изчез. Но, если бы мы на прошлой итерации запомнили ещё и /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/, то тогда мы бы могли сейчас подать сигнал о том, что вынули именно ttyACM0. Если устройство было подключено до старта watcher'а, то тогда его путь в ядре можно было бы отловить в самом начале, делая табличку интересующих нас устройств, т.е. tty* (да, знаю устройств много. Но, ИМХО, это полезая фича. только что проверил работу в Linux при таких обстоятельствах и получил это: Цитата [kuzulis@kuzulis release]$ ./serialdevicewatcher Please remove or insert a serial device (eg USB/Serial controller) to see the notification. Devices : ("/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyUSB0") Devices : ("/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3") Devices : ("/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyUSB1") т.е. сначала открыл у-во /dev/ttyUSB0 потом запустил Watcher. Он мне выдал первую строку. Потом я выдернул шнурок - он мне выдал вторую строку в которой этот порт пропал. Далее я опять втыкнул шнурок - он мне показал третью строку /dev/ttyUSB1 как видно, у меня на компе все события обрабатываются "корректно" . хм.. непонятно почему у вас проблемы в Linux |
|
|
Litkevich Yuriy |
27.5.2010, 22:28
Сообщение
#73
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
kuzulis, не цитируй целыми сообщениями - читать тяжело
|
|
|
panbaraban |
28.5.2010, 6:03
Сообщение
#74
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.5.2010 Пользователь №: 1759 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
kuzulis |
28.5.2010, 7:39
Сообщение
#75
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
хм. ну должно работать по идее.
а теперь посмотрите в : HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_067b&Pid_2303\\5&21b58723&0&1 и в: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_067b&Pid_2303\\5&21b58723&0&1\\Device Parameters Сообщение отредактировал kuzulis - 28.5.2010, 7:42 |
|
|
panbaraban |
30.5.2010, 20:38
Сообщение
#76
|
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.5.2010 Пользователь №: 1759 Спасибо сказали: 0 раз(а) Репутация: 0 |
хм. ну должно работать по идее. а теперь посмотрите в : HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_067b&Pid_2303\\5&21b58723&0&1 и в: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_067b&Pid_2303\\5&21b58723&0&1\\Device Parameters Как то так вот, например |
|
|
||
kuzulis |
31.5.2010, 7:39
Сообщение
#77
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
В принципе все должно работать. Пробегитесь дебаггером в SerialDeviceInfo .
|
|
|
panbaraban |
31.5.2010, 20:13
Сообщение
#78
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.5.2010 Пользователь №: 1759 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
panbaraban |
8.6.2010, 17:43
Сообщение
#79
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.5.2010 Пользователь №: 1759 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ещё такая бага: если порт открыть, а потом закрыть, то снова открыть его уже не получается. Делал полностью из примера reader.
В начале проги создал объект, при закрытии его не удалял. Затем снова вызываем open и всё, порт больше не открывается. Может быть я что-то не так делаю? |
|
|
kuzulis |
8.6.2010, 19:16
Сообщение
#80
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Ещё такая бага: если порт открыть, а потом закрыть, то снова открыть его уже не получается. Делал полностью из примера reader. В начале проги создал объект, при закрытии его не удалял. Затем снова вызываем open и всё, порт больше не открывается. Может быть я что-то не так делаю? этот баг был в версии 0.2.0 (в релизе). в SVN это должно быть уже пофикшено. к сожалению пока что fireforge.net лежит и невозможно получить срез. |
|
|
Текстовая версия | Сейчас: 27.11.2024, 20:21 |