Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSerialDevice - Библиотека для работы с COM-портами
Форум на CrossPlatform.RU > Административный > Crossplatform.ru - все о нем > Обсуждение исходников с сайта
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
kuzulis
Доброго времени суток!

Я создал библиотеку для работы с последовательными портами, которая является альтернативой QextSerialPort и хочу выложить её на этот ресурс..
На главной странице этого сайта написано, что если я хочу чем-то поделиться - то я должен в соответствующем разделе форума об этом заявить.. так вот вопрос: ЧТО это за раздел? И как мне это сделать?
Litkevich Yuriy
Сайт:
В боковой панели сайта (http://www.crossplatform.ru/) выбери "Создать материал" -> "Исходники", заполни необходимые.
Если не видишь пункта создать материал, то залогинься на сайте.

Форум:
Административный -> Crossplatform.ru - все о нем -> Обсуждение исходников с сайта
ViGOur
На сайте не нужно логинится, достаточно быть залогиненым на форуме и после этого зайти на сайт.
kuzulis
Всем спасибо! Отправил запрос.. ждемс :)
Litkevich Yuriy
Цитата(kuzulis @ 2.7.2009, 13:38) *
Отправил запрос..
какой запрос?
kuzulis
ну типа с описанием либы , и там сказали что ответ ждать нужно 72 часа :)

ой! я ошибся.. я на fireforge.net отправил ... 8)

ЗЫ: заработался совсем
kuzulis
Всё, теперь и на crossplatform.ru я послал запрос :)
Litkevich Yuriy
Цитата(kuzulis @ 3.7.2009, 11:30) *
послал запрос
у нас нет ни каких запросов, просто пишешь и всё.

См. ещё моё сообщение №2, создай в указаном подфоруме тему. А на сайте сделай ссылку ( в поле "Обсудить на форуме:") на тему в форуме.
Тогда будешь иметь возможность обратной связи с пользователями.

(Посмотри как делает IMPOMEZIA, для своейго чата IMPOMEZIA Simple Chat)


П.С. Новости на сайте ты аж 2 сделал
ViGOur
kuzulis, добавил ссылки скачать и обсудить на форуме...
CrazyDeath
kuzulis доброго дня суток.
увидел сегодня сообщение об альтернативе QextSerialPort
Просмотрев ваши исходники ничего нового, я не увидел, более того
называть вашу библиотеку альтернативой QextSerialPort
не совсем корректно, структура классов и исходников
одинаковая как и у библиотеке QextSerialPort.
Намного логичнее было бы оформить ваш труд ввиде
дополнительного класса для QextSerialPort.
Также вы пишете что

Цитата
QSerialDevice - реализует:
- асинхронный режим работы с последовательным портом


QextSerialPort вполне спокойно справляется с асинхронным режимом работы.
Так же я абсолютно не понял преимущества QSerialDevice перед QextSerialPort.
Litkevich Yuriy
Цитата(CrazyDeath @ 10.7.2009, 5:37) *
QextSerialPort вполне спокойно справляется с асинхронным режимом работы.
в версии qextserialport-1.1 асинхрон был написан только для виндовоза, да и тот закоментирован, как сейчас даже не знаю.
А QSerialDevice, так и не попробовал.
CrazyDeath
Наверно я делаю, что то не правильно но у меня работает асинхронный режим.
правда библиотека qextserialport из CVS.
CVS
kuzulis
Цитата
увидел сегодня сообщение об альтернативе QextSerialPort
Просмотрев ваши исходники ничего нового, я не увидел, более того
называть вашу библиотеку альтернативой QextSerialPort
не совсем корректно, структура классов и исходников
одинаковая как и у библиотеке QextSerialPort.

Ну дык делал я её в основном брав исходники QextSerialPort . И я сделал максимально аналогичнее :)
И кстати я в cvs не смотрел, а делал на основе qextserialport-1.1.tar.gz

Цитата
Намного логичнее было бы оформить ваш труд ввиде
дополнительного класса для QextSerialPort.

Неа, не согласен.

Цитата
QextSerialPort вполне спокойно справляется с асинхронным режимом работы.

ну если считать, что задействуется структура OVERLAPPED - то можно согласится

Цитата
Так же я абсолютно не понял преимущества QSerialDevice перед QextSerialPort.

