#include <stdio.h>
#pragma pack(push,1)
#include <windows.h>
#pragma pack(pop)
HANDLE hDev;
DWORD dwRc;
DWORD dwBytes;
OVERLAPPED ovrlpd;
int send(const char *buf, int bufLen)
{
int rc = 1;
if (!WriteFile(hDev, buf, bufLen, &dwBytes, &ovrlpd))
{
if ((dwRc = GetLastError()) != ERROR_IO_PENDING)
{
printf("error writing: 0x%08X\n", dwRc);
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
rc = 0;
}
else
{
switch(WaitForSingleObject(ovrlpd.hEvent, INFINITE))
{
case WAIT_OBJECT_0:
if (!GetOverlappedResult(hDev, &ovrlpd, &dwBytes, FALSE))
{
printf("error in GetOverlappedResult (write): %u\n",
GetLastError());
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
rc = 0;
}
else
break;
default:
printf("error in WaitForSingleObject (write): %u\n",
GetLastError());
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
rc = 0;
}
}
}
ResetEvent(ovrlpd.hEvent);
return rc;
}
int main()
{
char buf[4096];
memset(&ovrlpd, 0, sizeof(ovrlpd));
ovrlpd.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (ovrlpd.hEvent == NULL)
{
printf("error creating overlapped semaphore\n");
return 1;
}
hDev = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
if (hDev == INVALID_HANDLE_VALUE)
{
printf("error opening port: 0x%08X\n", GetLastError());
CloseHandle(ovrlpd.hEvent);
return 1;
}
send("\x35\x12\x0C\x10\xFF\x80\x00\x00", 8);
if (!ReadFile(hDev, buf, sizeof(buf), &dwBytes, &ovrlpd)) {
if ((dwRc = GetLastError()) != ERROR_IO_PENDING)
{
printf("error reading: 0x%08X\n", dwRc);
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
return 1;
}
else
{
switch(WaitForSingleObject(ovrlpd.hEvent, 1000*10))
{
case WAIT_OBJECT_0:
if (!GetOverlappedResult(hDev, &ovrlpd, &dwBytes, FALSE))
{
printf("error in GetOverlappedResult (read): 0x%08X\n",
GetLastError());
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
return 1;
}
else
break;
case WAIT_TIMEOUT:
printf("reading timeout\n");
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
return 1;
default:
printf("error in WaitForSingleObject (read): 0x%08X\n",
GetLastError());
CloseHandle(ovrlpd.hEvent);
CloseHandle(hDev);
return 1;
}
}
}
printf("got result: ");
for (DWORD i = 0; i < dwBytes; i++)
printf("%c", buf);
printf("\n");
return 0;
}
ReadFile не читает по Bluetooth
Ситуация такая. Мобильный телефон соединён с PC через Bluetooth. То, что PC посылает на телефон, телефон нормально получает. После отправляет ответ (со стороны телефона без ошибок, всё нормально уходит), а вот на PC ReadFile ничего не читает и вываливается по таймауту. Если соединять PC и телефон через кабель USB, то тот же самый код работает нормально. Почему такое может быть?
тебе надо законнектиться к мобиле через сервис серийные порты, а при вызове createfile надо указывать соответствующий порт
Так я законнектился, всё нормально. И туда отсылаю, телефон всё принимает и шлёт ответ. А вот ответ как раз я и не получаю, отваливаюсь по таймауту.