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

📄 pehandle.cpp

📁 代码使用eVC4.0调试通过
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
		pe.EncodeSMSBody("13671168764","13381026959",2);
																							pe.EncodeSMSBody("13671168764","13381026959",2);


		DWORD   dwThreadId    = 0;

		//读串口数据线程
		m_hProcRead = CreateThread ((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,
			(LPTHREAD_START_ROUTINE)&ProcReadData,(LPVOID)NULL,(DWORD)0,(LPDWORD)&dwThreadId);
		if(m_hProcRead==NULL)
		{
			CloseHandle (m_hComm);             //发生错误,关闭打开的文件句柄
			MessageBox(NULL,_T("设备无法连接到数据中心(8)"),_T("\"神州通\"E@syGPS车辆监控管理系统"),MB_OK|MB_ICONEXCLAMATION);
			return FALSE;
		}

		//发送包线程
		m_hProcSend = CreateThread ((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,
			(LPTHREAD_START_ROUTINE)&ProcSendData,(LPVOID)NULL,(DWORD)0,(LPDWORD)&dwThreadId);
		if(m_hProcSend==NULL)
		{
			CloseHandle (m_hComm);             //发生错误,关闭打开的文件句柄
			MessageBox(NULL,_T("设备无法连接到数据中心(9)"),_T("\"神州通\"E@syGPS车辆监控管理系统"),MB_OK|MB_ICONEXCLAMATION);
			return FALSE;
		}

		//其他常规任务执行
		m_hProcAlarm=CreateThread ((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,
			(LPTHREAD_START_ROUTINE)&ProcAlarm,(LPVOID)NULL,(DWORD)0,(LPDWORD)&dwThreadId);
		if(m_hProcAlarm==NULL)
		{
			CloseHandle (m_hComm);             //发生错误,关闭打开的文件句柄
			MessageBox(NULL,_T("设备无法连接到数据中心(10)"),_T("\"神州通\"E@syGPS车辆监控管理系统"),MB_OK|MB_ICONEXCLAMATION);
			return FALSE;
		}
	}
	/*catch(...)
	{
		MessageBox(NULL,_T("设备无法连接到数据中心(11)"),_T("\"神州通\"E@syGPS车辆监控管理系统"),MB_OK|MB_ICONEXCLAMATION);
	}*/
	//MessageBox(NULL,_T("连接到数据中心(11)"),_T("\"神州通\"E@syGPS车辆监控管理系统"),MB_OK|MB_ICONEXCLAMATION);
	theApp.dlg.m_scrgsm=_T("GPRS:有");

	theApp.dlg.m_lst.ShowWindow (SW_SHOWNORMAL);
	theApp.dlg.UpdateData (FALSE);
	return TRUE;

}

void CPeHandle::SetListData(int iType,int iLen,char Param[])
{
	LPCmdStruct pcmd=new CmdStruct;
	memset(pcmd,0,sizeof(CmdStruct));
	pcmd->iType=iType ;
	pcmd->iLen=iLen ;
	strcpy(pcmd->Param ,Param);
	m_Cmd.AddTail(*pcmd);
	
	//告知队列有数据
	SetEvent(m_cmdLstEvent);
}

void CPeHandle::TextualData(char buffer[])
{
	char tempbuf[1024]="\0",*pStr;
//	m_//pView->FillSecond (buffer);
	strcat(DataSaveBuff,buffer);

Next_Loop:
	pStr=strstr(DataSaveBuff,"\r\n");
	if(pStr==NULL)//IF NO '\r\n' THER RETURN
		return ;

	memcpy(tempbuf,DataSaveBuff,strlen(DataSaveBuff)-strlen(pStr));
	tempbuf[strlen(DataSaveBuff)-strlen(pStr)]='\0';
		/************************************************************/
	if (strlen(tempbuf)>=1)
		TextualClassify(tempbuf);

	strcpy(tempbuf,"\0");
	strncpy(tempbuf,pStr+2,strlen(pStr)-2);
	tempbuf[strlen(pStr)-2]='\0';
	strcpy(DataSaveBuff,tempbuf);
	if(strlen(tempbuf)>0)
		goto Next_Loop;
}

void CPeHandle::TextualClassify(char buffer[])
{
	char *Type,readNum[1024]="\0";
	char ErrorNum[1024]="\0";
	//以下为语音拨号关键字
	Type=strstr(buffer,"VOICE");//语音到来
	if(Type!=NULL)
	{
		return;
	}

	Type=strstr(buffer,"CLIP: \"");//来电显示
	if(Type!=NULL)
	{
		return;
	}
	Type=strstr(buffer,"RING");
	if(Type!=NULL)
	{
		return;
	}
	//对方挂断
	Type=strstr(buffer,"BUSY");
	if(Type!=NULL)
	{
		return;
	}
	
	//对方无人接听
	Type=strstr(buffer,"NO ANSWER");
	if(Type!=NULL)
	{
		SetEvent(m_CmdFinish);
		return;
	}
	//语音拨号关键字分析结束
	Type=strstr(buffer,"NO");
	if(Type!=NULL)
	{
		SetEvent(m_CmdFinish);
		return;
	}
	Type=strstr(buffer,"AT");
	if(Type!=NULL)
	{
		SetEvent(m_CmdFinish);
		return;
	}
	//message complete
	Type=strstr(buffer,"OK");
	if(Type!=NULL)
	{
		InterlockedExchange (&m_lComplete,1);
		SetEvent(m_CmdFinish);
		return;
	}
	//ERROR
	Type=strstr(buffer,"ERROR");
	if(Type!=NULL)
	{
		InterlockedExchange (&m_lComplete,0);
		SetEvent(m_CmdFinish);
		return;
	}
	//INFORM MESSAGE COME
	Type=strstr(buffer,"+CMTI:");
	if(Type!=NULL)
	{
		Type=strstr(buffer,",");
		if (Type == NULL)
			return;
		strncpy(readNum,Type+1,strlen(Type)-1);
		readNum[strlen(Type)-1]='\0';
		//转换为命令列表
		sprintf(ErrorNum,"AT+CMGR=%d\r\0",atoi(readNum));//
		SetListData (1,0,ErrorNum);

		sprintf(ErrorNum,"AT+CMGD=%d\r\0",atoi(readNum));//
		SetListData (1,0,ErrorNum);

		wchar_t tmp[64];
		wsprintf(tmp,_T("%d"),theApp.dlg.m_lst.GetItemCount());
		int i=theApp.dlg.m_lst.InsertItem (10,tmp);
		theApp.dlg.m_lst.SetItemText(i,1,tmp);//类别
		theApp.dlg.m_lst.SetItemText(i,2,_T("有新数据到来"));
		return;
	}
	//SMS DATA
	if(strlen(buffer)<40)
	{
		return;
	}
	TextualSMS (buffer);
}

void CPeHandle::TextualSMS(char buf[])
{
	int smsclen=0,OffSet=0,smscGlobal=0;
	char smsbuf[1024]="\0",temp[1024]="\0";
	char Content[256]="\0",Tel[32]="\0";

	//smsc
	strncpy(smsbuf,buf,2);
	smsbuf[2]='\0';
	OffSet+=2;

	smsclen=atoi((char*)smsbuf);
	smscGlobal=smsclen;

	OffSet+=smsclen*2;

	OffSet+=2;//ignore send mark
	strcpy(temp,"\0");
	//smsc complete 

	//source tel length
	strncpy(temp,buf+OffSet,2);
	temp[2]='\0';
	OffSet+=2;

	sscanf(temp,"%x",&smsclen);
	//smsclen=HexToDecimal(temp,2);//length complete
	strncpy(smsbuf,buf+OffSet+2,smsclen+1);
	smsbuf[smsclen+1]='\0';
	_swab(smsbuf,smsbuf,smsclen+1);
	strncpy(temp,buf+OffSet,2);
	temp[2]='\0';
	if(strcmp(temp,"91")==0)
		smsbuf[smsclen]='\0';
	else
		smsbuf[smsclen+1]='\0';
	
	memcpy(Tel,smsbuf+strlen(smsbuf)-11,11);
	Tel[11]='\0';
	OffSet+=smsclen+3;
	OffSet+=2;//ignore send pid

	int iType=0,iTemp=0;
	strcpy(temp,"\0");
	memcpy(temp,buf+OffSet,2);
	temp[2]='\0';
	sscanf(temp,"%x",&iTemp);
	iType=((iTemp>>2)&0x03);
	//type analysis complete
	OffSet+=2;

	char strDate[1024]="\0";
	strncpy(smsbuf,buf+OffSet,14);
	_swab(smsbuf,smsbuf,14);
	int Count,Val[7][64];
	for(Count=0;Count<7;Count++)
	{
		strncpy(temp,smsbuf+Count*2,2);
		temp[2]='\0';
		strcpy((char*)Val[Count],temp);
	}
	sprintf(strDate,"20%s-%s-%s %s:%s:%s",Val[0],Val[1],Val[2],Val[3],Val[4],Val[5]);
	
	OffSet+=14;
	//send datetime complete
	strcpy(temp,"\0");
	strncpy(temp,buf+OffSet,2);
	temp[2]='\0';
	sscanf(temp,"%x",&smsclen);
	//smsclen=HexToDecimal (temp,2);
	OffSet+=2;
	strcpy(temp,"\0");
	strncpy(temp,buf+OffSet,strlen(buf)-OffSet);
	temp[strlen(buf)-OffSet]='\0';
	if(strlen(temp)==0)
		return ;

	char smstxt[512]="\0",tp[8]="\0";
	int ForCount=0;
	if(iType==0)//septet
	{
		codeswitch.Decode7Text(temp,smstxt);
		strcpy(Content,smstxt);
	}
	else if(iType==2)//Unicode
	{
		codeswitch.Decode16Text(temp,smstxt);
		//strcpy(sms.cType ,"Unicode");
		strcpy(Content,smstxt);
	}
	//sprintf(temp,"Tel=%s,Sms=%s,RecvTime=%s\0",Tel,Content,strDate);
	//SystemGate(Tel,Content);
	
	if (strlen(Content) < 1 )
		return;


	wchar_t tmp[64];
	wsprintf(tmp,_T("%d"),theApp.dlg.m_lst.GetItemCount());
	int i=theApp.dlg.m_lst.InsertItem (10,tmp);
	theApp.dlg.m_lst.SetItemText(i,1,tmp);//类别
	USES_CONVERSION;
	theApp.dlg.m_lst.SetItemText(i,2,A2W(Content));

	//devTerm.TranslatePe(Tel,Content,strDate);
}

BOOL CPeHandle::SendData(char buff[])
{
	DWORD wrnum;
	COMSTAT lpStat;
	DWORD dwMask;                    //设置串口的事件屏蔽码。


	/*wchar_t tmp[64];
	wsprintf(tmp,_T("%d"),theApp.dlg.m_lst.GetItemCount());
	int i=theApp.dlg.m_lst.InsertItem (10,tmp);
	theApp.dlg.m_lst.SetItemText(i,1,tmp);//类别
	USES_CONVERSION;
	theApp.dlg.m_lst.SetItemText(i,2,A2W(buff));//数量
	*/
	ClearCommError (m_hComm,&dwMask,&lpStat);
	// Write is pending.
	//WaitForSingleObject (m_Events,5*1000);
	//WaitForSingleObject (m_CmdFinish,5*1000);

	//ResetEvent (m_Events);
	//ResetEvent(m_CmdFinish);
	/*if (!WriteFile(m_hComm, sText, strlen(sText), &wrnum, NULL)) 
	{
		 return FALSE;
	}*/
	WriteFile(m_hComm, buff, strlen(buff), &wrnum, NULL);
	//WaitForSingleObject (m_Events,5*1000);
	//SetEvent (m_Events );
	

	//WaitForSingleObject (m_CmdFinish,5*1000);
	//SetEvent (m_CmdFinish );
	return TRUE;
}

BOOL CPeHandle::SendData(char buff[], int iLen)
{


	DWORD wrnum;
//	COMSTAT lpStat;
	char Writbuffer[1024]="\0";

	//sprintf(Writbuffer,"AT+CMGS=%d\r%s\x1A\0",iLen,sText);
	sprintf(Writbuffer,"AT+CMGS=%d\r\0",iLen);
	//DWORD dwMask;                    //设置串口的事件屏蔽码。
	//ClearCommError (m_hComm,&dwMask,&lpStat);
	//WaitForSingleObject (m_Events,5*1000);

	//ResetEvent (m_Events);
	/*if (!WriteFile(m_hComm, Writbuffer, strlen(Writbuffer), &wrnum,NULL)) 
	{
		SetEvent (m_Events );
		return FALSE;
	}*/
	ResetEvent (m_CmdFinish);
	WriteFile(m_hComm, Writbuffer, strlen(Writbuffer), &wrnum,NULL);

	//WaitForSingleObject (m_Events,1*1000);
	WaitForSingleObject (m_CmdFinish,10);
	//SetEvent (m_Events );

	//MessageBox(NULL,TEXT("GO ON"),TEXT("NEXT"),MB_OK);
	//ResetEvent (m_Events);
	//ResetEvent (m_CmdFinish);
	sprintf(Writbuffer,"%s\x1A\0",buff);
	/*if (!WriteFile(m_hComm, Writbuffer, strlen(Writbuffer), &wrnum,NULL)) 
	{
		SetEvent (m_Events );
		return FALSE;
	}*/
	WriteFile(m_hComm, Writbuffer, strlen(Writbuffer), &wrnum,NULL);
	
//	WaitForSingleObject (m_Events,5*1000);
	//WaitForSingleObject (m_CmdFinish,5*1000);
//	SetEvent (m_Events );

	//MessageBox(NULL,TEXT("发送完毕"),TEXT("Finish"),MB_OK);

	/*wchar_t tmp[64];
	wsprintf(tmp,_T("%d"),theApp.dlg.m_lst.GetItemCount());
	int i=theApp.dlg.m_lst.InsertItem (10,tmp);
	theApp.dlg.m_lst.SetItemText(i,1,tmp);//类别
	USES_CONVERSION;
	theApp.dlg.m_lst.SetItemText(i,2,A2W(Writbuffer));//数量
	*/

	return TRUE;
}

BOOL CPeHandle::EncodeSMSBody(char body[], char sDest[], int iCode)
{
	char temp[1024]="\0",RetVal[1024]="\0",send[1024]="\0";
	int iTemp=0,iLen=0;
	char tpRet[1024]="\0";
	strcpy(send,"\0");//initialize
	/*if(!m_log.GetLog ("SMSCNo",tpRet))
		return FALSE;*/
	strcpy(temp,m_param.smsCenter);//smsc code
	strcat(temp,"F\0");
	_swab(temp,RetVal,strlen(temp));//翻转字符
	sprintf(send,"%02X\0",strlen(RetVal)/2+1);//length
	iTemp=strlen(RetVal)/2+1;

	/*if(!m_log.GetLog ("SMSCTYPE",tpRet))
		return FALSE;*/
	strcat(send,"91");//type
	strcat(send,RetVal);//smsc complete
	strcpy(temp,"\0");
	strcpy(RetVal,"\0");

	strcat(send,"1100\0");//send mark
	//0891683108301705F011000D91683176118667F40000AA0A31323334353637383930.
	/*if(!m_log.GetLog ("DESTNo",tpRet))
		return FALSE;*/
	strcpy(temp,"86");//smsc code

	strcat(temp,sDest);    //目的电话
	temp[strlen(temp)]='\0';
	strcat(temp,"F\0");
	_swab(temp,RetVal,strlen(temp));//翻转字符
	//SwapCode(temp,RetVal);
	sprintf(temp,"%02X\0",strlen(RetVal)-1);//desc length
	strcat(send,temp);
	/*if(!m_log.GetLog ("DESTTYPE",tpRet))
		return FALSE;*/
	strcat(send,"91");//desc type
	strcat(send,RetVal);//desc code
	strcpy(temp,"\0");
	strcpy(RetVal,"\0");
	
	char tp[8]="\0";
	switch(iCode)
	{
		/*case 1: //英文
			strcat(send,"0000FF");//编码和期限
			Encode7Text(sText,RetVal);//编码
			//短信长度
			sprintf(tp,"%02X\0",wcslen(sText));
			strcat(send,tp);
			break;*/
		case 2://中文
			strcat(send,"0019FF");//编码和期限
			codeswitch.Encode16Text(body,RetVal);//编码
			//短信长度
			sprintf(temp,"%02X\0",((int)strlen(RetVal))/2);
			strcat(send,temp);
			break;
		default:
			return FALSE;
	}
	
	//strcpy(RetVal,buf);
	strcat(send,RetVal);
	iLen=strlen(send)/2-iTemp-1;

	//转换为命令列表
	/*sprintf(temp,"AT+CMGS=%d\r\0",iLen);
	SetList(1,temp);
	strcat(send,"\x1A\0");
	SetList(1,send);*/
	pe.SetListData(2,iLen,send);

	return TRUE;
}

⌨️ 快捷键说明

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