Для QextSerialPort
1. теряет байты при приеме - это раз (у меня по крайней мере)
2. не реализован метод ожидания прихода байтов
3. не полностью реализован в принципе асинхронный режим.. т.к. под асинхронным режимом подразумевается еще , помимо OVERLAPPED, и то, что операция чтения должна возвращатся немедленно!
4. И вообще не полностью используется функционал ядра при работе с последовательным устройством.

И я никого не заставляю использовать QSerialDevice, каждый выбирает сам ! Я просто иногда советую сравнить.

ЗЫ: я могу и еще накопать минусов QextSerialPort :) По крайней мере для МЕНЯ в моих проектах - QextSerialPort не нужен!
CrazyDeath
Цитата
1. теряет байты при приеме - это раз (у меня по крайней мере)

У меня на работе, тестирование QextSerialPort проводилось на довольно разном оборудывании от простых
встраиваемых компов до экзотических moxa плат
потерь или ошибок выше нормы не наблюдалось(1 -2 байта за 48 часов),
хотя скоро буду реализовывать протокол обмена
с тактом 5 милисекунд вот тогда все точно станет ясно.
Цитата
2. не реализован метод ожидания прихода байтов
3. не полностью реализован в принципе асинхронный режим.. т.к. под асинхронным режимом подразумевается еще , помимо OVERLAPPED, и то, что операция чтения должна возвращатся немедленно!

Посмотри на этот костыль для QextSerialPort Qt_comport, там все работает через события.
Цитата
не полностью используется функционал ядра

можно поподробнее, какой именно функционал.
kuzulis
Цитата
У меня на работе, тестирование QextSerialPort проводилось на довольно разном оборудывании от простых
встраиваемых компов до экзотических moxa плат
потерь или ошибок выше нормы не наблюдалось(1 -2 байта за 48 часов),
хотя скоро буду реализовывать протокол обмена
с тактом 5 милисекунд вот тогда все точно станет ясно.

А у меня в библиотеке не теряет ничего!
Ты в QextSerialPort попробуй прочитай 1000 байт - и увидиш всю прелесть ;)

Цитата
Посмотри на этот костыль для QextSerialPort Qt_comport, там все работает через события.

Я видел уже это... Считаю что реализовано действительно через "костыль":
/*QReceiveThread*/
void ReceiveThread::run()
{
    int count;
    forever
    {
        msleep(1);
        mutex.lock();
        count = comport->bytesAvailable();
        mutex.unlock();
        if (0 < count)
        {
            emit newDataInPortThread(count);
            QTime timedb;
            qDebug()<<"thread count= "<<count<<"time= "<<"\t"<<timedb.currentTime().second()<<" "<<timedb.currentTime().msec();
        }
    }
}


и сравни, как сделано у меня :) !

Цитата
можно поподробнее, какой именно функционал.

имеется ввиду для Win32 использование объектов ядра типа WaitFor и т.п. , а для *.nix select и т.п. .. что более правильно чем использования пококов и т.п. для ожидания прихода байтов и т.п.

кроме того у меня сделаны проверни возвращаемых значений всех функций, чтобы можно было легко диагностировать где случился касяк!
т.к. я создавал библиотеку для более "продвинутого" использования для разнообразных целей - а не так как авторы QextSerialPort и Qt_comport типа чтобы показать что типа что-то работает и то.. работает ли? :)

ИМХО!
CrazyDeath
Цитата
попробуй прочитай 1000 байт

ты не понял у меня идут потери 1 байт на 4gb,
то есть около 24 часов работы на скоросте 960kb(на moxa плате)
и не повине библиотеки а из-за аппаратуры,
но это норма, всегда есть ошибки.
В usb или tcp/ip на уровне протокола
идет автоматическая коррекция ошибок.
в uart этого нет, по этому люди и удивляются,
а потом реализовывают нормальный протокол обмена.


