Russian Qt Forum

Qt => Общие вопросы => Тема начата: Kei от Апрель 13, 2010, 07:10



Название: Читать файл(устройство) не блокируя его
Отправлено: Kei от Апрель 13, 2010, 07:10
Бесконечным циклом читаю строки из /dev/ttyUSB2 и вывожу на экран.
Но после запуска моей программы, получить доступ для чтения к этому устройству уже никто не может.

(Пытаюсь запустить pppd, сделать cat /dev/ttyUSB2, безрезультатно. И только после закрытия моей проги все начинает работать.)

Открываю файл так.
 if (this->fDeviceRead.open(QIODevice::ReadOnly | QIODevice::Text)) {
....
}


Кстати, для записи в устройство, открываю тот же /dev/ttyUSB2 снова, но уже только на запись WriteOnly (Правильно ли так делать?)
В итоге, другие программы могут писать, но не могут ничего читать.

Как правильно организовать взаимодействие с устройством?


Название: Re: Читать файл(устройство) не блокируя его
Отправлено: kuzulis от Апрель 13, 2010, 07:31
как реализован
Цитировать
fDeviceRead
?

Цитировать
Но после запуска моей программы, получить доступ для чтения к этому устройству уже никто не может.
всё зависит от того как открывается у-во,  т.е. от опций системного вызова open() и ioctrl(),
т.е. в "ексклюзив" или "шаред" моде :)

Цитировать
Кстати, для записи в устройство, открываю тот же /dev/ttyUSB2 снова, но уже только на запись WriteOnly (Правильно ли так делать?)
эмм.. непонятно зачем

Цитировать
В итоге, другие программы могут писать, но не могут ничего читать.
эммм... так вам нужно, чтобы ваш ttyUSB2 могли использовать несколько приложений? или что вы вообще хотите сделать?

Цитировать
Как правильно организовать взаимодействие с устройством?
зависит от ситуации... какая у вас цель?









Название: Re: Читать файл(устройство) не блокируя его
Отправлено: Kei от Апрель 13, 2010, 08:14
Цитировать
как реализован
fDeviceRead
?
QFile fDeviceRead;

Цитировать
эммм... так вам нужно, чтобы ваш ttyUSB2 могли использовать несколько приложений? или что вы вообще хотите сделать?
Цитировать
зависит от ситуации... какая у вас цель?
Да.
Мое приложение построчно выводит все ответы устройства(Модема) на экран, а также может отправлять ему команды.
Но когда я пытаюсь использовать pppd или wvdial они не могут получить ответ от /dev/ttyUSB2 т.к. он занят моей программой.

Цитировать
всё зависит от того как открывается у-во,  т.е. от опций системного вызова open() и ioctrl(),
т.е. в "ексклюзив" или "шаред" моде
Открытие в шаред мод это решение моей задачи? Как это можно реализовать в QT? (Так, чтобы я мог писать в него и читать, и при этом он был доступен другим приложениям)


Название: Re: Читать файл(устройство) не блокируя его
Отправлено: kuzulis от Апрель 13, 2010, 08:40
Цитировать
QFile fDeviceRead;
уффф... 
посмотрите в сторону :
QextSerialPort -> http://code.google.com/p/qextserialport/
или
QSerialDevice -> http://fireforge.net/projects/qserialdevice/

Цитировать
Мое приложение построчно выводит все ответы устройства(Модема) на экран, а также может отправлять ему команды.
откройте ваш модем как ReadWrite и сможете из вашего приложения как читать из него так и писать в него всё что захотите.

Цитировать
Но когда я пытаюсь использовать pppd или wvdial они не могут получить ответ от /dev/ttyUSB2 т.к. он занят моей программой.
уффф...
1. а вы уверены, что сможете обеспечить "правильное" использование ресурса (/dev/ttyUSB2) несколькими приложениями?
2. зачем вам одновременно использовать вашу программу и pppd/wvdial ?
тем более, что pppd/wvdial монопольно использует ваш модем, т.е. если вы открыли ваш модем с помощью pppd/wvdial - то после этого, если попытаетесь открыть модем вашим приложением, то оно  "не сможет/не должно" получить доступ к модему, т.к. он уже занят pppd/wvdial. (хотя нужно проверить - могу ошибаться)
3. если вы хотите (все-таки) чтобы ваш модем использовался в "шаред моде" - то посмотрите в сторону QextSerialPort, т.к. эта библиотека не блокирует и не проверяет занятость последовательного устройства в *.nix
4. если вы хотите кроссплатформенное решение (т.е. не только в *.nix) - то у вас может не выйти, т.к. в винде у вас может не "пройти" фокус с "шаред моде".

Цитировать
Открытие в шаред мод это решение моей задачи? Как это можно реализовать в QT? (Так, чтобы я мог писать в него и читать, и при этом он был доступен другим приложениям)
1. Посмотрите в сторону QextSerialPort
2. если не получится - то что-то типо этого:
http://www.easysw.com/~mike/serial/serial.html
вам в помощь :)




Название: Re: Читать файл(устройство) не блокируя его
Отправлено: Kei от Апрель 16, 2010, 21:05
Цитировать
2. зачем вам одновременно использовать вашу программу и pppd/wvdial ?
Я хочу работать с прочими функциями модема, и при этом быть в сети. Например, хочу периодически выводить уровень сигнала модема.
В винде, программа которая идет с модемом подключается к сети, но при этом может показывать уровень сигнала, сеть и т.п.
Может это не реально в линуксе?

p.s. так и не понял как скачать http://code.google.com/p/qextserialport/ :(
TortoiseHg скачивает в какой-то непонятной кодирвоке.
UPD: Скачал через CMD