CAT1增加SMS指令:添加python压缩文件
authorDXY <1731678236@qq.com>
Wed, 29 May 2024 01:59:33 +0000 (09:59 +0800)
committerDXY <1731678236@qq.com>
Wed, 29 May 2024 01:59:33 +0000 (09:59 +0800)
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405290958.zip [new file with mode: 0644]
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/telecom_dmp.py

index 6d2284d..f4870d6 100644 (file)
@@ -81,7 +81,7 @@ enum UDP_COMMAND_HEAD {
     UDP_MSG_GET_SIM_ICCID = 0x12,//获取SIM卡的ICCID
     UDP_MSG_SET_TELECON_DMP_SWITCH = 0x13,//通知cat1是否开启电信入库功能
     UDP_MSG_GET_TELECON_DMP_TIMESEC = 0x14,//获取本地保存的注册的时间戳
-    
+    UDP_MSG_RECV_CAT1_SMS_CONTENT = 0x15,//接收信息内容数据
 };
 
 
@@ -846,7 +846,6 @@ void get_regist_time_toCat1(void)//设置电信入库功能开关->CAT1
     }
 }
 
-
 static int udp_packet_parse(char *rx_buffer, int len)
 {
 
@@ -904,7 +903,6 @@ static int udp_packet_parse(char *rx_buffer, int len)
                         get_software_version_toCat1();
                         get_sim_iccid_toCat1();
                         get_regist_time_toCat1();
-                        
                     #endif
                 }
                 break;
@@ -923,6 +921,8 @@ static int udp_packet_parse(char *rx_buffer, int len)
                 #ifdef SUPPORT_TELECOM_DMP
                     save_sim_iccid_toBle(msg->buffer);
                 #endif
+                break;
+            case UDP_MSG_RECV_CAT1_SMS_CONTENT://接收单条短信内容
                 break;
                    default:
                            PRINT("error message: %s\n", rx_buffer);
index 065d2aa..c96335a 100644 (file)
@@ -49,11 +49,25 @@ import fota
 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"
@@ -223,7 +237,30 @@ class Cat1Service:
         
         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):
@@ -348,8 +385,207 @@ class Cat1Service:
         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()
diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405290958.zip b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/current_img/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA_202405290958.zip
new file mode 100644 (file)
index 0000000..419a473
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09316f7a15445c34d9697d16b7f652e36ae276be31e3c84e671ed4edf8735006
+size 11779184
index 9910737..075f895 100644 (file)
@@ -42,6 +42,7 @@ class telecomDmp:
         self.telecomTimer = osTimer()
         self.multimer_count = 0#多日重发机制周期Count
         self.multimer_init = 0
+        self.power_on_multiflag = 0
         self.timer_count = 0
         self.timerPowerNum = 0
         self.telecom_init_state = 0#初始化状态开机检查标识 
@@ -353,6 +354,12 @@ class telecomDmp:
                 num = eventMesh.publish("get_dmp_power_num") #开机计时 如果开机5分钟内没有一次网络正常的话 当前开机自注册不生效 等待下一次开机自注册触发 或者触发多日重发机制
                 num+=1
                 eventMesh.publish("set_dmp_power_num",num)#次数累计加一
+            else:
+                if self.power_on_multiflag == 1:
+                    return
+                self.power_on_multiflag = 1
+                self.multiple_day_resend()
+                pass
 
 telecomDmpCb = telecomDmp()