CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS,//入库恢复出厂状态 0已恢复出厂过 1代表没有 1cat1发送
+ CONFIFMOFEL_ITEM_DMP_CHANGE_MODE,//入库切换模式 默认是1 电信入库 2-255其他是移动入库 0是关闭
+ CONFIFMOFEL_ITEM_DMP_CHANGE_MODE_OLD,//入库切换模式旧模式 防止切换来回数据不清楚问题 默认是1 电信入库 2-255其他是移动入库
+
CONFIGMODEL_ITEM_MAX,
} ;
void SetScreenDuration(unsigned int value);
unsigned int GetScreenDuration(void);
+
void SetRaiseToWake(bool value);
bool GetRaiseToWake(void);
/* ----------------------------- 声音与震动相关set与get ----------------------------- */
void SetDmpFactoryStatus(int state);
int GetDmpFactoryStatus(void);
+ void SetDmpChangeMode(int state);//设置入库模式
+ int GetDmpChangeMode(void);//获取入库模式
+
+ void SetDmpChangeModeOld(int state);//设置旧入库模式
+ int GetDmpChangeModeOld(void);//获取旧入库模式
+
void SetVibrationReminder(int state);
int GetVibrationReminder(void);
{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
+ {ConfigDataType::DATATYPE_INT, "dmp_factory_status", "0" },//CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS默认是0
+ {ConfigDataType::DATATYPE_INT, "dmp_change_mode", "1" },//CONFIFMOFEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1
+ {ConfigDataType::DATATYPE_INT, "dmp_change_mode_old", "1" }//CONFIFMOFEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致
};
ConfigModel(); // 私有构造函数,确保无法在外部实例化
ConfigModel(const ConfigModel &) = delete; // 禁止拷贝构造
{
return get_configData_int(CONFIFMOFEL_ITEM_DMP_FACTORY_STATUS);
}
+
+ void ConfigModel::SetDmpChangeMode(int state)
+ {
+ set_condigData_Int(CONFIFMOFEL_ITEM_DMP_CHANGE_MODE,state);
+ }
+
+
+ int ConfigModel::GetDmpChangeMode(void)
+ {
+ return get_configData_int(CONFIFMOFEL_ITEM_DMP_CHANGE_MODE);
+ }
+
+ void ConfigModel::SetDmpChangeModeOld(int state)
+ {
+ set_condigData_Int(CONFIFMOFEL_ITEM_DMP_CHANGE_MODE_OLD,state);
+ }
+
+
+ int ConfigModel::GetDmpChangeModeOld(void)
+ {
+ return get_configData_int(CONFIFMOFEL_ITEM_DMP_CHANGE_MODE_OLD);
+ }
/*
* @brief 设置震动模式强度
* @param 马达 开关,3 强,2 中,1 弱,0 关
p_ConfigModel->SetBrightness(data);
return;
}
+void Set_DmpChangeMode(int state)
+{
+ OHOS::ConfigModel *p_ConfigModel = OHOS::ConfigModel::GetInstance();
+ p_ConfigModel->SetDmpChangeMode(state);
+}
+
+int Get_DmpChangeMode(void)
+{
+ OHOS::ConfigModel *p_ConfigModel = OHOS::ConfigModel::GetInstance();
+ return p_ConfigModel->GetDmpChangeMode();
+}
int get_brigthness(void) //获取屏幕亮度
{
OHOS::ConfigModel *p_ConfigModel = OHOS::ConfigModel::GetInstance();
void ble_set_sleep_remind(msg_get_sleep_param_info_t data);
char * ble_step_history(uint8_t day,uint16_t *len);
+
+void Set_DmpChangeMode(int state);
+int Get_DmpChangeMode(void);
+
#ifdef __cplusplus
#if __cplusplus
}
*totaldata:总的数据内容 包含包头和校验预览做接口是用 如果要计算totaldata的长度直接是len+17+1 就是加上包头和校验和\r
crcvalue;数据的校验和 不包含包头和校验和的计算结果\r
*/\r
+// 73 01 31 01 00 00 00 01 00 00 00 01 00 00 00 00 00 2 FE\r
+void SetDMPModeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置入库模式 0关闭 1电信 2-255移动\r
+{\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
+ uint32_t tmp = 1;\r
+ value[0] =0x72;\r
+ value[1] =0x01;\r
+ value[2] =0x31;\r
+ memcpy(value+3,&tmp,4);\r
+ memcpy(value+7,&tmp,4);\r
+ memcpy(value+11,&tmp,4);\r
+ memcpy(value+15,&tmp,2);\r
+ \r
+ if(Check_CRC(data,len,crcvalue))\r
+ {\r
+ \r
+ int state = 0;\r
+ state = data[0];\r
+ printf("data[0];%d state:%d\r\n",data[0],state);\r
+ Set_DmpChangeMode(state);\r
+ value[17] = 1;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }else{\r
+ value[17] = 0;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }\r
+}\r
+// 73 01 FE 01 00 00 00 00 00 00 00 01 00 00 00 00 00 crc\r
+\r
+void GetDMPModeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取入库模式 0关闭 1电信 2-255移动\r
+{\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
+ uint32_t tmp = 1;\r
+ value[0] =0x72;\r
+ value[1] =0x01;\r
+ value[2] =0x32;\r
+ memcpy(value+3,&tmp,4);\r
+ memcpy(value+7,&tmp,4);\r
+ memcpy(value+11,&tmp,4);\r
+ memcpy(value+15,&tmp,2);\r
+ \r
+ if(Check_CRC(data,len,crcvalue))\r
+ {\r
+ int state = Get_DmpChangeMode();\r
+ value[17] = state;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }else{\r
+ value[17] = 0;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }\r
+}\r
void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,uint16_t datalen,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint16_t cmd = cmd_buf[1]*256+cmd_buf[2];\r
case ALARM_CMD://获取手表闹钟//同步闹钟\r
readDevDataBle(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
- \r
+\r
+ case SET_DMP_MODE_CMD://0X0131\r
+ SetDMPModeCmd(cmd,data,datalen,totaldata,crcvalue);\r
+ break;\r
+ case GET_DMP_MODE_CMD://0X0132\r
+ GetDMPModeCmd(cmd,data,datalen,totaldata,crcvalue);\r
+ break;\r
default:\r
break;\r
}\r
}\r
return 1;\r
}\r
+\r
+\r
+\r
void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
uint8_t value[19];\r
#define SYN_BASIC_TRANIN_HISTORY_DATA_CMD 0x0149 //同步基础训练历史数据basic training
#define SYN_SLEEP_HISTORY_DATA_CMD 0x014B //同步睡眠历史数据
+#define SET_DMP_MODE_CMD 0x0131
+#define GET_DMP_MODE_CMD 0x0132
+
#define FIND_PHONE_CMD 0x0501 //同步睡眠历史数据
#define MSG_DIRECTION_RECV 0x73
udp_send_msg_toCat1(UDP_MSG_GET_SIM_ICCID,iccid_buf);
}
}
-void set_telecom_dmp_switch_toCat1(uint8_t on)//设置电信入库功能开关->CAT1
-{
- if(on){
- udp_send_msg_toCat1(UDP_MSG_SET_TELECON_DMP_SWITCH,"1");//1开启 0关闭
- }else{
- udp_send_msg_toCat1(UDP_MSG_SET_TELECON_DMP_SWITCH,"0");
- }
-
-}
+
void save_regist_time_toBle(char *msg)//保存注册的时间戳
{
if(strncmp(msg,"REGIST_TIME:",12) == 0)//字符串是否有ICCID:字符串
}
return;
}
+void send_dmp_mode_toCat1(uint8_t on)//设置
+{
+ printf("set_telecom_dmp_switch_toCat1 on:%d\r\n",on);
+ char buf[10] ={0};
+ sprintf_s(buf,10,"%d",on);
+ udp_send_msg_toCat1(UDP_MSG_SET_TELECON_DMP_SWITCH,buf);//1开启 0关闭
+}
+int get_dmp_change_mode_toCat1(void)//获取切换模式TO CAT1
+{
+ int state = OHOS::ConfigModel::GetInstance()->GetDmpChangeMode();
+ return state;
+}
+void set_dmp_change_mode_old(uint8_t mode)//获取切换模式TO CAT1
+{
+ OHOS::ConfigModel::GetInstance()->SetDmpChangeModeOld(mode);
+ return;
+}
+int get_dmp_change_mode_old(void)//获取切换模式TO CAT1
+{
+ int state = OHOS::ConfigModel::GetInstance()->GetDmpChangeModeOld();
+ return state;
+}
void get_regist_time_toCat1(void)//设置电信入库功能开关->CAT1
{
char time_buf[30] = {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]);
+ sprintf_s((char *)btaddr_str,64,"%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)
+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);
+ sprintf_s((char *)send_str,10, "%d", state);
udp_send_msg_toCat1(UDP_MSG_RECV_DMP_FACTORY,send_str);//发送和接收同一个指令
}
-void set_dmp_factory_flag(char *msg)//设置factory状态
+int get_dmp_factory_status(void)
+{
+ int state = OHOS::ConfigModel::GetInstance()->GetDmpFactoryStatus();
+ return state;
+}
+void set_dmp_china_mobile_factory_flag(char *msg)//设置factory状态
{
- printf("set_dmp_factory_flag:%s\r\n",msg);
+ printf("set_dmp_china_mobile_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)
{
-
int index = 0;
if (len <6 || rx_buffer == NULL)
{
restart_time_sync();
cat1_getsignal();
if(g_msg_format_type == 0) break;
- #ifdef SUPPORT_TELECOM_DMP //是否开启电信入库功能
- set_telecom_dmp_switch_toCat1(1);
- get_software_version_toCat1();
- 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
- }
+ int stateOld = get_dmp_change_mode_old();
+ int stateNew = get_dmp_change_mode_toCat1();//0 stateOld = 0 0-1
+ if (stateNew == 0){//关闭入库功能 把恢复出厂标识清0
+ send_dmp_mode_toCat1(stateNew);
+ set_dmp_change_mode_old(stateNew);
+ set_dmp_china_mobile_factory_flag("0");//清数据不能保留原来的数据
+ }else{
+ set_dmp_change_mode_old(stateNew);
+ if (stateNew != stateOld ){//防止切换之后数据还是以前的
+ set_dmp_china_mobile_factory_flag("0");//清数据不能保留原来的数据
+ }
+ printf("stateNew %d stateOld:%d\r\n",stateNew,stateOld);
+ send_dmp_mode_toCat1(stateNew);
+ if (stateNew == 1){ //0 是不开启入库功能 1 电信 2-255其他移动
+ get_software_version_toCat1();
+ send_dmp_factory_flag();
+ }else {
+ get_software_version_toCat1();
+ send_ble_mac_toCat1();
+ send_dmp_factory_flag();
+ }
+ }
+ }
break;
- case UDP_MSG_GET_TELECON_DMP_TIMESEC:
- #ifdef SUPPORT_TELECOM_DMP
- save_regist_time_toBle(msg_buffer);
- #endif
+ case UDP_MSG_GET_TELECON_DMP_TIMESEC://暂时不用
+
break;
case UDP_CMD_GET_CAT1VER:
index = cat1_handle_version_msg(msg_buffer);
case UDP_CMD_MSG_ATCMD:
PRINT("ATCMD reply : %s\n", msg_buffer);
break;
- case UDP_MSG_SAVE_SIM_ICCID:
- #ifdef SUPPORT_TELECOM_DMP
- save_sim_iccid_toBle(msg_buffer);
- #endif
+ case UDP_MSG_SAVE_SIM_ICCID://暂时不用
break;
case UDP_MSG_RECV_DMP_FACTORY:
- set_dmp_factory_flag(msg_buffer);
+ set_dmp_china_mobile_factory_flag(msg_buffer);
break;
case UDP_MSG_RECV_CAT1_SMS_CONTENT://接收单条短信内容
case UDP_MSG_SMS:
import _thread
import usys
import ql_fs
-CHINA_TELECOM_DM_FUN_ENABLE = 0 #是否开启电信入库的功能
+CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能
CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能
class EventStore(object):
def __init__(self):
import pm
import sms
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
+
+from usr.telecom_dmp import telecomDmpCb
+from usr.china_mobile_dmp import chinamobileCb
def msg_cb(args):
index = args[1]
self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ())
self.telecom_init_flag = 0
self.telecomTimer = osTimer()
- if CHINA_TELECOM_DM_FUN_ENABLE == 1:
- eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble)
- eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble)
+ eventMesh.subscribe("cat1_reply_iccid_to_ble",self.cat1_reply_iccid_to_ble)
+ eventMesh.subscribe("cat1_reply_timesec_to_ble",self.cat1_reply_timesec_to_ble)
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("set_dmp_change_mode",self.set_dmp_change_mode)
+ eventMesh.subscribe("get_dmp_change_mode",self.get_dmp_change_mode)
eventMesh.subscribe("delete_sms_event",self.delete_sms_event)
eventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)#
eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble)
elif cmd == "10" or cmd == "12" or cmd == "14":#获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能
if CHINA_TELECOM_DM_FUN_ENABLE == 1 :
- if eventMesh.publish("get_telecom_dmp_switch") == 1:
+ if eventMesh.publish("get_dmp_change_mode") == 1:
self.telecom_recv_cmd(cmd,parm)
else:
pass
if CHINA_MOBILE_DM_FUN_ENABLE == 1:
- self.china_mobile_recv_cmd(cmd,parm)
+ if eventMesh.publish("get_dmp_change_mode") > 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)
+ on = int(parm)
+ print("set_dmp_change_mode on:{}".format(on))
+ eventMesh.publish("set_dmp_change_mode",on)
+
elif cmd == "16":
if CHINA_MOBILE_DM_FUN_ENABLE == 1:
- self.china_mobile_recv_cmd(cmd,parm)
+ if eventMesh.publish("get_dmp_change_mode") > 1:
+ self.china_mobile_recv_cmd(cmd,parm)
else:
pass
elif cmd == "17":#用于CAT1恢复出厂需要清空数据的标识通用
eventMesh.publish("set_dev_version",self.software_version)
print("software_version:{},{}".format(self.software_version,parm))
elif cmd == "12":
- if len(str(parm)) > 1:#为空的时候会传一个字符0
- self.iccid_data = str(parm)
- eventMesh.publish("save_iccid_data",[0,self.iccid_data])
- print("iccid_data:{},{}".format(self.iccid_data,parm))
- elif cmd == "13":#电信入库功能开关cmd
- on=int(parm)
- eventMesh.publish("set_telecom_dmp_switch",on)
- elif cmd == "14":#电信入库功能开关cmd
- time=int(parm)
- eventMesh.publish("set_regist_time",[0,time])
+ pass
+ elif cmd == "14":#
+ pass
pass
def china_mobile_recv_cmd(self,cmd,parm):#移动入库相关指令
self.reply_cmd('17',"{}".format(1))
- def set_telecom_dmp_switch(self,event,msg):
+ def set_dmp_change_mode(self,event,msg):
self.telecom_dmp_switch = msg
def delete_sms_single_data(self,event,msg):#删除单条信息
sms.deleteMsg(int(msg))
- def get_telecom_dmp_switch(self,event,msg):
+ def get_dmp_change_mode(self,event,msg):
return self.telecom_dmp_switch
+
def delete_sms_event(self,event,msg):
self.deletSmsTimer.start(2*1000,0,self.delete_sms_cb)
def delete_sms_cb(self,*argc):
print('Network connection successful.')
self.set_network_config()
self.__net_connected = 1
- if CHINA_TELECOM_DM_FUN_ENABLE == 1:
- if eventMesh.publish("get_telecom_dmp_switch") == 1:
- eventMesh.publish("set_network_state",self.__net_connected)
+ eventMesh.publish("set_network_state",self.__net_connected)
self.__waiting_netstat = 0
return 0
else:
print('Network connection failed, stage={}, state={}'.format(stage, state))
self.reset_network_config()
self.__net_connected = 0
- 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)
+ eventMesh.publish("set_network_state",self.__net_connected)
self.__waiting_netstat = 0
return -1
cat1service.set_dns(pri_dns, sec_dns)
# 网卡IP信息查询
cat1service.ipconfig()
+ if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭
+ return
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
- if eventMesh.publish("get_telecom_dmp_switch") == 1:
+ 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:
- eventMesh.publish("set_network_state",1)
- if self.china_mobile_init == 1:
- return
- self.china_mobile_init = 1
- chinamobileCb.china_mobile_init()
+ if eventMesh.publish("get_dmp_change_mode") > 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)
def checknet_cb(arg):
print("start checktime!!")
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
- if eventMesh.publish("get_telecom_dmp_switch") == 1:
+ if eventMesh.publish("get_dmp_change_mode") == 1:
telecomDmpCb.telecom_dmp_power_on_count()
_thread.start_new_thread(cat1service.wait_network_ready, ())
self.iccid_data = ""
self.software_version = ""
self.mac_data =""
+ self.address = "b.fxltsbl.com"
self.retryInterval = 10
self.retryNum = 1#异常重试最大次数
#写文件信息
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:
+ with open("/usr/china_mobie_config.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") #不存在
+ IFEXIST = ql_fs.path_exists("/usr/china_mobie_config.json") #不存在
if IFEXIST == True:
- with open("/usr/config_msg.json","r",encoding='utf-8') as fd:
+ with open("/usr/china_mobie_config.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))
config_data = {"endpoint":"{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,preField1,preField2,preField3),"configType":"{}".format(configType)}
#配置拉取数据上报地址
- url = "https://b.fxltsbl.com//dm-multi-accept/multi/getMultiTerminalConfig"
+ 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)
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"
+ url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address)
result_json = self.china_mobile_first_get_config(url)
# {
# "reportTime":1440,
reportTime = self.reportTime
reportNum = self.reportNum
retryNum = self.retryNum
- print("get_config_json old:{} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum))
+ address = self.address
+ print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,address))
if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档
rspCode = result_json["rspCode"]
rspCode_zh = result_json["rspMsg"]
self.retryInterval = int(msg_data["retryInterval"])
if "retryNum" in msg_data:
self.retryNum = int(msg_data["retryNum"])
- print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum))
+ if "address" in msg_data:
+ self.address = str(msg_data["address"])
+ print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum,self.address))
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):
+ if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or\
+ (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != address):
#重新走注册流程 清空报错次数 记录当前时间戳
print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致
+ self.write_config_msg_file(self.config_data) #保存新的配置文件
return 2
return getresult #1 获取成功 0 获取失败
#不需要加密 #||分隔符不能超过11个 否则平台会解析出错
config_data = "{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,configType,preField1,preField2)
-
#需要加密的数据明文
if (len(self.mac_data) == 0):#获取失败了
self.mac_data = "***"
self.reportTime = int(self.config_data["reportTime"])
if "reportNum" in self.config_data:
self.reportNum = int(self.config_data["reportNum"])
+ if "address" in self.config_data:
+ self.address = str(self.config_data["address"])
#终端本地需要保存本地的数据
# self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
print("read_config_file self.config_data:{} ".format(self.config_data))
def retryTimerCb(self,*argc):#异常重试机制定时器回调
#保存本地
- 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_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 == 0:#获取失败或者没有网络 走异常重试机制
self.report_Num_old+=1#请求错误请求失败都要保存上报次数
self.retryTimer.stop()#关定时器
self.retpoertTimerC.stop()
self.heartreportTimer.stop()
-
self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
pass
else:#
self.write_config_msg_file(self.config_data)
self.china_mobile_init()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件
return
+
report_result = self.self_regis_report_cb()#注册
#第二步触发心跳上报次数
def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
#
date_tmp = utime.localtime()
- time_tmp = utime.mktime(date_tmp)#获取时间戳
-
- 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:#判断报错次数
+ currentTime = utime.mktime(date_tmp)#获取时间戳
+ reportTime = self.reportTime_Sec
+ print("check_current_time:time_tmp - self.reportTime_Sec:{} self.reportTime*60:{}".format(self.reportTime_Sec - currentTime ,self.reportTime*60))
+ if currentTime > reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)#获取时间戳
+ self.report_Num_old = 0#清空上报总次数 #保存本地
+ self.retryNum_old = 0#清空上报错误次数 #保存本地
+ self.reportTime_Sec = time_tmp+reportTime#记录当前时间+reportTime的时间用于下次错判断
+ 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.error_retryNum_step()
- else:#å½\93å\89\8dæ\97¶é\97´-æ\97§ç\9a\84ä¿\9då\98æ\97¶é\97´ å°\8fäº\8ereportTime å¹¶ä¸\94次æ\95°å¤§äº\8e8次äº\86
- time_count = time_tmp - self.reportTime_Sec
+ else:#å\90¦å\88\99次æ\95°ç½®é\9b¶ï¼\8cè®°å½\95ä¸\80ä¸\8bï¼\88å½\93å\89\8dæ\97¶é\97´+reportTimeï¼\89æ\97¶é\97´
+ time_count = self.reportTime_Sec - currentTime#self.reportTime_Sec永远比time_tmp大
self.retpoertTimerC.start(time_count*1000,1,self.retpoertTimerCB)
- def retpoertTimerCB(self,*argc):
+
+ # 第一次请求的时候,记录一下(当前时间+reportTime)时间与次数,如果次数小于最大次数,直接返回true。
+ # 如果次数大于最大次数,则判断一下当前时间是否超过上次设置的时间,如果超过了,则表示超过最大次数;否则次数置零,记录一下(当前时间+reportTime)时间。
+ def retpoertTimerCB(self,*argc):#按照剩余的时间做定时器
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
- 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))
+ print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec))
self.report_Num_old = 0#清空上报总次数 #保存本地
self.retryNum_old = 0#清空上报错误次数 #保存本地
- self.reportTime_Sec = 0
+ self.reportTime_Sec = time_tmp+reportTime#记录当前时间+reportTime的时间用于下次错判断
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()#清空报错次数重新走判断报错次数
pass
print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum))
if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数
self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
- else:#查询报错次数
- self.error_retryNum_step()
+ else:#
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)#获取时间戳
+ self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+ self.write_config_msg_file(self.config_data)
+ self.error_retryNum_step()#查询上报错误次数
- def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器
+ def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器 要清空数据
print("reportTimerIntervalCb\r\n")
self.retryNum_old = 0#保存
self.report_Num_old = 0#保存 定时清空数据
- self.reportTime_Sec = 0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)#获取时间戳
+ self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间
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
def self_regis_report_cb(self):#自注册上报信息
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
- 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 ##保存本地
self.config_data["report_Num_old"] = self.report_Num_old
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"#上报地址
+ url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址
confing_type = "autoRegist"#上报传输配置
result = self.china_mobile_autoregist_infor(url,confing_type)
self.retryTimer.stop()#关定时器
self.retpoertTimerC.stop()
self.heartreportTimer.stop()
+ if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:
+ print("retryTimerCb timer22")#异常重试过多重新间隔reportTime注册流程 关闭所有的定时器
+ self.retryTimer.stop()#关定时器
+ self.retpoertTimerC.stop()
+ self.heartreportTimer.stop()
+ self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据
+ return
self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
return 0
else:
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"#上报地址
+ url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址
confing_type = "keepAlive"#上报传输配置
result = self.china_mobile_autoregist_infor(url,confing_type)
if result != 1:
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)
+ if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程
+ print("retryTimerCb timer3333")
+ self.retryTimer.stop()#关定时器
+ self.retpoertTimerC.stop()
+ self.heartreportTimer.stop()
+ self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据
+ return
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
if status == None:
status = 0
if status == 0:#恢复出厂或者新的机器需要清空不必要的数据
- if self.init_flag == 0:
+ if self.init_flag == 0:#只初始化一次
+ IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在
+ if IFEXIST == True:
+ uos.remove("/usr/telecom_config.json")
+ isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除
+ if isStorage == True:
+ uos.remove("/usr/china_mobie_config.json")
+ #先清空再写入
self.init_flag = 1
self.retryInterval = 10
self.retryNum = 1#异常重试最大次数
self.report_Num_old = 0#保存本地
self.retryNum_old = 0#保存本地
+ self.address = "b.fxltsbl.com"#默认适配地址
+
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["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)
#读配置文件
class telecomDmp:
def __init__(self):
+ self.config_data = {}
self.check_timer = osTimer()#1小时定时器
self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制
self.telecomTimer = osTimer()
def get_dev_version(self,event,msg):#获取固件版本号
return self.software_version
- def save_iccid_data(self,event,msg):#保存ICCID
- print("save_iccid_data :{}".format(msg))
+ def save_iccid_data(self,event,msg):
+ self.iccid_data = str(msg)[6:]#ICCID:
+ print("write_config_msg_file msg:{}\r\n".format(msg))
+ self.config_data["ICCID"]=self.iccid_data
+ with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+ #读文件信息
+ def get_iccid_data(self,event,msg):
- self.iccid_data = str(msg[1])#iccid:
- if msg[0] == 1:#不需要回复BLE 否则需要回复BLE
- eventMesh.publish("cat1_reply_iccid_to_ble",self.iccid_data)
-
- def get_iccid_data(self,event,msg):#获取ICCID
+ IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在
+ if IFEXIST == True:
+ with open("/usr/telecom_config.json","r",encoding='utf-8') as fd:
+ self.config_data = ujson.load(fd)
+ print("get_iccid_data self.config_data:{}\r\n".format(self.config_data))
+ if self.config_data != {}:
+ if "ICCID" in self.config_data:
+ value = self.config_data["ICCID"]
+ self.iccid_data = str(value)
+ else:
+ self.iccid_data = ""
+ print("get_iccid_data self.config_data end:{}\r\n".format(self.config_data))
return self.iccid_data
def set_regist_time(self,event,msg):#
- print("regist_timeSec :{}".format(msg))
-
- self.regist_timeSec = int(msg[1])#iccid:
- if msg[0] == 1:#不需要回复BLE 否则需要回复BLE
- eventMesh.publish("cat1_reply_timesec_to_ble",self.regist_timeSec)
+ self.regist_timeSec = str(msg)[7:]#REGIST:
+ print("set_regist_time msg:{}\r\n".format(msg))
+ self.config_data["REGIST"]=self.regist_timeSec
+ with open("/usr/telecom_config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
def get_regist_time(self,event,msg):#
+ IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在
+ if IFEXIST == True:
+ with open("/usr/telecom_config.json","r",encoding='utf-8') as fd:
+ self.config_data = ujson.load(fd)
+ print("get_regist_time self.config_data:{}\r\n".format(self.config_data))
+ if self.config_data != {}:
+ if "REGIST" in self.config_data:
+ value = self.config_data["REGIST"]
+ self.regist_timeSec = int(value)
+ else:
+ self.regist_timeSec = 0
return self.regist_timeSec
self.timer_count = 0
self.check_timer.stop()
self.isRegistOk = 1#已完成自注册的标识
- eventMesh.publish("save_iccid_data",[1,iccid])
+ iccid_buf =str("ICCID:")+str(str(iccid))
+ eventMesh.publish("save_iccid_data",iccid_buf)
self.multiple_day_resend()
#上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域
print("regist success:!!!!!")
time_tmp = utime.mktime(date_tmp)#获取时间戳
if self.multimer_init == 1:#已注册过或者开机5分钟之内没有注册 或者注册成功就开始出发多日重发机制
self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t#初始值多加12小时 #初始化t = 0.5天
- eventMesh.publish("set_regist_time",[1,self.mulit_day_timesec])
+ REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec)
+ eventMesh.publish("set_regist_time",REGIST_buf)
return
self.multimer_init = 1
#设置开始时间戳
get_timesec = eventMesh.publish("get_regist_time")#一开机初始化为0 没有保存过数据 如果保存过就用保存的时间
if get_timesec == 0:
- self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t #初始化t = 0.5天
- eventMesh.publish("set_regist_time",[1,self.mulit_day_timesec])
+ self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t
+ REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec)
+ eventMesh.publish("set_regist_time",REGIST_buf)
else:
self.mulit_day_timesec = get_timesec
self.multiDayResend_timer.start(60*60*1000,1,self.multiDayResendTimer_Cb)#一分钟计时
return
self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t
self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天
- eventMesh.publish("set_regist_time",[1,self.mulit_day_timesec])
+ REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec)
+ eventMesh.publish("set_regist_time",REGIST_buf)
def set_telecom_init_state(self,event,msg):#开机5分钟内检查是否有联网 有一次联网就关闭检查
def set_dmp_power_num(self,event,msg):
print("set_dmp_power_num:{}".format(msg))
self.timerPowerNum = msg
+ def clear_storage_data(self):
+ IFEXIST = ql_fs.path_exists("/usr/telecom_config.json") #不存在
+ if IFEXIST == True:
+ uos.remove("/usr/telecom_config.json")
+ isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除
+ if isStorage == True:
+ uos.remove("/usr/china_mobie_config.json")
+ print("clear_storage_data;{} {}".format(IFEXIST,isStorage))
+
def telecom_dmp_power_on_init(self):#开机初始化一次检测
if eventMesh.publish("get_telecom_init_state") == 1:#发送消息获取对应的值
return
if eventMesh.publish("get_dmp_power_num") < (eventMesh.publish("get_dmp_power_timer_count")*1000)/30000:#开机检查
if eventMesh.publish("get_telecom_init_state") == 0:#开机初始化一次
+ status = eventMesh.publish("get_factory_status")
+ if status == None:
+ status = 0
+ if status == 0:#恢复出厂过需要清空存储数据
+ self.clear_storage_data()
+ pass
self.telecomTimer.start(1*1000,0,self.fun_cb)
eventMesh.publish("set_telecom_init_state",1)