crossplatform.ru

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

> QSerialDevice - Библиотека для работы с COM-портами
kuzulis
  опции профиля:
сообщение 1.7.2009, 20:05
Сообщение #1


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

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

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




Репутация:   7  


Доброго времени суток!

Я создал библиотеку для работы с последовательными портами, которая является альтернативой QextSerialPort и хочу выложить её на этот ресурс..
На главной странице этого сайта написано, что если я хочу чем-то поделиться - то я должен в соответствующем разделе форума об этом заявить.. так вот вопрос: ЧТО это за раздел? И как мне это сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kuzulis
  опции профиля:
сообщение 15.5.2010, 13:36
Сообщение #2


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

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

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




Репутация:   7  


Цитата
А очень просто. Надо перехватывать все события udev'а, а не только те, что связаны с rs232 портами. И смотреть, являлось ли отключённое устройство портом.


Да так там и работает. Ловятся любые события от UDEV а потом просто смотрим что изменилось в директории /dev, и если там пропало у-во которое является tty* - то мы сообщаем об этом. Значит при выдергивании порта когда он открыт события не приходят от UDEV. Нужно проверить как нибудь попозже.

Цитата
я использую QxtSerialPort в виндовозе, для отлова отключения преобразователя USB-RS232 при открытом порте всегда проверяю кол-во принятых байт. Драйвер FTDI'ного преобразователя всегда отрицательное значение возвращает.


Так это не означает, что конвертер отключен. Это означает что произошла какая то ошибка ввода - вывода ИМХО.

---
Резюмирую: чтобы реализовать полностью такую фичу как "отлов втыкания/выдергивания" конвертеров в любых состояниях (открыт или закрыт или что-то там еще) необходимо найти те механизмы в ОС которые позволяли бы обнаружить втыкание/извлечение конвертера.

Вот к примеру, если конвертер (порт) закрыт, то его "втыкание/извлечение" в принципе легко отслеживается. Но, если он открыт и в этот момент его мы "выдернули" - то это проблема ОС ! Если в ней еще сохраняется состояние того что порт присутствует - то виноват "индус" который писал ОС! :)

Если вы найдете механизм, который четко и однозначно определял наличие порта в системе - то я это реализую. Присылайте патчи.. Я только ЗА всеми руками!




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dekar
  опции профиля:
сообщение 15.5.2010, 16:19
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 14.4.2010
Пользователь №: 1632

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




Репутация:   0  



