移动入库未完善,待完善优化;添加py压缩文件
authorDXY <1731678236@qq.com>
Fri, 31 May 2024 10:23:22 +0000 (18:23 +0800)
committerDXY <1731678236@qq.com>
Fri, 31 May 2024 10:23:22 +0000 (18:23 +0800)
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp
code/sdk/build/config/target_config/brandy/config.py
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/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405311822.zip [new file with mode: 0644]
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/update.json

index a4ad413..e837acc 100644 (file)
@@ -96,6 +96,8 @@ namespace OHOS
             CONFIFMOFEL_ITEM_SIM_ICCID,//SIM卡的ICCID
             CONFIFMOFEL_ITEM_TELECOM_DMP_TIMESEC,//注册时间戳
 
+            CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS,//入库恢复出厂状态 0已恢复出厂过 1代表没有 1cat1发送
+
             CONFIGMODEL_ITEM_MAX,
         } ;
 
@@ -181,6 +183,9 @@ namespace OHOS
 
         void SetCallVolume(int value);
         int GetCallVolume(void);
+        
+        void SetDmpFactoryStatus(int state);
+        int GetDmpFactoryStatus(void);
 
         void SetVibrationReminder(int state);
         int GetVibrationReminder(void);
@@ -275,6 +280,7 @@ namespace OHOS
             {ConfigDataType::DATATYPE_STRING,  "sedentary_reminderTime ",  "10:00-22:00" }, // CONFIFMOFEL_ITEM_SEDENTARY_REMINDERTIME,//久坐提醒时间段
             {ConfigDataType::DATATYPE_STRING,  "sim_iccid",                ""            },//CONFIFMOFEL_ITEM_SIM_ICCID cat1的iccid
             {ConfigDataType::DATATYPE_STRING,  "telecom_regist_timesec",   ""            },//CONFIFMOFEL_ITEM_TELECOM_DMP_TIMESEC
+            {ConfigDataType::DATATYPE_INT,     "dmp_factory_status",       "0"           }//CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS默认是0
         };
         ConfigModel();                                        // 私有构造函数,确保无法在外部实例化
         ConfigModel(const ConfigModel &) = delete;            // 禁止拷贝构造
index a653c59..f407f6d 100644 (file)
@@ -671,6 +671,15 @@ namespace OHOS
         set_condigData_String(CONFIGMODEL_ITEM_CAT1_MODEMVER,str);        
     }
 
