?? comport.h
字號:
// ComPort.h: interface for the CComPort class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COMPORT_H__7FDA6FF5_5ED7_43DA_9400_D0B82D0BD36A__INCLUDED_)
#define AFX_COMPORT_H__7FDA6FF5_5ED7_43DA_9400_D0B82D0BD36A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Communicate.h"
#include "cfgfile.h"
#include "logfile.h"
extern int iComDev; // 0:透明方式 1:密碼鍵盤 2:磁條讀寫器 3:打印機
class CComPort : public CCommunicate
{
public:
int RcvData(char *pszDataBuf,DWORD *pdwLen);
CComPort();
virtual ~CComPort();
virtual int InitCom()
{
//open port to host
DCB dcb;
BOOL blSetOk;
TCHAR szPortName[10];
int iBaudRate,iByteSize,iParity,iStopBit;
CCfgFile csCfgFile;
COMMTIMEOUTS CommTimeouts;
if (m_pOwnerWnd==NULL){
return 1;
}
if(m_blIsRcvThreadActive||m_blIsSndThreadActive)
return 0;
//set device type
m_iDevType=0;
//Get parameter from config file
memset(szPortName,0,sizeof(szPortName));
csCfgFile.GetCfgItemStr(PORTNAME,szPortName,10);
iBaudRate=csCfgFile.GetCfgItemInt(BAUDRATE);
iByteSize=csCfgFile.GetCfgItemInt(BYTESIZE);
iParity=csCfgFile.GetCfgItemInt(PARITY);
iStopBit=csCfgFile.GetCfgItemInt(STOPBIT);
//initial Comm Port
m_hCommHnd=CreateFile(szPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,NULL,NULL);
if(m_hCommHnd==INVALID_HANDLE_VALUE)
return 2;
blSetOk = GetCommState(m_hCommHnd,&dcb);
if(!blSetOk) {
CloseHandle(m_hCommHnd);
return 3;
}
dcb.BaudRate = iBaudRate;
dcb.ByteSize = iByteSize;
dcb.Parity = iParity;
dcb.StopBits = iStopBit;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fInX=0;
dcb.fOutX=0;
dcb.fNull=TRUE;
dcb.fRtsControl=RTS_CONTROL_DISABLE;
blSetOk=SetCommState(m_hCommHnd,&dcb);
if(!blSetOk) {
CloseHandle(m_hCommHnd);
return 4;
}
//time out
GetCommTimeouts(m_hCommHnd,&CommTimeouts);
memset(&CommTimeouts,0,sizeof(CommTimeouts));
CommTimeouts.ReadIntervalTimeout=MAXDWORD;
SetCommTimeouts(m_hCommHnd,&CommTimeouts);
//create stop evnet
/* m_hStopEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//create send request event
m_hSendDataEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
*/
m_blIsRcvThreadActive=FALSE;
m_blIsSndThreadActive=FALSE;
//create Rcv thread
DWORD dwRcvId;
if((m_pRcvThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)RcvThread,this,0,&dwRcvId))==NULL){
return 5;
}
//create Snd thread
/* DWORD dwSndId;
if(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SndThread,this,0,&dwSndId)==NULL){
return 6;
}
*/
//wait until started
while(!m_blIsRcvThreadActive){
Sleep(10);
}
/* while(!m_blIsSndThreadActive){
Sleep(10);
}
*/
return 0;
}
virtual int ResetCom()
{
// MSG message;
//透明方式
if(iComDev==0){
//Send Stop signal to RcvThread
/* if(m_hStopEvent!=NULL){
SetEvent(m_hStopEvent);///觸發事件
while(m_blIsSndThreadActive==TRUE)
if(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&message);
::DispatchMessage(&message);
}
CloseHandle(m_hStopEvent);
m_hStopEvent=NULL;
}
*/
//close comm handle
if(m_hCommHnd!=NULL){
CloseHandle(m_hCommHnd);
m_hCommHnd=NULL;
}
//kill RcvThread
if(m_blIsRcvThreadActive){
TerminateThread(m_pRcvThread, 0);
m_blIsRcvThreadActive=FALSE;
}
}
else{
//close comm handle
if(m_hCommHnd!=NULL){
CloseHandle(m_hCommHnd);
m_hCommHnd=NULL;
}
}
return 0;
}
virtual int SendData(char *pszSendBuf,int iLen)
{
char szTemp[100];
DWORD dwSendLen;
memset(m_szSendBuf,0,sizeof(m_szSendBuf));
memcpy(m_szSendBuf,pszSendBuf,iLen);
m_dwSendLen=iLen;
dwSendLen=0;
// csLog.WriteLog(1, 1,m_szSendBuf,m_dwSendLen);
if(WriteFile(m_hCommHnd,m_szSendBuf,m_dwSendLen,&dwSendLen,NULL)){
return 0;
}
else{
sprintf(szTemp,"Snd Error, error code=%d",GetLastError());
// csLog.WriteLog(1, 1,szTemp,0);
return 1;
}
// SetEvent(m_hSendDataEvent);
// return 0;
}
int InitCom(char *pszPortName); //for connect to aux
int InitCom(char *pszPortName,int iBaudRate,int iParity,int iByteSize,int iStopBit); //for aux
// int RcvData(char *pszDataBuf,DWORD *pdwLen);
private:
static UINT RcvThread(LPVOID pParam);
static UINT SndThread(LPVOID pParam);
HANDLE m_hCommHnd;
int m_iDevType; //device type 0:Terminal communication device
// 1:Aux Port communication device
};
#endif // !defined(AFX_COMPORT_H__7FDA6FF5_5ED7_43DA_9400_D0B82D0BD36A__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -