Serial IO die vierhundertzwölfte
-
Hallo zusammen,
Will man das auf DSR CTS erweitern gibt es einen blue Screen.
Man muss dann auch noich dieses Event verarbeiten, gibt es examples ?bool CSerialIO::Create(int comport, int baud,SERCALLBACK pC,DWORD UserDat) { if (!pC || !comport || !baud) return false; Delete(); CString comStr; comStr.Format("COM%d",comport); if( (m_ComDev = ::CreateFile(comStr, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL) ) == INVALID_HANDLE_VALUE) return false; //EV_RXCHAR|EV_BREAK|EV_CTS|EV_DSR|EV_ERR|EV_RING|EV_RLSD|EV_RXCHAR|EV_RXFLAG|EV_TXEMPTY; if (!::SetCommMask(m_ComDev, EV_RXCHAR))// | EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY)) return false; DCB Dcb; Dcb.DCBlength = sizeof(Dcb); Dcb.BaudRate = baud; // Dcb.fBinary = TRUE; // Dcb.fParity = FALSE; // enable parity checking Dcb.fOutxCtsFlow = FALSE; // CTS output flow control Dcb.fOutxDsrFlow = FALSE; // DSR output flow control Dcb.fDtrControl = DTR_CONTROL_DISABLE;//DTR_CONTROL_DISABLE;//DTR_CONTROL_HANDSHAKE; // DTR flow control type Dcb.fDsrSensitivity = FALSE; // DSR sensitivity Dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx Dcb.fOutX = FALSE; // XON/XOFF out flow control Dcb.fInX = FALSE; // XON/XOFF in flow control Dcb.fErrorChar = FALSE; // enable error replacement Dcb.fNull = NULL; // enable null stripping Dcb.fRtsControl = RTS_CONTROL_DISABLE;//RTS_CONTROL_ENABLE;//RTS_CONTROL_DISABLE;//RTS_CONTROL_TOGGLE;//RTS_CONTROL_HANDSHAKE; // RTS flow control Dcb.fAbortOnError = FALSE; // abort on error Dcb.fDummy2 = 0; // reserved Dcb.wReserved = 0; // not currently used Dcb.XonLim = 0; // transmit XON threshold Dcb.XoffLim = 0; // transmit XOFF threshold Dcb.ByteSize = 8; // number of bits/byte, 4-8 Dcb.Parity = NOPARITY; // 0-4=no,odd,even,mark,space Dcb.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2 Dcb.XonChar = 0; // Tx and Rx XON character Dcb.XoffChar = 0; // Tx and Rx XOFF character Dcb.ErrorChar = 0; // error replacement character Dcb.EofChar = 0; // end of input character Dcb.EvtChar = 0; // received event character Dcb.wReserved1 = 0; // reserved; do not use if(!::SetCommState( m_ComDev, &Dcb ) ) return false; if(!::SetupComm(m_ComDev, BUFFSIZE,BUFFSIZE)) return false; if(!::PurgeComm(m_ComDev,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR)) return false; m_pcallback = pC; m_UserDat = UserDat; COMMTIMEOUTS CommTimeOuts; GetCommTimeouts(m_ComDev, &CommTimeOuts); CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 0; COMMPROP prop={0}; if(!::GetCommProperties(m_ComDev,&prop))//how many bytes in quuee dont work frequently in thread ! return false; if(!::SetCommTimeouts(m_ComDev, &CommTimeOuts )) return false; m_Thread.Start(ComLoop, this, THREAD_PRIORITY_NORMAL); return true; }
-
Achromat schrieb:
Hallo zusammen,
Will man das auf DSR CTS erweitern gibt es einen blue Screen.Hab ich nie zusammengebracht. Zeig mal.
Achromat schrieb:
Man muss dann auch noich dieses Event verarbeiten, gibt es examples ?
Ja, klar. Haufenweise. Für was genau?
-
Naja das habe ich zu früh gepostet,
mal sehen .. nervige Sache..
xor xoff dazu gekommen, schon klappt das Kartenhaus zusammen böse Falle..Ich fang nochmal von vorne an Stichwort CSerial.cpp
-
Hat zwar mit deiner Frage nicht direkt zu tun, aber weil's ein Problem ist über das viele stolpern: Mit
"COM%d"
bekommst du abCOM10
ein Problem:
https://support.microsoft.com/en-us/help/115831/howto-specify-serial-ports-larger-than-com9
-
Danke , Problem löste sich das Signal bewarten war falsch, das mit com10 habe ich auch schoin bemerkt.. und einige dongels melden sich da gerne drauf an.