21. december 2001 - 10:25Der er
1 kommentar og 2 løsninger
Kommunikation -med ...Haster !!
Jeg er ved at lave et lille program i MFC til at undersøge streng-værdier.
Dog har jeg ikke kunnet finde info omkring, hvor der findes en klasse, som man kan benytte seriel kommunikation. Det jeg har behov for er enten at polle eller interrupt styret at læse en værdi fra UART\'en.
Du kan bruge CreateFile til at få adgang til COM porte, her er lidt upklip af kode at kigge i... håber ikke det fucker up (szPort = \"COM1\" ):
class Serial_IO : public CFrameBuffer { public: CString GetConnectionStr(); void ClearBuffer(); int ReadData( void *pBuffer, int nLimit ); int SendData( const unsigned char *pBuffer, int nSize );
// read call blocks until data, write returns after a timeout of 5 secs or when data was written to port COMMTIMEOUTS CommTimeOuts; CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 5000; SetCommTimeouts( m_hIDComDev, &CommTimeOuts );
int Serial_IO::SendData( const unsigned char *pBuffer, int nSize ) { BOOL bWriteStat; DWORD dwBytesWritten = 0;
// if port open and device valid if( (m_bPortOpen) && (m_hIDComDev != NULL) ) { // write data to port bWriteStat = WriteFile( m_hIDComDev, pBuffer, nSize, &dwBytesWritten, NULL );
// if successful if( !bWriteStat ) { // tell failure AfxMessageBox( \"Failed to send data to serial port\" ); ASSERT( NULL ); } }
// return bytes written to port return (int)dwBytesWritten; }
int Serial_IO::ReadData( void *pBuffer, int nLimit ) { BOOL bReadStatus; DWORD dwBytesRead = 0, dwErrorFlags; COMSTAT ComStat;
// if port open and device valid if( (m_bPortOpen) && (m_hIDComDev != NULL) ) { // clear any comm errors and get bytes in IN cue ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
// bytes in IN cue dwBytesRead = (DWORD) ComStat.cbInQue;
// if more bytes in que than space in buffer supplied, limit reading to max buffer space if( nLimit < (int)dwBytesRead ) dwBytesRead = (DWORD)nLimit;
Kanon med CodeGuru -til at bygge videre på klassen..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.