📄 comport.cpp
字号:
MessageBox(NULL, TEXT("系统无法接管"),TEXT("系统提示信息"),MB_OK);
}
return TRUE;
}
void CComPort::TextualData(char sbuf[])
{
try
{
char tempbuf[1024]="\0";
char *pStr;
strcat(DataSaveBuff,sbuf);
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)>0)
{
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;
}
catch(...)
{
MessageBox(NULL,TEXT("分析数据错误"),TEXT("提示信息"),MB_OK);
}
}
DWORD WINAPI ProcRing(void *)
{
port.LocalVoice (0);
sndPlaySound(TEXT("\\Storage Card\\Ring0.wav"),SND_FILENAME|SND_ASYNC|SND_LOOP);
DWORD dwWaitResult;
int I=0;
do
{
dwWaitResult =WaitForSingleObject(port.m_RingEvent,1000);
if ( dwWaitResult == WAIT_OBJECT_0 )
{
I=0;
ResetEvent(port.m_RingEvent);
}
else
{
I++;
if(I>5)
{
port.SetList (1,"ATH\r");
break;
}
}
}while(TRUE);
sndPlaySound(NULL,SND_FILENAME|SND_ASYNC);
CloseHandle(port.m_RingEvent);
port.m_RingEvent=NULL;
return TRUE;
}
void CComPort::TextualClassify(char buffer[])
{
#ifdef TEST
TCHAR out[1024];
MultiByteToWideChar (CP_ACP,0,buffer,-1,out, strlen(buffer));
out[strlen(buffer)]='\0';
/* dlg->m_lst.InsertItem (0,out);*/
#endif
char *Type;
char ErrorNum[1024]="\0",sbuf[256]="\0";
char readNum[1024]="\0",temp[512]="\0";
Type=strstr(buffer,"RING");
if(Type!=NULL)
{
if (theApp.AppSetup.HANDUP == 1)
{
//SetList(1,"AT+CLCC\r\0");
if(hProcRing == NULL || m_RingEvent == NULL)
{
m_RingEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
hProcRing=CreateThread ((LPSECURITY_ATTRIBUTES)NULL,(DWORD)0,
(LPTHREAD_START_ROUTINE)&ProcRing,(LPVOID)NULL,(DWORD)0,(LPDWORD)0);
}
SetEvent(m_RingEvent);
}
else//如果自動接聽
{
LocalVoice (0);
sndPlaySound(TEXT("\\Storage Card\\Ring0.wav"),SND_FILENAME|SND_SYNC);
LocalVoice (1);
sndPlaySound(NULL,SND_FILENAME|SND_ASYNC);
SetList (1,"ATA\r");
}
return;
}
//来电显示
Type=strstr(buffer,"+CLIP:");
if(Type!=NULL)
{
SetEvent(m_RingEvent);
Type=strstr(buffer,"\"");
strncpy(sbuf,Type+1,strlen(Type)-1);
sbuf[strlen(Type)-1]='\0';
Type=strstr(sbuf,"\"");
strncpy(sbuf,sbuf,strlen(sbuf)-strlen(Type));
sbuf[strlen(sbuf)-strlen(Type)]='\0';
#ifdef TEST
MultiByteToWideChar (CP_ACP,0,sbuf,-1,out, strlen(sbuf));
out[strlen(sbuf)]='\0';
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
//如果有其他数据
if(hProcRing != NULL && m_RingEvent==NULL)
{
hProcRing=NULL;
}
//列举短信结果读取
Type=strstr(buffer,"+CMGL:");
if(Type!=NULL)
{
Type=strstr(buffer,",");
strncpy(readNum,buffer+6,strlen(buffer)-strlen(Type)-6);
readNum[strlen(buffer)-strlen(Type)-6]='\0';
//转换成ANSI
sprintf(temp,"AT+CMGR=%d\r\0",atoi(readNum));//
SetList(1,temp);
sprintf(temp,"AT+CMGD=%d\r\0",atoi(readNum));//
SetList(1,temp);
return;
}
Type=strstr(buffer,"BUSY");
if(Type!=NULL)
{
//有数据到来
if (m_RingEvent != NULL)
{
ResetEvent(m_RingEvent);
hProcRing=NULL;
}
LocalVoice (0);
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
Type=strstr(buffer,"NO");
if(Type!=NULL)
{
//有数据到来
if (m_RingEvent != NULL)
{
ResetEvent(m_RingEvent);
hProcRing=NULL;
}
LocalVoice (0);
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
//发送短信开始
Type=strstr(buffer,">");
if(Type!=NULL)
{
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
Type=strstr(buffer,"AT");
if(Type!=NULL)
{
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
//message complete
Type=strstr(buffer,"OK");
if(Type!=NULL)
{
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
//ERROR
Type=strstr(buffer,"ERROR");
if(Type!=NULL)
{
SetEvent(m_CmdFinish);
#ifdef TEST
dlg->m_lst.InsertItem (0,out);
#endif
return;
}
//INFORM MESSAGE COME
Type=strstr(buffer,"+CMTI:");
if(Type!=NULL)
{
Type=strstr(buffer,",");
strncpy(readNum,Type+1,strlen(Type)-1);
readNum[strlen(Type)-1]='\0';
//转换成ANSI
sprintf(temp,"AT+CMGR=%d\r\0",atoi(readNum));//
SetList(1,temp);
sprintf(temp,"AT+CMGD=%d\r\0",atoi(readNum));//
SetList(1,temp);
return;
}
//SMS DATA
if(strlen(buffer)<40)
{
return;
}
TextualSMS (buffer);
}
BOOL CComPort::SendData(char sText[])
{
DWORD wrnum;
COMSTAT lpStat;
DWORD dwMask; //设置串口的事件屏蔽码。
TCHAR out[512]=TEXT("\0");
MultiByteToWideChar (CP_ACP,0,sText,-1,out, strlen(sText));
out[strlen(sText)]='\0';
dlg->m_lst.InsertItem (0,out);
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, sText, strlen(sText), &wrnum, NULL);
//WaitForSingleObject (m_Events,5*1000);
//SetEvent (m_Events );
//WaitForSingleObject (m_CmdFinish,5*1000);
//SetEvent (m_CmdFinish );
return TRUE;
}
BOOL CComPort::TalkData(char sText[])
{
DWORD wrnum;
COMSTAT lpStat;
DWORD dwMask; //设置串口的事件屏蔽码。
TCHAR out[512]=TEXT("\0");
MultiByteToWideChar (CP_ACP,0,sText,-1,out, strlen(sText));
out[strlen(sText)]='\0';
dlg->m_lst.InsertItem (0,out);
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, sText, strlen(sText), &wrnum, NULL);
//WaitForSingleObject (m_Events,5*1000);
//SetEvent (m_Events );
WaitForSingleObject (m_CmdFinish,INFINITE);
SetEvent (m_CmdFinish );
return TRUE;
}
CComPort::SendData(char sText[],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",sText);
/*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);
return TRUE;
}
BOOL CComPort::EncodeSMSBody(TCHAR sText[],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;*/
#ifdef TAIWAN
strcpy(temp,"886");//smsc code
#else
strcpy(temp,"86");//smsc code
#endif
// if(!setlog.GetStringFromINI("SMSC",tpRet))
// return FALSE;
strcat(temp,theApp.AppSetup.SMSC); //smsc
//temp[strlen(temp)]='\0';
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;*/
#ifdef TAIWAN
strcpy(temp,"886");//smsc code
#else
strcpy(temp,"86");//smsc code
#endif
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");//编码和期限
Encode16Text(sText,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;
//转换为命令列表
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -