上库LYNQ_SLEEP接口以及添加对应测试demo,删除LYNQ_SMS模块的冗余代码

Change-Id: Iaa684b0da9af0f895554f45e30ead62333a816a1
diff --git a/mbtk/lynq_lib/src/lynq_sleep.c b/mbtk/lynq_lib/src/lynq_sleep.c
index 59a363f..2b1ef31 100755
--- a/mbtk/lynq_lib/src/lynq_sleep.c
+++ b/mbtk/lynq_lib/src/lynq_sleep.c
@@ -1,41 +1,401 @@
 #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 "mbtk_type.h"
+#include "mbtk_log.h"
+#include "mbtk_info_api.h"
+
+/*
+该模块是系统睡眠,锁存在的时候系统无法休眠
+验证是否在睡眠状态,则需要测试功耗
+电源管理原则,只要有一个wakelock锁存在,系统就不会进入Suspend状态
+所以名字可以随便取,表示需要这样的一个锁,所以系统就不会进行睡眠
+*/
+#define MTBK_POWERIND           "/system/etc/powerind"      //1806
+//#define MTBK_POWERIND           "/etc/powerind"             //1803
+
+static bool call_Off  = FALSE;
+static bool nw_off = FALSE;
+static bool sms_off = FALSE;
+static bool data_off = FALSE;
+
+
+static int powerrind_get()
+{
+    char buffer[50];
+    int ret = 0;
+
+    int fd = open(MTBK_POWERIND, O_RDWR | O_SYNC, 0662);
+    if (fd != -1)
+    {
+        read(fd, buffer, strlen(buffer)+1);
+        close(fd);
+    }
+
+    ret = atoi(buffer);
+
+    return ret;
+}
+
+
+
+typedef struct
+{
+    int fd;
+    char name[128];
+} lock_name;
+
+lock_name lynq_lock_name[512]={0};
+static bool autosleep_enable = FALSE;
+
+static mbtk_info_handle_t* whitelist_info_handle = NULL;
+
+
 
 int qser_autosuspend_enable(char enable)
 {
-    UNUSED(enable);
+    //UNUSED(enable);
+
+    if(enable == 1)
+    {
+        if(!access("/sys/power/autosleep", W_OK))
+        {
+            system("echo mem > /sys/power/autosleep");
+            autosleep_enable = TRUE;
+            return 0;
+        }
+        else
+        {
+            LOGE("/sys/power/autosleep can not write.");
+            return -1;
+        }
+    }
+    else
+    {
+        if(!access("/sys/power/autosleep", W_OK))
+        {
+            system("echo off > /sys/power/autosleep");
+            autosleep_enable = FALSE;
+            return 0;
+        }
+        else
+        {
+            LOGE("/sys/power/autosleep can not write.");
+            return -1;
+        }
+    }
 
     return 0;
 }
 
 int qser_wakelock_create(const char* name , size_t len)
 {
-    UNUSED(name);
-    UNUSED(len);
+    //UNUSED(name);
+    //UNUSED(len);
+
+    if(!autosleep_enable) {
+        LOGE("Autosleep not enable.");
+        return -1;
+    }
+
+    if(name != NULL && len < 127)
+    {
+        int i;
+        for(i=0;i<512;i++)
+        {
+            if(lynq_lock_name[i].fd == 0)
+                break;
+        }
+        memcpy(lynq_lock_name[i].name, name, strlen(name)+1);
+        lynq_lock_name[i].fd = i;
+        return lynq_lock_name[i].fd;
+    }
+    else
+        return -1;
 
     return 0;
 }
 
 int qser_wakelock_lock(int fd)
 {
-    UNUSED(fd);
+    //UNUSED(fd);
+
+    if(!autosleep_enable) {
+        LOGE("Autosleep not enable.");
+        return -1;
+    }
+
+    int i;
+    for(i=0;i<512;i++)
+    {
+        if(lynq_lock_name[i].fd == fd)
+            break;
+    }
+    if(i == 512)
+        return -1;
+
+    if(!access("/sys/power/wake_lock", W_OK))
+    {
+        char cmd[128]={0};
+        sprintf(cmd, "echo %s > /sys/power/wake_lock", lynq_lock_name[i].name);
+        system(cmd);
+        return 0;
+    }
+    else
+    {
+        printf("/sys/power/wake_lock can not write.");
+        return -1;
+    }
 
     return 0;
 }
 
 int qser_wakelock_unlock(int fd)
 {
-    UNUSED(fd);
+    //UNUSED(fd);
+
+    if(!autosleep_enable) {
+        LOGE("Autosleep not enable.");
+        return -1;
+    }
+
+    int i;
+    for(i=0;i<512;i++)
+    {
+        if(lynq_lock_name[i].fd == fd)
+            break;
+    }
+    if(i == 512)
+        return -1;
+
+    if(!access("/sys/power/wake_unlock", W_OK))
+    {
+        char cmd[128]={0};
+        sprintf(cmd, "echo %s > /sys/power/wake_unlock", lynq_lock_name[i].name);
+        system(cmd);
+        return 0;
+    }
+    else
+    {
+        printf("/sys/power/wake_unlock can not write.");
+        return -1;
+    }
 
     return 0;
 }
 
 int qser_wakelock_destroy(int fd)
 {
-    UNUSED(fd);
+    //UNUSED(fd);
+
+    if(!autosleep_enable) {
+        LOGE("Autosleep not enable.");
+        return -1;
+    }
+
+    int i;
+    for(i=0;i<512;i++)
+    {
+        if(lynq_lock_name[i].fd == fd)
+        break;
+    }
+    if(i == 512)
+        return -1;
+    else
+    {
+        lynq_lock_name[i].fd = 0;
+        memset(lynq_lock_name[i].name, 0, 128);
+        return 0;
+    }
 
     return 0;
 }
 
 