Цитата
while (1) {
if (MyDevice->waitForReadyRead(rrto)) {
ba.clear();
ba=MyDevice->read(len);
qDebug() << "Readed is : " << ba.size() << " bytes";
cout << "Rx : ";
printDataToHex(ba);
}
else {
qDebug() << "Timeout read data in time : " << QTime::currentTime();
}

Ну под это, тоже нужно создовать поток.
waitForReadyRead штука конечно хорошая,
но посути делает тоже самое что костыль Qt_comport,
только на уровне ядра системы, что намного лучше,
и теперь возвращаемся с чего начали

Цитата
Намного логичнее было бы оформить ваш труд ввиде
дополнительного класса для QextSerialPort.


Цитата
а не так как авторы QextSerialPort и Qt_comport типа чтобы показать что типа что-то работает и то.. работает ли?

Поверь мне на слово, есть очень много проектов которые используют QextSerialPort, и у них все работает.
BRE
Цитата(kuzulis @ 14.7.2009, 8:54) *
имеется ввиду для Win32 использование объектов ядра типа WaitFor и т.п. , а для *.nix select и т.п. .. что более правильно чем использования пококов и т.п. для ожидания прихода байтов и т.п.

Не знаю как в венде, а под линуксом для это использовал QSocketNotifier. Это встроенный в Qt механизм для select. Посмотри, может под линукс и Mac проще сделать через него.
kuzulis
Тихо и незаметно вышла в свет новая версия замечательной кросс платформенной библиотеки для работы с последовательными портами (устройствами) QSerialDevice v. 0.1.0

В этой версии очень много изменений в отличии от версии 0.0.3, можно сказать, что версия 0.1.0 написана практически с нуля!

Документацию по библиотеке можно найти в самом архиве.

Скачать можно тут:
http://fireforge.net/projects/qserialdevice/
и
http://qt-apps.org/content/show.php?content=112039
oldcolony
Библиотека хорошая,мне подошла лучше,чем qextserial, но хотелось бы ,чтобы автор разобрался с такой багой. Для проверки переделал пример qespta из qetxserial с применением этой либы. В нем экземпляр порта идет как поле обьекта. Так вот создание и инициализация в конструкторе идет- а вот дальше- любое обращение, и вылет. Чего-то в конструкторе AbstractSerial напутано. Если вместо члена класса обьявить порт как глобальную переменную- все окей.
Elfinit
Что-то не вижу я на главной "Создать материал". Хотел поделиться простой-примитивной тулзой для просмотра exif-метаданных изображения.
ViGOur
Я пока отключил общую авторизацию сайта и форума, ибо глючит она.
Немного подождете и я перенесу все на новую версию сайта и все будет ок. :)
rcdimon
Наблюдаются проблемы при работе с виртуальными COM портами. Что очень плохо для отладки, ведь это часто с компа, где COM портов нет. Я например работаю на ноутбуке. Я создал виртуальный нуль модемный кабель, на одной стороне у меня висит гипертерминал, на другой подключается моя программа. Обмен данными по нуль-модемному кабелю контролируется еще одной софтиной. И это очень удобно для отладки. К сожалению Ваша библиотека не может открыть такой порт, хотя обычный WinAPI работает с ним без проблем, проверено. В чем может быть дело? Может надо просто какие настройки исправить или пару строчек кода? :-) Было бы замечательно
rcdimon
Установил другую программу для создания виртуальных COM портов и все заработало ) Извиняюсь за беспокойство )
kuzulis
Доброго времени.

Скажите, а что нужно сделать, чтобы обновить информацию о библиотеке QSerialDevice ? т.к. скоро выйдет новая версия и я хочу, чтобы тут (в исходниках или новостях) это выло видно! :)
ViGOur
1. Заходишь в тему: QSerialDevice и так как ты автор, то редактируешь ее.
2. Добавляешь на форум описание...
kuzulis
Итак, анонсирую релиз: QSerialDevice v 0.2.0

Изменений много, писать нет смысла, поэтому предоставляю краткую вырезку аннотации:

