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

📄 mascdriverdlg.cpp

📁 mobitex 网络的终端采用的串口通信程序。目前正在使用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
							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 + -