PURGE_RXCLEAR);
CloseHandle(COMDEV(npGPSInfo));
return (TRUE);
}
int NEAR ReadCommBlock(LPSTR lpszBlock,int nMaxLength)
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength;
DWORD dwError;
if (!npGPSInfo) return(FALSE);
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
dwLength=min((DWORD)nMaxLength,ComStat.cbInQue);
if (dwLength>0)
{ fReadStat=ReadFile(COMDEV(npGPSInfo),lpszBlock,
dwLength,&dwLength,&READ_OS(npGPSInfo));
if (!fReadStat)
{ if (GetLastError()==ERROR_IO_PENDING)
{ OutputDebugString("\n\rIO Pending");
while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLe
ngth,TR
UE))
UE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
continue;
}
}
else
{ dwLength=0;
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
}
}
}
return ( dwLength ) ;
}
BOOL NEAR WriteCommBlock(LPSTR lpByte,DWORD dwBytesToWrite)
{ BOOL fWriteStat;
DWORD dwBytesWritten;
DWORD dwErrorFlags;
DWORD dwError;
COMSTAT ComStat;
if (!npGPSInfo) return(FALSE);
fWriteStat=WriteFile(COMDEV(npGPSInfo),lpByte,dwBytesToWrite,
&dwBytesWritten,&WRITE_OS(npGPSInfo));
if (!fWriteStat)
{ if(GetLastError()==ERROR_IO_PENDING)
{ while(!GetOverlappedResult(COMDEV(npGPSInfo),
&WRITE_OS(npGPSInfo),&dwBytesWritten,TRUE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
continue;
else
{
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
break;
}
}
}
else
{
{
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
return ( FALSE );
}
}
return ( TRUE ) ;
}
DWORD FAR PASCAL CommWatchProc(LPSTR)
{ DWORD dwEvtMask;
OVERLAPPED os;
int nLength;
BYTE abIn[1024];
memset(&os,0,sizeof(OVERLAPPED));
// create I/O event used for overlapped read
os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (os.hEvent==NULL)
{ MessageBox(NULL,"Failed to create event for thread!","GPS
Error!",MB_ICONEXCLAMATION
关键词:Window 95串口通讯函数集合