blob: 3c3d3082b23fc42e59c30c911e00898348fe6b04 [file] [log] [blame]
b.liu06559f62024-11-01 18:48:22 +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 "info_data.h"
15#include "atchannel.h"
16#include "at_tok.h"
17#include "mbtk_utils.h"
18#include "mbtk_info.h"
19
20static mbtk_ecall_mode_type_enum ecall_mode = MBTK_ECALL_MODE_TYPE_EU;
21
22void pack_rsp_send(int fd, int info_id, const void* data, int data_len);
23
b.liueea595d2024-11-05 19:52:10 +080024static int cfg_ecalldata_get(mbtk_ecall_cfg_item_enum type, uint32 *value, int *cme_err)
25{
26 ATResponse *response = NULL;
b.liu9e8584b2024-11-06 19:21:28 +080027// char *tmp_ptr = NULL;
b.liueea595d2024-11-05 19:52:10 +080028 int tmp_int;
29 char cmd[100] = {0};
30 int err = 0;
31
32 snprintf(cmd, sizeof(cmd), "AT*ECALLDATA=5,%d", type);
33 err = at_send_command_singleline(cmd, "*ECALLDATA:", &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 err = at_tok_start(&line);
42 if (err < 0)
43 {
44 goto exit;
45 }
46
47 err = at_tok_nextint(&line, &tmp_int);
48 if (err < 0)
49 {
50 goto exit;
51 }
52
53 err = at_tok_nextint(&line, &tmp_int);
54 if (err < 0)
55 {
56 goto exit;
57 }
58
59 err = at_tok_nextint(&line, &tmp_int);
60 if (err < 0)
61 {
62 goto exit;
63 }
64
65 *value = (uint32)(tmp_int * 20); // ms
66
67 goto exit;
68exit:
69 at_response_free(response);
70 return err;
71}
72
73static int cfg_ecalldata_set(mbtk_ecall_cfg_item_enum type, uint32 value, int *cme_err)
74{
75 ATResponse *response = NULL;
76 char cmd[100] = {0};
77 int err = 0;
78
79 snprintf(cmd, sizeof(cmd), "AT*ECALLDATA=5,%d,%d", type, value / 20);
80 err = at_send_command(cmd, &response);
81 if (err < 0 || response->success == 0){
82 *cme_err = at_get_cme_error(response);
83 goto exit;
84 }
85
86 goto exit;
87exit:
88 at_response_free(response);
89 return err;
90}
91
92static int cfg_ecalltimer_set(const char* type, uint32 value, int *cme_err)
93{
94 ATResponse *response = NULL;
95 char cmd[100] = {0};
96 int err = 0;
97
98 snprintf(cmd, sizeof(cmd), "AT*ECALLTIMER=%s,%d", type, value);
99 err = at_send_command(cmd, &response);
100 if (err < 0 || response->success == 0){
101 *cme_err = at_get_cme_error(response);
102 goto exit;
103 }
104
105 goto exit;
106exit:
107 at_response_free(response);
108 return err;
109}
110
b.liu06559f62024-11-01 18:48:22 +0800111static int req_ecall_msdcfg(mbtk_ecall_msd_cfg_info_t *cfg_info, int *cme_err)
112{
113 ATResponse *response = NULL;
114 char cmd[1024] = {0};
115 sprintf(cmd, "AT*ECALLMSDCFG=%d,\"%s\",0", cfg_info->item_type, cfg_info->data);
116 int err = at_send_command(cmd, &response);
117 if (err < 0 || response->success == 0){
118 *cme_err = at_get_cme_error(response);
119 goto exit;
120 }
121
122exit:
123 at_response_free(response);
124 return err;
125}
126
127static int req_ecall_msdgen(int *cme_err)
128{
129 ATResponse *response = NULL;
130 int err = at_send_command("AT*ECALLMSDGEN", &response);
131 if (err < 0 || response->success == 0){
132 *cme_err = at_get_cme_error(response);
133 goto exit;
134 }
135
136exit:
137 at_response_free(response);
138 return err;
139}
140
141static int req_ecall_msd_set(const uint8 *msd, int *cme_err)
142{
143 ATResponse *response = NULL;
144 char cmd[1024] = {0};
145 sprintf(cmd, "AT*ECALLMSD=\"%s\"", msd);
146 int err = at_send_command(cmd, &response);
147 if (err < 0 || response->success == 0){
148 *cme_err = at_get_cme_error(response);
149 goto exit;
150 }
151
152exit:
153 at_response_free(response);
154 return err;
155}
156
157static int req_ecall_msd_get(uint8 *msd, int *cme_err)
158{
159 ATResponse *response = NULL;
160 char *tmp_ptr = NULL;
161 int err = at_send_command_singleline("AT*ECALLMSD?", "*ECALLMSD:", &response);
162
163 if (err < 0 || response->success == 0 || !response->p_intermediates){
164 *cme_err = at_get_cme_error(response);
165 goto exit;
166 }
167
168 char *line = response->p_intermediates->line;
169 err = at_tok_start(&line);
170 if (err < 0)
171 {
172 goto exit;
173 }
174
175 err = at_tok_nextstr(&line, &tmp_ptr);
176 if (err < 0)
177 {
178 goto exit;
179 }
180
181 if(tmp_ptr && strlen(tmp_ptr) > 0) {
182 memcpy(msd, tmp_ptr, strlen(tmp_ptr));
183 }
184
185 goto exit;
186exit:
187 at_response_free(response);
188 return err;
189}
190
191static int req_ecall_push(int *cme_err)
192{
193 ATResponse *response = NULL;
194 int err = at_send_command("AT*ECALLPUSH", &response);
195 if (err < 0 || response->success == 0){
196 *cme_err = at_get_cme_error(response);
197 goto exit;
198 }
199
200exit:
201 at_response_free(response);
202 return err;
203}
204
205/*
206AT*ECALLONLY?
207*ECALLONLY: 0,0,18981911691,18981911691
208
209OK
210
211*/
212static int req_ecall_only_get(mbtk_ecall_only_info_t *only_info, int *cme_err)
213{
214 ATResponse *response = NULL;
215 char *tmp_ptr = NULL;
216 int tmp_int;
217 int err = at_send_command_singleline("AT*ECALLONLY?", "*ECALLONLY:", &response);
218
219 if (err < 0 || response->success == 0 || !response->p_intermediates){
220 *cme_err = at_get_cme_error(response);
221 goto exit;
222 }
223
224 char *line = response->p_intermediates->line;
225 err = at_tok_start(&line);
226 if (err < 0)
227 {
228 goto exit;
229 }
230
231 err = at_tok_nextint(&line, &tmp_int);
232 if (err < 0)
233 {
234 goto exit;
235 }
236 only_info->active = (mbtk_ecall_only_type_enum)tmp_int;
237
238 err = at_tok_nextint(&line, &tmp_int);
239 if (err < 0)
240 {
241 goto exit;
242 }
243 only_info->sim_type = (mbtk_ecall_sim_type_enum)tmp_int;
244
245 err = at_tok_nextstr(&line, &tmp_ptr);
246 if (err < 0)
247 {
248 goto exit;
249 }
250
251 if(tmp_ptr && strlen(tmp_ptr) > 0) {
252 memcpy(only_info->test_num, tmp_ptr, strlen(tmp_ptr));
253 }
254
255 err = at_tok_nextstr(&line, &tmp_ptr);
256 if (err < 0)
257 {
258 goto exit;
259 }
260
261 if(tmp_ptr && strlen(tmp_ptr) > 0) {
262 memcpy(only_info->reconfig_num, tmp_ptr, strlen(tmp_ptr));
263 }
264
265 goto exit;
266exit:
267 at_response_free(response);
268 return err;
269}
270
271/*
272AT*ECALLONLY?
273*ECALLONLY: 0,0,18981911691,18981911691
274
275OK
276
277*/
278static int req_ecall_only_set(const mbtk_ecall_only_info_t *only_info, int *cme_err)
279{
280 ATResponse *response = NULL;
281 char cmd[1024] = {0};
282 sprintf(cmd, "AT*ECALLONLY=%d,%s,%s", only_info->active,only_info->test_num,only_info->reconfig_num);
283 int err = at_send_command(cmd, &response);
284 if (err < 0 || response->success == 0){
285 *cme_err = at_get_cme_error(response);
286 goto exit;
287 }
288
289exit:
290 at_response_free(response);
291 return err;
292}
293
294/*
295AT*ECALLREG=0/1
296
297*/
298static int req_ecall_reg_set(uint8 reg, int *cme_err)
299{
300 ATResponse *response = NULL;
301 char cmd[30] = {0};
302 sprintf(cmd, "AT*ECALLREG=%d", reg);
303 int err = at_send_command(cmd, &response);
304 if (err < 0 || response->success == 0){
305 *cme_err = at_get_cme_error(response);
306 goto exit;
307 }
308
309exit:
310 at_response_free(response);
311 return err;
312}
313
314/*
315AT+CECALL?
316+CECALL: 4
317
318OK
319
320*/
321static int req_ecall_dial_state_get(mbtk_ecall_dial_type_enum *type, int *cme_err)
322{
323 ATResponse *response = NULL;
324 int tmp_int;
325 int err = at_send_command_singleline("AT+CECALL?", "+CECALL:", &response);
326
327 if (err < 0 || response->success == 0 || !response->p_intermediates){
328 *cme_err = at_get_cme_error(response);
329 goto exit;
330 }
331
332 char *line = response->p_intermediates->line;
333 err = at_tok_start(&line);
334 if (err < 0)
335 {
336 goto exit;
337 }
338
339 err = at_tok_nextint(&line, &tmp_int);
340 if (err < 0)
341 {
342 goto exit;
343 }
344 *type = (mbtk_ecall_dial_type_enum)tmp_int;
345
346 goto exit;
347exit:
348 at_response_free(response);
349 return err;
350}
351
352/*
353AT+CECALL=<ecalltype>
354OK
355*/
356static int req_ecall_dial_start(mbtk_ecall_dial_type_enum type, int *cme_err)
357{
358 ATResponse *response = NULL;
359 char cmd[1024] = {0};
360 sprintf(cmd, "AT+CECALL=%d", type);
361 int err = at_send_command(cmd, &response);
362 if (err < 0 || response->success == 0){
363 *cme_err = at_get_cme_error(response);
364 goto exit;
365 }
366
367exit:
368 at_response_free(response);
369 return err;
370}
371
372
373/*
374AT*ECALLMODE?
375*ECALLMODE: "ERA"
376
377OK
378
379*/
380static int req_ecall_mode_get(mbtk_ecall_mode_type_enum *mode, int *cme_err)
381{
382 ATResponse *response = NULL;
383 char *tmp_ptr = NULL;
384 int err = at_send_command_singleline("AT*ECALLMODE?", "*ECALLMODE:", &response);
385
386 if (err < 0 || response->success == 0 || !response->p_intermediates){
387 *cme_err = at_get_cme_error(response);
388 goto exit;
389 }
390
391 char *line = response->p_intermediates->line;
392 err = at_tok_start(&line);
393 if (err < 0)
394 {
395 goto exit;
396 }
397
398 err = at_tok_nextstr(&line, &tmp_ptr);
399 if (err < 0)
400 {
401 goto exit;
402 }
403
404 if(tmp_ptr && strlen(tmp_ptr) > 0) {
405 if(strcmp(tmp_ptr, "ERA") == 0) {
406 *mode = MBTK_ECALL_MODE_TYPE_ERA;
407 } else {
408 *mode = MBTK_ECALL_MODE_TYPE_EU;
409 }
410
411 ecall_mode = *mode;
412 } else {
413 err = -1;
414 }
415
416 goto exit;
417exit:
418 at_response_free(response);
419 return err;
420}
421
422/*
423AT*ECALLMODE="ERA"
424OK
425
426*/
427static int req_ecall_mode_set(mbtk_ecall_mode_type_enum mode, int *cme_err)
428{
429 ATResponse *response = NULL;
430 char cmd[1024] = {0};
431 if(mode == MBTK_ECALL_MODE_TYPE_EU) {
432 sprintf(cmd, "AT*ECALLMODE=\"EU\"");
433 } else {
434 sprintf(cmd, "AT*ECALLMODE=\"ERA\"");
435 }
436 int err = at_send_command(cmd, &response);
437 if (err < 0 || response->success == 0){
438 *cme_err = at_get_cme_error(response);
439 goto exit;
440 }
441
442 ecall_mode = mode;
443
444exit:
445 at_response_free(response);
446 return err;
447}
448
449/*
450AT*ECALLDATA=5,2
451*ECALLDATA: 5,2,250
452
453OK
454
455AT*ECALLTIMER?
456*ECALLTIMER: ERA mode, callback timer: 1200s, dial setup timer: 30s, NAD deregister timer: 7200s, cleardown timer: 3600s, redial attempts count: 10, redial wait timer: 30s, smsprocess: 1, SMS resend timer: 3600s, sms msd send count: 10.
457
458OK
459
460*/
b.liueea595d2024-11-05 19:52:10 +0800461static int req_ecall_cfg_get(uint32 type, mbtk_ecall_cfg_info_t *cfg, int *cme_err)
b.liu06559f62024-11-01 18:48:22 +0800462{
463 ATResponse *response = NULL;
464 char *tmp_ptr = NULL;
b.liu9e8584b2024-11-06 19:21:28 +0800465// int tmp_int;
b.liu06559f62024-11-01 18:48:22 +0800466 int err = 0;
467
468 cfg->type = type;
b.liu06559f62024-11-01 18:48:22 +0800469
b.liueea595d2024-11-05 19:52:10 +0800470 if(type & MBTK_ECALL_CFG_T3) {
471 if(cfg_ecalldata_get(MBTK_ECALL_CFG_ITEM_T3, &(cfg->data[MBTK_ECALL_CFG_ITEM_T3]), cme_err)
472 || *cme_err != MBTK_INFO_ERR_CME_NON)
473 {
474 goto exit;
475 }
b.liu9d0a70f2024-11-06 11:26:17 +0800476 cfg->data_valid[MBTK_ECALL_CFG_ITEM_T3] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800477 }
478
b.liueea595d2024-11-05 19:52:10 +0800479 if(type & MBTK_ECALL_CFG_T5) {
480 if(cfg_ecalldata_get(MBTK_ECALL_CFG_ITEM_T5, &(cfg->data[MBTK_ECALL_CFG_ITEM_T5]), cme_err)
481 || *cme_err != MBTK_INFO_ERR_CME_NON)
482 {
483 goto exit;
484 }
b.liu9d0a70f2024-11-06 11:26:17 +0800485 cfg->data_valid[MBTK_ECALL_CFG_ITEM_T5] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800486 }
487
b.liueea595d2024-11-05 19:52:10 +0800488 if(type & MBTK_ECALL_CFG_T6) {
489 if(cfg_ecalldata_get(MBTK_ECALL_CFG_ITEM_T6, &(cfg->data[MBTK_ECALL_CFG_ITEM_T6]), cme_err)
490 || *cme_err != MBTK_INFO_ERR_CME_NON)
491 {
492 goto exit;
493 }
b.liu9d0a70f2024-11-06 11:26:17 +0800494 cfg->data_valid[MBTK_ECALL_CFG_ITEM_T6] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800495 }
496
b.liueea595d2024-11-05 19:52:10 +0800497 if(type & MBTK_ECALL_CFG_T7) {
498 if(cfg_ecalldata_get(MBTK_ECALL_CFG_ITEM_T7, &(cfg->data[MBTK_ECALL_CFG_ITEM_T7]), cme_err)
499 || *cme_err != MBTK_INFO_ERR_CME_NON)
500 {
501 goto exit;
502 }
b.liu9d0a70f2024-11-06 11:26:17 +0800503 cfg->data_valid[MBTK_ECALL_CFG_ITEM_T7] = (uint8)1;
b.liueea595d2024-11-05 19:52:10 +0800504 }
505
506 if(type & MBTK_ECALL_CFG_TH) {
507 if(cfg_ecalldata_get(MBTK_ECALL_CFG_ITEM_TH, &(cfg->data[MBTK_ECALL_CFG_ITEM_TH]), cme_err)
508 || *cme_err != MBTK_INFO_ERR_CME_NON)
509 {
510 goto exit;
511 }
b.liu9d0a70f2024-11-06 11:26:17 +0800512 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TH] = (uint8)1;
b.liueea595d2024-11-05 19:52:10 +0800513 }
514
515 if(type & (MBTK_ECALL_CFG_TIMER_CALLBACK | MBTK_ECALL_CFG_TIMER_CLEARDOWN | MBTK_ECALL_CFG_TIMER_DEREG
516 | MBTK_ECALL_CFG_TIMER_DIAL | MBTK_ECALL_CFG_TIMER_REDIAL | MBTK_ECALL_CFG_TIMER_SMS
517 | MBTK_ECALL_CFG_REDIALCNT | MBTK_ECALL_CFG_SMSPROCESS | MBTK_ECALL_CFG_SMSMSDCNT)) {
518 err = at_send_command_singleline("AT*ECALLTIMER?", "*ECALLTIMER:", &response);
519 if (err < 0 || response->success == 0 || !response->p_intermediates){
520 *cme_err = at_get_cme_error(response);
521 goto exit;
522 }
523
524 char *line = response->p_intermediates->line;
525 err = at_tok_start(&line);
b.liu06559f62024-11-01 18:48:22 +0800526 if (err < 0)
527 {
528 goto exit;
529 }
530
b.liu06559f62024-11-01 18:48:22 +0800531 // *ECALLTIMER: ERA mode, callback timer: 1200s,
532 // dial setup timer: 30s, NAD deregister timer: 7200s,
533 // cleardown timer: 3600s, redial attempts count: 10,
534 // redial wait timer: 30s, smsprocess: 1, SMS resend timer: 3600s,
535 // sms msd send count: 10.
536
537 if(strstr(line, "ERA mode") != NULL) {
538 ecall_mode = MBTK_ECALL_MODE_TYPE_ERA;
539 } else {
540 ecall_mode = MBTK_ECALL_MODE_TYPE_EU;
541 }
542
b.liueea595d2024-11-05 19:52:10 +0800543 if(type & MBTK_ECALL_CFG_TIMER_CALLBACK)
b.liu06559f62024-11-01 18:48:22 +0800544 {
b.liueea595d2024-11-05 19:52:10 +0800545 if((tmp_ptr = strstr(line, "callback timer: ")) != NULL) {
546 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_CALLBACK] = (uint32)atoi(tmp_ptr + 16); // s
547 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_CALLBACK] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800548 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_CALLBACK] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800549 }
b.liueea595d2024-11-05 19:52:10 +0800550 }
551
552 if(type & MBTK_ECALL_CFG_TIMER_CLEARDOWN)
553 {
554 if((tmp_ptr = strstr(line, "cleardown timer: ")) != NULL) {
555 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_CLEARDOWN] = (uint32)atoi(tmp_ptr + 17); // s
556 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_CLEARDOWN] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800557 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_CLEARDOWN] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800558 }
b.liueea595d2024-11-05 19:52:10 +0800559 }
560
561 if(type & MBTK_ECALL_CFG_TIMER_DEREG)
562 {
563 if((tmp_ptr = strstr(line, "deregister timer: ")) != NULL) {
564 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_DEREG] = (uint32)atoi(tmp_ptr + 18); // s
565 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_DEREG] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800566 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_DEREG] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800567 }
b.liueea595d2024-11-05 19:52:10 +0800568 }
569
570 if(type & MBTK_ECALL_CFG_TIMER_DIAL)
571 {
572 if((tmp_ptr = strstr(line, "dial setup timer: ")) != NULL) {
573 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_DIAL] = (uint32)atoi(tmp_ptr + 18); // s
574 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_DIAL] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800575 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_DIAL] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800576 }
b.liueea595d2024-11-05 19:52:10 +0800577 }
578
579 if(type & MBTK_ECALL_CFG_TIMER_REDIAL)
580 {
581 if((tmp_ptr = strstr(line, "redial wait timer: ")) != NULL) {
582 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_REDIAL] = (uint32)atoi(tmp_ptr + 19); // s
583 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_REDIAL] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800584 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_REDIAL] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800585 }
b.liueea595d2024-11-05 19:52:10 +0800586 }
587
588 if(type & MBTK_ECALL_CFG_TIMER_SMS)
589 {
590 if((tmp_ptr = strstr(line, "SMS resend timer: ")) != NULL) {
591 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_SMS] = (uint32)atoi(tmp_ptr + 18);
592 cfg->data[MBTK_ECALL_CFG_ITEM_TIMER_SMS] *= 1000; // s -> ms
b.liu9d0a70f2024-11-06 11:26:17 +0800593 cfg->data_valid[MBTK_ECALL_CFG_ITEM_TIMER_SMS] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800594 }
b.liueea595d2024-11-05 19:52:10 +0800595 }
596
597 if(type & MBTK_ECALL_CFG_REDIALCNT)
598 {
599 if((tmp_ptr = strstr(line, "redial attempts count: ")) != NULL) {
600 cfg->data[MBTK_ECALL_CFG_ITEM_REDIALCNT] = (uint32)atoi(tmp_ptr + 23);
b.liu9d0a70f2024-11-06 11:26:17 +0800601 cfg->data_valid[MBTK_ECALL_CFG_ITEM_REDIALCNT] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800602 }
b.liueea595d2024-11-05 19:52:10 +0800603 }
604
605 if(type & MBTK_ECALL_CFG_SMSPROCESS)
606 {
607 if((tmp_ptr = strstr(line, "smsprocess: ")) != NULL) {
608 cfg->data[MBTK_ECALL_CFG_ITEM_SMSPROCESS] = (uint32)atoi(tmp_ptr + 12);
b.liu9d0a70f2024-11-06 11:26:17 +0800609 cfg->data_valid[MBTK_ECALL_CFG_ITEM_SMSPROCESS] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800610 }
b.liueea595d2024-11-05 19:52:10 +0800611 }
612
613 if(type & MBTK_ECALL_CFG_SMSMSDCNT)
614 {
615 if((tmp_ptr = strstr(line, "sms msd send count: ")) != NULL) {
616 cfg->data[MBTK_ECALL_CFG_ITEM_SMSMSDCNT] = (uint32)atoi(tmp_ptr + 20);
b.liu9d0a70f2024-11-06 11:26:17 +0800617 cfg->data_valid[MBTK_ECALL_CFG_ITEM_SMSMSDCNT] = (uint8)1;
b.liu06559f62024-11-01 18:48:22 +0800618 }
b.liu06559f62024-11-01 18:48:22 +0800619 }
620 }
621
622 goto exit;
623exit:
624 at_response_free(response);
625 return err;
626}
627
628/*
629AT*ECALLDATA=5,2,250
630OK
631
632AT*ECALLTIMER=dereg,300
633OK
634*/
635static int req_ecall_cfg_set(const mbtk_ecall_cfg_info_t *cfg_info, int *cme_err)
636{
b.liu06559f62024-11-01 18:48:22 +0800637 int err = 0;
b.liu06559f62024-11-01 18:48:22 +0800638 if(ecall_mode == MBTK_ECALL_MODE_TYPE_EU) {
b.liueea595d2024-11-05 19:52:10 +0800639 if((cfg_info->type & MBTK_ECALL_CFG_TIMER_REDIAL)
640 || (cfg_info->type & MBTK_ECALL_CFG_TIMER_SMS)
641 || (cfg_info->type & MBTK_ECALL_CFG_REDIALCNT)
642 || (cfg_info->type & MBTK_ECALL_CFG_SMSPROCESS)
643 || (cfg_info->type & MBTK_ECALL_CFG_SMSMSDCNT)){
b.liu06559f62024-11-01 18:48:22 +0800644 LOGW("No support for EU.");
645 return -1;
646 }
647 }
648
b.liueea595d2024-11-05 19:52:10 +0800649 if(cfg_info->type & MBTK_ECALL_CFG_T3) {
b.liu07c93c82024-11-07 15:30:02 +0800650 LOGD("MBTK_ECALL_CFG_T3");
b.liueea595d2024-11-05 19:52:10 +0800651 if(cfg_ecalldata_set(MBTK_ECALL_CFG_ITEM_T3, cfg_info->data[MBTK_ECALL_CFG_ITEM_T3], cme_err)
652 || *cme_err != MBTK_INFO_ERR_CME_NON)
b.liu06559f62024-11-01 18:48:22 +0800653 {
b.liu06559f62024-11-01 18:48:22 +0800654 goto exit;
b.liueea595d2024-11-05 19:52:10 +0800655 }
b.liu06559f62024-11-01 18:48:22 +0800656 }
657
b.liueea595d2024-11-05 19:52:10 +0800658 if(cfg_info->type & MBTK_ECALL_CFG_T5) {
b.liu07c93c82024-11-07 15:30:02 +0800659 LOGD("MBTK_ECALL_CFG_T5");
b.liueea595d2024-11-05 19:52:10 +0800660 if(cfg_ecalldata_set(MBTK_ECALL_CFG_ITEM_T5, cfg_info->data[MBTK_ECALL_CFG_ITEM_T5], cme_err)
661 || *cme_err != MBTK_INFO_ERR_CME_NON)
662 {
663 goto exit;
664 }
665 }
666
667 if(cfg_info->type & MBTK_ECALL_CFG_T6) {
b.liu07c93c82024-11-07 15:30:02 +0800668 LOGD("MBTK_ECALL_CFG_T6");
b.liueea595d2024-11-05 19:52:10 +0800669 if(cfg_ecalldata_set(MBTK_ECALL_CFG_ITEM_T6, cfg_info->data[MBTK_ECALL_CFG_ITEM_T6], cme_err)
670 || *cme_err != MBTK_INFO_ERR_CME_NON)
671 {
672 goto exit;
673 }
674 }
675
676 if(cfg_info->type & MBTK_ECALL_CFG_T7) {
b.liu07c93c82024-11-07 15:30:02 +0800677 LOGD("MBTK_ECALL_CFG_T7");
b.liueea595d2024-11-05 19:52:10 +0800678 if(cfg_ecalldata_set(MBTK_ECALL_CFG_ITEM_T7, cfg_info->data[MBTK_ECALL_CFG_ITEM_T7], cme_err)
679 || *cme_err != MBTK_INFO_ERR_CME_NON)
680 {
681 goto exit;
682 }
683 }
684
685 if(cfg_info->type & MBTK_ECALL_CFG_TH) {
b.liu07c93c82024-11-07 15:30:02 +0800686 LOGD("MBTK_ECALL_CFG_TH");
b.liueea595d2024-11-05 19:52:10 +0800687 if(cfg_ecalldata_set(MBTK_ECALL_CFG_ITEM_TH, cfg_info->data[MBTK_ECALL_CFG_ITEM_TH], cme_err)
688 || *cme_err != MBTK_INFO_ERR_CME_NON)
689 {
690 goto exit;
691 }
692 }
693
694 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_CALLBACK)
695 {
b.liu07c93c82024-11-07 15:30:02 +0800696 LOGD("MBTK_ECALL_CFG_TIMER_CALLBACK");
b.liueea595d2024-11-05 19:52:10 +0800697 if(cfg_ecalltimer_set("callback", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_CALLBACK] / 1000, cme_err)
698 || *cme_err != MBTK_INFO_ERR_CME_NON) {
699 goto exit;
700 }
701 }
702 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_CLEARDOWN)
703 {
b.liu07c93c82024-11-07 15:30:02 +0800704 LOGD("MBTK_ECALL_CFG_TIMER_CLEARDOWN");
b.liueea595d2024-11-05 19:52:10 +0800705 if(cfg_ecalltimer_set("cleardown", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_CLEARDOWN] / 1000, cme_err)
706 || *cme_err != MBTK_INFO_ERR_CME_NON) {
707 goto exit;
708 }
709 }
b.liu07c93c82024-11-07 15:30:02 +0800710 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_DEREG)
b.liueea595d2024-11-05 19:52:10 +0800711 {
b.liu07c93c82024-11-07 15:30:02 +0800712 LOGD("MBTK_ECALL_CFG_ITEM_TIMER_DEREG");
b.liueea595d2024-11-05 19:52:10 +0800713 if(cfg_ecalltimer_set("dereg", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_DEREG] / 1000, cme_err)
714 || *cme_err != MBTK_INFO_ERR_CME_NON) {
715 goto exit;
716 }
717 }
b.liu07c93c82024-11-07 15:30:02 +0800718 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_DIAL)
b.liueea595d2024-11-05 19:52:10 +0800719 {
b.liu07c93c82024-11-07 15:30:02 +0800720 LOGD("MBTK_ECALL_CFG_ITEM_TIMER_DIAL");
b.liueea595d2024-11-05 19:52:10 +0800721 if(cfg_ecalltimer_set("dial", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_DIAL] / 1000, cme_err)
722 || *cme_err != MBTK_INFO_ERR_CME_NON) {
723 goto exit;
724 }
725 }
b.liu07c93c82024-11-07 15:30:02 +0800726 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_REDIAL)
b.liueea595d2024-11-05 19:52:10 +0800727 {
b.liu07c93c82024-11-07 15:30:02 +0800728 LOGD("MBTK_ECALL_CFG_ITEM_TIMER_REDIAL");
b.liueea595d2024-11-05 19:52:10 +0800729 if(cfg_ecalltimer_set("redialtmr", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_REDIAL] / 1000, cme_err)
730 || *cme_err != MBTK_INFO_ERR_CME_NON) {
731 goto exit;
732 }
733 }
b.liu07c93c82024-11-07 15:30:02 +0800734 if(cfg_info->type & MBTK_ECALL_CFG_TIMER_SMS)
b.liueea595d2024-11-05 19:52:10 +0800735 {
b.liu07c93c82024-11-07 15:30:02 +0800736 LOGD("MBTK_ECALL_CFG_ITEM_TIMER_SMS");
b.liueea595d2024-11-05 19:52:10 +0800737 if(cfg_ecalltimer_set("sms", cfg_info->data[MBTK_ECALL_CFG_ITEM_TIMER_SMS] / 1000, cme_err)
738 || *cme_err != MBTK_INFO_ERR_CME_NON) {
739 goto exit;
740 }
741 }
b.liu07c93c82024-11-07 15:30:02 +0800742 if(cfg_info->type & MBTK_ECALL_CFG_REDIALCNT)
b.liueea595d2024-11-05 19:52:10 +0800743 {
b.liu07c93c82024-11-07 15:30:02 +0800744 LOGD("MBTK_ECALL_CFG_ITEM_REDIALCNT");
b.liueea595d2024-11-05 19:52:10 +0800745 if(cfg_ecalltimer_set("redialcnt", cfg_info->data[MBTK_ECALL_CFG_ITEM_REDIALCNT], cme_err)
746 || *cme_err != MBTK_INFO_ERR_CME_NON) {
747 goto exit;
748 }
749 }
b.liu07c93c82024-11-07 15:30:02 +0800750 if(cfg_info->type & MBTK_ECALL_CFG_SMSPROCESS)
b.liueea595d2024-11-05 19:52:10 +0800751 {
b.liu07c93c82024-11-07 15:30:02 +0800752 LOGD("MBTK_ECALL_CFG_ITEM_SMSPROCESS");
b.liueea595d2024-11-05 19:52:10 +0800753 if(cfg_ecalltimer_set("smsprocess", cfg_info->data[MBTK_ECALL_CFG_ITEM_SMSPROCESS], cme_err)
754 || *cme_err != MBTK_INFO_ERR_CME_NON) {
755 goto exit;
756 }
757 }
b.liu07c93c82024-11-07 15:30:02 +0800758 if(cfg_info->type & MBTK_ECALL_CFG_SMSMSDCNT)
b.liueea595d2024-11-05 19:52:10 +0800759 {
b.liu07c93c82024-11-07 15:30:02 +0800760 LOGD("MBTK_ECALL_CFG_ITEM_SMSMSDCNT");
b.liueea595d2024-11-05 19:52:10 +0800761 if(cfg_ecalltimer_set("smsmsdcnt", cfg_info->data[MBTK_ECALL_CFG_ITEM_SMSMSDCNT], cme_err)
762 || *cme_err != MBTK_INFO_ERR_CME_NON) {
763 goto exit;
764 }
b.liu06559f62024-11-01 18:48:22 +0800765 }
766
767exit:
b.liu06559f62024-11-01 18:48:22 +0800768 return err;
769}
770
771/*
772AT*ECALLMUTESPK=1
773OK
774
775*/
776static int req_ecall_spkmute_set(int mute, int *cme_err)
777{
778 ATResponse *response = NULL;
779 char cmd[100] = {0};
780 sprintf(cmd, "AT*ECALLMUTESPK=%d", mute);
781 int err = at_send_command(cmd, &response);
782 if (err < 0 || response->success == 0){
783 *cme_err = at_get_cme_error(response);
784 goto exit;
785 }
786
787exit:
788 at_response_free(response);
789 return err;
790}
791
792
793/*
794AT*ECALLSMSNUM?
795*ECALLSMSNUM: "18981991452"
796
797OK
798
799*/
800static int req_ecall_sms_num_get(uint8 *number, int *cme_err)
801{
802 ATResponse *response = NULL;
803 char *tmp_ptr = NULL;
804 int err = at_send_command_singleline("AT*ECALLSMSNUM?", "*ECALLSMSNUM:", &response);
805
806 if (err < 0 || response->success == 0 || !response->p_intermediates){
807 *cme_err = at_get_cme_error(response);
808 goto exit;
809 }
810
811 char *line = response->p_intermediates->line;
812 err = at_tok_start(&line);
813 if (err < 0)
814 {
815 goto exit;
816 }
817
818 err = at_tok_nextstr(&line, &tmp_ptr);
819 if (err < 0)
820 {
821 goto exit;
822 }
823
824 if(tmp_ptr && strlen(tmp_ptr) > 0) {
825 memcpy(number, tmp_ptr, strlen(tmp_ptr));
826 }
827
828 goto exit;
829exit:
830 at_response_free(response);
831 return err;
832}
833
834/*
835AT*ECALLSMSNUM=18981991452
836OK
837
838*/
839static int req_ecall_sms_num_set(const uint8 *number, int *cme_err)
840{
841 ATResponse *response = NULL;
842 char cmd[100] = {0};
843 sprintf(cmd, "AT*ECALLSMSNUM=%s", number);
844 int err = at_send_command(cmd, &response);
845 if (err < 0 || response->success == 0){
846 *cme_err = at_get_cme_error(response);
847 goto exit;
848 }
849
850exit:
851 at_response_free(response);
852 return err;
853}
854
855/*
856AT*AUDGAIN=8,1 // Set Rx voice gain = 8dB
857OK
858
859*/
860static int req_ecall_gain_set(mbtk_ecall_gain_info_t *gain, int *cme_err)
861{
862 ATResponse *response = NULL;
863 char cmd[100] = {0};
864 sprintf(cmd, "AT*AUDGAIN=%d,%d", gain->gain, gain->mode);
865 int err = at_send_command(cmd, &response);
866 if (err < 0 || response->success == 0){
867 *cme_err = at_get_cme_error(response);
868 goto exit;
869 }
870
871exit:
872 at_response_free(response);
873 return err;
874}
875
876//void net_list_free(void *data);
877// Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
878// Otherwise, do not call pack_error_send().
879mbtk_info_err_enum ecall_pack_req_process(sock_client_info_t* cli_info, mbtk_info_pack_t* pack)
880{
881 mbtk_info_err_enum err = MBTK_INFO_ERR_SUCCESS;
882 int cme_err = MBTK_INFO_ERR_CME_NON;
883 switch(pack->info_id)
884 {
885 case RIL_MSG_ID_ECALL_MSDCFG_REQ: // mbtk_ecall_msd_cfg_info_t
886 {
887 if(pack->data_len == 0 || pack->data == NULL)
888 {
889 err = MBTK_INFO_ERR_UNSUPPORTED;
890 }
891 else // Set
892 {
893 mbtk_ecall_msd_cfg_info_t *cfg_info = (mbtk_ecall_msd_cfg_info_t*)(pack->data);
894 if(req_ecall_msdcfg(cfg_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
895 {
896 if(cme_err != MBTK_INFO_ERR_CME_NON) {
897 err = MBTK_INFO_ERR_CME + cme_err;
898 } else {
899 err = MBTK_INFO_ERR_UNKNOWN;
900 }
901 LOG("AT*ECALLMSDCFG fail.");
902 }
903 else
904 {
905 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MSDCFG_RSP, NULL, 0);
906 }
907 }
908 break;
909 }
910 case RIL_MSG_ID_ECALL_MSDGEN_REQ:
911 {
912 if(pack->data_len == 0 || pack->data == NULL)
913 {
914 if(req_ecall_msdgen(&cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
915 {
916 if(cme_err != MBTK_INFO_ERR_CME_NON) {
917 err = MBTK_INFO_ERR_CME + cme_err;
918 } else {
919 err = MBTK_INFO_ERR_UNKNOWN;
920 }
921 LOG("AT*ECALLMSDGEN fail.");
922 }
923 else
924 {
925 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MSDGEN_RSP, NULL, 0);
926 }
927 }
928 else // Set
929 {
930 err = MBTK_INFO_ERR_UNSUPPORTED;
931 }
932 break;
933 }
934 case RIL_MSG_ID_ECALL_MSD_REQ: // uint8[]
935 {
936 uint8 msd[MBTK_ECALL_MSD_LEN_MAX];
937 memset(msd, 0, sizeof(msd));
938 if(pack->data_len == 0 || pack->data == NULL)
939 {
940 if(req_ecall_msd_get(msd, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
941 {
942 if(cme_err != MBTK_INFO_ERR_CME_NON) {
943 err = MBTK_INFO_ERR_CME + cme_err;
944 } else {
945 err = MBTK_INFO_ERR_UNKNOWN;
946 }
947 LOG("Get MSD fail.");
948 }
949 else
950 {
b.liu9e8584b2024-11-06 19:21:28 +0800951 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MSD_RSP, msd, strlen((char*)msd));
b.liu06559f62024-11-01 18:48:22 +0800952 }
953 }
954 else // Set
955 {
956 memcpy(msd, pack->data, pack->data_len);
957 if(req_ecall_msd_set(msd, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
958 {
959 if(cme_err != MBTK_INFO_ERR_CME_NON) {
960 err = MBTK_INFO_ERR_CME + cme_err;
961 } else {
962 err = MBTK_INFO_ERR_UNKNOWN;
963 }
964 LOG("AT*ECALLMSD fail.");
965 }
966 else
967 {
968 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MSD_RSP, NULL, 0);
969 }
970 }
971 break;
972 }
973 case RIL_MSG_ID_ECALL_PUSH_REQ:
974 {
975 if(pack->data_len == 0 || pack->data == NULL)
976 {
977 if(req_ecall_push(&cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
978 {
979 if(cme_err != MBTK_INFO_ERR_CME_NON) {
980 err = MBTK_INFO_ERR_CME + cme_err;
981 } else {
982 err = MBTK_INFO_ERR_UNKNOWN;
983 }
984 LOG("AT*ECALLPUSH fail.");
985 }
986 else
987 {
988 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_PUSH_RSP, NULL, 0);
989 }
990 }
991 else // Set
992 {
993 err = MBTK_INFO_ERR_UNSUPPORTED;
994 }
995 break;
996 }
997 case RIL_MSG_ID_ECALL_ONLY_REQ: // mbtk_ecall_only_info_t
998 {
999 if(pack->data_len == 0 || pack->data == NULL)
1000 {
1001 mbtk_ecall_only_info_t only_info;
1002 memset(&only_info, 0, sizeof(mbtk_ecall_only_info_t));
1003 if(req_ecall_only_get(&only_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1004 {
1005 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1006 err = MBTK_INFO_ERR_CME + cme_err;
1007 } else {
1008 err = MBTK_INFO_ERR_UNKNOWN;
1009 }
1010 LOG("Get ecall only mode fail.");
1011 }
1012 else
1013 {
1014 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_ONLY_RSP, &only_info, sizeof(mbtk_ecall_only_info_t));
1015 }
1016 }
1017 else // Set
1018 {
1019 mbtk_ecall_only_info_t *only_info = (mbtk_ecall_only_info_t*)(pack->data);
1020 if(req_ecall_only_set(only_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1021 {
1022 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1023 err = MBTK_INFO_ERR_CME + cme_err;
1024 } else {
1025 err = MBTK_INFO_ERR_UNKNOWN;
1026 }
1027 LOG("AT*ECALLONLY fail.");
1028 }
1029 else
1030 {
1031 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_ONLY_RSP, NULL, 0);
1032 }
1033 }
1034 break;
1035 }
1036 case RIL_MSG_ID_ECALL_REG_REQ: // reg <uint8>
1037 {
1038 if(pack->data_len == 0 || pack->data == NULL)
1039 {
1040 err = MBTK_INFO_ERR_UNSUPPORTED;
1041 }
1042 else
1043 {
1044 uint8 reg = pack->data[0];
1045 if(req_ecall_reg_set(reg, &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("ecall reg(%d) fail.", reg);
1053 }
1054 else
1055 {
1056 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_REG_RSP, NULL, 0);
1057 }
1058 }
1059 break;
1060 }
1061 case RIL_MSG_ID_ECALL_DIAL_REQ: // mbtk_ecall_dial_type_enum
1062 {
1063 if(pack->data_len == 0 || pack->data == NULL)
1064 {
1065 mbtk_ecall_dial_type_enum type;
1066 if(req_ecall_dial_state_get(&type, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1067 {
1068 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1069 err = MBTK_INFO_ERR_CME + cme_err;
1070 } else {
1071 err = MBTK_INFO_ERR_UNKNOWN;
1072 }
1073 LOG("Get ecall type fail.");
1074 }
1075 else
1076 {
1077 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_DIAL_RSP, &type, sizeof(uint8));
1078 }
1079 }
1080 else
1081 {
1082 mbtk_ecall_dial_type_enum type = (mbtk_ecall_dial_type_enum)pack->data[0];
1083 if(req_ecall_dial_start(type, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1084 {
1085 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1086 err = MBTK_INFO_ERR_CME + cme_err;
1087 } else {
1088 err = MBTK_INFO_ERR_UNKNOWN;
1089 }
1090 LOG("Start ecall %d fail.", type);
1091 }
1092 else
1093 {
1094 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_DIAL_RSP, NULL, 0);
1095 }
1096 }
1097 break;
1098 }
1099 case RIL_MSG_ID_ECALL_MODE_REQ: // mbtk_ecall_cfg_item_enum / mbtk_ecall_cfg_info_t
1100 {
1101 if(pack->data_len == 0 || pack->data == NULL)
1102 {
1103 mbtk_ecall_mode_type_enum mode;
1104 if(req_ecall_mode_get(&mode, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1105 {
1106 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1107 err = MBTK_INFO_ERR_CME + cme_err;
1108 } else {
1109 err = MBTK_INFO_ERR_UNKNOWN;
1110 }
1111 LOG("Get ecall mode fail.");
1112 }
1113 else
1114 {
1115 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MODE_RSP, &mode, sizeof(uint8));
1116 }
1117 }
1118 else
1119 {
1120 mbtk_ecall_mode_type_enum mode = (mbtk_ecall_mode_type_enum)pack->data[0];
1121 if(req_ecall_mode_set(mode, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1122 {
1123 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1124 err = MBTK_INFO_ERR_CME + cme_err;
1125 } else {
1126 err = MBTK_INFO_ERR_UNKNOWN;
1127 }
1128 LOG("Set ecall mode %d fail.", mode);
1129 }
1130 else
1131 {
1132 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MODE_RSP, NULL, 0);
1133 }
1134 }
1135 break;
1136 }
1137 case RIL_MSG_ID_ECALL_CFG_REQ: // mbtk_ecall_cfg_item_enum / mbtk_ecall_cfg_info_t
1138 {
1139 if(pack->data_len == 0 || pack->data == NULL)
1140 {
1141 err = MBTK_INFO_ERR_UNSUPPORTED;
1142 }
1143 else
1144 {
1145 if(pack->data_len == sizeof(mbtk_ecall_cfg_info_t)) { // Set
1146 mbtk_ecall_cfg_info_t *cfg_info = (mbtk_ecall_cfg_info_t*)pack->data;
1147 if(req_ecall_cfg_set(cfg_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1148 {
1149 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1150 err = MBTK_INFO_ERR_CME + cme_err;
1151 } else {
1152 err = MBTK_INFO_ERR_UNKNOWN;
1153 }
b.liueea595d2024-11-05 19:52:10 +08001154 LOG("Set ecall config[%x] fail.", cfg_info->type);
b.liu06559f62024-11-01 18:48:22 +08001155 }
1156 else
1157 {
1158 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_CFG_RSP, NULL, 0);
1159 }
1160 } else { // Get
1161 mbtk_ecall_cfg_info_t cfg_info;
1162 memset(&cfg_info, 0, sizeof(mbtk_ecall_cfg_info_t));
b.liueea595d2024-11-05 19:52:10 +08001163 uint32 *type = (uint32*)(pack->data);
1164 if(req_ecall_cfg_get(*type, &cfg_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
b.liu06559f62024-11-01 18:48:22 +08001165 {
1166 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1167 err = MBTK_INFO_ERR_CME + cme_err;
1168 } else {
1169 err = MBTK_INFO_ERR_UNKNOWN;
1170 }
b.liueea595d2024-11-05 19:52:10 +08001171 LOG("Get ecall config[%x] fail.", *type);
b.liu06559f62024-11-01 18:48:22 +08001172 }
1173 else
1174 {
1175 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_CFG_RSP, &cfg_info, sizeof(mbtk_ecall_cfg_info_t));
1176 }
1177 }
1178 }
1179 break;
1180 }
1181 case RIL_MSG_ID_ECALL_SMS_NUM_REQ: // uint8[]
1182 {
1183 uint8 number[RIL_MAX_NUMBER_LEN];
1184 memset(number, 0, sizeof(number));
1185 if(pack->data_len == 0 || pack->data == NULL)
1186 {
b.liu9e8584b2024-11-06 19:21:28 +08001187 if(req_ecall_sms_num_get(number, &cme_err) || strlen((char*)number) == 0 || cme_err != MBTK_INFO_ERR_CME_NON)
b.liu06559f62024-11-01 18:48:22 +08001188 {
1189 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1190 err = MBTK_INFO_ERR_CME + cme_err;
1191 } else {
1192 err = MBTK_INFO_ERR_UNKNOWN;
1193 }
1194 LOG("Get ecall sms number fail.");
1195 }
1196 else
1197 {
b.liu9e8584b2024-11-06 19:21:28 +08001198 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_SMS_NUM_RSP, number, strlen((char*)number));
b.liu06559f62024-11-01 18:48:22 +08001199 }
1200 }
1201 else // Set
1202 {
1203 memcpy(number, pack->data, pack->data_len);
1204 if(req_ecall_sms_num_set(number, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1205 {
1206 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1207 err = MBTK_INFO_ERR_CME + cme_err;
1208 } else {
1209 err = MBTK_INFO_ERR_UNKNOWN;
1210 }
1211 LOG("Set ecall sms number fail.");
1212 }
1213 else
1214 {
1215 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_SMS_NUM_RSP, NULL, 0);
1216 }
1217 }
1218 break;
1219 }
1220 case RIL_MSG_ID_ECALL_MUTESPK_REQ:
1221 {
1222 if(pack->data_len == 0 || pack->data == NULL)
1223 {
1224 err = MBTK_INFO_ERR_UNSUPPORTED;
1225 }
1226 else // Set mute state.
1227 {
1228 uint8 mute = pack->data[0];
1229 if(pack->data_len != sizeof(uint8) || (mute != 0 && mute != 1))
1230 {
1231 err = MBTK_INFO_ERR_REQ_PARAMETER;
1232 LOG("Set spk mute parameter error.");
1233 break;
1234 }
1235
1236 if(req_ecall_spkmute_set(mute, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1237 {
1238 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1239 err = MBTK_INFO_ERR_CME + cme_err;
1240 } else {
1241 err = MBTK_INFO_ERR_UNKNOWN;
1242 }
1243 LOG("Set spk mute state fail.");
1244 }
1245 else
1246 {
1247 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_MUTESPK_RSP, NULL, 0);
1248 }
1249 }
1250 break;
1251 }
1252 case RIL_MSG_ID_ECALL_DSP_GAIN_REQ: // mbtk_ecall_gain_info_t
1253 {
1254 if(pack->data_len == 0 || pack->data == NULL)
1255 {
1256 err = MBTK_INFO_ERR_UNSUPPORTED;
1257 }
1258 else // Set
1259 {
1260 mbtk_ecall_gain_info_t *gain_info = (mbtk_ecall_gain_info_t *)pack->data;
1261 if(req_ecall_gain_set(gain_info, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
1262 {
1263 if(cme_err != MBTK_INFO_ERR_CME_NON) {
1264 err = MBTK_INFO_ERR_CME + cme_err;
1265 } else {
1266 err = MBTK_INFO_ERR_UNKNOWN;
1267 }
1268 LOGE("Set ecall gain fail.");
1269 }
1270 else
1271 {
1272 pack_rsp_send(cli_info->fd, RIL_MSG_ID_ECALL_DSP_GAIN_RSP, NULL, 0);
1273 }
1274 }
1275 break;
1276 }
1277 default:
1278 {
1279 err = MBTK_INFO_ERR_REQ_UNKNOWN;
1280 LOG("Unknown request : %s", id2str(pack->info_id));
1281 break;
1282 }
1283 }
1284
1285 return err;
1286}
1287
1288
1289