Basic Serial I/O in VC++
-
I have limited VC++ experience. I have used C and other languages a lot. I need to communicate with a serial device from a VC++ Dialog application, which I am developing. How do I do this? Thank you, Joe Massarelli
I posted this reply (incorrectly - the guy was asking about a parrallel port...) this morning. Mostly like reading and writing a file: (EXAMPLE - your mileage may vary...) void CSerialPort::initPort(int comNumber, int baudRate) { closePort(); m_ComNumber = comNumber; m_BaudRate = baudRate; CString comStr; comStr.Format(_T("%s%d"), _T("COM"), comNumber); m_ComHandle = CreateFile(comStr, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); DCB dcb; GetCommState(m_ComHandle, &dcb); dcb.BaudRate = m_BaudRate; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(m_ComHandle, &dcb); COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 0; SetCommTimeouts(m_ComHandle, &timeouts); EscapeCommFunction(m_ComHandle, SETRTS); EscapeCommFunction(m_ComHandle, SETDTR); } bool CSerialPort::readByteFromChannel(char* inByte) { DWORD numRead; BOOL ret = true; ret = ReadFile(m_ComHandle, inByte, 1, &numRead, 0); return ( (ret) && (numRead == 1) ); } void CSerialPort::sendPacket(char* pktBuffer, int len) { DWORD numWritten; WriteFile(m_ComHandle, pktBuffer, len, &numWritten, 0); if (numWritten != (DWORD)len) // do comm error handling here }
-
I posted this reply (incorrectly - the guy was asking about a parrallel port...) this morning. Mostly like reading and writing a file: (EXAMPLE - your mileage may vary...) void CSerialPort::initPort(int comNumber, int baudRate) { closePort(); m_ComNumber = comNumber; m_BaudRate = baudRate; CString comStr; comStr.Format(_T("%s%d"), _T("COM"), comNumber); m_ComHandle = CreateFile(comStr, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); DCB dcb; GetCommState(m_ComHandle, &dcb); dcb.BaudRate = m_BaudRate; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(m_ComHandle, &dcb); COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 0; SetCommTimeouts(m_ComHandle, &timeouts); EscapeCommFunction(m_ComHandle, SETRTS); EscapeCommFunction(m_ComHandle, SETDTR); } bool CSerialPort::readByteFromChannel(char* inByte) { DWORD numRead; BOOL ret = true; ret = ReadFile(m_ComHandle, inByte, 1, &numRead, 0); return ( (ret) && (numRead == 1) ); } void CSerialPort::sendPacket(char* pktBuffer, int len) { DWORD numWritten; WriteFile(m_ComHandle, pktBuffer, len, &numWritten, 0); if (numWritten != (DWORD)len) // do comm error handling here }
and how 'bout usb port? rIsHaBh
-
and how 'bout usb port? rIsHaBh
Don't know - haven't had to do them yet but I think they are treated the same as basic serial ports.