blob: 92b2903898304349808e63cab0eac00fc7147a85 [file] [log] [blame]
liubin281ac462023-07-19 14:22:54 +08001#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <errno.h>
5#include <sys/socket.h>
6#include <sys/un.h>
7#include <netinet/in.h>
8#include <pthread.h>
9#include <sys/epoll.h>
10#include <fcntl.h>
11#include <signal.h>
12
13#include "mbtk_type.h"
14#include "mbtk_info.h"
15#include "atchannel.h"
16#include "at_tok.h"
17#include "mbtk_utils.h"
18#include "info_data.h"
19
20void pack_rsp_send(int fd, int info_id, const void* data, int data_len);
21
22/*
23AT+CMGF?
24+CMGF: 0
25
26OK
27
28*/
29static int req_cmgf_get(int *state, int *cme_err)
30{
31 ATResponse *response = NULL;
32 char *tmp_ptr = NULL;
33 int err = at_send_command_singleline("AT+CMGF?", "", &response);
34
35 if (err < 0 || response->success == 0 || !response->p_intermediates){
36 *cme_err = at_get_cme_error(response);
37 goto exit;
38 }
39
40 char *line = response->p_intermediates->line;
41 printf("req_cmgf_get() ---line:%s\n", line);
42 char* ptr = strstr(line, "+CMGF: ");
43 printf("req_cmgf_get() ---ptr:%s\n",ptr);
44 if(ptr)
45 {
46 *state = atoi(ptr + strlen("+CMGF: "));
47 }
48 else
49 {
50 err = -1;
51 }
52exit:
53 at_response_free(response);
54 return err;
55}
56
57/*
58AT+CMGF=0"
59or
60AT+CMGF=1"
61
62OK
63*/
64static int req_cmgf_set(int state, int *cme_err)
65{
66 printf("req_cmgf_set()-------------start\n");
67 printf("state:%d\n",state);
68 ATResponse *response = NULL;
69 char cmd[30] = {0};
70 if(state)
71 {
72 strcpy(cmd, "AT+CMGF=1");
73 }
74 else
75 {
76 strcpy(cmd, "AT+CMGF=0");
77 }
78
79 printf("req_cmgf_set()----cmd:%s\n", cmd);
80 int err = at_send_command(cmd, &response);
81
82 if (err < 0 || response->success == 0) {
83 *cme_err = at_get_cme_error(response);
84 goto exit;
85 }
86
87 err = 0;
88exit:
89 at_response_free(response);
90 return err;
91}
92
93/*set AT+CNMI=1,2*/
94static int req_cnmi_set(int *cme_err)
95{
96 printf("req_cnmi_set()-------------start3\n");
97 ATResponse *response = NULL;
98 char cmd[30] = {0};
99
100 strcpy(cmd, "AT+CNMI=1,2");
101
102 printf("req_cnmi_set()----cmd:%s\n", cmd);
103 int err = at_send_command(cmd, &response);
104
105 if (err < 0 || response->success == 0) {
106 printf("err:%d, response->success:%d \n", err, response->success);
107 *cme_err = at_get_cme_error(response);
108 goto exit;
109 }
110
111 err = 0;
112exit:
113 at_response_free(response);
114 printf("exit,err:%d\n", err);
115 return err;
116}
117
118/*
119AT+CPMS?
120
121+CPMS: "SM",15,50,"SM",15,50,"SM",15,50
122
123OK
124
125*/
126static int req_cpms_get(char *reg, int *cme_err)
127{
128 printf("req_cpms_get------------start(3)\n");
129 ATResponse *response = NULL;
130 char *tmp_ptr = NULL;
131 int err = at_send_command_singleline("AT+CPMS?", "", &response);
132
133 if (err < 0 || response->success == 0 || !response->p_intermediates){
134 *cme_err = at_get_cme_error(response);
135 goto exit;
136 }
137
138 ATLine* lines_ptr = response->p_intermediates;
139 char *line = NULL;
140 int len = 0;
141 while(lines_ptr)
142 {
143 line = lines_ptr->line;
144 if(line ==NULL)
145 {
146 printf("line is null----------------------\n");
147 }
148
149 printf("-----------line:%s, strlen:%d, len:%d----------\n", line, strlen(line), len);
150 memcpy(reg+len, line, strlen(line));
151 len += strlen(line);
152 lines_ptr = lines_ptr->p_next;
153 }
154
155 printf("cpms_get()------reg:%s\n", reg);
156
157exit:
158 at_response_free(response);
159 return err;
160}
161
162
163
164/*
165AT+CPMS=<mem1>[,<mem2>[,<mem3>]]
166AT+CPMS="ME","ME","ME"
167
168+CPMS: 14,50,14,50,14,50
169
170OK
171
172*/
173static int req_cpms_set(const char *mem, char *reg, int len, int *cme_err)
174{
175 printf("req_cpms_set(2)----------------start\n");
176 printf("mem:%s\n", mem);
177 ATResponse *response = NULL;
178 char cmd[30] = {0};
179 int err = 0;
180 char data[20] = {0};
181
182 if(mem != NULL)
183 {
184 memcpy(data, mem, len);
185 sprintf(cmd, "AT+CPMS=%s", data);
186 }
187 else{
188 printf("mem is null\n");
189 }
190
191 printf("cmd:%s,data:%s---------\n", cmd,data);
192
193 if(strlen(cmd) > 8)
194 {
195 err = at_send_command_multiline(cmd, "+CPMS:", &response);
196 if (err < 0 || response->success == 0){
197 *cme_err = at_get_cme_error(response);
198 goto exit;
199 }
200
201 char *line = response->p_intermediates->line;
202 printf("line:%s, len:%d\n", line, strlen(line));
203
204 memcpy(reg, line, strlen(line));
205
206 printf("cpms_reg:%s\n", reg);
207 }
208 err = 0;
209exit:
210 printf("goto exit do");
211 at_response_free(response);
212 return err;
213}
214
215/*
216if PDU mode (+CMGF=0):
217 AT+CMGS=<length><CR>
218PDU is given<ctrl-Z/ESC>
219if text mode (+CMGF=1):
220 AT+CMGS=<da>[,<toda>]<CR>
221text is entered<ctrl-Z/ESC>
222
223 AT+CMGS=15775690697,hello world
224
225
226*/
227static int req_cmgs_set(char *cmgs, char *reg, int len, int *cme_err)
228{
229 printf("req_cmgs_set()----------------start\n");
230 printf("cmgs:%s\n", cmgs);
231 ATResponse *response = NULL;
232 char cmd[30] = {0};
233 char data[218] = {0};
r.xiao10052d92024-07-15 02:42:20 -0700234 char pnum[20] = {0};
liubin281ac462023-07-19 14:22:54 +0800235 char *ptr = cmgs;
236 int err = 0;
237 int data_len = 0;
238
239 char *src = strstr(cmgs, ",");
240 if(src != NULL)
241 {
r.xiao10052d92024-07-15 02:42:20 -0700242 //LOG("[XIAORUI]req_cmgs_set()----------------src=%s",src);
243 //LOG("[XIAORUI]req_cmgs_set()----------------ptr=%s",ptr);
liubin281ac462023-07-19 14:22:54 +0800244 memcpy(pnum, ptr, src - ptr);
r.xiao10052d92024-07-15 02:42:20 -0700245 //LOG("[XIAORUI]req_cmgs_set()----------------pnum=%s",pnum);
liubin281ac462023-07-19 14:22:54 +0800246 src++;
247 int data_len = 0;
248 data_len = len - (src - ptr);
249 memcpy(data, src, data_len);
r.xiao10052d92024-07-15 02:42:20 -0700250 //LOG("[XIAORUI]req_cmgs_set()----------------data %s",data);
liubin281ac462023-07-19 14:22:54 +0800251 }
252
253 sprintf(cmd, "AT+CMGS=%s", pnum);
r.xiao10052d92024-07-15 02:42:20 -0700254 LOG("cmd:%s,data:%s---------", cmd,data);
liubin281ac462023-07-19 14:22:54 +0800255
256 if(strlen(cmd) > 0)
257 {
258 int err = at_send_command_sms(cmd, data, "+CMGS: ", &response);
259 printf("err:%d, response:%d\n", err, response->success);
260
261 if (err < 0 || response->success == 0) {
262 *cme_err = at_get_cme_error(response);
263 goto exit;
264 }
265 char *line;
266 line = response->p_intermediates->line;
267 memcpy(reg, line, strlen(line));
268 printf("line:%s\n", line);
269
270 }
271 err = 0;
272exit:
273 at_response_free(response);
274 return err;
275}
276
277static int req_cmgw_set(char *cmgw,int len, int *cme_err)
278{
279 printf("req_cmgw_set()----------------start\n");
280 printf("cmgw:%s\n", cmgw);
281 ATResponse *response = NULL;
282 char cmd[30] = {0};
283 char data[218] = {0};
284 char pnum[13] = {0};
285 char *ptr = cmgw;
286 int err = 0;
287
288 char *src = strstr(cmgw, ",");
289 if(src != NULL)
290 {
291 memcpy(pnum, ptr, src - ptr);
292 src++;
293 int data_len = 0;
294 data_len = len - (src - ptr);
295 memcpy(data, src, data_len);
296 }
297
298 sprintf(cmd, "AT+CMGW=%s", pnum);
299 printf("cmd:%s,data:%s---------\n", cmd,data);
300
301 if(strlen(cmd) > 0)
302 {
303 int err = at_send_command_sms(cmd, data, "+CMGW: ", &response);
304 printf("err:%d, response:%d\n", err, response->success);
305
306 if (err < 0 || response->success == 0) {
307 *cme_err = at_get_cme_error(response);
308 goto exit;
309 }
310 char *line;
311 line = response->p_intermediates->line;
312 printf("line:%s\n", line);
313 }
314 err = 0;
315exit:
316 at_response_free(response);
317 return err;
318}
319
320/*
321AT+CMGD=25
322OK
323
324+MMSG: 1, 0
325*/
326static int req_cmgd_set(char *cmgd, int len, int *cme_err)
327{
328 printf("0req_cmgd_set()--------------start\n");
329 printf("cmgd:%s\n", cmgd);
330 ATResponse *response = NULL;
331 char cmd[30] = {0};
332 char data[218] = {0};
333 char pnum[13] = {0};
334 char *ptr = cmgd;
335 int err = 0;
336
337 memcpy(data, cmgd, len );
338 sprintf(cmd, "AT+CMGD=%s", data);
339 printf("cmd:%s,data:%s---------\n", cmd,data);
340
341 if(strlen(cmd) > 0)
342 {
343 int err = at_send_command(cmd, &response);
344 if (err < 0 || response->success == 0) {
345 *cme_err = at_get_cme_error(response);
346 goto exit;
347 }
348
349// Format problem caused the crash
350// char *line;
351// line = response->p_intermediates->line;
352// printf("line:%s\n", line);
353 }
354 err = 0;
355exit:
356 at_response_free(response);
357 return err;
358}
359
360/*
r.xiaoeb9dba42024-02-07 02:16:13 -0800361AT+CMGD=?
362
363+CMGD: (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37),(0-4)
364
365OK
366
367*/
368static int req_cmgd_get(char *reg, int *cme_err)
369{
370 ATResponse *response = NULL;
371 char *tmp_ptr = NULL;
372 int err = at_send_command_singleline("AT+CMGD=?", "+CMGD:", &response);
373
374 if (err < 0 || response->success == 0 || !response->p_intermediates){
375 *cme_err = at_get_cme_error(response);
376 goto exit;
377 }
378
379 char *line = response->p_intermediates->line;
380
381 const char* start = strchr(line, '(');
382 const char* end = strchr(line, ')');
383
384 if (start && end && end > start)
385 {
386 int len_t = end - start - 1;
387 char substr_t[len_t + 1];
388
389 strncpy(substr_t, start + 1, len_t);
390 substr_t[len_t] = '\0';
391 strncpy(reg, substr_t, len_t);
392 }
393 else
394 {
395 strcpy(reg, "");
396 }
397
398exit:
399 at_response_free(response);
400 return err;
401}
402
403
404/*
liubin281ac462023-07-19 14:22:54 +0800405AT+CMGL="ALL"
406
407+CMGL: 1,"REC READ","10658678",,"22.11.14 10:41:44 GMT+8"
408
40956DB5DDD62
410
411+CMGL: 2,"STO UNSENT","18927467953"
412hello world
413
414*/
415
416static int req_cmgl_set(const char *cmgl, char *reg, int len, int *cme_err)
417{
418 printf("req_cmgl_set(2)-----------------start\n");
419 printf("cmgl:%s\n", cmgl);
420 ATResponse *response = NULL;
421 char cmd[30] = {0};
422 char data[218] = {0};
423 char index_data[256] = {0};
424 int s_index = 0, g_index = 0;
425 bool index_flag = false;
426 char *ptr_index = index_data;
427 char phone[50];
428 char number[5] = {0};
429 int err = 0;
430
431 memcpy(data, cmgl, len);
432
433 char *ptr1 = data;
434 char *ptr2 = strstr(data, ",");
435 if(ptr2 != NULL)
436 {
437 memcpy(number,ptr1, ptr2-ptr1 );
438 s_index = atoi(number);
439 if(s_index == 0)
440 {
441 index_flag = TRUE;
442 memcpy(ptr_index, "+CMGL:", strlen("+CMGL:"));
443 }
444 memset(number, 0, sizeof(number));
445 ptr2++;
446 }else{
447 printf("cmgl set data is error\n eg:index,data\n");
448 return -1;
449 }
450
451 sprintf(cmd, "AT+CMGL=%s", ptr2);
452 printf("cmd:%s\n", cmd);
453
454 ptr1 = NULL;
455 ptr2 = NULL;
456
457 if(strlen(cmd) > 0)
458 {
459 err = at_send_command_multiline(cmd, "", &response);
460 if (err < 0 || response->success == 0 || !response->p_intermediates){
461 *cme_err = at_get_cme_error(response);
462 printf("at_send_command_multiline() is err-----------------\n");
463 goto exit;
464 }
465
466 ATLine* lines_ptr = response->p_intermediates;
467 char *line = NULL;
468 int reg_len = 0;
469 bool flag = false;
470 while(lines_ptr)
471 {
472 line = lines_ptr->line;
473 if(line ==NULL)
474 {
475 printf("line is null----------------------\n");
476 }
477
478 printf("-----line:%s\n", line);
479 if(!flag)
480 {
481 ptr1 = strstr(line, "+CMGL: ");
482 if(ptr1 != NULL)
483 {
484 ptr1 += 7;
485 ptr2 = strstr(line, ",");
486 memcpy(number,ptr1, ptr2-ptr1 );
487 printf("number:%s, ptr1:%s, ptr2:%s\n", number, ptr1, ptr2);
488 g_index = atoi(number);
489 if(index_flag)
490 {
491 sprintf(ptr_index+strlen(ptr_index), "%d,", g_index);
492 }
493 }
494 //if( g_index == s_index)
495 if( g_index == s_index && !index_flag)
496 {
497 printf("g_index == s_index, g_index:%d,s_index:%d\n", g_index, s_index);
498 flag = true;
499 }
500 }
501 if(flag && reg_len <=1024)
502 {
503 memcpy(reg+reg_len, line, strlen(line));
504 printf("-----memcpy------reg:%s----------\n", reg);
505 printf("len:%d\n", reg_len);
506 reg_len += strlen(line);
507 }
508
509 lines_ptr = lines_ptr->p_next;
510 }
511 }
512
513 if(index_flag)
514 {
515 memset(reg, 0, sizeof(reg));
516 memcpy(reg, ptr_index, strlen(ptr_index) );
517 }
518 err = 0;
519exit:
520 at_response_free(response);
521 printf("req_cmgl_set()-----------------end\n");
522 return err;
523}
524
525/*
526at+csca?
527+CSCA: "+8613800280500",145
528OK
529*/
530static int req_csca_get(char *req, int *cme_err)
531{
532 ATResponse *response = NULL;
533 char *tmp_ptr = NULL;
534 int err = at_send_command_singleline("AT+CSCA?", "", &response);
535
536 if (err < 0 || response->success == 0 || !response->p_intermediates){
537 *cme_err = at_get_cme_error(response);
538 goto exit;
539 }
540
541 char *line = response->p_intermediates->line;
542 printf("req_csca_get() ---line:%s\n", line);
543 char* ptr = strstr(line, "+CSCA: ");
544 printf("req_csca_get() ---ptr:%s\n",ptr);
545 if(ptr)
546 {
547 memcpy(req, line, strlen(line));
548 printf("err:%d, req:%s\n", err, req);
549 err = 0;
550 }
551 else
552 {
553 err = -1;
554 }
555
556exit:
557 at_response_free(response);
558 return err;
559}
560
561static int req_csca_set(char *csca, int len, int *cme_err)
562{
563 printf("req_csca_set()--------------start\n");
564 printf("csca:%s\n", csca);
565 ATResponse *response = NULL;
566 char cmd[30] = {0};
567 char data[218] = {0};
568 char pnum[13] = {0};
569 char *ptr = csca;
570 int err = 0;
571
572 memcpy(data, csca, len);
573 sprintf(cmd, "AT+CSCA=%s", data);
574 printf("cmd:%s,data:%s---------\n", cmd,data);
575
576 if(strlen(cmd) > 0)
577 {
578 int err = at_send_command(cmd, &response);
579 if (err < 0 || response->success == 0) {
580 *cme_err = at_get_cme_error(response);
581 goto exit;
582 }
583
584 // char *line;
585 // line = response->p_intermediates->line;
586 // printf("line:%s\n", line);
587 }
588 err = 0;
589exit:
590 at_response_free(response);
591 return err;
592}
593
594static int req_csmp_set(char *csmp, int len, int *cme_err)
595{
596 printf("req_csmp_set()-------------------start\n");
597 printf("csmp:%s\n", csmp);
598 ATResponse *response = NULL;
599 char cmd[30] = {0};
600 char data[218] = {0};
601 char pnum[13] = {0};
602 char *ptr = csmp;
603 int err = 0;
604
605 memcpy(data, csmp, len);
606 sprintf(cmd, "AT+CSMP=%s", data);
607 printf("cmd:%s,data:%s---------\n", cmd,data);
608
609 if(strlen(cmd) > 0)
610 {
611 int err = at_send_command(cmd, &response);
612 if (err < 0 || response->success == 0) {
613 *cme_err = at_get_cme_error(response);
614 goto exit;
615 }
616
617 char *line;
618 line = response->p_intermediates->line;
619 printf("line:%s\n", line);
620 }
621 err = 0;
622exit:
623 at_response_free(response);
624 return err;
625}
626
627static int req_cscb_set(char *cscb,int len, int *cme_err)
628{
629 printf("req_cscb_set()----------------start\n");
630 printf("cscb:%s\n", cscb);
631 ATResponse *response = NULL;
632 char cmd[30] = {0};
633 char data[218] = {0};
634 char pnum[13] = {0};
635 char *ptr = cscb;
636 int err = 0;
637
638 memcpy(data, cscb, len);
639 sprintf(cmd, "AT+CSCB=%s", cscb);
640 printf("cmd:%s,data:%s---------\n", cmd,data);
641
642 if(strlen(cmd) > 0)
643 {
644 int err = at_send_command(cmd, &response);
645 if (err < 0 || response->success == 0) {
646 *cme_err = at_get_cme_error(response);
647 goto exit;
648 }
649
650 char *line;
651 line = response->p_intermediates->line;
652 printf("line:%s\n", line);
653 }
654 err = 0;
655exit:
656 at_response_free(response);
657 return err;
658}
659
660/*
661AT+CMSS=13
662+CMSS: 81
663OK
664*/
665static int req_cmss_set(const char *cmss, char *reg, int len, int *cme_err)
666{
667 printf("req_cmss_set()----------------start\n");
668 printf("cmss:%s\n", cmss);
669 ATResponse *response = NULL;
670 char cmd[30] = {0};
671 char data[20] = {0};
672 int err = 0;
673
674 if(cmss != NULL)
675 {
676 memcpy(data, cmss, len);
677 sprintf(cmd, "AT+CMSS=%s", data);
678 // sprintf(cmd, "AT+CMSS=%d", 8);
679 }
680 else{
681 printf("mem is null\n");
682 }
683
684 printf("cmss. cmd:%s\n", cmd);
685
686 if(strlen(cmd) > 8)
687 {
688 err = at_send_command_multiline(cmd, "+CMSS:", &response);
689 if (err < 0 || response->success == 0){
690 *cme_err = at_get_cme_error(response);
691 goto exit;
692 }
693
694 char *line = response->p_intermediates->line;
695 printf("line:%s\n", line);
696
697 char *tmp_str = NULL;
698 err = at_tok_nextstr(&line, &tmp_str); // phone_number
699 if (err < 0)
700 {
701 goto exit;
702 }
703 memcpy(reg, tmp_str, strlen(tmp_str));
704 printf("cmss_reg:%s\n", reg);
705 /*
706 int err = at_send_command(cmd, &response);
707
708 if (err < 0 || response->success == 0) {
709 *cme_err = at_get_cme_error(response);
710 goto exit;
711 }
712
713 char *line;
714 line = response->p_intermediates->line;
715 printf("line:%s\n", line);
716 */
717 }
718 err = 0;
719exit:
720 at_response_free(response);
721 return err;
722}
723
724
725/*
726AT+CMGR=1
727+CMGR: "REC READ","10658678",,"22.11.14 10:41:44 GMT+8"
728
72956DB5DDD624B673A62A5FF039003003400310034003500340035003F0073003D0037003800680061006C00450066
730
731OK
732*/
733static int req_cmgr_set(int index, char *reg, int *cme_err)
734{
735 printf("0req_cmgr_set()-------------------start\n");
736 printf("index:%d\n", index);
737 ATResponse *response = NULL;
738 char cmd[30] = {0};
739 int err = 0;
740 sprintf(cmd, "AT+CMGR=%d", index);
741
742 printf("req_cmgr_set()----cmd:%s\n", cmd);
743
744 if(strlen(cmd) > 0)
745 {
746 err = at_send_command_multiline(cmd, "", &response);
747 if (err < 0 || response->success == 0 || !response->p_intermediates){
748 *cme_err = at_get_cme_error(response);
749 printf("at_send_command_multiline() is err-----------------\n");
750 goto exit;
751 }
752
753 ATLine* lines_ptr = response->p_intermediates;
754 char *line = NULL;
755 int reg_len = 0;
756 while(lines_ptr)
757 {
758 line = lines_ptr->line;
759 if(line ==NULL)
760 {
761 printf("line is null----------------------\n");
762 }
763
764 if(reg_len > 0)
765 {
766 memcpy(reg+reg_len, "\r\n", strlen("\r\n"));
767 reg_len += strlen("\r\n");
768 }
769 memcpy(reg+reg_len, line, strlen(line));
770 printf("-----memcpy------reg:%s----------\n", reg);
771 printf("len:%d\n", reg_len);
772 reg_len += strlen(line);
773 lines_ptr = lines_ptr->p_next;
774 }
775 }
776
777 err = 0;
778exit:
779 at_response_free(response);
780 return err;
781}
782
783
784//void net_list_free(void *data);
785// Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
786// Otherwise, do not call pack_error_send().
787mbtk_info_err_enum sms_pack_req_process(sock_client_info_t* cli_info, mbtk_info_pack_t* pack)
788{
789 mbtk_info_err_enum err = MBTK_INFO_ERR_SUCCESS;
790 int cme_err = MBTK_INFO_ERR_CME_NON;
791 switch(pack->info_id)
792 {
793 case MBTK_INFO_ID_SMS_STATE_REQ:
794 {
795 if(pack->data_len == 0 || pack->data == NULL)
796 {
797 err = MBTK_INFO_ERR_UNSUPPORTED;
798 }
799 else // Set
800 {
801
802 }
803 break;
804 }
805 case MBTK_INFO_ID_SMS_CMGF_REQ:
806 {
807 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
808 {
809 int state;
810 if(req_cmgf_get(&state, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
811 {
812 if(cme_err != MBTK_INFO_ERR_CME_NON) {
813 err = MBTK_INFO_ERR_CME + cme_err;
814 } else {
815 err = MBTK_INFO_ERR_UNKNOWN;
816 }
817 LOG("Get SMS CMGF fail.");
818 }
819 else
820 {
821 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGF_RSP, &state, sizeof(uint8));
822 }
823 }
824 else // Set VoLTE state.
825 {
826 uint8 mode = *(pack->data);
827 if(pack->data_len != sizeof(uint8) || (mode != 0 && mode != 1))
828 {
829 err = MBTK_INFO_ERR_REQ_PARAMETER;
830 LOG("Set SMS CMGF parameter error.");
831 break;
832 }
833
834 if(req_cmgf_set(mode, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
835 {
836 if(cme_err != MBTK_INFO_ERR_CME_NON) {
837 err = MBTK_INFO_ERR_CME + cme_err;
838 } else {
839 err = MBTK_INFO_ERR_UNKNOWN;
840 }
841 LOG("Set SMS CMGF fail.");
842 }
843 else
844 {
845 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGF_RSP, NULL, 0);
846
847 // Restart is required to take effect.
848 LOG("Will reboot system...");
849 }
850 }
851 break;
852 }
853 case MBTK_INFO_ID_SMS_CNMI_REQ:
854 {
855 if(pack->data_len == 0 || pack->data == NULL) // SET at+cnmi=1,2.
856 {
857 int state;
858 if(req_cnmi_set(&cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
859 {
860 printf("set req_cnmi_set() fail.\n");
861 if(cme_err != MBTK_INFO_ERR_CME_NON) {
862 err = MBTK_INFO_ERR_CME + cme_err;
863 } else {
864 err = MBTK_INFO_ERR_UNKNOWN;
865 }
866 LOG("set sms cnmi fail.");
867 }
868 else
869 {
870 printf("req_cnmi_set success\n");
871 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CNMI_RSP, NULL, 0);
872 }
873 }
874 break;
875 }
876 case MBTK_INFO_ID_SMS_CPMS_REQ:
877 {
878 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
879 {
880 char reg[100] = {0};
881 if(req_cpms_get(reg, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
882 {
883 if(cme_err != MBTK_INFO_ERR_CME_NON) {
884 err = MBTK_INFO_ERR_CME + cme_err;
885 } else {
886 err = MBTK_INFO_ERR_UNKNOWN;
887 }
888 LOG("Get SMS CMGF fail.");
889 }
890 else
891 {
892 printf("req_cpms_get_ success, reg:%s, len:%d ", reg, strlen(reg));
893 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CPMS_RSP, reg, strlen(reg));
894 }
895 }
896 else // Set VoLTE state.
897 {
898 char *mem = (char*)(pack->data);
899 int len = pack->data_len;
900 char reg[100] = {0};
901 printf("mem:%s, len:%d", pack->data, pack->data_len);
902
903 if(req_cpms_set(mem, reg, len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
904 {
905 printf("cpms_set fail\n");
906 if(cme_err != MBTK_INFO_ERR_CME_NON) {
907 err = MBTK_INFO_ERR_CME + cme_err;
908 } else {
909 err = MBTK_INFO_ERR_UNKNOWN;
910 }
911 LOG("Set SMS CMGF fail.");
912 }
913 else
914 {
915 printf("cpms_set success, reg:%s\n", reg);
916 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CPMS_RSP, reg, strlen(reg));
917
918 // Restart is required to take effect.
919 LOG("Will reboot system...");
920 }
921 }
922 break;
923 }
924 case MBTK_INFO_ID_SMS_CMGS_REQ:
925 {
926 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
927 {
928 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
929 err = MBTK_INFO_ERR_UNSUPPORTED;
930 }
931 else // Set VoLTE state.
932 {
933 char *cmgs = (char*)pack->data;
934 int len = pack->data_len;
935 char reg[50] ={0};
936 printf("mbtk_sms,cmgs:%s,len:%d\n", cmgs, len);
937
938 if(req_cmgs_set(cmgs,reg,len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
939 {
940 if(cme_err != MBTK_INFO_ERR_CME_NON) {
941 err = MBTK_INFO_ERR_CME + cme_err;
942 } else {
943 err = MBTK_INFO_ERR_UNKNOWN;
944 }
945 LOG("Set SMS CMGF fail.");
946 }
947 else
948 {
949 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGS_RSP, reg, strlen(reg));
950
951 // Restart is required to take effect.
952 LOG("Will reboot system...");
953 }
954
955 }
956 break;
957 }
958 case MBTK_INFO_ID_SMS_CMSS_REQ:
959 {
960 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
961 {
962 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
963 err = MBTK_INFO_ERR_UNSUPPORTED;
964 }
965 else // Set VoLTE state.
966 {
967 char *cmss = (char*)pack->data;
968 int len = pack->data_len;
969 char reg[128] = {0};
970 printf("mbtk_sms,cmgs:%s, len:%d\n", cmss, len);
971
972 if(req_cmss_set(cmss,reg, len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
973 {
974 if(cme_err != MBTK_INFO_ERR_CME_NON) {
975 err = MBTK_INFO_ERR_CME + cme_err;
976 } else {
977 err = MBTK_INFO_ERR_UNKNOWN;
978 }
979 LOG("Set SMS CMGF fail.");
980 }
981 else
982 {
983 printf("req_cmss_set success, reg:%s", reg);
984 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMSS_RSP, NULL, 0);
985
986 // Restart is required to take effect.
987 LOG("Will reboot system...");
988 }
989
990 }
991 break;
992 }
993 case MBTK_INFO_ID_SMS_CMGR_REQ:
994 {
995 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
996 {
997 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
998 err = MBTK_INFO_ERR_UNSUPPORTED;
999 }
1000 else // Set VoLTE state.
1001 {
1002 uint8 index = *(pack->data);
1003 char reg[1024] = {0};
1004 if(pack->data_len != sizeof(uint8) )
1005 {
1006 err = MBTK_INFO_ERR_REQ_PARAMETER;
1007 LOG("Set SMS CMGF parameter error.");
1008 break;
1009 }
1010
1011 if(req_cmgr_set(index, reg, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1012 {
1013 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1014 err = MBTK_INFO_ERR_CME + cme_err;
1015 } else {
1016 err = MBTK_INFO_ERR_UNKNOWN;
1017 }
1018 LOG("Set SMS CMGF fail.");
1019 }
1020 else
1021 {
1022 printf("1req_cmgr_set_success, reg:%s\n", reg);
1023 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGR_RSP, reg, strlen(reg));
1024
1025 // Restart is required to take effect.
1026 LOG("Will reboot system...");
1027 }
1028
1029 }
1030 break;
1031 }
1032 case MBTK_INFO_ID_SMS_CMGW_REQ:
1033 {
1034 if(pack->data_len == 0 || pack->data == NULL) // +CMGW=<oa/da>[,<tooa/toda>[,<stat>]]<CR>
1035 {
1036 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
1037 err = MBTK_INFO_ERR_UNSUPPORTED;
1038 }
1039 else // Set cmgw data.
1040 {
1041 char *cmgw = (char*)pack->data;
1042 int len = pack->data_len;
1043 printf("mbtk_sms,cmgw:%s,len:%d\n", cmgw, len);
1044
1045 if(req_cmgw_set(cmgw, len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1046 {
1047 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1048 err = MBTK_INFO_ERR_CME + cme_err;
1049 } else {
1050 err = MBTK_INFO_ERR_UNKNOWN;
1051 }
1052 LOG("Set SMS CMGF fail.");
1053 }
1054 else
1055 {
1056 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGW_RSP, NULL, 0);
1057
1058 // Restart is required to take effect.
1059 LOG("Will reboot system...");
1060 }
1061
1062 }
1063 break;
1064 }
1065 case MBTK_INFO_ID_SMS_CMGD_REQ:
1066 {
1067 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
1068 {
r.xiaoeb9dba42024-02-07 02:16:13 -08001069 char reg[1024] = {0};
1070 if(req_cmgd_get(reg, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1071 {
1072 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1073 err = MBTK_INFO_ERR_CME + cme_err;
1074 } else {
1075 err = MBTK_INFO_ERR_UNKNOWN;
1076 }
1077 LOG("Get SMS CMGD fail.");
1078 }
1079 else
1080 {
1081 LOG("req_cmgd_get success, reg:%s, len:%d ", reg, strlen(reg));
1082 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGD_RSP, reg, strlen(reg));
1083 }
liubin281ac462023-07-19 14:22:54 +08001084 }
1085 else // Set VoLTE state.
1086 {
1087 char *cmgd = (char*)pack->data;
1088 int len = pack->data_len;
1089 printf("mbtk_sms,cmgs:%s,len:%d\n", cmgd, len);
1090
1091 if(req_cmgd_set(cmgd,len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1092 {
1093 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1094 err = MBTK_INFO_ERR_CME + cme_err;
1095 } else {
1096 err = MBTK_INFO_ERR_UNKNOWN;
1097 }
1098 LOG("Set SMS CMGF fail.");
1099 }
1100 else
1101 {
1102 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGD_RSP, NULL, 0);
1103
1104 // Restart is required to take effect.
1105 LOG("Will reboot system...");
1106 }
1107
1108 }
1109 break;
1110 }
1111 case MBTK_INFO_ID_SMS_CMGL_REQ:
1112 {
1113 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
1114 {
1115 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
1116 err = MBTK_INFO_ERR_UNSUPPORTED;
1117 }
1118 else // Set VoLTE state.
1119 {
1120 char *cmgl = (char*)pack->data;
1121 int len = pack->data_len;
1122 char reg[5*1024] = {0};
1123 char reg1[1024+1] = {0};
1124 printf("mbtk_sms,cmgs:%s, len:%d\n", cmgl, len);
1125
1126 if(req_cmgl_set(cmgl, reg, len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1127 {
1128 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1129 err = MBTK_INFO_ERR_CME + cme_err;
1130 } else {
1131 err = MBTK_INFO_ERR_UNKNOWN;
1132 }
1133 LOG("Set SMS CMGF fail.");
1134 }
1135 else
1136 {
1137 // printf("1cmgl_set_success---------len:%d\n reg:%s\n",strlen(reg), reg);
1138 memcpy(reg1, reg, 1024);
1139 printf("0len:%d, reg1:%s\n", strlen(reg1), reg1);
1140 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CMGL_RSP, reg1, strlen(reg1));
1141
1142 // Restart is required to take effect.
1143 LOG("Will reboot system...");
1144 }
1145
1146 }
1147 break;
1148 }
1149 case MBTK_INFO_ID_SMS_CSCA_REQ:
1150 {
1151 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
1152 {
1153 char csca[50]={0};
1154 if(req_csca_get(csca, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1155 {
1156 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1157 err = MBTK_INFO_ERR_CME + cme_err;
1158 } else {
1159 err = MBTK_INFO_ERR_UNKNOWN;
1160 }
1161 LOG("Get SMS CSCA fail.");
1162 printf("get sms csca fail\n");
1163 }
1164 else
1165 {
1166 printf("get sms csca suscess\n");
1167 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CSCA_RSP, csca, strlen(csca));
1168 }
1169 err = MBTK_INFO_ERR_UNSUPPORTED;
1170 }
1171 else // Set VoLTE state.
1172 {
1173 char *csca = (char*)pack->data;
1174 int len = pack->data_len;
1175 printf("mbtk_sms,cmgs:%s,len:%d\n", csca, len);
1176
1177 if(req_csca_set(csca, len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1178 {
1179 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1180 err = MBTK_INFO_ERR_CME + cme_err;
1181 } else {
1182 err = MBTK_INFO_ERR_UNKNOWN;
1183 }
1184 LOG("Set SMS CMGF fail.");
1185 }
1186 else
1187 {
1188 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CSCA_RSP, NULL, 0);
1189
1190 // Restart is required to take effect.
1191 LOG("Will reboot system...");
1192 }
1193
1194 }
1195 break;
1196 }
1197 case MBTK_INFO_ID_SMS_CSMP_REQ:
1198 {
1199 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
1200 {
1201 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
1202 err = MBTK_INFO_ERR_UNSUPPORTED;
1203 }
1204 else // Set VoLTE state.
1205 {
1206 char *csmp = (char*)pack->data;
1207 int len = pack->data_len;
1208 printf("mbtk_sms,cmgs:%s,len:%d\n", csmp, len);
1209
1210 if(req_csmp_set(csmp,len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1211 {
1212 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1213 err = MBTK_INFO_ERR_CME + cme_err;
1214 } else {
1215 err = MBTK_INFO_ERR_UNKNOWN;
1216 }
1217 LOG("Set SMS CMGF fail.");
1218 }
1219 else
1220 {
1221 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CSMP_RSP, NULL, 0);
1222
1223 // Restart is required to take effect.
1224 LOG("Will reboot system...");
1225 }
1226
1227 }
1228 break;
1229 }
1230 case MBTK_INFO_ID_SMS_CSCB_REQ:
1231 {
1232 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
1233 {
1234 printf("pack->data_len:%d,,pack->data:%s\n",pack->data_len, pack->data);
1235 err = MBTK_INFO_ERR_UNSUPPORTED;
1236 }
1237 else // Set VoLTE state.
1238 {
1239 char *cscb = (char*)pack->data;
1240 int len = pack->data_len;
1241 printf("mbtk_sms,cmgs:%s, len:%d\n", cscb, len);
1242
1243 if(req_cscb_set(cscb,len, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1244 {
1245 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1246 err = MBTK_INFO_ERR_CME + cme_err;
1247 } else {
1248 err = MBTK_INFO_ERR_UNKNOWN;
1249 }
1250 LOG("Set SMS CMGF fail.");
1251 }
1252 else
1253 {
1254 pack_rsp_send(cli_info->fd, MBTK_INFO_ID_SMS_CSCB_RSP, NULL, 0);
1255
1256 // Restart is required to take effect.
1257 LOG("Will reboot system...");
1258 }
1259
1260 }
1261 break;
1262 }
1263 default:
1264 {
1265 err = MBTK_INFO_ERR_REQ_UNKNOWN;
1266 LOG("Unknown request : %s", id2str(pack->info_id));
1267 break;
1268 }
1269 }
1270
1271 return err;
1272}