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