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

📄 mainfrm.cpp

📁 对Motorola的手机模块
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			//设置PDU模式失败
			break;
		}
	case AT_COMMAND_ATCMGS:
		if(iserror==0)
		{
			//可以发送短消息了
			CString sendpdudata,centeradd,dastring,userdata;
			CString recphone;
			CString pdutext;
			CString headnum=_T("86");
			char ch;
			int i;
			i=m_sendsmnum;
			//servercenterphone=_T("8613800270500");
			recphone=headnum+dialnumar.GetAt(i);
			//recphone=_T("8613971405741");
			sendpdudata=_T("");
			TransAdd(headnum+servercenterphone,centeradd,SERVERCENTERADD);
			sendpdudata+=centeradd;
			ch=0x11;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			ch=0x00;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			TransAdd(recphone,dastring,DESTINATIONADD);
			sendpdudata+=dastring;
			ch=0x00;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			ch=0x0A;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			ch=0x01;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			AnsiToUni(messagetext,pdutext);
			ch=pdutext.GetLength();
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
		   	CString ascpdustr;
			pdutext.Empty();
			AnsiToUni(messagetext,pdutext);
			//ascpdustr+=pdutext;
			sendpdudata+=pdutext;
			TransToAscii(sendpdudata,ascpdustr);
			
			sendpdudata=ascpdustr;
			ch=0x1a;
			sendpdudata.Insert(sendpdudata.GetLength(),ch);
			m_commandtype=AT_COMMAND_ATCMGSSEND;
			m_strcommand=sendpdudata;
			SendString(m_strcommand);
			precommand=curcommand;
			curcommand=m_strcommand;
			//m_ComPort.RestartMonitoring();
			break;
		}
		else
		{
			break;
		}
	case AT_COMMAND_ATCMGSSEND:
		if(iserror==0)
		{
			//发送成功
			iserror=iserror;
			m_sendsmnum++;
			if(m_sendsmnum<dialnumar.GetSize())
			{
				m_strcommand.Empty();
				m_strcommand=_T("AT+CMGS=");
				CString tempstr,unitext;
				int tsum;
				AnsiToUni(messagetext,unitext);
				tsum=unitext.GetLength()+15;
				GetSumString(tsum,tempstr);
				m_strcommand+=tempstr;
				m_strcommand.Insert(m_strcommand.GetLength()+1,ch1);
				m_commandtype=AT_COMMAND_ATCMGS;
				SendString(m_strcommand);
				precommand=curcommand;
				curcommand=m_strcommand;
			}
			else
			{
				//CString textstr;
				//textstr=_T("向号码:");

				AfxMessageBox("发送成功!",IDOK);
			}
			break;
		}
		else
		{
			break;
		}
	case AT_COMMAND_RECSMS:
		if(iserror==0)
		{
			//成功受到短消息
			CStringArray ar;
			BOOL flag;
			flag=GetAnswerData(m_recstring,_T("+CMTI:"),ar);
			if(flag)
			{
				num=ar[1];
				nnum=atoi(num);
				m_strcommand.Empty();
				m_strcommand=_T("AT+CMGR=");
				m_strcommand+=num;
				m_strcommand.Insert(30,ch1);
				m_commandtype=AT_COMMAND_ATCMGR;
				SendString(m_strcommand);
				precommand=curcommand;
				curcommand=m_strcommand;
				//m_ComPort.RestartMonitoring();
				break;
			}
			else
			{
				break;
			}
		}
		else
		{
			break;
		}
	case AT_COMMAND_ATCMGR:
		if(iserror==0)
		{
			//得到短消息内容
			BOOL flag;
			flag=GetRecSMData(m_recstring,_T("+CMGR:"),m_smdata);
			if(flag)
			{
				
				if(m_currentwindow==SENDFORM)
				{
					CReadSMDlg readsmdlg;
					int dlgflag;
					if(m_smdata.readflag)
						readsmdlg.m_smtype=_T("已读消息");
					else
						readsmdlg.m_smtype=_T("未读消息");
					readsmdlg.m_smphone=m_smdata.senddialnum;
					readsmdlg.m_smtime=m_smdata.timestr;
					readsmdlg.m_smtext=m_smdata.smtext;
					dlgflag=readsmdlg.DoModal();
				}
				if(m_currentwindow==DELFORM)
				{
					if(m_smdata.readflag)
					{
						m_wndSplitter.SetActivePane(0,1,NULL);
						m_smdata.smindex=cursmindex;
						this->GetActiveView()->PostMessage(WM_GETSMTEXT,
								(smallindex.GetLength())/3,(LPARAM)&m_smdata);
						break;
					}
					else
					{
						CReadSMDlg readsmdlg;
						int dlgflag;
						if(m_smdata.readflag)
							readsmdlg.m_smtype=_T("已读消息");
						else
							readsmdlg.m_smtype=_T("未读消息");
						readsmdlg.m_smphone=m_smdata.senddialnum;
						readsmdlg.m_smtime=m_smdata.timestr;
						readsmdlg.m_smtext=m_smdata.smtext;
						dlgflag=readsmdlg.DoModal();
						m_strcommand.Empty();
						m_strcommand=_T("AT+CMGL");
						m_strcommand.Insert(30,ch1);
						m_commandtype=AT_COMMAND_ATCMGLTOTOAL;
						precommand=curcommand;
						curcommand=m_strcommand;
						m_isfirstlist=0;
						GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,
							cursmindexstr);
						SendString(m_strcommand);
						
					}
				}
				break;
			}
			else
			{
				break;
			}
		}
		else
		{
			break;
		}
	case AT_COMMAND_ATCMGD:
		if(iserror==0)
		{
			AfxMessageBox("当前消息已被成功删除!",MB_OK);
			m_strcommand.Empty();
			m_strcommand=_T("AT+CMGL");
			m_strcommand.Insert(30,ch1);
			m_commandtype=AT_COMMAND_ATCMGLTOTOAL;
			SendString(m_strcommand);
			precommand=curcommand;
			curcommand=m_strcommand;
			m_isfirstlist=0;
			smallindex.Delete((cursmindex-1)*3,3);
			if(smallindex.GetLength()>0)
			{
				cursmindexstr.Empty();
				if((cursmindex*3)>smallindex.GetLength())
					GetSubStr(smallindex,smallindex.GetLength()-3,
						smallindex.GetLength()-1,cursmindexstr);
				else
					GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,
						cursmindexstr);
			}	
			break;
		}
		else
		{
			break;
		}
		/*
	case AT_COMMAND_ATCPBS:
		if(iserror==0)
		{
			m_strcommand.Empty();
			m_strcommand=_T("AT+CPBS?");
			m_strcommand.Insert(30,ch1);
			m_commandtype=AT_COMMAND_ATCPBSINFO;
			SendString(m_strcommand);
			precommand=curcommand;
			curcommand=m_strcommand;
			//m_ComPort.RestartMonitoring();
			break;
		}
		else
		{
			//打开SIM卡电话簿时出错
			break;
		}
	case AT_COMMAND_ATCPBSINFO:
		if(iserror==0)
		{
			CStringArray arcpbsinfo;
			BOOL flagcpbs;
			flagcpbs=GetAnswerData(m_recstring,_T("+CPBS:"),arcpbsinfo);
			if(flagcpbs)
			{
				m_pbusedloc=atoi(arcpbsinfo[1]);
				m_pbset.usedloc=m_pbusedloc;
				m_pbtotalloc=atoi(arcpbsinfo[2]);
				m_pbset.totalloc=m_pbtotalloc;
				m_strcommand.Empty();
				m_strcommand=_T("AT+CPBR=?");
				m_strcommand.Insert(30,ch1);
				m_commandtype=AT_COMMAND_ATCPBRLEN;
				SendString(m_strcommand);
				precommand=curcommand;
				curcommand=m_strcommand;
			}
			break;
		}
		else
		{
			break;
		}
	case AT_COMMAND_ATCPBRLEN:
		if(iserror==0)
		{
			CStringArray arans;
			BOOL flag;
			flag=GetAnswerData(m_recstring,_T("+CPBR:"),arans);
			if(flag)
			{
				CString strnum,str1,str2,str3,strsi,strei;
				int startindex,endindex,maxphonenum,maxassotext,pos;
				str1=arans[0];
				str2=arans[1];
				str3=arans[2];
				str1.Delete(0,2);
				pos=str1.Find('-',0);
				GetSubStr(str1,0,pos-1,strnum);
				startindex=atoi(strnum);
				m_pbsindex=startindex;
				m_pbset.startindex=m_pbsindex;
				strsi=strnum;
				str1.Delete(0,pos+1);
				pos=str1.Find(')',0);
				strnum.Empty();
				GetSubStr(str1,0,pos-1,strnum);
				endindex=atoi(strnum);
				m_pbdindex=endindex;
				m_pbset.endindex=m_pbdindex;
				strei=strnum;
				maxphonenum=atoi(str2);
				m_pbphonemaxlen=maxphonenum;
				m_pbset.maxphonelen=maxphonenum;
				maxassotext=atoi(str3);
				m_pbset.maxnamelen=maxassotext;
				m_pbnamemaxlen=maxassotext;
				m_strcommand.Empty();
				m_strcommand=_T("AT+CPBR=");
				m_strcommand+=strsi;
				m_strcommand.Insert(30,',');
				m_strcommand+=strei;
				m_strcommand.Insert(30,ch1);
				m_commandtype=AT_COMMAND_ATCPBRLIST;
				SendString(m_strcommand);
				precommand=curcommand;
				curcommand=m_strcommand;
				//m_ComPort.RestartMonitoring();
				break;
			}
			else
			{
				//得到电话簿条目总数时出错
				break;
			}
		}
		else
		{
			//查询SIM卡电话簿总条目时出错
			break;
		}
	case AT_COMMAND_ATCPBRLIST:
		if(iserror==0)
		{
			m_strphonebook.RemoveAll();
			BOOL flaglist;
			flaglist=GetAnswerData(m_recstring,_T("+CPBR:"),m_strphonebook);
			if(flaglist)
			{
				m_wndSplitter.SetActivePane(0,1,NULL);
				(this->GetActiveView())->PostMessage(WM_GETPHONEBOOKLIST,
					(WPARAM)&m_pbset,(LPARAM)&m_strphonebook);
				break;
			}
			else
			{
				//无法得到电话簿列表
			}
		}
		else
		{
			//得到电话簿列表时出错
			break;
		}
		break;
		*/
	case AT_COMMAND_ATCMGLTOTOAL:
		if(iserror==0)
		{
			smallindex.Empty();
			int pos=m_recstring.Find(':',0);
			while(pos>=0)
			{
				CString oneindex;
				GetSubStr(m_recstring,pos+2,pos+4,oneindex);
				smallindex+=oneindex;
				m_recstring.Delete(0,pos+5);
				pos=m_recstring.Find(':',0);
			}
			int smlen=smallindex.GetLength()/3;
			if(smlen!=0)
			{
				CString notestr;
				notestr.Format("总共存储了%d条短消息",smlen);
				if(m_isfirstlist)
				{
					AfxMessageBox(notestr,MB_OK);
					cursmindex=1;
				}
				else
				{
					pos=smallindex.Find(cursmindexstr,0);
					cursmindex=(pos/3)+1;
			
				}
				m_strcommand.Empty();
				m_strcommand=_T("AT+CMGR=");
				CString smindex;
				if(m_isfirstlist)
					GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,smindex);
				else
					smindex=cursmindexstr;
				m_strcommand+=smindex;
				m_strcommand.Insert(30,ch1);
				m_commandtype=AT_COMMAND_ATCMGR;
				SendString(m_strcommand);
				precommand=curcommand;
				curcommand=m_strcommand;
			}
			else
				AfxMessageBox("存储器中无短信息",IDOK);
			break;
		}
		else
		{
			break;
		}
		/*
	case AT_COMMAND_ATCPBW:
		if(iserror==0)
		{
			m_strcommand.Empty();
			m_strcommand=_T("AT+CPBS?");
			m_strcommand.Insert(30,ch1);
			m_commandtype=AT_COMMAND_ATCPBSINFO;
			SendString(m_strcommand);
			precommand=curcommand;
			curcommand=m_strcommand;
		}
		else
		{
		}*/
	}
	return(iserror);
}

