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

📄 demo01dlg.cpp

📁 东进板的电话短信程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			StopPlay(0);
			m_Status.InsertItem(0,"收到CAS ACK");
			status=5;
		}
		break;
	case 5:
		Sleep(TD2);
		fskpack[0]=0x84;//信息类型
		fskpack[1]=34+m_Message.GetLength();//信息包长度
		fskpack[2]=0x01;//信息包编码
		fskpack[3]=0xB1;//命令码
		fskpack[4]=31+m_Message.GetLength();//信息长度
		fskpack[5]=0x00;//标志00
		fskpack[6]=0x02;//部件02
		fskpack[7]=0x31;//发送方号码
		fskpack[8]=0x32;
		fskpack[9]=0x33;
		fskpack[10]=0x34;
		fskpack[11]=0x35;
		fskpack[12]=0xff;
		fskpack[13]=0x00;//公共信箱
		fskpack[14]=0x32;//2001年
		fskpack[15]=0x30;
		fskpack[16]=0x30;
		fskpack[17]=0x31;
		fskpack[18]=0xC4;
		fskpack[19]=0xEA;
		fskpack[20]=0x31;//10月
		fskpack[21]=0x30;
		fskpack[22]=0xD4;
		fskpack[23]=0xC2;
		fskpack[24]=0x30;//1日
		fskpack[25]=0x31;
		fskpack[26]=0xC8;
		fskpack[27]=0xD5;
		fskpack[28]=0x30;//9时
		fskpack[29]=0x39;
		fskpack[30]=0xCA;
		fskpack[31]=0xB1;
		fskpack[32]=0x33;//30分
		fskpack[33]=0x30;
		fskpack[34]=0xB7;
		fskpack[35]=0xD6;
		//短信内容
		for(i=0;i<m_Message.GetLength();i++)
		{
			fskpack[36+i]=m_Message.GetAt(i);
		}
		//算校验位
		for(i=0;i<36+m_Message.GetLength();i++)
			aaa+=fskpack[i];
		aaa=aaa%256;
		aaa=~aaa;
		aaa=aaa+1;
		fskpack[36+m_Message.GetLength()]=aaa;  //校验位
		//使用DJFsk_SendFSKA发送短消息FSK包,可以指定0x55后的全"1"的个数
		DJFsk_SendFSKA(0,fskpack,36+m_Message.GetLength()+1,1,16);
		m_Status.InsertItem(0,"正在发送短消息");
		status=6;
		break;
	case 6:
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=yzConvert(tmpval);
			m_dtmf+=dtmf[count];
			UpdateData(false);
			count++;
		}
		if(DJFsk_CheckSendFSKEnd(0,1)==1)
		{
			m_Status.InsertItem(0,"短消息发送完成");
			DJFsk_StopSend(0,1);
			status=7;
		}
		break;
	case 7:
		if(count>=4)
		{
			count=0;
			dtmf[4]=NULL;
			m_dtmf=dtmf;
			UpdateData(false);
//			if(strcmp(dtmf,"d1aa")==0)
//			{
//				m_Status.InsertItem(0,"对方接收短消息成功");
				status=8;
//			}
//			else
//			{
//				m_Status.InsertItem(0,"对方接收短消息失败,请重发");
//				InitDtmfBuf(0);
//				status=0;
//			}
			break;
		}
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=yzConvert(tmpval);
			m_dtmf+=dtmf[count];
			UpdateData(false);
			count++;
		}
		break;	
	case 8:
		Sleep(TD3);
