blob: dc0c65df0d6f8bbd53db83bd396eb89efed66943 [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 <string.h>
11#include <fcntl.h>
12#include <signal.h>
13
14#include "mbtk_ril_api.h"
15
16#define CLI_THREAD_MAX 3
17
18typedef struct {
19 pthread_t pid;
20 bool is_running;
21 char name[20];
22} ril_cli_thread_info_t;
23
24static ril_cli_thread_info_t cli_threads[CLI_THREAD_MAX];
25static int cli_pid_index = 1;
26
27static void help()
28{
29 printf("version: Get version.\n");
30 printf("imei: Get IMEI.\n");
31 printf("sn: Get SN.\n");
32 printf("meid: Get MEID.\n");
33 printf("volte: Get VoLTE state.\n");
34 printf("volte 0: Close VoLTE.\n");
35 printf("volte 1: Open VoLTE.\n");
36 printf("radio: Get radio state.\n");
37 printf("radio 0 [0/1]: Close radio.\n");
38 printf("radio 1 [0/1]: Open radio.\n");
39 printf("temp <0,1>: Get SOC/RF temperature.\n");
40 printf("cell_time: Get cell time.\n");
41 printf("sim_state: Get sim state.\n");
42 printf("sim_type: Get sim type.\n");
43 printf("imsi: Get IMSI.\n");
44 printf("iccid: Get ICCID.\n");
45 printf("pn: Get Phone Number.\n");
46 printf("pin_state:Get Sim lock state.\n");
47 printf("pin_times:Get PIN/PUK last times.\n");
48 printf("pin_open <PIN>:Enable sim lock.\n");
49 printf("pin_close <PIN>:Disable sim lock.\n");
50 printf("pin_change <old_pin> <new_pin>:Change sim PIN.\n");
51 printf("pin_verify <PIN>:Verify PIN.\n");
52 printf("puk_verify <PUK> <PIN>:Verify PUK.\n");
53 printf("plmn:Get PLMN List.\n");
54 printf("avail_net: Get available network.\n");
55 printf("sel_mode: Get network select mode.\n");
56 printf("sel_mode <sel_mode> <net_type> <plmn>: Set network select mode.\n");
57 printf("band: Get current bands.\n");
58 printf("band support: Get support bands.\n");
59 printf("band <net_pref> <gsm_band> <umts_band> <tdlte_band> <fddlte_band>: Set current bands.\n");
60 printf("signal: Get network signal.\n");
61 printf("reg: Get network registe information.\n");
62 printf("cell: Get current cell information.\n");
63 printf("shutdown <0,1,2>: reboot/poweroff/halt system.\n");
64 printf("power_sim <0,1>: Power off/on sim.\n");
65 printf("time <0,1,2> YYYY-MM-DD HH:MM:SS : Set system time as CELL/NTP/User.\n");
66 printf("apn : Get current apns.\n");
b.liubcf86c92024-08-19 19:48:28 +080067 printf("apn <cid> <ip_type:1/2/3/4> <save:0/1> <auto_call:0/1> <def_route:0/1> <as_dns:0/1> <apn/null> : Set apn.\n");
b.liu87afc4c2024-08-14 17:33:45 +080068 printf("apn_del <cid> <save:0/1> : Delete APN.\n");
b.liubcf86c92024-08-19 19:48:28 +080069 printf("data_call <0/1/2> <cid> <auto_boot_call> <def_route> <as_dns>: Stop/Start/State data call.\n");
b.liu87afc4c2024-08-14 17:33:45 +080070 printf("call: Call the phone number.\n");
71 printf("answer: Answer the phone call.\n");
72 printf("hangup: Hang up all phone call. No id.\n");
73 printf("hangup 0: Hang up waiting or background phone call.\n");
74 printf("hangup 1: Hang up a phone call.\n");
75 printf("hangup 2: Hang up a phone call.\n");
76 printf("hangup 3: Hangup foreground resume background call.\n");
77 printf("waitin: Returns the list of current calls.\n");
78 printf("mute: Get mute state.\n");
79 printf("mute 0: Close mute.\n");
80 printf("mute 1: Open mute.\n");
81 printf("dtmf : Set dtmf character[0, 1, 2, ..., A, B, C, D, *, #], duration [300-600].\n Such as: dtmf 0 300\n");
82 printf("ims_en 0/1 : Close/Open IMS(Restart takes effect).\n");
83 printf("ims_state : Get IMS open or not?\n");
84 printf("ims_reg: Get IMS register state.\n");
85}
86
87static void thread_exit_with_wait()
88{
89 int i = 0;
90 while(i < CLI_THREAD_MAX) {
91 cli_threads[i].is_running = FALSE;
92 i++;
93 }
94
95 i = 0;
96 while(i < CLI_THREAD_MAX) {
97 if(cli_threads[i].pid) {
98 pthread_join(cli_threads[i].pid, NULL);
99 printf("Thread (%s) exit.\n", cli_threads[i].name);
100 }
101 i++;
102 }
103}
104
b.liu15f456b2024-10-31 20:16:06 +0800105static void ril_ser_state_change_cb(const void* data, int data_len)
106{
107 if(data) {
108 uint8 *ptr = (const char*)data;
109 mbtk_ril_ser_state_enum state = (mbtk_ril_ser_state_enum)ptr[0];
110 printf("ril server state : %d.\n", state);
111 }
112}
113
114static void net_reg_state_change_cb(const void* data, int data_len)
115{
116 if(data) {
117 mbtk_ril_net_reg_state_info_t *state = (mbtk_ril_net_reg_state_info_t*)data;
118 printf("net reg state change : type - %d, tech - %d, reg_state - %d\n", state->type,
119 state->tech, state->reg_state);
120 }
121}
122
123static void call_state_change_cb(const void* data, int data_len)
124{
125 if(data) {
126 mbtk_ril_call_state_info_t *state = (mbtk_ril_call_state_info_t*)data;
127 printf("call state change : call_id-%d, dir-%d, state-%d, num_type-%d,number-%s\n", state->call_id,
128 state->dir, state->state, state->num_type, state->call_number);
129 }
130}
131
132static void sms_state_change_cb(const void* data, int data_len)
133{
134
135}
136
137static void radio_state_change_cb(const void* data, int data_len)
138{
139 if(data) {
140 mbtk_ril_radio_state_info_t *state = (mbtk_ril_radio_state_info_t*)data;
141 printf("radio state change : %d\n", state->radio_state);
142 }
143}
144
145static void sim_state_change_cb(const void* data, int data_len)
146{
147 if(data) {
148 mbtk_ril_sim_state_info_t *state = (mbtk_ril_sim_state_info_t*)data;
149 printf("sim state change : type - %d, state - %d\n", state->sim_type, state->sim_state);
150 }
151}
152
153static void pdp_state_change_cb(const void* data, int data_len)
154{
155 if(data) {
156 mbtk_ril_pdp_state_info_t *state = (mbtk_ril_pdp_state_info_t*)data;
157 printf("pdp state change : cid - %d, action - %d, reason-%d, auto_change - %d\n",
158 state->cid, state->action, state->reason, state->auto_change);
159 }
160}
161
162static void signal_state_change_cb(const void* data, int data_len)
163{
164
165}
166
167static void ecall_state_change_cb(const void* data, int data_len)
168{
169 if(data)
170 {
171 mbtk_ril_ecall_state_info_t *ecall_data = (mbtk_ril_ecall_state_info_t*)data;
172 printf("ecall state change : urc_id - %d, urc_data - %s\n", ecall_data->urc_id, ecall_data->urc_data);
173 }
174}
175
176
b.liu87afc4c2024-08-14 17:33:45 +0800177static void sig_process(int sig)
178{
179 LOGI("I got signal %d\n", sig);
180 switch(sig)
181 {
182 case SIGINT: // Ctrl + C
183 {
184 LOGI("Exit by SIGINT.\n");
185 thread_exit_with_wait();
186 mbtk_ril_deinit();
187 exit(0);
188 }
189 case SIGQUIT: // Ctrl + \ (类似 SIGINT ,但要产生core文件)
190 {
191 LOGI("Exit by SIGQUIT.\n");
192 thread_exit_with_wait();
193 mbtk_ril_deinit();
194 exit(0);
195 }
196 case SIGTERM:// 默认kill (同 SIGKILL ,但 SIGKILL 不可捕获)
197 {
198 LOGI("Exit by SIGTERM.\n");
199 thread_exit_with_wait();
200 mbtk_ril_deinit();
201 exit(0);
202 }
203 case SIGTSTP:// Ctrl + Z (同 SIGSTOP ,但 SIGSTOP 不可捕获)
204 {
205 LOGI("Exit by SIGTSTP.\n");
206 exit(0);
207 }
208 case SIGSEGV: // 如空指针
209 {
210 LOGI("Exit by SIGSEGV.\n");
211 exit(0);
212 }
213 default:
214 {
215 LOGI("Unknown sig:%d\n",sig);
216 break;
217 }
218 }
219}
220
221static char* thread_id2name(pthread_t pid)
222{
223 int i = 0;
224 while(i < CLI_THREAD_MAX) {
225 if(pid == cli_threads[i].pid) {
226 return cli_threads[i].name;
227 }
228 i++;
229 }
230
231 return "UNKNOWN";
232}
233
234static void* sub_thread_run(void *arg)
235{
236 ril_cli_thread_info_t *cli = (ril_cli_thread_info_t*)arg;
237 cli->pid = pthread_self();
238 cli->is_running = TRUE;
239 sprintf(cli->name, "PID-%d", cli_pid_index++);
240
241 printf("[%s] enter.\n", thread_id2name(cli->pid));
242 while(cli->is_running) {
243 srand((int)(time(0) + cli->pid));
244 int time_sec = 1 + (int)(10.0 * rand() / ( RAND_MAX + 1.0));
245 char version[50] = {0};
246 mbtk_ril_err_enum err = mbtk_version_get(version);
247 if(err != MBTK_RIL_ERR_SUCCESS) {
248 printf("[%s : %ds]Error : %d\n", thread_id2name(cli->pid), time_sec, err);
249 } else {
250 printf("[%s : %ds]Version : %s\n", thread_id2name(cli->pid), time_sec, version);
251 }
252
253 sleep(time_sec);
254 }
255 printf("[%s] exit.\n", thread_id2name(cli->pid));
256 return NULL;
257}
258
259int main(int argc, char *argv[])
260{
261 signal(SIGINT, sig_process);
262 signal(SIGQUIT, sig_process);
263 signal(SIGTERM, sig_process);
264 //signal(SIGTSTP, sig_process);
265 //signal(SIGSEGV, sig_process);
266
267 mbtk_log_init("radio","RIL_CLI");
268
269#ifdef MBTK_DUMP_SUPPORT
270 mbtk_debug_open(NULL, TRUE);
271#endif
272
273 //test2(0, "192.168.1.198");
274 //test2(1, "2409:8162:140:cd3c:1:2:1494:72ba");
275 //test2(1, "254.128.0.0.0.0.0.0.0.1.0.2.144.5.212.239");
276 //test2(1, "2400:3200::1");
277
278 if(mbtk_ril_init() != MBTK_RIL_ERR_SUCCESS)
279 {
280 return -1;
281 }
282
b.liu15f456b2024-10-31 20:16:06 +0800283 mbtk_ril_ser_state_change_cb_reg(ril_ser_state_change_cb);
284
285 mbtk_net_reg_state_change_cb_reg(net_reg_state_change_cb);
286
287 mbtk_call_state_change_cb_reg(call_state_change_cb);
288
289 mbtk_sms_state_change_cb_reg(sms_state_change_cb);
290
291 mbtk_radio_state_change_cb_reg(radio_state_change_cb);
292
293 mbtk_sim_state_change_cb_reg(sim_state_change_cb);
294
295 mbtk_pdp_state_change_cb_reg(pdp_state_change_cb);
296
297 mbtk_signal_state_change_cb_reg(signal_state_change_cb);
298
299 mbtk_ecall_state_change_cb_reg(ecall_state_change_cb);
300
b.liu87afc4c2024-08-14 17:33:45 +0800301#if 0
302 memset(cli_threads, 0, sizeof(ril_cli_thread_info_t) * CLI_THREAD_MAX);
303
304 pthread_t pid1, pid2, pid3;
305 if(pthread_create(&pid1, NULL, sub_thread_run, &cli_threads[0]))
306 {
307 printf("pthread_create() fail.");
308 goto exit;
309 }
310
311 if(pthread_create(&pid2, NULL, sub_thread_run, &cli_threads[1]))
312 {
313 printf("pthread_create() fail.");
314 goto exit;
315 }
316
317 if(pthread_create(&pid3, NULL, sub_thread_run, &cli_threads[2]))
318 {
319 printf("pthread_create() fail.");
320 goto exit;
321 }
322#endif
323 printf(">>>>>>>>>>>>>>>>>>>>>>>>Enter cmd:\n");
324 char cmd[100];
325 while(1)
326 {
327 memset(cmd, 0, 100);
328 mbtk_ril_err_enum err;
329 if(fgets(cmd, 100, stdin))
330 {
331 char *ptr = cmd + strlen(cmd) - 1;
332 while(ptr >= cmd && (*ptr == '\r' || *ptr == '\n'))
333 {
334 *ptr-- = '\0';
335 }
336 if(!strncasecmp(cmd, "version", 7))
337 {
338 char version[50] = {0};
339 err = mbtk_version_get(version);
340 if(err != MBTK_RIL_ERR_SUCCESS) {
341 printf("Error : %d\n", err);
342 } else {
343 printf("Version : %s\n", version);
344 }
345 }
346 else if(!strncasecmp(cmd, "imei", 4)){
347 char imei[50] = {0};
348 err = mbtk_imei_get(imei);
349 if(err != MBTK_RIL_ERR_SUCCESS) {
350 printf("Error : %d\n", err);
351 } else {
352 printf("IMEI : %s\n", imei);
353 }
354 } else if(!strncasecmp(cmd, "sn", 2)){
355 char sn[50] = {0};
356 err = mbtk_sn_get(sn);
357 if(err != MBTK_RIL_ERR_SUCCESS) {
358 printf("Error : %d\n", err);
359 } else {
360 printf("SN : %s\n", sn);
361 }
362 } else if(!strncasecmp(cmd, "meid", 4)){
363 char meid[50] = {0};
364 err = mbtk_meid_get(meid);
365 if(err != MBTK_RIL_ERR_SUCCESS) {
366 printf("Error : %d\n", err);
367 } else {
368 printf("MEID : %s\n", meid);
369 }
370 } else if(!strncasecmp(cmd, "volte", 5)){ // "volte" or "volte 0" or "volte 1"
371 int volte;
372 if(!strcasecmp(cmd, "volte")) { // Get
373 err = mbtk_volte_state_get(&volte);
374 if(err != MBTK_RIL_ERR_SUCCESS) {
375 printf("Error : %d\n", err);
376 } else {
377 printf("VoLTE : %d\n", volte);
378 }
379 } else { // Set
380 if(!strcasecmp(cmd, "volte 1")) { // Open VoLTE
381 volte = 1;
382 } else { // Close VoLTE
383 volte = 0;
384 }
385 err = mbtk_volte_state_set(volte);
386 if(err != MBTK_RIL_ERR_SUCCESS) {
387 printf("Error : %d\n", err);
388 } else {
389 printf("VoLTE set success\n");
390 }
391 }
392 } else if(!strncasecmp(cmd, "radio", 5)){ // "radio" or "radio 0" or "radio 1"
393 mbtk_radio_state_enum radio;
394 if(!strcasecmp(cmd, "radio")) { // Get
395 err = mbtk_radio_state_get(&radio);
396 if(err != MBTK_RIL_ERR_SUCCESS) {
397 printf("Error : %d\n", err);
398 } else {
399 printf("Radio : %d\n", radio);
400 }
401 } else { // Set
402 int reset;
403 int count = sscanf(cmd, "radio %d %d", &radio, &reset);
404 if(count > 0) {
405 if(count == 1) {
406 reset = 0;
407 }
408
409 err = mbtk_radio_state_set(radio, reset);
410 if(err != MBTK_RIL_ERR_SUCCESS) {
411 printf("Error : %d\n", err);
412 } else {
413 printf("Radio set success\n");
414 }
415 }
416 }
417 } else if(!strncasecmp(cmd, "temp", 4)){
418 int temp;
419 if(!strcasecmp(cmd, "temp 0")) {
420 err = mbtk_temp_get(MBTK_TEMP_TYPE_SOC, &temp);
421 if(err != MBTK_RIL_ERR_SUCCESS) {
422 printf("Error : %d\n", err);
423 } else {
424 printf("SOC : %d\n", temp);
425 }
426 } else if(!strcasecmp(cmd, "temp 1")) {
427 err = mbtk_temp_get(MBTK_TEMP_TYPE_RF, &temp);
428 if(err != MBTK_RIL_ERR_SUCCESS) {
429 printf("Error : %d\n", err);
430 } else {
431 printf("RF : %d\n", temp);
432 }
433 }
434 } else if(!strncasecmp(cmd, "cell_time", 9)){
435 char time[128] = {0};
436 err = mbtk_cell_time_get(time);
437 if(err != MBTK_RIL_ERR_SUCCESS) {
438 printf("Error : %d\n", err);
439 } else {
440 printf("Cell Time : %s\n", time);
441 }
442 } else if(!strncasecmp(cmd, "sim_state", 9)){
443 mbtk_sim_state_enum sim;
444 err = mbtk_sim_state_get(&sim);
445 if(err != MBTK_RIL_ERR_SUCCESS) {
446 printf("Error : %d\n", err);
447 } else {
448 printf("Sim State : %d\n", sim);
449 }
450 } else if(!strncasecmp(cmd, "sim_type", 8)){
451 mbtk_sim_card_type_enum type;
452 err = mbtk_sim_type_get(&type);
453 if(err != MBTK_RIL_ERR_SUCCESS) {
454 printf("Error : %d\n", err);
455 } else {
456 printf("Sim Type : %d\n", type);
457 }
458 } else if(!strncasecmp(cmd, "imsi", 4)){
459 char imsi[50] = {0};
460 err = mbtk_imsi_get(imsi);
461 if(err != MBTK_RIL_ERR_SUCCESS) {
462 printf("Error : %d\n", err);
463 } else {
464 printf("IMSI : %s\n", imsi);
465 }
466 } else if(!strncasecmp(cmd, "iccid", 5)){
467 char iccid[50] = {0};
468 err = mbtk_iccid_get(iccid);
469 if(err != MBTK_RIL_ERR_SUCCESS) {
470 printf("Error : %d\n", err);
471 } else {
472 printf("ICCID : %s\n", iccid);
473 }
474 } else if(!strncasecmp(cmd, "pn", 2)){
475 char phone_number[50] = {0};
476 err = mbtk_phone_number_get(phone_number);
477 if(err != MBTK_RIL_ERR_SUCCESS) {
478 printf("Error : %d\n", err);
479 } else {
480 printf("Phone Number : %s\n", phone_number);
481 }
482 }
483 /*
484 printf("pin_state:Get Sim lock state.\n");
485 printf("pin_times:Get PIN/PUK last times.\n");
486 printf("pin_open <PIN>:Enable sim lock.\n");
487 printf("pin_close <PIN>:Disable sim lock.\n");
488 printf("pin_change <old_pin> <new_pin>:Change sim PIN.\n");
489 printf("pin_verify <PIN>:Verify PIN.\n");
490 printf("puk_verify <PUK> <PIN>:Verify PUK.\n");
491 */
492 else if(!strncasecmp(cmd, "pin_state", 9)){
493 int lock_state;
494 err = mbtk_sim_lock_get(&lock_state);
495 if(err != MBTK_RIL_ERR_SUCCESS) {
496 printf("Error : %d\n", err);
497 } else {
498 printf("PIN state : %d\n", lock_state);
499 }
500 } else if(!strncasecmp(cmd, "pin_times", 9)){
501 mbtk_pin_puk_last_times_t times;
502 err = mbtk_sim_lock_retry_times_get(&times);
503 if(err != MBTK_RIL_ERR_SUCCESS) {
504 printf("Error : %d\n", err);
505 } else {
506 printf("PIN/PUK retry times:%d,%d,%d,%d\n", times.p1_retry, times.p2_retry, times.puk1_retry, times.puk2_retry);
507 }
508 } else if(!strncasecmp(cmd, "pin_open", 8)){
509 mbtk_sim_lock_info_t info;
510 info.type = MBTK_SIM_LOCK_TYPE_ENABLE;
511 int count = sscanf(cmd, "pin_open %s", info.pin1);
512 if(count == 1) {
513 err = mbtk_sim_lock_set(&info);
514 if(err != MBTK_RIL_ERR_SUCCESS) {
515 printf("Error : %d\n", err);
516 } else {
517 printf("Enable sim lock success.\n");
518 }
519 }
520 } else if(!strncasecmp(cmd, "pin_close", 9)){
521 mbtk_sim_lock_info_t info;
522 info.type = MBTK_SIM_LOCK_TYPE_DISABLE;
523 int count = sscanf(cmd, "pin_close %s", info.pin1);
524 if(count == 1) {
525 err = mbtk_sim_lock_set(&info);
526 if(err != MBTK_RIL_ERR_SUCCESS) {
527 printf("Error : %d\n", err);
528 } else {
529 printf("Disable sim lock success.\n");
530 }
531 }
532 } else if(!strncasecmp(cmd, "pin_change", 10)){
533 mbtk_sim_lock_info_t info;
534 info.type = MBTK_SIM_LOCK_TYPE_CHANGE;
535 int count = sscanf(cmd, "pin_change %s %s", info.pin1, info.pin2);
536 if(count == 2) {
537 err = mbtk_sim_lock_set(&info);
538 if(err != MBTK_RIL_ERR_SUCCESS) {
539 printf("Error : %d\n", err);
540 } else {
541 printf("PIN change success.\n");
542 }
543 }
544 } else if(!strncasecmp(cmd, "pin_verify", 10)){
545 mbtk_sim_lock_info_t info;
546 info.type = MBTK_SIM_LOCK_TYPE_VERIFY_PIN;
547 int count = sscanf(cmd, "pin_verify %s", info.pin1);
548 if(count == 1) {
549 err = mbtk_sim_lock_set(&info);
550 if(err != MBTK_RIL_ERR_SUCCESS) {
551 printf("Error : %d\n", err);
552 } else {
553 printf("PIN verify success.\n");
554 }
555 }
556 } else if(!strncasecmp(cmd, "puk_verify", 10)){
557 mbtk_sim_lock_info_t info;
558 info.type = MBTK_SIM_LOCK_TYPE_VERIFY_PUK;
559 int count = sscanf(cmd, "puk_verify %s %s", info.puk, info.pin1);
560 if(count == 2) {
561 err = mbtk_sim_lock_set(&info);
562 if(err != MBTK_RIL_ERR_SUCCESS) {
563 printf("Error : %d\n", err);
564 } else {
565 printf("PUK verify success.\n");
566 }
567 }
568 } else if(!strncasecmp(cmd, "plmn", 4)){
569 mbtk_plmn_info info;
570 err = mbtk_plmn_list_get(&info);
571 if(err != MBTK_RIL_ERR_SUCCESS) {
572 printf("Error : %d\n", err);
573 } else {
574 printf("PLMN number:%d\n", info.count);
575 int i = 0;
576 while(i < info.count) {
577 printf("%d,%d,%s\n", i+1, info.plmn[i].format, info.plmn[i].name);
578 i++;
579 }
580 }
581 }
582 else if(!strncasecmp(cmd, "avail_net", 9)){
583 mbtk_net_info_array_t net_list;
584 err = mbtk_available_net_get(&net_list);
585 if(err != MBTK_RIL_ERR_SUCCESS) {
586 printf("Error : %d\n", err);
587 } else {
588 printf("Available net number:%d\n", net_list.num);
589 int i = 0;
590 while(i < net_list.num) {
591 printf("NET : %d,%d,%d,%d\n", net_list.net_info[i].net_sel_mode,
592 net_list.net_info[i].net_type, net_list.net_info[i].net_state,
593 net_list.net_info[i].plmn);
594 i++;
595 }
596 }
597 } else if(!strncasecmp(cmd, "sel_mode", 8)){ // "sel_mode" or "sel_mode 1 7 46000"
598 mbtk_net_info_t net;
599 memset(&net, 0, sizeof(mbtk_net_info_t));
600 if(!strcasecmp(cmd, "sel_mode")) { // Get
601 err = mbtk_net_sel_mode_get(&net);
602 if(err != MBTK_RIL_ERR_SUCCESS) {
603 printf("Error : %d\n", err);
604 } else {
605 printf("Net : %d, %d, %d, %d\n", net.net_sel_mode, net.net_type, net.net_state, net.plmn);
606 }
607 } else { // Set
608 char *ptr = strstr(cmd, " ");
609 if(ptr == NULL)
610 continue;
611 while(*ptr != '\0' && *ptr == ' ')
612 ptr++;
613 net.net_sel_mode = (uint8)atoi(ptr);
614
615 ptr = strstr(ptr, " ");
616 if(ptr == NULL)
617 continue;
618 while(*ptr != '\0' && *ptr == ' ')
619 ptr++;
620 net.net_type = (uint8)atoi(ptr);
621
622 ptr = strstr(ptr, " ");
623 if(ptr == NULL)
624 continue;
625 while(*ptr != '\0' && *ptr == ' ')
626 ptr++;
627 net.plmn = (uint32)atoi(ptr);
628
629 err = mbtk_net_sel_mode_set(&net);
630 if(err != MBTK_RIL_ERR_SUCCESS) {
631 printf("Error : %d\n", err);
632 } else {
633 printf("Net select mode set success\n");
634 }
635 }
636 } else if(!strncasecmp(cmd, "band", 4)){ // "band" or "band support" or "band 0 79 147 482 524503"
637 mbtk_band_info_t band;
638 memset(&band, 0x0, sizeof(mbtk_band_info_t));
639 if(!strcasecmp(cmd, "band")) { // Get
640 err = mbtk_current_band_get(&band);
641 if(err != MBTK_RIL_ERR_SUCCESS) {
642 printf("Error : %d\n", err);
643 } else {
644 printf("Band : %d, %d, %d, %d, %d, %d\n", band.net_pref, band.gsm_band, band.umts_band, band.tdlte_band, band.fddlte_band, band.lte_ext_band);
645 }
646 } else if(!strcasecmp(cmd, "band support")) { // Get
647 err = mbtk_support_band_get(&band);
648 if(err != MBTK_RIL_ERR_SUCCESS) {
649 printf("Error : %d\n", err);
650 } else {
651 printf("Band : %d, %d, %d, %d, %d, %d\n", band.net_pref, band.gsm_band, band.umts_band, band.tdlte_band, band.fddlte_band, band.lte_ext_band);
652 }
653 } else { // "band 0 79 147 482 524503"
654 char *ptr = strstr(cmd, " ");
655 if(ptr == NULL)
656 continue;
657 while(*ptr != '\0' && *ptr == ' ')
658 ptr++;
659 band.net_pref = (uint8)atoi(ptr);
660
661 ptr = strstr(ptr, " ");
662 if(ptr == NULL)
663 continue;
664 while(*ptr != '\0' && *ptr == ' ')
665 ptr++;
666 band.gsm_band = (uint16)atoi(ptr);
667
668 ptr = strstr(ptr, " ");
669 if(ptr == NULL)
670 continue;
671 while(*ptr != '\0' && *ptr == ' ')
672 ptr++;
673 band.umts_band = (uint16)atoi(ptr);
674
675 ptr = strstr(ptr, " ");
676 if(ptr == NULL)
677 continue;
678 while(*ptr != '\0' && *ptr == ' ')
679 ptr++;
680 band.tdlte_band = (uint32)atoi(ptr);
681
682 ptr = strstr(ptr, " ");
683 if(ptr == NULL)
684 continue;
685 while(*ptr != '\0' && *ptr == ' ')
686 ptr++;
687 band.fddlte_band = (uint32)atoi(ptr);
688
689 err = mbtk_current_band_set(&band);
690 if(err != MBTK_RIL_ERR_SUCCESS) {
691 printf("Error : %d\n", err);
692 } else {
693 printf("Band set success\n");
694 }
695 }
696 } else if(!strncasecmp(cmd, "signal", 6)){
697 mbtk_signal_info_t signal;
698 err = mbtk_net_signal_get(&signal);
699 if(err != MBTK_RIL_ERR_SUCCESS) {
700 printf("Error : %d\n", err);
701 } else {
702 printf("Signal : %d, %d, %d, %d, %d, %d, %d, %d\n", signal.type, signal.rssi, signal.rxlev, signal.ber,
703 signal.rscp, signal.ecno, signal.rsrq, signal.rsrp);
704 }
705 } else if(!strncasecmp(cmd, "reg", 3)){
706 mbtk_net_reg_info_t reg;
707 err = mbtk_net_reg_get(&reg);
708 if(err != MBTK_RIL_ERR_SUCCESS) {
709 printf("Error : %d\n", err);
710 } else {
711 printf("REG : call_state=%d, data_state=%d, ims_state=%d, net_type=%d, %04x, %08x\n", reg.call_state, reg.data_state, reg.ims_state, reg.type, reg.lac, reg.ci);
712 }
713 } else if(!strncasecmp(cmd, "apn_del", 7)) {
714 mbtk_apn_info_t apn;
715 memset(&apn, 0, sizeof(mbtk_apn_info_t));
716 int cid, auto_save;
717 int count = sscanf(cmd, "apn_del %d %d", &cid, &auto_save);
718 if(count == 2) {
719 apn.cid = (mbtk_ril_cid_enum)cid;
720 apn.auto_save = (uint8)auto_save;
721 }
722 err = mbtk_apn_set(&apn);
723 if(err != MBTK_RIL_ERR_SUCCESS) {
724 printf("Error : %d\n", err);
725 } else {
726 printf("APN delete success\n");
727 }
728
729 } else if(!strncasecmp(cmd, "apn", 3)){
730 if(!strcasecmp(cmd, "apn")) { // Get apn
731 mbtk_apn_info_array_t apns;
732 err = mbtk_apn_get(&apns);
733 if(err != MBTK_RIL_ERR_SUCCESS) {
734 printf("Error : %d\n", err);
735 } else {
736 printf("APN Num:%d\n", apns.num);
737 int i = 0;
738 while(i < apns.num) {
b.liu10a34102024-08-20 20:36:24 +0800739 // printf("APN : %d, %s, %s\n", apns.apns[i].cid, apn2str(apns.apns[i].ip_type), apns.apns[i].apn);
740 printf("APN : %d, %s, auth-%d, auto_save-%d, auto_boot_call-%d, %s, %s, %s, %s\n", apns.apns[i].cid, apn2str(apns.apns[i].ip_type),
741 apns.apns[i].auth, apns.apns[i].auto_save, apns.apns[i].auto_boot_call,
742 str_empty(apns.apns[i].apn) ? "NULL" : apns.apns[i].apn,
743 str_empty(apns.apns[i].user) ? "NULL" : apns.apns[i].user,
744 str_empty(apns.apns[i].pass) ? "NULL" : apns.apns[i].pass,
745 str_empty(apns.apns[i].type) ? "NULL" : apns.apns[i].type);
b.liu87afc4c2024-08-14 17:33:45 +0800746 i++;
747 }
b.liu10a34102024-08-20 20:36:24 +0800748 printf("Def route : %d, def dns : %d\n", apns.cid_for_def_route, apns.cid_for_def_dns);
b.liu87afc4c2024-08-14 17:33:45 +0800749 }
750 } else { // apn <cid> <0/1/2/3> <0/1> <0/1> <apn>
751 mbtk_apn_info_t apn;
752 memset(&apn, 0, sizeof(mbtk_apn_info_t));
753#if 1
b.liubcf86c92024-08-19 19:48:28 +0800754 int cid, ip_type, auto_save, auto_boot_call, def_route, as_dns;
755 int count = sscanf(cmd, "apn %d %d %d %d %d %d %s",
756 &cid, &ip_type, &auto_save, &auto_boot_call,
757 &def_route, &as_dns, apn.apn);
b.liu87afc4c2024-08-14 17:33:45 +0800758
759 // Delete APN
760 if(strcmp(apn.apn,"null") == 0 || strcmp(apn.apn,"NULL") == 0) {
761 memset(apn.apn, 0, sizeof(apn.apn));
762 }
b.liubcf86c92024-08-19 19:48:28 +0800763 if(count == 7) {
b.liu87afc4c2024-08-14 17:33:45 +0800764 apn.cid = (mbtk_ril_cid_enum)cid;
765 apn.ip_type = (mbtk_ip_type_enum)ip_type;
766 apn.auto_save = (uint8)auto_save;
767 apn.auto_boot_call = (uint8)auto_boot_call;
b.liubcf86c92024-08-19 19:48:28 +0800768 apn.def_route = (uint8)def_route;
769 apn.as_dns = (uint8)as_dns;
b.liu87afc4c2024-08-14 17:33:45 +0800770 }
771#else
772 char *ptr = strstr(cmd, " ");
773 if(ptr == NULL)
774 continue;
775 while(*ptr != '\0' && *ptr == ' ')
776 ptr++;
777 apn.cid = (mbtk_ril_cid_enum)atoi(ptr);
778
779 ptr = strstr(ptr, " ");
780 if(ptr == NULL)
781 continue;
782 while(*ptr != '\0' && *ptr == ' ')
783 ptr++;
784 apn.ip_type = (mbtk_ip_type_enum)atoi(ptr);
785
786 ptr = strstr(ptr, " ");
787 if(ptr == NULL)
788 continue;
789 while(*ptr != '\0' && *ptr == ' ')
790 ptr++;
791 memcpy(apn.apn, ptr, strlen(ptr));
792#endif
793 err = mbtk_apn_set(&apn);
794 if(err != MBTK_RIL_ERR_SUCCESS) {
795 printf("Error : %d\n", err);
796 } else {
797 printf("APN set success\n");
798 }
799 }
800 }
b.liubcf86c92024-08-19 19:48:28 +0800801 else if(!strncasecmp(cmd, "data_call", 9)){ // data_call <0/1/2> <cid> <timeout>
802 // mbtk_ril_cid_enum cid, bool auto_boot_call, bool def_route, int retry_interval, int timeout, mbtk_ip_info_t *rsp_info
803 // data_call <0/1/2> <cid> <timeout>
804 int type, cid, auto_boot_call, def_route, as_dns;
805 int count = sscanf(cmd, "data_call %d %d %d %d %d", &type, &cid, &auto_boot_call, &def_route, &as_dns);
806 if(count != 5) {
807 count = sscanf(cmd, "data_call %d %d", &type, &cid);
808 }
809
810 if(count == 5 || count == 2) {
811 mbtk_ip_info_t ip;
812 memset(&ip, 0, sizeof(mbtk_ip_info_t));
813 if(type == MBTK_DATA_CALL_START) {
b.liu15f456b2024-10-31 20:16:06 +0800814 int retry_interval[] = {5, 10, 15};
815 err = mbtk_data_call_start((mbtk_ril_cid_enum)cid, (bool)auto_boot_call, (bool)def_route, (bool)as_dns, retry_interval,
816 3, 0, &ip);
b.liubcf86c92024-08-19 19:48:28 +0800817 } else if(type == MBTK_DATA_CALL_STOP) {
818 err = mbtk_data_call_stop((mbtk_ril_cid_enum)cid, 10);
819 } else {
820 err = mbtk_data_call_state_get((mbtk_ril_cid_enum)cid, &ip);
821 }
822 if(err) {
823 printf("Error : %d\n", err);
824 } else {
825 printf("DATA_CALL success\n");
826 if(type == MBTK_DATA_CALL_START || type == MBTK_DATA_CALL_STATE) {
827 if(ip.ipv4.valid) {
828 // log_hex("IPv4", &ipv4, sizeof(mbtk_ipv4_info_t));
829 char ip_tmp[20];
830
831 memset(ip_tmp, 0, 20);
832 if(inet_ntop(AF_INET, &(ip.ipv4.IPAddr), ip_tmp, 20) == NULL) {
833 printf("IP error.\n");
834 } else {
835 printf("IP : %s\n", ip_tmp);
836 }
837
838 memset(ip_tmp, 0, 20);
839 if(inet_ntop(AF_INET, &(ip.ipv4.PrimaryDNS), ip_tmp, 20) == NULL) {
840 printf("PrimaryDNS error.\n");
841 } else {
842 printf("PrimaryDNS : %s\n", ip_tmp);
843 }
844
845 memset(ip_tmp, 0, 20);
846 if(inet_ntop(AF_INET, &(ip.ipv4.SecondaryDNS), ip_tmp, 20) == NULL) {
847 printf("SecondaryDNS error.\n");
848 } else {
849 printf("SecondaryDNS : %s\n", ip_tmp);
850 }
851
852 memset(ip_tmp, 0, 20);
853 if(inet_ntop(AF_INET, &(ip.ipv4.GateWay), ip_tmp, 20) == NULL) {
854 printf("GateWay error.\n");
855 } else {
856 printf("GateWay : %s\n", ip_tmp);
857 }
858
859 memset(ip_tmp, 0, 20);
860 if(inet_ntop(AF_INET, &(ip.ipv4.NetMask), ip_tmp, 20) == NULL) {
861 printf("NetMask error.\n");
862 } else {
863 printf("NetMask : %s\n", ip_tmp);
864 }
865 }
866
867 if(ip.ipv6.valid) {
868 // log_hex("IPv6", &ipv6, sizeof(mbtk_ipv6_info_t));
869 char ip_tmp[50];
870
871 memset(ip_tmp, 0, 50);
872 if(ipv6_2_str(&(ip.ipv6.IPV6Addr), ip_tmp)) {
873 printf("IP error.\n");
874 } else {
875 printf("IP : %s\n", ip_tmp);
876 }
877
878 memset(ip_tmp, 0, 50);
879 if(ipv6_2_str(&(ip.ipv6.PrimaryDNS), ip_tmp)) {
880 printf("PrimaryDNS error.\n");
881 } else {
882 printf("PrimaryDNS : %s\n", ip_tmp);
883 }
884
885 memset(ip_tmp, 0, 50);
886 if(ipv6_2_str(&(ip.ipv6.SecondaryDNS), ip_tmp)) {
887 printf("SecondaryDNS error.\n");
888 } else {
889 printf("SecondaryDNS : %s\n", ip_tmp);
890 }
891
892 memset(ip_tmp, 0, 50);
893 if(ipv6_2_str(&(ip.ipv6.GateWay), ip_tmp)) {
894 printf("GateWay error.\n");
895 } else {
896 printf("GateWay : %s\n", ip_tmp);
897 }
898
899 memset(ip_tmp, 0, 50);
900 if(ipv6_2_str(&(ip.ipv6.NetMask), ip_tmp)) {
901 printf("NetMask error.\n");
902 } else {
903 printf("NetMask : %s\n", ip_tmp);
904 }
905 }
906 }
907 }
908 }
909 }
b.liu87afc4c2024-08-14 17:33:45 +0800910 else if(!strncasecmp(cmd, "cell", 4)){
911 char *ptr = strstr(cmd, ","); //CPMS,ME,ME,ME
912 if(ptr == NULL)
913 {
b.liub4772072024-08-15 14:47:03 +0800914 mbtk_cell_info_array_t cell;
915 err = mbtk_cell_get(&cell);
916 if(err) {
b.liu87afc4c2024-08-14 17:33:45 +0800917 printf("Error : %d\n", err);
b.liub4772072024-08-15 14:47:03 +0800918 } else if(cell.num > 0){
919 // Current server cell.
920 switch(cell.type)
b.liu87afc4c2024-08-14 17:33:45 +0800921 {
b.liub4772072024-08-15 14:47:03 +0800922 case MBTK_CELL_TYPE_GSM:
923 printf("GSM : lac=%d, ci=%d, arfcn=%d, bsic=%d\n", cell.cell[0].value1, cell.cell[0].value2, cell.cell[0].value3, cell.cell[0].value4);
924 break;
925 case MBTK_CELL_TYPE_UMTS:
926 printf("UMTS : lac=%d, ci=%d, arfcn=%d\n", cell.cell[0].value1, cell.cell[0].value2, cell.cell[0].value3);
927 break;
928 case MBTK_CELL_TYPE_LTE:
929 printf("LTE : tac=%d, PCI=%d, dlEuarfcn=%d, ulEuarfcn=%d, band=%d\n", cell.cell[0].value1, cell.cell[0].value2, cell.cell[0].value3, cell.cell[0].value4, cell.cell[0].value5);
930 break;
931 default:
932 break;
933 }
934
935 int i = 1;
936 while (i < cell.num)
937 {
938 switch(cell.type)
b.liu87afc4c2024-08-14 17:33:45 +0800939 {
b.liub4772072024-08-15 14:47:03 +0800940 case MBTK_CELL_TYPE_GSM:
941 printf("CELL : %d, %d, %d, %d, %d", cell.cell[i].value1, cell.cell[i].value2, cell.cell[i].value3, cell.cell[i].value4, cell.cell[i].value5);
b.liu87afc4c2024-08-14 17:33:45 +0800942 break;
b.liub4772072024-08-15 14:47:03 +0800943 case MBTK_CELL_TYPE_UMTS:
944 printf("CELL : lac=%d, ci=%d, arfcn=%d\n", cell.cell[i].value1, cell.cell[i].value2, cell.cell[i].value3);
b.liu87afc4c2024-08-14 17:33:45 +0800945 break;
b.liub4772072024-08-15 14:47:03 +0800946 case MBTK_CELL_TYPE_LTE:
947 printf("CELL : phyCellId=%d, euArfcn=%d, rsrp=%d, rsrq=%d\n", cell.cell[i].value1, cell.cell[i].value2, cell.cell[i].value3, cell.cell[i].value4);
b.liu87afc4c2024-08-14 17:33:45 +0800948 break;
949 default:
950 break;
951 }
b.liub4772072024-08-15 14:47:03 +0800952 i++;
b.liu87afc4c2024-08-14 17:33:45 +0800953 }
b.liub4772072024-08-15 14:47:03 +0800954 } else {
955 printf("Cell no found.");
b.liu87afc4c2024-08-14 17:33:45 +0800956 }
b.liu87afc4c2024-08-14 17:33:45 +0800957 }
958 else{
959 char *ptr = strstr(cmd, ","); //cell,2,3,,40936,430
960 char mem[50]={0};
961 char resp[1024] = {0};
962 if(ptr != NULL)
963 {
964 ptr++;
965 memset(mem, 0, sizeof(mem));
966 memcpy(mem, ptr, strlen(ptr));
967 printf("cell:%s\n", mem);
968 }
969 printf("cell_mem: %s \n", mem);
970
971 memset(resp, 0, sizeof(resp));
b.liub4772072024-08-15 14:47:03 +0800972 err = mbtk_cell_set(mem, resp);
b.liu87afc4c2024-08-14 17:33:45 +0800973 if(err) {
974 printf("Error : %d\n", err);
975 } else {
976 printf("cell set . resp:%s\n", resp);
977 }
b.liu87afc4c2024-08-14 17:33:45 +0800978 }
b.liub4772072024-08-15 14:47:03 +0800979 }
980 else if(!strncasecmp(cmd, "call", 4)){
b.liu87afc4c2024-08-14 17:33:45 +0800981 char phone_number[12];
982 char *ptr = strstr(cmd, " ");
983 if(ptr == NULL)
984 continue;
985 while(*ptr != '\0' && *ptr == ' ')
986 ptr++;
987 memset(phone_number,0,strlen(phone_number));
988 memcpy(phone_number,ptr,strlen(ptr));
989 printf("phone number is: %s\n",phone_number);
b.liub4772072024-08-15 14:47:03 +0800990 err = mbtk_call_start(phone_number);
b.liu87afc4c2024-08-14 17:33:45 +0800991 if(err) {
992 printf("Error : %d\n", err);
993 } else {
994 printf("Call success.\n");
995 }
996 } else if(!strncasecmp(cmd, "answer", 6)){
b.liub4772072024-08-15 14:47:03 +0800997 err = mbtk_call_answer();
b.liu87afc4c2024-08-14 17:33:45 +0800998 if(err) {
999 printf("Error : %d\n", err);
1000 } else {
1001 printf("Call success.\n");
1002 }
1003 } else if(!strncasecmp(cmd, "hangup", 6)){
1004 int phone_id;
1005 if(!strcasecmp(cmd, "hangup")) { // hang up all
b.liub4772072024-08-15 14:47:03 +08001006 err = mbtk_call_hang();
b.liu87afc4c2024-08-14 17:33:45 +08001007 if(err) {
1008 printf("Error : %d\n", err);
1009 } else {
1010 printf("Call hang up all.\n");
1011 }
1012 } else if(!strcasecmp(cmd, "hangup 0")) {
b.liub4772072024-08-15 14:47:03 +08001013 err = mbtk_waiting_or_background_call_hang();
b.liu87afc4c2024-08-14 17:33:45 +08001014 if(err) {
1015 printf("Error : %d\n", err);
1016 } else {
1017 printf("Call hang up waiting or background.\n");
1018 }
1019 } else if(!strcasecmp(cmd, "hangup 3")) {
b.liub4772072024-08-15 14:47:03 +08001020 err = mbtk_foreground_resume_background_call_hang();
b.liu87afc4c2024-08-14 17:33:45 +08001021 if(err) {
1022 printf("Error : %d\n", err);
1023 } else {
1024 printf("Call hang up foreground resume background.\n");
1025 }
1026 } else {
1027 if(!strcasecmp(cmd, "hangup 1")) { // hang up a call
1028 phone_id = 1;
1029 } else if(!strcasecmp(cmd, "hangup 2")) {
1030 phone_id = 2;
1031 } else {
1032 printf("Error : Invalid input\n");
1033 }
b.liub4772072024-08-15 14:47:03 +08001034 err = mbtk_a_call_hang(phone_id);
b.liu87afc4c2024-08-14 17:33:45 +08001035 if(err) {
1036 printf("Error : %d\n", err);
1037 } else {
1038 printf("A Call hang up.\n");
1039 }
1040 }
1041 } else if(!strncasecmp(cmd, "waitin", 6)){
1042 mbtk_call_info_t reg;
b.liub4772072024-08-15 14:47:03 +08001043 err = mbtk_call_reg_get(&reg);
b.liu87afc4c2024-08-14 17:33:45 +08001044 if(err) {
1045 printf("Error : %d\n", err);
1046 } else {
1047 if(reg.call_wait == 0) {
1048 printf("No call ring\n");
1049 }
1050 else {
1051 printf("RING : %d, %d, %d, %d, %d, %s, %d\n", reg.dir1, reg.dir, reg.state, reg.mode, reg.mpty, reg.phone_number, reg.type);
1052 }
1053 }
1054 } else if(!strncasecmp(cmd, "mute", 4)){ // "mute" or "mute 0" or "mute 1"
1055 int mute;
1056 if(!strcasecmp(cmd, "mute")) { // Get
b.liub4772072024-08-15 14:47:03 +08001057 err = mbtk_mute_state_get(&mute);
b.liu87afc4c2024-08-14 17:33:45 +08001058 if(err) {
1059 printf("Error : %d\n", err);
1060 } else {
1061 printf("mute : %d\n", mute);
1062 }
1063 } else { // Set
1064 if(!strcasecmp(cmd, "mute 1")) { // on mute
1065 mute = 1;
1066 } else { // off mute
1067 mute = 0;
1068 }
b.liub4772072024-08-15 14:47:03 +08001069 err = mbtk_mute_state_set(mute);
b.liu87afc4c2024-08-14 17:33:45 +08001070 if(err) {
1071 printf("Error : %d\n", err);
1072 } else {
1073 printf("mute set success\n");
1074 }
1075 }
1076 } else if(!strncasecmp(cmd, "DTMF", 4)){ // valid character: (0, 1, ..., 9, A, B, C, D, *, #)
1077
1078 mbtk_call_dtmf_info_t reg;
1079
1080 char *ptr = strstr(cmd, " ");
1081 if(ptr == NULL)
1082 continue;
1083 while(*ptr != '\0' && *ptr == ' ')
1084 ptr++;
1085 reg.character = *ptr;
1086
1087 ptr = strstr(ptr, " ");
1088 if(ptr == NULL)
1089 continue;
1090 while(*ptr != '\0' && *ptr == ' ')
1091 ptr++;
1092 reg.duration = (uint32)atoi(ptr);
1093 printf("DTMF character is: %c,%d\n",reg.character, reg.duration);
b.liub4772072024-08-15 14:47:03 +08001094 err = mbtk_dtmf_send(&reg);
b.liu87afc4c2024-08-14 17:33:45 +08001095 if(err) {
1096 printf("Error : %d\n", err);
1097 } else {
1098 printf("DTMF success.\n");
1099 }
b.liub4772072024-08-15 14:47:03 +08001100 } else if(!strncasecmp(cmd, "cmgf", 4)){ // set mode 0: pud, 1:text
1101 int mode;
1102 if(!strcasecmp(cmd, "cmgf")) { // Get
1103 err = mbtk_sms_cmgf_get(&mode);
1104 if(err) {
1105 printf("Error : %d\n", err);
1106 } else {
1107 printf("VoLTE : %d\n", mode);
1108 }
1109 } else { // Set
1110 if(!strcasecmp(cmd, "cmgf 1")) { // cmgf 1
1111 mode = 1;
1112 } else { //
1113 mode = 0;
1114 }
1115 printf("mode:%d\n", mode);
1116 sleep(2);
1117 err = mbtk_sms_cmgf_set(mode);
1118 if(err) {
1119 printf("Error : %d\n", err);
1120 } else {
1121 printf("VoLTE set success\n");
1122 }
1123 }
1124 }else if(!strncasecmp(cmd, "cpms", 4)){ // //CPMS=ME, ME, ME
1125 char mem[100] = {0};
1126 char resp[100] = {0};
1127 if(!strcasecmp(cmd, "cpms")) { // Get
1128 err = mbtk_sms_cpms_get(&mem);
1129 if(err) {
1130 printf("Error : %d\n", err);
1131 } else {
1132 printf("cpms : %s\n", mem);
1133 }
1134 } else { // Set
1135
1136 char *ptr = strstr(cmd, ","); //CPMS,ME,ME,ME
1137 if(ptr != NULL)
1138 {
1139 ptr++;
1140 memset(mem, 0, sizeof(mem));
1141 memcpy(mem, ptr, strlen(ptr));
1142 printf("cpms:%s\n", mem);
1143 }
1144 printf("cpms 0\n");
1145
1146 memset(resp, 0, sizeof(resp));
1147 err = mbtk_sms_cpms_set(mem, resp);
1148 if(err) {
1149 printf("Error : %d\n", err);
1150 } else {
1151 printf("cpms set success. resp:%s\n", resp);
1152 }
1153 }
1154 }else if(!strncasecmp(cmd, "cmgs", 4)){ // AT+CMGS="10086", CMGS TEST
1155 char cmgs[1024] = {0};
1156 char resp[50] = {0};
1157 if(!strcasecmp(cmd, "cmgs")) { // Get
1158 int mode;
1159 // err = mbtk_sms_cmgs_get(info_handle, &mode);
1160 if(err) {
1161 printf("Error : %d\n", err);
1162 } else {
1163 printf("VoLTE : %d\n", mode);
1164 }
1165 } else { // Set
1166
1167 /*
1168 *AT+CMGS="10086", CMGS TEST // Send a SMS
1169 > CMGS TEST
1170 +CMGS: 17
1171 OK
1172 */
1173
1174 char *ptr = strstr(cmd, "cmgs,"); //CMGS="10086",hf
1175 if(ptr != NULL)
1176 {
1177 ptr = strstr(cmd, ",");
1178 ptr++;
1179 memset(cmgs, 0, sizeof(cmgs));
1180 memcpy(cmgs, ptr, strlen(ptr));
1181 printf("1cmgs:%s, strlen(cmgs):%d\n", cmgs, strlen(cmgs));
1182 }
1183
1184 memset(resp, 0, sizeof(resp));
1185 err = mbtk_sms_cmgs_set(cmgs, resp);
1186 if(err) {
1187 printf("Error : %d\n", err);
1188 } else {
1189 printf("cmgs set success . resp:%s\n", resp);
1190 }
1191 }
1192 }else if(!strncasecmp(cmd, "cmss", 4)){ // +CMSS=<index>[,<da>[,<toda>]]
1193 char cmss[20] = {0};
1194 char resp[20] = {0};
1195 if(!strcasecmp(cmd, "cmgs")) { // Get
1196 printf("cmss : OK\n");
1197
1198 } else {
1199 char *ptr = strstr(cmd, "cmss,"); //CMSS=<index>
1200 if(ptr != NULL)
1201 {
1202 ptr = strstr(cmd, ",");
1203 ptr++;
1204 memset(cmss, 0, sizeof(cmss));
1205 memcpy(cmss, ptr, strlen(ptr));
1206 printf("1cmss:%s\n", cmss);
1207 }
1208
1209
1210 err = mbtk_sms_cmss_set(cmss, resp);
1211 if(err) {
1212 printf("Error : %d\n", err);
1213 } else {
1214 printf("cmss set success. resp:%s\n", resp);
1215 }
1216 }
1217 }
1218 else if(!strncasecmp(cmd, "cmgr", 4)){ // +CMGR=<index
1219 int index = 0;
1220 char resp[1024] = {0};
1221 if(!strcasecmp(cmd, "cmgr")) { // Get
1222 printf("cmgr : OK\n");
1223
1224 } else {
1225 char *ptr = strstr(cmd, "cmgr,"); //+CMGR <index>
1226 if(ptr != NULL)
1227 {
1228 ptr = strstr(cmd, ",");
1229 ptr++;
1230 index = atoi(ptr);
1231 }
1232 printf("1index:%d\n", index);
1233
1234 memset(resp, 0, sizeof(resp));
1235 err = mbtk_sms_cmgr_set(index, resp);
1236 if(err) {
1237 printf("Error : %d\n", err);
1238 } else {
1239 printf("cmgr set success. rep:%s\n", resp);
1240 }
1241 }
1242 }
1243 else if(!strncasecmp(cmd, "cmgw", 4)){ // +CMGW=<oa/da>[,<tooa/toda>[,<stat>]]<CR>
1244 //+CMGW=<length>[,<stat>]<CR>PDU is given<ctrl-Z/ESC>
1245 char cmgw[128] = {0};
1246 char resp[50] = {0};
1247 if(!strcasecmp(cmd, "cmgw")) { // Get
1248 printf("cmgw : OK\n");
1249
1250 } else {
1251 char *ptr = strstr(cmd, "cmgw,"); //+CMGW, <oa/da>, data
1252 if(ptr != NULL)
1253 {
1254 ptr = strstr(cmd, ",");
1255 ptr++;
1256 memset(cmgw, 0, sizeof(cmgw));
1257 memcpy(cmgw, ptr, strlen(ptr));
1258 printf("cmgw:%s\n", cmgw);
1259 }
1260
1261 memset(resp, 0, sizeof(resp));
1262 err = mbtk_sms_cmgw_set(cmgw, resp);
1263 if(err) {
1264 printf("Error : %d\n", err);
1265 } else {
1266 printf("cmgw set success. resp:%s\n", resp);
1267 }
1268 }
1269 }
1270 else if(!strncasecmp(cmd, "cmgd", 4)){ // +CMGD=<index>[,<delflag>
1271 //
1272 char cmgd[128] = {0};
1273 if(!strcasecmp(cmd, "cmgd")) { // Get
1274 printf("cmgd : OK\n");
1275
1276 } else {
1277 char *ptr = strstr(cmd, ","); //+CMGD=<index>[,<delflag>
1278 if(ptr != NULL)
1279 {
1280 ptr++;
1281 memset(cmgd, 0, sizeof(cmgd));
1282 memcpy(cmgd, ptr, strlen(ptr));
1283 printf("1cmgd:%s\n", cmgd);
1284 }
1285
1286
1287 err = mbtk_sms_cmgd_set(cmgd);
1288 if(err) {
1289 printf("Error : %d\n", err);
1290 } else {
1291 printf("VoLTE set success\n");
1292 }
1293 }
1294 }
1295 else if(!strncasecmp(cmd, "cmgl", 4)){ // AT+CMGL[=<stat>]
1296 //
1297 char cmgl[128] = {0};
1298 char resp[5*1024] ={0};
1299 if(!strcasecmp(cmd, "cmgl")) { // Get
1300 printf("cmgl : OK\n");
1301
1302 } else {
1303 char *ptr = strstr(cmd, "cmgl,"); // AT+CMGL[=<stat>]
1304 if(ptr != NULL)
1305 {
1306 ptr = strstr(cmd, ",");
1307 ptr++;
1308 memset(cmgl, 0, sizeof(cmgl));
1309 memcpy(cmgl, ptr, strlen(ptr));
1310 printf("0cmgl:%s\n", cmgl);
1311 }
1312
1313 memset(resp, 0, sizeof(resp));
1314 err = mbtk_sms_cmgl_set(cmgl, resp);
1315 if(err) {
1316 printf("Error : %d\n", err);
1317 } else {
1318 // printf("cmgl set success, reg:%s\n",resp);
1319 }
1320 }
1321 }
1322 else if(!strncasecmp(cmd, "csca", 4)){ // AT+CSCA=<number> [,<type>]
1323 //
1324 char csca[128] = {0};
1325 if(!strcasecmp(cmd, "csca")) { // Get
1326 err = mbtk_sms_csca_get(csca);
1327 if(err) {
1328 printf("mbtk_sms_csca_get Error : %d\n", err);
1329 } else {
1330 printf("mbtk_sms_csca_get success\n");
1331 }
1332
1333 } else {
1334 char *ptr = strstr(cmd, ","); // AT+CSCA=<number> [,<type>]
1335 if(ptr != NULL)
1336 {
1337 ptr++;
1338 memset(csca, 0, sizeof(csca));
1339 memcpy(csca, ptr, strlen(ptr));
1340 printf("csca:%s\n", csca);
1341 }
1342
1343 err = mbtk_sms_csca_set(csca);
1344 if(err) {
1345 printf("Error : %d\n", err);
1346 } else {
1347 printf("VoLTE set success\n");
1348 }
1349 }
1350 }
1351 else if(!strncasecmp(cmd, "csmp", 4)){ // AT+CSMP=[<fo>[,<vp>[,<pid>[,<dcs>]]]]
1352 //
1353 char csmp[128] = {0};
1354 if(!strcasecmp(cmd, "csmp")) { // Get
1355 printf("cmgl : OK\n");
1356
1357 } else {
1358 char *ptr = strstr(cmd, ","); // AT+CSMP=[<fo>[,<vp>[,<pid>[,<dcs>]]]]
1359 if(ptr != NULL)
1360 {
1361 ptr++;
1362 memset(csmp, 0, sizeof(csmp));
1363 memcpy(csmp, ptr, strlen(ptr));
1364 printf("csmp:%s\n", csmp);
1365 }
1366
1367 err = mbtk_sms_csmp_set(csmp);
1368 if(err) {
1369 printf("Error : %d\n", err);
1370 } else {
1371 printf("VoLTE set success\n");
1372 }
1373 }
1374 }
1375 else if(!strncasecmp(cmd, "cscb", 4)){ // AT+CSCB=<[<mode>[,<mids>[,<dcss>]]]>
1376 //
1377 char cscb[128] = {0};
1378 if(!strcasecmp(cmd, "cscb")) { // Get
1379 printf("cmgl : OK\n");
1380
1381 } else {
1382 char *ptr = strstr(cmd, ","); // AT+CSCB=<[<mode>[,<mids>[,<dcss>]]]>
1383 if(ptr != NULL)
1384 {
1385 ptr++;
1386 memset(cscb, 0, sizeof(cscb));
1387 memcpy(cscb, ptr, strlen(ptr));
1388 printf("cscb:%s\n", cscb);
1389 }
1390
1391 err = mbtk_sms_cscb_set(cscb);
1392 if(err) {
1393 printf("Error : %d\n", err);
1394 } else {
1395 printf("VoLTE set success\n");
1396 }
1397 }
1398 }
1399#if 0
1400 else if(!strncasecmp(cmd, "shutdown", 8)){
b.liu87afc4c2024-08-14 17:33:45 +08001401 if(!strcasecmp(cmd, "shutdown 0")) {
1402 err = mbtk_system_reboot(0);
1403 if(err) {
1404 printf("Error : %d\n", err);
1405 } else {
1406 printf("Success.\n");
1407 }
1408 } else if(!strcasecmp(cmd, "shutdown 1")) {
1409 err = mbtk_system_reboot(1);
1410 if(err) {
1411 printf("Error : %d\n", err);
1412 } else {
1413 printf("Success.\n");
1414 }
1415 } else if(!strcasecmp(cmd, "shutdown 2")) {
1416 err = mbtk_system_reboot(2);
1417 if(err) {
1418 printf("Error : %d\n", err);
1419 } else {
1420 printf("Success.\n");
1421 }
1422 } else {
1423 printf("Error.");
1424 }
1425 } else if(!strncasecmp(cmd, "power_sim", 9)){
1426 if(!strcasecmp(cmd, "power_sim 0")) {
1427 err = mbtk_sim_power_set(0);
1428 if(err) {
1429 printf("Error : %d\n", err);
1430 } else {
1431 printf("Success.\n");
1432 }
1433 } else if(!strcasecmp(cmd, "power_sim 1")) {
1434 err = mbtk_sim_power_set(1);
1435 if(err) {
1436 printf("Error : %d\n", err);
1437 } else {
1438 printf("Success.\n");
1439 }
1440 } else {
1441 printf("Error.");
1442 }
1443 } else if(!strncasecmp(cmd, "time", 4)){
1444 if(!strcasecmp(cmd, "time 0")) {
1445 err = mbtk_time_set(info_handle, 0, NULL);
1446 if(err) {
1447 printf("Error : %d\n", err);
1448 } else {
1449 printf("Success.\n");
1450 }
1451 } else if(!strcasecmp(cmd, "time 1")) {
1452 err = mbtk_time_set(info_handle, 1, NULL);
1453 if(err) {
1454 printf("Error : %d\n", err);
1455 } else {
1456 printf("Success.\n");
1457 }
1458 } else if(!strncasecmp(cmd, "time 2 ", 7)) {
1459 err = mbtk_time_set(info_handle, 2, cmd + 7);
1460 if(err) {
1461 printf("Error : %d\n", err);
1462 } else {
1463 printf("Success.\n");
1464 }
1465 } else { // Get time type.
1466 int time_type;
1467 err = mbtk_time_get(info_handle, &time_type);
1468 if(err) {
1469 printf("Error : %d\n", err);
1470 } else {
1471 printf("Time type:%d.\n", time_type);
1472 }
1473 }
b.liu87afc4c2024-08-14 17:33:45 +08001474 }
1475#endif
1476 else if(!strcasecmp(cmd, "h") || !strcasecmp(cmd, "help")) {
1477 help();
1478 } else if(!strcasecmp(cmd, "q")) {
1479 mbtk_ril_deinit();
1480 break;
1481 } else {
1482 printf("\n");
1483 }
1484 }
1485 }
1486
1487 thread_exit_with_wait();
1488
1489exit:
1490 mbtk_ril_deinit();
1491
1492 LOG("Client exec complete.");
1493
1494 return 0;
1495}