blob: 4fa400730784ce69902fa6fa7a420c14a5aa47cc [file] [log] [blame]
liubin281ac462023-07-19 14:22:54 +08001#include "lynq/lynq_sms_api.h"
2#include "mbtk_info_api.h"
3
4
5static mbtk_info_handle_t* info_handle = NULL;
6
7
8void lynq_sms_state_change_cb(const void* data, int data_len)
9{
10 LOGV("sms_state_change_cb()----------start\n");
11 uint8 *ptr = (uint8*)data;
12 printf("3sms_state_change_cb() : %s\n", ptr);
13
14 struct SMS_Struct s = PDUDecoding(ptr);
15 printf("服务中心地址: %s\n", s.SCA);
16 printf("发送方地址: %s\n", s.OA);
17 printf("服务中心时间戳: %s\n", s.SCTS);
18 printf("消息内容: %s\n", s.UD);
19 printf("数据编码方案: %s\n", DSC_to_msg(s.DCS));
20}
21
22
23int lynq_init_sms(int uToken)
24{
25 UNUSED(uToken);
26 if(info_handle == NULL)
27 {
28 info_handle = mbtk_info_handle_get();
29 if(info_handle)
30 {
31 printf("creat info_handle is success\n");
32 }
33 else{
34 printf("creat info_handle is fail\n");
35 return -1;
36 }
37 }
38
39 return 0;
40}
41
42int lynq_deinit_sms(void)
43{
44 if(info_handle)
45 {
46 return mbtk_info_handle_free(&info_handle);
47 }
48 else
49 {
50 return -1;
51 }
52}
53
54
55/*
56*AT+CMGS="10086", CMGS TEST // Send a SMS
57> CMGS TEST
58+CMGS: 17
59OK
60*/
61/*
62int charset: send sms mode
63 0:pdu, 1:text
64
65*/
66
67int lynq_send_sms(char *telephony_num, int state, char *msg)
68{
69 if(info_handle == NULL || msg == NULL || telephony_num == NULL)
70 {
71 return -1;
72 }
73
74 char cmgs[MSM_NUMBER_MAX] = {0};
75 char resp[RES_NUM_MIN] = {0};
76 int mode = 0;
77 int err = 0;
78 if(strlen(msg) > 512 || strlen(msg) == 0 || strlen(telephony_num) == 0)
79 {
80 printf("strlen(telephony_num):%d\n", strlen(telephony_num));
81 printf("strlen(msg):%d\n", strlen(msg));
82 return -1;
83 }
84
85 if(state) // text
86 {
87 mode = 1;
88 }
89
90 err = mbtk_sms_cmgf_set(info_handle, mode);
91 if(err) {
92 printf("cmgf set error : %d\n", err);
93 } else {
94 printf("cmgf set success\n");
95 }
96
97 sprintf(cmgs,"%s,%s",telephony_num, msg);
98 printf("cmgs:%s\n", cmgs);
99
100/* char *ptr = strstr(cmd, "cmgs,"); //CMGS="10086",hf
101 if(ptr != NULL)
102 {
103 ptr = strstr(cmd, ",");
104 ptr++;
105 memset(cmgs, 0, sizeof(cmgs));
106 memcpy(cmgs, ptr, strlen(ptr));
107 printf("1cmgs:%s, strlen(cmgs):%d\n", cmgs, strlen(cmgs));
108 }
109*/
110
111 memset(resp, 0, sizeof(resp));
112
113 err = mbtk_sms_cmgs_set(info_handle, cmgs, resp);
114 if(err) {
115 printf("Error : %d\n", err);
116 return -1;
117 } else {
118 printf("cmgs set success . resp:%s\n", resp);
119 }
120
121 return 0;
122}
123
124int lynq_wait_receive_new_sms(int *handle)
125{
126 if(info_handle == NULL)
127 {
128 return -1;
129 }
130
131 int ret = mbtk_sms_cnmi_set(info_handle);
132 if(ret)
133 {
134 printf("set cnmi fail\n");
135 return -1;
136 }
137
138 mbtk_sms_state_change_cb_reg(info_handle, lynq_sms_state_change_cb);
139 return 0;
140}
141
142/*
143 AT+CMGD=<index>[,<delflag>]
144
145 Deletes message based on index
146 node:
147 index is -1, delete all message
148 delflag set 4
149*/
150int lynq_delete_sms(int index)
151{
152 char cmgd[128] = {0};
153 int err = 0;
154
155 if(index == -1) //delete all
156 {
157 memcpy(cmgd, ",4", strlen(",4"));
158 }
159 else
160 {
161 sprintf(cmgd,"%d",index);
162 }
163
164 printf("cmgd:%s\n", cmgd);
165
166 err = mbtk_sms_cmgd_set(info_handle, cmgd);
167 if(err) {
168 printf("lynq_delete_sms Error : %d\n", err);
169 return -1;
170 } else {
171 printf("lynq_delete_sms set success\n");
172 }
173
174 return 0;
175}
176
177
178/*
179function: lynq_list_sms
180stat:0:pud, 1:text
181index: 0, list index;
182 > 0,
183
184*/
185int lynq_list_sms(int stat, int index, char *data)
186{
187 if(info_handle == NULL)
188 {
189 return -1;
190 }
191
192 char cmgs[MSM_NUMBER_MAX] = {0};
193 int mode = 0;
194 int err = 0;
195
196 if(stat) // text
197 {
198 mode = 1;
199 }
200
201 err = mbtk_sms_cmgf_set(info_handle, mode);
202 if(err) {
203 printf("cmgf set error : %d\n", err);
204 } else {
205 printf("cmgf set success\n");
206 }
207
208
209 char cmgl[128] = {0};
210 char resp[1024+1] ={0};
211 sprintf(cmgl,"%d,%s", index, data);
212/*
213 char *ptr = strstr(cmd, "cmgl,"); // AT+CMGL[=<stat>]
214 if(ptr != NULL)
215 {
216 ptr = strstr(cmd, ",");
217 ptr++;
218 memset(cmgl, 0, sizeof(cmgl));
219 memcpy(cmgl, ptr, strlen(ptr));
220 printf("0cmgl:%s\n", cmgl);
221 }
222*/
223 memset(resp, 0, sizeof(resp));
224 err = mbtk_sms_cmgl_set(info_handle, cmgl, resp);
225 if(err) {
226 printf("lynq_list_sms Error : %d\n", err);
227 return -1;
228 } else {
229 printf("cmgl set success, reg:%s\n",resp);
230 }
231
232 return 0;
233}
234
235
236int lynq_query_sms_storage_status(void)
237{
238 char mem[128] = {0};
239 int err = mbtk_sms_cpms_get(info_handle, mem);
240 if(err) {
241 printf("cpms query is fail Error : %d\n", err);
242 return -1;
243 } else {
244 printf("cpms query is success : %s\n", mem);
245 }
246
247 return 0;
248}
249
250
251int lynq_get_smsc_address(char *serviceNumber)
252{
253 char csca[128] = {0};
254 if(info_handle == NULL || serviceNumber == NULL)
255 {
256 return -1;
257 }
258
259 int err = mbtk_sms_csca_get(info_handle, serviceNumber);
260 if(err) {
261 printf("lynq_get_smsc_address Error : %d\n", err);
262 return err;
263 } else {
264 printf("lynq_get_smsc_address success\n");
265 }
266
267 return 0;
268}
269
270
271int lynq_set_smsc_address(const char* service_num)
272{
273 if(info_handle == NULL || service_num == NULL)
274 {
275 return -1;
276 }
277
278 int err = mbtk_sms_csca_set(info_handle, service_num);
279 if(err) {
280 printf("Error : %d\n", err);
281 return err;
282 } else {
283 printf("lynq_set_smsc_address success\n");
284 }
285 return 0;
286}
287
288
289
290
291