blob: 763ed412f9ca78ef62ea33a1619c7fe563716f9e [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
b.liub171c9a2024-11-12 19:23:29 +080020void ril_rsp_pack_send(ATPortType_enum port, int fd, int ril_id, int msg_index, const void* data, int data_len);
b.liu87afc4c2024-08-14 17:33:45 +080021
22/*
23AT+CGSN
24864788050901201
25
26OK
27*/
b.liub171c9a2024-11-12 19:23:29 +080028static int req_imei_get(ATPortType_enum port, void *data, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +080029{
30 ATResponse *response = NULL;
b.liub171c9a2024-11-12 19:23:29 +080031 int err = at_send_command_numeric(port, "AT+CGSN", &response);
b.liu87afc4c2024-08-14 17:33:45 +080032
33 if (err < 0 || response->success == 0 || !response->p_intermediates) {
34 *cme_err = at_get_cme_error(response);
35 goto exit;
36 }
37
38 memcpy(data, response->p_intermediates->line, strlen(response->p_intermediates->line));
39exit:
40 at_response_free(response);
41 return err;
42}
43
44/*
45AT+MRD_SN=R
46+MRD_SN:0101,Thu Nov 12 00:00:00 2020,G4M32301020006
47
48OK
49
50*/
b.liub171c9a2024-11-12 19:23:29 +080051static int req_sn_get(ATPortType_enum port, void *data, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +080052{
53 ATResponse *response = NULL;
54 char *tmp_ptr = NULL;
b.liub171c9a2024-11-12 19:23:29 +080055 int err = at_send_command_singleline(port, "AT+MRD_SN=R", "+MRD_SN:", &response);
b.liu87afc4c2024-08-14 17:33:45 +080056
57 if (err < 0 || response->success == 0 || !response->p_intermediates){
58 *cme_err = at_get_cme_error(response);
59 goto exit;
60 }
61
62 char *line = response->p_intermediates->line;
63 err = at_tok_start(&line);
64 if (err < 0)
65 {
66 goto exit;
67 }
68
69 err = at_tok_nextstr(&line, &tmp_ptr);
70 if (err < 0)
71 {
72 goto exit;
73 }
74
75 err = at_tok_nextstr(&line, &tmp_ptr);
76 if (err < 0)
77 {
78 goto exit;
79 }
80
81 err = at_tok_nextstr(&line, &tmp_ptr);
82 if (err < 0)
83 {
84 goto exit;
85 }
86
87 memcpy(data, tmp_ptr, strlen(tmp_ptr));
88
89 goto exit;
90exit:
91 at_response_free(response);
92 return err;
93}
94
95/*
96ATI
97Manufacturer:"LYNQ"
98Model:"LYNQ_L508TLC"
99Revision:L508TLCv02.01b01.00
100IMEI:864788050901201
101
102OK
103
104*/
b.liub171c9a2024-11-12 19:23:29 +0800105static int req_version_get(ATPortType_enum port, void *data, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800106{
107 ATResponse *response = NULL;
b.liu6917e9b2025-03-26 17:23:11 +0800108
109// sleep(3);
110
b.liub171c9a2024-11-12 19:23:29 +0800111 int err = at_send_command_multiline(port, "ATI", "", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800112
113 if (err < 0 || response->success == 0 || !response->p_intermediates){
114 *cme_err = at_get_cme_error(response);
115 goto exit;
116 }
117
118 ATLine* lines_ptr = response->p_intermediates;
119 char *line = NULL;
120 while(lines_ptr)
121 {
122 line = lines_ptr->line;
123 if(strStartsWith(line, "Revision"))
124 {
125 err = at_tok_start(&line);
126 if (err < 0)
127 {
128 goto exit;
129 }
130 memcpy(data, line, strlen(line));
131 break;
132 }
133 lines_ptr = lines_ptr->p_next;
134 }
135
136 goto exit;
137exit:
138 at_response_free(response);
139 return err;
140}
141
142/*
143ATI
144Manufacturer:"LYNQ"
145Model:"LYNQ_L508TLC"
146Revision:L508TLCv02.01b01.00
147IMEI:864788050901201
148
149OK
150
151*/
b.liub171c9a2024-11-12 19:23:29 +0800152static int req_model_get(ATPortType_enum port, void *data, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800153{
154 ATResponse *response = NULL;
b.liub171c9a2024-11-12 19:23:29 +0800155 int err = at_send_command_multiline(port, "ATI", "", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800156
157 if (err < 0 || response->success == 0 || !response->p_intermediates){
158 *cme_err = at_get_cme_error(response);
159 goto exit;
160 }
161
162 ATLine* lines_ptr = response->p_intermediates;
163 char *line = NULL;
164 while(lines_ptr)
165 {
166 line = lines_ptr->line;
167 if(strStartsWith(line, "Model"))
168 {
169 err = at_tok_start(&line);
170 if (err < 0)
171 {
172 goto exit;
173 }
174 memcpy(data, line, strlen(line));
175 break;
176 }
177 lines_ptr = lines_ptr->p_next;
178 }
179
180 goto exit;
181exit:
182 at_response_free(response);
183 return err;
184}
185
186/*
187AT+ACONFIG="IMSD=1"
188or
189AT+ACONFIG="IMSD=0"
190
191OK
192*/
b.liub171c9a2024-11-12 19:23:29 +0800193static int req_volte_set(ATPortType_enum port, int state, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800194{
195 ATResponse *response = NULL;
196 char cmd[30] = {0};
197 if(state)
198 {
199 strcpy(cmd, "AT+ACONFIG=\"IMSD=1\"");
200 }
201 else
202 {
203 strcpy(cmd, "AT+ACONFIG=\"IMSD=0\"");
204 }
b.liub171c9a2024-11-12 19:23:29 +0800205 int err = at_send_command(port, cmd, &response);
b.liu87afc4c2024-08-14 17:33:45 +0800206
207 if (err < 0 || response->success == 0) {
208 *cme_err = at_get_cme_error(response);
209 goto exit;
210 }
211
212 err = 0;
213exit:
214 at_response_free(response);
215 return err;
216}
217
218/*
219AT+ACONFIG?
220PID=0,VID=0,IMSD=1,PIPE=0,FAST=0,RDUP=1,NOCP=0,GEFL=-1237040617
221
222OK
223*/
b.liub171c9a2024-11-12 19:23:29 +0800224static int req_volte_get(ATPortType_enum port, int *state, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800225{
226 ATResponse *response = NULL;
b.liu62240ee2024-11-07 17:52:45 +0800227// char *tmp_ptr = NULL;
b.liub171c9a2024-11-12 19:23:29 +0800228 int err = at_send_command_singleline(port, "AT+ACONFIG?", "", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800229
230 if (err < 0 || response->success == 0 || !response->p_intermediates){
231 *cme_err = at_get_cme_error(response);
232 goto exit;
233 }
234
235 char *line = response->p_intermediates->line;
236 char* ptr = strstr(line, "IMSD=");
237 if(ptr)
238 {
239 *state = atoi(ptr + strlen("IMSD="));
240 }
241 else
242 {
243 err = -1;
244 }
245exit:
246 at_response_free(response);
247 return err;
248}
249
250
251/*
252* Get system temperature.
253*
254* type[IN]:
255* 0: Soc temperature.
256* 1: RF temperature.
257* temp[OUT]:
258* temperature in celsius.
259*
260
261AT*RFTEMP
262*RFTEMP:0,28
263OK
264
265AT*SOCTEMP
266*SOCTEMP:24000
267OK
268
269*/
b.liub171c9a2024-11-12 19:23:29 +0800270static int req_temp_get(ATPortType_enum port, mbtk_temp_type_enum type, int16 *temp, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800271{
272 ATResponse *response = NULL;
273 int err = -1;
274 int tmp_int;
275 if(type == MBTK_TEMP_TYPE_SOC) { // Soc
b.liub171c9a2024-11-12 19:23:29 +0800276 err = at_send_command_singleline(port, "AT*SOCTEMP", "*SOCTEMP:", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800277 } else { // RF
b.liub171c9a2024-11-12 19:23:29 +0800278 err = at_send_command_singleline(port, "AT*RFTEMP", "*RFTEMP:", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800279 }
280
281 if (err < 0 || response->success == 0 || !response->p_intermediates){
282 *cme_err = at_get_cme_error(response);
283 goto exit;
284 }
285
286 char *line = response->p_intermediates->line;
287 err = at_tok_start(&line);
288 if (err < 0)
289 {
290 goto exit;
291 }
292 err = at_tok_nextint(&line, &tmp_int);
293 if (err < 0)
294 {
295 goto exit;
296 }
297
298 if(type == MBTK_TEMP_TYPE_RF) { // RF
299 err = at_tok_nextint(&line, &tmp_int);
300 if (err < 0)
301 {
302 goto exit;
303 }
304 *temp = (int16)tmp_int;
305 } else {
306 tmp_int = tmp_int / 1000;
307 *temp = (int16)tmp_int;
308 }
309
310exit:
311 at_response_free(response);
312 return err;
313}
314
315/*
316AT+CCLK?
317+CCLK: "23/03/20,01:58:00+32"
318
319OK
320
321*/
b.liub171c9a2024-11-12 19:23:29 +0800322static int req_cell_time_get(ATPortType_enum port, char *data, int *cme_err)
b.liu87afc4c2024-08-14 17:33:45 +0800323{
324 ATResponse *response = NULL;
325 char *tmp_ptr = NULL;
b.liub171c9a2024-11-12 19:23:29 +0800326 int err = at_send_command_singleline(port, "AT+CCLK?", "+CCLK:", &response);
b.liu87afc4c2024-08-14 17:33:45 +0800327
328 if (err < 0 || response->success == 0 || !response->p_intermediates){
329 *cme_err = at_get_cme_error(response);
330 goto exit;
331 }
332
333 char *line = response->p_intermediates->line;
334 err = at_tok_start(&line);
335 if (err < 0)
336 {
337 goto exit;
338 }
339 err = at_tok_nextstr(&line, &tmp_ptr);
340 if (err < 0)
341 {
342 goto exit;
343 }
344 memcpy(data, tmp_ptr, strlen(tmp_ptr));
345
346exit:
347 at_response_free(response);
348 return err;
349}
350
351/*
3520: minimum functionality
3531: full functionality
3543: disable phone receive RF circuits.
3554: disable phone both transmit and receive RF circuits
3565: disable SIM
3576: turn off full secondary receive.
358-1: fail
359*/
b.liub171c9a2024-11-12 19:23:29 +0800360mbtk_radio_state_enum ril_radio_state_get(ATPortType_enum port)
b.liu87afc4c2024-08-14 17:33:45 +0800361{
362 ATResponse *p_response = NULL;
363 int err;
364 char *line;
365 int ret;
366
b.liub171c9a2024-11-12 19:23:29 +0800367 err = at_send_command_singleline(port, "AT+CFUN?", "+CFUN:", &p_response);
b.liu87afc4c2024-08-14 17:33:45 +0800368
369 if (err < 0 || p_response->success == 0 || !p_response->p_intermediates)
370 {
371 // assume radio is off
372 goto done;
373 }
374
375 line = p_response->p_intermediates->line;
376
377 err = at_tok_start(&line);
378 if (err < 0) goto done;
379
380 err = at_tok_nextint(&line, &ret);
381 if (err < 0) goto done;
382
383 at_response_free(p_response);
384
385 ril_info.radio_state = (mbtk_radio_state_enum)ret;
386
387 return ril_info.radio_state;
388done:
389 at_response_free(p_response);
390 return MBTK_RADIO_STATE_UNKNOWN;
391}
392
b.liub171c9a2024-11-12 19:23:29 +0800393mbtk_ril_err_enum ril_radio_state_set(ATPortType_enum port, mbtk_radio_state_enum state, bool reset)
b.liu87afc4c2024-08-14 17:33:45 +0800394{
395 int err;
396 ATResponse *p_response = NULL;
397 mbtk_ril_err_enum ret = MBTK_RIL_ERR_UNKNOWN;
398
399 if(state == ril_info.radio_state) {
400 LOGE("Radio state is same.");
401 //return MBTK_RIL_ERR_PARAMETER;
402 return MBTK_RIL_ERR_SUCCESS;
403 }
404
405 LOGI("Set radio state - %d", state);
406
407 char cmd[64] = {0};
408 if(reset) {
409 snprintf(cmd, sizeof(cmd), "AT+CFUN=%d,1", state);
410 } else {
411 snprintf(cmd, sizeof(cmd), "AT+CFUN=%d", state);
412 }
b.liub171c9a2024-11-12 19:23:29 +0800413 err = at_send_command(port, cmd, &p_response);
b.liu87afc4c2024-08-14 17:33:45 +0800414 if (err || !p_response->success) {
415 goto done;
416 }
417
418 if(state == MBTK_RADIO_STATE_FULL_FUNC) { // +CFUN=1
b.liub171c9a2024-11-12 19:23:29 +0800419 if(ril_radio_state_get(port) == MBTK_RADIO_STATE_FULL_FUNC) { // success
b.liu87afc4c2024-08-14 17:33:45 +0800420 ril_info.radio_state = MBTK_RADIO_STATE_FULL_FUNC;
421 ret = MBTK_RIL_ERR_SUCCESS;
422 LOGD("Radio open success.");
423 } else {
424 LOGW("Radio open fail.");
425 }
426 } else {
427 ril_info.radio_state = state;
428 ret = MBTK_RIL_ERR_SUCCESS;
429 LOGD("Set radio state to %d success.", state);
430 }
431
432done:
433 at_response_free(p_response);
434 return ret;
435}
436
b.liu9c19cc62024-11-28 09:43:02 +0800437/*
438AT*POWERIND=0"
439or
440AT*POWERIND=1~31"
441
442OK
443
b.liu2d7a5e42024-11-28 09:46:03 +0800444AT*POWERIND=31,就相当于设置NETWORK、SIM、SMS、CS CALL、PS DATA变化时都不主动上报,
445其中PS DATA目前暂时不支持,只是保留了这个标志位,0 means resume all.
b.liu9c19cc62024-11-28 09:43:02 +0800446
447AP power state: 1~31 means suspend,
448bitmap:
449bit0 - NETWORK;
450bit1 - SIM;
451bit2 - SMS;
452bit3 - CS CALL
453bit4 - PS DATA
454
455*/
456static int req_powerind_set(ATPortType_enum port, uint8 state, int *cme_err)
457{
458 ATResponse *response = NULL;
459 int err = -1;
460
461 if (state >= 0 && state < 32)
462 {
463 char cmd[100] = {0};
464 sprintf(cmd, "AT*POWERIND=%d", state);
b.liu2d7a5e42024-11-28 09:46:03 +0800465 err = at_send_command(port, cmd, &response);
b.liu9c19cc62024-11-28 09:43:02 +0800466 if (err < 0 || response->success == 0){
467 *cme_err = at_get_cme_error(response);
468 goto exit;
469 }
470 }
471
472exit:
473 at_response_free(response);
474 return err;
475}
476
b.liu7d102f82025-03-26 18:30:21 +0800477static int req_md_version_get(ATPortType_enum port,void *data, int *cme_err)
478{
479 ATResponse *response = NULL;
480 int err = at_send_command_multiline(port,"AT*CGMR", "", &response);
481
482 if (err < 0 || response->success == 0 || !response->p_intermediates)
483 {
484 *cme_err = at_get_cme_error(response);
485 goto exit;
486 }
487
488 ATLine* lines_ptr = response->p_intermediates;
489 char *line = NULL;
490 while(lines_ptr)
491 {
492 line = lines_ptr->line;
493 char *start = strstr(line, "FALCON_CP_SDK");
494 if(start)
495 {
496 char *end = strstr(start, "_Linux");
497 if(end)
498 {
499 end += strlen("_Linux");
500 int length = end - start;
501 if (length)
502 {
503 strncpy(data, start, length);
504 ((char*)data)[length] = '\0';
505 break;
506 }
507 else
508 {
509 err = -1;
510 goto exit;
511
512 }
513 }
514 else
515 {
516 err = -1;
517 goto exit;
518 }
519 }
520 lines_ptr = lines_ptr->p_next;
521 }
522
523 goto exit;
524exit:
525 at_response_free(response);
526 return err;
527}
528
b.liu87afc4c2024-08-14 17:33:45 +0800529
530//void net_list_free(void *data);
531// Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
532// Otherwise, do not call pack_error_send().
533mbtk_ril_err_enum dev_pack_req_process(sock_cli_info_t* cli_info, ril_msg_pack_info_t* pack)
534{
535 mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
536 int cme_err = MBTK_RIL_ERR_CME_NON;
537 switch(pack->msg_id)
538 {
539 case RIL_MSG_ID_DEV_IMEI:
540 {
541 if(pack->data_len == 0 || pack->data == NULL) // Get IMEI
542 {
543 char imei[20] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800544 if(req_imei_get(cli_info->port, imei, &cme_err) || strlen(imei) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800545 {
546 if(cme_err != MBTK_RIL_ERR_CME_NON) {
547 err = MBTK_RIL_ERR_CME + cme_err;
548 } else {
549 err = MBTK_RIL_ERR_UNKNOWN;
550 }
551 LOG("Get IMEI fail.");
552 }
553 else
554 {
b.liub171c9a2024-11-12 19:23:29 +0800555 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, imei, strlen(imei));
b.liu87afc4c2024-08-14 17:33:45 +0800556 }
557 }
558 else // Set IMEI(Unsupport).
559 {
560 err = MBTK_RIL_ERR_UNSUPPORTED;
561 LOG("Unsupport set IMEI.");
562 }
563 break;
564 }
565 case RIL_MSG_ID_DEV_SN:
566 {
567 if(pack->data_len == 0 || pack->data == NULL)
568 {
569 char sn[20] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800570 if(req_sn_get(cli_info->port, sn, &cme_err) || strlen(sn) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800571 {
572 if(cme_err != MBTK_RIL_ERR_CME_NON) {
573 err = MBTK_RIL_ERR_CME + cme_err;
574 } else {
575 err = MBTK_RIL_ERR_UNKNOWN;
576 }
577 LOG("Get SN fail.");
578 }
579 else
580 {
b.liub171c9a2024-11-12 19:23:29 +0800581 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, sn, strlen(sn));
b.liu87afc4c2024-08-14 17:33:45 +0800582 }
583 }
584 else // Set
585 {
586 err = MBTK_RIL_ERR_UNSUPPORTED;
587 LOG("Unsupport set SN.");
588 }
589 break;
590 }
591 case RIL_MSG_ID_DEV_MEID:
592 {
593 if(pack->data_len == 0 || pack->data == NULL)
594 {
595 err = MBTK_RIL_ERR_UNSUPPORTED;
596 LOG("Support only for CDMA.");
597 }
598 else // Set
599 {
600 err = MBTK_RIL_ERR_UNSUPPORTED;
601 LOG("Unsupport set MEID.");
602 }
603 break;
604 }
605 case RIL_MSG_ID_DEV_VERSION:
606 {
607 if(pack->data_len == 0 || pack->data == NULL)
608 {
609 char version[50] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800610 if(req_version_get(cli_info->port, version, &cme_err) || strlen(version) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800611 {
612 if(cme_err != MBTK_RIL_ERR_CME_NON) {
613 err = MBTK_RIL_ERR_CME + cme_err;
614 } else {
615 err = MBTK_RIL_ERR_UNKNOWN;
616 }
617 LOG("Get Version fail.");
618 }
619 else
620 {
b.liub171c9a2024-11-12 19:23:29 +0800621 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, version, strlen(version));
b.liu87afc4c2024-08-14 17:33:45 +0800622 }
623 }
624 else // Set
625 {
626 err = MBTK_RIL_ERR_UNSUPPORTED;
627 LOG("Unsupport set Version.");
628 }
629 break;
630 }
631 case RIL_MSG_ID_DEV_MODEL:
632 {
633 if(pack->data_len == 0 || pack->data == NULL)
634 {
635 char model[50] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800636 if(req_model_get(cli_info->port, model, &cme_err) || strlen(model) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800637 {
638 if(cme_err != MBTK_RIL_ERR_CME_NON) {
639 err = MBTK_RIL_ERR_CME + cme_err;
640 } else {
641 err = MBTK_RIL_ERR_UNKNOWN;
642 }
643 LOG("Get Version fail.");
644 }
645 else
646 {
b.liub171c9a2024-11-12 19:23:29 +0800647 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, model, strlen(model));
b.liu87afc4c2024-08-14 17:33:45 +0800648 }
649 }
650 else // Set
651 {
652 err = MBTK_RIL_ERR_UNSUPPORTED;
653 LOG("Unsupport set Model.");
654 }
655 break;
656 }
657 case RIL_MSG_ID_DEV_VOLTE: // <uint8> 0:Close 1:Open
658 {
659 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
660 {
661 int state;
b.liub171c9a2024-11-12 19:23:29 +0800662 if(req_volte_get(cli_info->port, &state, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800663 {
664 if(cme_err != MBTK_RIL_ERR_CME_NON) {
665 err = MBTK_RIL_ERR_CME + cme_err;
666 } else {
667 err = MBTK_RIL_ERR_UNKNOWN;
668 }
669 LOG("Get VoLTE state fail.");
670 }
671 else
672 {
b.liub171c9a2024-11-12 19:23:29 +0800673 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, &state, sizeof(uint8));
b.liu87afc4c2024-08-14 17:33:45 +0800674 }
675 }
676 else // Set VoLTE state.
677 {
678 if(pack->data == NULL || pack->data_len != sizeof(uint8)
679 || (*(pack->data) != 0 && *(pack->data) != 1))
680 {
681 err = MBTK_RIL_ERR_REQ_PARAMETER;
682 LOG("Set VOLTE parameter error.");
683 break;
684 }
685
686 uint8 on = *(pack->data);
b.liub171c9a2024-11-12 19:23:29 +0800687 if(req_volte_set(cli_info->port, on, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800688 {
689 if(cme_err != MBTK_RIL_ERR_CME_NON) {
690 err = MBTK_RIL_ERR_CME + cme_err;
691 } else {
692 err = MBTK_RIL_ERR_UNKNOWN;
693 }
694 LOG("Set VoLTE state fail.");
695 }
696 else
697 {
b.liub171c9a2024-11-12 19:23:29 +0800698 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, NULL, 0);
b.liu87afc4c2024-08-14 17:33:45 +0800699
700 // Restart is required to take effect.
701 // LOG("Will reboot system...");
702 }
703 }
704 break;
705 }
706 case RIL_MSG_ID_DEV_TEMP:
707 {
708 if(pack->data && pack->data_len == sizeof(uint8)) {
709 int16 temp;
710 mbtk_temp_type_enum type = (mbtk_temp_type_enum)(*(pack->data));
b.liub171c9a2024-11-12 19:23:29 +0800711 if(req_temp_get(cli_info->port, type, &temp, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800712 {
713 if(cme_err != MBTK_RIL_ERR_CME_NON) {
714 err = MBTK_RIL_ERR_CME + cme_err;
715 } else {
716 err = MBTK_RIL_ERR_UNKNOWN;
717 }
718 LOG("Get temperature fail.");
719 }
720 else
721 {
b.liub171c9a2024-11-12 19:23:29 +0800722 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, &temp, sizeof(int16));
b.liu87afc4c2024-08-14 17:33:45 +0800723 }
724 } else {
725 err = MBTK_RIL_ERR_UNSUPPORTED;
726 LOG("Unsupport set Temperature.");
727 }
728 break;
729 }
730 case RIL_MSG_ID_DEV_CELL_TIME:
731 {
732 if(pack->data_len == 0 || pack->data == NULL) // Get Time
733 {
734 char time[100] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800735 if(req_cell_time_get(cli_info->port, time, &cme_err) || strlen(time) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800736 {
737 if(cme_err != MBTK_RIL_ERR_CME_NON) {
738 err = MBTK_RIL_ERR_CME + cme_err;
739 } else {
740 err = MBTK_RIL_ERR_UNKNOWN;
741 }
742 LOG("Get cell time fail.");
743 }
744 else
745 {
b.liub171c9a2024-11-12 19:23:29 +0800746 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, time, strlen(time));
b.liu87afc4c2024-08-14 17:33:45 +0800747 }
748 }
749 else // Set Time
750 {
751 err = MBTK_RIL_ERR_UNSUPPORTED;
752 LOG("Unsupport set cell time.");
753 }
754 break;
755 }
756 case RIL_MSG_ID_DEV_MODEM:
757 {
758 if(pack->data_len == 0 || pack->data == NULL)
759 {
b.liub171c9a2024-11-12 19:23:29 +0800760 mbtk_radio_state_enum radio_state = ril_radio_state_get(cli_info->port);
b.liu87afc4c2024-08-14 17:33:45 +0800761 if(radio_state == MBTK_RADIO_STATE_UNKNOWN)
762 {
763 err = MBTK_RIL_ERR_UNKNOWN;
764 LOG("Get Version fail.");
765 }
766 else
767 {
b.liub171c9a2024-11-12 19:23:29 +0800768 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, &radio_state, sizeof(uint8));
b.liu87afc4c2024-08-14 17:33:45 +0800769 }
770 }
771 else // Set
772 {
773 // <func><reset>
774 if(pack->data && pack->data_len == 2) {
775 mbtk_radio_state_enum radio_state = (mbtk_radio_state_enum)(*(pack->data));
776 bool reset = *(pack->data + 1);
b.liub171c9a2024-11-12 19:23:29 +0800777 err = ril_radio_state_set(cli_info->port, radio_state, reset);
b.liu87afc4c2024-08-14 17:33:45 +0800778 if(MBTK_RIL_ERR_SUCCESS == err) {
b.liub171c9a2024-11-12 19:23:29 +0800779 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, NULL, 0);
b.liu87afc4c2024-08-14 17:33:45 +0800780 }
781 } else {
782 err = MBTK_RIL_ERR_FORMAT;
783 }
784 }
785 break;
786 }
b.liu9c19cc62024-11-28 09:43:02 +0800787 case RIL_MSG_ID_DEV_POWERIND:
788 {
789 if(pack->data_len == 0 || pack->data == NULL)
790 {
791 err = MBTK_RIL_ERR_UNSUPPORTED;
792 LOG("Get POWERIND state UNSUPPORTED.");
793 }
794 else // Set powerind state.
795 {
796 uint8 state = *(pack->data);
797 if(req_powerind_set(cli_info->port, state, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
798 {
799 if(cme_err != MBTK_RIL_ERR_CME_NON) {
800 err = MBTK_RIL_ERR_CME + cme_err;
801 } else {
802 err = MBTK_RIL_ERR_UNKNOWN;
803 }
804 LOG("Set POWERIND state fail.");
805 }
806 else
807 {
808 // pack_rsp_send(cli_info->fd, MBTK_INFO_ID_WAKEUP_STA_RSP, NULL, 0);
809 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, NULL, 0);
810 }
811 }
812 break;
813 }
b.liu7d102f82025-03-26 18:30:21 +0800814 case RIL_MSG_ID_DEV_MD_VERSION_REQ:
815 {
816 if(pack->data_len == 0 || pack->data == NULL) // Get VERSION
817 {
818 char version[50] = {0};
819 if(req_md_version_get(cli_info->port,version, &cme_err) || strlen(version) == 0 || cme_err != MBTK_RIL_ERR_CME_NON)
820 {
821 if(cme_err != MBTK_RIL_ERR_CME_NON) {
822 err = MBTK_RIL_ERR_CME + cme_err;
823 } else {
824 err = MBTK_RIL_ERR_UNKNOWN;
825 }
826 LOG("Get MD Version fail.");
827 }
828 else
829 {
830 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, version, strlen((char*)version));
831 }
832 }
833 break;
834
835 }
b.liu87afc4c2024-08-14 17:33:45 +0800836 default:
837 {
838 err = MBTK_RIL_ERR_REQ_UNKNOWN;
839 LOG("Unknown request : %s", id2str(pack->msg_id));
840 break;
841 }
842 }
843
844 return err;
845}
846
847
848
849