blob: ea5a0485575185718144feec3214ed91b5897817 [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;
r.xiao7000d212024-01-31 23:45:27 -080033static bool set_off = FALSE;
r.xiaoec113d12024-01-12 02:13:28 -080034
r.xiao7000d212024-01-31 23:45:27 -080035static pthread_t lpm_t;
r.xiaocfd7c682024-01-22 03:59:46 -080036static int edge_t = 0;
r.xiao7000d212024-01-31 23:45:27 -080037static int epoll_fd_t = -1;
38static int fd_t = -1;
39static int socket_t[2];
r.xiaocfd7c682024-01-22 03:59:46 -080040
41typedef struct{
42 qser_lpm_wakeupin_data_t wakeupin;
43 qser_lpm_wakeupout_data_t wakeupout;
r.xiao7000d212024-01-31 23:45:27 -080044 qser_lpm_Handler_t wakehandle;
r.xiaocfd7c682024-01-22 03:59:46 -080045}lynq_wake_t;
46
47static lynq_wake_t lpm_init;
48
r.xiaoec113d12024-01-12 02:13:28 -080049
r.xiao7000d212024-01-31 23:45:27 -080050typedef struct
51{
52 int fd;
53 char name[64];
54} lock_name;
55
56#define LOCK_MAX_SIZE 129
57
58lock_name lynq_lock_name[LOCK_MAX_SIZE]={0};
59static bool autosleep_enable = FALSE;
60
61static mbtk_info_handle_t* whitelist_info_handle = NULL;
62
r.xiaoec113d12024-01-12 02:13:28 -080063static int powerrind_get()
64{
r.xiao7000d212024-01-31 23:45:27 -080065 char buffer[4];
r.xiaoec113d12024-01-12 02:13:28 -080066 int ret = 0;
67
68 int fd = open(MTBK_POWERIND, O_RDWR | O_SYNC, 0662);
69 if (fd != -1)
70 {
71 read(fd, buffer, strlen(buffer)+1);
72 close(fd);
73 }
74
75 ret = atoi(buffer);
76
77 return ret;
78}
79
r.xiao7000d212024-01-31 23:45:27 -080080#if 1
81static int sleep_epoll_deregister(int epoll_fd,int fd )
r.xiaoec113d12024-01-12 02:13:28 -080082{
r.xiao7000d212024-01-31 23:45:27 -080083 int ret;
84 do {
85 ret = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, NULL );
86 } while (ret < 0 && errno == EINTR);
87 return ret;
88}
r.xiaoec113d12024-01-12 02:13:28 -080089
r.xiao7000d212024-01-31 23:45:27 -080090static int sleep_epoll_register(int epoll_fd, int fd)
91{
92 struct epoll_event ev;
93 int ret, flags;
r.xiaoec113d12024-01-12 02:13:28 -080094
r.xiao7000d212024-01-31 23:45:27 -080095 /* important: make the fd non-blocking */
96 flags = fcntl(fd, F_GETFL);
97 fcntl(fd, F_SETFL, flags | O_NONBLOCK);
r.xiaoec113d12024-01-12 02:13:28 -080098
r.xiao7000d212024-01-31 23:45:27 -080099 ev.events = EPOLLIN;
100 ev.data.fd = fd;
101 do {
102 ret = epoll_ctl( epoll_fd, EPOLL_CTL_ADD, fd, &ev );
103 } while (ret < 0 && errno == EINTR);
104
105 return ret;
106}
107#endif
r.xiaoec113d12024-01-12 02:13:28 -0800108
b.liu5fa9e772023-11-23 18:00:55 +0800109int qser_autosuspend_enable(char enable)
110{
r.xiaoec113d12024-01-12 02:13:28 -0800111 //UNUSED(enable);
112
113 if(enable == 1)
114 {
115 if(!access("/sys/power/autosleep", W_OK))
116 {
117 system("echo mem > /sys/power/autosleep");
118 autosleep_enable = TRUE;
119 return 0;
120 }
121 else
122 {
123 LOGE("/sys/power/autosleep can not write.");
124 return -1;
125 }
126 }
127 else
128 {
129 if(!access("/sys/power/autosleep", W_OK))
130 {
131 system("echo off > /sys/power/autosleep");
132 autosleep_enable = FALSE;
133 return 0;
134 }
135 else
136 {
137 LOGE("/sys/power/autosleep can not write.");
138 return -1;
139 }
140 }
b.liu5fa9e772023-11-23 18:00:55 +0800141
142 return 0;
143}
144
145int qser_wakelock_create(const char* name , size_t len)
146{
r.xiaoec113d12024-01-12 02:13:28 -0800147 //UNUSED(name);
148 //UNUSED(len);
149
150 if(!autosleep_enable) {
151 LOGE("Autosleep not enable.");
152 return -1;
153 }
154
r.xiao7000d212024-01-31 23:45:27 -0800155 if((name != NULL) && (len < 33))
r.xiaoec113d12024-01-12 02:13:28 -0800156 {
157 int i;
r.xiao7000d212024-01-31 23:45:27 -0800158 for(i=1 ;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800159 {
160 if(lynq_lock_name[i].fd == 0)
161 break;
162 }
r.xiao7000d212024-01-31 23:45:27 -0800163
164 if (i >= LOCK_MAX_SIZE)
165 {
166 LOGE("Fd is full.\n");
167 return -1;
168 }
169
r.xiaoec113d12024-01-12 02:13:28 -0800170 memcpy(lynq_lock_name[i].name, name, strlen(name)+1);
171 lynq_lock_name[i].fd = i;
172 return lynq_lock_name[i].fd;
173 }
174 else
175 return -1;
b.liu5fa9e772023-11-23 18:00:55 +0800176
177 return 0;
178}
179
180int qser_wakelock_lock(int fd)
181{
r.xiaoec113d12024-01-12 02:13:28 -0800182 //UNUSED(fd);
183
184 if(!autosleep_enable) {
185 LOGE("Autosleep not enable.");
186 return -1;
187 }
188
r.xiao7000d212024-01-31 23:45:27 -0800189
r.xiaoec113d12024-01-12 02:13:28 -0800190 int i;
r.xiao7000d212024-01-31 23:45:27 -0800191 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800192 {
193 if(lynq_lock_name[i].fd == fd)
194 break;
195 }
r.xiao7000d212024-01-31 23:45:27 -0800196 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800197 return -1;
198
199 if(!access("/sys/power/wake_lock", W_OK))
200 {
201 char cmd[128]={0};
202 sprintf(cmd, "echo %s > /sys/power/wake_lock", lynq_lock_name[i].name);
203 system(cmd);
204 return 0;
205 }
206 else
207 {
r.xiao7000d212024-01-31 23:45:27 -0800208 LOGE("/sys/power/wake_lock can not write.");
r.xiaoec113d12024-01-12 02:13:28 -0800209 return -1;
210 }
b.liu5fa9e772023-11-23 18:00:55 +0800211
212 return 0;
213}
214
215int qser_wakelock_unlock(int fd)
216{
r.xiaoec113d12024-01-12 02:13:28 -0800217 //UNUSED(fd);
218
219 if(!autosleep_enable) {
220 LOGE("Autosleep not enable.");
221 return -1;
222 }
223
224 int i;
r.xiao7000d212024-01-31 23:45:27 -0800225 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800226 {
227 if(lynq_lock_name[i].fd == fd)
228 break;
229 }
r.xiao7000d212024-01-31 23:45:27 -0800230 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800231 return -1;
232
233 if(!access("/sys/power/wake_unlock", W_OK))
234 {
235 char cmd[128]={0};
236 sprintf(cmd, "echo %s > /sys/power/wake_unlock", lynq_lock_name[i].name);
237 system(cmd);
238 return 0;
239 }
240 else
241 {
r.xiao7000d212024-01-31 23:45:27 -0800242 LOGE("/sys/power/wake_unlock can not write.");
r.xiaoec113d12024-01-12 02:13:28 -0800243 return -1;
244 }
b.liu5fa9e772023-11-23 18:00:55 +0800245
246 return 0;
247}
248
249int qser_wakelock_destroy(int fd)
250{
r.xiaoec113d12024-01-12 02:13:28 -0800251 //UNUSED(fd);
252
253 if(!autosleep_enable) {
254 LOGE("Autosleep not enable.");
255 return -1;
256 }
257
258 int i;
r.xiao7000d212024-01-31 23:45:27 -0800259 for(i=1;i<LOCK_MAX_SIZE;i++)
r.xiaoec113d12024-01-12 02:13:28 -0800260 {
261 if(lynq_lock_name[i].fd == fd)
262 break;
263 }
r.xiao7000d212024-01-31 23:45:27 -0800264 if(i == LOCK_MAX_SIZE)
r.xiaoec113d12024-01-12 02:13:28 -0800265 return -1;
266 else
267 {
268 lynq_lock_name[i].fd = 0;
269 memset(lynq_lock_name[i].name, 0, 128);
270 return 0;
271 }
b.liu5fa9e772023-11-23 18:00:55 +0800272
273 return 0;
274}
275
r.xiaocfd7c682024-01-22 03:59:46 -0800276void *threadFunction(void *arg)
277{
278 int pinValue;
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
321 for (int i = 0; i < numEvents; ++i)
322 {
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
r.xiao7000d212024-01-31 23:45:27 -0800549 set_off = TRUE;//初始状态改变
550
r.xiaoec113d12024-01-12 02:13:28 -0800551 if(whitelist_info_handle == NULL)
552 {
553 whitelist_info_handle = mbtk_info_handle_get();
554 if(whitelist_info_handle)
555 {
r.xiao7000d212024-01-31 23:45:27 -0800556 LOGI("creat whitelist_info_handle is success");
r.xiaoec113d12024-01-12 02:13:28 -0800557 }
558 else
559 {
r.xiao7000d212024-01-31 23:45:27 -0800560 LOGE("creat whitelist_info_handle is fail");
r.xiaoec113d12024-01-12 02:13:28 -0800561 return -1;
562 }
563 }
564
565 int err = mbtk_wakeup_state_set(whitelist_info_handle, on);
566 if(err)
567 {
r.xiao7000d212024-01-31 23:45:27 -0800568 LOGE("whitelist_info_handle Error : %d", err);
r.xiaoec113d12024-01-12 02:13:28 -0800569 return -1;
570 }
r.xiaoec113d12024-01-12 02:13:28 -0800571
572 return 0;
573}
574
575
576int qser_whitelist_get(char* whitelish)
577{
578 //UNUSED(whitelish);
r.xiaocfd7c682024-01-22 03:59:46 -0800579 char list[10]={0};
r.xiaoec113d12024-01-12 02:13:28 -0800580 int call_t, nw_t, data_t, sms_t;
r.xiao7000d212024-01-31 23:45:27 -0800581 int get_tmp;
r.xiaoec113d12024-01-12 02:13:28 -0800582
r.xiao7000d212024-01-31 23:45:27 -0800583 get_tmp = powerrind_get();
584 //LOGI(">>>get_tmp: %d",get_tmp);
r.xiaoec113d12024-01-12 02:13:28 -0800585
r.xiao7000d212024-01-31 23:45:27 -0800586 //call 8 nw 1 data 16 sms 4 SIM的上报会一直被包含在内
587 switch(get_tmp)
588 {
589 case 0:
590 sprintf(list, "%d%d%d%d", 1, 1, 1, 1);
591 break;
592 case 8:
593 sprintf(list, "%d%d%d%d", 0, 1, 1, 1);
594 break;
595 case 1:
596 sprintf(list, "%d%d%d%d", 1, 0, 1, 1);
597 break;
598 case 16:
599 sprintf(list, "%d%d%d%d", 1, 1, 0, 1);
600 break;
601 case 4:
602 sprintf(list, "%d%d%d%d", 1, 1, 1, 0);
603 break;
604
605 case 9:
606 sprintf(list, "%d%d%d%d", 0, 0, 1, 1);
607 break;
608 case 24:
609 sprintf(list, "%d%d%d%d", 0, 1, 0, 1);
610 break;
611 case 12:
612 sprintf(list, "%d%d%d%d", 0, 1, 1, 0);
613 break;
614 case 17:
615 sprintf(list, "%d%d%d%d", 1, 0, 0, 1);
616 break;
617 case 5:
618 sprintf(list, "%d%d%d%d", 1, 0, 1, 0);
619 break;
620 case 20:
621 sprintf(list, "%d%d%d%d", 1, 1, 0, 0);
622 break;
623
624 case 25:
625 sprintf(list, "%d%d%d%d", 0, 0, 0, 1);
626 break;
627 case 13:
628 sprintf(list, "%d%d%d%d", 0, 0, 1, 0);
629 break;
630 case 28:
631 sprintf(list, "%d%d%d%d", 0, 1, 0, 0);
632 break;
633 case 21:
634 sprintf(list, "%d%d%d%d", 1, 0, 0, 0);
635 break;
636
637 case 29:
638 sprintf(list, "%d%d%d%d", 0, 0, 0, 0);
639 break;
640
641 default :
642 LOGE("qser_whitelist_get is error");
643 break;
644 }
645
646 //LOGI(">>>get list: %s",list);
r.xiaocfd7c682024-01-22 03:59:46 -0800647 strncpy(whitelish, list, strlen(list));
r.xiaoec113d12024-01-12 02:13:28 -0800648
649 if(whitelist_info_handle != NULL)
650 {
651 mbtk_info_handle_free(&whitelist_info_handle);
r.xiao7000d212024-01-31 23:45:27 -0800652 LOGI("deinit whitelist_info_handle is succuess");
r.xiaoec113d12024-01-12 02:13:28 -0800653 }
654
655 return 0;
656}
657
b.liu5fa9e772023-11-23 18:00:55 +0800658