Скачал где то исходник класса для работы с COM портом, немного переписал, порт открывается, но функцией WriteFile не пишется.
Открытие порта bool CComPort::Open(LPCTSTR port, DWORD BaudRate, byte ByteSize, byte Parity, byte StopBits){ handle = CreateFile ( port, GENERIC_READ | GENERIC_WRITE, NULL, 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 ; 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 = TimeoutInterval; CommTimeOuts.ReadTotalTimeoutMultiplier = TimeoutChar; CommTimeOuts.ReadTotalTimeoutConstant = TimeOutWait; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 0; if(!SetCommTimeouts(handle, &CommTimeOuts)){ return false; };
ResetRB(); ResetWB(); return true; };
Запись в порт unsigned short CComPort::Write(byte *buffer, unsigned short numbytes){ DWORD temp; if(numbytes){ ClearCommError(handle, &temp, &ComState); if((numbytes + ComState.cbOutQue)>=SizeBuffer) MessageBox(NULL, "Íåâîçìîæíî ïîìåñòèòü â âûõîäíîé áóôåð ", "", MB_OK); boolean result=WriteFile(handle, buffer, numbytes, &temp, &Overlap); if(result){ return (unsigned short)temp; }; }; return 0; };
Возвращает 0, и количество отправленных байтов 0.
Инициализация открытия порта if(Open("COM1", CBR_57600, DATABITS_8, EVENPARITY, ONESTOPBIT)) MessageBox(NULL, "COM1 Îòêðûò", "Îòêðûò!" , MB_OK); else MessageBox(NULL, "COM1 íåâîçìîæíî îòêðûòü!", "Îøèáêà!" , MB_OK);
|