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 ab COM10 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.


Anmelden zum Antworten