QSerialDevice - это кросс-платформенная библиотека для работы с последовательными устройствами, которая использует фрэймворк Qt4 (см. http://qt.nokia.com/).

Требования:

OC : Win2K/WinXP/WinVista/Win7 или любой дистрибутив GNU/Linux
Qt4 : >= 4.5.0
Процессор : любой (который поддерживается Qt4)
Компилятор : любой (который поддерживается Qt4)

Заметки:

В силу того, что Я (автор) не имею возможности протестировать библиотеку на всех возможных операционных системах, всех компиляторах, процессорах и т.п. - то возможно что библиотека в некоторых случаях не будет работать :( .
Библиотека тестировалась только на:
OC : Windows XP Pro Sp3 (win32) и GNU ArchLinux x86_64
Qt4 : от 4.5.3 до 4.6.2
Процессор : AMD Athlon 4400+ 64x2 Socket AM2
Компилятор : gcc, MinGw
Теоретически (с небольшими исправлениями исходного кода) можно добиться того, чтобы библиотека работала и на других платформах.

Библиотека QSerialDevice содержит следующие классы:
  • AbstractSerial
  • SerialDeviceWatcher
  • SerialDeviceInfo


AbstractSerial

Класс AbstractSerial - предоставляет самодостаточный набор методов и свойств для легкой и простой работы с последовательными устройствами (последовательными портами) вашего PC (или другого устройства).
Класс поддерживает следующие возможности:
  • устанавливать скорость обмена данными
  • устанавливать количество бит данных
  • устанавливать количество стоп-бит
  • устанавливать режимы контроля четности
  • устанавливать режимы контроля потока
  • устанавливать таймаут ожидания символа
  • записывать данные в последовательное устройство
  • читать данные из последовательного устройства
  • управлять такими линиями порта как: DTR, RTS
  • читать состояния таких линий порта как: CTS, DSR, DCD, RI, RTS, DTR, ST, SR
  • автоматически получать нотификацию при:
    • приеме хотя бы одного байта (символа) в входной буфер
    • записи последнего байта в выходной буфер
    • изменении состояния последовательного устройства (при ошибках и т.п.)
  • получать текущее значение количества байт в приемном буфере
  • устанавливать таймаут ожидания прихода хотя бы одного байта (символа) в входной буфер

(более подробно см. описание AbstractSerial и исходный код)

SerialDeviceWatcher

Класс SerialDeviceWatcher - является вспомогательным классом для мониторинга последовательных устройств.
Класс предоставляет следующие возможности:
  • получать список имен всех последовательных устройств, которые имеются в системе
  • автоматически получать нотификацию при добавлении/удалении какого либо последовательного устройства

(более подробно см. описание SerialDeviceWatcher и исходный код)

SerialDeviceInfo

Класс SerialDeviceInfo - также является вспомогательным классом для получения информации о последовательном устройстве.
Класс предоставляет следующие возможности:
  • получать "дружественное" имя интересующего нас последовательного устройства
  • получать "описание" интересующего нас последовательного устройства
  • получать VID и PID интересующего нас последовательного устройства (experimental)
  • проверять интересующее нас последовательное устройство на существование
  • проверять интересующее нас последовательное устройство на занятость (блокировку)
  • и т.д.

(более подробно см. описание SerialDeviceInfo и исходный код)

Скачать релиз можно с домашней страницы проекта: http://fireforge.net/frs/?group_id=199
Скачать последние срезы SVN: http://fireforge.net/snapshots.php?group_id=199
mezmay
попробовал...

Сначала написал прогу по получению данных c GPSприемника по COM порту на QextSerialPort, упрощенный фрагмент:
// QextSerialPort
QextSerialPort *port = new QextSerialPort("COM1");
port->setBaudRate(BAUD4800);
port->setFlowControl(FLOW_OFF);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setParity(PAR_NONE);
if(port->open(QIODevice::ReadOnly))
QByteArray ba = port->read(100);

получает данные правильно, но иногда очень сильно тормозит на чтении

потом на QSerialDevice, вроде все тоже самое:
// QSerialDevice
AbstractSerial *port = new AbstractSerial();
port->setDeviceName("COM1");
port->setBaudRate(AbstractSerial::BaudRate4800);
port->setFlowControl(AbstractSerial::FlowControlOff);
port->setDataBits(AbstractSerial::DataBits8);
port->setStopBits(AbstractSerial::StopBits1);
port->setParity(AbstractSerial::ParityNone);
if(port->open(QIODevice::ReadOnly | QIODevice::Unbuffered))
QByteArray ba = port->read(100);

- получает некорректные данные... почему? Даже если QIODevice::Unbuffered убрать
Litkevich Yuriy
mezmay, не было ни какой нужды цитировать целое сообщение.
См. справку: Справка по кнопкам и тэгам форума
kuzulis
mezmay,

Задание:
прочитать внимательнее документацию QSerialDevice и посмотреть внимательнее примеры QSerialDevice и найти отличия c тем что у вас и с тем что там
dekar
Хм. тут проблемка выползла. Он как-то не особо охотно разблокирует порты при ->close();

Linux: NativeSerialEnginePrivate::nativeOpen(QIODevice::OpenMode mode)
-> function: lockDevice(lockFileName) returned: false. Error!

Linux: NativeSerialEnginePrivate::nativeClose()
-> fd == -1. Error!

После чего, конечно же, повторно не открывает, но и не работает. Руками убираю lock-файл. Есть мысль, где копать?
kuzulis
Берите последний срез SVN, там эта проблема вроде решена... Да и поотключал я в этом срезе вывод отладки, чтоб не мозолил глаза. Проверьте.
Гость
Цитата(kuzulis @ 3.4.2010, 22:00) *
Берите последний срез SVN, там эта проблема вроде решена... Да и поотключал я в этом срезе вывод отладки, чтоб не мозолил глаза. Проверьте.

Увы. SVN просто не собирается.
Раскрывающийся текст
/usr/lib64/qt/bin/moc -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/lib64/qt/mkspecs/linux-g++-64 -I. -I/usr/lib64/qt/include/QtCore -I/usr/lib64/qt/include -Iqserialdevice -Iqserialdeviceinfo -Iqserialdevicewatcher -Ibuild/lib/qintegratedserialdevice/moc qserialdevice/abstractserial.h -o build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp
g++ -c -m64 -pipe -O2 -fPIC -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/lib64/qt/mkspecs/linux-g++-64 -I. -I/usr/lib64/qt/include/QtCore -I/usr/lib64/qt/include -Iqserialdevice -Iqserialdeviceinfo -Iqserialdevicewatcher -Ibuild/lib/qintegratedserialdevice/moc -o build/lib/qintegratedserialdevice/obj/moc_abstractserial.o build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:12:2: error: #error "The header file 'abstractserial.h' doesn't include <QObject>."
In file included from build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:10:
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:43: error: expected class-name before '{' token
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:44: error: 'Q_OBJECT' does not name a type
In file included from build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:10:
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:220: error: expected ')' before '*' token
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:307: error: 'd_func' is not a type
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:307: error: ISO C++ forbids declaration of 'Q_PRIVATE_SLOT' with no type
build/lib/qintegratedserialdevice/moc/../../../../qserialdevice/abstractserial.h:309: error: expected ';' before 'void'
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:49: error: 'QMetaObject' does not name a type
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:54: error: expected initializer before '*' token
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:59: error: no 'void* AbstractSerial::qt_metacast(const char*)' member function declared in class 'AbstractSerial'
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:67: error: 'int AbstractSerial::qt_metacall' is not a static member of 'class AbstractSerial'
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:67: error: 'QMetaObject' has not been declared
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:67: error: expected primary-expression before 'int'
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:67: error: expected primary-expression before 'void'
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:67: error: initializer expression list treated as compound expression
build/lib/qintegratedserialdevice/moc/moc_abstractserial.cpp:68: error: expected ',' or ';' before '{' token
make: *** [build/lib/qintegratedserialdevice/obj/moc_abstractserial.o] Error 1
kuzulis
Цитата
Увы. SVN просто не собирается.

Упс... Вы плавы.

1. Скачайте тут: http://fireforge.net/scm/viewvc.php/trunk/...ce&view=log

файл abstractserial.h ревизии 98!!!
(Он отличается только от этого же файла (ревизии 99) тем, что почему-то в более новом файле (ревизия 99) "слетела" кодировка с UTF-8 на ANSII! QtCreator меня замучал - он виноват :) )

2. Замените в вашем снапшоте abstractserial.h 99 ревизии на abstractserial.h 98 ревизии +
в файле abstractserial.h 98 ревизии добавьте:
...
#include <QtCore/QObject>
...
dekar
Ура. SVN я собрал. Првада, проблема всё равнон не решилась.

Закрываю порт. Все дебаги включил.
Цитата
Status: "Closed::Device is successfully closed. OK!" QDateTime("Mon Apr 5 06:07:58 2010")

Думаю - руль!

Открываю опять:
Цитата
AbstractSerial::setDeviceName(const QString &deviceName)
-> forbidden to set the name for the open device. Warning!
Status: "Device is already open. Error!" QDateTime("Mon Apr 5 06:08:04 2010")
ERROR: Serial device "/dev/ttyUSB0" can not be opened!
kuzulis
Лана, вечером доковыряю :)
kuzulis
Вроде исправил.. Пробуйте!
dekar
Теперь мне надо до работы доползти :)
А это будет не раньше четверга. Качать SVN?
kuzulis
Цитата
Качать SVN?

