Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ReadFile не читает по Bluetooth

16K
23 февраля 2007 года
c0deab1e
2 / / 18.03.2006
Ситуация такая. Мобильный телефон соединён с PC через Bluetooth. То, что PC посылает на телефон, телефон нормально получает. После отправляет ответ (со стороны телефона без ошибок, всё нормально уходит), а вот на PC ReadFile ничего не читает и вываливается по таймауту. Если соединять PC и телефон через кабель USB, то тот же самый код работает нормально. Почему такое может быть?

Код:
#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;
}
261
25 февраля 2007 года
ahilles
1.5K / / 03.11.2005
сильно в код не вчитывался......
тебе надо законнектиться к мобиле через сервис серийные порты, а при вызове createfile надо указывать соответствующий порт
16K
25 февраля 2007 года
c0deab1e
2 / / 18.03.2006
Так я законнектился, всё нормально. И туда отсылаю, телефон всё принимает и шлёт ответ. А вот ответ как раз я и не получаю, отваливаюсь по таймауту.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог