blob: 6021b422c3158d4ee3634e328b1954d386b377eb [file] [log] [blame]
r.xiao27072552024-10-24 01:02:48 -07001#include "mbtk_sleep.h"
2#include "mbtk_log.h"
3
4static int sleep_epoll_deregister(int epoll_fd,int fd )
5{
6 int ret;
7 do {
8 ret = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, NULL );
9 } while (ret < 0 && errno == EINTR);
10 return ret;
11}
12
13static int sleep_epoll_register(int epoll_fd, int fd)
14{
15 struct epoll_event ev;
16 int ret, flags;
17
18 /* important: make the fd non-blocking */
19 flags = fcntl(fd, F_GETFL);
20 fcntl(fd, F_SETFL, flags | O_NONBLOCK);
21
22 ev.events = EPOLLIN;
23 ev.data.fd = fd;
24 do {
25 ret = epoll_ctl( epoll_fd, EPOLL_CTL_ADD, fd, &ev );
26 } while (ret < 0 && errno == EINTR);
27
28 return ret;
29}
30
31int mbtk_autosuspend_enable(char enable)
32{
33 if((enable == 1) || enable == '1')
34 {
35 if(!access("/sys/power/autosleep", W_OK))
36 {
37 system("echo mem > /sys/power/autosleep");
38 autosleep_enable = TRUE;
39 return 0;
40 }
41 else
42 {
43 LOGE("/sys/power/autosleep can not write.");
44 return -1;
45 }
46 }
47 else if((enable == 0) || enable == '0')
48 {
49 if(!access("/sys/power/autosleep", W_OK))
50 {
51 system("echo off > /sys/power/autosleep");
52 autosleep_enable = FALSE;
53 return 0;
54 }
55 else
56 {
57 LOGE("/sys/power/autosleep can not write.");
58 return -1;
59 }
60 }
61 else
62 {
63 LOGE("qser_autosuspend_enablecan enable err.");
64 return -1;
65 }
66
67 return 0;
68}
69
70int mbtk_wakelock_create(const char* name , size_t len)
71{
72 int len_t;
73
74 len_t = strlen(name);
75
76 if((name != NULL) && (len < 33) && (len_t < 33))
77 {
78 int i;
79 for(i=1 ;i<LOCK_MAX_SIZE;i++)
80 {
81 if(strcmp(mbtk_lock_name[i].name, name) == 0)
82 {
83 LOGE("Repeated names.");
84 return -1;
85 }
86 }
87
88 for(i=1 ;i<LOCK_MAX_SIZE;i++)
89 {
90 if(mbtk_lock_name[i].fd == 0)
91 break;
92 }
93
94 if (i >= LOCK_MAX_SIZE)
95 {
96 LOGE("Fd is full.");
97 return -1;
98 }
99
100 memcpy(mbtk_lock_name[i].name, name, strlen(name)+1);
101 mbtk_lock_name[i].fd = i;
102 return mbtk_lock_name[i].fd -1;//Starting from scratch
103 }
104 else
105 return -1;
106
107 return -1;
108}
109
110int mbtk_wakelock_lock(int fd)
111{
112 int i;
113 for(i=1;i<LOCK_MAX_SIZE;i++)
114 {
115 if(mbtk_lock_name[i].fd -1 == fd)
116 break;
117 }
118 if(i == LOCK_MAX_SIZE)
119 {
120 LOGE("LOCK_MAX_SIZE is full\n");
121 return -1;
122 }
123
124 if(!access("/sys/power/wake_lock", W_OK))
125 {
126 char cmd[128]={0};
127 sprintf(cmd, "echo %s > /sys/power/wake_lock", mbtk_lock_name[i].name);
128 system(cmd);
129 return 0;
130 }
131 else
132 {
133 LOGE("/sys/power/wake_lock can not write.");
134 return -1;
135 }
136
137 return 0;
138}
139
140int mbtk_wakelock_unlock(int fd)
141{
142 int i;
143 for(i=1;i<LOCK_MAX_SIZE;i++)
144 {
145 if(mbtk_lock_name[i].fd -1 == fd)
146 break;
147 }
148 if(i == LOCK_MAX_SIZE)
149 {
150 LOGE("LOCK_MAX_SIZE is full\n");
151 return -1;
152 }
153
154 if(!access("/sys/power/wake_unlock", W_OK))
155 {
156 char cmd[128]={0};
157 sprintf(cmd, "echo %s > /sys/power/wake_unlock", mbtk_lock_name[i].name);
158 system(cmd);
159 return 0;
160 }
161 else
162 {
163 LOGE("/sys/power/wake_unlock can not write.");
164 return -1;
165 }
166
167 return 0;
168}
169
170int mbtk_wakelock_destroy(int fd)
171{
172 int i;
173 for(i=1;i<LOCK_MAX_SIZE;i++)
174 {
175 if(mbtk_lock_name[i].fd -1 == fd)
176 break;
177 }
178
179 if(i == LOCK_MAX_SIZE)
180 {
181 LOGE("LOCK_MAX_SIZE is full\n");
182 return -1;
183 }
184 else
185 {
186 mbtk_lock_name[i].fd = 0;
187 memset(mbtk_lock_name[i].name, 0, 64);
188 return 0;
189 }
190
191 return 0;
192}
193
194
195