crossplatform.ru

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

14 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
lkslks
  опции профиля:
сообщение 18.10.2012, 8:40
Сообщение #1


Новичок


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

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




Репутация:   0  


При сборке получаю такое сообщение:
....
g++ -Wl,-s -o release\libSerialPort.a release/serialport.o release/serialportinfo.o release/serialport_win.o release/serialportinfo_win.o
-L".\lib" -L"c:\Qt\4.8.3\lib" -lsetupapi -ladvapi32 -lQtCore4
c:/qt/qtcreator-2.5.2/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16' collect2: ld returned 1 exit status
-------------------
Qt 4.8.3
MinGW 4.4.0
Кто может прояснить ситуацию ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 18.10.2012, 12:16
Сообщение #2


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

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

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




Репутация:   7  


Все отлично собирается. Смотри проблему у себя со своей Qt и MinGw.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iReset
  опции профиля:
сообщение 18.10.2012, 12:37
Сообщение #3


Участник
**

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

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




Репутация:   2  


Добавь в .pro-файл строки
TEMPLATE = lib
CONFIG += staticlib


Виноват, ерунду написал.

Сообщение отредактировал iReset - 18.10.2012, 12:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.10.2012, 15:21
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Аналогичная проблема.

Лог сборки:
Раскрывающийся текст
15:19:50: Выполняется сборка проекта serialport...
15:19:51: Запускается: «c:\qtsdk\desktop\qt\4.8.1\mingw\bin\qmake.exe» C:\Users\razr\Desktop\qserialdevice-qserialdevice\serialport.pro -r -spec win32-g++ "CONFIG+=release"
Reading C:/Users/razr/Desktop/qserialdevice-qserialdevice/src/src.pro [C:/Users/razr/Desktop/serialport-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK_______/src]
15:19:52: Процесс «c:\qtsdk\desktop\qt\4.8.1\mingw\bin\qmake.exe» завершился нормально.
15:19:52: Запускается: «C:\QtSDK\mingw\bin\mingw32-make.exe» 
cd src\ && C:/QtSDK/mingw/bin/mingw32-make.exe -f Makefile 
mingw32-make.exe[1]: Entering directory `C:/Users/razr/Desktop/serialport-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK_______/src'
C:/QtSDK/mingw/bin/mingw32-make.exe -f Makefile.Release
mingw32-make.exe[2]: Entering directory `C:/Users/razr/Desktop/serialport-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK_______/src'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DSERIALPORT_BUILD -DSERIALPORT_SHARED -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include" -I"..\..\qserialdevice-qserialdevice\include" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\ActiveQt" -I"release" -I"..\..\qserialdevice-qserialdevice\src" -I"." -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\mkspecs\win32-g++" -o release\serialport.o ..\..\qserialdevice-qserialdevice\src\serialport.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DSERIALPORT_BUILD -DSERIALPORT_SHARED -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include" -I"..\..\qserialdevice-qserialdevice\include" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\ActiveQt" -I"release" -I"..\..\qserialdevice-qserialdevice\src" -I"." -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\mkspecs\win32-g++" -o release\serialportinfo.o ..\..\qserialdevice-qserialdevice\src\serialportinfo.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DSERIALPORT_BUILD -DSERIALPORT_SHARED -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include" -I"..\..\qserialdevice-qserialdevice\include" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\ActiveQt" -I"release" -I"..\..\qserialdevice-qserialdevice\src" -I"." -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\mkspecs\win32-g++" -o release\serialportengine_p_win.o ..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp
In file included from ..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:45:
..\..\qserialdevice-qserialdevice\src\/serialportengine_p_win.h:17:50: error: QtCore/private/qwineventnotifier_p.h: No such file or directory
In file included from ..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:45:
..\..\qserialdevice-qserialdevice\src\/serialportengine_p_win.h:65: error: expected class-name before ',' token
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In destructor 'virtual WinSerialPortEngine::~WinSerialPortEngine()':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:140: error: 'setEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In member function 'virtual bool WinSerialPortEngine::isReadNotificationEnabled() const':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:879: error: 'isEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In member function 'virtual bool WinSerialPortEngine::isWriteNotificationEnabled() const':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:925: error: 'isEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In member function 'virtual bool WinSerialPortEngine::event(QEvent*)':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1175: error: 'QWinEventNotifier' has not been declared
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In member function 'bool WinSerialPortEngine::createEvents(bool, bool)':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1210: error: 'setHandle' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp: In member function 'void WinSerialPortEngine::setMaskAndActivateEvent()':
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1246: error: 'isEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1247: error: 'setEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1250: error: 'isEnabled' was not declared in this scope
..\..\qserialdevice-qserialdevice\src\serialportengine_p_win.cpp:1251: error: 'setEnabled' was not declared in this scope
mingw32-make.exe[2]: Leaving directory `C:/Users/razr/Desktop/serialport-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK_______/src'
mingw32-make.exe[1]: Leaving directory `C:/Users/razr/Desktop/serialport-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK_______/src'
mingw32-make.exe[2]: *** [release/serialportengine_p_win.o] Error 1
mingw32-make.exe[1]: *** [release] Error 2
mingw32-make.exe: *** [sub-src-make_default] Error 2
15:20:03: Процесс «C:\QtSDK\mingw\bin\mingw32-make.exe» завершился с кодом 2.
Возникла ошибка при сборке проекта serialport (цель: Desktop)
Во время выполнения сборки на этапе «Сборка»
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 18.10.2012, 15:56
Сообщение #5


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

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

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




Репутация:   7  


Цитата
Аналогичная проблема.


Во 1: Это не QtSerialPort а QSerialDevice.
Во 2: Не аналогичная проблема:
Цитата
..\..\qserialdevice-qserialdevice\src\/serialportengine_p_win.h:17:50: error: QtCore/private/qwineventnotifier_p.h: No such file or directory

Эта проблема уже стопитсотраз обсуждалась: нжно взять qwineventnotifier_p.h из сорцов Qt.
Гугл в помощь.
В 3: QSerialDevice больше не поддерживается, поэтому исправляйте баги сами.

Сообщение отредактировал kuzulis - 18.10.2012, 15:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.10.2012, 16:49
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Так кого лучше использовать?
QtSerialPort или QSerialDevice?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 18.10.2012, 18:42
Сообщение #7


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

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

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




Репутация:   7  


Цитата
QtSerialPort или QSerialDevice?

Почитай тут и тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 18.10.2012, 19:01
Сообщение #8


Новичок


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

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




Репутация:   0  


QSerialDevice уже не поддерживается, вместо него QtSerialPort.
Подробности и исходники здесь: http://qt-project.org/wiki/QtSerialPort
Вот рекомендуемый процесс сборки с этого сайта:

для Qt4:

mkdir serialport-build-release
cd serialport-build-release
qmake ../serialport-src/serialport.pro CONFIG+=release
make (or nmake)
cd ..
mkdir serialport-build-debug
cd serialport-build-debug
qmake ../serialport-src/serialport.pro //or can add CONFIG+=debug
make (or nmake)
cd ..

cd serialport-build-release // install release build
make install (or nmake install)
cd ..
cd serialport-build-debug // install debug build
make install (or nmake install)

При выполнении nmake появлялась ошибка с отсутствием WinMain@16, описанная в начале темы.
После изменения строки qmake ........... на
qmake ../serialport-src/serialport.pro CONFIG+=release CONFIG+=DLL ошибка исчезла.
Правда, осталась проблемка с отсутствием одного файла при компиляции примера Terminal, с этим разберусь чуть позже.
Да, библиотека собралась и нормально вызывается.
Буду тестировать дальше.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.10.2012, 19:03
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Почитал. Понял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 19.10.2012, 8:51
Сообщение #10


Новичок


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

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




Репутация:   0  


1. Проект QtSeriallPort скомпилировался после добавления CONFIG += DLL. Подозреваю, что виноваты настройки версии Qt4.8.3 (у меня).

2. Не скомпилировался пример Terminal. Выяснил, что причина в том, что не собирается файл ресурсов из terminal.qrc в файл qrc_terminal.cpp.
Пробовал подключать ресурсы в QtCreator 2.5.2. Не получается, тот же результат, даже с тестовым проектом. Решил, что у меня QtCreator неверно настроен.
Создал файл вручную командой "rcc -o qrc_terminal.cpp terminal.qrc" и подсунул куда надо, пример скомпилировался и заработал.

Есть ли у кого какие идеи по неработающим ресурсам ? Подозреваю настройки Qt4.8.3, но опыта не хватает найти причину.

PS: Ресурсы, конечно не главное в данном проекте.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 19.10.2012, 9:59
Сообщение #11


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

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

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




Репутация:   7  


@lkslks

Qt4.8.3 сам собирал или качал готовые бинарики под MinGW 4.4 отсюда?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 20.10.2012, 4:10
Сообщение #12


Новичок


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

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




Репутация:   0  


Цитата(kuzulis @ 19.10.2012, 12:59) *
@lkslks

Qt4.8.3 сам собирал или качал готовые бинарики под MinGW 4.4 отсюда?


Да, качал готовые.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 20.10.2012, 6:39
Сообщение #13


Новичок


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

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




Репутация:   0  


У кого есть идеи по неработающим ресурсам в Qt Creator 2.5.2 и Qt4.8.3 ?
Просто в проекте создаю ресурс с картинкой и программа не компилируется.
Может работа rcc.exe где-то не прописана ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 1.11.2012, 17:47
Сообщение #14





Гости








    


Цитата(lkslks @ 20.10.2012, 6:39) *
У кого есть идеи по неработающим ресурсам в Qt Creator 2.5.2 и Qt4.8.3 ?
Просто в проекте создаю ресурс с картинкой и программа не компилируется.
Может работа rcc.exe где-то не прописана ?

Цитата(lkslks @ 20.10.2012, 6:39) *
У кого есть идеи по неработающим ресурсам в Qt Creator 2.5.2 и Qt4.8.3 ?
Просто в проекте создаю ресурс с картинкой и программа не компилируется.
Может работа rcc.exe где-то не прописана ?


это бага 4.8.3
нужно добавить в pro-файл строчку
QMAKE_RCC = $$[QT_INSTALL_BINS]/rcc.exe
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 2.11.2012, 5:18
Сообщение #15


Новичок


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

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




Репутация:   0  


Да, решение верное, проверил, работает.
Но в моём случае всё оказалось проще.
Нужно в системной переменной PATH или в настройках проекта прописать путь c:\Qt\4.8.3.
Именно к верхнему уровню, а не только к папке bin. Потому что Qt пытается запустить RCC.EXE из подкаталога bin.
Это прописано в файлах Makefile/Debug и Makefile/Release, которые создаются при открытии проекта в QtCreator.
В файле c:\Qt\4.8.3\configure.exe нашёл следующее QMAKE_RCC = $$QT_BUILD_TREE...bin/rcc.exe.
А сюда это попало, возможно, из файла c:\Qt\4.8.3\configure (QT_INSTALL_BINS="$QT_INSTALL_PREFIX/bin"),
и, возможно, при установке. В общем, можно, конечно, и дальше копать, но решение найдено, смысл понятен.
Удачи всем, спасибо за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
asket
  опции профиля:
