📄 paraio.cpp
字号:
#include "stdafx.h"
#include "ParaIO.h"
BOOL CWzdPortIO::OpenLPT( int n,CFileException *e )
{
CString portName;
CFile file;
portName.Format( "LPT%d:", n );
BOOL OpSta = Open( portName, CFile::modeReadWrite, e );
return OpSta;
}
// Open Serial Port
BOOL CWzdPortIO::OpenCOM( int n, CFileException *e, int baud, int parity,
int databits, int stopbits )
{
CString portName;
portName.Format( "COM%d:", n );
if ( Open( portName, CFile::modeReadWrite, e) )
{
DCB dcb;
::GetCommState( ( HANDLE )m_hFile, &dcb );
if ( baud != -1 ) dcb.BaudRate = baud;
if ( databits != -1 ) dcb.ByteSize = databits;
if ( stopbits != -1 ) dcb.StopBits = stopbits;
if ( parity != -1 ) dcb.Parity = parity;
::SetCommState( ( HANDLE )m_hFile, &dcb );
return( TRUE );
}
return( FALSE );
}
//
//Send to Port
//
void CWzdPortIO::Send( LPSTR lpBuf, int len )
{
// initialize the structure we will pass to thread
m_SendData.pFile = this;
m_SendData.lpBuf = lpBuf;
m_SendData.len = len;
// start the thread
AfxBeginThread( SendThread,&m_SendData );
}
UINT SendThread( LPVOID pParam )
{
//get data from thread creator
SENDDATA *pSend = ( SENDDATA * )pParam;
//do the write
pSend -> pFile -> Write( pSend -> lpBuf, pSend -> len );
return 0;
}
//
// Listen to Port
//
void CWzdPortIO::Listen( int hdrSz, int bodyPos, CWzdQueue *pQueue,CWnd *pWnd, UINT msg, UINT id )
{
// cancel timeouts! we want to wait forever until next message comes in
COMMTIMEOUTS cto;
::GetCommTimeouts(( HANDLE )m_hFile, &cto );
cto.ReadIntervalTimeout = 0;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
::SetCommTimeouts(( HANDLE )m_hFile, &cto );
// initialize the structure we will pass to thread
m_RecvData.pFile = this;
m_RecvData.hdrSz = hdrSz;
m_RecvData.bodyPos = bodyPos;
m_RecvData.pQueue = pQueue;
m_RecvData.pWnd = pWnd;
m_RecvData.msg = msg;
m_RecvData.id = id;
// start the thread
AfxBeginThread( RecvThread,&m_RecvData );
}
UINT RecvThread( LPVOID pParam )
{
// get data from thread creator
RECVDATA *pRecv = ( RECVDATA * )pParam;
if ( TRUE ) //forever
{
// read the header
int len;
int error = 0;
char *pHdr = new char[pRecv -> hdrSz];
try
{
int Para1=_inp(0x378);
* pHdr = Para1;
pRecv -> hdrSz = sizeof(Para1);
//len = pRecv -> pFile -> Read( pHdr, pRecv -> hdrSz );
}
catch ( CFileException *e )
{
error = e -> m_cause;
e-> Delete();
}
// read the body???
char *pBody = NULL;
if ( !error && pRecv -> bodyPos != -1 )
{
int bodyLen = *( ( short * )pHdr+pRecv -> bodyPos );
pBody = new char[bodyLen];
try
{
len += pRecv -> pFile -> Read( pBody, bodyLen );
* pBody = _inp(0x378);
bodyLen = sizeof(pBody);
len += bodyLen;
}
catch ( CFileException *e )
{
error = e -> m_cause;
e -> Delete();
}
}
// put message in queue
pRecv -> pQueue ->Add(new CWzdMsg( pRecv->id, pHdr, pBody, len, error));
// post message to window to process this new message
pRecv -> pWnd -> PostMessage( pRecv -> msg );
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -