From aaa6b38ef3f348394719e833ae4667f8e889ab67 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sun, 10 Jun 2012 23:54:27 +0800 Subject: [PATCH 1/2] add getOrientation method for einkfb module --- einkfb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/einkfb.c b/einkfb.c index fdd058aae..6a50edd4d 100644 --- a/einkfb.c +++ b/einkfb.c @@ -236,6 +236,17 @@ static int einkSetOrientation(lua_State *L) { return 0; } +static int einkGetOrientation(lua_State *L) { + int mode = 0; +#ifndef EMULATE_READER + FBInfo *fb = (FBInfo*) luaL_checkudata(L, 1, "einkfb"); + + ioctl(fb->fd, FBIO_EINK_GET_DISPLAY_ORIENTATION, &mode); +#endif + lua_pushinteger(L, mode); + return 1; +} + static const struct luaL_Reg einkfb_func[] = { {"open", openFrameBuffer}, @@ -246,6 +257,7 @@ static const struct luaL_Reg einkfb_meth[] = { {"close", closeFrameBuffer}, {"__gc", closeFrameBuffer}, {"refresh", einkUpdate}, + {"getOrientation", einkGetOrientation}, {"setOrientation", einkSetOrientation}, {"getSize", getSize}, {NULL, NULL} From 937a91c297cde516944862ce77cf3b9029e42d8f Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 11 Jun 2012 00:09:23 +0800 Subject: [PATCH 2/2] fix fb:getOrientation method, adjust mode numbering also use it in screen.lua --- einkfb.c | 25 ++++++++++++++++++++++++- frontend/ui/screen.lua | 9 ++------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/einkfb.c b/einkfb.c index 6a50edd4d..b7784e592 100644 --- a/einkfb.c +++ b/einkfb.c @@ -225,7 +225,23 @@ static int einkSetOrientation(lua_State *L) { return luaL_error(L, "Wrong rotation mode %d given!", mode); } - /* ioctl has a different definition for rotation mode. */ + /* ioctl has a different definition for rotation mode. + * 1 + * +--------------+ + * | +----------+ | + * | | | | + * | | Freedom! | | + * | | | | + * | | | | + * 3 | | | | 2 + * | | | | + * | | | | + * | +----------+ | + * | | + * | | + * +--------------+ + * 0 + * */ if (mode == 1) mode = 2; else if (mode == 2) @@ -242,6 +258,13 @@ static int einkGetOrientation(lua_State *L) { FBInfo *fb = (FBInfo*) luaL_checkudata(L, 1, "einkfb"); ioctl(fb->fd, FBIO_EINK_GET_DISPLAY_ORIENTATION, &mode); + + /* adjust ioctl's rotate mode definition to KPV's + * refer to screen.lua */ + if (mode == 2) + mode = 1; + else if (mode == 1) + mode = 2; #endif lua_pushinteger(L, mode); return 1; diff --git a/frontend/ui/screen.lua b/frontend/ui/screen.lua index 9b4b78887..dc3e721d6 100644 --- a/frontend/ui/screen.lua +++ b/frontend/ui/screen.lua @@ -84,13 +84,8 @@ function Screen:getHeight() end function Screen:updateRotationMode() - if util.isEmulated() then -- in EMU mode always set to 0 - self.cur_rotation_mode = 0 - else - orie_fd = assert(io.open("/sys/module/eink_fb_hal_broads/parameters/bs_orientation", "r")) - updown_fd = assert(io.open("/sys/module/eink_fb_hal_broads/parameters/bs_upside_down", "r")) - self.cur_rotation_mode = orie_fd:read() + (updown_fd:read() * 2) - end + -- in EMU mode, you will always get 0 from getOrientation() + self.cur_rotation_mode = self.fb:getOrientation() end function Screen:saveCurrentBB()