BOOL CMainFrame::GetAnswerData(CString answerstr, CString headstr, CStringArray &resultarray)
{
	CString astr,fstr,substr;
	fstr.Empty();
	fstr.Insert(0,ch1);
	fstr.Insert(1,ch2);
	astr=answerstr;
	int pos,fpos,i;
	pos=astr.Find(headstr,0);
	if(pos<0)
		return(FALSE);
	while(pos>=0)
	{
		substr.Empty();
		astr.Delete(0,2+headstr.GetLength());
		fpos=astr.Find(fstr,0);
		i=0;
		GetSubStr(astr,0,fpos,substr);
		astr.Delete(0,fpos);
		i=0;
		do
		{
			fpos=substr.Find(',',0);
			int j=0;
			if(fpos<0)
			{
				CString tempstr2;
				substr.Delete(substr.GetLength()-1,1);
				tempstr2=substr;
				resultarray.Add(tempstr2);
			}
			else
			{
				CString tempstr;
				for(j=0;j<fpos;j++)
					tempstr.Insert(fpos+5,substr.GetAt(j));
				resultarray.Add(tempstr);
				i++;
				substr.Delete(0,fpos+1);
			}
		}while(fpos>=0);
		pos=astr.Find(headstr,0);
	}
	return(TRUE);
}

