移动入库BLE增加指令保存上报地址:优化报错问题
authorDXY <1731678236@qq.com>
Fri, 14 Jun 2024 10:36:00 +0000 (18:36 +0800)
committerDXY <1731678236@qq.com>
Fri, 14 Jun 2024 10:36:00 +0000 (18:36 +0800)
code/sdk/drivers/peripheral/config/include/ConfigModel.h
code/sdk/drivers/peripheral/config/src/ConfigModel.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/EventMesh.py
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/telecom_dmp.py

index 5b15392..d29fa57 100644 (file)
@@ -104,6 +104,7 @@ namespace OHOS
             CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD,//入库切换模式旧模式 防止切换来回数据不清楚问题 默认是1 电信入库 2-255其他是移动入库
             CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示
 
+            CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS,//移动入库地址默认测试是适配地址 b.fxltsbl.com 出正式需要修改商用地址 a.fxltsbl.com
             CONFIGMODEL_ITEM_MAX,
         } ;
 
@@ -156,6 +157,7 @@ namespace OHOS
         std::string GetpyVer();
         std::string GetmoderVer();
         std::string GetRegistTime();
+        std::string GetDmp_CM_address();
         
         void Setimei(char *str);
         void SetpyVer(char *str);
@@ -163,6 +165,8 @@ namespace OHOS
      
         void SetSimIccid(char *str);
         void SetRegistTime(char *time);
+
+        void SetDmp_CM_address(char *address);
         
         void SetCat1_4Gability(bool state);
         bool GetCat1_4Gability();
@@ -319,8 +323,8 @@ namespace OHOS
             {ConfigDataType::DATATYPE_INT,     "dmp_change_mode",              "0"           },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1
             {ConfigDataType::DATATYPE_INT,     "dmp_change_mode_old",       "0"           },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致
             #endif
-            {ConfigDataType::DATATYPE_INT,     "time_hour_show_model",       "24"          }//CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示 ,12 12小时显示 ,24 24小时显示
-
+            {ConfigDataType::DATATYPE_INT,     "time_hour_show_model",       "24"          },//CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示 ,12 12小时显示 ,24 24小时显示
+                       {ConfigDataType::DATATYPE_STRING,     "dmp_china_mobile_address", "b.fxltsbl.com"}//CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS 移动入库地址 测试使用适配地址 IP = b.fxltsbl.com 出正式使用商用地址 IP = a.fxltsbl.com
         };
         ConfigModel();                                        // 私有构造函数,确保无法在外部实例化
         ConfigModel(const ConfigModel &) = delete;            // 禁止拷贝构造
