📄 mascdriverdlg.cpp
字号:
for (i=0;i<32;i++)
{
bitmap[32+i]=a & int(pow(2,i)); //pow()函数为a(即低32位)与2的i次方挨个取出每一位存入数组pow[]
};
for (i=0;i<32;i++)
{
bitmap[i]=b & int(pow(2,i)); //pow()函数为b(即高32位)与2的i次方挨个取出每一位存入数组pow[]
};
command=strtol(frame.Mid(22, 2),&endptr,16);//在AREA_LIST之后,将第21位','略进,即从第22位起取command参数
Li_ArealistReceived(bitmap,64,command);
} else Li_NoAreaList();
}
break;
case '2'://返回路由参数
{
int i; //字符串字符指示器
int p=0; //当前项目指示器
int r=0; //列表元素指示器
char * endptr; //字符串转换
CString NetID_mobile_Rx;
ListPapaQA02 * list;
int RSSI_PROC_mode;
int RSSI_RERIOD;
int SCAN_TIME;
int NumOfBase;
CString Current_baseId;
CString Current_areaId;
int roaming_value;
for (i=5;i<(frame.GetLength()-1);i++ ) //因为字符串中有 ':'.
{
if (frame.GetAt(i)==',')
p+=1;
else
{
if(p==0)
{
NetID_mobile_Rx=frame.Mid(i,4);
i+=3;
}
if (p==1)
{
RSSI_PROC_mode=strtol( frame.Mid(i,2), &endptr, 16);
i+=1;
}
if (p==2)
{
RSSI_RERIOD=strtol( frame.Mid(i,2), &endptr, 16);
i+=1;
}
if (p==3)
{
SCAN_TIME=strtol( frame.Mid(i,2), &endptr, 16);
i+=1;
}
if (p==4)
{
NumOfBase=strtol( frame.Mid(i,2), &endptr, 16);
list= new ListPapaQA02[NumOfBase];
i+=1;
}
if (p==5)
{
Current_baseId=frame.Mid(i,2);
i+=1;
}
if (p==6)
{
Current_areaId=frame.Mid(i,2);
i+=1;
}
if (p==7)
{
roaming_value=strtol( frame.Mid(i,2), &endptr, 16);
i+=1;
}
if ((p>=8) && (RSSI_PROC_mode==1))
{
(list+r)->Dofreq = frame.Mid(i,4);
(list+r)->RoamingVal =strtol( frame.Mid(i+5,2), &endptr, 16);
i+=6;
r+=1;
} else
if ((p>=8) && (RSSI_PROC_mode==0))
{
(list+r)->BaseID=frame.Mid(i,2);
(list+r)->AreaID=frame.Mid(i+2,2);
(list+r)->RoamingVal=strtol( frame.Mid(i+5,2), &endptr, 16);
i+=6;
r+=1;
}
}
}
Li_QA02(NetID_mobile_Rx,RSSI_PROC_mode,RSSI_RERIOD,SCAN_TIME,NumOfBase,Current_baseId,Current_areaId,roaming_value,list);
}
break;
case '3':
{
}
break;
}
}
void CMascdriverDlg::HandleFCommand(CString frame)
{
switch(frame.GetAt (2)) {
case 'A':
// 电源模式函数
Handle_FA_Command(frame);
break;
case 'F':
{
flagNetworkOnline=TRUE; //网络处于连接状态
Li_FF();
}
//网络已经连接好
break;
case 'G':
{
flagNetworkOnline=FALSE; //网络连接短开
Li_FG(); //Moden和网络失去连接
}
break;
case 'H':
Li_FH(); //Moden已经将MPAK包发送出去
break;
case 'K':
{
char *endptr;
errorcode=strtol( frame.Mid(3,2), &endptr, 16);
Li_FK(errorcode);
}//错误的信息
break;
case 'O':
Li_FO(); //Moden已经关闭
break;
case 'P':
{
char *endptr;
Li_FP(strtol( frame.Mid(3,6), &endptr, 16)); //终端的MAN号
}break;
case 'Q':
Li_mascDeviceId(frame.Mid(3,3)); //控制masc协议的设备的类型
break;
case 'S':
{int outside =frame.GetAt(3)-48; //改变通信区,将asc码变成数字
int command =frame.GetAt(5)-48; //将字符变成数字,将asc码变成数字
Li_trafficAreaChanged(outside, command);
}
break;
case 'W':
{//这种类型的modem不支持
char *endptr;
Li_ConfigDCDsignal(strtol( frame.Mid(3,2), &endptr, 16));
}
break;
case 'X': // 改变通信参数
char *endptr;
Li_communicationParachanged(strtol( frame.Mid(6,2), &endptr, 16));
break;
case 'Y' :
{
if (strtol( frame.Mid(3,2), &endptr, 16)==0)
Li_FY00();
else
Li_FY01();
}
break;
case 'Z':
Handle_F_Zcommand(frame); // 产品信息
break;
default: // Information frame.
Handle_F_XXcommand(frame);
}
}
//产品信息处理函数
void CMascdriverDlg::Handle_F_Zcommand(CString frame)
{
switch(frame.GetAt (4))
{
case '1' ://软件序列号
Li_FZ01(frame.Mid(6,(frame.GetLength()-7))); //字符串以“:”结束
break;
case '2' ://软件版本号
Li_FZ02(frame.Mid(6,(frame.GetLength()-7))); //字符串以“:”结束
break;
case '3' ://硬件序列号
Li_FZ03(frame.Mid(5,(frame.GetLength()-6))); //字符串以“:”结束
break;
case '4' ://音频信息
Li_FZ04(frame.Mid(6,(frame.GetLength()-7))); //爱立信的MODEM不支持此项功能
}
}
void CMascdriverDlg::Handle_FA_Command(CString frame)
{
char *endptr;
switch(frame.GetAt (4))
{
case '1' :
//当前电源模式
Li_FA01(strtol( frame.Mid(6,2), &endptr, 16));
break;
//当前RSSI值(00-->ff)
case '2' :
Li_FA02(strtol( frame.Mid(6,2), &endptr, 16));
break;
case '3' :
//电源电量(00--》64)
Li_FA03(strtol( frame.Mid(6,2), &endptr, 16));
break;
}
}
//XX表示一个数字
void CMascdriverDlg::Handle_F_XXcommand(CString frame)
{
//负责处理接收信息
char *endptr;
char ch1;
ch1=frame.GetAt(3);
switch (ch1)
{
case '1' :
{
char ch2;
ch2=frame.GetAt(4);
switch (ch2)
{
case '1' :
if ((strtol( frame.Mid(6,2), &endptr, 16))==1)
Li_No_contactAndDie(); //没连接,死
else Li_No_contactAndLive(); //没连接,活
break;
case '2' :
if ((strtol( frame.Mid(6,2), &endptr, 16))==1)
Li_contactAndDie();//连接,死
else Li_contactAndLive();//连接,活
break;
}
}
break;
case '2' :
{
int TerminalMan;
TerminalMan=strtol( frame.Mid(4,6), &endptr, 16);
int i;
int p=0;
int q=0;
int r=0;
int filelist[7];
int grouplist[15];
for (i=10;i<(frame.GetLength()-1);i++ ) //因为字符串中有 ':'.
{
if (frame.GetAt(i)==',')
p+=1;
else
{
if(p<8)
{
*(filelist+q)=strtol( frame.Mid(i,6), &endptr, 16);
q+=1;
}
else
{
*(grouplist+r)=strtol( frame.Mid(i,6), &endptr, 16);
r+=1;
};
i+=5;
}
}
Li_F02(TerminalMan,filelist,q,grouplist,r);
}
break;
case '3' :
{
CString NetWorkID;
CString OperatorName;
NetWorkID=frame.Mid(4,4);
OperatorName=frame.Mid(8,(frame.GetLength()-9));
Li_F03(NetWorkID,OperatorName);
}
break;
}
}
void CMascdriverDlg::Li_FA01(int mode)
{
CString timeStr;
CString strDebugMsg;
if (mode == 1)
strDebugMsg = "正常模式";
if (mode == 2)
strDebugMsg = "省电模式";
CTime t = CTime::GetCurrentTime();
timeStr = t.Format( "%Y%m%d %H:%M:%S,--FA 01:," );
timeStr = timeStr + strDebugMsg;
timeStr += 0x0d;
timeStr += 0x0a;
AddMsgToEdit(m_msg_edit,timeStr);
LoginFile(m_logFileName,timeStr);
}
void CMascdriverDlg::Li_FA02(int value)
{
m_RecRssi = value; //用来记录RSSI的信号值。
}
void CMascdriverDlg::Li_FA03(int level)
{
;//用户接口
}
//提示收到不能执行的或错误的命令。
void CMascdriverDlg::HandleECommand(CString frame)
{
Li_E();
}
void CMascdriverDlg::HandleMCommand(CString frame) //frame 已经去头去尾
{
//在接收信息包的时候不会出现 MAN列表
CString data = frame.Mid(2, (frame.GetLength ()-2));
struct mpakst mpak ;
char *endptr;
mpak.sender = strtol(data.Mid(0, 6),&endptr,16); // Sender.
mpak.addressee = strtol(data.Mid(6, 6),&endptr,16); // Addressee.
int byteSeven = strtol(data.Mid(12, 2),&endptr,16);
mpak.MAILBOX_F = byteSeven & 0x01; // MAILBOX_F.
mpak.POSACK_F = (byteSeven & 0x02) >> 1; // Posack.
mpak.SENDLIST_F= (byteSeven & 0x04) >> 2; // 发送列表。
mpak.UNKNOWN_F = (byteSeven & 0x08) >> 3; // UNKNOWN_F
mpak.TrafficState = (byte)(byteSeven & 0xE0)>>5; //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -