crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

44 страниц V  « < 6 7 8 9 10 > »   
Ответить в данную темуНачать новую тему
> QSerialDevice - Библиотека для работы с COM-портами
kuzulis
  опции профиля:
сообщение 27.5.2010, 17:28
Сообщение #71


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата(panbaraban @ 27.5.2010, 18:15) *
Цитата(kuzulis @ 27.5.2010, 17:17) *
Цитата
и что самое главное 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  


Цитата(dekar @ 15.5.2010, 17:19) *
Цитата(kuzulis @ 15.5.2010, 14:36) *
Да так там и работает. Ловятся любые события от 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 @ 27.5.2010, 19:28) *
хм.. о_О. ,

а посмотрите в реестре, по пути:

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Serenum\\Enum

есть ли там что нибудь?


Прикрепленное изображение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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  


Цитата(kuzulis @ 28.5.2010, 9:39) *
хм. ну должно работать по идее.

а теперь посмотрите в :

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  


Цитата(kuzulis @ 31.5.2010, 9:39) *
В принципе все должно работать. Пробегитесь дебаггером в SerialDeviceInfo :).

Пасиба, попробую)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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  


Цитата(panbaraban @ 8.6.2010, 18:43) *
Ещё такая бага: если порт открыть, а потом закрыть, то снова открыть его уже не получается. Делал полностью из примера reader.
В начале проги создал объект, при закрытии его не удалял. Затем снова вызываем open и всё, порт больше не открывается. Может быть я что-то не так делаю?


этот баг был в версии 0.2.0 (в релизе). в SVN это должно быть уже пофикшено.

к сожалению пока что fireforge.net лежит :( и невозможно получить срез.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

44 страниц V  « < 6 7 8 9 10 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.11.2024, 2:54