Re[2]: COMPORT ошибка последнего байта
От: 0x64Rm  
Дата: 13.11.03 09:04
Оценка:
DAY>Ставишь ли ты явно таймауты ? если нет то почитай в MSDN статью "Configuring Time-Outs"

ставлю, ставлю явно. вот последний вариант. перепробовано много вариантов установки структуры COMMTIMEOUTS

    COMMTIMEOUTS ctmoCommPort;            
    if(!GetCommTimeouts(hComPort, &ctmoCommPort)) return GetLastError();
    ctmoCommPort.ReadIntervalTimeout        = MAXDWORD;
    ctmoCommPort.ReadTotalTimeoutConstant        = 1;
    ctmoCommPort.ReadTotalTimeoutMultiplier        = 1;
    ctmoCommPort.WriteTotalTimeoutConstant        = 0;
    ctmoCommPort.WriteTotalTimeoutMultiplier    = 0;
    if(!SetCommTimeouts(hComPort, &ctmoCommPort)) return GetLastError();


Еще ошибки нет, когда читаю по 1 байту, т.е. по приходу 1 байта на порт сразу его забираю

Примерно так читаю (много кода уже порезал...)

DWORD CComPort::ReadFromPort(LPCVOID buffer, DWORD lenght)
{
    if(!hComPort) return -1;

    DWORD Tmp = 0;
    DWORD Cnt = 0;

    memset((void*) buffer, 77, lenght); // debug

    byte *pB = (byte*) buffer;
    byte p = 0;

    while(Cnt < lenght)
    {
        DWORD res = ReadFile(hComPort, &p, 1, &Tmp, NULL);    
//        Sleep(10);
        if(Tmp)
        {
            pB[Cnt] = p;
            Cnt +=Tmp;
        }
    };
    return 0;
}
с уважением,
Алексей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.