Re: Serial Communication in Visual C++
HyperTerminal readout:
26294 0.00004582 hypertrm.exe IRP_MJ_CREATE Serial1 SUCCESS Options: Open
26295 0.00000531 hypertrm.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial1 SUCCESS
InSize: 8192 OutSize: 8192
26296 0.00000112 hypertrm.exe IOCTL_SERIAL_CONFIG_SIZE Serial1 SUCCESS Size:
0
26297 0.00000112 hypertrm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial1 SUCCESS
26298 0.00000112 hypertrm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial1 SUCCESS
26299 0.00000112 hypertrm.exe IOCTL_SERIAL_GET_CHARS Serial1 SUCCESS
26300 0.00000112 hypertrm.exe IOCTL_SERIAL_GET_HANDFLOW Serial1 SUCCESS
26301 0.00000084 hypertrm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial1 SUCCESS
26302 0.00000084 hypertrm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial1 SUCCESS
26303 0.00000112 hypertrm.exe IOCTL_SERIAL_GET_CHARS Serial1 SUCCESS
26304 0.00000084 hypertrm.exe IOCTL_SERIAL_GET_HANDFLOW Serial1 SUCCESS
26305 0.00000726 hypertrm.exe IOCTL_SERIAL_SET_BAUD_RATE Serial1 SUCCESS
Rate: 9600
26306 0.00000363 hypertrm.exe IOCTL_SERIAL_SET_RTS Serial1 SUCCESS
26307 0.00000363 hypertrm.exe IOCTL_SERIAL_SET_DTR Serial1 SUCCESS
26308 0.00000223 hypertrm.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial1 SUCCESS
StopBits: 1 Parity: NONE WordLength: 8
26309 0.00000140 hypertrm.exe IOCTL_SERIAL_SET_CHAR Serial1 SUCCESS EOF:4
ERR:0 BRK:0 EVT:a XON:11 XOFF:13
26310 0.00000503 hypertrm.exe IOCTL_SERIAL_SET_HANDFLOW Serial1 SUCCESS
Shake:80000001 Replace:80000040 XonLimit:80 XoffLimit:200
26311 0.00000112 hypertrm.exe IOCTL_SERIAL_SET_TIMEOUTS Serial1 SUCCESS
RI:10 RM:0 RC:0 WM:0 WC:5000
26312 0.00000196 hypertrm.exe IOCTL_SERIAL_SET_WAIT_MASK Serial1 SUCCESS
Mask: RLSD ERR
26313 51.35966582 hypertrm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial1 SUCCESS
26314 51.35987563 hypertrm.exe IRP_MJ_READ Serial1 CANCELLED Length 80
26315 0.00001928 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: :
26316 0.00001676 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: C
26317 0.00002039 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: H
26318 0.00002039 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: A
26319 0.00001844 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: N
26320 0.00001732 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: 1
26321 0.00001928 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: :
26322 0.00001648 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: V
26323 0.00001704 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: O
26324 0.00001872 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: L
26325 0.00001788 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: T
26326 0.00001732 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1:
26327 0.00001928 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: 4
26328 0.00001732 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: .
26329 0.00002067 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: 0
26330 0.00001900 hypertrm.exe IRP_MJ_WRITE Serial1 SUCCESS Length 1: .
26331 0.00024109 hypertrm.exe IOCTL_SERIAL_SET_WAIT_MASK Serial1 SUCCESS
Mask: RLSD ERR
26332 0.00000196 hypertrm.exe IOCTL_SERIAL_PURGE Serial1 SUCCESS Purge:
TXABORT RXABORT
26333 0.00000223 hypertrm.exe IRP_MJ_CLEANUP Serial1 SUCCESS
26334 0.01071421 hypertrm.exe IRP_MJ_CLOSE Serial1 SUCCESS
"Joe Hagen" <jdhagen@chorus.net> wrote in message
news:JN6Xg.5425$5i7.172@newsreading01.news.tds.net...
On Tue, 10 Oct 2006 16:14:19 -0700, Ryan Neuhart wrote:
Ok, here's the whole function for initializing the comm port....
bool CCommTalk::InitPort(LPCSTR szPortName, LPCSTR szDCB){
ClosePort();
DCB Parms;
bool bInit = false;
m_hCommPort = INVALID_HANDLE_VALUE;
for (;;) {
m_hCommPort = CreateFile (
szPortName,
GENERIC_READ|GENERIC_WRITE,
0 ,
NULL ,
OPEN_EXISTING,
FILE_ATTRIBUTE_SYSTEM,
NULL
);
if (m_hCommPort == INVALID_HANDLE_VALUE)
break;
if (!GetCommState(m_hCommPort, &Parms))
break;
Parms.BaudRate = CBR_9600;
Parms.ByteSize = 8;
Parms.Parity = NOPARITY;
Parms.StopBits = ONESTOPBIT;
SetCommState(m_hCommPort, &Parms);
if (!SetCommState(m_hCommPort, &Parms))
break;
bInit = true;
break;
}
if (!bInit) {
CloseHandle(m_hCommPort);
m_hCommPort=INVALID_HANDLE_VALUE;
}
return bInit;
};
-Ryan
Ryan,
There are a couple of changes you may want to make to the
initialization code.
Before calling GetCommState, you should set the DCBlength
field:
Parms.DCBlength = sizeof(DCB);
Since the power supply uses no flow control, the following fields
should be set before calling SetCommState:
Parms.fDsrSensitivity = FALSE;
Parms.fOutxCtsFlow = FALSE;
Parms.fOutxDsrFlow = FALSE;
Parms.fOutX = FALSE;
Parms.fInX = FALSE;
I'm not sure if these changes will eliminate the delay you're
observing.
Joe