-# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-
-# net.getNetMode()
-# (0, '460', '11', 7)
-
-# net.getSignal(1)
-# ([99, 99, 255, 255], [-84, -117, -15, 255, -3])
-
-# net.nitzTime()
-# ('24/02/26 11:17:42 8 0', 1708946262, 0)
-
-
import usocket
import log
import utime
import dataCall
import voiceCall
import net
-import uping
-import example
import osTimer
import sim
import modem
import utime
import checkNet
import atcmd
-import fota
-import request
import ql_fs
import pm
import sms
from usr.EventMesh import eventMesh
-# from usr.telecom_dmp import telecomDmpCb
-# from usr.china_mobile_dmp import chinamobileCb
-
-# 设置日志输出级别
log.basicConfig(level=log.INFO)
clog = log.getLogger("cat1")
-def msg_cb(args):
- index = args[1]
- storage = args[2]
- sms_data = sms.getSaveLoc()
- if sms_data == -1:
- return
- sms_max = sms_data[0][2]
- if index != -1:
- eventMesh.publish("send_singal_data_toBle",index)
-
- if index >= sms_max-1:#删除短信
- eventMesh.publish("delete_sms_event")#删除短信
-
-sms.setCallback(msg_cb)#sms注册回调
-
-CAT1_SERVICE_HEAD = 'FE' #固定head
-
+CAT1_SERVICE_HEAD = 'FE'
PROJECT_NAME = "Cat1SlipUDPService"
PROJECT_VERSION = "PY_SRV_V17"
CONFIG_JSON="/usr/system_config.json"
CURRENT_APP_TYPE="pysrv"
-
-
-
-
-
-#设置通话音量
voiceCall.setVolume(10)
-clog.info("voice call volume {}".format(voiceCall.getVolume()))
lpm_fd = pm.create_wakelock("system_lock", len("system_lock"))
-# pm.autosleep(1)
pm.wakelock_lock(lpm_fd)
-clog.info("create_wakelock {}".format(pm.get_wakelock_num()))
telecomTimerCount = 0
def get_versionkeyname_by_py(app_type):
return str("{}version".format(app_type))
return "PY_OTA_V14"
elif (app_type == "pysrv"):
return "PY_SRV_V16"
-
-#如果没有configfile则创建它
+
if not ql_fs.path_exists(CONFIG_JSON):
data = {str(get_versionkeyname_by_py(CURRENT_APP_TYPE)):get_default_versionvalue_by_py(CURRENT_APP_TYPE)}
ql_fs.touch(CONFIG_JSON,data)
config_data = ql_fs.read_json(CONFIG_JSON)
config_data.update( {str(get_versionkeyname_by_py(app_type)):keyvalue})
ql_fs.touch(CONFIG_JSON, config_data)
- clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue))
- clog.info("{}".format(config_data))
except Exception as e:
clog.error("set_version_to_json_config")
def get_version_from_json_config(app_type):
config_data = ql_fs.read_json(CONFIG_JSON)
keyvalue = config_data.get( get_versionkeyname_by_py(app_type),get_default_versionvalue_by_py(app_type))
- clog.info("{}={}".format(get_versionkeyname_by_py(app_type),keyvalue))
return keyvalue
set_version_to_json_config(CURRENT_APP_TYPE,PROJECT_VERSION)
audio.set_qdai_cfg(1,0,0,1,0,0,1,1)
-
-# GPIO21 - 引脚 86 KP_MKOUT1 唤醒主控
-# GPIO22 - 引脚 87 KP_MKIN 被主控唤醒
-
-# GPIOn - GPIO号,int类型,点此查看GPIO引脚编号与物理引脚的映射关系。
-
-# direction - 输入输出模式,int类型,IN - 输入模式,OUT - 输出模式。
-
-# pullMode - 上下拉模式,int类型,说明如下:
-# PULL_DISABLE - 浮空模式
-# PULL_PU - 上拉模式
-# PULL_PD - 下拉模式
-
-# level - 引脚电平,int类型,0 - 设置引脚为低电平, 1- 设置引脚为高电平。
-# recvDataPin = Pin(Pin.GPIO22, Pin.IN, Pin.PULL_PU, 0)
def ExtIntfun(args):
- # clog.info('### interrupt {} ###'.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿
if args[1] == 0:
- clog.info("disable autosleep")
- # pm.autosleep(0)
pm.wakelock_lock(lpm_fd)
elif args[1] == 1:
- clog.info("enable autosleep")
pm.wakelock_unlock(lpm_fd)
- # pm.autosleep(1)
- # clog.info("recvDataPin={}".format(recvDataPin.read()))
extint = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, ExtIntfun)
extint.enable()
-
-# 创建gpio对象
gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1)
-# 设置输入输出模式
gpioWakeBT.set_dir(Pin.OUT)
-
-# 设置引脚电平
gpioWakeBT.write(0)
-UDP_CMD_GET_CAT1VER = '0' #获取 Cat1 版本号
-UDP_CMD_DIAL_NUMB = '1' #拨打电话
-UDP_CMD_HUNGUP = '2' #挂断电话
-UDP_CMD_ANSWER = '3' #接听电话
-UDP_CMD_CAT1_OTA_UPDATE = '4' #触发Cat1 OTA升级,mcu提供url
-UDP_CMD_SEND_SMS = '5' #发送SMS短信,mcu提供电话号及短信内容
-UDP_CMD_GET_TIME = '6' #获取Cat1 时间 ,YYYYMMDD HHmmss zone
-UDP_CMD_GET_RECV_NETWORKSTAT = '7' #获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态 // 内容同UDP_CMD_GET_NETWORKSTAT,CAT主动发给MCU
-UDP_MSG_SMS = '8' # CAT1接收到的SMS信息给MCU,包含电话号及短信内容
-UDP_CMD_ATCMD = '9' # 执行AT指令
-UDP_MSG_CALL_CONNECTED = 'A' # CAT1 电话接听消息
-UDP_MSG_CALL_DISCONNECTED = 'B' # CAT1 电话挂断消息
-UDP_MSG_COMMING_CALL = 'C' # CAT1 来电消息,包含电话号
-UDP_MSG_REPLY = 'F' # 返回值
-
+UDP_CMD_GET_CAT1VER = '0'
+UDP_CMD_DIAL_NUMB = '1'
+UDP_CMD_HUNGUP = '2'
+UDP_CMD_ANSWER = '3'
+UDP_CMD_CAT1_OTA_UPDATE = '4'
+UDP_CMD_SEND_SMS = '5'
+UDP_CMD_GET_TIME = '6'
+UDP_CMD_GET_RECV_NETWORKSTAT = '7'
+UDP_MSG_SMS = '8'
+UDP_CMD_ATCMD = '9'
+UDP_MSG_CALL_CONNECTED = 'A'
+UDP_MSG_CALL_DISCONNECTED = 'B'
+UDP_MSG_COMMING_CALL = 'C'
+UDP_MSG_REPLY = 'F'
class Cat1Service:
- AP = 0 # SLIP_INNER
- STA = 1 # SLIP_OUTER
-
+ AP = 0
+ STA = 1
def __init__(self, uart=UART.UART4, mode=AP):
-
self.__uart = uart
self.__mode = mode
self.__message = ''
self.__err = 0
self.__net_connected = 0
- # self.__value = None
self.__wait_resp = 0
self.__waiting_netstat = 0
slip.destroy()
- clog.info('slip uart={0}'.format (self.__uart))
-
ret = slip.construct(self.__uart, self.__mode, 0)
if ret != 0:
- clog.error('slip netif construct fail')
return None
- clog.info('slip network card create success')
- # self.__queue = Queue(1)
self.__sock = self.__socket_init()
self.__threadid = _thread.start_new_thread(self.__Socket_Thread, ())
self.telecom_init_flag = 0
self.telecomTimer = osTimer()
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()
-
- self.volte_switch = 1 #默认是开启VOLTE通话功能
+ self.volte_switch = 1
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("remove_all_sms_cb", self.remove_all_sms_cb)
eventMesh.subscribe("send_sms_max_to_Ble",self.send_sms_max_to_Ble)
- eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data) #获取所有的短信内容
+ 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.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE)
eventMesh.subscribe("set_volte_switch",self.set_volte_switch)
eventMesh.subscribe("get_volte_switch",self.get_volte_switch)
eventMesh.publish("delete_sms_event")
-
-
self.telecom_dmp_switch = 0
-
self.send_data = []
self.code_old = 0
self.code_old_num = 1
self.tmp_data = []
self.total_num = 0
- #
self.msg_nums = 0
self.msg_nums_old = 0
self.china_mobile_init = 0
self.send_data_q = Queue(100)
self.ack_sem=0
_thread.start_new_thread(self.Socket_SEND_Thread,())
- # 发数据线程
return None
def __socket_init(self):
- # 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT)
sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
- # 绑定IP
bind_addr = ('172.16.1.2', 5000)
sock.bind(bind_addr)
sock.settimeout(None)
self.reply_cmd('0F',"VOLUME:{}".format(voiceCall.getVolume()))
def btmcu_cmd_handler(self,cmd,parm):
-
- # cmd = ""
- # cmd_tmp= int(cmd_data)#将十进制数转换成int 再转换成十六进制
- # cell_data = hex(cmd_tmp)
- # decimal_number = int(cell_data, 16)
- # cmd = "%02x"%(decimal_number) # 使用两位表示,不足前面补0
- clog.info(cmd) # 输出: 07
- clog.info("btmcu_cmd_handler cmd {0} , args {1}".format(cmd,parm))
if cmd == "00":
- clog.info(cmd)
- # UDP_CMD_GET_CAT1VER
modem_ver = modem.getDevFwVersion()
self.reply_cmd('00',"pyVer:{}@modemVer:{}".format(PROJECT_VERSION,modem_ver))
elif cmd == "01":
- # UDP_CMD_DIAL_NUMB
- if eventMesh.publish("get_volte_switch") == 1: #只有BLE开了VOLTE才允许打电话
+ if eventMesh.publish("get_volte_switch") == 1:
ret = voiceCall.callStart(str(parm))
- # if ret != 0:
- # ret = voiceCall.callStart(str(parm))
- clog.info("ret={} {} {}".format(ret,cmd,parm))
if ret != 0:
self.reply_cmd('0F',"callcmd_fail")
else:
else:
self.reply_cmd('0F',"callcmd_fail")
elif cmd == "02":
- clog.info(cmd)
- # UDP_CMD_HUNGUP
ret = voiceCall.callEnd()
if ret != 0:
ret = voiceCall.callEnd()
else:
self.reply_cmd('0F',"callend_success")
elif cmd == "03":
- clog.info(cmd)
- # UDP_CMD_ANSWER
ret = voiceCall.callAnswer()
if ret != 0:
ret = voiceCall.callAnswer()
self.reply_cmd('0F',"callanswer_fail")
else:
self.reply_cmd('0F',"callanswer_success")
- elif cmd == "04":
- clog.info(cmd)
- elif cmd == "05":
- clog.info(cmd)
- # UDP_CMD_SEND_SMS
elif cmd == "06":
- clog.info(cmd)
- # UDP_CMD_GET_TIME
time=utime.localtime()
zone=utime.getTimeZone()
- #(2024, 3, 2, 18, 31, 32, 5, 62),8
- # 返回当前时间戳,参数为元组
- # timestamp = utime.mktime(time)
- # clog.info(timestamp)
self.reply_cmd('06',"{0}@{1}".format(time,zone))
elif cmd == "07":
- clog.info("cmd ==== 07!")
- # UDP_CMD_GET_RECV_NETWORKSTAT
simstat = sim.getStatus()
imei = modem.getDevImei()
netstat = "0,10,0,10"
netstat_ = net.getState()
if netstat_ != -1 :
netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3])
- # ([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data_lac, data_cid, data_rat, data_reject_cause, data_psc])
operator = net.operatorName()
signal = net.csqQueryPoll()
- clog.info("imei:{0},sim:{1},oper:{2},signal:{3},net:{4}".format(imei,simstat,operator,signal,netstat))
self.reply_cmd('07',"imei:{0}@sim:{1}@oper:{2}@signal:{3}@net:{4}".format(imei,simstat,operator,signal,netstat))
elif cmd == "09":
- clog.info("{},{}".format(cmd,parm))
- # UDP_CMD_ATCMD
- # net.setModemFun(0)
- # net.setModemFun(1)
resp=bytearray(50)
ret=atcmd.sendSync("{}\r\n".format(parm),resp,'',10)
if ret == 0:
- clog.info("reply:{},ret:{}".format(resp.decode(),ret))
self.reply_cmd('09',"{}".format(resp.decode()))
else:
- clog.info("cmd error ret:{}".format(ret))
self.reply_cmd('09',"{}".format("at error"))
- elif cmd == "10" or cmd == "12" or cmd == "14": #获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能
- if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 :
+ elif cmd == "10" or cmd == "12" or cmd == "14":
+ if 1:
if eventMesh.publish("get_dmp_change_mode") == 1:
self.telecom_recv_cmd(cmd,parm)
else:
pass
- if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1:
if eventMesh.publish("get_dmp_change_mode") > 1:
self.china_mobile_recv_cmd(cmd,parm)
else:
pass
elif cmd == "13":
on = int(parm)
- clog.info("set_dmp_change_mode on:{}".format(on))
eventMesh.publish("set_dmp_change_mode",on)
-
elif cmd == "16":
- if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1:
if eventMesh.publish("get_dmp_change_mode") > 1:
self.china_mobile_recv_cmd(cmd,parm)
else:
pass
- elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用
+ elif cmd == "17":
eventMesh.publish("set_factory_status",int(parm))
elif cmd == "18":
eventMesh.publish("set_dmp_cm_address",str(parm))
- elif cmd == "19": #DTMF功能
- voiceCall.startDtmf(str(parm),100) #100ms 持续时间 100-1000
+ elif cmd == "19":
+ voiceCall.startDtmf(str(parm),100)
elif cmd == "1A":
eventMesh.publish("set_volte_switch",int(parm))
- elif cmd == "AC":#
+ elif cmd == "AC":
if self.ack_sem==1:
self.ack_sem=0
if cmd == "10":
self.software_version = str(parm)
eventMesh.publish("set_dev_version",self.software_version)
- clog.info("software_version:{},{}".format(self.software_version,parm))
elif cmd == "12":
pass
elif cmd == "14":#
- pass
-
-
+ pass
pass
- def set_volte_switch(self,event,msg): #设置VOLTE开关
+ def set_volte_switch(self,event,msg):
self.volte_switch = int(msg)
-
- def get_volte_switch(self,event,msg): #获取VOLTE开关
-
+ def get_volte_switch(self,event,msg):
return self.volte_switch
-
- def china_mobile_recv_cmd(self,cmd,parm): #移动入库相关指令
+ def china_mobile_recv_cmd(self,cmd,parm):
if cmd == "10":
self.software_version = str(parm)
eventMesh.publish("set_dev_version",self.software_version)
- clog.info("software_version:{},{}".format(self.software_version,parm))
- elif cmd == "16": #获取BLE mac地址
- eventMesh.publish("set_dev_mac",str(parm))
- clog.info("parm:{}\r\n".format(parm))
-
+ elif cmd == "16":
+ eventMesh.publish("set_dev_mac",str(parm))
pass
def get_factory_status(self,event,msg):
return self.factory_status
def delete_sms_cb(self,*argc):
eventMesh.publish_async("remove_all_sms_cb","",1*1024)
def remove_all_sms_cb(self, event, msg):
- clog.info("remove_all_sms_cb\r\n")
- msg_nums = sms.getMsgNums() #短信数量
+ msg_nums = sms.getMsgNums()
if msg_nums == -1:
msg_nums = 0
sms_data = sms.getSaveLoc()
- clog.info("{}\r\n".format(sms_data))
if sms_data == -1:
return
- sms_max = sms_data[0][2] #最大存储短信数量
+ sms_max = sms_data[0][2]
if sms_max >= msg_nums and sms_max > 0:
- sms.deleteMsg(1,4) #删除所有的sms信息
+ sms.deleteMsg(1,4)
def send_singal_data_toBle(self,event,msg):
- msg_nums = sms.getMsgNums() #短信数量
+ msg_nums = sms.getMsgNums()
if msg_nums == -1:
msg_nums = 0
sms_data = sms.getSaveLoc()
if sms_data == -1:
return
- sms_max = sms_data[0][2] #最大存储短信数量
- clog.info("recv:{}".format(int(msg)))
+ sms_max = sms_data[0][2]
message=self.sms_get_message_info(int(msg))
- if message == -1: #说明没有这条短信
+ if message == -1:
return
message_pdu = sms.decodePdu(message[5],20)
-
- if message_pdu != -1: #解码出来的内容
-
- message_ref = message[0] #编码
- message_total_num = message[1] #总共条数
- message_seq = message[2] #当前第几条
- data = message[5] #内容
- data_len = len(data) #内容长度
- # ref :短信参考标识,同一个标识表明为同一条短信
- # total_num :此条长短信总条数 大于1属于长短信
- # seq :此条短信在长短信中的序号
- # print("message:{} {}\r\n".format(message,message_pdu))
+ if message_pdu != -1:
+ message_ref = message[0]
+ message_total_num = message[1]
+ message_seq = message[2]
+ data = message[5]
+ data_len = len(data)
msg_total = "ref:"+str(message_ref)+"@total_num:"+str(message_total_num)+"@seq:"+str(message_seq)+"@data:"+str(message[5])
self.reply_cmd('15',msg_total)
data_str3=data_str3+data_str1[i]
return data_str3
def sms_get_message_info(self,index):
- """
- :param index :短信索引值
- :tyoe index :整形
-
- :return :元组类型
- 元组内容:
- (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len)
-
- :message_ref :短信参考标识,同一个标识表明为同一条短信
- :message_total_num :此条长短信总条数
- :message_seq :此条短信在长短信中的序号
- :sub_message_data :词条短信的内容
- :pdu_tye :PDU类型,bit 6标记是否包含用户报文头,长短信需要
- :sub_message_len :此条短信内容长度
-
- """
-
message0=sms.searchPduMsg(index)
- #print("sms_get_message_info:message0:{}".format(message0))
if message0 == -1:
return -1
data_len = data_len+1*2
sca = message0[data_len:data_len+sca_num*2]
- # 电话号码高低位需要转换
sca = self.sms_deal_phone_number(sca)
-
- # if sca_num % 2 == 1:
- # print("Get SCA phone {}".format(sca[:-1]))
- # else:
- # print("Get SCA phone {}".format(sca))
-
data_len = data_len+sca_num*2
pdu_tye = int(message0[data_len:data_len+1*2],16)
oa_num_t = int((oa_num )/2)
oa = message0[data_len:data_len+oa_num_t*2]
- # 电话号码高低位需要转换
oa = self.sms_deal_phone_number(oa)
-
- # if oa_num % 2 == 1:
- # print("Get OA phone {}".format(oa[:-1]))
- # else:
- # print("get OA phone {}".format(oa))
-
data_len = data_len+oa_num_t*2
pid = message0[data_len:data_len+1*2]
data_len = data_len+1*2
sub_message_head = message0[data_len:data_len+6*2]
data_len = data_len+6*2
-
- # 或短信用户数据
sub_message_data = message0[data_len:data_len+sub_message_len*2]
- #长短信
if ((pdu_tye & 0x40 ) >> 6) == 1:
- #长短信,处理长短信用户报文头
message_ref = int(sub_message_head[6:8],16)
message_total_num = int(sub_message_head[8:10],16)
message_seq = int(sub_message_head[10:12],16)
return [message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,message0]
else:
- # 短短信
return [0,1,1,pdu_tye,sub_message_len,message0]
def send_sms_max_to_Ble(self,event,msg):
- msg_nums = sms.getMsgNums()#短信数量
+ msg_nums = sms.getMsgNums()
if msg_nums == -1:
msg_nums = 0
sms_data = sms.getSaveLoc()
if sms_data != -1:
- sms_max = sms_data[0][2]#最大存储短信数量
+ sms_max = sms_data[0][2]
self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums))
pass
SMS_lis={}
SMS_lis_count = 0
sms_data = sms.getSaveLoc()
- clog.info(sms_data)
if sms_data == -1:
return
- sms_max = sms_data[0][2]#最大存储短信数量
- clog.info(sms_max)
+ sms_max = sms_data[0][2]
self.msg_nums = sms.getMsgNums()
if self.msg_nums_old != self.msg_nums:
self.send_data = []
break
data = message[5]
sms_data = []
- code = message[0]#编码
- num = message[1]#总共条数
- curren_num = message[2]#当前第几条
+ code = message[0]
+ num = message[1]
+ curren_num = message[2]
data_len = message[4]
- sms_data.append(code)#编码 编码相同是同一条短信的内容
+ sms_data.append(code)
sms_data.append(num)
sms_data.append(curren_num)
sms_data.append(data)
count = len(self.send_data)
for i in range(count):
text = self.send_data[i]
- clog.info("text:{} {} {}\r\n".format(text[0],text[1],text[2]))
-
msg_total = "@code:"+str(text[0])+"@totalcodenum:"+str(text[1])+"@currcodeid:"+str(text[2])+"@data:"+str(text[3])
self.reply_cmd('17',msg_total)
- # 来电提醒
def notifyIncomingcall(self, incomming_numb):
self.clear_remain()
__head = '0C'
__message = str(incomming_numb)
self.__Socket_UDP(__head, __message)
- # if self.__err == 1 or self.__value[2] != 'OK':
- # return -1
return 0
- # 电话接听消息
def notifyConnecteCall(self, phone_numb):
self.clear_remain()
__head = '0A'
__message = str(phone_numb)
self.__Socket_UDP(__head, __message)
- # if self.__err == 1 or self.__value[2] != 'OK':
- # return -1
return 0
- # 电话拒接消息
def notifyDisconnectCall(self, phone_numb):
self.clear_remain()
__head = '0B'
__message = str(phone_numb)
self.__Socket_UDP(__head, __message)
- # if self.__err == 1 or self.__value[2] != 'OK':
- # return -1
return 0
def wait_network_ready(self):
stage, state = checkNet.waitNetworkReady(30)
pm.wakelock_unlock(lpm_fd)
if stage == 3 and state == 1:
- clog.info('Network connection successful.')
self.set_network_config()
self.__net_connected = 1
eventMesh.publish("set_network_state",self.__net_connected)
self.__waiting_netstat = 0
return 0
else:
- clog.info('Network connection failed, stage={}, state={}'.format(stage, state))
self.reset_network_config()
self.__net_connected = 0
eventMesh.publish("set_network_state",self.__net_connected)
-
self.__waiting_netstat = 0
return -1
- # 查询网卡状态
def timesync(self,_timesync):
self.clear_remain()
message = str(_timesync)
def reply_cmd(self,cmd,_timesync):
try :
- clog.info('reply_cmd 1')
self.clear_remain()
message = str(_timesync)
- clog.info('reply_cmd 2')
self.__Socket_UDP_noreply(cmd, message)
except:
clog.info('reply_cmd')
return 0
def clear_remain(self):
- # if self.__queue.empty() == False:
- # self.__queue.get()
self.__err = 0
- # self.__value = None
- #添加路由信息
def router_add(self, ip='192.168.4.1', mask='255.255.255.0'):
self.ip = ip
self.mask = mask
-
return slip.router_add(self.ip, self.mask)
-
- # 获取slip的网络配置
+
def ipconfig(self):
return slip.ipconfig()
- # 设置dns服务器
def set_dns(self, pri_dns='8.8.8.8', sec_dns='114.114.114.114'):
self.pri_dns = pri_dns
self.sec_dns = sec_dns
return slip.set_dns(self.pri_dns,self.sec_dns)
- # 设置默认网卡
def set_default_NIC(self, ip_str):
self.ip_str = ip_str
return slip.set_default_netif(self.ip_str)
def reset_network_config(self):
if (self.__net_connected == 0):
- clog.info("skip reset_network_config")
return 0
Info = dataCall.getInfo(1,0)
- clog.info("Info{}".format(Info))
- default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改
- segment_ip = '172.16.4.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改
- mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改
- # 配置默认网卡,通过默认网卡进行网络转发
+ default_NIC_ip = Info[2][2]
+ segment_ip = '172.16.4.0'
+ mask = '255.255.255.0'
cat1service.set_default_NIC(default_NIC_ip)
- clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip))
- #添加路由规则,只有该网段IP才进行转发
cat1service.router_add(segment_ip, mask)
- pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改
- sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改
- # 配置网卡DNS服务器
+ pri_dns = '8.8.8.8'
+ sec_dns = '114.114.114.114'
cat1service.set_dns(pri_dns, sec_dns)
- # 网卡IP信息查询
cat1service.ipconfig()
def set_network_config(self):
-
-
if (self.__net_connected == 1) :
- clog.info("skip set_network_config")
return 0
Info = dataCall.getInfo(1,0)
- clog.info("Info{}".format(Info))
- default_NIC_ip = Info[2][2] # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改
- segment_ip = '172.16.1.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改
- mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改
- # 配置默认网卡,通过默认网卡进行网络转发
+ default_NIC_ip = Info[2][2]
+ segment_ip = '172.16.1.0'
+ mask = '255.255.255.0'
cat1service.set_default_NIC(default_NIC_ip)
- clog.info("default_NIC_ip {0} segment_ip {1}".format(default_NIC_ip,segment_ip))
- #添加路由规则,只有该网段IP才进行转发
cat1service.router_add(segment_ip, mask)
- pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改
- sec_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改
- # 配置网卡DNS服务器
+ pri_dns = '8.8.8.8'
+ sec_dns = '114.114.114.114'
cat1service.set_dns(pri_dns, sec_dns)
- # 网卡IP信息查询
cat1service.ipconfig()
- if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭
+ if eventMesh.publish("get_dmp_change_mode") == 0:
return
- if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
+ if 1:
if eventMesh.publish("get_dmp_change_mode") == 1:
eventMesh.publish("set_network_state",1)
- # telecomDmpCb.telecom_dmp_power_on_init()
- if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1:
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)
self.reply_cmd('14',"REGIST_TIME:{}".format(msg))
pass
- # 释放slip网卡
+
def stop(self):
slip.destroy()
return 0
-
- # 封装tlv数据包
def __pack_tlv_format(self, head, content):
- # self.head = head
- # self.content = content
if len(content) == 0 or len(content) > 9999 or len(head) != 2:
- clog.error('illegal pack tlv content')
return -1
len_str ='%04d' % len(content)
tlv_pack = CAT1_SERVICE_HEAD+head+len_str+content
return tlv_pack
- # 解码tlv数据包
+
def __unpack_tlv_format(self, msg):
- clog.info('__unpack_tlv_format {}\r\n'.format(msg))
- self.msg = str(msg)[2:]#这是去除head FE
+ self.msg = str(msg)[2:]
tag = self.msg[0:2]
length = self.msg[2:6]
value = self.msg[6:]
len_str ='%04d' % len(value)
if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != self.msg[2:6]:
- clog.error('__unpack_tlv_format err')
return -1
- clog.info('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value))
unpack = (tag,length,value)
return unpack
- # socket通信(UDP)模块
def __Socket_UDP(self, head, content):
- # 0 则 __Socket_UDP_write
self.send_data_q.put([head,content])
def Socket_SEND_Thread(self):
while True:
try:
- clog.info("send====")
data=self.send_data_q.get()
self.ack_sem=1
- # # if data[2]:
- # self.__Socket_UDP_noreply_write( data[0], data[1])
- # else :
self.__Socket_UDP_write( data[0], data[1])
-
-
- clog.info("Socket_SEND_Thread data:{} {}".format(data[0],data[1]))
count=20
while count & self.ack_sem :
utime.sleep_ms(1)
count=count-1
- # if data[2]:
- # self.__Socket_UDP_noreply_write( data[0], data[1])
- # else :
self.__Socket_UDP_write( data[0], data[1])
-
- clog.info("Socket_SEND_Thread while data:{} {}".format(data[0],data[1]))
-
- if data:
- clog.info("data ok!!")
- else:
- clog.error("data error!!")
except Exception :
clog.error("sned Socket >>>")
def __Socket_UDP_write(self, head, content):
try:
- ##self.head = head
- # self.content = content
gpioWakeBT.write(1)
utime.sleep_ms(2)
gpioWakeBT.write(0)
utime.sleep_ms(20)
- # 消息处理
msg = self.__pack_tlv_format(head, content)
-
- # 向服务端发送消息
server_addr = ('172.16.1.5',1000)
- clog.info("__Socket_UDP send msg {}".format(msg))
self.__err = 0
self.__sock.sendto(msg,server_addr)
- clog.info("__Socket_UDP send 2")
self.__wait_resp = 1
- # data = self.__queue.get()
self.__wait_resp = 0
- # return data
return 1
except Exception as error:
clog.error(error)
return 0
def __Socket_UDP_noreply(self, head, content):
- # 1 则 __Socket_UDP_noreply_write
self.send_data_q.put([head,content])
-
- def __Socket_UDP_noreply_write(self, head, content):
- # self.head = head
- # self.content = content
- gpioWakeBT.write(1)
- utime.sleep_ms(2)
- gpioWakeBT.write(0)
- utime.sleep_ms(20)
- # 消息处理
- msg = self.__pack_tlv_format(head, content)
-
- # 向服务端发送消息
- server_addr = ('172.16.1.5',1000)
-
- clog.info("__Socket_UDP_noreply send msg {}".format(msg))
- self.__err = 0
- data_size = self.__sock.sendto(msg,server_addr)
- clog.info("self.__sock data_size {}".format(data_size))
- self.__wait_resp = 0
- return 0
- # socket通信(UDP)模块
def __Socket_Thread(self):
while True:
try:
- clog.info("recv====")
data=self.__sock.recv(1024)
- clog.info("data:{}".format(data))
if data:
value = self.__unpack_tlv_format(data.decode())
if value != -1:
- clog.info('mode: {0}, recv {1} bytes, Data: {2}'.format (value[0],len(data), value[2]))
if value[1] == 'FF':
self.btmcu_cmd_handler(value[0],value[2])
else:
- # self.__value = value
- # self.__queue.put('1')
self.btmcu_cmd_handler(value[0],value[2])
- clog.info("End else Thread")
else:
clog.error("data error!!")
except Exception as recverr:
- clog.error("recverr:{}\r\n".format(recverr))
if "110" in str(recverr):
self.__err = 1
- # if self.__wait_resp == 1:
- # self.__queue.put('0')
else:
utime.sleep(1)
- self.__sock = self.__socket_reinit()
-
-
-
- clog.info("End Socket Thread")
-
-
-
-
-# UDP_CMD_GET_CAT1VER = '0', // 获取 Cat1 版本号
-# UDP_CMD_DIAL_NUMB = '1', // 拨打电话
-# UDP_CMD_HUNGUP = '2', // 挂断电话
-# UDP_CMD_ANSWER = '3', // 接听电话
-# UDP_CMD_CAT1_OTA_UPDATE = '4', // 触发Cat1 OTA升级,mcu提供url
-# UDP_CMD_SEND_SMS = '5', // 发送SMS短信,mcu提供电话号及短信内容
-# UDP_CMD_GET_TIME = '6', // 获取Cat1 时间 ,YYYYMMDD HHmmss zone
-# UDP_CMD_GET_NETWORKSTAT = '7', //获取Cat1 信号信息,VOLTE信息,信号强度,SIM卡状态
-# 下文进行系统配置
-clog.info("Cat1Service start")
-
+ self.__sock = self.__socket_reinit()
cat1service = Cat1Service()
-#send_data_q = Queue(100)
-
-#voice call callback function
def voice_callback(args):
if args[0] == 10:
- clog.info('voicecall incoming call, PhoneNO: ', args[6])
if eventMesh.publish("get_volte_switch") == 0: #关闭VOLTE功能
- clog.info('voicecall auto end:')
voiceCall.callEnd()
else:
- # gpioWakeBT.write(1)
cat1service.notifyIncomingcall(args[6])
elif args[0] == 11:
if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能
- clog.info('voicecall connected, PhoneNO: \n'.format(args[6]))
cat1service.notifyConnecteCall(args[6])
elif args[0] == 12:
- clog.info('voicecall disconnect')
if eventMesh.publish("get_volte_switch") == 1: #开启VOLTE功能
- clog.info('voicecall disconnected, PhoneNO: \n'.format(args[6]))
cat1service.notifyDisconnectCall(args[6])
- elif args[0] == 13:
- clog.info('voicecall is waiting, PhoneNO: \n'.format(args[6]))
- elif args[0] == 14:
- clog.info('voicecall dialing, PhoneNO: \n'.format(args[6]))
- elif args[0] == 15:
- clog.info('voicecall alerting, PhoneNO: \n'.format(args[6]))
- elif args[0] == 16:
- clog.info('voicecall holding, PhoneNO: \n'.format(args[6]))
- else:
- clog.info('voice_callback , args[0]: \n'.format(args[6]))
-
-#电话消息反馈
voiceCall.setCallback(voice_callback)
-
-
def checknet_cb(arg):
- clog.info("start checktime!!")
- # if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
- # if eventMesh.publish("get_dmp_change_mode") == 1:
- # telecomDmpCb.telecom_dmp_power_on_count()
-
_thread.start_new_thread(cat1service.wait_network_ready, ())
- # time=utime.localtime()
- # zone=utime.getTimeZone()
- #(2024, 3, 2, 18, 31, 32, 5, 62),8
- # cat1service.timesync("{0},{1}".format(time,zone))
-# _thread.start_new_thread(cat1service.wait_network_ready, ())
timer = osTimer()
-# checknet_cb(())
timer.start(30000,1,checknet_cb)
def bootupmsg_cb(arg):
cat1service.bootup_msg_to_bt()
-
delaybootupmsg_timer = osTimer()
delaybootupmsg_timer.start(1000,0,bootupmsg_cb)
-# def checkpin_cb(arg):
-# clog.info("recvDataPin={}".format(recvDataPin.read()))
-
-# timerCheckRevPin = osTimer()
-# timerCheckRevPin.start(1000,1,checkpin_cb)
-
-
-
-
-
-
-# while True:
-# utime.sleep(5)
-
-
-# uping.ping("172.16.1.5")
- # 获取网卡当前工作状态
-
-# gpioWakeBT.write(1)
-# utime.sleep(1)
-
-# timesync = net.nitzTime()
-# cat1service.timesync(timesync)
-
-
-#url = "http://zzhc.vnet.cn:9998/"
import usocket
import log
import utime
-import audio
from machine import UART
import _thread
from queue import Queue
from machine import Pin
from machine import ExtInt
-import dataCall
-import voiceCall
-import net
-import uping
-import example
import osTimer
-import sim
-import modem
import utime
-import checkNet
-import atcmd
-import fota
-import request
import ql_fs
-import pm
-import sms
import binascii
import ujson
import uos
-import slip
log.basicConfig(level=log.INFO)
clog = log.getLogger("cat1")
-
USR_FILE_PATH = "/usr" #
-BAK_FILE_PATH = "{}/TmpPyFile".format(USR_FILE_PATH) #文件传输的临时文件夹目录路径
+BAK_FILE_PATH = "{}/TmpPyFile".format(USR_FILE_PATH)
BAK_FILE_TMP = "_bak"
-
CAT1_SERVICE_HEAD = "FE"
CAT1_FILE_DATA_HEAD = "FF"
-
-
CAT1_REPLAY_STATE="00"
CAT1_CREAT_DIR_FAILE= "01"
CAT1_CREAT_DIR_OK= "02"
CAT1_REPLAY_OTA_FALIE = "0D"
CAT1_REPLAY_FILE_SIZE_OK = "0E"
CAT1_REPLAY_FILE_SIZE_ERR = "0F"
-CAT1_REPLAY_OTA_END_FAILE = "10" #升级完之后 CAT1回复升级失败
+CAT1_REPLAY_OTA_END_FAILE = "10"
+CAT1_NEED_UPDATE_OTA = "11"
+CAT1_TCP_STOP_OTA = 0
+CAT1_TCP_START_OTA = 1
+CAT1_TCP_START_SEND_SINGLE_FILE_INFO= 2
+CAT1_TCP_START_SEND_FILE_DATA= 3
+CAT1_TCP_START_OTA_FAILE = 4
+CAT1_TCP_START_OTA_SUCC = 5
+CAT1_TCP_START_SEND_ALLFILE_FINESH = 6
+CAT1_TCP_SEND_SINGLE_FINESH = 7
+CAT1_TCP_START_ERROR_INFO = 255
-CAT1_NEED_UPDATE_OTA = "11" #提示用户强制升级
-
-CAT1_TCP_STOP_OTA = 0 #结束OTA升级
-CAT1_TCP_START_OTA = 1 #ble 开始发送OTA标识 -》 CAT1
-CAT1_TCP_START_SEND_SINGLE_FILE_INFO= 2 #//ble 开始发送单个文件信息 -> CAT1 创建单个文件名
-CAT1_TCP_START_SEND_FILE_DATA= 3 #//BLE开始发送文件数据额 ----》CAT1 接收文件数据写文件
-CAT1_TCP_START_OTA_FAILE = 4 #BLE 发送OTA失败 取消文件传输
-CAT1_TCP_START_OTA_SUCC = 5 #//BLE 发送OTA成功标识
-CAT1_TCP_START_SEND_ALLFILE_FINESH = 6 #/所有PY文件传输完成
-CAT1_TCP_SEND_SINGLE_FINESH = 7 #//单个文件传输完成
-CAT1_TCP_START_ERROR_INFO = 255 #/发送错误信息结束进程
-
-# 创建gpio对象
gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1)
-# 设置输入输出模式
gpioWakeBT.set_dir(Pin.OUT)
-
-# 设置引脚电平
gpioWakeBT.write(0)
-FILE_TRANSFER_TIMEOUT=60 #超时时间 60s没有收到BLE的发送数据就结束了
+FILE_TRANSFER_TIMEOUT=60
class TcpServiceInit:
- AP = 0 # SLIP_INNER
- STA = 1 # SLIP_OUTER
+ AP = 0
+ STA = 1
def __init__(self, uart=UART.UART4, mode=AP):
self.__uart = uart
self.sock = None
self.bakFlag = "0"
self.conn= None
- # slip.destroy()
- # ret = slip.construct(self.__uart,self.__mode, 0)
- # if ret != 0:
- # clog.info('slip netif construct fail')
- # return None
-
self.__sock_file = None
self.__sock_file = self.__socket_file_init()
self.__thread_file = _thread.start_new_thread(self.__Socket_File_Thread, ())
self.conn_thread=_thread.start_new_thread(self._client_conn_proc, ())
- clog.info("ftp_Service :{}\r\n".format(self.__sock_file))
- # 封装tlv数据包
+
def __pack_tlv_format(self, head, content):
head1 = head
content1 = content
if len(content1) == 0 or len(content1) > 9999 or len(head1) != 2:
- clog.info('illegal pack tlv content file')
return -1
len_str ='%04d' % len(content1)
tlv_pack = CAT1_SERVICE_HEAD+head1+len_str+content1
return tlv_pack
- # 解码tlv数据包
+
def __unpack_tlv_format(self, msg):
- clog.info('__unpack_tlv_format file {}\r\n'.format(msg))
- msg_tmp = str(msg)[2:]#这是去除head FE
+ msg_tmp = str(msg)[2:]
tag = msg_tmp[0:2]
length = msg_tmp[2:6]
value = msg_tmp[6:]
len_str ='%04d' % len(value)
if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != msg_tmp[2:6]:
- clog.info('__unpack_tlv_format err file')
return -1
- # clog.info('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value))
unpack = (tag,length,value)
return unpack
- def __socket_init(self):
-
- # 创建一个socket实例
- self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
- self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
- return self.sock
- def __socket_file_init(self): #文件传输Socket
- # self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT)
+ def __socket_file_init(self):
self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP_SER)
self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
- # 绑定IP
bind_addr = ('172.16.1.2', 5001)
self.sock.bind(bind_addr)
- # self.sock.settimeout(10)
self.sock.listen(10)
-
return self.sock
- def __socket_file_reinit(self):
- clog.info("self.__sock_file reinit:{}\r\n".format(self.__sock_file))
- if self.__sock_file != None:
- self.sock.close()
- return self.__socket_file_init()
-
- def __Socket_UDP_file_noreply(self, head, content):
- head1 = head
- content1 = content
- gpioWakeBT.write(1)
- utime.sleep_ms(2)
- gpioWakeBT.write(0)
- utime.sleep_ms(20)
- # 消息处理
- msg = self.__pack_tlv_format(head1,content1)
- if msg == -1: #无效数据
- return 0
- # 向服务端发送消息
- server_addr = ('172.16.1.5',1001) #服务端口也需要更改
-
- clog.info("__Socket_TCP_file_noreply send msg {}".format(msg))
- try:
- data_size = self.__sock_file.sendto(msg,server_addr)
- clog.info("self.__sock_file data_size {}".format(data_size))
- except Exception as e:
- clog.info("self.__sock_file error {}".format(e))
- return 0
def __Socket_TCP_file_noreply(self, head, content):
head1 = head
content1 = content
utime.sleep_ms(2)
gpioWakeBT.write(0)
utime.sleep_ms(20)
- # 消息处理
msg = self.__pack_tlv_format(head1,content1)
- if msg == -1: #无效数据
+ if msg == -1:
return 0
- # 向服务端发送消息
- # server_addr = ('172.16.1.5',1001) #服务端口也需要更改
-
- clog.info("__Socket_TCP_file_noreply send msg {}".format(msg))
try:
- data_size = self.conn.send(msg)
- clog.info("self.__sock_file data_size {}".format(data_size))
+ self.conn.send(msg)
except Exception as e:
clog.info("self.__sock_file error {}".format(e))
-
return 0
- # py文件传输
- # //py文件传输
- # // {"Code":1} 开始OTA
- # // {"Code":2,"fileName":"cat1Service.py","fileSize":123435} fileCode: 文件ID fileName:文件名称 fileSize:文件大小
- # // {"Code":3,"head+datalen+data+CRC":"数据"} // Code: 2开始发送文件数据
- # // {"Code":4} BLE 主动发送OTA失败
- # // {"Code":5} BLE 主动发送OTA成功
- # // {"Code":6} BLE 所有PY文件传输完成
- # // {"Code":7} BLE 单个文件传输完成
-
+
def _client_conn_proc(self):
- clog.error('[_client_conn_proc] _client_conn_proc')
-
while True:
if self.conn==None:
utime.sleep_ms(20)
continue
try:
- # Receive data sent by the client
-
data = self.conn.recv(1024)
- clog.info('[server] [client addr: %s] recv data:', data)
if not data:
clog.info("__Socket_File_Thread data null:\r\n")
else:
self.src_data(data.decode('uft-8'))
-
- # Send data back to the client
- # conn.send(data)
except:
- # Exception occurred and connection closed
- clog.error('[server] disconnected')
self.conn.close()
- # self.__sock_file = self.__socket_file_reinit()
break
-
-
+
def __Socket_File_Thread(self):
-
- # clog.info('[server] accept a client: %s, %s' % (cli_ip_addr, cli_port))
-
while True:
try :
- clog.info('[serveice] start accept a client' )
cli_conn, cli_ip_addr, cli_port = self.__sock_file.accept()
self.conn=cli_conn
clog.info('[serveice] accept a client: %s, %s' % (cli_ip_addr, cli_port))
except :
- clog.error('__Socket_File_Thread' )
utime.sleep_ms(20)
- # Create a new thread for each client connection for concurrent processing
-
- # clog.info("End __Socket_File_Thread Thread")
def cat1FileTimerCb(self,*argc):
clog.info("timer test\r\n")
self.deleteTmpFile()
self.deleteUsrTmpFile()
self.__Socket_TCP_file_noreply(CAT1_OTA_TIMEOUT_BLE_NO_REPLAY,"ota error") #结束文件接收不完整的
- self.Cat1FileTransTimer.stop() #//关闭定时器
+ self.Cat1FileTransTimer.stop()
pass
def crc_cal(self,msg):
bytes_data = msg.encode('utf-8')
hex_data = binascii.hexlify(bytes_data)
hex_data = hex_data.decode()
- # clog.info("hex_data:{}\r\n".format(hex_data))
data = hex_data
crcValue = 0
j = 0
i = 0
json_state = 0
crcbuf = 0
- # clog.info("len(data) :{}\r\n".format(len(data)))
data_len = len(str(data))
try:
if data_len % 2 != 0:
return [json_state,crcbuf]
except Exception as e:
json_state = 0
- clog.info("不合法的的十六进制数据!!\r\n")
-
for i in range(data_len):
if j >= data_len:
break
try:
decimal_number = int(str(data[j:j+2]), 16)
-
crcValue=crcValue+decimal_number
crcValue = crcValue&0xff
except Exception as e:
- clog.info("不合法的的十六进制数据!!\r\n")
+ clog.info("crc_cal")
j+=2
-
crcbuf = crcValue%256
crcbuf = 256-crcbuf
crcbuf = crcbuf%256
-
- # clog.info("crcbuf:{}\r\n".format(crcbuf))
return [json_state,"%02x"%(crcbuf)]
- #删除临时创建的文件夹
def deleteTmpFile(self):
tmp_dir = ql_fs.path_exists(BAK_FILE_PATH)
if tmp_dir == True:
ql_fs.rmdirs(BAK_FILE_PATH)
-
- #删除usr临时创建的文件夹
+
def deleteUsrTmpFile(self):
- return
- # tmp_dir = ql_fs.path_exists("/usr/UsrTmpPyFile")
- # if tmp_dir == True:
- # ql_fs.rmdirs("/usr/UsrTmpPyFile")
+ return
def src_data(self,data):
- mk_dir_state = 0
- clog.info("data!!!!!{}\r\n".format(len(data)))
if self.updateTimerFlag == 0:
self.updateTimerFlag = 1
self.updateTimer.stop()
json_state = 1
except Exception as e:
json_state = 0
- if json_state == 0: #不是json 字典的格式 {} 就是命令
- value = self.__unpack_tlv_format(data) #解析数据 FE
+ if json_state == 0:
+ value = self.__unpack_tlv_format(data)
self.cmd_data(value[0],value[2])
return
else:
self.file_data(msg)
pass
- def cmd_data(self,cmd,parm): #(self,cmd,parm):
+ def cmd_data(self,cmd,parm):
if cmd == "01":
self.bakFlag = str(parm)
-
pass
def file_data(self,msg):
- # clog.info("msg type msg {} {}\r\n".format(msg,type(data)))
if "Code" in msg:
-
Code = int(msg["Code"])
- clog.info("Code {} self.Cat1FileState:{}\r\n".format(Code,self.Cat1FileState))
- if Code == CAT1_TCP_STOP_OTA: #OTA失败
+ if Code == CAT1_TCP_STOP_OTA:
self.allPyRecvFlag = 0
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
self.deleteTmpFile()
self.deleteUsrTmpFile()
pass
- elif Code == CAT1_TCP_START_OTA: #BLE 开始OTA cat1创建临时文件夹记录传输的文件数据 文件名
+ elif Code == CAT1_TCP_START_OTA:
self.ota_state =0
self.ota_bstate =0
self.allPyRecvFlag = 0
self.fileNameList = []
self.fileSizeList = []
- clog.info("CAT1_TCP_START_OTA {} \r\n".format(CAT1_TCP_START_OTA))
self.allPyRecvFlag = 0
self.Cat1FileState = 0
self.deleteUsrTmpFile()
try:
self.deleteTmpFile()
except Exception as e:
- clog.info("移除失败!!!!\r\n")
+ clog.info("移除失败\r\n")
check_dir = ql_fs.path_exists(BAK_FILE_PATH)
- if check_dir == False: #文件夹不存在 创建目录文件夹
+ if check_dir == False:
try:
ql_fs.mkdirs(BAK_FILE_PATH)
mk_dir_state = 1
- clog.info("创建临时文件 创建成功!!!!\r\n")
except Exception as e:
mk_dir_state = 0
- clog.info("创建临时文件失败没有内存!!!!\r\n")
- else: #已经存在目录了
+ else:
mk_dir_state = 1
- clog.info("创建成功!!!!{}\r\n".format(mk_dir_state))
if mk_dir_state == 0:
self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat dir error!")
else:
self.Cat1FileState = 1
self.fileNameList = []
self.fileSizeList = []
- self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
+ self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT
self.Cat1FileTransTimer.stop()
self.Cat1FileTransTimer.start(1000,1,self.cat1FileTimerCb)
self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_OK,"creat dir success!")
-
- elif Code == CAT1_TCP_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1: #包含文件名 文件大小
- clog.info("CAT1_TCP_START_SEND_SINGLE_FILE_INFO {} \r\n".format(CAT1_TCP_START_SEND_SINGLE_FILE_INFO))
- self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间60s
- # {"Code":1,"fileName":"testpy.py","fileSize":1040}
+ elif Code == CAT1_TCP_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1:
+ self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT
self.fileNameTmp = str(msg["fileName"])
self.fileSize = msg["fileSize"]
self.fileNameList = msg["fileNameList"]
- # self.fileSizeList.append({"fileName":self.fileNameTmp,"fileSize":int(self.fileSize)})
path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)
- clog.info("self.fileNameTmp {} self.fileSize:{} self.fileNameList:{} self.fileSizeList:{}\r\n".format(self.fileNameTmp,self.fileSize,self.fileNameList,self.fileSizeList))
check_touch = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp))
if check_touch == True:
try:
try:
with open(path,"w+") as fd:
fd.write("")
- fd.close() #关闭文件流
+ fd.close()
self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"1creat file or dir success!")
except Exception as e:
- clog.info("创建文件失败\r\n")
self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"1creat file or dir err!")
else:
try:
- clog.info("self.fileNameTmp 111111{}\r\n".format(self.fileNameTmp))
with open(path,"w+") as fd:
fd.write("")
- fd.close() #关闭文件流
+ fd.close()
self.crc_err = 0
- clog.info("self.fileNameTmp {}\r\n".format(self.fileNameTmp))
+
self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_SUCC,"2creat file or dir success!")
except Exception as e:
self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"2creat file or dir err!")
- clog.info("创建文件失败\r\n")
+
- elif Code == CAT1_TCP_START_SEND_FILE_DATA and self.Cat1FileState == 1: #文件数据
- self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
- clog.info("CAT1_TCP_START_SEND_FILE_DATA {} self.fileNameTmp:{}\r\n".format(CAT1_TCP_START_SEND_FILE_DATA,self.fileNameTmp))
- # {"Code":2,"data":"89ggjdggsjgdj"}
- if len(self.fileNameTmp) == 0: #文件名不能为空
+ elif Code == CAT1_TCP_START_SEND_FILE_DATA and self.Cat1FileState == 1:
+ self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT
+ if len(self.fileNameTmp) == 0:
return
data = msg["data"]
if len(data) == 0:
return
- clog.info(" (data):{}\r\n".format(len(data)))
tmpdata = str(data)
- head = tmpdata[0:2] #FE
- if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8: #必须大于8 FF+012C+DATA+crc(一个字节89)
+ head = tmpdata[0:2]
+ if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8:
clog.info("head {}\r\n".format(head))
self.__Socket_TCP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!")
return
- datalen = str(tmpdata[2:6]) #012c
- datalen = int("0x" + datalen, 16) #转换成十进制数
- data_buf = tmpdata[6:] # 数据
- data_buf = data_buf[:-2] #最后两个往前的数据
- crc = tmpdata[-2:] # 最后两个字符是 crc 一个字节
- clog.info("crc ===!111111:{} {} len:{} {}\r\n".format(crc,type(crc),datalen,len(str(data_buf))))
- if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen: #数据为空
+ datalen = str(tmpdata[2:6])
+ datalen = int("0x" + datalen, 16)
+ data_buf = tmpdata[6:]
+ data_buf = data_buf[:-2]
+ crc = tmpdata[-2:]
+ if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen:
self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"crc error or data null!")
return
- # crclist=self.crc_cal(data_buf)
- # newcrc = crclist[1]
- # news = crclist[0]
- # if len(str(crc)) == 0:
- # self.__Socket_TCP_file_noreply(CAT1_CRC_ERROR,"crc error!")
- # return
- # decnumCrcCal = int("0x" + str(newcrc), 16) #转换成十进制数
- # decnumCrc = int("0x" + str(crc), 16) #转换成十进制数
- # clog.info("crc:{} newcrc:{}\r\n".format(crc,newcrc,decnumCrc,decnumCrcCal))
- # if decnumCrcCal != decnumCrc and news == 0:
- # clog.info("newcrc is not === crc crc校验出错不一致\r\n")
- # self.__Socket_TCP_file_noreply(CAT1_CRC_ERROR,"crc error!")
- # return
data = str(data_buf)
path = "{}/{}".format(BAK_FILE_PATH,str(self.fileNameTmp))
- clog.info("py path:{} self.fileNameTmp:{}\r\n".format(path,self.fileNameTmp))
try:
with open(path,"a") as fd:
fd.write(data)
- fd.close() #关闭文件流
+ fd.close()
self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_SUCC,"write file success!")
- clog.info("写文件成功!!!!!\r\n")
+
except Exception as e:
self.__Socket_TCP_file_noreply(CAT1_WRITE_FILE_ERROR,"write file error!")
- clog.info("写文件失败没有内存!!!!!{}:\r\n".format(e))
-
- elif Code == CAT1_TCP_START_OTA_FAILE and self.Cat1FileState == 1: #取消文件传输 OTA失败 移除目录文件
- clog.info("CAT1_TCP_START_OTA_FAILE {} \r\n".format(CAT1_TCP_START_OTA_FAILE))
+
+ elif Code == CAT1_TCP_START_OTA_FAILE and self.Cat1FileState == 1:
self.allPyRecvFlag = 0
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"OTA FAILE")
self.Cat1FileState = 0
self.deleteTmpFile()
self.deleteUsrTmpFile()
pass
- elif Code == CAT1_TCP_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1: #全部文件传输完成
+ elif Code == CAT1_TCP_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1:
if self.bakFlag == "0":
- clog.info("self.bakFlag auto:\r\n")
if self.allPyRecvFlag == 1:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
else:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- clog.info("重启 auto:\r\n")
self.Cat1OtaTimeOut.stop()
self.Cat1TimeCount = 0
self.ota_state = 1
- self.allPyRecvFlag = 1 #所有的py文件接收完成
+ self.allPyRecvFlag = 1
self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut)
return
- clog.info("BAK_FILE_FUN!!!!!!\r\n")
tmp_dir = ql_fs.path_exists(BAK_FILE_PATH)
if tmp_dir == True:
filenamesList = uos.listdir(BAK_FILE_PATH)
list1 = sorted(filenamesList)
list2 = sorted(self.fileNameList)
- clog.info("filenamesList:{} self.fileNameList:{} {}{}\r\n".format(filenamesList,self.fileNameList,type(filenamesList),type(self.fileNameList)))
- if list1 != list2: #传输的文件列表和BLE不一致说明有文件没有传输完成不再重启CAT1
+ if list1 != list2:
self.deleteTmpFile()
self.Cat1FileState = 0
- clog.info("self.Cat1PyFile444!!!:{}\r\n".format(self.Cat1FileState))
self.Cat1FileTransTimer.stop()
self.deleteUsrTmpFile()
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
return
-
try:
copy_state = 1
compare_flag = 1
copy_flag = 0
filenamesList = uos.listdir(BAK_FILE_PATH)
- for tmp in filenamesList: #将传输的文件 copy到usr目录下
- clog.info("filenamesList for :{}\r\n".format(filenamesList))
- dst_path = "{}/{}".format(USR_FILE_PATH,tmp) #目标目录文件
- # if ql_fs.path_exists(dst_path) == False:
- # try:
- # copy_flag = 1
- # ql_fs.touch(dst_path,"")
- # except Exception as e:
- # clog.info("创建文件失败!!!!!\r\n")
-
- # if copy_flag == 0:
- # clog.info("创建文件失败!!!!!copy_flag\r\n")
- # copy_state = 0
- # break
- src_path = "{}/{}".format(BAK_FILE_PATH,tmp) #源目录文件
+ for tmp in filenamesList:
+ dst_path = "{}/{}".format(USR_FILE_PATH,tmp)
+ src_path = "{}/{}".format(BAK_FILE_PATH,tmp)
ret = False
file_size = 0
-
try:
ret = ql_fs.file_copy(dst_path,src_path)
- clog.info("copy ret!!!!!:{}\r\n".format(ret))
+
if ret == True:
dstfile_size = ql_fs.path_getsize(dst_path)
srcfile_size = ql_fs.path_getsize(src_path)
-
- clog.info("copy dstfile_size:{} srcfile_size:{}\r\n".format(dstfile_size,srcfile_size))
if dstfile_size != srcfile_size:
compare_flag = 0
break
- else: #拷贝完之后比较大小一致移除文件
+ else:
try:
compare_flag = 1
uos.remove(src_path)
filenamesList = uos.listdir(BAK_FILE_PATH)
- clog.info("remove filenamesList :{}\r\n".format(filenamesList))
except Exception as e:
clog.info("copy file \r\n")
else:
compare_flag = 0
break
-
except Exception as e:
clog.info("copy file \r\n")
-
- if copy_state == 0 or compare_flag == 0 : #比较失败 或者copy失败没有内存了
+ if copy_state == 0 or compare_flag == 0 :
self.deleteUsrTmpFile()
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22")
return
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- clog.info("重启 auto:\r\n")
self.Cat1OtaTimeOut.stop()
self.Cat1TimeCount = 0
self.ota_state = 1
- self.allPyRecvFlag = 1 #所有的py文件接收完成
+ self.allPyRecvFlag = 1
self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut)
except Exception as e:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33")
self.deleteUsrTmpFile()
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
else:
if self.ota_state == 1:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
pass
else:
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
self.deleteUsrTmpFile()
- clog.info("cat1 ota\r\n")
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
-
elif Code == CAT1_TCP_START_OTA_SUCC and self.Cat1FileState == 1:
if self.bakFlag == "0":
self.deleteUsrTmpFile()
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- if self.allPyRecvFlag == 1: #所有的py文件接收完成
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ if self.allPyRecvFlag == 1:
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
else:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
return
-
- if self.allPyRecvFlag == 0: #没有接收完成就发送OTA成功的标识
+ if self.allPyRecvFlag == 0:
self.deleteTmpFile()
self.deleteUsrTmpFile()
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
filenamesList = uos.listdir(BAK_FILE_PATH)
list1 = sorted(filenamesList)
list2 = sorted(self.fileNameList)
- clog.info("filenamesList:{} self.fileNameList:{} {}{}\r\n".format(filenamesList,self.fileNameList,type(filenamesList),type(self.fileNameList)))
- if list1 != list2: #传输的文件列表和BLE不一致说明有文件没有传输完成不再重启CAT1
+ if list1 != list2:
self.deleteTmpFile()
self.Cat1FileState = 0
- clog.info("self.Cat1PyFile444!!!:{}\r\n".format(self.Cat1FileState))
self.Cat1FileTransTimer.stop()
self.deleteUsrTmpFile()
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
try:
copy_state = 1
compare_flag = 1
- copy_flag = 0
filenamesList = uos.listdir(BAK_FILE_PATH)
- for tmp in filenamesList: #将传输的文件 copy到usr目录下
- clog.info("filenamesList for :{}\r\n".format(filenamesList))
- dst_path = "{}/{}".format(USR_FILE_PATH,tmp) #目标目录文件
- # if ql_fs.path_exists(dst_path) == False: #usr下面没有就创建文件写空的数据
- # try:
- # ret = ql_fs.touch(dst_path,"")
- # clog.info("创建文件成功!!!!!:ret {}\r\n".format(ret))
- # if ret == 0:
- # copy_flag = 1
- # except Exception as e:
- # clog.info("创建文件失败!!!!!\r\n")
-
- # if copy_flag == 0:
- # clog.info("创建文件失败!!!!!copy_flag\r\n")
- # copy_state = 0
- # break
- src_path = "{}/{}".format(BAK_FILE_PATH,tmp) #源目录文件
+ for tmp in filenamesList:
+ dst_path = "{}/{}".format(USR_FILE_PATH,tmp)
+ src_path = "{}/{}".format(BAK_FILE_PATH,tmp)
ret = False
file_size = 0
-
try:
ret = ql_fs.file_copy(dst_path,src_path)
- clog.info("copy ret!!!!!:{}\r\n".format(ret))
if ret == True:
dstfile_size = ql_fs.path_getsize(dst_path)
srcfile_size = ql_fs.path_getsize(src_path)
-
- clog.info("copy dstfile_size:{} srcfile_size:{}\r\n".format(dstfile_size,srcfile_size))
if dstfile_size != srcfile_size:
compare_flag = 0
break
- else: #拷贝完之后比较大小一致移除文件
+ else:
try:
compare_flag = 1
uos.remove(src_path)
filenamesList = uos.listdir(BAK_FILE_PATH)
- clog.info("remove filenamesList :{}\r\n".format(filenamesList))
except Exception as e:
- clog.info("copy file \r\n")
+ clog.info("file\r\n")
else:
compare_flag = 0
break
except Exception as e:
- clog.info("copy file \r\n")
-
-
- if copy_state == 0 or compare_flag == 0 : #比较失败 或者copy失败没有内存了
+ clog.info("file\r\n")
+ if copy_state == 0 or compare_flag == 0 :
self.deleteUsrTmpFile()
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22")
return
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
- clog.info("重启 auto:\r\n")
self.Cat1OtaTimeOut.stop()
self.Cat1TimeCount = 0
self.ota_bstate = 1
self.conn.close()
self.Cat1OtaTimeOut.start(10000,0,self.otaTimeOut)
except Exception as e:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33")
self.deleteUsrTmpFile()
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
else:
if self.ota_bstate == 1:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!")
pass
else:
self.deleteTmpFile()
self.Cat1FileState = 0
self.Cat1FileTransTimer.stop()
self.deleteUsrTmpFile()
- clog.info("cat1 ota\r\n")
self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
- elif Code == CAT1_TCP_SEND_SINGLE_FINESH and self.Cat1FileState == 1: #单个文件传输完成
- clog.info("CAT1_TCP_SEND_SINGLE_FINESH {} self.fileNameTmp:{}\r\n".format(CAT1_TCP_SEND_SINGLE_FINESH,self.fileNameTmp))
- self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
+ elif Code == CAT1_TCP_SEND_SINGLE_FINESH and self.Cat1FileState == 1:
+ self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT
tmp_dir = ql_fs.path_exists(BAK_FILE_PATH)
if tmp_dir == True:
tmp_file = ql_fs.path_exists("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp))
- if tmp_file == True: #文件存在
+ if tmp_file == True:
file_size = ql_fs.path_getsize("{}/{}".format(BAK_FILE_PATH,self.fileNameTmp))
- clog.info("file size :file_size:{} self.fileSize:{}\r\n".format(file_size,self.fileSize))
- if self.fileSize != file_size: #文件大小不一致 传输出错
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") #结束文件接收不完整的
-
- else: #传完一个文件copy到usr下面
+ if self.fileSize != file_size:
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err")
+ else:
if self.bakFlag == "0":
-
- dst_path = "{}/{}".format(USR_FILE_PATH,self.fileNameTmp) #目标文件
- src_path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp) #源文件目录 /usr/TmpFile/
+ dst_path = "{}/{}".format(USR_FILE_PATH,self.fileNameTmp)
+ src_path = "{}/{}".format(BAK_FILE_PATH,self.fileNameTmp)
ret = False
try:
- clog.info("touch single file!!!!!dtpath111:{}\r\n".format(dst_path,src_path))
ret = ql_fs.file_copy(dst_path,src_path)
if ret == True:
dstfile_size = ql_fs.path_getsize(dst_path)
srcfile_size = ql_fs.path_getsize(src_path)
- if dstfile_size != srcfile_size: #copy 之后比较文件大小一不一致
-
- src_file = ql_fs.path_exists(src_path) #删除文件
+ if dstfile_size != srcfile_size:
+ src_file = ql_fs.path_exists(src_path)
if src_file == True:
try:
- uos.remove(src_path) #移除文件
+ uos.remove(src_path)
except Exception as e:
clog.info("copy 文件异常出错 yichu!{}:\r\n".format(e))
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") #结束文件接收完整的
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err")
return
else:
- src_file = ql_fs.path_exists(src_path) #删除文件
+ src_file = ql_fs.path_exists(src_path)
if src_file == True:
try:
- uos.remove(src_path) #移除文件
+ uos.remove(src_path)
except Exception as e:
clog.info("copy 文件异常出错!!!!!!!!!!{}:\r\n".format(e))
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok") #文件大小不一致
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok")
return
else:
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") #copy失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err")
except Exception as e:
- clog.info("copy 文件异常出错!!!!!!!!!!{}:\r\n".format(e))
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err") #copy失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file copy err")
else:
- clog.info("self.bakFlag 1:\r\n")
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file copy ok") #copy失败
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file copy ok")
else:
self.__Socket_TCP_file_noreply(CAT1_CREAT_FILE_ERROR,"creat file or dir err!")
pass
else:
self.__Socket_TCP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat file or dir error!")
pass
-
-
else:
if self.Cat1FileState == 0:
if self.Cat1FileReplayBle == 1:
return
self.Cat1FileReplayBle = 1
- self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!") #结束文件接收不完整的
- clog.info("错误信息!!!!!\r\n")
+ self.__Socket_TCP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!")
self.Cat1FileState == 0
- self.Cat1FileTransTimer.stop() #//关闭定时器
+ self.Cat1FileTransTimer.stop()
self.Cat1PyFileTimout = 0
self.fileNameList=[]
self.deleteTmpFile()
self.deleteUsrTmpFile()
-
def otaTimeOut(self,*argc):
-
-
clog.info("重启成功!!!!!!!!\r\n")
- # 上层直接重启即可
- # Power.powerRestart()
TcpService = TcpServiceInit()