blob: f2de0f14808a7483ef9c85d57b856e838ff89a8c [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.liu87afc4c2024-08-14 17:33:45 +0800477
478//void net_list_free(void *data);
479// Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
480// Otherwise, do not call pack_error_send().
481mbtk_ril_err_enum dev_pack_req_process(sock_cli_info_t* cli_info, ril_msg_pack_info_t* pack)
482{
483 mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
484 int cme_err = MBTK_RIL_ERR_CME_NON;
485 switch(pack->msg_id)
486 {
487 case RIL_MSG_ID_DEV_IMEI:
488 {
489 if(pack->data_len == 0 || pack->data == NULL) // Get IMEI
490 {
491 char imei[20] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800492 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 +0800493 {
494 if(cme_err != MBTK_RIL_ERR_CME_NON) {
495 err = MBTK_RIL_ERR_CME + cme_err;
496 } else {
497 err = MBTK_RIL_ERR_UNKNOWN;
498 }
499 LOG("Get IMEI fail.");
500 }
501 else
502 {
b.liub171c9a2024-11-12 19:23:29 +0800503 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 +0800504 }
505 }
506 else // Set IMEI(Unsupport).
507 {
508 err = MBTK_RIL_ERR_UNSUPPORTED;
509 LOG("Unsupport set IMEI.");
510 }
511 break;
512 }
513 case RIL_MSG_ID_DEV_SN:
514 {
515 if(pack->data_len == 0 || pack->data == NULL)
516 {
517 char sn[20] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800518 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 +0800519 {
520 if(cme_err != MBTK_RIL_ERR_CME_NON) {
521 err = MBTK_RIL_ERR_CME + cme_err;
522 } else {
523 err = MBTK_RIL_ERR_UNKNOWN;
524 }
525 LOG("Get SN fail.");
526 }
527 else
528 {
b.liub171c9a2024-11-12 19:23:29 +0800529 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 +0800530 }
531 }
532 else // Set
533 {
534 err = MBTK_RIL_ERR_UNSUPPORTED;
535 LOG("Unsupport set SN.");
536 }
537 break;
538 }
539 case RIL_MSG_ID_DEV_MEID:
540 {
541 if(pack->data_len == 0 || pack->data == NULL)
542 {
543 err = MBTK_RIL_ERR_UNSUPPORTED;
544 LOG("Support only for CDMA.");
545 }
546 else // Set
547 {
548 err = MBTK_RIL_ERR_UNSUPPORTED;
549 LOG("Unsupport set MEID.");
550 }
551 break;
552 }
553 case RIL_MSG_ID_DEV_VERSION:
554 {
555 if(pack->data_len == 0 || pack->data == NULL)
556 {
557 char version[50] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800558 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 +0800559 {
560 if(cme_err != MBTK_RIL_ERR_CME_NON) {
561 err = MBTK_RIL_ERR_CME + cme_err;
562 } else {
563 err = MBTK_RIL_ERR_UNKNOWN;
564 }
565 LOG("Get Version fail.");
566 }
567 else
568 {
b.liub171c9a2024-11-12 19:23:29 +0800569 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 +0800570 }
571 }
572 else // Set
573 {
574 err = MBTK_RIL_ERR_UNSUPPORTED;
575 LOG("Unsupport set Version.");
576 }
577 break;
578 }
579 case RIL_MSG_ID_DEV_MODEL:
580 {
581 if(pack->data_len == 0 || pack->data == NULL)
582 {
583 char model[50] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800584 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 +0800585 {
586 if(cme_err != MBTK_RIL_ERR_CME_NON) {
587 err = MBTK_RIL_ERR_CME + cme_err;
588 } else {
589 err = MBTK_RIL_ERR_UNKNOWN;
590 }
591 LOG("Get Version fail.");
592 }
593 else
594 {
b.liub171c9a2024-11-12 19:23:29 +0800595 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 +0800596 }
597 }
598 else // Set
599 {
600 err = MBTK_RIL_ERR_UNSUPPORTED;
601 LOG("Unsupport set Model.");
602 }
603 break;
604 }
605 case RIL_MSG_ID_DEV_VOLTE: // <uint8> 0:Close 1:Open
606 {
607 if(pack->data_len == 0 || pack->data == NULL) // Get VoLTE state.
608 {
609 int state;
b.liub171c9a2024-11-12 19:23:29 +0800610 if(req_volte_get(cli_info->port, &state, &cme_err) || 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 VoLTE state 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, &state, sizeof(uint8));
b.liu87afc4c2024-08-14 17:33:45 +0800622 }
623 }
624 else // Set VoLTE state.
625 {
626 if(pack->data == NULL || pack->data_len != sizeof(uint8)
627 || (*(pack->data) != 0 && *(pack->data) != 1))
628 {
629 err = MBTK_RIL_ERR_REQ_PARAMETER;
630 LOG("Set VOLTE parameter error.");
631 break;
632 }
633
634 uint8 on = *(pack->data);
b.liub171c9a2024-11-12 19:23:29 +0800635 if(req_volte_set(cli_info->port, on, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
b.liu87afc4c2024-08-14 17:33:45 +0800636 {
637 if(cme_err != MBTK_RIL_ERR_CME_NON) {
638 err = MBTK_RIL_ERR_CME + cme_err;
639 } else {
640 err = MBTK_RIL_ERR_UNKNOWN;
641 }
642 LOG("Set VoLTE state fail.");
643 }
644 else
645 {
b.liub171c9a2024-11-12 19:23:29 +0800646 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 +0800647
648 // Restart is required to take effect.
649 // LOG("Will reboot system...");
650 }
651 }
652 break;
653 }
654 case RIL_MSG_ID_DEV_TEMP:
655 {
656 if(pack->data && pack->data_len == sizeof(uint8)) {
657 int16 temp;
658 mbtk_temp_type_enum type = (mbtk_temp_type_enum)(*(pack->data));
b.liub171c9a2024-11-12 19:23:29 +0800659 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 +0800660 {
661 if(cme_err != MBTK_RIL_ERR_CME_NON) {
662 err = MBTK_RIL_ERR_CME + cme_err;
663 } else {
664 err = MBTK_RIL_ERR_UNKNOWN;
665 }
666 LOG("Get temperature fail.");
667 }
668 else
669 {
b.liub171c9a2024-11-12 19:23:29 +0800670 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 +0800671 }
672 } else {
673 err = MBTK_RIL_ERR_UNSUPPORTED;
674 LOG("Unsupport set Temperature.");
675 }
676 break;
677 }
678 case RIL_MSG_ID_DEV_CELL_TIME:
679 {
680 if(pack->data_len == 0 || pack->data == NULL) // Get Time
681 {
682 char time[100] = {0};
b.liub171c9a2024-11-12 19:23:29 +0800683 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 +0800684 {
685 if(cme_err != MBTK_RIL_ERR_CME_NON) {
686 err = MBTK_RIL_ERR_CME + cme_err;
687 } else {
688 err = MBTK_RIL_ERR_UNKNOWN;
689 }
690 LOG("Get cell time fail.");
691 }
692 else
693 {
b.liub171c9a2024-11-12 19:23:29 +0800694 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 +0800695 }
696 }
697 else // Set Time
698 {
699 err = MBTK_RIL_ERR_UNSUPPORTED;
700 LOG("Unsupport set cell time.");
701 }
702 break;
703 }
704 case RIL_MSG_ID_DEV_MODEM:
705 {
706 if(pack->data_len == 0 || pack->data == NULL)
707 {
b.liub171c9a2024-11-12 19:23:29 +0800708 mbtk_radio_state_enum radio_state = ril_radio_state_get(cli_info->port);
b.liu87afc4c2024-08-14 17:33:45 +0800709 if(radio_state == MBTK_RADIO_STATE_UNKNOWN)
710 {
711 err = MBTK_RIL_ERR_UNKNOWN;
712 LOG("Get Version fail.");
713 }
714 else
715 {
b.liub171c9a2024-11-12 19:23:29 +0800716 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 +0800717 }
718 }
719 else // Set
720 {
721 // <func><reset>
722 if(pack->data && pack->data_len == 2) {
723 mbtk_radio_state_enum radio_state = (mbtk_radio_state_enum)(*(pack->data));
724 bool reset = *(pack->data + 1);
b.liub171c9a2024-11-12 19:23:29 +0800725 err = ril_radio_state_set(cli_info->port, radio_state, reset);
b.liu87afc4c2024-08-14 17:33:45 +0800726 if(MBTK_RIL_ERR_SUCCESS == err) {
b.liub171c9a2024-11-12 19:23:29 +0800727 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 +0800728 }
729 } else {
730 err = MBTK_RIL_ERR_FORMAT;
731 }
732 }
733 break;
734 }
b.liu9c19cc62024-11-28 09:43:02 +0800735 case RIL_MSG_ID_DEV_POWERIND:
736 {
737 if(pack->data_len == 0 || pack->data == NULL)
738 {
739 err = MBTK_RIL_ERR_UNSUPPORTED;
740 LOG("Get POWERIND state UNSUPPORTED.");
741 }
742 else // Set powerind state.
743 {
744 uint8 state = *(pack->data);
745 if(req_powerind_set(cli_info->port, state, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
746 {
747 if(cme_err != MBTK_RIL_ERR_CME_NON) {
748 err = MBTK_RIL_ERR_CME + cme_err;
749 } else {
750 err = MBTK_RIL_ERR_UNKNOWN;
751 }
752 LOG("Set POWERIND state fail.");
753 }
754 else
755 {
756 // pack_rsp_send(cli_info->fd, MBTK_INFO_ID_WAKEUP_STA_RSP, NULL, 0);
757 ril_rsp_pack_send(cli_info->port, cli_info->fd, pack->msg_id, pack->msg_index, NULL, 0);
758 }
759 }
760 break;
761 }
b.liu87afc4c2024-08-14 17:33:45 +0800762 default:
763 {
764 err = MBTK_RIL_ERR_REQ_UNKNOWN;
765 LOG("Unknown request : %s", id2str(pack->msg_id));
766 break;
767 }
768 }
769
770 return err;
771}
772
773
774
775