From: DXY <1731678236@qq.com> Date: Fri, 31 May 2024 10:23:22 +0000 (+0800) Subject: 移动入库未完善,待完善优化;添加py压缩文件 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=38d4e128ac840ca950a158a7bf671d374e0df921;p=mirrors%2FFD230.git 移动入库未完善,待完善优化;添加py压缩文件 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h index a4ad41392..e837acc58 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h @@ -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; // 禁止拷贝构造 diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp index a653c5982..f407f6d89 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp @@ -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 关 diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 7f71211d0..efd986cd5 100755 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -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', diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp index fbd35c6fa..acecf40a0 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp +++ b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp @@ -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); diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/EventMesh.py b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/EventMesh.py index 6441113cd..7c8cf6876 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/EventMesh.py +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/EventMesh.py @@ -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() diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py index bf7f36aeb..06cbb2069 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py @@ -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() diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py index c79ae78f7..7c8db3edf 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py @@ -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 index 000000000..c24a41035 --- /dev/null +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405311822.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66da5048ba37d135015a3d12035545cab8f79cd240137f86d7e544af61e25c97 +size 11786147 diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/update.json b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/update.json index 4b55ac2d7..fc7a33d0a 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/update.json +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/update.json @@ -37,6 +37,13 @@ "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" } ] }