+int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg)
+{
+    UNUSED(qser_lpm_handler);
+    UNUSED(qser_lpm_cfg);
+
+    //pthread_mutex_init();
+
+
+
+    return 0;
+}
+
+int qser_lpm_deinit(void)
+{
+
+    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
+
+
+白名单的状态由四位数字组成,第一位代表是否屏蔽电话唤醒,第二
+位代表是否屏蔽网络注册状态唤醒,第三位代表是否屏蔽数据业务唤
+醒,第四位代表是否屏蔽短信唤醒。其中 1 代表屏蔽,其他不会屏
+蔽。
+第一位:1:打开电话唤醒,其他:屏蔽电话唤醒
+第二位:1:打开网络注册状态唤醒,其他:屏蔽网络注册状态唤醒
+第三位:1:打开数据业务唤醒,其他:屏蔽数据业务唤醒
+第四位:1:打开短信唤醒,其他屏蔽短信唤醒
+当四位都不为 1 时(比如默认的状态:0000),则代表白名单为空,
+所有唤醒都不会屏蔽。
+
+从左往右判断
+
+*/
+
+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)
+    {
+        printf("whitelish num error.\n");
+    }
+
+    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 = 2;//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 = 31 - (call_t + nw_t + data_t + sms_t);//SIM的上报会一直被包含在内
+    }
+
+    if(whitelist_info_handle == NULL)
+    {
+        whitelist_info_handle = mbtk_info_handle_get();
+        if(whitelist_info_handle)
+        {
+            printf("creat whitelist_info_handle is success\n");
+        }
+        else
+        {
+            printf("creat whitelist_info_handle is fail\n");
+            return -1;
+        }
+    }
+
+    int err = mbtk_wakeup_state_set(whitelist_info_handle, on);
+    if(err)
+    {
+        printf("Error : %d\n", err);
+        return -1;
+    }
+    else
+    {
+        printf("wakeup set success.\n");
+    }
+
+
+    return 0;
+}
+
+
+int qser_whitelist_get(char* whitelish)
+{
+    //UNUSED(whitelish);
+    char *list = NULL;
+    int call_t, nw_t, data_t, sms_t;
+
+    if (call_Off == TRUE)
+        call_t = 1;
+    else
+        call_t = 0;
+    
+    if (nw_off == TRUE)
+        nw_t = 1;
+    else
+        nw_t = 0;
+    
+    if (data_off == TRUE)
+        data_t = 1;
+    else
+        data_t = 0;
+    
+    if (sms_off == TRUE)
+        sms_t = 1;
+    else
+        sms_t = 0;
+
+    sprintf(list,"%d%d%d%d\n",call_t, nw_t, data_t, sms_t);
+    printf(">>>whitelist: %s\n",list);
+    whitelish = list;
+
+    if(whitelist_info_handle != NULL)
+    {
+        mbtk_info_handle_free(&whitelist_info_handle);
+        printf("deinit whitelist_info_handle is succuess\n");
+    }
+
+    return 0;
+}
+