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

Ваш аккаунт

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

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

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

запись и чтение из COM port'a

31K
28 сентября 2007 года
c@vy
4 / / 20.09.2007
запись и чтение из COM port'a

пытаюсь послать АТ команду модему
WriteFile завершается успешно.

если использовать
SetCommMask (hCOM, EV_RXCHAR);

то WaitCommEvent не завершается вообще...

без SetCommMask
WaitCommEvent завершается успешно
ReadFile завершается успешно, но так ничего и не прочитав!

в чем может быть проблема, и как все таки получить ответ?...
31K
28 сентября 2007 года
c@vy
4 / / 20.09.2007
вот что я делаю:
Код:
HANDLE hCOM=CreateFile(Port.c_str(), GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0, NULL);

        if (hCOM!=INVALID_HANDLE_VALUE)
        {
            printf("OK\n");
           
            COMMTIMEOUTS cto;
                cto.ReadIntervalTimeout = 1000;
                cto.ReadTotalTimeoutConstant = 1000;
                cto.ReadTotalTimeoutMultiplier = 1000;
                cto.WriteTotalTimeoutConstant = 1000;
                cto.WriteTotalTimeoutMultiplier = 1000;
                SetCommTimeouts(hCOM, &cto);

            PurgeComm(hCOM,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
    //      SetCommMask (hCOM, EV_RXCHAR);

            string c="ATI1\r" ;
            printf("Sending %s\n", c.c_str());

            DWORD nb = 1;
            OVERLAPPED ov;
            ZeroMemory( &ov , sizeof( OVERLAPPED )) ;

            ov.hEvent = CreateEvent( NULL , TRUE , FALSE , NULL ) ;
           
            DCB dcb;
            GetCommState(hCOM,&dcb);
            BuildCommDCB("baud=9600 parity=n data=8 stop=1", &dcb);

           
            BOOL res = WriteFile(hCOM,c.c_str(),c.length(),&nb,&ov);
            printf("WriteFile %i\n", res);

            DWORD MASK = EV_RXCHAR;
            DWORD *Mask = &MASK;
       
            int result = WaitCommEvent(hCOM, Mask, &ov);
       
            printf("WaitCommEvent %i\n", result);
       
           
            char* ans[100];
            ans[0] = '\0';

            nb=1;
            BOOL ReadRes = ReadFile(hCOM, ans, 1, &nb, &ov);

            printf("ReadFile %i\n", ReadRes);

            if (!ReadRes)
            {
                if (GetLastError()==ERROR_IO_PENDING)
                {
                        DWORD resW =WaitForSingleObject(ov.hEvent, 10000);
                        if (resW!=WAIT_OBJECT_0) printf ("TIMEOUT\n");
                        printf("WaitForSingleObject %i\n", ReadRes);
                        ReadRes = GetOverlappedResult(hCOM, &ov, &nb, 0);
                        printf("OverlappedResult %i\n", ReadRes);
                }
            }
       
            if (!ReadRes) printf("Last Error %i\n", GetLastError());

            printf("ReadFile %i\n", ReadRes);
           
            ans[nb] = '\0';
            printf("Answer %s\n", ans);

            CloseHandle(hCOM);
        }
        else printf ("         Couldn't connect to COM port\n");
31K
28 сентября 2007 года
c@vy
4 / / 20.09.2007
OK
Sending ATI1
WriteFile 1
WaitCommEvent 1
ReadFile 1
ReadFile 1
Answer
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог