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