1+ # codeing=UTF-8
2+ import net
3+ import checkNet
4+ import sms as SMS
5+
6+ #本示例演示将分开到达设备的两条长两条短信合并为一条短信
7+ #本例演示要求短信索引值0和短信索引值1的短信同一条长短信的内容
8+
9+ class QuecSMS ():
10+
11+ def __init__ (self ):
12+ self .__enable_log = False
13+ self .sms_set_enable_log ()
14+ self .sms = SMS
15+ self .sms .setCallback (self .__SMS_Call_back )
16+ self .message = ""
17+
18+ def sms_deal_phone_number (self ,args ):
19+ data = enumerate (args )
20+ data_str1 = ""
21+ data_str2 = ""
22+ data_str3 = ""
23+ for index ,value in data :
24+ if index % 2 == 0 :
25+ data_str1 = data_str1 + value
26+ else :
27+ data_str2 = data_str2 + value
28+ for i in range (0 ,len (data_str1 )):
29+ data_str3 = data_str3 + data_str2 [i ]
30+ data_str3 = data_str3 + data_str1 [i ]
31+ return data_str3
32+
33+ def sms_display (self ):
34+ self .__log ("Get Message Loction : {}" .format (self .sms .getSaveLoc ()))
35+ sms .setSaveLoc ("ME" , "ME" , "ME" )
36+ self .__log ("Get ME Message Numbers : {}" .format (self .sms .getMsgNums ()))
37+ sms .setSaveLoc ("SM" , "SM" , "SM" )
38+ self .__log ("Get SM Message Numbers : {}" .format (self .sms .getMsgNums ()))
39+
40+ def sms_set_enable_log (self ,flag = True ):
41+ self .__enable_log = flag
42+
43+ def __log (self ,args ):
44+ if self .__enable_log :
45+ print ("QuecSMS_LOG: {}" .format (args ))
46+
47+
48+ def __SMS_Call_back (self ,args ):
49+ self .__log ("Get SIM Id : {}" .format (args [0 ]))
50+ self .__log ("Get Message index : {}" .format (args [1 ]))
51+ self .__log ("Get Message Storage : {}" .format (args [2 ]))
52+
53+ def sms_delete_user_data_head (self ):
54+
55+ self .message = self .message [:58 ]+ self .message [58 + 2 * 6 :]
56+
57+ def sms_replace_data_index (self ,index ,data ):
58+ self .message = self .message [:index ] + data + self .message [index + len (data ):]
59+
60+ def sms_append_sub_message_data (self ,data ):
61+ self .message = self .message + data
62+
63+ def sms_decode_pdu_message (self ):
64+ return self .sms .decodePdu (self .message ,self .sms .getPduLength (self .message ))
65+
66+ def sms_get_message_info (self ,index ):
67+ """
68+ :param index :短信索引值
69+ :tyoe index :整形
70+
71+ :return :元组类型
72+ 元组内容:
73+ (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len)
74+
75+ :message_ref :短信参考标识,同一个标识表明为同一条短信
76+ :message_total_num :此条长短信总条数
77+ :message_seq :此条短信在长短信中的序号
78+ :sub_message_data :词条短信的内容
79+ :pdu_tye :PDU类型,bit 6标记是否包含用户报文头,长短信需要
80+ :sub_message_len :此条短信内容长度
81+
82+ """
83+ message0 = self .sms .searchPduMsg (index )
84+ self .message = message0
85+ sca_num = int (message0 [0 :2 ],16 ) - 1
86+ data_len = 2
87+ addr_type = message0 [data_len :data_len + 1 * 2 ]
88+ data_len = data_len + 1 * 2
89+
90+ sca = message0 [data_len :data_len + sca_num * 2 ]
91+ # 电话号码高低位需要转换
92+ sca = self .sms_deal_phone_number (sca )
93+
94+ if sca_num % 2 == 1 :
95+ print ("Get SCA phone {}" .format (sca [:- 1 ]))
96+ else :
97+ print ("Get SCA phone {}" .format (sca ))
98+
99+ data_len = data_len + sca_num * 2
100+
101+ pdu_tye = int (message0 [data_len :data_len + 1 * 2 ],16 )
102+ data_len = data_len + 1 * 2
103+
104+ oa_num = int (message0 [data_len :data_len + 1 * 2 ],16 )
105+ data_len = data_len + 1 * 2
106+ oa_addr_type = message0 [data_len :data_len + 1 * 2 ]
107+ data_len = data_len + 1 * 2
108+
109+ if oa_num % 2 == 1 :
110+ oa_num_t = int ((oa_num + 1 )/ 2 )
111+ else :
112+ oa_num_t = int ((oa_num )/ 2 )
113+
114+ oa = message0 [data_len :data_len + oa_num_t * 2 ]
115+ # 电话号码高低位需要转换
116+ oa = self .sms_deal_phone_number (oa )
117+
118+ if oa_num % 2 == 1 :
119+ print ("Get OA phone {}" .format (oa [:- 1 ]))
120+ else :
121+ print ("get OA phone {}" .format (oa ))
122+
123+ data_len = data_len + oa_num_t * 2
124+ pid = message0 [data_len :data_len + 1 * 2 ]
125+
126+ data_len = data_len + 1 * 2
127+ dcs = message0 [data_len :data_len + 1 * 2 ]
128+ data_len = data_len + 1 * 2
129+ scts = message0 [data_len :data_len + 7 * 2 ]
130+ data_len = data_len + 7 * 2
131+ sub_message_len = int (message0 [data_len :data_len + 1 * 2 ],16 )
132+ data_len = data_len + 1 * 2
133+ sub_message_head = message0 [data_len :data_len + 6 * 2 ]
134+ data_len = data_len + 6 * 2
135+
136+ # 或短信用户数据
137+ sub_message_data = message0 [data_len :data_len + sub_message_len * 2 ]
138+
139+ #长短信
140+ if ((pdu_tye & 0x40 ) >> 6 ) == 1 :
141+ #长短信,处理长短信用户报文头
142+ message_ref = int (sub_message_head [6 :8 ],16 )
143+ message_total_num = int (sub_message_head [8 :10 ],16 )
144+ message_seq = int (sub_message_head [10 :12 ],16 )
145+ return message_ref ,message_total_num ,message_seq ,pdu_tye ,sub_message_len ,sub_message_data
146+ else :
147+ # 短短信
148+ return 0 ,1 ,1 ,pdu_tye ,sub_message_len ,sub_message_data
149+
150+ if __name__ == '__main__' :
151+ sms0 = QuecSMS ()
152+ sms1 = QuecSMS ()
153+
154+ # 读取短信索引值0的短信内容
155+ message0 = list (sms0 .sms_get_message_info (0 ))
156+
157+ # 读取短信索引值1的短信内容
158+ message1 = list (sms1 .sms_get_message_info (1 ))
159+ print ("Get Messge 0 {}" .format (message0 ))
160+ print ("Get Messge 1 {}" .format (message1 ))
161+ if message0 [0 ] != message1 [0 ]:
162+ print ("Message 0 and Message 1 are not the content data of the same long SMS!" )
163+ exit
164+ # 解码message0的PDU串
165+ message0_pdu = list (sms0 .sms_decode_pdu_message ())
166+ # 解码message1的PDU串
167+ message1_pdu = (sms1 .sms_decode_pdu_message ())
168+
169+ # 合并短信
170+ #判断messge 0 和 message 1的短信序列号那个考前
171+ if message0 [2 ] < message1 [2 ]:
172+ message_merge = message0_pdu [1 ]+ message1_pdu [1 ]
173+ else :
174+ message_merge = message1_pdu [1 ]+ message0_pdu [1 ]
175+ print ("Get Merger Message is {}" .format (message_merge ))
176+
0 commit comments