blob: fed9443cc76a67b13142642073a4b76c355863ff [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.xiao7000d212024-01-31 23:45:27 -0800278 char buf[8] = {0};
279 struct input_event ev_input = { 0 };
280 const int size = sizeof(struct input_event);
r.xiaocfd7c682024-01-22 03:59:46 -0800281
r.xiao7000d212024-01-31 23:45:27 -0800282 epoll_fd_t = epoll_create(2);
283/*
284 struct epoll_event event;
285 memset(&event, 0, sizeof(struct epoll_event));
286 event.events = EPOLLIN | EPOLLET;
287 event.data.fd = open("/dev/input/event0", O_RDONLY); // 根据实际情况指定正确的GPIO设备文件名
288
289 fd_t = event.data.fd;
290 if (epoll_ctl(epoll_fd_t, EPOLL_CTL_ADD, event.data.fd, &event) == -1)
291 {
292 LOGE("Failed to add GPIO device file.");
293 return NULL;
294 }
295
296 memset(&event, 0, sizeof(struct epoll_event));
297 event.events = EPOLLIN | EPOLLET;
298 event.data.fd = socket_t[0];
299 LOGE("threadFunction event.data.fd =[%d] ", event.data.fd);
300
301 if (epoll_ctl(epoll_fd_t, EPOLL_CTL_ADD, event.data.fd, &event) == -1)
302 {
303 LOGE("Failed to add GPIO device file.");
304 return NULL;
305 }
306*/
307 fd_t = open("/dev/input/event0", O_RDONLY);
308
309 sleep_epoll_register(epoll_fd_t, fd_t);
310 sleep_epoll_register(epoll_fd_t, socket_t[1]);
311
312 while (true)
313 {
314 struct epoll_event events[2];
315 struct epoll_event ev;
316 int cmd = 0;
317
318 int numEvents = epoll_wait(epoll_fd_t, events, 2, -1);
319
320 for (int i = 0; i < numEvents; ++i)
321 {
322 if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP))
323 {
324 LOGE("Error on GPIO device.");
325 return NULL;
326 }
327 else if ((events[i].events & EPOLLIN) || (events[i].events & EPOLLET))
328 {
329 //handleInterrupt(events[i].data.fd);
330 if (events[i].data.fd == socket_t[1])
331 {
332 memset(buf, 0, sizeof(buf));
333 read(socket_t[1], buf, sizeof(buf));
334 if (1 == atoi(buf))
335 {
336 if(close(fd_t) == 0)
337 LOGI("close(fd_t)ing");
338
339 sleep_epoll_deregister(epoll_fd_t, socket_t[1]);
340 sleep_epoll_deregister(epoll_fd_t, fd_t);
341 /*
342 memset(&ev, 0, sizeof(struct epoll_event));
343 ev.events = EPOLLIN | EPOLLET;
344 ev.data.fd = socket_t[1];
345 epoll_ctl( epoll_fd_t, EPOLL_CTL_DEL, ev.data.fd, &ev);
346
347 memset(&ev, 0, sizeof(struct epoll_event));
348 ev.events = EPOLLIN | EPOLLET;
349 ev.data.fd = fd_t;
350 epoll_ctl( epoll_fd_t, EPOLL_CTL_DEL, ev.data.fd, &ev);
351 */
352 LOGI("do pthread_exit");
353 return NULL;
354 }
355 }
356 else if (events[i].data.fd == fd_t)
357 {
358 memset(&ev_input, 0x00, size);
359 read(fd_t, &ev_input, size);
360 LOGI("ev_input type = %x, code = %x, value = %x", ev_input.type, ev_input.code,ev_input.value);
361 if (ev_input.code == 2)
362 {
363 LOGI(">>>>ev_input.value = [%d]",ev_input.value);
364 pinValue = (int)ev_input.value;
365 edge_t = pinValue;
366 lpm_init.wakehandle(edge_t);
367 }
368 }
369 else
370 {
371 LOGE("Unknown events[i].data.fd = %d", events[i].data.fd);
372 }
373 }
374 }
375 }
r.xiaocfd7c682024-01-22 03:59:46 -0800376 return NULL;
377}
b.liu5fa9e772023-11-23 18:00:55 +0800378
r.xiaoec113d12024-01-12 02:13:28 -0800379int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg)
380{
r.xiaocfd7c682024-01-22 03:59:46 -0800381 //UNUSED(qser_lpm_handler);
382 //UNUSED(qser_lpm_cfg);
r.xiao7000d212024-01-31 23:45:27 -0800383 if (socketpair( AF_LOCAL, SOCK_STREAM, 0, socket_t ) < 0 )
384 {
385 LOGE("[qser_lpm_init] could not create thread control socket pair: %s", strerror(errno));
r.xiaoec113d12024-01-12 02:13:28 -0800386
r.xiao7000d212024-01-31 23:45:27 -0800387 /*close the control socket pair && Retry again.*/
388 if(socket_t[0] > 0)
389 {
390 close(socket_t[0] );
391 socket_t[0] = -1;
392 }
393
394 if(socket_t[1] > 0)
395 {
396 close(socket_t[1] );
397 socket_t[1] = -1;
398 }
399 return -1;
400 }
r.xiaocfd7c682024-01-22 03:59:46 -0800401 lpm_init.wakeupin.wakeupin_pin = qser_lpm_cfg->wakeupin.wakeupin_pin;
r.xiao7000d212024-01-31 23:45:27 -0800402 LOGI(">>pin = %d",lpm_init.wakeupin.wakeupin_pin);
r.xiaocfd7c682024-01-22 03:59:46 -0800403 lpm_init.wakeupin.wakeupin_edge = qser_lpm_cfg->wakeupin.wakeupin_edge;
r.xiao7000d212024-01-31 23:45:27 -0800404 LOGI(">>edge = %d",lpm_init.wakeupin.wakeupin_edge);
r.xiaocfd7c682024-01-22 03:59:46 -0800405 edge_t = qser_lpm_cfg->wakeupin.wakeupin_edge;//保留原始状态值 0 or 1
r.xiao7000d212024-01-31 23:45:27 -0800406 lpm_init.wakehandle = qser_lpm_handler;
r.xiaoec113d12024-01-12 02:13:28 -0800407
r.xiao7000d212024-01-31 23:45:27 -0800408 pthread_attr_t thread_attr;
409 pthread_attr_init(&thread_attr);
410
r.xiaocfd7c682024-01-22 03:59:46 -0800411 if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
412 {
r.xiao7000d212024-01-31 23:45:27 -0800413 LOGE("pthread_attr_setdetachstate() fail");
r.xiaocfd7c682024-01-22 03:59:46 -0800414 return -1;
415 }
r.xiao7000d212024-01-31 23:45:27 -0800416
417 if(pthread_create(&lpm_t, &thread_attr, threadFunction, NULL))
418 //if(pthread_create(&lpm_t, NULL, threadFunction, NULL))
r.xiaocfd7c682024-01-22 03:59:46 -0800419 {
r.xiao7000d212024-01-31 23:45:27 -0800420 LOGE("qser_lpm_init can't create thread");
r.xiaocfd7c682024-01-22 03:59:46 -0800421 return -1;
422 }
r.xiaoec113d12024-01-12 02:13:28 -0800423
r.xiao7000d212024-01-31 23:45:27 -0800424 pthread_attr_destroy(&thread_attr);
r.xiaocfd7c682024-01-22 03:59:46 -0800425
r.xiao7000d212024-01-31 23:45:27 -0800426 //if (edge_t != qser_lpm_cfg->wakeupin.wakeupin_edge)//说明有变化,并且和原来的值不相同
427 //qser_lpm_handler(edge_t);
r.xiaoec113d12024-01-12 02:13:28 -0800428
429 return 0;
430}
431
432int qser_lpm_deinit(void)
433{
r.xiao7000d212024-01-31 23:45:27 -0800434 char buf[4]={0};
r.xiaoec113d12024-01-12 02:13:28 -0800435
r.xiao7000d212024-01-31 23:45:27 -0800436 if (fd_t == -1)
437 return 0;
r.xiaocfd7c682024-01-22 03:59:46 -0800438
r.xiao7000d212024-01-31 23:45:27 -0800439 if (fd_t != -1)
r.xiaocfd7c682024-01-22 03:59:46 -0800440 {
r.xiao7000d212024-01-31 23:45:27 -0800441 //char cmd = 1;
442 strcpy(buf, "1");
443 void* dummy = NULL;
444 write( socket_t[0], buf, sizeof(buf) );
445 //pthread_join(lpm_t, &dummy);
446
447 sleep(1);
448 // close the control socket pair
449 if(socket_t[0] > 0)
450 {
451 close(socket_t[0] );
452 socket_t[0] = -1;
453 }
454 if(socket_t[1] > 0)
455 {
456 close(socket_t[1] );
457 socket_t[1] = -1;
458 }
459
460 //重置还原
461 fd_t = -1;
462
r.xiaocfd7c682024-01-22 03:59:46 -0800463 }
464
r.xiaoec113d12024-01-12 02:13:28 -0800465 return 0;
466}
467
468/*
469例如AT*POWERIND=31,就相当于设置NETWORK、SIM、SMS、CS CALL、PS DATA变化时都不主动上报,
470其中PS DATA目前暂时不支持,只是保留了这个标志位;
471AP power state: 1~31 means suspend, bitmap: bit0 - NETWORK;bit1 - SIM;bit2 - SMS;bit3 - CS CALL;bit4 - PS DATA
4720 means resume all.
473目标文件"/system/etc/powerind"
474如果bit0-bit3都配置可以采用的值是1-15,如果是当前采用NETWORK SMS CALL 则值的取值是 1 4 8 5 9 12 13
475
r.xiaoec113d12024-01-12 02:13:28 -0800476*/
477
478int qser_whitelist_set(char* whitelish)
479{
480 //UNUSED(whitelish);
481 uint32 on = 0;
482 int call_t, nw_t, data_t, sms_t, tmp;
483
484 int len = strlen(whitelish);
485
486 if (len != 4)
487 {
r.xiao7000d212024-01-31 23:45:27 -0800488 LOGE("whitelish num error num=[%d]",len);
r.xiaocfd7c682024-01-22 03:59:46 -0800489 return -1;
r.xiaoec113d12024-01-12 02:13:28 -0800490 }
491
492 tmp = atoi(whitelish);
493
494 call_t = tmp/1000;
495 nw_t = tmp%1000/100;
496 data_t = tmp%1000%100/10;
497 sms_t = tmp%1000%100%10;
498
499 if (call_t == 1)
500 call_Off = TRUE;
501 else
502 call_Off = FALSE;
503
504 if (nw_t == 1)
505 nw_off = TRUE;
506 else
507 nw_off = FALSE;
508
509 if (data_t == 1)
510 data_off = TRUE;
511 else
512 data_off = FALSE;
513
514 if (sms_t == 1)
515 sms_off = TRUE;
516 else
517 sms_off = FALSE;
518
519 if (call_Off == FALSE && nw_off == FALSE && data_off == FALSE && sms_off == FALSE)
520 {
r.xiao7000d212024-01-31 23:45:27 -0800521 on = 29;//0000的情况,所有上报源都屏蔽,SIM的上报会一直被包含在内
r.xiaoec113d12024-01-12 02:13:28 -0800522 }
523 else
524 {
525 if (call_Off == TRUE)
526 call_t = 8;
527 else
528 call_t = 0;
529
530 if (nw_off == TRUE)
531 nw_t = 1;
532 else
533 nw_t = 0;
534
535 if (data_off == TRUE)
536 data_t = 16;
537 else
538 data_t = 0;
539
540 if (sms_off == TRUE)
541 sms_t = 4;
542 else
543 sms_t = 0;
544
r.xiao7000d212024-01-31 23:45:27 -0800545 on = 29 - (call_t + nw_t + data_t + sms_t);//SIM的上报会一直被包含在内
r.xiaoec113d12024-01-12 02:13:28 -0800546 }
547
548 if(whitelist_info_handle == NULL)
549 {
550 whitelist_info_handle = mbtk_info_handle_get();
551 if(whitelist_info_handle)
552 {
r.xiao7000d212024-01-31 23:45:27 -0800553 LOGI("creat whitelist_info_handle is success");
r.xiaoec113d12024-01-12 02:13:28 -0800554 }
555 else
556 {
r.xiao7000d212024-01-31 23:45:27 -0800557 LOGE("creat whitelist_info_handle is fail");
r.xiaoec113d12024-01-12 02:13:28 -0800558 return -1;
559 }
560 }
561
562 int err = mbtk_wakeup_state_set(whitelist_info_handle, on);
563 if(err)
564 {
r.xiao7000d212024-01-31 23:45:27 -0800565 LOGE("whitelist_info_handle Error : %d", err);
r.xiaoec113d12024-01-12 02:13:28 -0800566 return -1;
567 }
r.xiaoec113d12024-01-12 02:13:28 -0800568
569 return 0;
570}
571
572
573int qser_whitelist_get(char* whitelish)
574{
575 //UNUSED(whitelish);
r.xiaocfd7c682024-01-22 03:59:46 -0800576 char list[10]={0};
r.xiaoec113d12024-01-12 02:13:28 -0800577 int call_t, nw_t, data_t, sms_t;
r.xiao7000d212024-01-31 23:45:27 -0800578 int get_tmp;
r.xiaoec113d12024-01-12 02:13:28 -0800579
r.xiao7000d212024-01-31 23:45:27 -0800580 get_tmp = powerrind_get();
581 //LOGI(">>>get_tmp: %d",get_tmp);
r.xiaoec113d12024-01-12 02:13:28 -0800582
r.xiao7000d212024-01-31 23:45:27 -0800583 //call 8 nw 1 data 16 sms 4 SIM的上报会一直被包含在内
584 switch(get_tmp)
585 {
586 case 0:
587 sprintf(list, "%d%d%d%d", 1, 1, 1, 1);
588 break;
589 case 8:
590 sprintf(list, "%d%d%d%d", 0, 1, 1, 1);
591 break;
592 case 1:
593 sprintf(list, "%d%d%d%d", 1, 0, 1, 1);
594 break;
595 case 16:
596 sprintf(list, "%d%d%d%d", 1, 1, 0, 1);
597 break;
598 case 4:
599 sprintf(list, "%d%d%d%d", 1, 1, 1, 0);
600 break;
601
602 case 9:
603 sprintf(list, "%d%d%d%d", 0, 0, 1, 1);
604 break;
605 case 24:
606 sprintf(list, "%d%d%d%d", 0, 1, 0, 1);
607 break;
608 case 12:
609 sprintf(list, "%d%d%d%d", 0, 1, 1, 0);
610 break;
611 case 17:
612 sprintf(list, "%d%d%d%d", 1, 0, 0, 1);
613 break;
614 case 5:
615 sprintf(list, "%d%d%d%d", 1, 0, 1, 0);
616 break;
617 case 20:
618 sprintf(list, "%d%d%d%d", 1, 1, 0, 0);
619 break;
620
621 case 25:
622 sprintf(list, "%d%d%d%d", 0, 0, 0, 1);
623 break;
624 case 13:
625 sprintf(list, "%d%d%d%d", 0, 0, 1, 0);
626 break;
627 case 28:
628 sprintf(list, "%d%d%d%d", 0, 1, 0, 0);
629 break;
630 case 21:
631 sprintf(list, "%d%d%d%d", 1, 0, 0, 0);
632 break;
633
634 case 29:
635 sprintf(list, "%d%d%d%d", 0, 0, 0, 0);
636 break;
637
638 default :
639 LOGE("qser_whitelist_get is error");
640 break;
641 }
642
643 //LOGI(">>>get list: %s",list);
r.xiaocfd7c682024-01-22 03:59:46 -0800644 strncpy(whitelish, list, strlen(list));
r.xiaoec113d12024-01-12 02:13:28 -0800645
646 if(whitelist_info_handle != NULL)
647 {
648 mbtk_info_handle_free(&whitelist_info_handle);
r.xiao7000d212024-01-31 23:45:27 -0800649 LOGI("deinit whitelist_info_handle is succuess");
r.xiaoec113d12024-01-12 02:13:28 -0800650 }
651
652 return 0;
653}
654