Название: Windows Sockets Support for Bluetooth Отправлено: juvf от Сентябрь 21, 2016, 11:20 пытаюсь общаться с устройством через БТ. Использую winsock2
создаю сокет, вызываю коннект - всё нормально. связь устанавливается. далее посылаю пакет и пытаюсь вычитать... Код: char array[100] = {0x80, 8, 0xff, 0x7f, 2, 0x27}; iResult = ::send(sock, array, 8, 0); и дальше пошагово пройти, то все функции (send, shutdown и recv) выполняются нормально и я ответ получаю. если непошагово, то ответа нет. если между send, shutdown и recv поставить секундные паузы, то тоже всё нормально работает. Почему без пауз не работает? Название: Re: Windows Sockets Support for Bluetooth Отправлено: Old от Сентябрь 21, 2016, 11:28 Потому что это не работает мгновенно. Вы отправили пакет, пока он дойдет это время, потом устройство должно сформировать ответ и отправить его - это еще время.
Вам нужно не сразу читать, а подождать пока придет ответ и только после этого его вычитывать. Или использовать блокирующее чтение, тогда оно будет ждать ответа само. Но если он вообще не придет, то это чтение прервать получиться только сигналом. Название: Re: Windows Sockets Support for Bluetooth Отправлено: juvf от Сентябрь 21, 2016, 11:37 при работе с компорттом использую АПИ от винды
Код: WriteFile(port, array, 2,&BytesCnt,NULL); как в сокетах БТ этого добиться? как сделать блокирующую отправку или блокирующее чтение? Название: Re: Windows Sockets Support for Bluetooth Отправлено: kuzulis от Сентябрь 21, 2016, 12:03 Цитировать как сделать блокирующую отправку или блокирующее чтение? Установить сокету соответствующие аттрибуты/флаги чтобы он стал блокирующим, не? Цитировать как в сокетах БТ этого добиться? Использовать нотификацию что сообщение доставлено / принято. Я бы, раз уж используется WinSock, и использовал бы его АПИ, а не POSIX прослойку. И мониторил бы эвенты на дескрипторе через QWinEventNotifier/QWinIoOverlappedNotifier. Если уж так нужна POSIX прослойка, то мониторил бы через QSocketNotifier. Хотя, если дать сокету нужные аттрибуты, то нет необходимости в нотификациях, т.к. весь I/O будет блокирующим, ИМХО. PS: Это, если используется Qt Название: Re: Windows Sockets Support for Bluetooth Отправлено: juvf от Сентябрь 21, 2016, 12:54 Установить сокету соответствующие аттрибуты/флаги чтобы он стал блокирующим, не? |