сообщение 14.1.2013, 11:26
Сообщение #16


Студент
*

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

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




Репутация:   0  


kuzulis, У меня к Вам вот такой вопрос, я использую в своем проекте библиотеку QtSerialPort под Windows, все работает и все замечательно, если бы не одно НО. Оно заключается в следующем, при первом запуске своего приложения, функция open открывает порт, однако поступаемые данные почему-то Ваша библиотека не видит (используется write и waitForReadyRed(), read), чтобы привести в нормальное состояние, мне приходится принудительно закрывать порт с помошью close, запускать любую терминалку (terraterm или hyperterminal), а после можно будет открывать порт и работать. Хотелось бы понять как решить эту проблему? QtLib 4.8, QtSDK 1.2, кстати со старой библиотекой QserialDevice аналогичных проблем не было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lkslks
  опции профиля:
сообщение 15.1.2013, 4:44
Сообщение #17


Новичок


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

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




Репутация:   0  


Рекомендую посмотреть пример Terminal в исходниках QtSerialPort.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 15.1.2013, 5:57
Сообщение #18


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


asket, сильно смахивает на то, что ты не задаёшь какие-то настройки порта. Толт же терминал их задаёт, поэтому после него у тебя волшебным образом начинает всё работать )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
asket
  опции профиля:
сообщение 15.1.2013, 13:53
Сообщение #19


Студент
*

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

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




Репутация:   0  


