IBAH (25.09.2018 13:40, просмотров: 3832)
Не могу победить WinAPI для Ком-порта! Задача- хочу функции "читай байт" из порта "писать байт в порт", решил начать с писать открываю порт
handle = CreateFile
(
port,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if(handle == INVALID_HANDLE_VALUE) {return FALSE; }
if(!SetupComm(handle, SizeBuffer, SizeBuffer)) {return FALSE; }
if(!GetCommState(handle, &dcb)) {return FALSE; }
dcb.BaudRate = BaudRate;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;//DTR_CONTROL_HANDSHAKE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = ByteSize;
dcb.Parity = Parity;
dcb.StopBits = StopBits;
if(!SetCommState(handle, &dcb)){return FALSE; }
if(!GetCommTimeouts(handle, &CommTimeOuts)) {return FALSE; }
CommTimeOuts.ReadIntervalTimeout = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(handle, &CommTimeOuts)) {return FALSE; }
пытаюсь писать в порт
Put('Q');
Put('W');
Put('E');
Put('R');
где
void Put(unsigned char a)
{
unsigned char tmp=a;
unsigned long tmp2;
ClearCommError(handle, &tmp2, &ComState);
WriteFile(handle, &a, 1, &tmp2, &Overlap);
}
на выходе вижу только букву Q и тишина...
Игрался с таймаутами, таймауты записи ни на что не влияют! Меняешь таймауты чтения, Выскакивает QR, или QW
Что я делаю не так!?