📄 pehandle.cpp
字号:
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 + -