Merge pull request #811 from chrox/fake_tap

bugfix: hack swipe to unlock after going out of screensaver
pull/2/merge
{Qingping,Dave} Hou 11 years ago
commit df12cca722

@ -1,6 +1,8 @@
Device = {
screen_saver_mode = false,
charging_mode = false,
survive_screen_saver = false,
touch_dev = nil,
model = nil,
}
@ -79,6 +81,14 @@ function Device:isTouchDevice()
return (self.model == "KindlePaperWhite") or (self.model == "KindleTouch") or util.isEmulated()
end
function Device:setTouchInputDev(dev)
self.touch_dev = dev
end
function Device:getTouchInputDev()
return self.touch_dev
end
function Device:intoScreenSaver()
--os.execute("echo 'screensaver in' >> /mnt/us/event_test.txt")
if self.charging_mode == false and self.screen_saver_mode == false then
@ -102,6 +112,7 @@ function Device:outofScreenSaver()
--os.execute("killall -stop cvm")
Screen:restoreFromSavedBB()
Screen:refresh(0)
self.survive_screen_saver = true
end
self.screen_saver_mode = false
end

@ -275,6 +275,7 @@ function Input:init()
local dev_mod = Device:getModel()
if dev_mod ~= "KindleTouch" then
-- event0 in KindleTouch is "WM8962 Beep Generator" (useless)
Device:setTouchInputDev("/dev/input/event0")
input.open("/dev/input/event0")
end
if dev_mod ~= "KindleTouch" and dev_mod ~= "KindlePaperWhite" then
@ -285,6 +286,7 @@ function Input:init()
if dev_mod == "KindlePaperWhite" then
print("Auto-detected Kindle PaperWhite")
elseif dev_mod == "KindleTouch" then
Device:setTouchInputDev("/dev/input/event3")
input.open("/dev/input/event2") -- Home button
input.open("/dev/input/event3") -- touchscreen
-- KT does have one key!

@ -224,6 +224,78 @@ static int closeInputDevices(lua_State *L) {
#endif
}
static int fakeTapInput(lua_State *L) {
#ifndef EMULATE_READER
const char* inputdevice = luaL_checkstring(L, 1);
int x = luaL_checkint(L, 2);
int y = luaL_checkint(L, 3);
int i;
int inputfd = -1;
struct input_event ev;
inputfd = open(inputdevice, O_WRONLY | O_NDELAY);
if (inputfd == NULL) {
return luaL_error(L, "cannot open input device <%s>", inputdevice);
}
if(inputfd != -1) {
gettimeofday(&ev.time, NULL);
ev.type = 3;
ev.code = 57;
ev.value = 0;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 3;
ev.code = 53;
ev.value = x;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 3;
ev.code = 54;
ev.value = y;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 1;
ev.code = 330;
ev.value = 1;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 1;
ev.code = 325;
ev.value = 1;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 0;
ev.code = 0;
ev.value = 0;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 3;
ev.code = 57;
ev.value = -1;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 1;
ev.code = 330;
ev.value = 0;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 1;
ev.code = 325;
ev.value = 0;
write(inputfd, &ev, sizeof(ev));
gettimeofday(&ev.time, NULL);
ev.type = 0;
ev.code = 0;
ev.value = 0;
write(inputfd, &ev, sizeof(ev));
}
ioctl(inputfd, EVIOCGRAB, 0);
close(inputfd);
return 0;
#else
return 0;
#endif
}
static inline void set_event_table(lua_State *L, struct input_event input) {
lua_newtable(L);
lua_pushstring(L, "type");
@ -355,6 +427,7 @@ static const struct luaL_Reg input_func[] = {
{"open", openInputDevice},
{"closeAll", closeInputDevices},
{"waitForEvent", waitForInput},
{"fakeTapInput", fakeTapInput},
{NULL, NULL}
};

@ -34,11 +34,22 @@ function exitReader()
input.closeAll()
if util.isEmulated() ==0 then
if util.isEmulated() == 0 then
if Device:isKindle3() or (Device:getModel() == "KindleDXG") then
-- send double menu key press events to trigger screen refresh
os.execute("echo 'send 139' > /proc/keypad;echo 'send 139' > /proc/keypad")
end
if Device:isTouchDevice() and Device.survive_screen_saver then
-- hack the swipe to unlock screen
local dev = Device:getTouchInputDev()
if dev then
local width, height = Screen:getWidth(), Screen:getHeight()
input.fakeTapInput(dev,
math.min(width, height)/2,
math.max(width, height)-30
)
end
end
end
end

Loading…
Cancel
Save