Skip to content

Commit c71983f

Browse files
authored
sms示例代码首次提交 (#4)
* <feat> (sms):sms示例python代码 固件版本: N 是否需要文案翻译: 是 * <feat> (sms): sms示例代码 固件版本: N 是否需要文案翻译: 是 * <fix> (sms): 示例代码短信过长底层不支持 固件版本: N 是否需要文案翻译: 是 * <fix> (sms): sms.py示例代码修改,代码示例考虑不全面,在一些情况下容易出错。 固件版本: N 是否需要文案翻译: 否
1 parent e17f745 commit c71983f

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed

network-comm/sms/sms.py

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
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

Comments
 (0)