| /* |
| * |
| * Data : 2023/03/28 16:00:28 |
| * Author : Hanzhiyu |
| * |
| */ |
| #include "ql/ql_sleep_wakelock.h" |
| #include <stdio.h> |
| #include <unistd.h> |
| #include <stddef.h> |
| #include "mbtk_type.h" |
| #include "mbtk_log.h" |
| |
| typedef struct |
| { |
| int fd; |
| char name[128]; |
| } lock_name; |
| |
| lock_name ql_lock_name[512]={0}; |
| static bool autosleep_enable = FALSE; |
| |
| extern int Ql_Autosleep_Enable(char 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; |
| } |
| } |
| } |
| |
| extern int Ql_SLP_WakeLock_Create(const char *name, size_t len) |
| { |
| if(!autosleep_enable) { |
| LOGE("Autosleep not enable."); |
| return -1; |
| } |
| |
| if(name != NULL && len < 127) |
| { |
| int i; |
| for(i=0;i<512;i++) |
| { |
| if(ql_lock_name[i].fd == 0) |
| break; |
| } |
| memcpy(ql_lock_name[i].name, name, strlen(name)+1); |
| ql_lock_name[i].fd = i; |
| return ql_lock_name[i].fd; |
| } |
| else |
| return -1; |
| } |
| |
| extern int Ql_SLP_WakeLock_Lock(int fd) |
| { |
| if(!autosleep_enable) { |
| LOGE("Autosleep not enable."); |
| return -1; |
| } |
| |
| int i; |
| for(i=0;i<512;i++) |
| { |
| if(ql_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", ql_lock_name[i].name); |
| system(cmd); |
| return 0; |
| } |
| else |
| { |
| printf("/sys/power/wake_lock can not write."); |
| return -1; |
| } |
| } |
| |
| extern int Ql_SLP_WakeLock_Unlock(int fd) |
| { |
| if(!autosleep_enable) { |
| LOGE("Autosleep not enable."); |
| return -1; |
| } |
| |
| int i; |
| for(i=0;i<512;i++) |
| { |
| if(ql_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", ql_lock_name[i].name); |
| system(cmd); |
| return 0; |
| } |
| else |
| { |
| printf("/sys/power/wake_unlock can not write."); |
| return -1; |
| } |
| |
| } |
| |
| extern int Ql_SLP_WakeLock_Destroy(int fd) |
| { |
| if(!autosleep_enable) { |
| LOGE("Autosleep not enable."); |
| return -1; |
| } |
| |
| int i; |
| for(i=0;i<512;i++) |
| { |
| if(ql_lock_name[i].fd == fd) |
| break; |
| } |
| if(i == 512) |
| return -1; |
| else |
| { |
| ql_lock_name[i].fd = 0; |
| memset(ql_lock_name[i].name, 0, 128); |
| return 0; |
| } |
| } |
| |