//		Sleep(1000);
		fskpack[0]=0x55;
		fskpack[1]=0x55;
		fskpack[2]=0x55;
		fskpack[3]=0x55;
		fskpack[4]=0x55;
		fskpack[5]=0x55;
		fskpack[6]=0x55;
		fskpack[7]=0x55;
		fskpack[8]=0xff;
		fskpack[9]=0x84;//信息类型
		fskpack[10]=0x04;//信息包长度
		fskpack[11]=0x01;//信息包编码
		fskpack[12]=0xB7;	//命令码
		fskpack[13]=0x01;	//长度
		fskpack[14]=0x00;	//内容
		fskpack[15]=0xBF;	//校验
		DJFsk_SendFSKA(0,fskpack,16,1,16);
		m_Status.InsertItem(0,"发结束指令");
		status=9;
		break;
	case 9:
		if(DJFsk_CheckSendFSKEnd(0,1)==1)
		{
			DJFsk_StopSend(0,1);
			status=10;
		}
		break;
	case 10:
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf1=yzConvert(tmpval);
			m_dtmf+=dtmf1;
			UpdateData(false);
		}
		if(!OffHookDetect(0))
		{
			m_Status.InsertItem(0,"本次发送完成,谢谢!");
			InitDtmfBuf(0);
			m_MessageCtrl.EnableWindow(true);
			status=0;
		}
		break;
	//上传
	case 11:
		if(count>=3)
		{
			m_ddd="";
			count=0;
			dtmf[3]=NULL;
			if(strcmp(dtmf,"118")==0)
				status=12;
			else
			{
				m_Status.InsertItem(0,"receive 118 error!");
				status=0;
			}
			break;
		}
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=yzConvert(tmpval);
			count++;
		}
		break;
	case 12:
		Sleep(TD1);
		StartPlayFile(0,"cas.pcm ",0L);
		m_Status.InsertItem(0,"发CAS");
		status=13;
		break;
	case 13:
		if(CheckPlayEnd(0)==1)
		{
			StopPlay(0);
			status=14;
		}
	case 14:
		if(GetDtmfCode(0)==13)
		{
			m_Status.InsertItem(0,"收到CAS ACK");
			status=15;
		}
		break;
	case 15:	//询问服务类型
		Sleep(TD2);
		fskpack[0]=0x55;
		fskpack[1]=0x55;
		fskpack[2]=0x55;
		fskpack[3]=0x55;
		fskpack[4]=0x55;
		fskpack[5]=0x55;
		fskpack[6]=0x55;
		fskpack[7]=0x55;
		fskpack[8]=0xff;
		fskpack[9]=0x84;	//信息类型
		fskpack[10]=0x03;	//信息包长度
		fskpack[11]=0x01;	//信息包编码
		fskpack[12]=0xB0;	//命令码
		fskpack[13]=0x00;	//长度
		fskpack[14]=0xC8;	//校验
		DJFsk_SendFSKA(0,fskpack,15,1,16);
		status=16;
/*		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf1=yzConvert(tmpval);
			m_ddd+=dtmf1;
			UpdateData(false);
		}*/
		break;
	case 16:
		if(DJFsk_CheckSendFSKEnd(0,1)==1)
		{
			DJFsk_StopSend(0,1);
			m_Status.InsertItem(0,"询问服务类型");
			status=17;
		}
		break;
	case 17:
		if(count>=11)
		{
			count=0;
			dtmf[11]=NULL;
			if(strcmp(dtmf,"d1bddddddd1")==0)
			{
				m_Status.InsertItem(0,"得到服务类型");
				status=18;
			}
			else
			{
				m_Status.InsertItem(0,"询问服务类型失败!");
				status=0;
			}
			break;
		}
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=yzConvert(tmpval);
			m_dtmf+=dtmf[count];
			UpdateData(false);
			count++;
		}
		break;
	case 18:
		Sleep(TD3);
		fskpack[0]=0x55;
		fskpack[1]=0x55;
		fskpack[2]=0x55;
		fskpack[3]=0x55;
		fskpack[4]=0x55;
		fskpack[5]=0x55;
		fskpack[6]=0x55;
		fskpack[7]=0x55;
		fskpack[8]=0xFF;
		fskpack[9]=0x84;	//信息类型
		fskpack[10]=0x05;	//信息包长度
		fskpack[11]=0x01;	//信息包编码
		fskpack[12]=0xB2;	//命令码
		fskpack[13]=0x02;	//长度
		fskpack[14]=0x00;
		fskpack[15]=0x03;
		fskpack[16]=0xBF;	//校验
		DJFsk_SendFSKA(0,fskpack,17,1,16);
		status=19;
		break;
	case 19:
		if(DJFsk_CheckSendFSKEnd(0,1)==1)
		{
			DJFsk_StopSend(0,1);
			m_Status.InsertItem(0,"发上传指令");
			Sleep(500);
			status=191;
		}
		break;
	case 191:
		if(count>=2)
		{
			count=0;
			dtmf[2]=NULL;
			if(strcmp(dtmf,"d1")==0)
			{
				m_Status.InsertItem(0,"终端正确得到上传指令");
				status=20;
			}
			else
			{
				m_Status.InsertItem(0,"终端未正确得到上传指令");
				status=0;
			}
			break;
		}
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=yzConvert(tmpval);
			count++;
		}
		break;
	case 20:
