Компьютерный форум

Компьютерный форум (http://www.hardforum.ru/)
-   Железо. Написание драйверов (http://www.hardforum.ru/f169/)
-   -   Работа с Com портом. Windows не сбрасывает событие (http://www.hardforum.ru/t60947/)

Shopot 24.08.2005 11:52

Работа с Com портом. Windows не сбрасывает событие
 
Я открываю порт для в/в так:

Код:

        Comm2 = CreateFile (cbComm2->Text.c_str(), GENERIC_WRITE | GENERIC_READ,
                0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

        if (Comm2 == INVALID_HANDLE_VALUE)
        {
                ShowMessage("Ошибка открытия порта " + cbComm2->Text);
                return;
        }

        if (!SetCommMask(Comm2, EV_RXCHAR))
        {
                ShowMessage("Ошибка " + cbComm2->Text);
                CloseHandle(Comm2);
                return;
        }

        o2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

        assert(o2.hEvent);

        t2 = CreateThread(NULL, 1024, funcComm2, Handle, 0, &t2_ID);

DWORD WINAPI funcComm2(LPVOID Param)
{
        DWORD EvMask1 = 0, NumRead; char Data;

        for (;;)
        {
                if (WaitCommEvent(Comm2, &EvMask1, &o2) == 0)
                {
                        if (EvMask1 & EV_RXCHAR)
                        {
                                ReadFile(Comm2, &Data, sizeof (char),
                                        &NumRead, &o2);
                                frmComm->mState2->Lines->Add(Data);
                        }
                }
        }
}

Но вот тут и проблема. Когда в другой порт записываю (нуль модемный кабель) допустим в COM1 "12345", то в COM2 появляется такое "12345555555555...". А мне надо только "12345". Подскажите пожалуйста что делать?

Shadow_Replicant 24.08.2005 20:01

Re: Работа с Com портом. Windows не сбрасывает событие.
 
Цитата:

Originally posted by Shopot
[b]
Код:

DWORD WINAPI funcComm2(LPVOID Param)
{
        DWORD EvMask1 = 0, NumRead; char Data;

        for (;;)
        {
                if (WaitCommEvent(Comm2, &EvMask1, &o2) == 0)
                {
                        if (EvMask1 & EV_RXCHAR)
                        {
                                ReadFile(Comm2, &Data, sizeof (char),
                                        &NumRead, &o2);
                                frmComm->mState2->Lines->Add(Data);
                        }
                }
        }
}


Что-то я не понял http://www.hardforum.ru/images/smili...icon_upset.gif , почему у тебя читает с порта, из ВинАпи :
BOOL WaitCommEvent(

HANDLE hFile, // handle of communications device
LPDWORD lpEvtMask, // address of variable for event that occurred
LPOVERLAPPED lpOverlapped, // address of overlapped structure
);
....
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Так что странное у тебя сравнение
Код:

if (WaitCommEvent(Comm2, &EvMask1, &o2) == 0)
З.Ы. Я с Ком-портом только один раз работал, так что не бейте сильно, если я не прав http://www.hardforum.ru/images/smili.../icon_wink.gif


Часовой пояс GMT +4, время: 15:48.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.