From 34c2b5059ccc6d3f281308ad6e1c5480787fa6a5 Mon Sep 17 00:00:00 2001 From: Matias Nitsche Date: Sun, 2 Sep 2018 00:07:20 -0300 Subject: [PATCH 1/4] Support for Sony PRS-T* --- Makefile | 2 +- Makefile.defs | 7 ++ Makefile.third | 5 +- ffi-cdecl/include/mxcfb-sony.h | 206 +++++++++++++++++++++++++++++++++ ffi-cdecl/mxcfb_sony_decl.c | 28 +++++ ffi/framebuffer_mxcfb.lua | 23 ++++ ffi/mxcfb_sony_h.lua | 46 ++++++++ input/input-prst.h | 25 ++++ input/input.c | 2 + 9 files changed, 342 insertions(+), 2 deletions(-) create mode 100644 ffi-cdecl/include/mxcfb-sony.h create mode 100644 ffi-cdecl/mxcfb_sony_decl.c create mode 100644 ffi/mxcfb_sony_h.lua create mode 100644 input/input-prst.h diff --git a/Makefile b/Makefile index 66e9cceab..ec9177fa2 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ libs: \ $(OUTPUT_DIR)/libs/libkoreader-input.so: input/*.c input/*.h $(if $(KINDLE),$(POPEN_NOSHELL_LIB),) @echo "Building koreader input module..." $(CC) $(DYNLIB_CFLAGS) -I$(POPEN_NOSHELL_DIR) -I./input \ - $(if $(KOBO),-DKOBO,) $(if $(KINDLE),-DKINDLE,) $(if $(POCKETBOOK),-DPOCKETBOOK,) \ + $(if $(KOBO),-DKOBO,) $(if $(KINDLE),-DKINDLE,) $(if $(POCKETBOOK),-DPOCKETBOOK,) $(if $(PRST),-DPRST,)\ -o $@ \ input/input.c \ $(if $(KINDLE),$(POPEN_NOSHELL_LIB),) \ diff --git a/Makefile.defs b/Makefile.defs index cb17c086d..e7eaaf953 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -92,6 +92,10 @@ else ifeq ($(TARGET), pocketbook) export POCKETBOOK=1 export PATH:=$(POCKETBOOK_TOOLCHAIN)/bin:$(PATH) export SYSROOT=$(POCKETBOOK_TOOLCHAIN)/arm-obreey-linux-gnueabi/sysroot +else ifeq ($(TARGET), prst) + CHOST?=arm-linux-gnueabihf + export PRST=1 + export USE_LJ_WPACLIENT=1 else ifndef TARGET # if TARGET is not defined we will build an emulator on current machine export EMULATE_READER=1 @@ -279,6 +283,9 @@ else ifeq ($(TARGET), android) ARM_ARCH+=-mfloat-abi=softfp export ac_cv_type_in_port_t=yes endif +else ifeq ($(TARGET), prst) + ARM_ARCH:=$(ARMV7_A8_ARCH) + ARM_ARCH+=-mfloat-abi=hard else ifeq ($(TARGET), arm-generic) # Defaults to generic crap ARM_ARCH:=$(ARMV6_GENERIC_ARCH) diff --git a/Makefile.third b/Makefile.third index 926f3d215..a6ad61ccd 100644 --- a/Makefile.third +++ b/Makefile.third @@ -38,10 +38,13 @@ $(TURBOJPEG_LIB) $(JPEG_LIB): $(THIRDPARTY_DIR)/libjpeg-turbo/CMakeLists.txt cd $(JPEG_BUILD_DIR) && \ $(CMAKE) \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF \ - $(if $(findstring armv6, $(ARM_ARCH)),-DWITHOUT_SIMD:BOOL=ON,) \ + $(if $(findstring arm, $(ARM_ARCH)),-DWITHOUT_SIMD:BOOL=ON,) \ -DCHOST="$(CHOST)" \ -DCFLAGS="$(CFLAGS)" \ -DLDFLAGS="$(LDFLAGS)" \ + -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \ + -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ + -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_CXX_COMPILER_ARG1)" \ -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \ -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_C_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \ diff --git a/ffi-cdecl/include/mxcfb-sony.h b/ffi-cdecl/include/mxcfb-sony.h new file mode 100644 index 000000000..ec9678fc9 --- /dev/null +++ b/ffi-cdecl/include/mxcfb-sony.h @@ -0,0 +1,206 @@ +/* + * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved. + */ + +/* + * The code contained herein is licensed under the GNU Lesser General + * Public License. You may obtain a copy of the GNU Lesser General + * Public License Version 2.1 or later at the following locations: + * + * http://www.opensource.org/licenses/lgpl-license.html + * http://www.gnu.org/copyleft/lgpl.html + */ + +/* + * @file arch-mxc/ mxcfb.h + * + * @brief Global header file for the MXC Frame buffer + * + * @ingroup Framebuffer + */ +#ifndef __ASM_ARCH_MXCFB_H__ +#define __ASM_ARCH_MXCFB_H__ + +#include + +#define FB_SYNC_OE_LOW_ACT 0x80000000 +#define FB_SYNC_CLK_LAT_FALL 0x40000000 +#define FB_SYNC_DATA_INVERT 0x20000000 +#define FB_SYNC_CLK_IDLE_EN 0x10000000 +#define FB_SYNC_SHARP_MODE 0x08000000 +#define FB_SYNC_SWAP_RGB 0x04000000 + +struct mxcfb_gbl_alpha { + int enable; + int alpha; +}; + +struct mxcfb_loc_alpha { + int enable; + int alpha_in_pixel; + unsigned long alpha_phy_addr0; + unsigned long alpha_phy_addr1; +}; + +struct mxcfb_color_key { + int enable; + __u32 color_key; +}; + +struct mxcfb_pos { + __u16 x; + __u16 y; +}; + +struct mxcfb_gamma { + int enable; + int constk[16]; + int slopek[16]; +}; + +struct mxcfb_rect { + __u32 top; + __u32 left; + __u32 width; + __u32 height; +}; + +#define GRAYSCALE_8BIT 0x1 +#define GRAYSCALE_8BIT_INVERTED 0x2 + +#define AUTO_UPDATE_MODE_REGION_MODE 0 +#define AUTO_UPDATE_MODE_AUTOMATIC_MODE 1 + +#define UPDATE_SCHEME_SNAPSHOT 0 +#define UPDATE_SCHEME_QUEUE 1 +#define UPDATE_SCHEME_QUEUE_AND_MERGE 2 + +#define UPDATE_MODE_PARTIAL 0x0 +#define UPDATE_MODE_FULL 0x1 + +#define WAVEFORM_MODE_AUTO 257 + +#define TEMP_USE_AMBIENT 0x1000 + +#define EPDC_FLAG_ENABLE_INVERSION 0x01 +#define EPDC_FLAG_FORCE_MONOCHROME 0x02 +#define EPDC_FLAG_USE_ALT_BUFFER 0x100 + +#define EPDC_FLAG_SP1_1 0x10000 +#define EPDC_FLAG_SP1_2 0x20000 + +#define FB_POWERDOWN_DISABLE -1 + +/* 2011/03/30 FY11 : Defined max marker value for user process. */ +/* (The value larger than this is for driver.)*/ +#define UPDATE_MARKER_MAX 0x80000000 + +struct mxcfb_alt_buffer_data { + void *virt_addr; + __u32 phys_addr; + __u32 width; /* width of entire buffer */ + __u32 height; /* height of entire buffer */ + struct mxcfb_rect alt_update_region; /* region within buffer to update */ +}; + +struct mxcfb_update_data { + struct mxcfb_rect update_region; + __u32 waveform_mode; + __u32 update_mode; + __u32 update_marker; + int temp; + uint flags; + struct mxcfb_alt_buffer_data alt_buffer_data; +}; + +/* + * Structure used to define waveform modes for driver + * Needed for driver to perform auto-waveform selection + */ +struct mxcfb_waveform_modes { + int mode_init; + int mode_du; + int mode_gc4; + int mode_gc8; + int mode_gc16; + int mode_gc32; + int mode_a2; /* 2011/03/05 FY11 : Supported A2 mode limitations. */ +}; + + +/* 2011/2/24 FY11 : Added waveform version struct. */ +#define WF_VER_LEN 10 +struct mxcfb_waveform_version { + __u8 version[WF_VER_LEN]; +}; + + +/* 2011/03/08 FY11 : Supported to write waveform. */ +struct mxcfb_waveform_data +{ + __u32 uiSize; + __u8 *pcData; +}; + + +#define MXCFB_WAIT_FOR_VSYNC _IOW('F', 0x20, u_int32_t) +#define MXCFB_SET_GBL_ALPHA _IOW('F', 0x21, struct mxcfb_gbl_alpha) +#define MXCFB_SET_CLR_KEY _IOW('F', 0x22, struct mxcfb_color_key) +#define MXCFB_SET_OVERLAY_POS _IOWR('F', 0x24, struct mxcfb_pos) +#define MXCFB_GET_FB_IPU_CHAN _IOR('F', 0x25, u_int32_t) +#define MXCFB_SET_LOC_ALPHA _IOWR('F', 0x26, struct mxcfb_loc_alpha) +#define MXCFB_SET_LOC_ALP_BUF _IOW('F', 0x27, unsigned long) +#define MXCFB_SET_GAMMA _IOW('F', 0x28, struct mxcfb_gamma) +#define MXCFB_GET_FB_IPU_DI _IOR('F', 0x29, u_int32_t) +#define MXCFB_GET_DIFMT _IOR('F', 0x2A, u_int32_t) +#define MXCFB_GET_FB_BLANK _IOR('F', 0x2B, u_int32_t) +#define MXCFB_SET_DIFMT _IOW('F', 0x2C, u_int32_t) + +/* IOCTLs for E-ink panel updates */ +#define MXCFB_SET_WAVEFORM_MODES _IOW('F', 0x2B, struct mxcfb_waveform_modes) +#define MXCFB_SET_TEMPERATURE _IOW('F', 0x2C, int32_t) +#define MXCFB_SET_AUTO_UPDATE_MODE _IOW('F', 0x2D, __u32) +#define MXCFB_SEND_UPDATE _IOW('F', 0x2E, struct mxcfb_update_data) +#define MXCFB_WAIT_FOR_UPDATE_COMPLETE _IOW('F', 0x2F, __u32) +#define MXCFB_SET_PWRDOWN_DELAY _IOW('F', 0x30, int32_t) +#define MXCFB_GET_PWRDOWN_DELAY _IOR('F', 0x31, int32_t) +#define MXCFB_SET_UPDATE_SCHEME _IOW('F', 0x32, __u32) +#define MXCFB_GET_PMIC_TEMPERATURE _IOR('F', 0x33, int32_t) +#define MXCFB_SET_BORDER_MODE _IOR('F', 0x34, int32_t) +#define MXCFB_SET_EPD_PWR0_CTRL _IOR('F', 0x35, int32_t) +#define MXCFB_SET_EPD_PWR2_CTRL _IOR('F', 0x36, int32_t) + +/* 2011/1/19 FY11 : Added commands to read/write VCOM. */ +#define MXCFB_SET_VCOM _IOW('F', 0x37, __u32) +#define MXCFB_GET_VCOM _IOR('F', 0x38, __u32) + +/* 2011/2/24 FY11 : Added commands to read waveform version. */ +#define MXCFB_GET_WF_VERSION _IOR('F', 0x39, struct mxcfb_waveform_version) +/* 2011/03/08 FY11 : Supported to write waveform. */ +#define MXCFB_WRITE_WF _IOW('F', 0x3A, struct mxcfb_waveform_data) +/* 2011/03/30 FY11 : Supported to write standby screen image. */ +#define MXCFB_WRITE_SSCREEN _IOW('F', 0x3B, __u8*) +/* 2011/04/12 FY11 : Supported to write panel init flag. */ +#define MXCFB_SET_PANELINIT _IOW('F', 0x3C, __u8) + +/* 2012/02/03 : Add pending function. */ +#define MXCFB_SET_PENDING _IOW('F', 0x3E, __u8) + +#ifdef __KERNEL__ + +extern struct fb_videomode mxcfb_modedb[]; +extern int mxcfb_modedb_sz; + +enum { + MXCFB_REFRESH_OFF, + MXCFB_REFRESH_AUTO, + MXCFB_REFRESH_PARTIAL, +}; + +int mxcfb_set_refresh_mode(struct fb_info *fbi, int mode, + struct mxcfb_rect *update_region); + +int mxc_elcdif_frame_addr_setup(dma_addr_t phys); + +#endif /* __KERNEL__ */ +#endif diff --git a/ffi-cdecl/mxcfb_sony_decl.c b/ffi-cdecl/mxcfb_sony_decl.c new file mode 100644 index 000000000..1fa15ee71 --- /dev/null +++ b/ffi-cdecl/mxcfb_sony_decl.c @@ -0,0 +1,28 @@ +// standard Linux framebuffer headers +#include + +#include +// specialized eink framebuffer headers +#include "include/mxcfb-sony.h" + +#include "ffi-cdecl.h" + +cdecl_const(UPDATE_MODE_PARTIAL) +cdecl_const(UPDATE_MODE_FULL) + +cdecl_const(WAVEFORM_MODE_AUTO) +cdecl_const(TEMP_USE_AMBIENT) + +cdecl_const(EPDC_FLAG_ENABLE_INVERSION) +cdecl_const(EPDC_FLAG_FORCE_MONOCHROME) +cdecl_const(EPDC_FLAG_USE_ALT_BUFFER) +cdecl_const(EPDC_FLAG_SP1_1) +cdecl_const(EPDC_FLAG_SP1_2) + +cdecl_struct(mxcfb_rect) +cdecl_struct(mxcfb_alt_buffer_data) +cdecl_struct(mxcfb_update_data) + +cdecl_const(MXCFB_SEND_UPDATE) + +cdecl_const(MXCFB_WAIT_FOR_UPDATE_COMPLETE) diff --git a/ffi/framebuffer_mxcfb.lua b/ffi/framebuffer_mxcfb.lua index 17e72794b..ab270f547 100644 --- a/ffi/framebuffer_mxcfb.lua +++ b/ffi/framebuffer_mxcfb.lua @@ -104,6 +104,12 @@ local function pocketbook_mxc_wait_for_update_complete(fb, marker) return C.ioctl(fb.fd, C.MXCFB_WAIT_FOR_UPDATE_COMPLETE, ffi.new("uint32_t[1]", marker)) end +-- Sony PRS MXCFB_WAIT_FOR_UPDATE_COMPLETE +local function prst_mxc_wait_for_update_complete(fb, marker) + -- Wait for the previous update to be completed + return C.ioctl(fb.fd, C.MXCFB_WAIT_FOR_UPDATE_COMPLETE, ffi.new("uint32_t[1]", marker)) +end + -- Kindle's MXCFB_WAIT_FOR_UPDATE_COMPLETE == 0xc008462f local function kindle_carta_mxc_wait_for_update_complete(fb, marker, collision_test) -- Wait for the previous update to be completed @@ -343,6 +349,12 @@ local function refresh_pocketbook(fb, refreshtype, waveform_mode, x, y, w, h) return mxc_update(fb, C.MXCFB_SEND_UPDATE, refarea, refreshtype, waveform_mode, x, y, w, h) end +local function refresh_prst(fb, refreshtype, waveform_mode, x, y, w, h) + local refarea = ffi.new("struct mxcfb_update_data[1]") + refarea[0].temp = C.TEMP_USE_AMBIENT + return mxc_update(fb, C.MXCFB_SEND_UPDATE, refarea, refreshtype, waveform_mode, x, y, w, h) +end + --[[ framebuffer API ]]-- function framebuffer:refreshPartialImp(x, y, w, h) @@ -502,6 +514,17 @@ function framebuffer:init() self.waveform_flashui = self.waveform_ui self.waveform_full = C.WAVEFORM_MODE_GC16 self.waveform_partial = C.WAVEFORM_MODE_GC16 + elseif self.device:isPRST() then + require("ffi/mxcfb_sony_h") + + self.mech_refresh = refresh_prst + self.mech_wait_update_complete = prst_mxc_wait_for_update_complete + + self.waveform_fast = C.WAVEFORM_MODE_DU + self.waveform_ui = C.WAVEFORM_MODE_AUTO + self.waveform_flashui = C.WAVEFORM_MODE_GC16 + self.waveform_full = C.WAVEFORM_MODE_GC16 + self.waveform_partial = C.WAVEFORM_MODE_AUTO else error("unknown device type") end diff --git a/ffi/mxcfb_sony_h.lua b/ffi/mxcfb_sony_h.lua new file mode 100644 index 000000000..932009f91 --- /dev/null +++ b/ffi/mxcfb_sony_h.lua @@ -0,0 +1,46 @@ +local ffi = require("ffi") + +ffi.cdef[[ +struct mxcfb_rect { + unsigned int top; + unsigned int left; + unsigned int width; + unsigned int height; +}; + +struct mxcfb_alt_buffer_data { + void* virt_addr; + unsigned int phys_addr; + unsigned int width; + unsigned int height; + struct mxcfb_rect alt_update_region; +}; + +struct mxcfb_update_data { + struct mxcfb_rect update_region; + unsigned int waveform_mode; + unsigned int update_mode; + unsigned int update_marker; + int temp; + unsigned int flags; + struct mxcfb_alt_buffer_data alt_buffer_data; +}; + +static const int UPDATE_MODE_PARTIAL = 0; +static const int UPDATE_MODE_FULL = 1; + +static const int WAVEFORM_MODE_INIT = 0; +static const int WAVEFORM_MODE_DU = 1; +static const int WAVEFORM_MODE_GC16 = 2; +static const int WAVEFORM_MODE_GC4 = 3; +static const int WAVEFORM_MODE_A2 = 4; +static const int WAVEFORM_MODE_AUTO = 257; +static const int TEMP_USE_AMBIENT = 4096; +static const int TEMP_USE_AUTO = 4097; // this does not exist, simply use a value different than above +static const int EPDC_FLAG_ENABLE_INVERSION = 1; +static const int EPDC_FLAG_FORCE_MONOCHROME = 2; +static const int EPDC_FLAG_USE_ALT_BUFFER = 256; + +static const int MXCFB_SEND_UPDATE = 1078216238; +static const int MXCFB_WAIT_FOR_UPDATE_COMPLETE = 1074021935; +]] diff --git a/input/input-prst.h b/input/input-prst.h new file mode 100644 index 000000000..64651afe8 --- /dev/null +++ b/input/input-prst.h @@ -0,0 +1,25 @@ +/* + KOReader: Sony PRST input abstraction for Lua + + 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 . +*/ + +#ifndef _KO_INPUT_PRST_H +#define _KO_INPUT_PRST_H + +void generateFakeEvent(int pipefd[2]) { + return; +} + +#endif diff --git a/input/input.c b/input/input.c index 330cbe6d0..be8a33882 100644 --- a/input/input.c +++ b/input/input.c @@ -49,6 +49,8 @@ pid_t fake_ev_generator_pid = -1; #include "input-kindle.h" #elif defined KOBO #include "input-kobo.h" +#elif defined PRST + #include "input-prst.h" #endif static inline int findFreeFdSlot() { From 221f9a9768d2e3ced052694a7f2e85a16ff703bf Mon Sep 17 00:00:00 2001 From: Matias Nitsche Date: Sun, 2 Sep 2018 22:36:09 -0300 Subject: [PATCH 2/4] fixes --- .ci/build_script.sh | 6 ++++++ .travis.yml | 1 + Makefile.third | 5 +---- ffi-cdecl/include/mxcfb-sony.h | 1 + ffi/mxcfb_sony_h.lua | 2 +- thirdparty/libjpeg-turbo/CMakeLists.txt | 8 ++++---- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.ci/build_script.sh b/.ci/build_script.sh index 2d8d4a7d9..8cc93b60e 100755 --- a/.ci/build_script.sh +++ b/.ci/build_script.sh @@ -25,6 +25,12 @@ elif [ "$TARGET" = pocketbook ]; then -v "${HOME}/.ccache:${DOCKER_HOME}/.ccache" \ -v "$(pwd):${DOCKER_HOME}/base" "${DOCKER_IMG}" \ /bin/bash -c "source /home/ko/.bashrc && cd /home/ko/base && sudo chown -R ko:ko . && make pocketbook-toolchain && make VERBOSE=1 TARGET=pocketbook all" +elif [ "$TARGET" = prst ]; then + sudo chmod -R 777 "${HOME}/.ccache" + docker run -t \ + -v "${HOME}/.ccache:${DOCKER_HOME}/.ccache" \ + -v "$(pwd):${DOCKER_HOME}/base" "${DOCKER_IMG}" \ + /bin/bash -c "source /home/ko/.bashrc && cd /home/ko/base && sudo chown -R ko:ko . && make VERBOSE=1 TARGET=prst all" else make all fi diff --git a/.travis.yml b/.travis.yml index 905f02eaa..21823033f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ env: - TARGET=kindle DOCKER_IMG=frenzie/kokindle:0.0.5 - TARGET=kobo DOCKER_IMG=frenzie/kokobo:0.0.5 - TARGET=pocketbook DOCKER_IMG=houqp/kopb:0.0.1 + - TARGET=prst DOCKER_IMG=phreakuencies/prstux-dev:16.04 # ANDROID_ARCH=x86 is currently broken on these older NDKs (at least on Travis), so no point in testing it - TARGET=android NDKREV=r11c - TARGET=android NDKREV=r12b diff --git a/Makefile.third b/Makefile.third index a6ad61ccd..926f3d215 100644 --- a/Makefile.third +++ b/Makefile.third @@ -38,13 +38,10 @@ $(TURBOJPEG_LIB) $(JPEG_LIB): $(THIRDPARTY_DIR)/libjpeg-turbo/CMakeLists.txt cd $(JPEG_BUILD_DIR) && \ $(CMAKE) \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF \ - $(if $(findstring arm, $(ARM_ARCH)),-DWITHOUT_SIMD:BOOL=ON,) \ + $(if $(findstring armv6, $(ARM_ARCH)),-DWITHOUT_SIMD:BOOL=ON,) \ -DCHOST="$(CHOST)" \ -DCFLAGS="$(CFLAGS)" \ -DLDFLAGS="$(LDFLAGS)" \ - -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \ - -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ - -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_CXX_COMPILER_ARG1)" \ -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \ -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_C_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \ diff --git a/ffi-cdecl/include/mxcfb-sony.h b/ffi-cdecl/include/mxcfb-sony.h index ec9678fc9..262e15635 100644 --- a/ffi-cdecl/include/mxcfb-sony.h +++ b/ffi-cdecl/include/mxcfb-sony.h @@ -81,6 +81,7 @@ struct mxcfb_rect { #define WAVEFORM_MODE_AUTO 257 #define TEMP_USE_AMBIENT 0x1000 +#define TEMP_USE_AUTO 0x1001 #define EPDC_FLAG_ENABLE_INVERSION 0x01 #define EPDC_FLAG_FORCE_MONOCHROME 0x02 diff --git a/ffi/mxcfb_sony_h.lua b/ffi/mxcfb_sony_h.lua index 932009f91..76de0246a 100644 --- a/ffi/mxcfb_sony_h.lua +++ b/ffi/mxcfb_sony_h.lua @@ -37,7 +37,7 @@ static const int WAVEFORM_MODE_A2 = 4; static const int WAVEFORM_MODE_AUTO = 257; static const int TEMP_USE_AMBIENT = 4096; static const int TEMP_USE_AUTO = 4097; // this does not exist, simply use a value different than above -static const int EPDC_FLAG_ENABLE_INVERSION = 1; +static const int EPDC_FLAG_ENABLE_INVERSION = 1; static const int EPDC_FLAG_FORCE_MONOCHROME = 2; static const int EPDC_FLAG_USE_ALT_BUFFER = 256; diff --git a/thirdparty/libjpeg-turbo/CMakeLists.txt b/thirdparty/libjpeg-turbo/CMakeLists.txt index b2311fdea..caa2707fd 100644 --- a/thirdparty/libjpeg-turbo/CMakeLists.txt +++ b/thirdparty/libjpeg-turbo/CMakeLists.txt @@ -31,14 +31,14 @@ set(CFG_OPTS "${CFG_OPTS} -DCMAKE_C_COMPILER='${CMAKE_C_COMPILER}' -DCMAKE_C_COM set(CFG_OPTS "${CFG_OPTS} -DCMAKE_EXE_LINKER_FLAGS='${LDFLAGS}'") # c.f., http://trac.ak-team.com/trac/browser/niluje/Configs/trunk/Kindle/Misc/CMakeCross.txt -if(($ENV{KINDLE}) OR ($ENV{LEGACY}) OR ($ENV{KOBO}) OR ($ENV{POCKETBOOK}) OR ($ENV{UBUNTUTOUCH})) +if((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{PRST})) set(CFG_OPTS "${CFG_OPTS} -DCMAKE_SYSTEM_NAME='Linux'") -endif(($ENV{KINDLE}) OR ($ENV{LEGACY}) OR ($ENV{KOBO}) OR ($ENV{POCKETBOOK}) OR ($ENV{UBUNTUTOUCH})) +endif((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{PRST})) # c.f., https://android.googlesource.com/platform/ndk/+/master/build/cmake/android.toolchain.cmake # and https://github.com/taka-no-me/android-cmake # In the meantime, I'll be sitting in the corner, crying hysterically. -if($ENV{ANDROID}) +if(DEFINED ENV{ANDROID}) set(CFG_OPTS "${CFG_OPTS} -DCMAKE_SYSTEM_NAME='Android'") # Magical value that inhibits all of CMake's own NDK handling code. (Or shit goes boom.) set(CFG_OPTS "${CFG_OPTS} -DCMAKE_SYSTEM_VERSION=1") @@ -57,7 +57,7 @@ if($ENV{ANDROID}) if(${CHOST} MATCHES "^x86_64-.*") set(CFG_OPTS "${CFG_OPTS} -DCMAKE_SYSTEM_PROCESSOR='x86_64'") endif(${CHOST} MATCHES "^x86_64-.*") -endif($ENV{ANDROID}) +endif(DEFINED ENV{ANDROID}) # Needed so that libjpeg-turbo tries to build the right set of SIMD routines for the target when cross-compiling... # NOTE: When CMAKE_SYSTEM_PROCESSOR is set, CMAKE_SYSTEM_NAME MUST be too (or vice versa). From c3e3c32cb7524288224436d827c7ce6e384bf1ae Mon Sep 17 00:00:00 2001 From: Matias Nitsche Date: Mon, 3 Sep 2018 19:32:30 -0300 Subject: [PATCH 3/4] PRST: switch to A2 and AUTO modes for fast and flash_ui --- ffi/framebuffer_mxcfb.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ffi/framebuffer_mxcfb.lua b/ffi/framebuffer_mxcfb.lua index ab270f547..e06d0314f 100644 --- a/ffi/framebuffer_mxcfb.lua +++ b/ffi/framebuffer_mxcfb.lua @@ -520,9 +520,9 @@ function framebuffer:init() self.mech_refresh = refresh_prst self.mech_wait_update_complete = prst_mxc_wait_for_update_complete - self.waveform_fast = C.WAVEFORM_MODE_DU + self.waveform_fast = C.WAVEFORM_MODE_A2 self.waveform_ui = C.WAVEFORM_MODE_AUTO - self.waveform_flashui = C.WAVEFORM_MODE_GC16 + self.waveform_flashui = C.WAVEFORM_MODE_AUTO self.waveform_full = C.WAVEFORM_MODE_GC16 self.waveform_partial = C.WAVEFORM_MODE_AUTO else From 8f797aa3113122efad8cfe4fa44f669d1567f1b3 Mon Sep 17 00:00:00 2001 From: Matias Nitsche Date: Mon, 3 Sep 2018 22:52:29 -0300 Subject: [PATCH 4/4] renamed prstux -> sony_prstux (and all casings and combinations) --- .ci/build_script.sh | 4 ++-- .travis.yml | 2 +- Makefile | 2 +- Makefile.defs | 6 +++--- ffi/framebuffer_mxcfb.lua | 10 +++++----- input/{input-prst.h => input-sony-prstux.h} | 6 +++--- input/input.c | 4 ++-- thirdparty/libjpeg-turbo/CMakeLists.txt | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) rename input/{input-prst.h => input-sony-prstux.h} (86%) diff --git a/.ci/build_script.sh b/.ci/build_script.sh index 8cc93b60e..171d185d2 100755 --- a/.ci/build_script.sh +++ b/.ci/build_script.sh @@ -25,12 +25,12 @@ elif [ "$TARGET" = pocketbook ]; then -v "${HOME}/.ccache:${DOCKER_HOME}/.ccache" \ -v "$(pwd):${DOCKER_HOME}/base" "${DOCKER_IMG}" \ /bin/bash -c "source /home/ko/.bashrc && cd /home/ko/base && sudo chown -R ko:ko . && make pocketbook-toolchain && make VERBOSE=1 TARGET=pocketbook all" -elif [ "$TARGET" = prst ]; then +elif [ "$TARGET" = sony_prstux ]; then sudo chmod -R 777 "${HOME}/.ccache" docker run -t \ -v "${HOME}/.ccache:${DOCKER_HOME}/.ccache" \ -v "$(pwd):${DOCKER_HOME}/base" "${DOCKER_IMG}" \ - /bin/bash -c "source /home/ko/.bashrc && cd /home/ko/base && sudo chown -R ko:ko . && make VERBOSE=1 TARGET=prst all" + /bin/bash -c "source /home/ko/.bashrc && cd /home/ko/base && sudo chown -R ko:ko . && make VERBOSE=1 TARGET=sony_prstux all" else make all fi diff --git a/.travis.yml b/.travis.yml index 21823033f..df077cc81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ env: - TARGET=kindle DOCKER_IMG=frenzie/kokindle:0.0.5 - TARGET=kobo DOCKER_IMG=frenzie/kokobo:0.0.5 - TARGET=pocketbook DOCKER_IMG=houqp/kopb:0.0.1 - - TARGET=prst DOCKER_IMG=phreakuencies/prstux-dev:16.04 + - TARGET=sony_prstux DOCKER_IMG=phreakuencies/prstux-dev:16.04 # ANDROID_ARCH=x86 is currently broken on these older NDKs (at least on Travis), so no point in testing it - TARGET=android NDKREV=r11c - TARGET=android NDKREV=r12b diff --git a/Makefile b/Makefile index ec9177fa2..a9f8b06f4 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ libs: \ $(OUTPUT_DIR)/libs/libkoreader-input.so: input/*.c input/*.h $(if $(KINDLE),$(POPEN_NOSHELL_LIB),) @echo "Building koreader input module..." $(CC) $(DYNLIB_CFLAGS) -I$(POPEN_NOSHELL_DIR) -I./input \ - $(if $(KOBO),-DKOBO,) $(if $(KINDLE),-DKINDLE,) $(if $(POCKETBOOK),-DPOCKETBOOK,) $(if $(PRST),-DPRST,)\ + $(if $(KOBO),-DKOBO,) $(if $(KINDLE),-DKINDLE,) $(if $(POCKETBOOK),-DPOCKETBOOK,) $(if $(SONY_PRSTUX),-DSONY_PRSTUX,)\ -o $@ \ input/input.c \ $(if $(KINDLE),$(POPEN_NOSHELL_LIB),) \ diff --git a/Makefile.defs b/Makefile.defs index e7eaaf953..fab8db86e 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -92,9 +92,9 @@ else ifeq ($(TARGET), pocketbook) export POCKETBOOK=1 export PATH:=$(POCKETBOOK_TOOLCHAIN)/bin:$(PATH) export SYSROOT=$(POCKETBOOK_TOOLCHAIN)/arm-obreey-linux-gnueabi/sysroot -else ifeq ($(TARGET), prst) +else ifeq ($(TARGET), sony_prstux) CHOST?=arm-linux-gnueabihf - export PRST=1 + export SONY_PRSTUX=1 export USE_LJ_WPACLIENT=1 else ifndef TARGET # if TARGET is not defined we will build an emulator on current machine @@ -283,7 +283,7 @@ else ifeq ($(TARGET), android) ARM_ARCH+=-mfloat-abi=softfp export ac_cv_type_in_port_t=yes endif -else ifeq ($(TARGET), prst) +else ifeq ($(TARGET), sony_prstux) ARM_ARCH:=$(ARMV7_A8_ARCH) ARM_ARCH+=-mfloat-abi=hard else ifeq ($(TARGET), arm-generic) diff --git a/ffi/framebuffer_mxcfb.lua b/ffi/framebuffer_mxcfb.lua index e06d0314f..f7934c0ad 100644 --- a/ffi/framebuffer_mxcfb.lua +++ b/ffi/framebuffer_mxcfb.lua @@ -105,7 +105,7 @@ local function pocketbook_mxc_wait_for_update_complete(fb, marker) end -- Sony PRS MXCFB_WAIT_FOR_UPDATE_COMPLETE -local function prst_mxc_wait_for_update_complete(fb, marker) +local function sony_prstux_mxc_wait_for_update_complete(fb, marker) -- Wait for the previous update to be completed return C.ioctl(fb.fd, C.MXCFB_WAIT_FOR_UPDATE_COMPLETE, ffi.new("uint32_t[1]", marker)) end @@ -349,7 +349,7 @@ local function refresh_pocketbook(fb, refreshtype, waveform_mode, x, y, w, h) return mxc_update(fb, C.MXCFB_SEND_UPDATE, refarea, refreshtype, waveform_mode, x, y, w, h) end -local function refresh_prst(fb, refreshtype, waveform_mode, x, y, w, h) +local function refresh_sony_prstux(fb, refreshtype, waveform_mode, x, y, w, h) local refarea = ffi.new("struct mxcfb_update_data[1]") refarea[0].temp = C.TEMP_USE_AMBIENT return mxc_update(fb, C.MXCFB_SEND_UPDATE, refarea, refreshtype, waveform_mode, x, y, w, h) @@ -514,11 +514,11 @@ function framebuffer:init() self.waveform_flashui = self.waveform_ui self.waveform_full = C.WAVEFORM_MODE_GC16 self.waveform_partial = C.WAVEFORM_MODE_GC16 - elseif self.device:isPRST() then + elseif self.device:isSonyPRSTUX() then require("ffi/mxcfb_sony_h") - self.mech_refresh = refresh_prst - self.mech_wait_update_complete = prst_mxc_wait_for_update_complete + self.mech_refresh = refresh_sony_prstux + self.mech_wait_update_complete = sony_prstux_mxc_wait_for_update_complete self.waveform_fast = C.WAVEFORM_MODE_A2 self.waveform_ui = C.WAVEFORM_MODE_AUTO diff --git a/input/input-prst.h b/input/input-sony-prstux.h similarity index 86% rename from input/input-prst.h rename to input/input-sony-prstux.h index 64651afe8..dc1e0af8c 100644 --- a/input/input-prst.h +++ b/input/input-sony-prstux.h @@ -1,5 +1,5 @@ /* - KOReader: Sony PRST input abstraction for Lua + KOReader: Sony PRSTUX input abstraction for Lua 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 @@ -15,8 +15,8 @@ along with this program. If not, see . */ -#ifndef _KO_INPUT_PRST_H -#define _KO_INPUT_PRST_H +#ifndef _KO_INPUT_SONY_PRSTUX_H +#define _KO_INPUT_SONY_PRSTUX_H void generateFakeEvent(int pipefd[2]) { return; diff --git a/input/input.c b/input/input.c index be8a33882..70f21f2bc 100644 --- a/input/input.c +++ b/input/input.c @@ -49,8 +49,8 @@ pid_t fake_ev_generator_pid = -1; #include "input-kindle.h" #elif defined KOBO #include "input-kobo.h" -#elif defined PRST - #include "input-prst.h" +#elif defined SONY_PRSTUX + #include "input-sony-prstux.h" #endif static inline int findFreeFdSlot() { diff --git a/thirdparty/libjpeg-turbo/CMakeLists.txt b/thirdparty/libjpeg-turbo/CMakeLists.txt index caa2707fd..b74615fa4 100644 --- a/thirdparty/libjpeg-turbo/CMakeLists.txt +++ b/thirdparty/libjpeg-turbo/CMakeLists.txt @@ -31,9 +31,9 @@ set(CFG_OPTS "${CFG_OPTS} -DCMAKE_C_COMPILER='${CMAKE_C_COMPILER}' -DCMAKE_C_COM set(CFG_OPTS "${CFG_OPTS} -DCMAKE_EXE_LINKER_FLAGS='${LDFLAGS}'") # c.f., http://trac.ak-team.com/trac/browser/niluje/Configs/trunk/Kindle/Misc/CMakeCross.txt -if((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{PRST})) +if((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{SONY_PRSTUX})) set(CFG_OPTS "${CFG_OPTS} -DCMAKE_SYSTEM_NAME='Linux'") -endif((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{PRST})) +endif((DEFINED ENV{KINDLE}) OR (DEFINED ENV{LEGACY}) OR (DEFINED ENV{KOBO}) OR (DEFINED ENV{POCKETBOOK}) OR (DEFINED ENV{UBUNTUTOUCH}) OR (DEFINED ENV{SONY_PRSTUX})) # c.f., https://android.googlesource.com/platform/ndk/+/master/build/cmake/android.toolchain.cmake # and https://github.com/taka-no-me/android-cmake