void CMainFrame::GetSubStr(CString str, int sindex, int eindex,CString& substr)
{
	int endindex,startindex;
	if((sindex>=str.GetLength())||(sindex>eindex))
	{
		substr=_T("");
		return;
	}
	startindex=sindex;
	if(eindex>=str.GetLength())
		endindex=str.GetLength()-1;
	else
		endindex=eindex;
	int i;
	for(i=startindex;i<=endindex;i++)
		substr.Insert(100,str.GetAt(i));
}

void CMainFrame::Decode(CString sdata, CString &dedata)
{
	CString tempstr,ss;
	int len=sdata.GetLength();
	int tempi;
	tempi=0;
	while(tempi<len)
	{
		ss.Empty();
		ss.Insert(ss.GetLength(),sdata.GetAt(tempi++));
		ss.Insert(ss.GetLength(),sdata.GetAt(tempi++));
		char num;
		num=hextoi(ss);
		tempstr.Insert(tempstr.GetLength(),num);
	}
	sdata=tempstr;
	int sdata_len=sdata.GetLength();
	char SMSbuff[160];
	char * p=SMSbuff;
	for(int i=0;i< sdata_len;i++){
		p[i]=sdata[i];
		char y=p[i];
	}
	p[sdata_len]='\0';
	
    int loop_len=sdata_len/7;
	
	int remainder=sdata_len%7;
	
	for( i=0;i<loop_len;i++){
		char decode_data[9];
		Oct2Sept(p,0,decode_data);
		CString decode_s=decode_data;
		dedata=dedata+decode_s;
		p+=7;

	}
	if(remainder!=0){
        char decode_data[8];
		Oct2Sept(p,remainder,decode_data);
		CString decode_s=decode_data;
		dedata=dedata+decode_s;
	}


}

