⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gencomm.cpp

📁 自编的串口通信程序
💻 CPP
字号:
// GenCOMM.cpp : implementation file
//

#include "stdafx.h"
#include "AutoDemo.h"
#include "GenCOMM.h"
#include "CmdRs232.h"
#include "TraceDoc.h"
#include "AutoDemo.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

char * rs232_cmdStr[]={
					"AT_OPEN_COM",
					"AT_WRITE_COM",
					"AT_READ_COM"
					};
CmdFunc rs232_cmdFunc[]={
					OpenRs232,
					WriteRs232,
					ReadRs232};

/////////////////////////////////////////////////////////////////////////////
// CGenCOMM
IMPLEMENT_DYNCREATE(CGenCOMM, CWinThread)

CGenCOMM::CGenCOMM()
{
}

CGenCOMM::~CGenCOMM()
{
}

BOOL CGenCOMM::InitInstance()
{
	
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CGenCOMM::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CGenCOMM, CWinThread)
	//{{AFX_MSG_MAP(CGenCOMM)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	ON_THREAD_MESSAGE(WM_GEN_COMM_CMD,OnGenCommCmd)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGenCOMM message handlers
LRESULT CGenCOMM::OnGenCommCmd(WPARAM wParam,LPARAM lParam)
{
//	::Sleep(1000);
	if(wParam==0)//start signal
	{		
		traceStr+="Communication is started... \r\n";

		::AfxGetApp()->PostThreadMessage(WM_GEN_COMM_CMD_RSP,CMD_EXECUTED,0);
	}else{
		char * cmdStr=(char *)wParam;
		char * str =new char[MAX_CMD_STR_LENGTH+1];
		int optPos;

		if(cmdStr[0]=='\0'||cmdStr[0]=='\r'||cmdStr[0]=='\n'){
		  ::AfxGetApp()->PostThreadMessage(WM_GEN_COMM_CMD_RSP,CMD_SKIPPED,0);
		  return 0L;
		}

		optPos=GetCmdOptPos(cmdStr);

		::strncpy(str,cmdStr,optPos);
		str[optPos]='\0';//get the CMD string without opt string attached

		for(int i=0;i<sizeof(rs232_cmdStr)/sizeof(char **);i++)
		{if(!::strcmp(str,rs232_cmdStr[i])) break;}
		
		delete str;//free buffer after getting the right cmd

		if(i==sizeof(rs232_cmdStr)/sizeof(char **))
		{
			traceStr+="Command not found!!! \r\n";
			::AfxGetApp()->PostThreadMessage(WM_GEN_COMM_CMD_RSP,-1,0);

		}
		else
		{
		CString rspStr("");

		traceStr+="executing command ";
		traceStr+=rs232_cmdStr[i];
		traceStr+="\r\n";
	//	((CAutoDemoApp*)::AfxGetApp())->pDocTra->UpdateAllViews(NULL,1);
		::AfxGetApp()->PostThreadMessage(WM_GEN_COMM_CMD_RSP,CMD_EXECUTING,0);
		 (rs232_cmdFunc[i])(&cmdStr[optPos],rspStr);
		traceStr+=rspStr;
		traceStr+="\r\n";
		::AfxGetApp()->PostThreadMessage(WM_GEN_COMM_CMD_RSP,CMD_EXECUTED,0);
		}
	}  
		::Sleep(100);
    return 0L;
}

int CGenCOMM::GetCmdOptPos(char * cmdStr)
{
	int i=0;
    while(*cmdStr!='\0')
	{	if(*cmdStr++!='(')
		i++;
		else
		break;
	}

	return i;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -