add: demo for fixing #85, #86

pull/2/merge
Qingping Hou 12 years ago
parent 081a4165bb
commit c41e3e75a3

@ -63,6 +63,8 @@ THIRDPARTYLIBS := $(MUPDFLIBDIR)/libfreetype.a \
LUALIB := $(LUADIR)/src/liblua.a
all:kpdfview slider_watcher
kpdfview: kpdfview.o einkfb.o pdf.o blitbuffer.o drawcontext.o input.o util.o ft.o lfs.o $(MUPDFLIBS) $(THIRDPARTYLIBS) $(LUALIB) $(DJVULIBS) djvu.o
$(CC) -lm -ldl -lpthread $(EMU_LDFLAGS) -lstdc++ \
kpdfview.o \
@ -84,6 +86,9 @@ kpdfview: kpdfview.o einkfb.o pdf.o blitbuffer.o drawcontext.o input.o util.o ft
einkfb.o input.o: %.o: %.c
$(CC) -c $(KPDFREADER_CFLAGS) $(EMU_CFLAGS) $< -o $@
slider_watcher: slider_watcher.c
$(CC) $(CFLAGS) $< -o $@
ft.o: %.o: %.c
$(CC) -c $(KPDFREADER_CFLAGS) -I$(FREETYPEDIR)/include $< -o $@
@ -107,7 +112,7 @@ fetchthirdparty:
tar xvzf lua-5.1.4.tar.gz && ln -s lua-5.1.4 lua
clean:
-rm -f *.o kpdfview
-rm -f *.o kpdfview slider_watcher
cleanthirdparty:
make -C $(LUADIR) clean