void CMainFrame::Oct2Sept(char* poctet, int remainder, char *pseptet)
{

	if(remainder==0){
		char test;
		char temp=poctet[0];
		char high=temp&0x80;
        temp=poctet[0];
		char low=temp&0x7f;
		pseptet[0]=low;
		test=pseptet[0];

        temp=poctet[1];
		low=temp&0x3f;
	    WORD x,y=0; 
		x=low;
		x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<1;
		x=x>>8;
		pseptet[1]=x;
		test=pseptet[1];
		

		temp=poctet[1];
		high=temp&0xc0;
		temp=poctet[2];
		low=temp&0x1f;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<2;
		x=x>>8;
		pseptet[2]=x;

        temp=poctet[2];
		high=temp&0xe0;
		temp=poctet[3];
		low=temp&0x0f;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<3;
		x=x>>8;
		pseptet[3]=x;

		temp=poctet[3];
		high=temp&0xf0;
		temp=poctet[4];
		low=temp&0x07;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<4;
		x=x>>8;
		pseptet[4]=x;

		temp=poctet[4];
		high=temp&0xf8;
		temp=poctet[5];
		low=temp&0x03;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<5;
		x=x>>8;
		pseptet[5]=x;

		temp=poctet[5];
		high=temp&0xfc;
		temp=poctet[6];
		low=temp&0x01;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<6;
		x=x>>8;
		pseptet[6]=x;

		temp=poctet[6];
		high=temp&0xfe;
		char z=high;
		z=z>>1;
		z=z&0x7f;
		pseptet[7]=z;
		pseptet[8]='\0';
	}
	if(remainder==1){
		char temp=poctet[0];
		char high=temp&0x80;
        temp=poctet[0];
		char low=temp&0x7f;
		pseptet[0]=low;
        pseptet[1]='\0';
	}
	if(remainder==2){
		char test;
		char temp=poctet[0];
		char high=temp&0x80;
        temp=poctet[0];
		char low=temp&0x7f;
		pseptet[0]=low;
		test=pseptet[0];

        temp=poctet[1];
		low=temp&0x3f;
	    WORD x,y=0; 
		x=low;
		x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<1;
		x=x>>8;
		pseptet[1]=x;
		test=pseptet[1];
        pseptet[2]='\0';
	}
	if(remainder==3){
		char test;
		char temp=poctet[0];
		char high=temp&0x80;
        temp=poctet[0];
		char low=temp&0x7f;
		pseptet[0]=low;
		test=pseptet[0];

        temp=poctet[1];
		low=temp&0x3f;
	    WORD x,y=0; 
		x=low;
		x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<1;
		x=x>>8;
		pseptet[1]=x;
		test=pseptet[1];
		

		temp=poctet[1];
		high=temp&0xc0;
		temp=poctet[2];
		low=temp&0x1f;
		x=0;
		y=0;
		x=low;
        x=x<<8;
		y=y|high;
		y=y&0x00ff;
		x=x|y;
		x=x<<2;
		x=x>>8;
		pseptet[2]=x;
		pseptet[3]='\0';

⌨️ 快捷键说明

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