QSerialDevice - Библиотека для работы с COM-портами |
Здравствуйте, гость ( Вход | Регистрация )
QSerialDevice - Библиотека для работы с COM-портами |
kuzulis |
7.6.2011, 19:39
Сообщение
#261
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Спасибо! Исправил.
|
|
|
Алексей1153 |
7.6.2011, 19:49
Сообщение
#262
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а так красивше
|
|
|
universeroot |
13.6.2011, 20:06
Сообщение
#263
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 13.6.2011 Пользователь №: 2740 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
kuzulis |
13.6.2011, 22:17
Сообщение
#264
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
О, зачетненько! Только если библиотека линкуется статически (а по умолчанию она статически линкуется), то нет нужды её куда-то копировать (а также копировать заголовки). Также можно было её подключать "напрямую" к проекту чтобы не заморачиваться с копированием (см. примеры в /test/guiapp). Сообщение отредактировал kuzulis - 13.6.2011, 22:18 |
|
|
grio |
1.7.2011, 13:40
Сообщение
#265
|
Студент Группа: Участник Сообщений: 87 Регистрация: 11.11.2009 Пользователь №: 1221 Спасибо сказали: 6 раз(а) Репутация: 0 |
Объясните пожалуйста, как правильно инсталлировать
библиотеку QSerialDevice и прикрутить ее к проекту в Линуксе. |
|
|
kuzulis |
1.7.2011, 15:47
Сообщение
#266
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Объясните пожалуйста, как правильно инсталлировать библиотеку QSerialDevice и прикрутить ее к проекту в Линуксе. А по умолчанию не нужно её никуда инсталлировать. Она является статической и линкуется с приложением, т.е. её код встраивается в код приложения. Можете использовать её классы напрямую, как в примере /test/quiapp Сообщение отредактировал kuzulis - 1.7.2011, 15:48 |
|
|
grio |
1.7.2011, 16:33
Сообщение
#267
|
Студент Группа: Участник Сообщений: 87 Регистрация: 11.11.2009 Пользователь №: 1221 Спасибо сказали: 6 раз(а) Репутация: 0 |
Объясните пожалуйста, как правильно инсталлировать библиотеку QSerialDevice и прикрутить ее к проекту в Линуксе. А по умолчанию не нужно её никуда инсталлировать. Она является статической и линкуется с приложением, т.е. её код встраивается в код приложения. Можете использовать её классы напрямую, как в примере /test/quiapp В моем случае, оказалось, что просто не хватало пакета libudev-dev. Продолжаю эксперименты, спасибо. |
|
|
shurilnik |
12.8.2011, 11:05
Сообщение
#268
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 12.8.2011 Пользователь №: 2804 Спасибо сказали: 0 раз(а) Репутация: 0 |
kuzulis, Здравствуйте. Решил попробовать использовать вашу библиотеку на embedded девайсе mini2440 под linux. Столкнулся с проблемой что serialdeviceenumenator начинает грузить проц на 100% после того как в системе появляется или исчезает (если было включено до запуска конструктора класса) ttyUSB устройство. Звук непрерывно воспроизводимый прерывается 2-3 раза в секунду, независимо уже после этого появилось еще устройство или исчезло. Т.е. какой-то метод класса в периодом условно в миллисекунд 300 что-то делает что серьезно грузит процессор, а в остальное время приоритет операции пониже, но все равно грузит. Подскажите пожалуйста куда копать.
Если подключится straceом к процессу то после подключения устройства начинают с большой скорость проскакивать вот такие операции: readlink("/sys/devices/virtual/tty/tty42/subsystem", "../../../../class/tty"..., 1024) = 21 lstat64("/dev/.udev/db/tty:tty42", {st_mode=S_IFLNK|0777, st_size=15, ...}) = 0 readlink("/dev/.udev/db/tty:tty42", "tty42 char/4:42"..., 1024) = 15 readlink("/sys/devices/virtual/tty/tty43", 0xbed2c680, 1024) = -1 EINVAL (Invalid argument) stat64("/sys/devices/virtual/tty/tty43/uevent", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 open("/sys/devices/virtual/tty/tty43/uevent", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 21 fstat64(21, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001f000 read(21, "MAJOR=4\nMINOR=43\nDEVNAME=tty43\n", 4096) = 31 read(21, "", 4096) = 0 close(21) = 0 munmap(0x4001f000, 4096) = 0 readlink("/sys/devices/virtual/tty/tty43/subsystem", "../../../../class/tty"..., 1024) = 21 lstat64("/dev/.udev/db/tty:tty43", {st_mode=S_IFLNK|0777, st_size=15, ...}) = 0 readlink("/dev/.udev/db/tty:tty43", "tty43 char/4:43"..., 1024) = 15 readlink("/sys/devices/virtual/tty/tty44", 0xbed2c680, 1024)usb 1-1.2: USB disconnect, address 3 ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0 ftdi_sio 1-1.2:1.0: device disconnected = -1 EINVAL (Invalid argument) stat64("/sys/devices/virtual/tty/tty44/uevent", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 open("/sys/devices/virtual/tty/tty44/uevent", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 21 fstat64(21, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001f000 read(21, "MAJOR=4\nMINOR=44\nDEVNAME=tty44\n", 4096) = 31 read(21, "", 4096) = 0 close(21) = 0 munmap(0x4001f000, 4096) = 0 readlink("/sys/devices/virtual/tty/tty44/subsystem", "../../../../class/tty"..., 1024) = 21 lstat64("/dev/.udev/db/tty:tty44", {st_mode=S_IFLNK|0777, st_size=15, ...}) = 0 readlink("/dev/.udev/db/tty:tty44", "tty44 char/4:44"..., 1024) = 15 readlink("/sys/devices/virtual/tty/tty45", 0xbed2c680, 1024) = -1 EINVAL (Invalid argument) stat64("/sys/devices/virtual/tty/tty45/uevent", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 open("/sys/devices/virtual/tty/tty45/uevent", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 21 fstat64(21, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001f000 read(21, "MAJOR=4\nMINOR=45\nDEVNAME=tty45\n", 4096) = 31 read(21, "", 4096) = 0 close(21) = 0 munmap(0x4001f000, 4096) = 0 причем номер и тип tty постоянно меняется... Или может это нормальное поведение ? Заранее спасибо. |
|
|
kuzulis |
12.8.2011, 11:49
Сообщение
#269
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
2 shurilnik,
я даже и не знаю что посоветовать. Что первое приходит на ум, так это - попробуйте скачать master ветку: https://gitorious.org/qserialdevice/qserial...ce/trees/master Цитата Столкнулся с проблемой что serialdeviceenumenator начинает грузить проц на 100% после того как в системе появляется или исчезает (если было включено до запуска конструктора класса) ttyUSB устройство. Это если используется только класс SerialDeviceEnumenator (и не используется AbstractSerial) такое поведение? Или как? Иначе: Такое может быть если Вы, используя класс AbstractSerial, открыли порт и выдернули его. В этом случае QSocketNotifier будет вечно гнать евенты (почему-то такое поведение у функции select()). т.е. может быть, начинает срабатывать вечно exceptionNotifier или readNotifier (см. nativeserialnotifier_unix.cpp). Если это так - то я в курсе этой проблемы, но пока не могу найти решения, т.к. правильным решением является принудительное закрытие дескриптора выдернутого порта при возникновении такой ситуации. Но вот как отличить Exception/Read событие вызванную какой-либо другой причиной от Exception/Read события вызванной выдергиванием порта - я не знаю. PS: Если используете AbstractSerial и вам не нужны уведомления о сигналах RTS/DTR/CTS и пр. то можете в nativeserialnotifier_unix.cpp закомментировать всё что запускает поток run(), т.к. он тоже может быть причиной. Сообщение отредактировал kuzulis - 12.8.2011, 11:50 |
|
|
shurilnik |
12.8.2011, 12:40
Сообщение
#270
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 12.8.2011 Пользователь №: 2804 Спасибо сказали: 0 раз(а) Репутация: 0 |
У меня как раз мастер ветка, недельной давности правда.
Да порт сразу открывается при появлении устройства. Но проблема появляется не только при выдергивании а и при вставлении. Т.е. пока устройств нету - все тихо. Появляется устройство и начинается. На самом деле я пробовал и без открытия порта - тоже самое происходит. Я serialenumerator и использую для отслеживания что устройство выдернули, (даже с открытым портом) и соответствующий ему Abstractserial класс удаляется с закрытием порта и удалением дескриптора. По поводу, RTS/DTR/CTS попробую поправить как вы сказали. Отпишусь потом. Кстати ttylocker пришлось править как вы раньше советовали, иначе после выдергивания порт при повторном подключении не давало открыть порт.... Закоментировал обработки pid локфайла. |
|
|
Текстовая версия | Сейчас: 11.12.2024, 12:25 |