Цитата(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* (да, знаю устройств много. Но, ИМХО, это полезая фича.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 27.5.2010, 20:37
Сообщение #4


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

Группа: Участник
Сообщений: 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


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- kuzulis   QSerialDevice - Библиотека для работы с COM-портами   1.7.2009, 20:05
- - Litkevich Yuriy   Сайт: В боковой панели сайта (http://www.crossplat...   1.7.2009, 21:05
- - ViGOur   На сайте не нужно логинится, достаточно быть залог...   1.7.2009, 22:28
|- - kuzulis   Всем спасибо! Отправил запрос.. ждемс   2.7.2009, 9:38
- - Litkevich Yuriy   Цитата(kuzulis @ 2.7.2009, 13:38) Отправи...   2.7.2009, 9:52
- - kuzulis   ну типа с описанием либы , и там сказали что ответ...   2.7.2009, 10:35
- - kuzulis   Всё, теперь и на crossplatform.ru я послал запрос   3.7.2009, 7:30
- - Litkevich Yuriy   Цитата(kuzulis @ 3.7.2009, 11:30) послал ...   3.7.2009, 7:56
- - ViGOur   kuzulis, добавил ссылки скачать и обсудить на фору...   3.7.2009, 9:21
- - CrazyDeath   kuzulis доброго дня суток. увидел сегодня сообщени...   10.7.2009, 1:37
- - Litkevich Yuriy   Цитата(CrazyDeath @ 10.7.2009, 5:37) Qext...   10.7.2009, 1:45
- - CrazyDeath   Наверно я делаю, что то не правильно но у меня раб...   10.7.2009, 21:42
- - kuzulis   Цитатаувидел сегодня сообщение об альтернативе Qex...   13.7.2009, 10:48
- - CrazyDeath   Цитата1. теряет байты при приеме - это раз (у меня...   13.7.2009, 21:08
- - kuzulis   ЦитатаУ меня на работе, тестирование QextSerialPor...   14.7.2009, 7:54
|- - BRE   Цитата(kuzulis @ 14.7.2009, 8:54) имеется...   15.7.2009, 7:30
- - CrazyDeath   Цитатапопробуй прочитай 1000 байт ты не понял у ме...   15.7.2009, 1:14
- - kuzulis   Тихо и незаметно вышла в свет новая версия замечат...   15.9.2009, 8:52
- - oldcolony   Библиотека хорошая,мне подошла лучше,чем qextseria...   1.10.2009, 13:00
- - Elfinit   Что-то не вижу я на главной "Создать материал...   3.10.2009, 23:29
- - ViGOur   Я пока отключил общую авторизацию сайта и форума, ...   4.10.2009, 9:55
- - rcdimon   Наблюдаются проблемы при работе с виртуальными COM...   29.10.2009, 21:47
- - rcdimon   Установил другую программу для создания виртуальны...   29.10.2009, 22:19
- - kuzulis   Доброго времени. Скажите, а что нужно сделать, чт...   2.3.2010, 14:19
- - ViGOur   1. Заходишь в тему: QSerialDevice и так как ты авт...   3.3.2010, 17:03
- - kuzulis   Итак, анонсирую релиз: QSerialDevice v 0.2.0 Изме...   3.3.2010, 19:44
|- - mezmay   попробовал... Сначала написал прогу по получению ...   30.3.2010, 9:55
- - Litkevich Yuriy   mezmay, не было ни какой нужды цитировать целое со...   30.3.2010, 10:03
- - kuzulis   mezmay, Задание: прочитать внимательнее документ...   31.3.2010, 11:31
- - dekar   Хм. тут проблемка выползла. Он как-то не особо охо...   3.4.2010, 19:05
- - kuzulis   Берите последний срез SVN, там эта проблема вроде ...   3.4.2010, 22:00
|- - Гость   Цитата(kuzulis @ 3.4.2010, 22:00) Берите ...   4.4.2010, 19:30
- - kuzulis   ЦитатаУвы. SVN просто не собирается. Упс... Вы пла...   5.4.2010, 7:25
|- - dekar   Ура. SVN я собрал. Првада, проблема всё равнон не ...   5.4.2010, 9:12
- - kuzulis   Лана, вечером доковыряю   5.4.2010, 9:16
- - kuzulis   Вроде исправил.. Пробуйте!   6.4.2010, 19:08
- - dekar   Теперь мне надо до работы доползти :) А это будет ...   7.4.2010, 10:48
- - kuzulis   ЦитатаКачать SVN? Да.   7.4.2010, 13:31
- - dekar   Увы. Опять тот же симптом.   13.4.2010, 10:59
- - Гость   Нет, огромное спасибо! Всё заработало отлично....   13.4.2010, 11:01
- - dekar   Решил всё-таки зарегистрироваться. Итак 1) serial...   14.4.2010, 17:21
- - Litkevich Yuriy   Цитата(dekar @ 14.4.2010, 21:21) QByteArr...   14.4.2010, 20:03
- - kuzulis   Цитата1) serialdeviceinfo.h обёрнут в #ifndef SERI...   17.4.2010, 17:27
- - dekar   Вот и новая проблема. Не знаю, насколько она решае...   14.5.2010, 0:41
- - Litkevich Yuriy   Цитата(dekar @ 14.5.2010, 4:41) не перехв...   14.5.2010, 9:25
- - dekar   Цитата(Litkevich Yuriy @ 14.5.2010, 10:25...   14.5.2010, 12:27
- - Litkevich Yuriy   я использую QxtSerialPort в виндовозе, для отлова ...   14.5.2010, 16:29
- - dekar   хм. Удачно. Только проблемка - у меня не FTDI, а п...   14.5.2010, 18:32
- - Litkevich Yuriy   ну а на ПК у тебя стандартный (аппаратный) COM-пор...   14.5.2010, 20:34
- - dekar   Цитата(Litkevich Yuriy @ 14.5.2010, 20:34...   15.5.2010, 9:21
- - kuzulis   ЦитатаА очень просто. Надо перехватывать все событ...   15.5.2010, 13:36
|- - dekar   Цитата(kuzulis @ 15.5.2010, 14:36) Да так...   15.5.2010, 16:19
|- - kuzulis   Цитата(dekar @ 15.5.2010, 17:19) Цитата(k...   27.5.2010, 20:37
- - Litkevich Yuriy   Цитата(kuzulis @ 15.5.2010, 17:36) Так эт...   15.5.2010, 14:26
- - Litkevich Yuriy   Цитата(dekar @ 15.5.2010, 20:19) Но, ИМХО...   15.5.2010, 19:43
- - dekar   А ты можешь пока проверить, есть ли сигнал от изче...   16.5.2010, 23:59
- - kuzulis   ЦитатаА ты можешь пока проверить, есть ли сигнал о...   17.5.2010, 7:27
- - leech   Добрый день! Благодарю за отличный класс для р...   18.5.2010, 22:04
- - kuzulis   leech А попробуйте ка использовать версию библиот...   19.5.2010, 7:32
- - leech   Благодарю! Скачал SVN, пересобрал, поправил вы...   19.5.2010, 17:36
- - Litkevich Yuriy   kuzulis, отредактируй пожалуйста первое сообщение ...   26.5.2010, 7:16
- - dekar   Уже удалось отслеживать отключение уже открытого п...   26.5.2010, 10:20
- - kuzulis   Цитатаkuzulis, отредактируй пожалуйста первое сооб...   26.5.2010, 15:52
- - Litkevich Yuriy   kuzulis, такой кнопки: под первым сообщением темы...   26.5.2010, 16:06
- - kuzulis   Litkevich Yuriy, не, нету. только зеленые кнопки ...   26.5.2010, 20:17
- - dekar   Венда у меня только в виртуалке далеко. Завтра поп...   26.5.2010, 22:23
- - panbaraban   а получение инфы об устройстве (serialdeviceinfo) ...   27.5.2010, 12:18
- - kuzulis   Цитатаа получение инфы об устройстве (serialdevice...   27.5.2010, 13:11
|- - panbaraban   Цитата(kuzulis @ 27.5.2010, 15:11) Цитата...   27.5.2010, 13:21
- - kuzulis   Цитатаи что самое главное isExists=false. значит н...   27.5.2010, 15:17
|- - panbaraban   Цитата(kuzulis @ 27.5.2010, 17:17) Цитата...   27.5.2010, 17:15
|- - kuzulis   Цитата(panbaraban @ 27.5.2010, 18:15) Цит...   27.5.2010, 17:28
|- - panbaraban   Цитата(kuzulis @ 27.5.2010, 19:28) хм.. о...   28.5.2010, 6:03
- - Litkevich Yuriy   kuzulis, не цитируй целыми сообщениями - читать тя...   27.5.2010, 22:28
- - kuzulis   хм. ну должно работать по идее. а теперь посмотри...   28.5.2010, 7:39
|- - panbaraban   Цитата(kuzulis @ 28.5.2010, 9:39) хм. ну ...   30.5.2010, 20:38
- - kuzulis   В принципе все должно работать. Пробегитесь дебагг...   31.5.2010, 7:39
|- - panbaraban   Цитата(kuzulis @ 31.5.2010, 9:39) В принц...   31.5.2010, 20:13
- - panbaraban   Ещё такая бага: если порт открыть, а потом закрыть...   8.6.2010, 17:43
|- - kuzulis   Цитата(panbaraban @ 8.6.2010, 18:43) Ещё ...   8.6.2010, 19:16
|- - panbaraban   Цитата(kuzulis @ 8.6.2010, 21:16) этот ба...   8.6.2010, 20:28
- - panbaraban   Нет, та же ерунда, причем выборочно. На одном порт...   9.6.2010, 6:44
- - kuzulis   ЦитатаНет, та же ерунда, причем выборочно. На одно...   9.6.2010, 7:20
- - panbaraban   Да, качал SVN, ревизия 132 кажется, конец мая. ...   9.6.2010, 7:54
- - kuzulis   Хм... Вот я сделал пример, который открывает и зак...   9.6.2010, 12:36
- - panbaraban   Скомпилил   9.6.2010, 13:52
- - kuzulis   а добавте в : bool NativeSerialEnginePrivate:...   9.6.2010, 14:04
- - panbaraban   closeResult=true   9.6.2010, 14:25
- - kuzulis   Ну значит какой-то касяк: с ОС или самим железом (...   9.6.2010, 14:40
- - panbaraban   печально, а QextSerialPort корректно работает.   9.6.2010, 15:37
- - kuzulis   Да.. Странно всё это. Можно попробовать перед зак...   9.6.2010, 15:46
- - panbaraban   Помогло!!! добавляем ::CancelIo(this-...   10.6.2010, 6:28
- - kuzulis   Итак, я обновил на fireforge.net SVN с учетом посл...   17.6.2010, 8:38
- - juvf   не заработал qserialdevice месячной давности. Библ...   17.6.2010, 8:59
- - Litkevich Yuriy   Цитата(Гость_juvf_* @ 17.6.2010, 12:59) q...   17.6.2010, 9:24
|- - Гость   Цитата(Litkevich Yuriy @ 17.6.2010, 9:24)...   17.6.2010, 10:31
- - kuzulis   Цитатаkuzulis, перекодируй файлы Ок. Этот долбанн...   17.6.2010, 10:15
- - kuzulis   ЦитатаВ общем ни чего не перекодировал, просто отк...   17.6.2010, 10:48
- - Гость   Цитата(kuzulis @ 17.6.2010, 10:48) Понятн...   17.6.2010, 11:07
- - kuzulis   Цитатав Windows XP в шеле (cmd.exe). с помощью qt4...   17.6.2010, 11:26
5 страниц V   1 2 3 > » 


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 28.3.2024, 13:20