Да.
dekar
Увы. Опять тот же симптом.
Гость
Нет, огромное спасибо! Всё заработало отлично. Забыл просто проект пересобрать.
dekar
Решил всё-таки зарегистрироваться.

Итак
1) serialdeviceinfo.h обёрнут в #ifndef SERIALDEVICEWATCHER_H, что сильно мешает в одном проекте использовать оба класса.
2) Проблемы с lock-файлами остались. Просто теперь класс кладёт на них, что не совсем есть гут.
3) В качестве фичи - советую объединить watcher и info в один класс. Плохо себе представляю watcher без info для использования.f

И ещё тут придумал фичу -
QByteArray readTimeout (int length, int msec)
читает length байт с порта, и их возвращает. Также возвращает те байты, которые успела прочитать за время msec. Удобно для опроса всех портов на предмет наличия определённого ответа.

Litkevich Yuriy
Цитата(dekar @ 14.4.2010, 21:21) *
QByteArray readTimeout (int length, int msec)
читает length байт с порта, и их возвращает. Также возвращает те байты, которые успела прочитать за время msec. Удобно для опроса всех портов на предмет наличия определённого ответа.
название функции совершенно не ассоциируется с описанием.
Если откинуть аргументы и оставить только имя, то эта функция всего лишь читает величину таймаута, но почему-то возвращает её в неуклюжем виде.
Надо имя пересмотреть
kuzulis
Цитата
1) serialdeviceinfo.h обёрнут в #ifndef SERIALDEVICEWATCHER_H, что сильно мешает в одном проекте использовать оба класса.

