Created
October 1, 2020 16:43
-
-
Save ArianK16a/28af5795312c316e04e644d65d8f52b3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define LOG_TAG "PowerModeExt" | |
#define INPUT_EVENT_WAKUP_MODE_OFF 4 | |
#define INPUT_EVENT_WAKUP_MODE_ON 5 | |
#include <Power.h> | |
#include <dirent.h> | |
#include <fcntl.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <hardware/power.h> | |
#include <linux/input.h> | |
#include <log/log.h> | |
using ::aidl::android::hardware::power::Mode; | |
namespace aidl { | |
namespace android { | |
namespace hardware { | |
namespace power { | |
namespace impl { | |
int open_ts_input() { | |
int fd = -1; | |
DIR *dir = opendir("/dev/input"); | |
if (dir != NULL) { | |
struct dirent *ent; | |
while ((ent = readdir(dir)) != NULL) { | |
if (ent->d_type == DT_CHR) { | |
char absolute_path[PATH_MAX] = {0}; | |
char name[80] = {0}; | |
strcpy(absolute_path, "/dev/input/"); | |
strcat(absolute_path, ent->d_name); | |
fd = open(absolute_path, O_RDWR); | |
if (ioctl(fd, EVIOCGNAME(sizeof(name) - 1), &name) > 0) { | |
if strcmp(name, "goodix_ts") == 0) | |
break; | |
} | |
close(fd); | |
fd = -1; | |
} | |
} | |
closedir(dir); | |
} | |
return fd; | |
} | |
bool setDeviceSpecificMode(Mode type, bool enabled) { | |
switch (type) { | |
case Mode::DOUBLE_TAP_TO_WAKE: | |
{ | |
int fd = open_ts_input(); | |
if (fd == -1) { | |
ALOGW("DT2W won't work because no supported touchscreen input devices were found"); | |
return false; | |
} | |
struct input_event ev; | |
ev.type = EV_SYN; | |
ev.code = SYN_CONFIG; | |
ev.value = enabled ? INPUT_EVENT_WAKUP_MODE_ON : INPUT_EVENT_WAKUP_MODE_OFF; | |
write(fd, &ev, sizeof(ev)); | |
close(fd); | |
return true; | |
} | |
default: | |
return false; | |
} | |
} | |
bool isDeviceSpecificModeSupported(Mode type, bool* _aidl_return) { | |
switch (type) { | |
case Mode::DOUBLE_TAP_TO_WAKE: | |
*_aidl_return = true; | |
return true; | |
default: | |
return false; | |
} | |
} | |
} // namespace impl | |
} // namespace power | |
} // namespace hardware | |
} // namespace android | |
} // namespace aidl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment