import request
import ql_fs
import pm
+import sms
from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE
# CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库功能 1开启 0关闭
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#防止两边不同步修改 用于包含头文件信息
from usr.telecom_dmp import telecomDmpCb
+def msg_cb(args):
+ index = args[1]
+ storage = args[2]
+ sms_data = sms.getSaveLoc()
+ 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
PROJECT_NAME = "Cat1SlipUDPService"
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)
+ 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("send_singal_data_toBle",self.send_singal_data_toBle)
+ eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data)
+ eventMesh.publish("delete_sms_event")
+
+ self.deletSmsTimer = osTimer()
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
+ sms_get = sms.getSaveLoc()
+ if(sms_get != -1):
+ sms_lacv = sms_get[0][0]
+ if sms_lacv != 'SM':#每次开机设置一下短信的存储位置
+ sms.setSaveLoc('SM', 'SM', 'SM')
return None
def __socket_init(self):
pass
def set_telecom_dmp_switch(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):
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):
+ eventMesh.publish_async("remove_all_sms_cb","",1*1024)
+ def remove_all_sms_cb(self, event, msg):
+ print("remove_all_sms_cb\r\n")
+ msg_nums = sms.getMsgNums()#短信数量
+ if msg_nums == -1:
+ msg_nums = 0
+ sms_data = sms.getSaveLoc()
+ sms_max = sms_data[0][2]#最大存储短信数量
+ if sms_max >= msg_nums and sms_max > 0:
+ sms.deleteMsg(1,4)#删除所有的sms信息
+
+ def send_singal_data_toBle(self,event,msg):
+ msg_nums = sms.getMsgNums()#短信数量
+ if msg_nums == -1:
+ msg_nums = 0
+ sms_data = sms.getSaveLoc()
+ sms_max = sms_data[0][2]#最大存储短信数量
+ print("recv:{}".format(int(msg)))
+ message=self.sms_get_message_info(int(msg))
+ 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)#内容长度
+ # message_ref :短信参考标识,同一个标识表明为同一条短信
+ # message_total_num :此条长短信总条数 大于1属于长短信
+ # message_seq :此条短信在长短信中的序号
+ # print("message:{} {}\r\n".format(message,message_pdu))
+ msg_total = "@message_ref:"+str(message_ref)+"@message_total_num:"+str(message_total_num)+"@message_seq:"+str(message_seq)+"@data:"+str(message[5])
+ self.reply_cmd('15',msg_total)
+
+ eventMesh.publish("delete_sms_single_data",int(msg))
+
+ def sms_deal_phone_number(self,args):
+ data=enumerate(args)
+ data_str1=""
+ data_str2=""
+ data_str3=""
+ for index,value in data:
+ if index % 2 == 0:
+ data_str1=data_str1+value
+ else:
+ data_str2=data_str2+value
+ for i in range(0,len(data_str1)):
+ data_str3=data_str3+data_str2[i]
+ 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
+
+ sca_num = int(message0[0:2],16) - 1
+ data_len = 2
+ addr_type= message0[data_len:data_len+1*2]
+ 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)
+ data_len = data_len+1*2
+
+ oa_num = int(message0[data_len:data_len+1*2],16)
+ data_len = data_len+1*2
+ oa_addr_type = message0[data_len:data_len+1*2]
+ data_len = data_len+1*2
+
+ if oa_num % 2 == 1:
+ oa_num_t = int((oa_num + 1)/2)
+ else:
+ 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
+ dcs = message0[data_len:data_len+1*2]
+ data_len = data_len+1*2
+ scts = message0[data_len:data_len+7*2]
+ data_len = data_len+7*2
+ sub_message_len = int(message0[data_len:data_len+1*2],16)
+ 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()#短信数量
+ if msg_nums == -1:
+ msg_nums = 0
+ sms_data = sms.getSaveLoc()
+ sms_max = sms_data[0][2]#最大存储短信数量
+ self.reply_cmd('15',"@sms_max:"+str(sms_max)+"@current_num:"+str(msg_nums))
+ pass
+
+ def get_all_sms_data(self,event,msg):
+ msg_total = ""
+ SMS_lis={}
+ SMS_lis_count = 0
+ sms_data = sms.getSaveLoc()
+ print(sms.getSaveLoc())
+ sms_max = sms_data[0][2]#最大存储短信数量
+ print(sms_max)
+ self.msg_nums = sms.getMsgNums()
+ if self.msg_nums_old != self.msg_nums:
+ self.send_data = []
+ self.msg_nums_old = self.msg_nums
+ if self.send_data == [] :
+ for i in range(self.msg_nums):
+ phonenum = ""
+ data =""
+ time = ""
+ data_len = 0
+ message=self.sms_get_message_info(self.msg_nums-i-1)
+ if message == -1:
+ break
+ data = message[5]
+ sms_data = []
+ code = message[0]#编码
+ num = message[1]#总共条数
+ curren_num = message[2]#当前第几条
+ data_len = message[4]
+ sms_data.append(code)#编码 编码相同是同一条短信的内容
+ sms_data.append(num)
+ sms_data.append(curren_num)
+ sms_data.append(data)
+ sms_data.append(data_len)
+ self.send_data.append(sms_data)
+ count = len(self.send_data)
+ for i in range(count):
+ text = self.send_data[i]
+ print("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()