+    void ConfigModel::SetDmpFactoryStatus(int state)
+    {
+        set_condigData_Int(CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS,state);
+    }
+
+    int ConfigModel::GetDmpFactoryStatus(void)
+    {
+        return get_configData_int(CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS);
+    }
     /*
      * @brief 设置震动模式强度
      * @param 马达 开关,3 强,2 中,1 弱,0 关
index 7f71211..efd986c 100755 (executable)
@@ -140,7 +140,8 @@ target = {
                     'FD230',
                     'CYWEE_SPORT',
                     'SUPPORT_HID_SERVICE',
-                    'SUPPORT_TELECOM_DMP',
+                    'SUPPORT_TELECOM_DMP'
+                    #'SUPPORT_CHINA_MOBILE_DMP
                     ],
         'ram_component': ["algorithm", "dfx_port_brandy", "dfx_update", 'dfx_nv', "osal", "arch_port", "-:testsuite",
                           "liteos_port", 'lcd', 'qspi_display', 'dfx_file_operation',
index fbd35c6..acecf40 100644 (file)
@@ -82,6 +82,10 @@ enum UDP_COMMAND_HEAD {
     UDP_MSG_SET_TELECON_DMP_SWITCH = 0x13,//通知cat1是否开启电信入库功能
     UDP_MSG_GET_TELECON_DMP_TIMESEC = 0x14,//获取本地保存的注册的时间戳
     UDP_MSG_RECV_CAT1_SMS_CONTENT = 0x15,//接收信息内容数据
+
+    UDP_MSG_SEND_BLE_MAC_TO_CAT1 = 0x16,//发送BLE MAC地址->CAT1
+
+    UDP_MSG_RECV_DMP_FACTORY = 0x17,//用于入库配置flag 0已经恢复出厂过 1代表没有恢复出厂过
 };
 static uint8_t g_msg_format_type = 0;// 0: old format , 1: new format
 
@@ -976,6 +980,30 @@ void get_regist_time_toCat1(void)//设置电信入库功能开关->CAT1
         udp_send_msg_toCat1(UDP_MSG_GET_TELECON_DMP_TIMESEC,time_buf);
     }
 }
+void send_ble_mac_toCat1(void)//发送BLE mac地址 to CAT1
+{
+    errcode_t ret = 0;
+    uint8_t btaddr[6] = {0};
+    char btaddr_str[64] = {0};
+    uint32_t len = 6;
+    ret = uapi_get_nv_btaddr((uint8_t *)btaddr, &len);
+    sprintf((char *)btaddr_str, "%02X:%02X:%02X:%02X:%02X:%02X", btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]);
+    udp_send_msg_toCat1(UDP_MSG_SEND_BLE_MAC_TO_CAT1,btaddr_str);
+}
+void send_dmp_factory_flag(void)
+{
+    printf("send_dmp_factory_flag\r\n");
+    char send_str[10] = {0};
+    int state = OHOS::ConfigModel::GetInstance()->GetDmpFactoryStatus();
+    sprintf((char *)send_str, "%d", state);
+    udp_send_msg_toCat1(UDP_MSG_RECV_DMP_FACTORY,send_str);//发送和接收同一个指令
+}
+void set_dmp_factory_flag(char *msg)//设置factory状态
+{
+    printf("set_dmp_factory_flag:%s\r\n",msg);
+    int state = atoi(msg);
+    OHOS::ConfigModel::GetInstance()->SetDmpFactoryStatus(state);
+}
 
 static int udp_packet_parse(char *rx_buffer, int len)
 {
@@ -1049,6 +1077,11 @@ static int udp_packet_parse(char *rx_buffer, int len)
                     get_sim_iccid_toCat1();
                     get_regist_time_toCat1();
                 #endif
+                #ifdef SUPPORT_CHINA_MOBILE_DMP //是否开启移动
+                    get_software_version_toCat1();
+                    send_ble_mac_toCat1();
+                    send_dmp_factory_flag();
+                #endif
             }
             break;
         case UDP_MSG_GET_TELECON_DMP_TIMESEC:
@@ -1067,6 +1100,9 @@ static int udp_packet_parse(char *rx_buffer, int len)
                 save_sim_iccid_toBle(msg_buffer);
             #endif
             break;
+        case UDP_MSG_RECV_DMP_FACTORY:
+            set_dmp_factory_flag(msg_buffer);
+            break;
         case UDP_MSG_RECV_CAT1_SMS_CONTENT://接收单条短信内容
         case UDP_MSG_SMS:
             index = cat1_handle_sms(msg_buffer);
index 6441113..7c8cf68 100644 (file)
@@ -1,7 +1,8 @@
 import _thread
 import usys
 import ql_fs
-CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能
+CHINA_TELECOM_DM_FUN_ENABLE = 0 #是否开启电信入库的功能
+CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能
 class EventStore(object):
     def __init__(self):
         self.map = dict()
index bf7f36a..06cbb20 100644 (file)
@@ -50,10 +50,12 @@ import request
 import ql_fs
 import pm
 import sms
-from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE
+from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE,CHINA_MOBILE_DM_FUN_ENABLE
 # CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库功能 1开启 0关闭
 if CHINA_TELECOM_DM_FUN_ENABLE == 1:#防止两边不同步修改 用于包含头文件信息
     from usr.telecom_dmp import telecomDmpCb
+if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+    from usr.china_mobile_dmp import chinamobileCb
 
 def msg_cb(args):
     index = args[1]
@@ -71,7 +73,7 @@ sms.setCallback(msg_cb)#sms注册回调
 CAT1_SERVICE_HEAD = 'FE' #固定head 
 
 PROJECT_NAME = "Cat1SlipUDPService"
-PROJECT_VERSION = "PY_SRV_V7"
+PROJECT_VERSION = "PY_SRV_V8"
 CONFIG_JSON="/usr/system_config.json"
 CURRENT_APP_TYPE="pysrv"
 
@@ -234,7 +236,8 @@ class Cat1Service:
         
         self.iccid_data = ""
         self.software_version = ""
-        
+        self.deletSmsTimer = osTimer()
+
         eventMesh.subscribe("set_telecom_dmp_switch",self.set_telecom_dmp_switch)
         eventMesh.subscribe("get_telecom_dmp_switch",self.get_telecom_dmp_switch)
         eventMesh.subscribe("delete_sms_event",self.delete_sms_event)
@@ -243,9 +246,12 @@ class Cat1Service:
         eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data)#获取所有的短信内容
         eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle)
         eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data)
+
+        eventMesh.subscribe("get_factory_status",self.get_factory_status)
+        eventMesh.subscribe("set_factory_status",self.set_factory_status)
         eventMesh.publish("delete_sms_event")
 
-        self.deletSmsTimer = osTimer()
+       
         self.telecom_dmp_switch = 0
 
         self.send_data = []
@@ -256,6 +262,8 @@ class Cat1Service:
         #
         self.msg_nums = 0
         self.msg_nums_old = 0
+        self.china_mobile_init = 0
+        self.factory_status = 0
         sms_get = sms.getSaveLoc()
         if(sms_get != -1):
             sms_lacv = sms_get[0][0]
@@ -356,13 +364,27 @@ 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 CHINA_TELECOM_DM_FUN_ENABLE == 1 :
                 if eventMesh.publish("get_telecom_dmp_switch") == 1:
                     self.telecom_recv_cmd(cmd,parm)
+            else:
+                pass
+
+            if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+                self.china_mobile_recv_cmd(cmd,parm)
+            else:
+                pass
             pass
         elif cmd == "13":
             if CHINA_TELECOM_DM_FUN_ENABLE == 1:
                 self.telecom_recv_cmd(cmd,parm)
+        elif cmd == "16":
+            if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+                self.china_mobile_recv_cmd(cmd,parm)
+            else:
+                pass
+        elif cmd == "17":#用于CAT1恢复出厂需要清空数据的标识通用
+            eventMesh.publish("set_factory_status",int(parm))
           
         
     def telecom_recv_cmd(self,cmd,parm):#电信入库
@@ -383,6 +405,24 @@ class Cat1Service:
             eventMesh.publish("set_regist_time",[0,time])
                 
         pass
+    def china_mobile_recv_cmd(self,cmd,parm):#移动入库相关指令
+        if cmd == "10":
+            self.software_version = str(parm)
+            eventMesh.publish("set_dev_version",self.software_version)
+            print("software_version:{},{}".format(self.software_version,parm))
+        elif cmd == "16":#获取BLE mac地址
+            eventMesh.publish("set_dev_mac",str(parm))
+            print("parm:{}\r\n".format(parm))
+                
+        pass
+    def get_factory_status(self,event,msg):
+        return self.factory_status
+    def set_factory_status(self,event,msg):
+        self.factory_status = int(msg)
+        if self.factory_status == 0:#只有为的时候才设置进去 1不再设置
+            self.reply_cmd('17',"{}".format(1))
+
+        
     def set_telecom_dmp_switch(self,event,msg):
         self.telecom_dmp_switch = msg
     def delete_sms_single_data(self,event,msg):#删除单条信息
@@ -638,6 +678,10 @@ class Cat1Service:
             if CHINA_TELECOM_DM_FUN_ENABLE == 1:
                 if eventMesh.publish("get_telecom_dmp_switch") == 1:
                     eventMesh.publish("set_network_state",self.__net_connected)
+
+            if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+                    eventMesh.publish("set_network_state",self.__net_connected)
+
             self.__waiting_netstat = 0
             return -1
 
@@ -734,7 +778,14 @@ class Cat1Service:
         cat1service.ipconfig()
         if CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
             if eventMesh.publish("get_telecom_dmp_switch") == 1:
+                eventMesh.publish("set_network_state",1)
                 telecomDmpCb.telecom_dmp_power_on_init()
+        if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+            eventMesh.publish("set_network_state",1)
+            if self.china_mobile_init == 1:
+                return
+            self.china_mobile_init = 1
+            chinamobileCb.china_mobile_init()
 
     def cat1_reply_iccid_to_ble(self,event,msg):
         ICCID_DATA = str("ICCID:")+str(msg)
@@ -901,7 +952,7 @@ def checknet_cb(arg):
     if CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
         if eventMesh.publish("get_telecom_dmp_switch") == 1:
             telecomDmpCb.telecom_dmp_power_on_count()
-
+    
     _thread.start_new_thread(cat1service.wait_network_ready, ())
     # time=utime.localtime()
     # zone=utime.getTimeZone()
index c79ae78..7c8db3e 100644 (file)
@@ -28,11 +28,10 @@ import modem
 import base64
 import request
 import ujson
-
+BLOCK_SIZE = 16
 #中国移动入库
 class chinamobile:
     def __init__(self):
-        self.retryIntervalTimer = osTimer()#异常重试定时器
         self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制
         
         self.multimer_count = 0#多日重发机制周期Count
@@ -42,13 +41,8 @@ class chinamobile:
         self.timerPowerNum = 0
         self.telecom_init_state = 0#初始化状态开机检查标识 
         self.isRegistOk = 0#注册成功
+        self.config_data = {}
 
-        self.regist_queue = Queue()
-        _thread.stack_size(10*1024)
-        _thread.start_new_thread(self.regist_queue_thread, ())
-        _thread.stack_size(8*1024)
-
-        eventMesh.subscribe("publish_message_event_registinfor",self.publish_message_event_registinfor)
         self.__net_connected = 0
         eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息
         eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息
@@ -64,38 +58,22 @@ class chinamobile:
         self.software_version = ""
         self.mac_data =""
 
+        self.retryInterval = 10
+        self.retryNum = 1#异常重试最大次数
+        self.heartBeatTime = 1440#心跳上报频率 单位分钟
+        self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
+        self.reportNum = 8 #最大上报次数
 
-        self.retryInterval = 0#异常重试间隔时间 单位分钟
-        self.retryNum = 0#异常重试最大次数
-        self.heartBeatTime = 0#心跳上报频率 单位分钟
-        self.reportTime = 0#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
-        self.reportNum = 0 #最大上报次数
-
-        self.reportTime_old = 0 #保存本地 保存时间戳下一次开机使用
+        self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
         self.report_Num_old = 0#保存本地
         self.retryNum_old = 0#保存本地
         self.init_flag = 0#初始化状态指初始化一次
         self.retryTimer = osTimer()#异常重试定时器
         self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发
         self.heartreportTimer = osTimer()#心跳上报定时器
-        self.reportTime_Sec = 0
 
         pass
-    def regist_queue_thread(self):
-        while True:
-            data = self.regist_queue.get()
-            #EventMesh.debug_log("regist_queue:data = {}".format(data))
-            if data != None:
-                try:
-                    data["func"](data["data"])
-                except Exception as e:
-                    print("regist_queue:ERROR:{}".format(e))
-                    usys.print_exception(e)
-    def publish_message_event_registinfor(self,event,msg):
-        self.regist_queue.put(msg)
-
-    def publish_regist_event_cb(self, *args, **kwargs):
-        eventMesh.publish("publish_message_event_registinfor",{"func":self.timer_cb,"data":0}) 
+
 
     def set_network_state(self,event,msg):#设置网络是否正常
         self.__net_connected = int(msg)
@@ -146,7 +124,19 @@ class chinamobile:
         data_encode = msg_tmp.decode('ascii')#转换成字符串
         return data_encode
 
+    #写文件信息
+    def write_config_msg_file(self,msg):
+        print("write_config_msg_file msg:{}\r\n".format(msg))
+        with open("/usr/config_msg.json",'w+',encoding="utf-8") as fd:
+            ujson.dump(msg,fd) 
+    #读文件信息
+    def read_config_msg_file(self):
 
+        IFEXIST = ql_fs.path_exists("/usr/config_msg.json")   #不存在
+        if IFEXIST == True:
+            with open("/usr/config_msg.json","r",encoding='utf-8') as fd:
+                self.config_data = ujson.load(fd)
+        print("read_config_msg_file self.config_data:{}\r\n".format(self.config_data))
 
     def china_mobile_first_get_config(self,url):
         ##############第一步#######获取采集规则配置#######
@@ -187,6 +177,7 @@ class chinamobile:
 
     def first_get_config_json(self):#开机上电获取配置信息 
         getresult = 0
+        print("first_get_config_json false",self.__net_connected)
         if self.__net_connected != 1:#网络不正常
             return getresult
         url = "https://b.fxltsbl.com//dm-multi-accept/multi/getMultiTerminalConfig"
@@ -200,7 +191,12 @@ class chinamobile:
         # }#默认采集规则配置
         #默认参数
         
-        
+        retryInterval = self.retryInterval
+        heartBeatTime = self.heartBeatTime
+        reportTime = self.reportTime
+        reportNum = self.reportNum
+        retryNum = self.retryNum
+        print("get_config_json old:{} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum))
         if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档
             rspCode = result_json["rspCode"]
             rspCode_zh = result_json["rspMsg"]
@@ -210,7 +206,6 @@ class chinamobile:
                     msg_data = result_json["result"] #采集规则配置信息
                     if "ruleConfig" in msg_data:#不存在就是空
                         msg_data = msg_data["ruleConfig"]
-
                         msg_data = ujson.loads(msg_data)#转换成json格式
                         if "reportTime" in msg_data:
                             self.reportTime = int(msg_data["reportTime"])
@@ -222,11 +217,16 @@ class chinamobile:
                             self.retryInterval = int(msg_data["retryInterval"])
                         if "retryNum" in msg_data:
                             self.retryNum = int(msg_data["retryNum"])
-                        print(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum)
+                        print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum))
                         
                     print("true")
                 else:
                     print("false")
+        if getresult == 1:#请求配置文件成功
+            if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or  (self.heartBeatTime != heartBeatTime) or (self.reportTime != reportTime) or (self.reportNum != reportNum):
+                #重新走注册流程 清空报错次数 记录当前时间戳
+                print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致
+                return 2
         return getresult #1 获取成功 0 获取失败
 
     
@@ -260,8 +260,8 @@ class chinamobile:
         
 
         #需要加密的数据明文
-        if (len(self.mac_data) == 0)#获取失败了
-            self.mac_data = "28:09:78:56:01:06"
+        if (len(self.mac_data) == 0):#获取失败了
+            self.mac_data = "***"
 
         MAC = self.mac_data
         # base64_MAC = sha256_encode(key,MAC)
@@ -273,7 +273,7 @@ class chinamobile:
         # base64_CPU = sha256_encode(key,CPU)
         sysVersion = "OpenHarmony 3.2"
         # base64_sysVersion = sha256_encode(key,sysVersion)
-        if (len(self.software_version) == 0)#获取失败了
+        if (len(self.software_version) == 0):#获取失败了
             self.software_version = "Watch Soar V1.0"
         softwareVer = self.software_version
         # base64_softwareVer = sha256_encode(key,softwareVer)
@@ -292,13 +292,13 @@ class chinamobile:
         wearingStatus ="***"
         # base64_wearingStatus = sha256_encode(key,wearingStatus)
 
-        networkStatus ="0"#1:连接;0:未连接;-1:不支持
+        networkStatus ="1"#1:连接;0:未连接;-1:不支持
         # base64_networkStatus = sha256_encode(key,networkStatus)
         encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus]
         print(len(encyr_data))
         encyr_new_data=[]
         for i in range(len(encyr_data)):
-            tmp_data = sha256_encode(key,encyr_data[i])
+            tmp_data = self.sha256_encode(key,encyr_data[i])
             encyr_new_data.append(tmp_data)
 
         # deviceInfo_tmp = {
@@ -351,6 +351,7 @@ class chinamobile:
             c = next(content)
             result_json = ujson.loads(c)#解析成json格式
         else:
+            dev_autoregist_result = 0
             
         
         if "rspCode" in result_json:
@@ -364,169 +365,262 @@ class chinamobile:
             dev_autoregist_result = 0
 
         return dev_autoregist_result
-   
+    
     def read_config_file(self):#获取配置文件,一开机是没有配置文件的
-        self.retryInterval = 10
-        self.retryNum = 1#异常重试最大次数
-        self.heartBeatTime = 1440#心跳上报频率 单位分钟
-        self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
-        self.reportNum = 8 #最大上报次数
-        msg = None
-        IFEXIST = ql_fs.path_exists("/usr/config_msg.json")   #不存在
-        if IFEXIST == True:
-            with open("/usr/config_msg.json","r",encoding='utf-8') as fd:
-                msg = ujson.loads(fd)
-
-        if msg != None:
-            if "retryInterval" in msg:
-                self.retryInterval = int(msg["retryInterval"])
-            if "retryNum" in msg:
-                self.retryNum = int(msg["retryNum"])
-            if "heartBeatTime" in msg:
-                self.heartBeatTime = int(msg["heartBeatTime"])
-            if "reportTime" in msg:
-                self.reportTime = int(msg["reportTime"])
-            if "reportNum" in msg:
-                self.reportNum = int(msg["reportNum"])
-        print("read_config_file:self.retryInterval:{} self.retryNum:{} self.heartBeatTime:{} self.reportTime:{} self.reportNum:{}".format(self.retryInterval,self.retryNum,self.heartBeatTime,self.reportTime,self.reportNum))
+        
+        self.read_config_msg_file()#读文件信息
+        if self.config_data != {}:
+            if "retryInterval" in self.config_data:
+                self.retryInterval = int(self.config_data["retryInterval"])
+            if "retryNum" in self.config_data:
+                self.retryNum = int(self.config_data["retryNum"])
+            if "heartBeatTime" in self.config_data:
+                self.heartBeatTime = int(self.config_data["heartBeatTime"])
+            if "reportTime" in self.config_data:
+                self.reportTime = int(self.config_data["reportTime"])
+            if "reportNum" in self.config_data:
+                self.reportNum = int(self.config_data["reportNum"])
+
+            #终端本地需要保存本地的数据
+            # self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
+            # self.report_Num_old = 0#保存本地
+            # self.retryNum_old = 3#保存本地
+
+            if "reportTime_Sec" in self.config_data:
+                self.reportTime_Sec = int(self.config_data["reportTime_Sec"])
+            if "report_Num_old" in self.config_data:
+                self.report_Num_old = int(self.config_data["report_Num_old"])
+            if "retryNum_old" in self.config_data:
+                self.retryNum_old = int(self.config_data["retryNum_old"])
+
+        print("read_config_file self.config_data:{} ".format(self.config_data))
     def retryTimerCb(self,*argc):#异常重试机制定时器回调
-        self.retryNum_old+=1 #保存本地
-
-        if self.retryNum_old > self.retryNum:
-            self.retryTimer.stop()
+        #保存本地
+        self.search_report_num_step()
+        self.retryNum_old+=1 #1 self.reportNum = 1
+        self.config_data["retryNum_old"] = self.retryNum_old
+        self.write_config_msg_file(self.config_data)
+        print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old))
+        if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:
+            print("retryTimerCb timer")
+            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据
             return
         #触发查询上报总数流程
-        self.search_report_num_step()
+        
+        
         pass
     
     def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤
-        print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{}".format(self.retryNum_old,self.retryNum))
-        if self.retryNum_old > self.retryNum:#self.retryNum_old > 10
-            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
+        print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{} self.reportTime:{}\r\n".format(self.retryNum_old,self.retryNum,self.reportTime))
+       
+        if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#self.retryNum_old > 10#结束HTPP下一个最大频率周期时间间隔流程
+            print("error_retryNum_step:self.retryNum_old >= self.retryNum\r\n")
+            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据
         else:
+            date_tmp = utime.localtime()
+            time_tmp = utime.mktime(date_tmp)#获取时间戳
+            if self.reportTime_Sec == 0:
+                
+                self.reportTime_Sec = time_tmp#记录最大上报频率时间用于下次开机做判断 保存时间戳
+                print("error_retryNum_step:self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec))
+                self.config_data["reportTime_Sec"] = self.reportTime_Sec
+                self.write_config_msg_file(self.config_data)
+
             get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端
-            if get_result != 1:#获取失败或者没有网络 走异常重试机制
+            if get_result == 0:#获取失败或者没有网络 走异常重试机制
+                self.report_Num_old+=1#请求错误请求失败都要保存上报次数
+                self.config_data["report_Num_old"] = self.report_Num_old
+                self.write_config_msg_file(self.config_data)
+                print("error_retryNum_step:self.retryTimer.start :{} {}\r\n".format(self.report_Num_old,self.reportNum))
+                if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:
+                    self.retryTimer.stop()#关定时器
+                    self.retpoertTimerC.stop()
+                    self.heartreportTimer.stop()
+
                 self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
                 pass
-            else:#清空报错次数
-                self.retryNum_old = 0#保存本地
-                data = {
-                    "retryInterval":self.retryInterval,
-                    "retryNum":self.retryNum,
-                    "reportTime":self.reportTime,
-                    "reportTime":self.reportTime,
-                    "reportNum":self.reportNum
-                }
-                with open("/usr/config_msg.json", 'w+',encoding='utf-8') as fd:#写文件数据
-                    ujson.dump(data,fd)
-                #服务端注册返回成功
+            else:#
+
                 #第一步触发自注册
-                report_result = self.self_regis_report_cb()
+                if get_result == 2:#请求的配置文件和本地不一致重启
+                    self.report_Num_old+=1#请求错误请求失败都要保存上报次数
+                    self.config_data["report_Num_old"] = self.report_Num_old
+                    self.write_config_msg_file(self.config_data)
+
+                    self.retryNum_old = 0#保存本地 配置文件不同重启模组 清空异常重试的报错次数
+                    self.config_data["retryNum_old"] = self.retryNum_old
+                    self.write_config_msg_file(self.config_data)
+                    self.china_mobile_init()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件
+                    return
+                report_result = self.self_regis_report_cb()#注册
                 
                 #第二步触发心跳上报次数
                 if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳
-                    self.heart_report_cb()
+                    # self.heart_report_cb()
                     self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb)
     
-    self.heartreportTimerCb(self,*argc):
+    def heartreportTimerCb(self,*argc):
         self.heart_report_cb()
 
     def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
         #
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp)#获取时间戳
-        if time_tmp < self.reportTime_old:
-            time_tmp = self.reportTime_old
-        if self.reportTime_old == 0:
-            self.reportTime_old = time_tmp
-        #self.reportTime = 20*60 
-        print("check_current_time:time_tmp - self.reportTime_old:{} self.reportTime*60:{}".format(time_tmp - self.reportTime_old,self.reportTime*60))
-        if (time_tmp - self.reportTime_old) >= self.reportTime*60:#是否大于上报的时间self.reportTime 清空保存的上报总数 self.report_Num_old = 0 上报错误次数  self.retryNum_old = 0
-            #大于一个周期时间需要等下一个周期触发 不能立马去检查 需要定时reportTime之后再去清空数据
-            self.reportTime_Sec = time_tmp
-            self.retpoertTimerC.start(10*60*1000,1,self.retpoertTimerCB)
-           
-        else:#当前时间-旧的保存时间 小于reportTime 判断报错次数是否大于retryNum=10
+
+        print("check_current_time:time_tmp - self.reportTime_Sec:{} self.reportTime*60:{}".format(time_tmp - self.reportTime_Sec,self.reportTime*60))
+        if (time_tmp - self.reportTime_Sec) >= self.reportTime*60:#判断报错次数
             self.error_retryNum_step()
+        else:#当前时间-旧的保存时间 小于reportTime 并且次数大于8次了
+            time_count = time_tmp - self.reportTime_Sec
+            self.retpoertTimerC.start(time_count*1000,1,self.retpoertTimerCB)
 
     def retpoertTimerCB(self,*argc):
+        
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp)#获取时间戳
-        if time_tmp - self.reportTime_Sec >= self.reportTime*60:
-            self.report_Num_old = 0#清空上报总次数 #保存本地
-            self.retryNum_old = 0#清空上报错误次数 #保存本地
+        print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(time_tmp-self.reportTime_Sec,time_tmp,self.reportTime_Sec))
+        self.report_Num_old = 0#清空上报总次数 #保存本地
+        self.retryNum_old = 0#清空上报错误次数 #保存本地
+        self.reportTime_Sec = 0
+        self.config_data["reportTime_Sec"] = self.reportTime_Sec
+        self.config_data["retryNum_old"] = self.retryNum_old
+        self.config_data["report_Num_old"] = self.report_Num_old
+        self.write_config_msg_file(self.config_data)
 
-            self.retpoertTimerC.stop()#关闭定时器
-            self.error_retryNum_step()#清空报错次数重新走判断报错次数
+        self.retpoertTimerC.stop()#关闭定时器
+        self.error_retryNum_step()#清空报错次数重新走判断报错次数
         pass   
 
     def search_report_num_step(self):#查询上报总数步骤
         print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum))
-        if self.report_Num_old > self.reportNum:#查询上报的总次数是否大于存储上报总次数
-            #答:报错次数过多,结束LWM2M是结束这次会话,ruleConfig有最大上报时间频率,
-            # reportTime字段,有最大上报次数,reportNum字段。表示最大上报时间频率内,不能超过最大上报次数,
-            # 如reportTime=10,reportNum=3表示10分钟内最大上报3次,如果超过3次,则需要等待10分钟之后再重新发起注册流程。
-            #检查当前时间是否大于reportTimer 1440分钟之内最多上报8次  需要自注册上报或者心跳上报成功后保存当前的时间戳 如果下一个心跳间隔时间到了次数加1大于上报最大次数
-            #用时间戳相减 大于 reportTimer就不上报了 就等下一个14440分钟了
-            #
+        if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数
             self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
-        else:#读取报错次数
+        else:#查询报错次数
             self.error_retryNum_step()
 
     def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器
+        print("reportTimerIntervalCb\r\n")
+        self.retryNum_old = 0#保存
+        self.report_Num_old = 0#保存 定时清空数据
+        self.reportTime_Sec = 0
+        self.config_data["reportTime_Sec"] = self.reportTime_Sec
+        self.config_data["retryNum_old"] = self.retryNum_old
+        self.config_data["report_Num_old"] = self.report_Num_old
+        self.write_config_msg_file(self.config_data)
         self.search_report_num_step()#重新查询
 
     def self_regis_report_cb(self):#自注册上报信息
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp)#获取时间戳
-        print("self_regis_report_cb:self.report_Num_old:{} self.reportNum:{}".format(self.report_Num_old,self.reportNum))
+        if self.reportTime_Sec == 0:
+            self.reportTime_Sec = time_tmp #需要保存本地
+            self.config_data["reportTime_Sec"] = self.reportTime_Sec
+            self.write_config_msg_file(self.config_data)
+        
         self.report_Num_old+=1 ##保存本地
-        if report_Num_old > self.reportNum:
-            
-            self.retryTimer.stop()#关定时器
-            self.retpoertTimerC.stop()
-            self.heartreportTimer.stop()
-            self.reportTime_old = time_tmp #需要保存本地
-            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
-            return 0
-        self.reportTime_old = time_tmp #需要保存本地
+        self.config_data["report_Num_old"] = self.report_Num_old
+        self.write_config_msg_file(self.config_data)
+        print("self_regis_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec))
+        
         #设备自注册上报信息
         url = "https://b.fxltsbl.com//dm-multi-accept/multi/acceptMultiTerminalRegInfo"#上报地址
         confing_type = "autoRegist"#上报传输配置
         result = self.china_mobile_autoregist_infor(url,confing_type)
+        
+
         if result != 1:
             #触发异常重试进制
+            if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#上报次数大于
+                self.retryTimer.stop()#关定时器
+                self.retpoertTimerC.stop()
+                self.heartreportTimer.stop()
             self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
             return 0
         else:
-            return 1
+            if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:
+                self.retryTimer.stop()#关定时器
+                self.retpoertTimerC.stop()
+                self.heartreportTimer.stop()
+                self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
+                return 0
+            else:
+                return 1
 
     def heart_report_cb(self):#心跳上报信息
         #设备心跳上报信息
-        print("heart_report_cb:self.report_Num_old:{} self.reportNum:{}".format(self.report_Num_old,self.reportNum))
+        
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp)#获取时间戳
         self.report_Num_old+=1#保存本地
-        if report_Num_old > self.reportNum:
-            self.retryTimer.stop()#关定时器
-            self.retpoertTimerC.stop()
-            self.heartreportTimer.stop()
-            self.reportTime_old = time_tmp#需要保存本地
-
-            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
-            return
+        self.config_data["report_Num_old"] = self.report_Num_old
+        self.write_config_msg_file(self.config_data)
+        print("heart_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime,self.reportTime_Sec))
+       
 
         url = "https://b.fxltsbl.com//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo"#上报地址
         confing_type = "keepAlive"#上报传输配置
         result = self.china_mobile_autoregist_infor(url,confing_type)
         if result != 1:
             #触发异常重试进制
+            if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:
+                self.retryTimer.stop()#关定时器
+                self.retpoertTimerC.stop()
+                self.heartreportTimer.stop()
+                if self.reportTime_Sec == 0:
+                    self.reportTime_Sec = time_tmp#需要保存本地
+                    self.config_data["reportTime_Sec"] = self.reportTime_Sec
+                    self.write_config_msg_file(self.config_data)
             self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
             return
+        if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:
+            self.retryTimer.stop()#关定时器
+            self.retpoertTimerC.stop()
+            self.heartreportTimer.stop()
+            if self.reportTime_Sec == 0:
+                self.reportTime_Sec = time_tmp#需要保存本地
+                self.config_data["reportTime_Sec"] = self.reportTime_Sec
+                self.write_config_msg_file(self.config_data)
+
+            print("self.retpoertTimerC.start")
+            self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
+            return
 
     def china_mobile_init(self):#初始化
+        
+        status = eventMesh.publish("get_factory_status")
+        if status == None:
+            status = 0
+        if status == 0:#恢复出厂或者新的机器需要清空不必要的数据
+            if self.init_flag == 0:
+                self.init_flag = 1
+                self.retryInterval = 10
+                self.retryNum = 1#异常重试最大次数
+                self.heartBeatTime = 1440#心跳上报频率 单位分钟
+                self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
+                self.reportNum = 8 #最大上报次数
+
+                self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
+                self.report_Num_old = 0#保存本地
+                self.retryNum_old = 0#保存本地
+
+                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["report_Num_old"] = self.report_Num_old
+                self.config_data["retryNum_old"] = self.retryNum_old
+                self.config_data["reportTime_Sec"] = self.reportTime_Sec
+
+                self.write_config_msg_file(self.config_data)
         #读配置文件 
         self.read_config_file()#只读一下配置文件
+
+        self.retryTimer.stop()#关定时器
+        self.retpoertTimerC.stop()
+        self.heartreportTimer.stop()
+
         #查询上报总数流程
         self.search_report_num_step()
 
diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405311822.zip b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405311822.zip
new file mode 100644 (file)
index 0000000..c24a410
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66da5048ba37d135015a3d12035545cab8f79cd240137f86d7e544af61e25c97
+size 11786147
index 4b55ac2..fc7a33d 100644 (file)
                        "OtaPackageName" : "checkota.py",
                        "OtaPackageVersion" : "PY_OTA_V7",
                        "md5sum" : "7d8b35e58ad8ca5eb0ef031c101e375e"
+               },
+               {
+                       "url" : "http://icfota.snicker.com.cn:8089/FD230/PY_OTA_V3/china_mobile_dmp.py",
+                       "OtaPackageLength" : 1809362,
+                       "OtaPackageName" : "china_mobile_dmp.py",
+                       "OtaPackageVersion" : "PY_CHINA_MOBILE_V7",
+                       "md5sum" : "7d8b35e58ad8ca5eb0ef031c101e375e"
                }
        ]
 }