//		HandleDtmf();
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf1=yzConvert(tmpval);
			if(dtmf1=='b')
			{
				m_Status.InsertItem(0,"收到消息位第一位'b'");
				status=21;
				break;
			}
			else
			{
				m_Status.InsertItem(0,"receive message error!");
				status=0;
			}
		}
		break;
	case 21:
		if(count>=2)
		{
			count=0;
			totalbytes=dtmf[0]*16+dtmf[1];
			m_Status.InsertItem(0,"收到消息总长度,接收内容中...");
			status=210;
			break;
		}
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			dtmf[count]=tmpval;
			count++;
		}
		break;
	case 210:
		//跳过回执标志位、接收方地址、分隔符0xFF
		dtmf[count]=(char)GetDtmfCode(0);
		count=1-count;
		if(count==0)
			totalbytes--;    //每取走两个Dtmf码,总长度减1
		if(count==0)
		{
			if(dtmf[0]==15&&dtmf[1]==15)
			{
				status=22;
				break;
			}
		}
		break;
	case 22:
		if((tmpval=GetDtmfCode(0))!=-1)
		{
			if(flag==0)
			{
				dtmf[count]=tmpval;
				flag=1;
			}
			else if(flag==1)
			{
				dtmf[count]=dtmf[count]<<4;
				dtmf[count]+=tmpval;
				flag=0;
				count++;
				if(count>=totalbytes)
				{
					flag=0;
					count=0;
					m_Status.InsertItem(0,"收齐数据区内容");
					status=23;
				}
			}
		}
		break;
	case 23:  //处理显示短消息
		for(i=0;i<totalbytes;i++)
		{
			if(dtmf[i]!=-1)
				m_ddd+=dtmf[i];
		}
		UpdateData(false);
		m_Status.InsertItem(0,"显示短消息内容");
		status=24;
		break;
	case 24:
		//Sleep(1000);
		fskpack[0]=0x55;
		fskpack[1]=0x55;
		fskpack[2]=0x55;
		fskpack[3]=0x55;
		fskpack[4]=0x55;
		fskpack[5]=0x55;
		fskpack[6]=0x55;
		fskpack[7]=0x55;
		fskpack[8]=0xFF;
		fskpack[9]=0x84;	//信息类型
		fskpack[10]=0x04;	//信息包长度
		fskpack[11]=0x01;	//信息包编码
		fskpack[12]=0xB7;	//命令码
		fskpack[13]=0x01;	//长度
		fskpack[14]=0x00;
		fskpack[15]=0xBF;	//校验
		DJFsk_SendFSKA(0,fskpack,16,1,16);
		m_Status.InsertItem(0,"已发送挂机命令");
		status=25;
		break;
	case 25:
		if(DJFsk_CheckSendFSKEnd(0,1)==1)
		{
			DJFsk_StopSend(0,1);
			status=26;
		}
		break;
	case 26:
		if(!OffHookDetect(0))
		{
			m_Status.InsertItem(0,"本次接收完成,谢谢!");
			m_dtmf="";
			UpdateData(false);
			InitDtmfBuf(0);
			status=0;
		}
		break;
	default:
		;
	}

	CDialog::OnTimer(nIDEvent);
}

char CDemo01Dlg::yzConvert(int code)
{
	char c;

	switch(code)
    {
		case 10:
			c = '0';
			break;
		case 11:
			c = '*';
			break;
		case 12:
			c = '#';
			break;
        case 13:
        case 14:
        case 15:
            c=code-13+'a';
            break;
        case 0:
            c='d';
            break;
		default:
			c = code + '0';//转换成ASCII码
	}
	return c;
}

void CDemo01Dlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	KillTimer(0);
	yzExitSystem();
}

void CDemo01Dlg::yzExitSystem()
{
	DisableCard() ;
	FreeDRV();
	DJFsk_Release();
}

void CDemo01Dlg::HandleDtmf()
{
	short tmpchar;
	
	while((tmpchar=GetDtmfCode(0))!=-1)
	{
		m_dtmf+=yzConvert(tmpchar);
	}
	UpdateData(false);
}

⌨️ 快捷键说明

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