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