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