#include "lynq-qser-autosuspend.h" | |
#include <stdio.h> | |
#include <unistd.h> | |
#include <stddef.h> | |
#include <sys/types.h> | |
#include <sys/stat.h> | |
#include <fcntl.h> | |
#include <pthread.h> | |
#include <string.h> | |
#include <stdlib.h> | |
#include <errno.h> | |
#include <sys/epoll.h> | |
#include <linux/input.h> | |
#include "mbtk_type.h" | |
#include "mbtk_log.h" | |
#include "mbtk_power.h" | |
#include "mbtk_lpm.h" | |
#include "mbtk_sleep.h" | |
#include "mbtk_utils.h" | |
#include "mbtk_ril_api.h" | |
static bool call_Off = FALSE; | |
static bool nw_off = FALSE; | |
static bool sms_off = FALSE; | |
static bool data_off = FALSE; | |
static mbtk_ril_handle* whitelist_info_handle = NULL; | |
int qser_autosuspend_enable(char enable) | |
{ | |
int ret = 0; | |
ret = mbtk_autosuspend_enable(enable); | |
if (ret == -1) | |
{ | |
LOGE("qser_autosuspend_enable is error"); | |
} | |
return ret; | |
} | |
int qser_wakelock_create(const char* name , size_t len) | |
{ | |
int ret = 0; | |
ret = mbtk_wakelock_create(name, len); | |
if (ret == -1) | |
{ | |
LOGE("qser_wakelock_create is error"); | |
} | |
return ret; | |
} | |
int qser_wakelock_lock(int fd) | |
{ | |
int ret = 0; | |
ret = mbtk_wakelock_lock(fd); | |
if (ret == -1) | |
{ | |
LOGE("qser_wakelock_lock is error"); | |
} | |
return ret; | |
} | |
int qser_wakelock_unlock(int fd) | |
{ | |
int ret = 0; | |
ret = mbtk_wakelock_unlock(fd); | |
if (ret == -1) | |
{ | |
LOGE("qser_wakelock_unlock is error"); | |
} | |
return ret; | |
} | |
int qser_wakelock_destroy(int fd) | |
{ | |
int ret = 0; | |
ret = mbtk_wakelock_destroy(fd); | |
if (ret == -1) | |
{ | |
LOGE("qser_wakelock_destroy is error"); | |
} | |
return ret; | |
} | |
int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg) | |
{ | |
UNUSED(qser_lpm_cfg); | |
if(mbtk_lpm_init((mbtk_lpm_handler_t)qser_lpm_handler)) | |
{ | |
LOGE("qser_lpm_init fail"); | |
return -1; | |
} | |
return 0; | |
} | |
int qser_lpm_deinit(void) | |
{ | |
mbtk_lpm_deinit(); | |
return 0; | |
} | |
/* | |
例如AT*POWERIND=31,就相当于设置NETWORK、SIM、SMS、CS CALL、PS DATA变化时都不主动上报, | |
其中PS DATA目前暂时不支持,只是保留了这个标志位; | |
AP power state: 1~31 means suspend, bitmap: bit0 - NETWORK;bit1 - SIM;bit2 - SMS;bit3 - CS CALL;bit4 - PS DATA | |
0 means resume all. | |
目标文件"/system/etc/powerind" | |
如果bit0-bit3都配置可以采用的值是1-15,如果是当前采用NETWORK SMS CALL 则值的取值是 1 4 8 5 9 12 13 | |
*/ | |
int qser_whitelist_set(char* whitelish) | |
{ | |
//UNUSED(whitelish); | |
uint32 on = 0; | |
int call_t, nw_t, data_t, sms_t, tmp; | |
int len = strlen(whitelish); | |
if (len != 4) | |
{ | |
LOGE("whitelish num error num=[%d]",len); | |
return -1; | |
} | |
tmp = atoi(whitelish); | |
call_t = tmp/1000; | |
nw_t = tmp%1000/100; | |
data_t = tmp%1000%100/10; | |
sms_t = tmp%1000%100%10; | |
if (call_t == 1) | |
call_Off = TRUE; | |
else | |
call_Off = FALSE; | |
if (nw_t == 1) | |
nw_off = TRUE; | |
else | |
nw_off = FALSE; | |
if (data_t == 1) | |
data_off = TRUE; | |
else | |
data_off = FALSE; | |
if (sms_t == 1) | |
sms_off = TRUE; | |
else | |
sms_off = FALSE; | |
if (call_Off == FALSE && nw_off == FALSE && data_off == FALSE && sms_off == FALSE) | |
{ | |
on = 29;//0000的情况,所有上报源都屏蔽,SIM的上报会一直被包含在内 | |
} | |
else | |
{ | |
if (call_Off == TRUE) | |
call_t = 8; | |
else | |
call_t = 0; | |
if (nw_off == TRUE) | |
nw_t = 1; | |
else | |
nw_t = 0; | |
if (data_off == TRUE) | |
data_t = 16; | |
else | |
data_t = 0; | |
if (sms_off == TRUE) | |
sms_t = 4; | |
else | |
sms_t = 0; | |
on = 29 - (call_t + nw_t + data_t + sms_t);//SIM的上报会一直被包含在内 | |
} | |
if(whitelist_info_handle == NULL) | |
{ | |
whitelist_info_handle = mbtk_ril_open(MBTK_AT_PORT_DEF); | |
if(whitelist_info_handle) | |
{ | |
LOGI("creat whitelist_info_handle is success"); | |
} | |
else | |
{ | |
LOGE("creat whitelist_info_handle is fail"); | |
return -1; | |
} | |
} | |
int err = mbtk_wakeup_state_set(whitelist_info_handle, on); | |
if(err) | |
{ | |
LOGE("whitelist_info_handle Error : %d", err); | |
return -1; | |
} | |
if(whitelist_info_handle != NULL) | |
{ | |
int ret_ril = mbtk_ril_close(MBTK_AT_PORT_DEF); | |
if (ret_ril == MBTK_RIL_ERR_SUCCESS) | |
{ | |
LOGI("deinit whitelist_info_handle is succuess"); | |
whitelist_info_handle = NULL; | |
} | |
else | |
{ | |
LOGE("deinit whitelist_info_handle is error(%d)",ret_ril); | |
return -1; | |
} | |
} | |
return 0; | |
} | |
int qser_whitelist_get(char* whitelish) | |
{ | |
//UNUSED(whitelish); | |
char list[10] = {0}; | |
int get_tmp; | |
get_tmp = mbtk_powerrind_get(); | |
LOGI(">>>powerrind_get: %d",get_tmp); | |
//call 8 nw 1 data 16 sms 4 SIM的上报会一直被包含在内 | |
switch(get_tmp) | |
{ | |
case 0: | |
sprintf(list, "%d%d%d%d", 1, 1, 1, 1); | |
break; | |
case 8: | |
sprintf(list, "%d%d%d%d", 0, 1, 1, 1); | |
break; | |
case 1: | |
sprintf(list, "%d%d%d%d", 1, 0, 1, 1); | |
break; | |
case 16: | |
sprintf(list, "%d%d%d%d", 1, 1, 0, 1); | |
break; | |
case 4: | |
sprintf(list, "%d%d%d%d", 1, 1, 1, 0); | |
break; | |
case 9: | |
sprintf(list, "%d%d%d%d", 0, 0, 1, 1); | |
break; | |
case 24: | |
sprintf(list, "%d%d%d%d", 0, 1, 0, 1); | |
break; | |
case 12: | |
sprintf(list, "%d%d%d%d", 0, 1, 1, 0); | |
break; | |
case 17: | |
sprintf(list, "%d%d%d%d", 1, 0, 0, 1); | |
break; | |
case 5: | |
sprintf(list, "%d%d%d%d", 1, 0, 1, 0); | |
break; | |
case 20: | |
sprintf(list, "%d%d%d%d", 1, 1, 0, 0); | |
break; | |
case 25: | |
sprintf(list, "%d%d%d%d", 0, 0, 0, 1); | |
break; | |
case 13: | |
sprintf(list, "%d%d%d%d", 0, 0, 1, 0); | |
break; | |
case 28: | |
sprintf(list, "%d%d%d%d", 0, 1, 0, 0); | |
break; | |
case 21: | |
sprintf(list, "%d%d%d%d", 1, 0, 0, 0); | |
break; | |
case 29: | |
sprintf(list, "%d%d%d%d", 0, 0, 0, 0); | |
break; | |
default : | |
LOGE("qser_whitelist_get is error"); | |
return -1; | |
} | |
LOGI("whitelist list: %s",list); | |
strncpy(whitelish, list, strlen(list)); | |
return 0; | |
} | |
int qser_suspend_timer_set(int time, mbtk_sleep_callback_func cb) | |
{ | |
int ret = 0; | |
ret = mbtk_suspend_timer_set(time, cb); | |
if(0 > ret) | |
{ | |
LOGE("qser_suspend_timer_set failed"); | |
} | |
return ret; | |
} | |