@ -22,8 +22,8 @@
#include <linux/input.h>
#include "input.h"
#define NUM_FDS 3
int inputfds[3] = { -1, -1, -1 };
#define NUM_FDS 4
int inputfds[4] = { -1, -1, -1, -1 };
static int openInputDevice(lua_State *L) {
#ifndef EMULATE_READER

@ -87,6 +87,9 @@ KEY_FW_UP = 122
KEY_FW_DOWN = 123
KEY_FW_PRESS = 92
KEY_INTO_SCREEN_SAVER = 10000
KEY_OUTOF_SCREEN_SAVER = 10001
-- constants from <linux/input.h>
EV_KEY = 1

@ -1,8 +1,17 @@
#!/bin/sh
SLIDER_EVENT_PIPE="/tmp/event_slider"
export LC_ALL="en_US.UTF-8"
echo unlock > /proc/keypad
echo unlock > /proc/fiveway
cd /mnt/us/kindlepdfviewer/
# create the named pipe for power slider event
if [ ! -p $SLIDER_EVENT_PIPE ]; then
mkfifo $SLIDER_EVENT_PIPE
fi
killall slider_watcher
./slider_watcher $SLIDER_EVENT_PIPE &
./reader.lua $1 2> /mnt/us/kindlepdfviewer/crash.log
echo 1 > /proc/eink_fb/update_display

@ -92,6 +92,7 @@ if optarg["d"] == "k3" then
input.open("/dev/input/event0")
input.open("/dev/input/event1")
input.open("/dev/input/event2")
input.open("/tmp/event_slider")
setK3Keycodes()
elseif optarg["d"] == "emu" then
input.open("")
@ -100,6 +101,7 @@ elseif optarg["d"] == "emu" then
else
input.open("/dev/input/event0")
input.open("/dev/input/event1")
input.open("/tmp/event_slider")
-- check if we are running on Kindle 3 (additional volume input)
local f=lfs.attributes("/dev/input/event2")
@ -119,7 +121,7 @@ fb = einkfb.open("/dev/fb0")
width, height = fb:getSize()
-- read current rotation mode
Screen:updateRotationMode()
origin_rotation_mode = Screen.cur_rotation_mode
Screen.native_rotation_mode = Screen.cur_rotation_mode
-- set up reader's setting: font
reader_settings = DocSettings:open(".reader")
@ -167,10 +169,10 @@ reader_settings:close()
-- @TODO dirty workaround, find a way to force native system poll
-- screen orientation and upside down mode 09.03 2012
fb:setOrientation(origin_rotation_mode)
fb:setOrientation(Screen.native_rotation_mode)
input.closeAll()
--os.execute('test -e /proc/keypad && echo "send '..KEY_HOME..'" > /proc/keypad ')
if optarg["d"] ~= "emu" then
os.execute("killall -cont cvm")
os.execute('echo "send '..KEY_MENU..'" > /proc/keypad;echo "send '..KEY_MENU..'" > /proc/keypad')
end

@ -41,6 +41,9 @@ Codes for rotation modes:
Screen = {
cur_rotation_mode = 0,
-- these two variabls are used to help switching from framework to reader
native_rotation_mode = nil,
kpv_rotation_mode = nil,
}
-- @orien: 1 for clockwise rotate, -1 for anti-clockwise
@ -71,4 +74,3 @@ function Screen:updateRotationMode()
end
end

@ -0,0 +1,87 @@
/*
KindlePDFViewer: power slider key event watcher
Copyright (C) 2012 Qingping Hou <dave2008713@gamil.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#define OUTPUT_SIZE 21
#define EVENT_PIPE "/tmp/event_slider"
#define CODE_IN_SAVER 10000
#define CODE_OUT_SAVER 10001
int
main ( int argc, char *argv[] )
{
int fd, ret;
FILE *fp;
char std_out[OUTPUT_SIZE] = "";
struct input_event ev;
__u16 key_code = 10000;
/* create the npipe if not exists */
/*if(access(argv[1], F_OK)){*/
/*printf("npipe %s not found, try to create it...\n", argv[1]);*/
/*if(mkfifo(argv[1], 0777)) {*/
/*printf("Create npipe %s failed!\n", argv[1]);*/
/*}*/
/*}*/
/* open npipe for writing */
fd = open(argv[1], O_RDWR | O_NONBLOCK);
if(fd < 0) {
printf("Open %s falied: %s\n", argv[1], strerror(errno));
exit(EXIT_FAILURE);
}
/* initialize event struct */
ev.type = EV_KEY;
ev.code = key_code;
ev.value = 1;
while(1) {
/* listen power slider events */
memset(std_out, 0, OUTPUT_SIZE);
fp = popen("lipc-wait-event -s 0 com.lab126.powerd goingToScreenSaver,outOfScreenSaver", "r");
ret = fread(std_out, OUTPUT_SIZE, 1, fp);
pclose(fp);
/* fill event struct */
gettimeofday(&ev.time, NULL);
if(std_out[0] == 'g') {
ev.code = CODE_IN_SAVER;
} else if(std_out[0] == 'o') {
ev.code = CODE_OUT_SAVER;
} else {
printf("Unrecognized event.\n");
exit(EXIT_FAILURE);
}
/* generate event */
ret = write(fd, &ev, sizeof(struct input_event));
}
close(fd);
return EXIT_SUCCESS;
}

@ -1211,5 +1211,21 @@ function UniReader:addAllCommands()
end
end)
-- end panning
self.commands:add(KEY_INTO_SCREEN_SAVER,nil,"slider",
"toggle screen saver",
function(unireader)
Screen.kpv_rotation_mode = Screen.cur_rotation_mode
fb:setOrientation(Screen.native_rotation_mode)
os.execute("killall -cont cvm")
print("resumed")
end)
self.commands:add(KEY_OUTOF_SCREEN_SAVER,nil,"slider",
"toggle screen saver",
function(unireader)
os.execute("sleep 1")
os.execute("killall -stop cvm")
fb:setOrientation(Screen.kpv_rotation_mode)
unireader:goto(unireader.pageno)
end)
print("## defined commands "..dump(self.commands.map))
end

Loading…
Cancel
Save