исправил

Цитата
2) Проблемы с lock-файлами остались. Просто теперь класс кладёт на них, что не совсем есть гут.

изменил

Цитата
3) В качестве фичи - советую объединить watcher и info в один класс. Плохо себе представляю watcher без info для использования.f

нет.. не объединю...

Цитата
И ещё тут придумал фичу -
QByteArray readTimeout (int length, int msec)
читает length байт с порта, и их возвращает. Также возвращает те байты, которые успела прочитать за время msec. Удобно для опроса всех портов на предмет наличия определённого ответа.

пока не вижу в этом сакрального смысла
dekar
Вот и новая проблема. Не знаю, насколько она решаема, но...
Дело в том, что watcher не перехватывает события отключения порта, когда он... открыт. И я понимаю почему, он и из системы не пропадает. Собственно вопрос: можно ли с этим чего-либо сделать. И есть ли такая же проблема в венде?
Litkevich Yuriy
Цитата(dekar @ 14.5.2010, 4:41) *
не перехватывает события отключения порта
хорошо, если он в системе не пропадает, то как ты определяешь, что он отключен?
dekar
Цитата(Litkevich Yuriy @ 14.5.2010, 10:25) *
хорошо, если он в системе не пропадает, то как ты определяешь, что он отключен?

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

А может быть есть информация о том, есть ли такая же проблема в венде?
Litkevich Yuriy
я использую QxtSerialPort в виндовозе, для отлова отключения преобразователя USB-RS232 при открытом порте всегда проверяю кол-во принятых байт. Драйвер FTDI'ного преобразователя всегда отрицательное значение возвращает.
dekar
хм. Удачно. Только проблемка - у меня не FTDI, а програмный UART на меге 8.
usb 2-1: Product: USB-232
usb 2-1: Manufacturer: www.recursion.jp
Буду глядеть, что там с кол-вом принятых байт.
Litkevich Yuriy
ну а на ПК у тебя стандартный (аппаратный) COM-порт?
dekar
Цитата(Litkevich Yuriy @ 14.5.2010, 20:34) *
ну а на ПК у тебя стандартный (аппаратный) COM-порт?

Нет, конечно. Мегу подцепил к УСБ, а она уже, в частности, как УСБ -> UART ведёт себя. Очень не хотел делать устройство, которому нужны были дрова. Вот и прикидывается девайс "шнурком" :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.