diff --git a/base b/base index 1052bd1d5..c26c3ddca 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 1052bd1d58a76a116e196a2d13ed80c283e91dde +Subproject commit c26c3ddca2671e3e2978cbd41388c316a3769042 diff --git a/frontend/apps/reader/modules/readeractivityindicator.lua b/frontend/apps/reader/modules/readeractivityindicator.lua index 27237e82d..cd2caced8 100644 --- a/frontend/apps/reader/modules/readeractivityindicator.lua +++ b/frontend/apps/reader/modules/readeractivityindicator.lua @@ -7,7 +7,7 @@ local ReaderActivityIndicator = EventListener:new{} function ReaderActivityIndicator:init() local dev_mod = Device.model - if dev_mod == "KindlePaperWhite" or dev_mod == "KindlePaperWhite2" or dev_mod == "KindleVoyage" or dev_mod == "KindleBasic" or dev_mod == "KindleTouch" then + if dev_mod == "KindlePaperWhite" or dev_mod == "KindlePaperWhite2" or dev_mod == "KindleVoyage" or dev_mod == "KindleBasic" or dev_mod == "KindlePaperWhite3" or dev_mod == "KindleTouch" then if (pcall(require, "liblipclua")) then self.lipc_handle = lipc.init("com.github.koreader.activityindicator") end diff --git a/frontend/device/kindle/device.lua b/frontend/device/kindle/device.lua index 6c611085d..4ecbd9289 100644 --- a/frontend/device/kindle/device.lua +++ b/frontend/device/kindle/device.lua @@ -69,6 +69,14 @@ local KindleVoyage = Kindle:new{ touch_dev = "/dev/input/event1", } +local KindlePaperWhite3 = Kindle:new{ + model = "KindlePaperWhite3", + isTouchDevice = yes, + hasFrontlight = yes, + display_dpi = 300, + touch_dev = "/dev/input/event1", +} + function Kindle2:init() self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = DEBUG} self.input = require("device/input"):new{ @@ -205,6 +213,21 @@ function KindleVoyage:init() self.input.open("fake_events") end +function KindlePaperWhite3:init() + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.powerd = require("device/kindle/powerd"):new{ + device = self, + fl_intensity_file = "/sys/class/backlight/max77696-bl/brightness", + batt_capacity_file = "/sys/devices/system/wario_battery/wario_battery0/battery_capacity", + is_charging_file = "/sys/devices/system/wario_charger/wario_charger0/charging", + } + + Kindle.init(self) + + self.input.open("/dev/input/event1") + self.input.open("fake_events") +end + --[[ Test if a kindle device has Special Offers --]] @@ -246,6 +269,7 @@ KindlePaperWhite.exit = KindleTouch.exit KindlePaperWhite2.exit = KindleTouch.exit KindleBasic.exit = KindleTouch.exit KindleVoyage.exit = KindleTouch.exit +KindlePaperWhite3.exit = KindleTouch.exit function Kindle3:exit() -- send double menu key press events to trigger screen refresh @@ -269,6 +293,7 @@ end local kindle_sn = io.open("/proc/usid", "r") if not kindle_sn then return end local kindle_devcode = string.sub(kindle_sn:read(),3,4) +local kindle_devcode_v2 = string.sub(kindle_sn:read(),4,6) kindle_sn:close() -- NOTE: Update me when new devices come out :) @@ -283,6 +308,7 @@ local pw2_set = Set { "D4", "5A", "D5", "D6", "D7", "D8", "F2", "17", "60", "F4", "F9", "62", "61", "5F" } local kt2_set = Set { "C6", "DD" } local kv_set = Set { "13", "54", "2A", "4F", "52", "53" } +local pw3_set = Set { "0G1", "0G2", "0G4", "0G5", "0G6", "0G7" } if k2_set[kindle_devcode] then return Kindle2 @@ -304,6 +330,8 @@ elseif kt2_set[kindle_devcode] then return KindleBasic elseif kv_set[kindle_devcode] then return KindleVoyage +elseif pw3_set[kindle_devcode_v2] then + return KindlePaperWhite3 end error("unknown Kindle model "..kindle_devcode) diff --git a/platform/kindle/libkohelper.sh b/platform/kindle/libkohelper.sh index 8604d3fa8..5ce404b60 100644 --- a/platform/kindle/libkohelper.sh +++ b/platform/kindle/libkohelper.sh @@ -15,6 +15,13 @@ fi # We need to get the proper constants for our model... kmodel="$(cut -c3-4 /proc/usid)" case "${kmodel}" in + "13" | "54" | "2A" | "4F" | "52" | "53" ) + # Voyage... + SCREEN_X_RES=1088 # NOTE: Yes, 1088, not 1072 or 1080... + SCREEN_Y_RES=1448 + EIPS_X_RES=16 + EIPS_Y_RES=24 # Manually mesured, should be accurate. + ;; "24" | "1B" | "1D" | "1F" | "1C" | "20" | "D4" | "5A" | "D5" | "D6" | "D7" | "D8" | "F2" | "17" | "60" | "F4" | "F9" | "62" | "61" | "5F" ) # PaperWhite... SCREEN_X_RES=768 # NOTE: Yes, 768, not 758... @@ -22,20 +29,20 @@ case "${kmodel}" in EIPS_X_RES=16 EIPS_Y_RES=24 # Manually mesured, should be accurate. ;; - "13" | "54" | "2A" | "4F" | "52" | "53" ) - # Kindle Voyage - SCREEN_X_RES=1088 # NOTE: Yes, 1088, not 1072 or 1080... - SCREEN_Y_RES=1448 - EIPS_X_RES=16 - EIPS_Y_RES=24 # Manually mesured, should be accurate. - ;; "C6" | "DD" ) # KT2... - SCREEN_X_RES=608 # NOTE: Might actually be 600... + SCREEN_X_RES=608 SCREEN_Y_RES=800 EIPS_X_RES=16 EIPS_Y_RES=24 ;; + "0F" | "11" | "10" | "12" ) + # Touch + SCREEN_X_RES=600 # _v_width @ upstart/functions + SCREEN_Y_RES=800 # _v_height @ upstart/functions + EIPS_X_RES=12 # from f_puts @ upstart/functions + EIPS_Y_RES=20 # from f_puts @ upstart/functions + ;; * ) # Handle legacy devices... if [ -f "/etc/rc.d/functions" ] && grep "EIPS" "/etc/rc.d/functions" > /dev/null 2>&1 ; then @@ -43,11 +50,24 @@ case "${kmodel}" in #. /etc/rc.d/functions echo "foo" >/dev/null else - # Touch - SCREEN_X_RES=600 # _v_width @ upstart/functions - SCREEN_Y_RES=800 # _v_height @ upstart/functions - EIPS_X_RES=12 # from f_puts @ upstart/functions - EIPS_Y_RES=20 # from f_puts @ upstart/functions + # Try the new device ID scheme... + kmodel="$(cut -c4-6 /proc/usid)" + case "${kmodel}" in + "0G1" | "0G2" | "0G4" | "0G5" | "0G6" | "0G7" ) + # PW3... NOTE: Hopefully matches the KV... + SCREEN_X_RES=1088 + SCREEN_Y_RES=1448 + EIPS_X_RES=16 + EIPS_Y_RES=24 + ;; + * ) + # Fallback... We shouldn't ever hit that. + SCREEN_X_RES=600 + SCREEN_Y_RES=800 + EIPS_X_RES=12 + EIPS_Y_RES=20 + ;; + esac fi ;; esac