Алексей1153, в том то и дело что порт настроен соответствующим образом, скопировал кусок кода из примера terminal,
какие еще настройки влияют на работу приложения?

    if (m_Port->isOpen())
        m_Port->close();

    sleep(1);

    m_Port->setDataBits(SerialPort::Data8);
    m_Port->setRate(SerialPort::Rate115200);
    m_Port->setParity(SerialPort::NoParity);
    m_Port->setStopBits(SerialPort::OneStop);
    m_Port->setFlowControl(SerialPort::NoFlowControl);
    
    if (!m_Port->open(QIODevice::ReadWrite)){
        return ErrPortNotOpen;
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 15.1.2013, 19:30
Сообщение #20


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


там ещё по меньшей мере 5 таймаутов точно нужно настроить. Описание параметров можно найти, к примеру, здесь


http://msdn.microsoft.com/en-us/library/aa...v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa...0(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa...0(v=vs.85).aspx
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 15.1.2013, 20:28
Сообщение #21


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

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

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




Репутация:   7  


Цитата(asket @ 15.1.2013, 14:53) *
Алексей1153, в том то и дело что порт настроен соответствующим образом, скопировал кусок кода из примера terminal,
какие еще настройки влияют на работу приложения?


Да неужели правильно скопировал?

Цитата(asket @ 15.1.2013, 14:53) *
    if (m_Port->isOpen())
        m_Port->close();

    sleep(1);

    m_Port->setDataBits(SerialPort::Data8);
    m_Port->setRate(SerialPort::Rate115200);
    m_Port->setParity(SerialPort::NoParity);
    m_Port->setStopBits(SerialPort::OneStop);
    m_Port->setFlowControl(SerialPort::NoFlowControl);
    
    if (!m_Port->open(QIODevice::ReadWrite)){
        return ErrPortNotOpen;
    }


Едрить-колотить! Да сколько же можно? Доколе все ВЫ будете повторять эти ошибки?
Ты делаешь все неправильно! Читай документацию!
Или, для начала, хотя-бы проверяй возвращаемые значения методов setXXX()!

PS: Блин, задолбали с такими вопросами
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2013, 15:57
Сообщение #22


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(kuzulis @ 15.1.2013, 22:28) *
Едрить-колотить! Да сколько же можно? Доколе все ВЫ будете повторять эти ошибки?Ты делаешь все неправильно! Читай документацию! Или, для начала, хотя-бы проверяй возвращаемые значения методов setXXX()!PS: Блин, задолбали с такими вопросами
Денис, а это всё от неестественности, я тебе ещё на прогорге про это говрил.
Гораздо естественнее: создать объект, настроить, а потом использовать. Поэтому люди так и делают.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 16.1.2013, 17:26
Сообщение #23


Студент
*

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

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




Репутация:   0  


Здравствуйте!
Проблема тоже в винде (в линуксе всё работает)...
порт открываю так:
    SerialPort dev;
    dev.setPort(QString(port));
    bool res = dev.open(QIODevice::ReadWrite);
    if (!res)
    {
        return false;
    }
    if (res) res = dev.setRate(SerialPort::Rate9600);
    if (res) res = dev.setDataBits(SerialPort::Data8);
    if (res) res = dev.setParity(SerialPort::NoParity);
    if (res) res = dev.setStopBits(SerialPort::OneStop);
    if (res) res = dev.setFlowControl(SerialPort::NoFlowControl);
    if (!res)
    {
        dev.close();
        return false;
    }


далее пишу в порт строку байтов 'write()', а из порта 'read()' приходит в бесконечном цикле первый байт строки...
winXP|win7|win8 - одна беда((
на старой версии QtSerialPort такой проблемы в винде небыло
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 16.1.2013, 18:28
Сообщение #24


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 16.1.2013, 18:26) *
далее пишу в порт строку байтов 'write()', а из порта 'read()' приходит в бесконечном цикле первый байт строки...
winXP|win7|win8 - одна беда((
на старой версии QtSerialPort такой проблемы в винде небыло


Ну чтож, приведи минимальный компилябельный пример, который воспроизводит проблему.
Из приведенного тобой описания ничего не понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 16.1.2013, 19:15
Сообщение #25


Студент
*

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

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




Репутация:   0  


вот простой пример:

#include <QCoreApplication>
#include <QtAddOnSerialPort/serialport.h>

QT_USE_NAMESPACE_SERIALPORT

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    if (argc != 2) return -1;
    qDebug("port: %s", argv[1]);

    QByteArray id;
    SerialPort dev;
    dev.setPort(QString(argv[1]));
    bool res = dev.open(QIODevice::ReadWrite);
    if (!res)
    {
        return -1;
    }
    if (res) res = dev.setRate(SerialPort::Rate9600);
    if (res) res = dev.setDataBits(SerialPort::Data8);
    if (res) res = dev.setParity(SerialPort::NoParity);
    if (res) res = dev.setStopBits(SerialPort::OneStop);
    if (res) res = dev.setFlowControl(SerialPort::NoFlowControl);
    if (!res)
    {
        dev.close();
        return -1;
    }
    dev.write(QByteArray(2, 0x90));
    dev.write(QByteArray(1, 0x26));
    for (int i = 0; i < 100; i++)
    {
        if (dev.bytesAvailable() > 0)
        {
            id.append(dev.read(1));
            qDebug("Read IDa: %x", (uchar)id.right(1).data()[0]);
        }
        else
        {
            if (dev.waitForReadyRead(100))
            {
                id.append(dev.read(1));
                qDebug("Read IDw: %x", (uchar)id.right(1).data()[0]);
            }
            else break;
        }
        if (id[id.length() - 1] == (char)0) break;
    }
    dev.close();


    return a.exec();
}


запущен на winXP SP3, qt-4.8.4, MinGW-w64 - for 32 bit Windows (gcc-4.7.1)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 16.1.2013, 20:05
Сообщение #26


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 16.1.2013, 20:15) *
вот простой пример:
...
...
...
запущен на winXP SP3, qt-4.8.4, MinGW-w64 - for 32 bit Windows (gcc-4.7.1)


И опять же, ты тоже неправильно используешь библиотеку.

В твоем случае см. в сторону примера BlockingMaster и внимательно читай комментарии в нем (точнее в qtserialport\doc\src\examples\).

Сообщение отредактировал kuzulis - 16.1.2013, 20:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 17.1.2013, 13:22
Сообщение #27


Студент
*

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

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




Репутация:   0  


Экспериментируя с кодом заметил забавную вещь:

если строку
if (dev.bytesAvailable() > 0)

заменить на
if (dev.bytesAvailable() - 512 > 0)

то всё отлично работает

отсюда вопрос: почему в виндовсе при пустом буфере чтения функция bytesAvailable() возвращает 512?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 17.1.2013, 17:03
Сообщение #28


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 17.1.2013, 14:22) *
отсюда вопрос: почему в виндовсе при пустом буфере чтения функция bytesAvailable() возвращает 512?


Не знаю, не может такого быть.

Слинкуй статически исходники библиотеки с твоим приложением через "serialport-lib.pri" и пробегись дебаггером.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 17.1.2013, 19:27
Сообщение #29


Студент
*

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

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




Репутация:   0  


что-то не собирается((

Раскрывающийся текст

g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.4/include/QtCore' -I'../../Qt/4.8.4/include' -I'../qtserialport/src/serialport' -I'../../Qt/4.8.4/inc
../qtserialport/src/serialport/serialport.cpp:382:1: warning: 'QtAddOn::SerialPort::SerialPort::SerialPort(QObject*)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:393:1: warning: 'QtAddOn::SerialPort::SerialPort::SerialPort(const QString&, QObject*)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:405:1: warning: 'QtAddOn::SerialPort::SerialPort::SerialPort(const QtAddOn::SerialPort::SerialPortInfo&, QObject*)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:415:1: warning: 'virtual QtAddOn::SerialPort::SerialPort::~SerialPort()' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:430:6: warning: 'void QtAddOn::SerialPort::SerialPort::setPort(const QString&)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
../qtserialport/src/serialport/serialport.cpp:441:6: warning: 'void QtAddOn::SerialPort::SerialPort::setPort(const QtAddOn::SerialPort::SerialPortInfo&)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
../qtserialport/src/serialport/serialport.cpp:483:9: warning: 'QString QtAddOn::SerialPort::SerialPort::portName() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:500:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::open(QIODevice::OpenMode)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:530:6: warning: 'virtual void QtAddOn::SerialPort::SerialPort::close()' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
../qtserialport/src/serialport/serialport.cpp:553:6: warning: 'void QtAddOn::SerialPort::SerialPort::setRestoreSettingsOnClose(bool)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:568:6: warning: 'bool QtAddOn::SerialPort::SerialPort::restoreSettingsOnClose() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:599:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setRate(qint32, QtAddOn::SerialPort::SerialPort::Directions)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:613:8: warning: 'qint32 QtAddOn::SerialPort::SerialPort::rate(QtAddOn::SerialPort::SerialPort::Direction
s) const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:638:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setDataBits(QtAddOn::SerialPort::SerialPort::Da
taBits)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:649:22: warning: 'QtAddOn::SerialPort::SerialPort::DataBits QtAddOn::SerialPort::SerialPort::dataBits() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:672:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setParity(QtAddOn::SerialPort::SerialPort::Pari
ty)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:683:20: warning: 'QtAddOn::SerialPort::SerialPort::Parity QtAddOn::SerialPort::SerialPort::parity() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:705:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setStopBits(QtAddOn::SerialPort::SerialPort::St
opBits)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:716:22: warning: 'QtAddOn::SerialPort::SerialPort::StopBits QtAddOn::SerialPort::SerialPort::stopBits() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:738:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setFlowControl(QtAddOn::SerialPort::SerialPort:
:FlowControl)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:749:25: warning: 'QtAddOn::SerialPort::SerialPort::FlowControl QtAddOn::SerialPort::SerialPort::flowControl() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:773:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setDtr(bool)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:784:6: warning: 'bool QtAddOn::SerialPort::SerialPort::dtr() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:809:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setRts(bool)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:820:6: warning: 'bool QtAddOn::SerialPort::SerialPort::rts() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:844:19: warning: 'QtAddOn::SerialPort::SerialPort::Lines QtAddOn::SerialPort::SerialPort::lines() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:864:6: warning: 'bool QtAddOn::SerialPort::SerialPort::flush()' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:876:6: warning: 'bool QtAddOn::SerialPort::SerialPort::clear(QtAddOn::SerialPort::SerialPort::Directio
ns)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:907:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::atEnd() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:921:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setDataErrorPolicy(QtAddOn::SerialPort::SerialP
ort::DataErrorPolicy)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:934:29: warning: 'QtAddOn::SerialPort::SerialPort::DataErrorPolicy QtAddOn::SerialPort::SerialPort::dataErrorPolicy() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:962:23: warning: 'QtAddOn::SerialPort::SerialPort::PortError QtAddOn::SerialPort::SerialPort::error() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:968:6: warning: 'void QtAddOn::SerialPort::SerialPort::clearError()' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
../qtserialport/src/serialport/serialport.cpp:993:8: warning: 'qint64 QtAddOn::SerialPort::SerialPort::readBufferSize() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1015:6: warning: 'void QtAddOn::SerialPort::SerialPort::setReadBufferSize(qint64)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1027:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::isSequential() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1037:8: warning: 'virtual qint64 QtAddOn::SerialPort::SerialPort::bytesAvailable() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1050:8: warning: 'virtual qint64 QtAddOn::SerialPort::SerialPort::bytesToWrite() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1062:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::canReadLine() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1080:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::waitForReadyRead(int)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1088:6: warning: 'virtual bool QtAddOn::SerialPort::SerialPort::waitForBytesWritten(int)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1107:6: warning: 'bool QtAddOn::SerialPort::SerialPort::sendBreak(int)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1121:6: warning: 'bool QtAddOn::SerialPort::SerialPort::setBreak(bool)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
../qtserialport/src/serialport/serialport.cpp:1129:8: warning: 'virtual qint64 QtAddOn::SerialPort::SerialPort::readData(char*, qint64)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1137:8: warning: 'virtual qint64 QtAddOn::SerialPort::SerialPort::readLineData(char*, qint64)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
../qtserialport/src/serialport/serialport.cpp:1144:8: warning: 'virtual qint64 QtAddOn::SerialPort::SerialPort::writeData(const char*, qint64)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
In file included from ../qtserialport/src/serialport/serialport.cpp:1161:0:.
debug/moc_serialport.cpp:191:6: warning: 'static void QtAddOn::SerialPort::SerialPort::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
debug/moc_serialport.cpp:228:40: warning: 'QtAddOn::SerialPort::SerialPort::staticMetaObjectExtraData' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
debug/moc_serialport.cpp:232:31: warning: 'QtAddOn::SerialPort::SerialPort::staticMetaObject' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:241:20: warning: 'virtual const QMetaObject* QtAddOn::SerialPort::SerialPort::metaObject() const' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
debug/moc_serialport.cpp:246:7: warning: 'virtual void* QtAddOn::SerialPort::SerialPort::qt_metacast(const char*)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
debug/moc_serialport.cpp:254:5: warning: 'virtual int QtAddOn::SerialPort::SerialPort::qt_metacall(QMetaObject::Call, int, void**)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes].
debug/moc_serialport.cpp:315:6: warning: 'void QtAddOn::SerialPort::SerialPort::rateChanged(qint32, QtAddOn::SerialPort::SerialPort::Directions)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
In file included from ../qtserialport/src/serialport/serialport.cpp:1161:0:.
debug/moc_serialport.cpp:322:6: warning: 'void QtAddOn::SerialPort::SerialPort::dataBitsChanged(QtAddOn::SerialPort::SerialPort
::DataBits)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:329:6: warning: 'void QtAddOn::SerialPort::SerialPort::parityChanged(QtAddOn::SerialPort::SerialPort::
Parity)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:336:6: warning: 'void QtAddOn::SerialPort::SerialPort::stopBitsChanged(QtAddOn::SerialPort::SerialPort
::StopBits)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:343:6: warning: 'void QtAddOn::SerialPort::SerialPort::flowControlChanged(QtAddOn::SerialPort::SerialP
ort::FlowControl)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:350:6: warning: 'void QtAddOn::SerialPort::SerialPort::dataErrorPolicyChanged(QtAddOn::SerialPort::Ser
ialPort::DataErrorPolicy)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:357:6: warning: 'void QtAddOn::SerialPort::SerialPort::dtrChanged(bool)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:364:6: warning: 'void QtAddOn::SerialPort::SerialPort::rtsChanged(bool)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:371:6: warning: 'void QtAddOn::SerialPort::SerialPort::errorChanged(QtAddOn::SerialPort::SerialPort::P
ortError)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
debug/moc_serialport.cpp:378:6: warning: 'void QtAddOn::SerialPort::SerialPort::restoreSettingsOnCloseChanged(bool)' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default].
In file included from ../qtserialport/src/serialport/serialport.cpp:1161:0:.
debug/moc_serialport.cpp:228:28: error: definition of static data member 'QtAddOn::SerialPort::SerialPort::staticMetaObjectExtraData' of dllimport'd class.
mingw32-make[1]: Leaving directory `C:/projects/TestSerialPort-build-Debug'.
mingw32-make[1]: *** [debug/serialport.o] Error 1.
mingw32-make: *** [debug] Error 2


.pro
QT       += core
QT       -= gui
include(../qtserialport/src/serialport/serialport-lib.pri)
TARGET = TestSerialPort
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 17.1.2013, 20:02
Сообщение #30


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

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

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




Репутация:   7  


Там в "serialport-global.h" надо закомментировать Q_DECL_XXX дефайны:
#if defined(QT_SERIALPORT_LIB)
#  define Q_SERIALPORT_EXPORT //Q_DECL_EXPORT
#else
#  define Q_SERIALPORT_EXPORT //Q_DECL_IMPORT
#endif
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 18.1.2013, 11:49
Сообщение #31


Студент
*

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

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




Репутация:   0  


спасибо, собрал...

заметил такой момент:
в unix варианте после чтения из порта есть такая строка:
readBuffer.chop(bytesToRead - qMax(readBytes, qint64(0)));

в win варианте ничего похожего нету...
в связи с этим рамер буфера чтения (который выводится командой bytesAvailable(), про которую я ранее писал) так и остаётся 512 - то есть той величины, на которую он быз зарезервирован перед чтением...

складывается впечатление, что кто-то что-то для венды недоделал, или я взял исходник не и того места...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 18.1.2013, 15:15
Сообщение #32


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 18.1.2013, 12:49) *
складывается впечатление, что кто-то что-то для венды недоделал, или я взял исходник не и того места...


Да, есть касячок в реализации bytesAvailable() для винды.
Нужно чтобы он возвращал не размер буфера, а переменную actualReadBufferSize.

Сообщение отредактировал kuzulis - 18.1.2013, 15:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 19.1.2013, 20:46
Сообщение #33


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

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

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




Репутация:   7  


Вроде исправил, обновись.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 24.1.2013, 14:50
Сообщение #34


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 19.1.2013, 21:46) *
Вроде исправил, обновись.


обновил - заработало...
спасибо за оперативность)

но нашёл ещё глюк:
результат функции bytesAvailable() перед функцией clear() и после неё абсолютно одинаковый, хотя буфер чтения вроде должен обнулиться...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 24.1.2013, 21:04
Сообщение #35


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

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

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




Репутация:   7  


обновись еще раз, сегодня был коммит на исправление clear():

https://codereview.qt-project.org/#change,45274
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 5.2.2013, 12:32
Сообщение #36


Студент
*

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

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




Репутация:   0  


Доброго всем!

Заметил такую штуку:

когда
dev.write(wbuf);
dev.waitForBytesWritten(100);

то
dev.waitForReadyRead(100); == тру
dev.bytesAvailable(); > 0


а когда
dev.write(wbuf);
dev.waitForBytesWritten(100);
msleep(50);

то
dev.waitForReadyRead(100); == фолс
dev.bytesAvailable(); == 0


qt4.8.4 Linux
всё делается в отдельном потоке...

вопрос: куда деваются прочитанные данные во время сна?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 5.2.2013, 13:24
Сообщение #37


Студент
*

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

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




Репутация:   0  


Хотя возможно у меня был глюк - после переподключения девайса больше такого не замечал...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 13.3.2013, 23:01
Сообщение #38


Студент
*

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

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




Репутация:   0  


Доброго всем!
Заметил недавно проблему - на USB-UART Com порте связь без проблем, а на Bluetooth Com порте порт отрывается не всегда, и в ErrorString пишет "отказано в доступе"...
Пробовал терминалкой - никаких проблем... открывает порт всегда с первого раза и не теряет связь, а если с помошью QtSerialPort - то через некоторое время (в пределах минуты) оказывается, что открытый порт уже свободен...
Кто-нибудь сталкивался с такой проблемой?
Может с блютузом надо как-то по особенному работать?

библиотеку брал из Git 10-го марта...
Qt 4.8.4, mingw32 (gcc-4.7)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.3.2013, 7:16
Сообщение #39


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


NAUGREEM, может, его периодически надо дрюкать - к примеру раз в полминуты, если не было активности, принудительно пишем или читаем 0 байтов



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 14.3.2013, 12:28
Сообщение #40


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 14.3.2013, 8:16) *
NAUGREEM, может, его периодически надо дрюкать - к примеру раз в полминуты, если не было активности, принудительно пишем или читаем 0 байтов


Интересно - создатели терминалки так же делали?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 14.3.2013, 13:31
Сообщение #41


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

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

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




Репутация:   7  


NAUGREEM,

А ты установи сниффер (например Free Serial Port Monitor) и проверь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.3.2013, 14:22
Сообщение #42


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата(NAUGREEM @ 14.3.2013, 15:28) *
Интересно - создатели терминалки так же делали?


а про какую именно речь ?

я думаю, там сделана вычитка порта, так что они всё равно его как-то дрюкают ) В чём-то разница между работой терминала и твоей программы должна быть
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 15.3.2013, 12:40
Сообщение #43


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 14.3.2013, 14:31) *
NAUGREEM,

А ты установи сниффер (например Free Serial Port Monitor) и проверь.


посмотрел:
в терминалке:
Порт открыт процессом "tcomu12.exe" (PID: 2540)
Запрос:15.03.2013 9:27:31.20364
 FF FF FF                                          ÿÿÿ
Ответ:15.03.2013 9:27:39.25064 (+0.0469 seconds)
 FF FF FF                                          ÿÿÿ
Порт закрыт

у меня:
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт закрыт
Порт открыт процессом "cms.exe" (PID: 2416)
Порт открыт процессом "cms.exe" (PID: 2416)
Запрос:15.03.2013 8:14:15.32764
 FF                                                ÿ
Порт открыт процессом "cms.exe" (PID: 2416)
Порт открыт процессом "cms.exe" (PID: 2416)
 FF FF                                             ÿÿ
Ответ:15.03.2013 8:14:16.74964 (+0.0156 seconds)
 FF FF FF                                          ÿÿÿ
Запрос:15.03.2013 8:14:16.87464 (+0.1094 seconds)
.....

во первых - порт открылся только с 7-го раза, до этого возвращал ошибку 2 (отказано в доступе)
во вторых - во время дальнейшей работы почему-то постоянно открывался (в программе команды на открытие у меня в это время небыло...)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 15.3.2013, 12:45
Сообщение #44


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

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

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




Репутация:   7  


Мож у тебя вирус какой или троян? :)
Чудес не бывает (с).

Цитата
Порт открыт процессом "cms.exe"


Это чей процесс?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 15.3.2013, 13:23
Сообщение #45


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 15.3.2013, 13:45) *
Мож у тебя вирус какой или троян? :)
Чудес не бывает (с).

голая винда в виртуалке - везде с этого диска ставил и антивирусы ниразу не ругались...

Цитата
Цитата
Порт открыт процессом "cms.exe"


Это чей процесс?


это моя прога с этой либой)

на разных компах с блютузом такая-же шняга(
по USB нормально...

и почему на терминалку вирус не влияет?

может глюк из-за того, что у меня работа с портом в отдельном потоке?

таблицы системных вызовов:
в терминалке:
Раскрывающийся текст

,IRP_MJ_CREATE,DOWN,TRUE,0x0,74 00 63 00 6F 00 6D 00 75 00 31 00 32 00 2E 00 65 00 78 00 65 00 00 00 ,t.c.o.m.u.1.2...e.x.e...,
1,IRP_MJ_CREATE,UP,FALSE,0x0,,,
2,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
3,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,00 C2 01 00 ,.A..,
4,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
5,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
6,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
7,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
8,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
9,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
10,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
11,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
12,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_CLR_RTS: Clear RTS),DOWN,FALSE,0x0,,,
13,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_CLR_RTS: Clear RTS),UP,FALSE,0x0,,,
14,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
15,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
16,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
17,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
18,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 11 13 ,......,
19,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
20,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,01 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 ,................,
21,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
22,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_PURGE: Purge requests),DOWN,TRUE,0x0,0F 00 00 00 ,....,
23,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_PURGE: Purge requests),UP,FALSE,0x0,,,
24,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_QUEUE_SIZE: Set queue size),DOWN,TRUE,0x0,00 08 00 00 00 08 00 00 ,........,
25,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_QUEUE_SIZE: Set queue size),UP,FALSE,0x0,,,
26,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts),DOWN,TRUE,0x0,01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 0A 00 00 00 ,....................,
27,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts),UP,FALSE,0x0,,,
28,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
29,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
30,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
31,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
32,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
33,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
....
1182,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1183,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1184,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1185,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1186,IRP_MJ_WRITE,DOWN,TRUE,0x0,FF ,y,
1187,IRP_MJ_WRITE,UP,TRUE,0x0,FF ,y,
1188,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1189,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1190,IRP_MJ_READ,DOWN,FALSE,0x0,,,
1191,IRP_MJ_READ,UP,TRUE,0x0,FF FF FF ,yyy,
1192,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1193,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1194,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1195,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1196,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1197,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1198,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1199,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
....
1292,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),DOWN,FALSE,0x0,,,
1293,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS: Retrieve COM status),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
1294,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
1295,IRP_MJ_CLOSE,UP,FALSE,0x0,,,

у меня:
Раскрывающийся текст

0,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
1,IRP_MJ_CREATE,UP,FALSE,0x0,,,
2,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
3,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
4,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
5,IRP_MJ_CREATE,UP,FALSE,0x0,,,
6,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
7,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
8,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
9,IRP_MJ_CREATE,UP,FALSE,0x0,,,
10,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
11,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
12,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
13,IRP_MJ_CREATE,UP,FALSE,0x0,,,
14,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
15,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
16,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
17,IRP_MJ_CREATE,UP,FALSE,0x0,,,
18,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
19,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
20,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
21,IRP_MJ_CREATE,UP,FALSE,0x0,,,
22,IRP_MJ_CLOSE,DOWN,FALSE,0x0,,,
23,IRP_MJ_CLOSE,UP,FALSE,0x0,,,
24,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
25, IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
26, IRP_MJ_CREATE,UP,FALSE,0xc0000022,,,
27,IRP_MJ_CREATE,UP,FALSE,0x0,,,
28,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
29,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,00 C2 01 00 ,.A..,
30,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
31,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
32,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
33,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
34,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
35,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
36,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
37,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,00 C2 01 00 ,.A..,
38,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
39,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
40,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
41,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
42,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
43,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
44,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,00 C2 01 00 ,.A..,
45,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
46,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
47,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
48,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
49,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
50,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
51,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
52,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
53,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
54,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_TIMEOUTS: Retrieve timeouts),DOWN,FALSE,0x0,,,
55,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_TIMEOUTS: Retrieve timeouts),UP,TRUE,0x0,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,....................,
56,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts),DOWN,TRUE,0x0,FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,yyyy................,
57,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts),UP,FALSE,0x0,,,
58,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_WAIT_MASK: Set current event mask),DOWN,TRUE,0x0,81 00 00 00 ,?...,
59,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_WAIT_MASK: Set current event mask),UP,FALSE,0x0,,,
60,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event),DOWN,FALSE,0x0,,,
61, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_MODEMSTATUS: Retrieve modem status),DOWN,FALSE,0x0,,,
62, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_MODEMSTATUS: Retrieve modem status),UP,TRUE,0x0,00 00 00 00 ,....,
63, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_DTRRTS: Retrieve DTR and RTS),DOWN,FALSE,0x0,,,
64, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_DTRRTS: Retrieve DTR and RTS),UP,TRUE,0x0,03 00 00 00 ,....,
65, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_MODEMSTATUS: Retrieve modem status),DOWN,FALSE,0x0,,,
66, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_MODEMSTATUS: Retrieve modem status),UP,TRUE,0x0,00 00 00 00 ,....,
67, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_DTRRTS: Retrieve DTR and RTS),DOWN,FALSE,0x0,,,
68, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_DTRRTS: Retrieve DTR and RTS),UP,TRUE,0x0,03 00 00 00 ,....,
69, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
70, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,00 C2 01 00 ,.A..,
71, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
72, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
73, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
74, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
75, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
76, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
77, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
78, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
79, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
80, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
81, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
82, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
83, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
84, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
85, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
86, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
87, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
88, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,80 25 00 00 ,?%..,
89, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
90, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
91, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
92, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
93, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
94, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
95, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
96, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
97, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
98, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
99, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
100, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
101, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
102, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
103, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
104, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
105, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
106, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,80 25 00 00 ,?%..,
107, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
108, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
109, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
110, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
111, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
112, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
113, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
114, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
115, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
116, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
117, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
118, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
119, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
120, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
121, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
122, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
123, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
124, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,80 25 00 00 ,?%..,
125, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
126, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
127, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
128, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
129, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
130, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
131, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
132, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
133, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
134, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
135, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
136, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
137, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
138, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
139, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
140, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
141, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),DOWN,FALSE,0x0,,,
142, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_BAUD_RATE: Retrieve Baud Rate),UP,TRUE,0x0,80 25 00 00 ,?%..,
143, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),DOWN,FALSE,0x0,,,
144, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_LINE_CONTROL: Retrieve line control),UP,TRUE,0x0,00 00 08 ,...,
145, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),DOWN,FALSE,0x0,,,
146, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_CHARS: Retrieve special characters),UP,TRUE,0x0,00 00 00 00 00 00 ,......,
147, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),DOWN,FALSE,0x0,,,
148, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_HANDFLOW: Retrieve handshake information),UP,TRUE,0x0,09 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 ,....?...........,
149, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),DOWN,TRUE,0x0,80 25 00 00 ,?%..,
150, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate),UP,FALSE,0x0,,,
151, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_CLR_RTS: Clear RTS),DOWN,FALSE,0x0,,,
152, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_CLR_RTS: Clear RTS),UP,FALSE,0x0,,,
153, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),DOWN,FALSE,0x0,,,
154, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_DTR: Set DTR),UP,FALSE,0x0,,,
155, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),DOWN,TRUE,0x0,00 00 08 ,...,
156, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_LINE_CONTROL: Set line control),UP,FALSE,0x0,,,
157, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),DOWN,TRUE,0x0,00 00 00 00 00 00 ,......,
158, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters),UP,FALSE,0x0,,,
159, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ,................,
160, IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),UP,FALSE,0x0,,,
161, IRP_MJ_WRITE,DOWN,TRUE,0x0,FF ,y,
162, IRP_MJ_WRITE,UP,TRUE,0x0,FF ,y,
163, IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
164, IRP_MJ_CREATE,UP,FALSE,0xc0000022,,,
165, IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
166, IRP_MJ_CREATE,UP,FALSE,0xc0000022,,,
167, IRP_MJ_WRITE,DOWN,TRUE,0x0,FF ,y,
168, IRP_MJ_WRITE,UP,TRUE,0x0,FF ,y,
169, IRP_MJ_WRITE,DOWN,TRUE,0x0,FF ,y,
170, IRP_MJ_WRITE,UP,TRUE,0x0,FF ,y,
171,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event),UP,TRUE,0x0,01 00 00 00 ,....,
172,IRP_MJ_READ,DOWN,FALSE,0x0,,,
173,IRP_MJ_READ,UP,TRUE,0x0,FF ,y,
174,IRP_MJ_READ,DOWN,FALSE,0x0,,,
175,IRP_MJ_READ,UP,FALSE,0x0,,,
176,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event),DOWN,FALSE,0x0,,,
177,IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event),UP,TRUE,0x0,01 00 00 00 ,....,
178,IRP_MJ_READ,DOWN,FALSE,0x0,,,
179,IRP_MJ_READ,UP,TRUE,0x0,FF FF ,yy,
180,IRP_MJ_READ,DOWN,FALSE,0x0,,,
181,IRP_MJ_READ,UP,FALSE,0x0,,,

и собственно мой код, который эти вызовы плодит:
    QSerialPort dev;
    dev.setPort(QString(port));
    bool res = false;
    for (int i = 0; i < 30; i++)
    {
        if (dev.open(QIODevice::ReadWrite))
        {
            res = true;
            break;
        }
        msleep(100);
    }
    if (!res) return;
    qDebug("port %s opened", port.data());
    if (res) res = dev.setBaudRate(QSerialPort::Baud9600);
    if (res) res = dev.setDataBits(QSerialPort::Data8);
    if (res) res = dev.setParity(QSerialPort::NoParity);
    if (res) res = dev.setStopBits(QSerialPort::OneStop);
    if (res) res = dev.setFlowControl(QSerialPort::NoFlowControl);
    if (!res)
    {
        dev.close();
        return;
    }
    QByteArray wbuf, rbuf;
    wbuf.append((char)0xff);
    for (int i = 0; i < 5; i++)
    {
        dev.write(wbuf);
        dev.waitForBytesWritten(100);
        dev.waitForReadyRead(200);
        if (dev.bytesAvailable() > 0)
        {
            rbuf.append(dev.readAll());
            while (dev.waitForReadyRead(100)) rbuf.append(dev.readAll());
        }
        res = false;
        if (rbuf.contains(QByteArray(3, (char)0xff)))
        {
            res = true;
            break;
        }
    }
    if (!res)
    {
        dev.close();
        return id;
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 15.3.2013, 15:07
Сообщение #46


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 15.3.2013, 13:45) *
Мож у тебя вирус какой или троян? :)
Чудес не бывает (с).

На всякий случай проверил всё свежим каспером - всё чисто...

Цитата(Алексей1153 @ 14.3.2013, 15:22) *
Цитата(NAUGREEM @ 14.3.2013, 15:28) *
Интересно - создатели терминалки так же делали?

а про какую именно речь ?


http://logic-bratsk.ru/radio/util/tstcomu/tstcomu.htm
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 15.3.2013, 15:12
Сообщение #47


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

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

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




Репутация:   7  


Такое впечатление что у тебя несколько потоков пытаются открыть одно и то-же устройство.

Что это вообще за хренота?
Цитата
...
24,IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
25, IRP_MJ_CREATE,DOWN,TRUE,0x0,63 00 6D 00 73 00 2E 00 65 00 78 00 65 00 00 00 ,c.m.s...e.x.e...,
26, IRP_MJ_CREATE,UP,FALSE,0xc0000022,,,
27,IRP_MJ_CREATE,UP,FALSE,0x0,,,
...


Разбирайся со своим кодом.


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 15.3.2013, 16:18
Сообщение #48


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 15.3.2013, 16:12) *
Такое впечатление что у тебя несколько потоков пытаются открыть одно и то-же устройство.


хм...
действительно...
я не подозревал, что QSerialPortInfo::availablePorts() пытается открыть все порты...

а как мне тогда посмотреть, какие порты есть в системе, не открывая их?
мне нужен вотчдог на отвалившиеся и появившиеся порты...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 15.3.2013, 16:53
Сообщение #49


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

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

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




Репутация:   7  


Цитата(NAUGREEM)
хм...
действительно...
я не подозревал, что QSerialPortInfo::availablePorts() пытается открыть все порты...


Он ничего не открывает сам.
Ты скорее всего вызываешь isBusy() или isValid(). Вот эти методы и открывают.
Просто не вызывай их.

Цитата(NAUGREEM)
а как мне тогда посмотреть, какие порты есть в системе, не открывая их?

см. выше.

Цитата(NAUGREEM)
мне нужен вотчдог на отвалившиеся и появившиеся порты...

Сам напиши.

Можешь взять код из QSerialDevice (master ветку) - класс SerialDeviceEnumerator:

http://gitorious.org/qserialdevice/qserial...eviceenumerator

Или из QExtSerialPort:

http://code.google.com/p/qextserialport/so...owse/#git%2Fsrc


А если по-простому - то просто по таймеру делай QSerialPortInfo::availablePorts() и все.

UPD: Если тебе нужен вачдог на выдергивание ранее открытого порта - то можешь просто приконнектиться к сигналу ResourceErorr.

Сообщение отредактировал kuzulis - 15.3.2013, 16:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 15.3.2013, 18:24
Сообщение #50


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 15.3.2013, 17:53) *
UPD: Если тебе нужен вачдог на выдергивание ранее открытого порта - то можешь просто приконнектиться к сигналу ResourceErorr.


спасибо!
поковыряю...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 19.3.2013, 14:43
Сообщение #51


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 15.3.2013, 17:53) *
UPD: Если тебе нужен вачдог на выдергивание ранее открытого порта - то можешь просто приконнектиться к сигналу ResourceErorr.


что-то я не нашёл - кто этот сигнал посылает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 19.3.2013, 14:49
Сообщение #52


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 19.3.2013, 15:43) *
что-то я не нашёл - кто этот сигнал посылает?


Класс QSerialPort посылает сигнал QSerialPort::error(SerialPortError err) со значением ResourceError если
ты выдернул из системы уже открытый USB/Serial порт.


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 19.3.2013, 16:01
Сообщение #53


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 19.3.2013, 15:49) *
Цитата(NAUGREEM @ 19.3.2013, 15:43) *
что-то я не нашёл - кто этот сигнал посылает?


Класс QSerialPort посылает сигнал QSerialPort::error(SerialPortError err) со значением ResourceError если
ты выдернул из системы уже открытый USB/Serial порт.


но если ты вырубил блютузовый девайс - то никакой ошибки не возникает, пока ты не пошлёшь в порт какой-нибудь байт...

а при отправке данных в порт - возникает ошибка 11 (неизвестная ошибка)

но у девайса нету команды ping, чтобы пинать его...
и в некоторых режимах вообще нельзя в него ничего посылать...

засада получается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 19.3.2013, 17:09
Сообщение #54


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

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

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




Репутация:   7  


Цитата(NAUGREEM)
но если ты вырубил блютузовый девайс - то никакой ошибки не возникает, пока ты не пошлёшь в порт какой-нибудь байт...


А ты поставь брекпойнт в CommOverlappedEventNotifier на processCompletionRoutine(),
выдерни шнурок и посмотри какое значение будет у triggeredEventMask, и сработает ли он вообще?

Цитата(NAUGREEM)
а при отправке данных в порт - возникает ошибка 11 (неизвестная ошибка)


Ну а ты там где вызывается GetLastError() (в свиче) замени на типа:
long r = GetLastError();
switch (r) {
...
}


И приведи значение кода этой системной ошибки в переменной r.

UPD: И да, какая у тебя ОС?

Сообщение отредактировал kuzulis - 19.3.2013, 17:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 19.3.2013, 20:40
Сообщение #55


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

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

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




Репутация:   7  


NAUGREEM
Упс, у себя проверил - оказывается - ДА, профукивался код

Цитата
ERROR_DEVICE_REMOVED
1617 (0x651)
The device has been removed.


И что самое интересное, что этот код ошибки появляется только если устройство было открыто и был произведен I/O в у-во.

Проверь с этим патчем: https://codereview.qt-project.org/#change,51468

И обязательно отпишись о том:

* на какой ОС, сколько бит,
* какой Bluetooth адаптер (по крайней мере VID/PID)
* какой Bluetooth стек использовал: Стандартный микрософтовский, IVTBlueSoleil, Toschiba и т.п.
!!!


Сообщение отредактировал kuzulis - 19.3.2013, 21:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 21.3.2013, 16:25
Сообщение #56


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 19.3.2013, 18:09) *
А ты поставь брекпойнт в CommOverlappedEventNotifier на processCompletionRoutine(),
выдерни шнурок и посмотри какое значение будет у triggeredEventMask, и сработает ли он вообще?

не срабатывает

Цитата(kuzulis @ 19.3.2013, 18:09) *
Ну а ты там где вызывается GetLastError() (в свиче) замени на типа:
long r = GetLastError();
switch (r) {
...
}


И приведи значение кода этой системной ошибки в переменной r.

::GetLastError() возвращает 0

Цитата(kuzulis @ 19.3.2013, 18:09) *
UPD: И да, какая у тебя ОС?

WinXP 32
BT адаптер HAMA Vid:0a12 Pid:0001
BT стек стандартный микросовтовский
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 21.3.2013, 17:13
Сообщение #57


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

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

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




Репутация:   7  


Как не срабатывает? Не может быть.. Ты пробовал перед этим писать/читать из у-ва?


Я проверял на двух адаптерах в Win8 - все работает.
Хотя, может быть, дело в том, что у тебя WinXP...

Можешь дать мне удаленный доступ к своему компу через TeamViewer?

Сообщение отредактировал kuzulis - 21.3.2013, 17:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 21.3.2013, 17:48
Сообщение #58


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 21.3.2013, 18:13) *
Как не срабатывает? Не может быть.. Ты пробовал перед этим писать/читать из у-ва?


Я проверял на двух адаптерах в Win8 - все работает.
Хотя, может быть, дело в том, что у тебя WinXP...

Можешь дать мне удаленный доступ к своему компу через TeamViewer?


могу Ammyadmin, но только завтра...


примерно такой лог у меня получается:
last serial error выводится по сигналу error (десятичное значение)
triggeredEventMask выводится в processCompletionRoutine() после GetOverlappedResult() (это в классе ComOverlappedEventNotifier)
Раскрывающийся текст

last serial error 997
last serial error 997
dump... To block-0: FF FF FF
triggeredEventMask = 1
dump... From block-0: FF
triggeredEventMask = 1
dump... From block-0: FF FF
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
last serial error 997
dump... To block-0: FF FF FF
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11
last serial error 0
error = 11


Сообщение отредактировал NAUGREEM - 21.3.2013, 18:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 21.3.2013, 22:44
Сообщение #59


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

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

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




Репутация:   7  


Что-то ты мне не так все рассказываешь.

Цитата
last serial error выводится по сигналу error (десятичное значение)


Выведи результат от GetLastError не по сигналу, а внутри decodeSystemError().

Странно все это, т.к. я даже проверил на WinXP на примере Terminal - у меня все работает:

* если просто открываю порт и выдергиваю блютуз - то срабатывает triggeredEventMask = 0

* если открываю порт, пробую в него что-то принять извне, а потом выдергиваю блютуз -
то срабатывает triggeredEventMask = 1, далее, пытается прочитать что-то в startAsyncRead(),
читает с ошибкой ERROR_DEVICE_REMOVED == 1617 (0x651)


Цитата
могу Ammyadmin, но только завтра...

Я не знаю что это - но лучше скачай TeamViewer.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 22.3.2013, 9:13
Сообщение #60


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 21.3.2013, 23:44) *
* если просто открываю порт и выдергиваю блютуз - то срабатывает triggeredEventMask = 0


ты выдёргиваешь блютуз-свисток из усб, или отключаешь блютуз-девас от питания?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 22.3.2013, 10:08
Сообщение #61


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 22.3.2013, 10:13) *
Цитата(kuzulis @ 21.3.2013, 23:44) *
* если просто открываю порт и выдергиваю блютуз - то срабатывает triggeredEventMask = 0


ты выдёргиваешь блютуз-свисток из усб, или отключаешь блютуз-девас от питания?


Выдергиваю свисток
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 22.3.2013, 10:20
Сообщение #62


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 22.3.2013, 11:08) *
Выдергиваю свисток


с этим-то проблем нету...
там и порт пропадает из списка...

а вот у меня задача - второй случай победить...
единственный выход - делать пинг, когда взаимодействия нету...

а при выдёргивании свиська на WinXP твой патч работает - ошибка 9 вылазит
так, что пусть его смело принимают)


и да: спасибо тебе за библиотеку и помошь)

Сообщение отредактировал NAUGREEM - 22.3.2013, 10:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 22.3.2013, 10:46
Сообщение #63


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 22.3.2013, 11:20) *
Цитата(kuzulis @ 22.3.2013, 11:08) *
Выдергиваю свисток


с этим-то проблем нету...
там и порт пропадает из списка...

а вот у меня задача - второй случай победить...
единственный выход - делать пинг, когда взаимодействия нету...

а при выдёргивании свиська на WinXP твой патч работает - ошибка 9 вылазит
так, что пусть его смело принимают)


и да: спасибо тебе за библиотеку и помошь)


А, вот, теперь порядок.

А по твоей проблеме отследить никак не получится, только если пинговать постоянно. :)

Спасибо за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 25.3.2013, 22:12
Сообщение #64


Студент
*

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

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




Репутация:   0  


Доброго всем!

эпопея продолжается...)

с блютузом всё классно - вочдог отрабатывает по наличию ошибки (serial->error() > 0)

но по USB теперь глюк появился - в какой-то момент неизвестная ошибка 11, и по ней порт закрываестя, и вё повторяется заново...

посмотрел номер ошибки в GetLastError() - 997
гугл сказал: Error 997: Overlapped I/O operation is in progress

может кто знает - из-за чего она может быть?
и может её вообще можно игнорировать?


UPD:
поглядел внимательнее - ERROR_IO_PENDING там уже есть, а вот ERROR_SUCCESS стоит добавить как QSerialPort::NoError


UPD2:
когда вернулся в линукс - заметил странную вещь: постоянно висела ошибка 11 с текстом "Неприменимый к данному устройству ioctl"
содержимое errno = 25 (ENOTTY)

стоит ли игнорировать эту ошибку?
или это реальный баг?

Сообщение отредактировал NAUGREEM - 26.3.2013, 2:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 26.3.2013, 10:23
Сообщение #65


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

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

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




Репутация:   7  


NAUGREEM,

напомни плз., о каком типе чипа идет речь?

Цитата(NAUGREEM)
с блютузом всё классно - вочдог отрабатывает по наличию ошибки (serial->error() > 0)


Если ты хочешь отследить именно выдергивание - то проверяй код ошибки только на ResourceError,
а не на > 0.

Цитата(NAUGREEM)
но по USB теперь глюк появился - в какой-то момент неизвестная ошибка 11, и по ней порт закрываестя, и вё повторяется заново...


Так ты выведи GetLastError в консоль (именно из метода decodeSystemError())и посмотри какой реальный номер имеет системная ошибка
и при каких обстоятельствах: возвращается ли ReadFile с ошибкой или нет, возвращаются ли иные системные вызовы с ошибками?

Цитата(NAUGREEM)
посмотрел номер ошибки в GetLastError() - 997
гугл сказал: Error 997: Overlapped I/O operation is in progress

может кто знает - из-за чего она может быть?
и может её вообще можно игнорировать?


Это не ошибка, это нормальное поведение, не обращай на эту "ошибку" внимания.

Цитата(NAUGREEM)
UPD:
поглядел внимательнее - ERROR_IO_PENDING там уже есть, а вот ERROR_SUCCESS стоит добавить как QSerialPort::NoError


А ERROR_SUCCESS у тебя реально появляется? Если ДА - то при каких обстоятельствах.

Цитата(NAUGREEM)
UPD2:
когда вернулся в линукс - заметил странную вещь: постоянно висела ошибка 11 с текстом "Неприменимый к данному устройству ioctl"
содержимое errno = 25 (ENOTTY)

стоит ли игнорировать эту ошибку?
или это реальный баг?


Так посмотри, после чего она появляется в Linux, при каких обчтоятельствах, после какого системного вызова?


В общем, поподробнее поисследуй поведение со своим чипом, т.к. мне трудно что-либо советовать и фиксить без
сопутствующей информации. Т.к. нужно понять все обстоятельства при которых появляются ошибки! :)

И приведи лог всей цепочки вызовов, т.е. напихай qDebug() с именами методов и интересующими значениями переменных,
для того, чтобы у меня сложилась кое-какая картина.

Сообщение отредактировал kuzulis - 26.3.2013, 10:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 27.3.2013, 0:13
Сообщение #66


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 26.3.2013, 11:23) *
напомни плз., о каком типе чипа идет речь?

BT хост: HAMA Vid:0a12 Pid:0001
BT стек: стандартный микросовтовский WinXP
BT девайс: Bluegiga WT11
USB-UART: CP2103

Цитата(kuzulis @ 26.3.2013, 11:23) *
Если ты хочешь отследить именно выдергивание - то проверяй код ошибки только на ResourceError,
а не на > 0.

просто выдёргиванием ситуация не обходится - надо отслеживать пропадание WT11

Цитата(kuzulis @ 26.3.2013, 11:23) *
Так ты выведи GetLastError в консоль (именно из метода decodeSystemError())и посмотри какой реальный номер имеет системная ошибка
и при каких обстоятельствах: возвращается ли ReadFile с ошибкой или нет, возвращаются ли иные системные вызовы с ошибками?

как писал выше:
Цитата
посмотрел номер ошибки в GetLastError() - 997
гугл сказал: Error 997: Overlapped I/O operation is in progress

и ещё GetLastError() == 0 было, при котором serial->error() возвращал 11, так как ERROR_SUCCESS у тебя не обрабатывается...

Цитата( @ 26.3.2013, 11:23) *
А ERROR_SUCCESS у тебя реально появляется? Если ДА - то при каких обстоятельствах.

реально, где-то на waitForReadyRead(), который не дожидался данных, и только на USB

Цитата(kuzulis @ 26.3.2013, 11:23) *
Так посмотри, после чего она появляется в Linux, при каких обчтоятельствах, после какого системного вызова?

да кажется после каждого

может, правда, у меня какой глючёк был - сей девайс виртуалка на время перехватывала
я пока просто ENOTTY в игнор поставил)

Цитата(kuzulis @ 26.3.2013, 11:23) *
В общем, поподробнее поисследуй поведение со своим чипом, т.к. мне трудно что-либо советовать и фиксить без
сопутствующей информации. Т.к. нужно понять все обстоятельства при которых появляются ошибки! :)

И приведи лог всей цепочки вызовов, т.е. напихай qDebug() с именами методов и интересующими значениями переменных,
для того, чтобы у меня сложилась кое-какая картина.

попробую, но не обещаю скоро...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Некий_*
сообщение 9.7.2013, 18:14
Сообщение #67





Гости








    


Я скачал новую версию Qt 5.1, для неё библиотека qtserialport как устанавливается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.7.2013, 21:23
Сообщение #68


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Гость_Некий_* @ 9.7.2013, 20:14) *
Я скачал новую версию Qt 5.1, для неё библиотека qtserialport как устанавливается?
никак, она уже входит в состав Qt 5:
в pro-файле просто пишешь:
QT += serialport
и всё

Тыц
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 14.7.2013, 4:40
Сообщение #69


Студент
*

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

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




Репутация:   0  


Здравствуйте, Все!

Набросал тут патчик для поддержки соединения через Bluetooth RFCOMM на Андроиде в QtSerialPort...
Проверял на Qt 4.8.2 (Necessitas), но на Qt 5.1 теоретически тоже должен работать...

Работает через JNI к Android API.
Устройство должно быть предварительно сопряжено.

Может быть автор QtSerialPort'а возьмётся привести эту поделку в правильную форму, и включить в библиотеку...

Прикрепленный файл  serialport.diff.gz ( 13 килобайт ) Кол-во скачиваний: 443


Сообщение отредактировал NAUGREEM - 14.7.2013, 22:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 15.7.2013, 10:23
Сообщение #70


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

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

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




Репутация:   7  


Ох. Отлично, спасибо. Но я не разбираюсь в кишках Android... :(

Кажется, что все-таки патчи необходимо слать в Necessitas проект (или как там его)..
Я не нашел в сорцах Qt5.1 никаких упоминаний об Android (за исключением одной почти пустой директории).

По большому счему, кажется, что именно в Necessitas сделаны обертки для всех Qt-шных классов.. Если я не прав, то поправьте..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 16.7.2013, 19:52
Сообщение #71


Студент
*

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

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




Репутация:   0  


Necessitas, на сколько я помню, плавно влился в Qt 5

На Qt 5.1 beta, да и на RC1 и RC2 я собирал свою прогу для андроида - и худо-бедно там работал и QML, и почти весь QtCore...
может там отдельная ветка под андроид?

В Necessitas для последовательных портов ничего нету - там есть обёртка для блютуза (на QtMobility 1.2), но и та не работает...
а QtSerialPort всё-таки включен в Qt 5.1, который уже смотрит в сторону андроида...

Может есть ещё какие, нибудь мантейнеры у QtSerialPort, которые за андроид взяться смогут? (выражая скромную надежду)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 16.7.2013, 21:03
Сообщение #72


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

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

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




Репутация:   7  


Цитата(NAUGREEM @ 16.7.2013, 20:52) *
Может есть ещё какие, нибудь мантейнеры у QtSerialPort, которые за андроид взяться смогут?


:D Не, я таких не знаю. Ты сам можешь им стать.. (по крайней мере не мэнтейнером - а контрибьютором, хотя..)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 1.8.2013, 15:26
Сообщение #73


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

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

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




Репутация:   7  


NAUGREEM,

а скажи-ка: а использовать JNI (т.е. то, что ты сделал в своем патче) можно только на рутованых девайсах или на любых?

UPD: Если есть желание поучаствовать, то в рассылке началось обсуждение возможности портирования для Android...
Я там и про тебя упомянул, не забыл :)

Сообщение отредактировал kuzulis - 1.8.2013, 16:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 4.8.2013, 17:55
Сообщение #74


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 1.8.2013, 16:26) *
NAUGREEM,

а скажи-ка: а использовать JNI (т.е. то, что ты сделал в своем патче) можно только на рутованых девайсах или на любых?

UPD: Если есть желание поучаствовать, то в рассылке началось обсуждение возможности портирования для Android...
Я там и про тебя упомянул, не забыл :)


я запускал на неломанных (планшет SONY и смартфон Phillips)

мне тут железку подогнали на андроиде 2.3 (API-10) - буду пробовать на ней по USB работать...

по поводу поучавствовать - готов отдать весь код, который имею, но если подочто-то подвязываться - то не могу гарантировать своевременной реакции...
как и тебе когда-то обещал что-то по тестировать, но так и не добрался...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 4.8.2013, 20:47
Сообщение #75


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

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

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




Репутация:   7  


NAUGREEM,

вот ссылка на баг-трекер где обсуждается добавление поддержки Андройда.

https://bugreports.qt-project.org/browse/QTBUG-32672

если можешь, пожалуйста, отпишись там, напиши свое видение проблемы и как там можно Андройд поддержать, т.к. ты, я смотрю, в теме. ;)

Мы пока сошлись (неофициально) на мнении, что использовать JNI не нужно. Можно просто "тупо" дергать Linux-овые вызовы.

Хотя я не уверен, что это будет работать без прав суперпользователя.


Кстати, а почему нельзя было использовать /dev/rfcomm напрямую, не используя вызовы JNI и т.п. в твоем патче?
Может быть потому, что через JNI можно узнать производителя, описание и т.п расширенную инфу?

Цитата
мне тут железку подогнали на андроиде 2.3 (API-10) - буду пробовать на ней по USB работать...


Да, это очень интересно. Т.к. я сам имею смартфон на 2.3. И недавно пробовал сбилдить QtSerialPort без примеров и тестов для Neccesitas (Qt4.8.2). В принципе, оно собралось с некоторыми исправлениями. Но другой парень (Laszlo) пробовал собирать в Qt5 - и у него совершенно другие ошибки вылезли.


В общем, если интересно и есть свободное время, то плз., ответь туда в трекер что-нибудь.. Ок? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 5.8.2013, 0:15
Сообщение #76


Студент
*

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

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




Репутация:   0  


Запостил комент про причину использования JNI в трэкер...

и да - на 2.3 я соединился по USB, но на поиске блютузных устройств у меня прога вылетала...

есть аддон для апи для поддержки блютуза, но я его ещё не пробовал...

Сообщение отредактировал NAUGREEM - 5.8.2013, 0:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 5.8.2013, 11:19
Сообщение #77


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

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

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




Репутация:   7  


Цитата(NAUGREEM)
Запостил комент про причину использования JNI в трэкер...


Ага, видел, спс.

Цитата(NAUGREEM)
и да - на 2.3 я соединился по USB,

подробнее можешь расскзать? а то я не понял :)

Цитата(NAUGREEM)
но на поиске блютузных устройств у меня прога вылетала...

в смысле? тоже подробнее расскажи что делал и как.

Цитата(NAUGREEM)
есть аддон для апи для поддержки блютуза, но я его ещё не пробовал...

Ты про QtBluetooth или QtConnectivity? Если да - то там вроде бы андроид не поддерживается..

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NAUGREEM
  опции профиля:
сообщение 5.8.2013, 21:11
Сообщение #78


Студент
*

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

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




Репутация:   0  


Цитата(kuzulis @ 5.8.2013, 12:19) *
подробнее можешь расскзать? а то я не понял :)

человек, который дал железку, собрал на ней ядро с поддержкой USB-Serial конвертора, и в системе видится /dev/ttyUSB0, и я к нему подключаюсть...
только права пришлось выставить...
на железке Android 2.3 (API Level 10)

Цитата(kuzulis @ 5.8.2013, 12:19) *
в смысле? тоже подробнее расскажи что делал и как.

на API-10 нету поддержки блютуза (она с 14-го только(Android 4)), если не ошибаюсь, и при обращении через JNI к этим функциям прога вываливалась...
проишлось закоментировать блок с JNI в qserialportinfo_android.cpp

Цитата(kuzulis @ 5.8.2013, 12:19) *
Ты про QtBluetooth или QtConnectivity? Если да - то там вроде бы андроид не поддерживается..

я про этот: http://code.google.com/p/backport-android-bluetooth/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Евген_*
сообщение 30.8.2013, 6:30
Сообщение #79





Гости








    


Доброго дня, есть проблема.

Большое асинхронное приложение, использующее QtSerialPort .. Qt 4.8.3. Запущено под Win8.
При работе с виртуальным COM-портом (по USB) вызывает регулярный БСОД.

Проблему только заявили, пока подробностей нет.

В описании QtSerialPort не заявлена поддержка Windows 8.

Посему вопрос - Как обстоят дела с совместимостью проекта с Вынь8 и какие там могут быть грабли?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 30.8.2013, 8:50
Сообщение #80


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


извините, что вмешиваюсь. просто есть большой опыт работы с разными девайсами.
софт такого уровня, как эта библиотека, вряд ли может вызвать BSOD.
но под вендами, начиная с vista и выше, есть множество проблем с USB драйверами. бывает, что венда впадает в BSOD во время выхода из слип-мода. соответственно, помогает отключение засыпания венды в настройках. также проверьте, что у вас банально хватает блока питания. USB может жрать до 0.5A и иногда этого достаточно для вырубания системы.
проверьте, что ваше устройство находится в списке поддерживаемых вендой (многие старые устройства просто не работают под новыми версиями венды). попробуйте обновить драйвер.
ну и фото BSOD'а (или хотя бы возвращаемый там код ошибки) лучше прикладывать. может, вообще визуализация падает (под вендой это тоже частенько бывает).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 30.8.2013, 10:30
Сообщение #81


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

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

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




Репутация:   7  


Цитата(Евген)
При работе с виртуальным COM-портом (по USB) вызывает регулярный БСОД.


Случайно чип не от Prolific, не PL2303? :)

Потому что при работе с PL2303 в разных терминалках мы тоже иногда получали BSOD, но это не относилось вообще к Qt.

Попробуй обновить дрова к своему виртуальному COM-порту.

Цитата(Евген)
В описании QtSerialPort не заявлена поддержка Windows 8.
Посему вопрос - Как обстоят дела с совместимостью проекта с Вынь8 и какие там могут быть грабли?


Все поддерживается и работает хорошо. Грабель не наблюдаем.. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Евген_*
сообщение 3.9.2013, 6:54
Сообщение #82





Гости








    


Цитата(kuzulis @ 30.8.2013, 10:30) *
Цитата(Евген)
При работе с виртуальным COM-портом (по USB) вызывает регулярный БСОД.


Случайно чип не от Prolific, не PL2303? :)

Потому что при работе с PL2303 в разных терминалках мы тоже иногда получали BSOD, но это не относилось вообще к Qt.

Попробуй обновить дрова к своему виртуальному COM-порту.

Цитата(Евген)
В описании QtSerialPort не заявлена поддержка Windows 8.
Посему вопрос - Как обстоят дела с совместимостью проекта с Вынь8 и какие там могут быть грабли?


Все поддерживается и работает хорошо. Грабель не наблюдаем.. :)


Выяснились некоторые подробности.
Чип Profilic PL2303.
БСОД видел, из описания понятно только, что ругалась винда на файл ser2pl64.sys.

После обновления драйверов вроде бы пока в норме, но тестовый период небольшой.
А в чем проблема была при этом чипе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 3.9.2013, 11:53
Сообщение #83


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

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

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




Репутация:   7  


Цитата(Евген @ 3.9.2013, 7:54) *
А в чем проблема была при этом чипе?


В BSOD! Там то-ли дрова кривые, толи еще что-то. Но это было под Win7 раньше.
После обновления на последние дрова (типа WDF), проблема вроде исчезла.

PS: Также есть еще одна фишка в том, что этот чип имеет разные модификации, и часто встречается модификация (самая дешёвая и древняя),
для которой нет дров для Win8 (т.е. эта модификация не поддерживается больше Пролификом). Там на сайте Prolific про это написано.
Поэтому помогает откат на старые драйвера (не старые, а самые последние) от Win7, т.е. они работают тоже в Win8. Но для этого нужно немного пошаманить. :)

Так что мой совет - используйте чип FTDIxxx (предпочтительнее) или CPxxx.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Евген_*
сообщение 4.9.2013, 6:40
Сообщение #84





Гости








    


Цитата(kuzulis @ 3.9.2013, 11:53) *
Цитата(Евген @ 3.9.2013, 7:54) *
А в чем проблема была при этом чипе?


В BSOD! Там то-ли дрова кривые, толи еще что-то. Но это было под Win7 раньше.
После обновления на последние дрова (типа WDF), проблема вроде исчезла.

PS: Также есть еще одна фишка в том, что этот чип имеет разные модификации, и часто встречается модификация (самая дешёвая и древняя),
для которой нет дров для Win8 (т.е. эта модификация не поддерживается больше Пролификом). Там на сайте Prolific про это написано.
Поэтому помогает откат на старые драйвера (не старые, а самые последние) от Win7, т.е. они работают тоже в Win8. Но для этого нужно немного пошаманить. :)

Так что мой совет - используйте чип FTDIxxx (предпочтительнее) или CPxxx.


Увы, выбор виртуальников заказчиками не в нашей власти .. там вообще - как повезет и что попадется.
Про дрова понятно, включили в поставку.
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
marsel
  опции профиля:
сообщение 4.9.2013, 15:38
Сообщение #85


Студент
*

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

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




Репутация:   0  


Здравствуйте kuzulis.

Подскажите пожалуйста возможно ли в QSerialPort из под Windows получить дескриптор (handle) com порта, который возвращает CreateFile.

Просто необходимо изменить время ожидания у микросхемы FTDI(Виртуальный com порт). У неё есть библиотека, с помощью которой можно изменить это время ожидания. Но необходим дескриптор (handle) com порта.

http://www.ftdichip.com/Support/Knowledgeb...atencytimer.htm

#include "ftd2xx.h"

FT_HANDLE ftHandle;
UCHAR LatencyTimer;//***Время ожидания

FT_SetLatencyTimer(ftHandle, LatencyTimer);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.9.2013, 18:58
Сообщение #86


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


marsel, уточни вопрос, при чём тут хендл порта ?

для изменения задержки нужен хендл устройства конвертера, установленного в системе
http://www.ftdichip.com/Support/Knowledgeb...atencytimer.htm

нужные функции можно вызвать, импортировав их из dll динамически



offtop
и как показала практика, напрямую библиотеку юзать нет необходимости. Устройство при подключении появляет в системе виртуальный ком-порт, его открываешь как обычно и как обычно с ним работаешь

кстати, в диспетчере устройств можно полазить по свойствам самого устройства (где-то в списке USB устройств). Сейчас под рукой нет, не могу точно сказать

Сообщение отредактировал Алексей1153 - 4.9.2013, 18:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
marsel
  опции профиля:
сообщение 5.9.2013, 9:35
Сообщение #87


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 4.9.2013, 19:58) *
marsel, уточни вопрос, при чём тут хендл порта ?

для изменения задержки нужен хендл устройства конвертера, установленного в системе
http://www.ftdichip.com/Support/Knowledgeb...atencytimer.htm

нужные функции можно вызвать, импортировав их из dll динамически



offtop
и как показала практика, напрямую библиотеку юзать нет необходимости. Устройство при подключении появляет в системе виртуальный ком-порт, его открываешь как обычно и как обычно с ним работаешь

кстати, в диспетчере устройств можно полазить по свойствам самого устройства (где-то в списке USB устройств). Сейчас под рукой нет, не могу точно сказать


Да handle устройства , наверно неправильно выразился.

Как вручную выставлять я знаю. Хотелось бы программно.

Если использовать WinAPI тогда всё понятно, но как это сделать используя QSerialPort

HANDLE descriptor; нужен из class QSerialPortPrivate.

Возможно ли его каким нибудь образом получить?

Кратко вопрос такой.
Как получить дескриптор устройства в QSerialPort (Windows)?
или
Как изменить время ожидания(FTDI) из QSerialPort ?



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.9.2013, 10:00
Сообщение #88


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


marsel, Qt к ОС в общем случае не привязан. Драйвер относится к системе, а класс работает с абстракцией - интерфейсом ком порта

так что, сомневаюсь, что класс умеет менять настройки драйвера
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 5.9.2013, 10:24
Сообщение #89


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

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

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




Репутация:   7  


Непонятен вопрос какое HANDLE необходимо.

1) Если необходим HANDLE последовательного порта, который получается при CreateFile("COMxx",...), то эта фича выйдет в Qt5.2 (если не ошибаюсь).

Ты можешь подождать или скачать исходники QtSerialPort, где эта фича присутствует, и пересобрать самостоятельно.

Вот принятый патч: https://codereview.qt-project.org/#change,51862

Исходники качаешь через Git и потом переключаешься в dev бранч, т.к. эта фича находится именно в dev бранче и еще не вышла. И наслаждаешься. :)

2) Если необходим HANDLE, который предоставляется вендор-специфичной либой от FTDI, то тут увы, QtSerialPort не имеет к этому никакого отношения. Делай все сам.


UPD: Но тебе нужен п.2., я так понимаю, поэтому я тут ничего не сделаю, т.к. это совершенно другое API от FTDI.

UPD2: Кроме того, ты можешь установить этот таймаут раз и навсегда, просто перепрошив EEPROM у чипа, и не нужно мучаться (вроде оно возможно, погугли).

Сообщение отредактировал kuzulis - 5.9.2013, 10:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 9.10.2013, 10:15
Сообщение #90


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

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

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




Репутация:   4  


Жаль, что errorString() не перегружена для QSerialPort... по крайней мере в QT-4.8.4 .
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 9.10.2013, 17:56
Сообщение #91


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

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

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




Репутация:   7  


Цитата(Анна @ 9.10.2013, 11:15) *
Жаль, что errorString() не перегружена для QSerialPort... по крайней мере в QT-4.8.4 .


А, простите, зачем это нужно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.10.2013, 9:18
Сообщение #92


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Анна, произведи класс от QSerialPort и перегрузи :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 21.10.2013, 8:12
Сообщение #93


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

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

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




Репутация:   4  


Цитата(kuzulis @ 9.10.2013, 18:56) *
Цитата(Анна @ 9.10.2013, 11:15) *
Жаль, что errorString() не перегружена для QSerialPort... по крайней мере в QT-4.8.4 .


А, простите, зачем это нужно?

В смысле, зачем нужно? А зачем тогда нужна errorString()? Хотя бы для какого-то единообразия. У меня три приложения работают с компортом, а у напарника с десяток, наверное. Хотелось бы, чтобы об одной и той же ошибке все приложения сообщали одинаковую информацию. Приходится таскать за собой довесок. К тому же как раз ради удобной обёртки и взяла этот класс. До этого пользовалась доморощенными методами.

Цитата(Алексей1153 @ 14.10.2013, 10:18) *
Анна, произведи класс от QSerialPort и перегрузи :)


Кеп, ты? ;)
Но, вообще, перегружать класс ради сообщений об ошибке не смешно.


Кстати, хотела узнать, под Линуксом никаких проблем с работой QSerialPort порта нету? Мне ещё предстоит линуксоида убедить перейти на этот класс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 21.10.2013, 9:59
Сообщение #94


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

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

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




Репутация:   7  


Цитата(Анна)
В смысле, зачем нужно? А зачем тогда нужна errorString()? Хотя бы для какого-то единообразия. У меня три приложения работают с компортом, а у напарника с десяток, наверное. Хотелось бы, чтобы об одной и той же ошибке все приложения сообщали одинаковую информацию. Приходится таскать за собой довесок. К тому же как раз ради удобной обёртки и взяла этот класс. До этого пользовалась доморощенными методами.


Можно конкретный пример? Что не устраивает то конкретно?

Любые предложения приветствуются. :)

Цитата(Анна)
Кстати, хотела узнать, под Линуксом никаких проблем с работой QSerialPort порта нету? Мне ещё предстоит линуксоида убедить перейти на этот класс.


При использовании signal/slot (неблокирующего подхода) не должно быть проблем. Но при waitForXX() могут выплыть проблемки.. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 21.10.2013, 13:44
Сообщение #95


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

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

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




Репутация:   4  


Цитата(kuzulis @ 21.10.2013, 10:59) *
Цитата(Анна)
В смысле, зачем нужно? А зачем тогда нужна errorString()? Хотя бы для какого-то единообразия. У меня три приложения работают с компортом, а у напарника с десяток, наверное. Хотелось бы, чтобы об одной и той же ошибке все приложения сообщали одинаковую информацию. Приходится таскать за собой довесок. К тому же как раз ради удобной обёртки и взяла этот класс. До этого пользовалась доморощенными методами.


Можно конкретный пример? Что не устраивает то конкретно?

Любые предложения приветствуются. :)

Цитата(Анна)
Кстати, хотела узнать, под Линуксом никаких проблем с работой QSerialPort порта нету? Мне ещё предстоит линуксоида убедить перейти на этот класс.


При использовании signal/slot (неблокирующего подхода) не должно быть проблем. Но при waitForXX() могут выплыть проблемки.. ;)


Конкретно, когда от порта приходит сигнал об ошибке (любой, например, у меня бывает плохой контакт между портом и железякой, тогда всё время валится ошибка 6 (очень облегчила мне жизнь в выяснении, кто виноват)), хочу расшифорвать его пользователю, а errorString() возвращает всегда "Unknown error". У меня ещё сверху добавляется свой анализ полученного из порта, так что проблему решила, просто добавив к "своим ошибкам" расшифорвку ошибок из хелпа, но у меня есть приложения, где хотелось бы использовать ваш класс в чистом виде, а не городить заплатку. Насколько я поняла, всего лишь нужно было в тех местах, где генерится сигнал error(), вызывать перед этим setErrorString() с соответствующим текстом.

Про Линукс, спасибо, что предупредили. У меня есть места, где waitFor... используются. Буду переделывать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 21.10.2013, 16:18
Сообщение #96


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

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

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




Репутация:   7  


Цитата
тогда всё время валится ошибка 6


Это которая BreakConditionError ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DruidCat
  опции профиля:
сообщение 21.10.2013, 17:19
Сообщение #97


Новичок


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

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




Репутация:   0  


http://qt-project.org/doc/qt-5.1/qtserialp...alportinfo.html
Хотелось бы задать вопрос, извините, если он будет глупым, я только учусь.
Мне хотелось бы проверять на занятость сом порты, в документации я нашел #include <QSerialPortInfo> с методом isBusy(), который возвращает bool. А как им пользоваться я не знаю. Я учу Qt меньше месяца, читаю учебник, и бегу вперед паровоза. Охота быстрей и быстрей написать свою программу. Я смотрел примеры по применению QSerialPortInfo, и не понял их, так как такие способы программирования я еще не знаю. Не могли бы привести небольшой наглядный кусочек кода, где понятно, как пользоваться методом isBusy(), желательно в if. Мне хотелось бы проверять определенные сом порты на занятость и если эти порты заняты, производить с ними определенные манипуляции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 21.10.2013, 17:53
Сообщение #98


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

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

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




Репутация:   7  


Если не знаешь какой порт нужен - то просто перечисляешь и выбираешь из списка нужный и проверяешь его:

foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
{
    if (serialPortInfo.isBusy())
        qDebug() << "Port " << serialPortInfo.portName() << " is busy";
    else 
        qDebug() << "Port " << serialPortInfo.portName() << " is free";
}


или

Если знаешь какой нужен то прямо его и проверяешь:

QString portName("COM1");

QSerialPortInfo serialPortInfo(portName);

if (serialPortInfo.isBusy())
    qDebug() << "Port " << serialPortInfo.portName() << " is busy";
else 
    qDebug() << "Port " << serialPortInfo.portName() << " is free";


UPD: А еще смотри примеры, которые идут вместе с QtSerialPort в директории /examples:

* cenumerator - консольный пример
* enumerator - GUI пример

Сообщение отредактировал kuzulis - 21.10.2013, 17:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.10.2013, 19:42
Сообщение #99


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Тему разделил: DCTerminal - Моя первая Qt-программа
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 28.10.2013, 15:25
Сообщение #100


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

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

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




Репутация:   4  


Цитата(kuzulis @ 21.10.2013, 16:18) *
Цитата
тогда всё время валится ошибка 6


Это которая BreakConditionError ?

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

14 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.6.2025, 4:47