index 027273d..7cc9da8 100644 (file)
@@ -757,6 +757,15 @@ namespace OHOS
     int ConfigModel::GetDmpChangeModeOld(void)
     {
         return get_configData_int(CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD);
+    }
+       std::string ConfigModel::GetDmp_CM_address(void) //获取移动入库地址
+    {
+        return get_configData_string(CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS);
+    }
+
+    void ConfigModel::SetDmp_CM_address(char *address) //设置移动入库地址
+    {
+        set_condigData_String(CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS,address);        
     }
     /*
      * @brief 设置震动模式强度
index d40b479..911f3b1 100644 (file)
@@ -87,6 +87,8 @@ enum UDP_COMMAND_HEAD {
     UDP_MSG_SEND_BLE_MAC_TO_CAT1 = 0x16,//发送BLE MAC地址->CAT1
 
     UDP_MSG_RECV_DMP_FACTORY = 0x17,//用于入库配置flag 0已经恢复出厂过 1代表没有恢复出厂过
+
+    UDP_MSG_SEND_DMP_CM_ADDRESS = 0x18,//用于BLE发送移动入库地址 to CAT1 接收
 };
 static uint8_t g_msg_format_type = 0;// 0: old format , 1: new format
 
@@ -1035,6 +1037,32 @@ void set_dmp_china_mobile_factory_flag(char *msg)//设置factory状态
     OHOS::ConfigModel::GetInstance()->SetDmpFactoryStatus(state);
 }
 
+void send_dmp_cm_address_toCat1(void)//发送移动入库的地址to CAT1
+{
+    char address_buf[30] = {0};
+    const char *address_str = const_cast<char*>(OHOS::ConfigModel::GetInstance()->GetDmp_CM_address().c_str());
+    int len = strlen(address_str);
+    if(len != 0)
+    {
+        printf("address_str:%s\r\n",address_str);
+        sprintf_s(address_buf,30,address_str);
+        udp_send_msg_toCat1(UDP_MSG_SEND_DMP_CM_ADDRESS,address_buf);
+    }  
+}
+
+void set_dmp_cm_address_toCat1(char *address)//设置保存移动入库下发的上报地址
+{
+    printf("set_dmp_cm_address_toCat1 %s\r\n",address);
+    if(strncmp(address,"address:",8) == 0)//字符串是否有address:字符串
+    {
+        char* ppbuf = NULL;
+        ppbuf = address+8;
+        
+        OHOS::ConfigModel::GetInstance()->SetDmp_CM_address(ppbuf);
+    }
+    return;
+}
+
 static int udp_packet_parse(char *rx_buffer, int len)
 {
 
@@ -1120,6 +1148,7 @@ static int udp_packet_parse(char *rx_buffer, int len)
                     }else {
                         get_software_version_toCat1();
                         send_ble_mac_toCat1();
+                        send_dmp_cm_address_toCat1();
                         send_dmp_factory_flag();
                     }
                 }
@@ -1134,6 +1163,9 @@ static int udp_packet_parse(char *rx_buffer, int len)
             break;
         case UDP_MSG_GET_TELECON_DMP_TIMESEC://暂时不用
 
+            break;
+        case UDP_MSG_SEND_DMP_CM_ADDRESS://#接收移动入库CAT1下发的地址 BLE需要保存
+            set_dmp_cm_address_toCat1(msg_buffer);
             break;
         case UDP_CMD_GET_CAT1VER:
             index = cat1_handle_version_msg(msg_buffer);
index df8d940..7951835 100644 (file)
@@ -1,8 +1,8 @@
 import _thread
 import usys
 import ql_fs
-CHINA_TELECOM_DM_FUN_ENABLE = 0 #是否开启电信入库的功能
-CHINA_MOBILE_DM_FUN_ENABLE = 0 #开启移动入库功能
+CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能
+CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能
 class EventStore(object):
     def __init__(self):
         self.map = dict()
index b624a38..2754c76 100644 (file)
@@ -50,7 +50,7 @@ import request
 import ql_fs
 import pm
 import sms
-from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE,CHINA_MOBILE_DM_FUN_ENABLE
+from usr.EventMesh import eventMesh
 
 from usr.telecom_dmp import telecomDmpCb
 from usr.china_mobile_dmp import chinamobileCb
@@ -248,6 +248,7 @@ class Cat1Service:
 
         eventMesh.subscribe("get_factory_status",self.get_factory_status)
         eventMesh.subscribe("set_factory_status",self.set_factory_status)
+        eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE)
         eventMesh.publish("delete_sms_event")
 
        
@@ -363,13 +364,13 @@ class Cat1Service:
                 self.reply_cmd('09',"{}".format("at error"))
         
         elif cmd == "10" or cmd == "12" or cmd == "14": #获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能
-            if CHINA_TELECOM_DM_FUN_ENABLE == 1 :
+            if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 :
                 if eventMesh.publish("get_dmp_change_mode") == 1:
                     self.telecom_recv_cmd(cmd,parm)
             else:
                 pass
 
-            if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+            if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1:
                 if eventMesh.publish("get_dmp_change_mode") > 1:
                     self.china_mobile_recv_cmd(cmd,parm)
             else:
@@ -381,14 +382,15 @@ class Cat1Service:
             eventMesh.publish("set_dmp_change_mode",on)
 
         elif cmd == "16":
-            if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+            if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
                 if eventMesh.publish("get_dmp_change_mode") > 1:
                     self.china_mobile_recv_cmd(cmd,parm)
             else:
                 pass
         elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用
             eventMesh.publish("set_factory_status",int(parm))
-          
+        elif cmd == "18":
+            eventMesh.publish("set_dmp_cm_address",str(parm))
         
     def telecom_recv_cmd(self,cmd,parm): #电信入库
         if cmd == "10":
@@ -418,6 +420,9 @@ class Cat1Service:
         if self.factory_status == 0: #只有为的时候才设置进去 1不再设置
             self.reply_cmd('17',"{}".format(1))
 
+    def send_dmp_cm_address_toBLE(self,event,msg):
+        buf_tmp = "address:"+str(msg)
+        self.reply_cmd('18',"{}".format(buf_tmp))
         
     def set_dmp_change_mode(self,event,msg):
         self.telecom_dmp_switch = msg
@@ -775,11 +780,11 @@ class Cat1Service:
         cat1service.ipconfig()
         if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭
             return
-        if CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
+        if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
             if eventMesh.publish("get_dmp_change_mode") == 1:
                 eventMesh.publish("set_network_state",1)
                 telecomDmpCb.telecom_dmp_power_on_init()
-        if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+        if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
             if eventMesh.publish("get_dmp_change_mode") > 1:
                 eventMesh.publish("set_network_state",1)
                 if self.china_mobile_init == 1:
@@ -949,7 +954,7 @@ voiceCall.setCallback(voice_callback)
 
 def checknet_cb(arg):
     print("start checktime!!")
-    if CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
+    if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
         if eventMesh.publish("get_dmp_change_mode") == 1:
             telecomDmpCb.telecom_dmp_power_on_count()
 
index 7ed65a3..23ba189 100644 (file)
@@ -48,7 +48,9 @@ class chinamobile:
         self.iccid_data = ""
         self.software_version = ""
         self.mac_data =""
-        self.address = "b.fxltsbl.com"
+        self.address = "a.fxltsbl.com"
+
+        self.new_address = "a.fxltsbl.com"
 
         self.retryInterval = 10
         self.retryNum = 1#异常重试最大次数
@@ -72,8 +74,18 @@ class chinamobile:
 
         eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息
         eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息
+
+        eventMesh.subscribe("set_dmp_cm_address",self.set_dmp_cm_address)#订阅消息
+        eventMesh.subscribe("get_dmp_cm_address",self.get_dmp_cm_address)#订阅消息
+
         pass
 
+    def set_dmp_cm_address(self,event,msg):#设置网络是否正常
+        self.address = str(msg)
+        self.new_address = str(msg)
+
+    def get_dmp_cm_address(self,event,msg):#获取网络是否正常
+        return self.address
 
     def set_network_state(self,event,msg):#设置网络是否正常
         self.__net_connected = int(msg)
@@ -165,8 +177,18 @@ class chinamobile:
         url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address)
         headers_T ={"Content-Type":"application/json"}
         print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data)))
-        response = request.post(url, data=ujson.dumps(config_data),headers =headers_T)
+        request_result = 0
+        try:
+            response = request.post(url, data=ujson.dumps(config_data),headers =headers_T)
+            request_result = 1
+        except Exception as e:
+            print("response:{}".format(e))
+            request_result = 0
+
         result_json = ""
+        if request_result == 0: #请求出错了
+            return result_json
+
         if response.status_code == 200:#服务器响应成功并返回数据
             content = response.content
             c = next(content)
@@ -182,6 +204,8 @@ class chinamobile:
             return getresult
         url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address)
         result_json = self.china_mobile_first_get_config(url)
+        if result_json == "":
+           return 0 
         # {
         #     "reportTime":1440,
         #     "reportNum":8,
@@ -196,8 +220,8 @@ class chinamobile:
         reportTime = self.reportTime
         reportNum = self.reportNum
         retryNum = self.retryNum
-        address = self.address
-        print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,address))
+        new_address = self.address
+        print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,new_address))
         if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档
             rspCode = result_json["rspCode"]
             rspCode_zh = result_json["rspMsg"]
@@ -225,19 +249,21 @@ class chinamobile:
                     print("true")
                 else:
                     print("false")
-        self.config_data["reportTime"] = self.reportTime
-        self.config_data["heartBeatTime"] = self.heartBeatTime
-        self.config_data["reportNum"] = self.reportNum
-        self.config_data["retryNum"] = self.retryNum
-        self.config_data["retryInterval"] = self.retryInterval
-        self.config_data["address"] = str(self.address)
-
         
         if getresult == 1:#请求配置文件成功
             if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or  (self.heartBeatTime != heartBeatTime) or\
-             (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != address):
+             (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != new_address):
                 #重新走注册流程 清空报错次数 记录当前时间戳
                 print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致
+                self.config_data["reportTime"] = self.reportTime
+                self.config_data["heartBeatTime"] = self.heartBeatTime
+                self.config_data["reportNum"] = self.reportNum
+                self.config_data["retryNum"] = self.retryNum
+                self.config_data["retryInterval"] = self.retryInterval
+                # self.config_data["address"] = str(self.address)
+                if new_address != self.address : #服务器下发和本地不一致需要用服务器下发的最新的IP 并把这个IP发送到BLE保存
+                    eventMesh.publish("send_dmp_cm_address_toBLE",str(self.address))
+
                 self.write_config_msg_file(self.config_data) #保存新的配置文件
                 return 2
         return getresult #1 获取成功 0 获取失败
@@ -354,29 +380,42 @@ class chinamobile:
         test_data = ujson.dumps(send_autoregist)#需要转义的字符串
         print("test_data:{}".format(test_data))
         headers_T ={"Content-Type":"application/json"}
-        response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T)
-        result_json = ""
-        
-        if response.status_code == 200:
-            dev_autoregist_result = 1
-            content = response.content
-            c = next(content)
-            result_json = ujson.loads(c)#解析成json格式
-        else:
+        response = 0
+        request_result = 0
+        print("shangbao address:{}\r\n".format(url))
+        try:
+            response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T)
+            request_result = 1
+            print("response success:\r\n")
+        except Exception as e:
+            print("response:{}".format(e))
+            request_result = 0
+
+        if request_result == 0:#请求出错了
             dev_autoregist_result = 0
+            return dev_autoregist_result
+        else:
+            result_json = ""
             
-        
-        if "rspCode" in result_json:
-            rspCode = result_json["rspCode"]
-            rspMsg = result_json["rspMsg"]
-            if rspCode == "0000" or rspMsg == "成功":
+            if response.status_code == 200:
                 dev_autoregist_result = 1
+                content = response.content
+                c = next(content)
+                result_json = ujson.loads(c)#解析成json格式
             else:
                 dev_autoregist_result = 0
-        else:
-            dev_autoregist_result = 0
-
-        return dev_autoregist_result
+                
+            
+            if "rspCode" in result_json:
+                rspCode = result_json["rspCode"]
+                rspMsg = result_json["rspMsg"]
+                if rspCode == "0000" or rspMsg == "成功":
+                    dev_autoregist_result = 1
+                else:
+                    dev_autoregist_result = 0
+            else:
+                dev_autoregist_result = 0
+            return dev_autoregist_result
     
     def read_config_file(self):#获取配置文件,一开机是没有配置文件的
         
@@ -646,15 +685,18 @@ class chinamobile:
                 self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
                 self.report_Num_old = 0#保存本地
                 self.retryNum_old = 0#保存本地
-
-                self.address = "b.fxltsbl.com"#默认
+                get_address = eventMesh.publish("get_dmp_cm_address")
+                if get_address == None:#获取出来地址是空的使用适配地址
+                    self.address = "a.fxltsbl.com"#默认 
+                else: #恢复出厂使用BLE传送过来的地址
+                    self.address = str(eventMesh.publish("get_dmp_cm_address"))
 
                 self.config_data["retryInterval"] = self.retryInterval
                 self.config_data["retryNum"] = self.retryNum
                 self.config_data["heartBeatTime"] = self.heartBeatTime
                 self.config_data["reportTime"] = self.reportTime
                 self.config_data["reportNum"] = self.reportNum
-                self.config_data["address"] = self.address
+                # self.config_data["address"] = self.address
 
                 self.config_data["report_Num_old"] = self.report_Num_old
                 self.config_data["retryNum_old"] = self.retryNum_old
index de00742..9043fe2 100644 (file)
@@ -263,9 +263,16 @@ class telecomDmp:
         data_encode = base64.b64encode(json_bytes)#再转换成base64的编码格式 密文
         print("data_infor:{} data:{}".format(data_encode,data))
         headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写
-        response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T)
+        
+        request_result = 0
+        try:
+            response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T)
+            request_result = 1
+        except Exception as e:
+            print("response:{}".format(e))
+            request_result = 0
         print("response.status_code:{}".format(response.status_code))
-        if response.status_code == 200: #返回状态码 200服务器正常解析数据
+        if response.status_code == 200 and request_result == 1: #返回状态码 200服务器正常解析数据
             content = response.content#后台返回的结果
             c = next(content)
 
@@ -286,12 +293,13 @@ class telecomDmp:
                         self.multiple_day_resend()
                         #上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域
                         print("regist success:!!!!!")
-                        return
+                        return 1
                 if resultCode == "1":
                     print("Decode error")#解码错误 设备编码不正确
                 
                 if resultCode == "2":#
                     print("Check error")#校验错误 设备里面数据不正确 有些数据不应该为空
+        return 0
 
     def timer_cb(self,data):#定时器回调
         self.telecom_regeist_infor()#重新进行自注册
@@ -343,7 +351,9 @@ class telecomDmp:
             print("get_network_state:\r\n",network_state)
             if network_state == 0:#网络不正常就不需要重发了等下一个周期
                 return
-            self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t
+            result = self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t
+            if result == 0: #上报出错了
+                return
             self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天
             REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec)
             eventMesh.publish("set_regist_time",REGIST_buf)