blob: fb7591f360c415c1a8b91c30a62521a62fb0cec0 [file] [log] [blame]
b.liu4e243dc2023-11-27 11:20:00 +08001#include "lynq-qser-autosuspend.h"
r.xiaoec113d12024-01-12 02:13:28 -08002
3#include <stdio.h>
4#include <unistd.h>
5#include <stddef.h>
6#include <sys/types.h>
7#include <sys/stat.h>
8#include <fcntl.h>
r.xiaocfd7c682024-01-22 03:59:46 -08009#include <pthread.h>
10#include <string.h>
r.xiao7000d212024-01-31 23:45:27 -080011#include <stdlib.h>
12#include <errno.h>
13#include <sys/epoll.h>
14#include <linux/input.h>
r.xiaoec113d12024-01-12 02:13:28 -080015
b.liu4e243dc2023-11-27 11:20:00 +080016#include "mbtk_type.h"
r.xiaoec113d12024-01-12 02:13:28 -080017#include "mbtk_log.h"
18#include "mbtk_info_api.h"
19
20/*
21该模块是系统睡眠,锁存在的时候系统无法休眠
22验证是否在睡眠状态,则需要测试功耗
23电源管理原则,只要有一个wakelock锁存在,系统就不会进入Suspend状态
24所以名字可以随便取,表示需要这样的一个锁,所以系统就不会进行睡眠
25*/
26#define MTBK_POWERIND "/system/etc/powerind" //1806
27//#define MTBK_POWERIND "/etc/powerind" //1803
28
29static bool call_Off = FALSE;
30static bool nw_off = FALSE;
31static bool sms_off = FALSE;
32static bool data_off = FALSE;
33
r.xiao7000d212024-01-31 23:45:27 -080034static pthread_t lpm_t;
r.xiaocfd7c682024-01-22 03:59:46 -080035static int edge_t = 0;
r.xiao7000d212024-01-31 23:45:27 -080036static int epoll_fd_t = -1;
37static int fd_t = -1;
38static int socket_t[2];
r.xiaocfd7c682024-01-22 03:59:46 -080039
40typedef struct{
41 qser_lpm_wakeupin_data_t wakeupin;
42 qser_lpm_wakeupout_data_t wakeupout;
r.xiao7000d212024-01-31 23:45:27 -080043 qser_lpm_Handler_t wakehandle;
r.xiaocfd7c682024-01-22 03:59:46 -080044}lynq_wake_t;
45
46static lynq_wake_t lpm_init;
47
r.xiaoec113d12024-01-12 02:13:28 -080048
r.xiao7000d212024-01-31 23:45:27 -080049typedef struct
50{
51 int fd;
52 char name[64];
53} lock_name;
54
55#define LOCK_MAX_SIZE 129
56
57lock_name lynq_lock_name[LOCK_MAX_SIZE]={0};
58static bool autosleep_enable = FALSE;
59
60static mbtk_info_handle_t* whitelist_info_handle = NULL;
61
r.xiaoec113d12024-01-12 02:13:28 -080062static int powerrind_get()
63{
r.xiao7000d212024-01-31 23:45:27 -080064 char buffer[4];
r.xiaoec113d12024-01-12 02:13:28 -080065 int ret = 0;
66
67 int fd = open(MTBK_POWERIND, O_RDWR | O_SYNC, 0662);
68 if (fd != -1)
69 {
70 read(fd, buffer, strlen(buffer)+1);
71 close(fd);
72 }
73
74 ret = atoi(buffer);
75
76 return ret;
77}
78
r.xiao7000d212024-01-31 23:45:27 -080079#if 1
80static int sleep_epoll_deregister(int epoll_fd,int fd )
r.xiaoec113d12024-01-12 02:13:28 -080081{
r.xiao7000d212024-01-31 23:45:27 -080082 int ret;
83 do {
84 ret = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, NULL );
85 } while (ret < 0 && errno == EINTR);
86 return ret;
87}
r.xiaoec113d12024-01-12 02:13:28 -080088
r.xiao7000d212024-01-31 23:45:27 -080089static int sleep_epoll_register(int epoll_fd, int fd)
90{
91 struct epoll_event ev;
92 int ret, flags;
r.xiaoec113d12024-01-12 02:13:28 -080093
r.xiao7000d212024-01-31 23:45:27 -080094 /* important: make the fd non-blocking */
95 flags = fcntl(fd, F_GETFL);
96 fcntl(fd, F_SETFL, flags | O_NONBLOCK);
r.xiaoec113d12024-01-12 02:13:28 -080097
r.xiao7000d212024-01-31 23:45:27 -080098 ev.events = EPOLLIN;
99 ev.data.fd = fd;
100 do {
101 ret = epoll_ctl( epoll_fd, EPOLL_CTL_ADD, fd, &ev );
102 } while (ret < 0 && errno == EINTR);
103
104 return ret;
105}
106#endif
r.xiaoec113d12024-01-12 02:13:28 -0800107
b.liu5fa9e772023-11-23 18:00:55 +0800108int qser_autosuspend_enable(char enable)
109{
r.xiaoec113d12024-01-12 02:13:28 -0800110 //UNUSED(enable);
111
112 if(enable == 1)
113 {
114 if(!access("/sys/power/autosleep", W_OK))
115 {
116 system("echo mem > /sys/power/autosleep");
117 autosleep_enable = TRUE;
118 return 0;
119 }
120 else
121 {
122 LOGE("/sys/power/autosleep can not write.");
123 return -1;
124 }
125 }
126 else
127 {
128 if(!access("/sys/power/autosleep", W_OK))
129 {
130 system("echo off > /sys/power/autosleep");
131 autosleep_enable = FALSE;
132 return 0;
133 }
134 else
135 {
136 LOGE("/sys/power/autosleep can not write.");
137 return -1;
138 }
139 }
b.liu5fa9e772023-11-23 18:00:55 +0800140
141 return 0;
142}
143
144int qser_wakelock_create(const char* name , size_t len)
145{
r.xiaoec113d12024-01-12 02:13:28 -0800146 //UNUSED(name);
147 //UNUSED(len);
148
149 if(!autosleep_enable) {
150 LOGE("Autosleep not enable.");
151 return -1;
152 }
153
r.xiao7000d212024-01-31 23:45:27 -0800154 if((name != NULL) && (len < 33))
r.xiaoec113d12024-01-12 02:13:28 -0800155 {
156 int i;
r.xiao7000d212024-01-31 23:45:27 -0800157 for(i=1 ;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800158 {
159 if(lynq_lock_name[i].fd == 0)
160 break;
161 }
r.xiao7000d212024-01-31 23:45:27 -0800162
163 if (i >= LOCK_MAX_SIZE)
164 {
r.xiaob9cf0e62024-02-02 04:11:48 -0800165 LOGE("Fd is full.");
r.xiao7000d212024-01-31 23:45:27 -0800166 return -1;
167 }
168
r.xiaoec113d12024-01-12 02:13:28 -0800169 memcpy(lynq_lock_name[i].name, name, strlen(name)+1);
170 lynq_lock_name[i].fd = i;
171 return lynq_lock_name[i].fd;
172 }
173 else
174 return -1;
b.liu5fa9e772023-11-23 18:00:55 +0800175
176 return 0;
177}
178
179int qser_wakelock_lock(int fd)
180{
r.xiaoec113d12024-01-12 02:13:28 -0800181 //UNUSED(fd);
182
183 if(!autosleep_enable) {
184 LOGE("Autosleep not enable.");
185 return -1;
186 }
187
r.xiao7000d212024-01-31 23:45:27 -0800188
r.xiaoec113d12024-01-12 02:13:28 -0800189 int i;
r.xiao7000d212024-01-31 23:45:27 -0800190 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800191 {
192 if(lynq_lock_name[i].fd == fd)
193 break;
194 }
r.xiao7000d212024-01-31 23:45:27 -0800195 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800196 return -1;
197
198 if(!access("/sys/power/wake_lock", W_OK))
199 {
200 char cmd[128]={0};
201 sprintf(cmd, "echo %s > /sys/power/wake_lock", lynq_lock_name[i].name);
202 system(cmd);
203 return 0;
204 }
205 else
206 {
r.xiao7000d212024-01-31 23:45:27 -0800207 LOGE("/sys/power/wake_lock can not write.");
r.xiaoec113d12024-01-12 02:13:28 -0800208 return -1;
209 }
b.liu5fa9e772023-11-23 18:00:55 +0800210
211 return 0;
212}
213
214int qser_wakelock_unlock(int fd)
215{
r.xiaoec113d12024-01-12 02:13:28 -0800216 //UNUSED(fd);
217
218 if(!autosleep_enable) {
219 LOGE("Autosleep not enable.");
220 return -1;
221 }
222
223 int i;
r.xiao7000d212024-01-31 23:45:27 -0800224 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800225 {
226 if(lynq_lock_name[i].fd == fd)
227 break;
228 }
r.xiao7000d212024-01-31 23:45:27 -0800229 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800230 return -1;
231
232 if(!access("/sys/power/wake_unlock", W_OK))
233 {
234 char cmd[128]={0};
235 sprintf(cmd, "echo %s > /sys/power/wake_unlock", lynq_lock_name[i].name);
236 system(cmd);
237 return 0;
238 }
239 else
240 {
r.xiao7000d212024-01-31 23:45:27 -0800241 LOGE("/sys/power/wake_unlock can not write.");
r.xiaoec113d12024-01-12 02:13:28 -0800242 return -1;
243 }
b.liu5fa9e772023-11-23 18:00:55 +0800244
245 return 0;
246}
247
248int qser_wakelock_destroy(int fd)
249{
r.xiaoec113d12024-01-12 02:13:28 -0800250 //UNUSED(fd);
251
252 if(!autosleep_enable) {
253 LOGE("Autosleep not enable.");
254 return -1;
255 }
256
257 int i;
r.xiao7000d212024-01-31 23:45:27 -0800258 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800259 {
260 if(lynq_lock_name[i].fd == fd)
261 break;
262 }
r.xiao7000d212024-01-31 23:45:27 -0800263 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800264 return -1;
265 else
266 {
267 lynq_lock_name[i].fd = 0;
268 memset(lynq_lock_name[i].name, 0, 128);
269 return 0;
270 }
b.liu5fa9e772023-11-23 18:00:55 +0800271
272 return 0;
273}
274
r.xiaocfd7c682024-01-22 03:59:46 -0800275void *threadFunction(void *arg)
276{
277 int pinValue;
r.xiaoce21a042024-02-03 19:35:19 -0800278 int i;
r.xiao7000d212024-01-31 23:45:27 -0800279 char buf[8] = {0};
280 struct input_event ev_input = { 0 };
281 const int size = sizeof(struct input_event);
r.xiaocfd7c682024-01-22 03:59:46 -0800282
r.xiao7000d212024-01-31 23:45:27 -0800283 epoll_fd_t = epoll_create(2);
284/*
285 struct epoll_event event;
286 memset(&event, 0, sizeof(struct epoll_event));
287 event.events = EPOLLIN | EPOLLET;
288 event.data.fd = open("/dev/input/event0", O_RDONLY); // 根据实际情况指定正确的GPIO设备文件名
289
290 fd_t = event.data.fd;
291 if (epoll_ctl(epoll_fd_t, EPOLL_CTL_ADD, event.data.fd, &event) == -1)
292 {
293 LOGE("Failed to add GPIO device file.");
294 return NULL;
295 }
296
297 memset(&event, 0, sizeof(struct epoll_event));
298 event.events = EPOLLIN | EPOLLET;
299 event.data.fd = socket_t[0];
300 LOGE("threadFunction event.data.fd =[%d] ", event.data.fd);
301
302 if (epoll_ctl(epoll_fd_t, EPOLL_CTL_ADD, event.data.fd, &event) == -1)
303 {
304 LOGE("Failed to add GPIO device file.");
305 return NULL;
306 }
307*/
308 fd_t = open("/dev/input/event0", O_RDONLY);
309
310 sleep_epoll_register(epoll_fd_t, fd_t);
311 sleep_epoll_register(epoll_fd_t, socket_t[1]);
312
313 while (true)
314 {
315 struct epoll_event events[2];
316 struct epoll_event ev;
317 int cmd = 0;
318
319 int numEvents = epoll_wait(epoll_fd_t, events, 2, -1);
320
r.xiaoce21a042024-02-03 19:35:19 -0800321 for (i = 0; i < numEvents; ++i)
r.xiao7000d212024-01-31 23:45:27 -0800322 {
323 if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP))
324 {
325 LOGE("Error on GPIO device.");
326 return NULL;
327 }
328 else if ((events[i].events & EPOLLIN) || (events[i].events & EPOLLET))
329 {
330 //handleInterrupt(events[i].data.fd);
331 if (events[i].data.fd == socket_t[1])
332 {
333 memset(buf, 0, sizeof(buf));
334 read(socket_t[1], buf, sizeof(buf));
335 if (1 == atoi(buf))
336 {
337 if(close(fd_t) == 0)
338 LOGI("close(fd_t)ing");
339
340 sleep_epoll_deregister(epoll_fd_t, socket_t[1]);
341 sleep_epoll_deregister(epoll_fd_t, fd_t);
342 /*
343 memset(&ev, 0, sizeof(struct epoll_event));
344 ev.events = EPOLLIN | EPOLLET;
345 ev.data.fd = socket_t[1];
346 epoll_ctl( epoll_fd_t, EPOLL_CTL_DEL, ev.data.fd, &ev);
347
348 memset(&ev, 0, sizeof(struct epoll_event));
349 ev.events = EPOLLIN | EPOLLET;
350 ev.data.fd = fd_t;
351 epoll_ctl( epoll_fd_t, EPOLL_CTL_DEL, ev.data.fd, &ev);
352 */
353 LOGI("do pthread_exit");
354 return NULL;
355 }
356 }
357 else if (events[i].data.fd == fd_t)
358 {
359 memset(&ev_input, 0x00, size);
360 read(fd_t, &ev_input, size);
361 LOGI("ev_input type = %x, code = %x, value = %x", ev_input.type, ev_input.code,ev_input.value);
362 if (ev_input.code == 2)
363 {
364 LOGI(">>>>ev_input.value = [%d]",ev_input.value);
365 pinValue = (int)ev_input.value;
366 edge_t = pinValue;
367 lpm_init.wakehandle(edge_t);
368 }
369 }
370 else
371 {
372 LOGE("Unknown events[i].data.fd = %d", events[i].data.fd);
373 }
374 }
375 }
376 }
r.xiaocfd7c682024-01-22 03:59:46 -0800377 return NULL;
378}
b.liu5fa9e772023-11-23 18:00:55 +0800379
r.xiaoec113d12024-01-12 02:13:28 -0800380int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg)
381{
r.xiaocfd7c682024-01-22 03:59:46 -0800382 //UNUSED(qser_lpm_handler);
383 //UNUSED(qser_lpm_cfg);
r.xiao7000d212024-01-31 23:45:27 -0800384 if (socketpair( AF_LOCAL, SOCK_STREAM, 0, socket_t ) < 0 )
385 {
386 LOGE("[qser_lpm_init] could not create thread control socket pair: %s", strerror(errno));
r.xiaoec113d12024-01-12 02:13:28 -0800387
r.xiao7000d212024-01-31 23:45:27 -0800388 /*close the control socket pair && Retry again.*/
389 if(socket_t[0] > 0)
390 {
391 close(socket_t[0] );
392 socket_t[0] = -1;
393 }
394
395 if(socket_t[1] > 0)
396 {
397 close(socket_t[1] );
398 socket_t[1] = -1;
399 }
400 return -1;
401 }
r.xiaocfd7c682024-01-22 03:59:46 -0800402 lpm_init.wakeupin.wakeupin_pin = qser_lpm_cfg->wakeupin.wakeupin_pin;
r.xiao7000d212024-01-31 23:45:27 -0800403 LOGI(">>pin = %d",lpm_init.wakeupin.wakeupin_pin);
r.xiaocfd7c682024-01-22 03:59:46 -0800404 lpm_init.wakeupin.wakeupin_edge = qser_lpm_cfg->wakeupin.wakeupin_edge;
r.xiao7000d212024-01-31 23:45:27 -0800405 LOGI(">>edge = %d",lpm_init.wakeupin.wakeupin_edge);
r.xiaocfd7c682024-01-22 03:59:46 -0800406 edge_t = qser_lpm_cfg->wakeupin.wakeupin_edge;//保留原始状态值 0 or 1
r.xiao7000d212024-01-31 23:45:27 -0800407 lpm_init.wakehandle = qser_lpm_handler;
r.xiaoec113d12024-01-12 02:13:28 -0800408
r.xiao7000d212024-01-31 23:45:27 -0800409 pthread_attr_t thread_attr;
410 pthread_attr_init(&thread_attr);
411
r.xiaocfd7c682024-01-22 03:59:46 -0800412 if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
413 {
r.xiao7000d212024-01-31 23:45:27 -0800414 LOGE("pthread_attr_setdetachstate() fail");
r.xiaocfd7c682024-01-22 03:59:46 -0800415 return -1;
416 }
r.xiao7000d212024-01-31 23:45:27 -0800417
418 if(pthread_create(&lpm_t, &thread_attr, threadFunction, NULL))
419 //if(pthread_create(&lpm_t, NULL, threadFunction, NULL))
r.xiaocfd7c682024-01-22 03:59:46 -0800420 {
r.xiao7000d212024-01-31 23:45:27 -0800421 LOGE("qser_lpm_init can't create thread");
r.xiaocfd7c682024-01-22 03:59:46 -0800422 return -1;
423 }
r.xiaoec113d12024-01-12 02:13:28 -0800424
r.xiao7000d212024-01-31 23:45:27 -0800425 pthread_attr_destroy(&thread_attr);
r.xiaocfd7c682024-01-22 03:59:46 -0800426
r.xiao7000d212024-01-31 23:45:27 -0800427 //if (edge_t != qser_lpm_cfg->wakeupin.wakeupin_edge)//说明有变化,并且和原来的值不相同
428 //qser_lpm_handler(edge_t);
r.xiaoec113d12024-01-12 02:13:28 -0800429
430 return 0;
431}
432
433int qser_lpm_deinit(void)
434{
r.xiao7000d212024-01-31 23:45:27 -0800435 char buf[4]={0};
r.xiaoec113d12024-01-12 02:13:28 -0800436
r.xiao7000d212024-01-31 23:45:27 -0800437 if (fd_t == -1)
438 return 0;
r.xiaocfd7c682024-01-22 03:59:46 -0800439
r.xiao7000d212024-01-31 23:45:27 -0800440 if (fd_t != -1)
r.xiaocfd7c682024-01-22 03:59:46 -0800441 {
r.xiao7000d212024-01-31 23:45:27 -0800442 //char cmd = 1;
443 strcpy(buf, "1");
444 void* dummy = NULL;
445 write( socket_t[0], buf, sizeof(buf) );
446 //pthread_join(lpm_t, &dummy);
447
448 sleep(1);
449 // close the control socket pair
450 if(socket_t[0] > 0)
451 {
452 close(socket_t[0] );
453 socket_t[0] = -1;
454 }
455 if(socket_t[1] > 0)
456 {
457 close(socket_t[1] );
458 socket_t[1] = -1;
459 }
460
461 //重置还原
462 fd_t = -1;
463
r.xiaocfd7c682024-01-22 03:59:46 -0800464 }
465
r.xiaoec113d12024-01-12 02:13:28 -0800466 return 0;
467}
468
469/*
470例如AT*POWERIND=31,就相当于设置NETWORK、SIM、SMS、CS CALL、PS DATA变化时都不主动上报,
471其中PS DATA目前暂时不支持,只是保留了这个标志位;
472AP power state: 1~31 means suspend, bitmap: bit0 - NETWORK;bit1 - SIM;bit2 - SMS;bit3 - CS CALL;bit4 - PS DATA
4730 means resume all.
474目标文件"/system/etc/powerind"
475如果bit0-bit3都配置可以采用的值是1-15,如果是当前采用NETWORK SMS CALL 则值的取值是 1 4 8 5 9 12 13
476
r.xiaoec113d12024-01-12 02:13:28 -0800477*/
478
479int qser_whitelist_set(char* whitelish)
480{
481 //UNUSED(whitelish);
482 uint32 on = 0;
483 int call_t, nw_t, data_t, sms_t, tmp;
484
485 int len = strlen(whitelish);
486
487 if (len != 4)
488 {
r.xiao7000d212024-01-31 23:45:27 -0800489 LOGE("whitelish num error num=[%d]",len);
r.xiaocfd7c682024-01-22 03:59:46 -0800490 return -1;
r.xiaoec113d12024-01-12 02:13:28 -0800491 }
492
493 tmp = atoi(whitelish);
494
495 call_t = tmp/1000;
496 nw_t = tmp%1000/100;
497 data_t = tmp%1000%100/10;
498 sms_t = tmp%1000%100%10;
499
500 if (call_t == 1)
501 call_Off = TRUE;
502 else
503 call_Off = FALSE;
504
505 if (nw_t == 1)
506 nw_off = TRUE;
507 else
508 nw_off = FALSE;
509
510 if (data_t == 1)
511 data_off = TRUE;
512 else
513 data_off = FALSE;
514
515 if (sms_t == 1)
516 sms_off = TRUE;
517 else
518 sms_off = FALSE;
519
520 if (call_Off == FALSE && nw_off == FALSE && data_off == FALSE && sms_off == FALSE)
521 {
r.xiao7000d212024-01-31 23:45:27 -0800522 on = 29;//0000的情况,所有上报源都屏蔽,SIM的上报会一直被包含在内
r.xiaoec113d12024-01-12 02:13:28 -0800523 }
524 else
525 {
526 if (call_Off == TRUE)
527 call_t = 8;
528 else
529 call_t = 0;
530
531 if (nw_off == TRUE)
532 nw_t = 1;
533 else
534 nw_t = 0;
535
536 if (data_off == TRUE)
537 data_t = 16;
538 else
539 data_t = 0;
540
541 if (sms_off == TRUE)
542 sms_t = 4;
543 else
544 sms_t = 0;
545
r.xiao7000d212024-01-31 23:45:27 -0800546 on = 29 - (call_t + nw_t + data_t + sms_t);//SIM的上报会一直被包含在内
r.xiaoec113d12024-01-12 02:13:28 -0800547 }
548
549 if(whitelist_info_handle == NULL)
550 {
551 whitelist_info_handle = mbtk_info_handle_get();
552 if(whitelist_info_handle)
553 {
r.xiao7000d212024-01-31 23:45:27 -0800554 LOGI("creat whitelist_info_handle is success");
r.xiaoec113d12024-01-12 02:13:28 -0800555 }
556 else
557 {
r.xiao7000d212024-01-31 23:45:27 -0800558 LOGE("creat whitelist_info_handle is fail");
r.xiaoec113d12024-01-12 02:13:28 -0800559 return -1;
560 }
561 }
562
563 int err = mbtk_wakeup_state_set(whitelist_info_handle, on);
564 if(err)
565 {
r.xiao7000d212024-01-31 23:45:27 -0800566 LOGE("whitelist_info_handle Error : %d", err);
r.xiaoec113d12024-01-12 02:13:28 -0800567 return -1;
568 }
r.xiaoec113d12024-01-12 02:13:28 -0800569
570 return 0;
571}
572
573
574int qser_whitelist_get(char* whitelish)
575{
576 //UNUSED(whitelish);
r.xiaocfd7c682024-01-22 03:59:46 -0800577 char list[10]={0};
r.xiaoec113d12024-01-12 02:13:28 -0800578 int call_t, nw_t, data_t, sms_t;
r.xiao7000d212024-01-31 23:45:27 -0800579 int get_tmp;
r.xiaoec113d12024-01-12 02:13:28 -0800580
r.xiao7000d212024-01-31 23:45:27 -0800581 get_tmp = powerrind_get();
582 //LOGI(">>>get_tmp: %d",get_tmp);
r.xiaoec113d12024-01-12 02:13:28 -0800583
r.xiao7000d212024-01-31 23:45:27 -0800584 //call 8 nw 1 data 16 sms 4 SIM的上报会一直被包含在内
585 switch(get_tmp)
586 {
587 case 0:
588 sprintf(list, "%d%d%d%d", 1, 1, 1, 1);
589 break;
590 case 8:
591 sprintf(list, "%d%d%d%d", 0, 1, 1, 1);
592 break;
593 case 1:
594 sprintf(list, "%d%d%d%d", 1, 0, 1, 1);
595 break;
596 case 16:
597 sprintf(list, "%d%d%d%d", 1, 1, 0, 1);
598 break;
599 case 4:
600 sprintf(list, "%d%d%d%d", 1, 1, 1, 0);
601 break;
602
603 case 9:
604 sprintf(list, "%d%d%d%d", 0, 0, 1, 1);
605 break;
606 case 24:
607 sprintf(list, "%d%d%d%d", 0, 1, 0, 1);
608 break;
609 case 12:
610 sprintf(list, "%d%d%d%d", 0, 1, 1, 0);
611 break;
612 case 17:
613 sprintf(list, "%d%d%d%d", 1, 0, 0, 1);
614 break;
615 case 5:
616 sprintf(list, "%d%d%d%d", 1, 0, 1, 0);
617 break;
618 case 20:
619 sprintf(list, "%d%d%d%d", 1, 1, 0, 0);
620 break;
621
622 case 25:
623 sprintf(list, "%d%d%d%d", 0, 0, 0, 1);
624 break;
625 case 13:
626 sprintf(list, "%d%d%d%d", 0, 0, 1, 0);
627 break;
628 case 28:
629 sprintf(list, "%d%d%d%d", 0, 1, 0, 0);
630 break;
631 case 21:
632 sprintf(list, "%d%d%d%d", 1, 0, 0, 0);
633 break;
634
635 case 29:
636 sprintf(list, "%d%d%d%d", 0, 0, 0, 0);
637 break;
638
639 default :
640 LOGE("qser_whitelist_get is error");
641 break;
642 }
643
644 //LOGI(">>>get list: %s",list);
r.xiaocfd7c682024-01-22 03:59:46 -0800645 strncpy(whitelish, list, strlen(list));
r.xiaoec113d12024-01-12 02:13:28 -0800646
647 if(whitelist_info_handle != NULL)
648 {
649 mbtk_info_handle_free(&whitelist_info_handle);
r.xiao7000d212024-01-31 23:45:27 -0800650 LOGI("deinit whitelist_info_handle is succuess");
r.xiaoec113d12024-01-12 02:13:28 -0800651 }
652
653 return 0;
654}
655