blob: ebc09f2abdadbb34884639ca4ba4cee2bcdfc6f6 [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/** Returns SIM_NOT_READY on error */
23mbtk_sim_state_enum ril_sim_state_get()
24{
25 ATResponse *p_response = NULL;
26 int err;
27 mbtk_sim_state_enum ret = MBTK_SIM_STATE_UNKNOWN;
28 char *cpinLine;
29 char *cpinResult;
30
31 err = at_send_command_singleline("AT+CPIN?", "+CPIN:", &p_response);
32
33 if (err < 0 || p_response->success == 0 || !p_response->p_intermediates)
34 {
35 ret = MBTK_SIM_STATE_NOT_READY;
36 goto done;
37 }
38
39 switch (at_get_cme_error(p_response))
40 {
41 case CME_SUCCESS:
42 break;
43
44 case CME_SIM_NOT_INSERTED:
45 ret = MBTK_SIM_STATE_ABSENT;
46 goto done;
47
48 default:
49 ret = MBTK_SIM_STATE_NOT_READY;
50 goto done;
51 }
52
53 /* CPIN? has succeeded, now look at the result */
54
55 cpinLine = p_response->p_intermediates->line;
56 err = at_tok_start (&cpinLine);
57
58 if (err < 0)
59 {
60 ret = MBTK_SIM_STATE_NOT_READY;
61 goto done;
62 }
63
64 err = at_tok_nextstr(&cpinLine, &cpinResult);
65
66 if (err < 0)
67 {
68 ret = MBTK_SIM_STATE_NOT_READY;
69 goto done;
70 }
71
72 if (0 == strcmp (cpinResult, "SIM PIN"))
73 {
74 ret = MBTK_SIM_STATE_SIM_PIN;
75 }
76 else if (0 == strcmp (cpinResult, "SIM PUK"))
77 {
78 ret = MBTK_SIM_STATE_SIM_PUK;
79 }
80 else if (0 == strcmp (cpinResult, "PH-SIMLOCK PIN"))
81 {
82 ret = MBTK_SIM_STATE_PH_SIMLOCK_PIN;
83 }
84 else if (0 == strcmp (cpinResult, "PH-SIMLOCK PIN"))
85 {
86 ret = MBTK_SIM_STATE_PH_SIMLOCK_PUK;
87 }
88 else if (0 == strcmp (cpinResult, "PH-FSIM PIN"))
89 {
90 ret = MBTK_SIM_STATE_PH_FSIM_PIN;
91 }
92 else if (0 == strcmp (cpinResult, "PH-FSIM PUK"))
93 {
94 ret = MBTK_SIM_STATE_PH_FSIM_PUK;
95 }
96 else if (0 == strcmp (cpinResult, "SIM PIN2"))
97 {
98 ret = MBTK_SIM_STATE_SIM_PIN2;
99 }
100 else if (0 == strcmp (cpinResult, "SIM PUK2"))
101 {
102 ret = MBTK_SIM_STATE_SIM_PUK2;
103 }
104 else if (0 == strcmp (cpinResult, "PH-NET PIN"))
105 {
106 ret = MBTK_SIM_STATE_PH_NET_PIN;
107 }
108 else if (0 == strcmp (cpinResult, "PH-NET PUK"))
109 {
110 ret = MBTK_SIM_STATE_PH_NET_PUK;
111 }
112 else if (0 == strcmp (cpinResult, "PH-NETSUB PIN"))
113 {
114 ret = MBTK_SIM_STATE_PH_NETSUB_PIN;
115 }
116 else if (0 == strcmp (cpinResult, "PH-NETSUB PUK"))
117 {
118 ret = MBTK_SIM_STATE_PH_NETSUB_PUK;
119 }
120 else if (0 == strcmp (cpinResult, "PH-SP PIN"))
121 {
122 ret = MBTK_SIM_STATE_PH_SP_PIN;
123 }
124 else if (0 == strcmp (cpinResult, "PH-SP PUK"))
125 {
126 ret = MBTK_SIM_STATE_PH_SP_PUK;
127 }
128 else if (0 == strcmp (cpinResult, "PH-CORP PIN"))
129 {
130 ret = MBTK_SIM_STATE_PH_CORP_PIN;
131 }
132 else if (0 == strcmp (cpinResult, "PH-CORP PUK"))
133 {
134 ret = MBTK_SIM_STATE_PH_CORP_PUK;
135 }
136 else if (0 == strcmp (cpinResult, "READY"))
137 {
138 ret = MBTK_SIM_STATE_READY;
139 } else {
140 ret = MBTK_SIM_STATE_ABSENT;
141 }
142
143done:
144 at_response_free(p_response);
145 p_response = NULL;
146 cpinResult = NULL;
147 ril_info.sim_state = ret;
148 return ret;
149}
150
151/*
152AT*EUICC?
153*EUICC: 1
154
155OK
156*/
157static int req_sim_type_get(uint8 *type, int *cme_err)
158{
159 ATResponse *response = NULL;
160 char *tmp_ptr = NULL;
161 int err = at_send_command_singleline("AT*EUICC?", "*EUICC:", &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 int sim_card_type = -1;
175 err = at_tok_nextint(&line, &sim_card_type);
176 if (err < 0)
177 {
178 goto exit;
179 }
180 if(sim_card_type != -1)
181 *type = sim_card_type;
182 goto exit;
183exit:
184 at_response_free(response);
185 return err;
186}
187
188/*
189AT+ICCID
190+ICCID: 89860621330065648041
191
192OK
193*/
194static int req_iccid_get(void *data, int *cme_err)
195{
196 ATResponse *response = NULL;
197 char *tmp_ptr = NULL;
198 int err = at_send_command_singleline("AT+ICCID", "+ICCID:", &response);
199
200 if (err < 0 || response->success == 0 || !response->p_intermediates){
201 *cme_err = at_get_cme_error(response);
202 goto exit;
203 }
204
205 char *line = response->p_intermediates->line;
206 err = at_tok_start(&line);
207 if (err < 0)
208 {
209 goto exit;
210 }
211
212 err = at_tok_nextstr(&line, &tmp_ptr);
213 if (err < 0)
214 {
215 goto exit;
216 }
217
218 memcpy(data, tmp_ptr, strlen(tmp_ptr));
219exit:
220 at_response_free(response);
221 return err;
222}
223
224/*
225AT+CNUM?
226+CNUM: "","13980414101",129
227
228OK
229
230*/
231static int req_phone_number_get(void *data, int *cme_err)
232{
233 ATResponse *response = NULL;
234 char *tmp_ptr = NULL;
235 int err = at_send_command_singleline("AT+CNUM?", "+CNUM:", &response);
236 if (err < 0 || response == NULL || response->success == 0 || !response->p_intermediates){
237 if(response) {
238 *cme_err = at_get_cme_error(response);
239 }
240 LOGD("AT+CNUM? fail.");
241 goto exit;
242 }
243
244 char *line = response->p_intermediates->line;
245 if(line == NULL) {
246 LOGD("line is NULL");
247 goto exit;
248 }
249 err = at_tok_start(&line);
250 if (err < 0)
251 {
252 goto exit;
253 }
254
255 err = at_tok_nextstr(&line, &tmp_ptr);
256 if (err < 0)
257 {
258 goto exit;
259 }
260
261 err = at_tok_nextstr(&line, &tmp_ptr);
262 if (err < 0)
263 {
264 goto exit;
265 }
266
267 memcpy(data, tmp_ptr, strlen(tmp_ptr));
268exit:
269 at_response_free(response);
270 return err;
271}
272
273
274/*
275AT+CIMI
276460068103383304
277
278OK
279
280*/
281static int req_imsi_get(void *data, int *cme_err)
282{
283 ATResponse *response = NULL;
284 int err = at_send_command_numeric("AT+CIMI", &response);
285
286 if (err < 0 || response->success == 0 || !response->p_intermediates){
287 *cme_err = at_get_cme_error(response);
288 goto exit;
289 }
290
291 memcpy(data, response->p_intermediates->line, strlen(response->p_intermediates->line));
292exit:
293 at_response_free(response);
294 return err;
295}
296
297static int req_sim_lock_state_get(int *state, int *cme_err)
298{
299 ATResponse *response = NULL;
300 char cmd[64]={0};
301
302 int err = at_send_command_singleline("AT+CLCK=SC,2", "+CLCK:", &response);
303 if (err < 0 || response == NULL || response->success == 0 || !response->p_intermediates){
304 if(response) {
305 *cme_err = at_get_cme_error(response);
306 }
307 LOGD("AT+CLCK fail.");
308 goto exit;
309 }
310
311 char *line = response->p_intermediates->line;
312 if(line == NULL) {
313 LOGD("line is NULL");
314 goto exit;
315 }
316 err = at_tok_start(&line);
317 if (err < 0)
318 {
319 goto exit;
320 }
321 err = at_tok_nextint(&line, state);
322 if (err < 0)
323 {
324 goto exit;
325 }
326
327exit:
328 at_response_free(response);
329 return err;
330}
331
332/*
333*
334AT+CLCK=SC,0,1234
335+CLCK: 0
336
337OK
338
339AT+CLCK=SC,1,1234
340+CLCK: 1
341
342OK
343
344*
345*/
346static int req_sim_lock_switch(bool enable, uint8* pin, int *cme_err)
347{
348 ATResponse *response = NULL;
349 char cmd[64]={0};
350 snprintf(cmd, sizeof(cmd), "AT+CLCK=SC,%d,%s", enable ? 1 : 0, pin);
351 int err = at_send_command_singleline(cmd, "+CLCK:", &response);
352 if (err < 0 || response == NULL || response->success == 0 || !response->p_intermediates){
353 if(response) {
354 *cme_err = at_get_cme_error(response);
355 }
356 LOGD("AT+CLCK fail.");
357 goto exit;
358 }
359
360 int ret;
361 char *line = response->p_intermediates->line;
362 if(line == NULL) {
363 LOGD("line is NULL");
364 goto exit;
365 }
366 err = at_tok_start(&line);
367 if (err < 0)
368 {
369 goto exit;
370 }
371 err = at_tok_nextint(&line, &ret);
372 if (err < 0)
373 {
374 goto exit;
375 }
376
377 if(enable) {
378 if(ret != 1) {
379 LOGW("+CLCK not 1.");
380 err = -1;
381 goto exit;
382 }
383 } else {
384 if(ret != 0) {
385 LOGW("+CLCK not 0.");
386 err = -1;
387 goto exit;
388 }
389 }
390
391exit:
392 at_response_free(response);
393 return err;
394}
395
396static int req_sim_pin_change(uint8* old_pin, uint8 *new_pin, int *cme_err)
397{
398 ATResponse *response = NULL;
399 char cmd[128]={0};
400 int err = 0;
401 int state;
402 if(req_sim_lock_state_get(&state, cme_err) || *cme_err != MBTK_RIL_ERR_CME_NON)
403 {
404 return -1;
405 }
406
407 if(state == 0) { // Sim lock not open.
408 return req_sim_lock_switch(TRUE, new_pin, cme_err);
409 } else {// Change password.
410 snprintf(cmd, sizeof(cmd), "AT+CPWD=SC,%s,%s", old_pin, new_pin);
411 err = at_send_command(cmd, &response);
412 if (err < 0 || response->success == 0){
413 if(cme_err) {
414 *cme_err = at_get_cme_error(response);
415 }
416 goto exit;
417 }
418 }
419
420exit:
421 at_response_free(response);
422 return err;
423}
424
425static int req_sim_pin_verify(uint8* pin, int *cme_err)
426{
427 ATResponse *response = NULL;
428 char cmd[64]={0};
429 sprintf(cmd, "AT+CPIN=%s", pin);
430 int err = at_send_command(cmd, &response);
431 if (err < 0 || response->success == 0){
432 if(cme_err) {
433 *cme_err = at_get_cme_error(response);
434 }
435 goto exit;
436 }
437
438exit:
439 at_response_free(response);
440 return err;
441}
442
443static int req_sim_puk_verify(uint8* puk, uint8* pin, int *cme_err)
444{
445 ATResponse *response = NULL;
446 char cmd[64]={0};
447 sprintf(cmd, "AT+CPIN=%s,%s", puk, pin);
448 int err = at_send_command(cmd, &response);
449 if (err < 0 || response->success == 0){
450 if(cme_err) {
451 *cme_err = at_get_cme_error(response);
452 }
453 goto exit;
454 }
455
456exit:
457 at_response_free(response);
458 return err;
459}
460
461static int req_sim_lock_set(mbtk_sim_lock_info_t *lock_info, int *cme_err)
462{
463 switch(lock_info->type)
464 {
465 case MBTK_SIM_LOCK_TYPE_DISABLE:
466 {
467 return req_sim_lock_switch(FALSE, lock_info->pin1, cme_err);
468 }
469 case MBTK_SIM_LOCK_TYPE_ENABLE:
470 {
471 return req_sim_lock_switch(TRUE, lock_info->pin1, cme_err);
472 }
473 case MBTK_SIM_LOCK_TYPE_CHANGE:
474 {
475 return req_sim_pin_change(lock_info->pin1, lock_info->pin2, cme_err);
476 }
477 case MBTK_SIM_LOCK_TYPE_VERIFY_PIN:
478 {
479 return req_sim_pin_verify(lock_info->pin1, cme_err);
480 }
481 case MBTK_SIM_LOCK_TYPE_VERIFY_PUK:
482 {
483 return req_sim_puk_verify(lock_info->puk, lock_info->pin1, cme_err);
484 }
485 default:
486 {
487 LOGE("Unknown type : %d", lock_info->type);
488 break;
489 }
490 }
491
492 return -1;
493}
494
495/*
496AT+EPIN?
497+EPIN: 3,0,10,0
498
499OK
500*/
501static int req_pin_puk_last_times_get(mbtk_pin_puk_last_times_t *times, int *cme_err)
502{
503 ATResponse *response = NULL;
504 char *tmp_ptr = NULL;
505 int err = at_send_command_singleline("AT+EPIN?", "+EPIN:", &response);
506
507 if (err < 0 || response->success == 0 || !response->p_intermediates){
508 *cme_err = at_get_cme_error(response);
509 goto exit;
510 }
511
512 char *line = response->p_intermediates->line;
513 err = at_tok_start(&line);
514 if (err < 0)
515 {
516 goto exit;
517 }
518 mbtk_pin_puk_last_times_t last_times={0};
519 err = at_tok_nextint(&line, &(last_times.p1_retry));
520 if (err < 0)
521 {
522 goto exit;
523 }
524 times->p1_retry = last_times.p1_retry;
525 err = at_tok_nextint(&line, &(last_times.p2_retry));
526 if (err < 0)
527 {
528 goto exit;
529 }
530 times->p2_retry = last_times.p2_retry;
531 err = at_tok_nextint(&line, &(last_times.puk1_retry));
532 if (err < 0)
533 {
534 goto exit;
535 }
536 times->puk1_retry = last_times.puk1_retry;
537 err = at_tok_nextint(&line, &(last_times.puk2_retry));
538 if (err < 0)
539 {
540 goto exit;
541 }
542 times->puk2_retry = last_times.puk2_retry;
543
544exit:
545 at_response_free(response);
546 return err;
547}
548
549/*
550AT+CPOL?
551*EUICC: 1
552
553OK
554*/
555static int req_plmn_get(mbtk_plmn_info *info, int *cme_err)
556{
557 ATResponse *response = NULL;
558 char *tmp_ptr = NULL;
559 int err = at_send_command_multiline("AT+CPOL?", "+CPOL:", &response);
560
561 if (err < 0 || response->success == 0 || !response->p_intermediates){
562 *cme_err = at_get_cme_error(response);
563 goto exit;
564 }
565
566 int mccmnc_type = -1;
567 int count = -1;
568 char *mccmnc_name = NULL;
569 ATLine* lines_ptr = response->p_intermediates;
570 char *line = NULL;
571 while(lines_ptr)
572 {
573 line = lines_ptr->line;
574 //if(strStartsWith(line, "+CPOL:"))
575 {
576 err = at_tok_start(&line);
577 if (err < 0)
578 {
579 goto exit;
580 }
581 err = at_tok_nextint(&line, &count);
582 if (err < 0)
583 {
584 goto exit;
585 }
586 info->count = count;
587
588 err = at_tok_nextint(&line, &mccmnc_type);
589 if (err < 0)
590 {
591 goto exit;
592 }
593 info->plmn[count-1].format = mccmnc_type;
594
595 err = at_tok_nextstr(&line, &mccmnc_name);
596 if (err < 0)
597 {
598 goto exit;
599 }
600 memcpy(info->plmn[count-1].name, mccmnc_name, strlen(mccmnc_name));
601 mccmnc_name = NULL;
602 }
603 lines_ptr = lines_ptr->p_next;
604 }
605
606exit:
607 at_response_free(response);
608 return err;
609}
610
611//void net_list_free(void *data);
612// Return MBTK_INFO_ERR_SUCCESS,will call pack_error_send() to send RSP.
613// Otherwise, do not call pack_error_send().
614mbtk_ril_err_enum sim_pack_req_process(sock_cli_info_t* cli_info, ril_msg_pack_info_t* pack)
615{
616 mbtk_ril_err_enum err = MBTK_RIL_ERR_SUCCESS;
617 int cme_err = MBTK_RIL_ERR_CME_NON;
618 switch(pack->msg_id)
619 {
620 case RIL_MSG_ID_SIM_STATE:
621 {
622 if(pack->data_len == 0 || pack->data == NULL)
623 {
624 mbtk_sim_state_enum state = ril_sim_state_get();
625 if(state == MBTK_SIM_STATE_UNKNOWN)
626 {
627 err = MBTK_RIL_ERR_UNKNOWN;
628 LOG("Get sim state fail.");
629 }
630 else
631 {
632 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, &state, sizeof(uint8));
633 }
634 }
635 else // Set
636 {
637 err = MBTK_RIL_ERR_UNSUPPORTED;
638 LOG("Unsupport set sim state.");
639 }
640 break;
641 }
642 case RIL_MSG_ID_SIM_TYPE:
643 {
644 if(pack->data_len == 0 || pack->data == NULL)
645 {
646 uint8 sim_card_type;
647 if(req_sim_type_get(&sim_card_type, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
648 {
649 if(cme_err != MBTK_RIL_ERR_CME_NON) {
650 err = MBTK_RIL_ERR_CME + cme_err;
651 } else {
652 err = MBTK_RIL_ERR_UNKNOWN;
653 }
654 LOG("Get IMSI fail.");
655 }
656 else
657 {
658 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, &sim_card_type, sizeof(uint8));
659 }
660 }
661 else // Set
662 {
663 err = MBTK_RIL_ERR_UNSUPPORTED;
664 LOG("Unsupport set sim type.");
665 }
666 break;
667 }
668 case RIL_MSG_ID_SIM_IMSI:
669 {
670 if(pack->data_len == 0 || pack->data == NULL)
671 {
672 char imsi[20] = {0};
673 if(req_imsi_get(imsi, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
674 {
675 if(cme_err != MBTK_RIL_ERR_CME_NON) {
676 err = MBTK_RIL_ERR_CME + cme_err;
677 } else {
678 err = MBTK_RIL_ERR_UNKNOWN;
679 }
680 LOG("Get IMSI fail.");
681 }
682 else
683 {
684 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, imsi, strlen(imsi));
685 }
686 }
687 else // Set
688 {
689 err = MBTK_RIL_ERR_UNSUPPORTED;
690 LOG("Unsupport set IMSI.");
691 }
692 break;
693 }
694 case RIL_MSG_ID_SIM_PN:
695 {
696 if(pack->data_len == 0 || pack->data == NULL)
697 {
698 char pn[50] = {0};
699 if(req_phone_number_get(pn, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
700 {
701 if(cme_err != MBTK_RIL_ERR_CME_NON) {
702 err = MBTK_RIL_ERR_CME + cme_err;
703 } else {
704 err = MBTK_RIL_ERR_UNKNOWN;
705 }
706 LOG("Get PN fail.");
707 }
708 else
709 {
710 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, pn, strlen(pn));
711 }
712 }
713 else // Set
714 {
715 err = MBTK_RIL_ERR_UNSUPPORTED;
716 LOG("Unsupport set PN.");
717 }
718 break;
719 }
720 case RIL_MSG_ID_SIM_ICCID:
721 {
722 if(pack->data_len == 0 || pack->data == NULL)
723 {
724 char iccid[50] = {0};
725 if(req_iccid_get(iccid, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
726 {
727 if(cme_err != MBTK_RIL_ERR_CME_NON) {
728 err = MBTK_RIL_ERR_CME + cme_err;
729 } else {
730 err = MBTK_RIL_ERR_UNKNOWN;
731 }
732 LOG("Get ICCID fail.");
733 }
734 else
735 {
736 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, iccid, strlen(iccid));
737 }
738 }
739 else // Set
740 {
741 err = MBTK_RIL_ERR_UNSUPPORTED;
742 LOG("Unsupport set ICCID.");
743 }
744 break;
745 }
746 case RIL_MSG_ID_SIM_LOCK:
747 {
748 if(pack->data_len == 0 || pack->data == NULL)
749 {
750 int state;
751 if(req_sim_lock_state_get(&state, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
752 {
753 if(cme_err != MBTK_RIL_ERR_CME_NON) {
754 err = MBTK_RIL_ERR_CME + cme_err;
755 } else {
756 err = MBTK_RIL_ERR_UNKNOWN;
757 }
758 LOG("Get sim lock state fail.");
759 }
760 else
761 {
762 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, &state, sizeof(uint8));
763 }
764 }
765 else // Set
766 {
767 mbtk_sim_lock_info_t *lock_info = (mbtk_sim_lock_info_t*)pack->data;
768 if(req_sim_lock_set(lock_info, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
769 {
770 if(cme_err != MBTK_RIL_ERR_CME_NON) {
771 err = MBTK_RIL_ERR_CME + cme_err;
772 } else {
773 err = MBTK_RIL_ERR_UNKNOWN;
774 }
775 LOG("Set sim lock fail.");
776 }
777 else
778 {
779 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, NULL, 0);
780 }
781 }
782 break;
783 }
784 case RIL_MSG_ID_SIM_PINPUK_TIMES:
785 {
786 if(pack->data_len == 0 || pack->data == NULL)
787 {
788 mbtk_pin_puk_last_times_t last_times;
789 if(req_pin_puk_last_times_get(&last_times, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
790 {
791 if(cme_err != MBTK_RIL_ERR_CME_NON) {
792 err = MBTK_RIL_ERR_CME + cme_err;
793 } else {
794 err = MBTK_RIL_ERR_UNKNOWN;
795 }
796 LOG("Get PIN/PUK Last times fail.");
797 }
798 else
799 {
800 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, &last_times, sizeof(mbtk_pin_puk_last_times_t));
801 }
802 }
803 else // Set
804 {
805 err = MBTK_RIL_ERR_UNSUPPORTED;
806 LOG("Unsupport set PIN/PUK Last times.");
807 }
808 break;
809 }
810 case RIL_MSG_ID_SIM_PLMN:
811 {
812 if(pack->data_len == 0 || pack->data == NULL)
813 {
814 mbtk_plmn_info info;
815 memset(&info, 0, sizeof(mbtk_plmn_info));
816 if(req_plmn_get(&info, &cme_err) || cme_err != MBTK_RIL_ERR_CME_NON)
817 {
818 if(cme_err != MBTK_RIL_ERR_CME_NON) {
819 err = MBTK_RIL_ERR_CME + cme_err;
820 } else {
821 err = MBTK_RIL_ERR_UNKNOWN;
822 }
823 LOG("Get PLMN list fail.");
824 }
825 else
826 {
827 ril_rsp_pack_send(cli_info->fd, pack->msg_id, pack->msg_index, &info, sizeof(mbtk_plmn_info));
828 }
829 }
830 else // Set
831 {
832 err = MBTK_RIL_ERR_UNSUPPORTED;
833 LOG("Unsupport set PLMN list.");
834 }
835 break;
836 }
837 default:
838 {
839 err = MBTK_RIL_ERR_REQ_UNKNOWN;
840 LOG("Unknown request : %s", id2str(pack->msg_id));
841 break;
842 }
843 }
844
845 return err;
846}
847