first commit
This commit is contained in:
122
dash/staging/device/dashboard/dash.sh
Executable file
122
dash/staging/device/dashboard/dash.sh
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
DASH_PNG="$DIR/dash.png"
|
||||
FETCH_DASHBOARD_CMD="$DIR/local/fetch-dashboard.sh"
|
||||
LOW_BATTERY_CMD="$DIR/local/low-battery.sh"
|
||||
|
||||
REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"2,32 8-17 * * MON-FRI"}
|
||||
FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
SLEEP_SCREEN_INTERVAL=${SLEEP_SCREEN_INTERVAL:-3600}
|
||||
RTC=/sys/devices/platform/mxc_rtc.0/wakeup_enable
|
||||
|
||||
LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
LOW_BATTERY_THRESHOLD_PERCENT=${LOW_BATTERY_THRESHOLD_PERCENT:-10}
|
||||
|
||||
num_refresh=0
|
||||
|
||||
init() {
|
||||
if [ -z "$TIMEZONE" ] || [ -z "$REFRESH_SCHEDULE" ]; then
|
||||
echo "Missing required configuration."
|
||||
echo "Timezone: ${TIMEZONE:-(not set)}."
|
||||
echo "Schedule: ${REFRESH_SCHEDULE:-(not set)}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Starting dashboard with $REFRESH_SCHEDULE refresh..."
|
||||
|
||||
/etc/init.d/framework stop
|
||||
initctl stop webreader >/dev/null 2>&1
|
||||
echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
||||
lipc-set-prop com.lab126.powerd preventScreenSaver 1
|
||||
}
|
||||
|
||||
prepare_sleep() {
|
||||
echo "Preparing sleep"
|
||||
|
||||
/usr/sbin/eips -f -g "$DIR/sleeping.png"
|
||||
|
||||
# Give screen time to refresh
|
||||
sleep 2
|
||||
|
||||
# Ensure a full screen refresh is triggered after wake from sleep
|
||||
num_refresh=$FULL_DISPLAY_REFRESH_RATE
|
||||
}
|
||||
|
||||
refresh_dashboard() {
|
||||
echo "Refreshing dashboard"
|
||||
"$DIR/wait-for-wifi.sh" "$WIFI_TEST_IP"
|
||||
|
||||
"$FETCH_DASHBOARD_CMD" "$DASH_PNG"
|
||||
fetch_status=$?
|
||||
|
||||
if [ "$fetch_status" -ne 0 ]; then
|
||||
echo "Not updating screen, fetch-dashboard returned $fetch_status"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$num_refresh" -eq "$FULL_DISPLAY_REFRESH_RATE" ]; then
|
||||
num_refresh=0
|
||||
|
||||
# trigger a full refresh once in every 4 refreshes, to keep the screen clean
|
||||
echo "Full screen refresh"
|
||||
/usr/sbin/eips -f -g "$DASH_PNG"
|
||||
else
|
||||
echo "Partial screen refresh"
|
||||
/usr/sbin/eips -g "$DASH_PNG"
|
||||
fi
|
||||
|
||||
num_refresh=$((num_refresh + 1))
|
||||
}
|
||||
|
||||
log_battery_stats() {
|
||||
battery_level=$(gasgauge-info -c)
|
||||
echo "$(date) Battery level: $battery_level."
|
||||
|
||||
if [ "$LOW_BATTERY_REPORTING" = true ]; then
|
||||
battery_level_numeric=${battery_level%?}
|
||||
if [ "$battery_level_numeric" -le "$LOW_BATTERY_THRESHOLD_PERCENT" ]; then
|
||||
"$LOW_BATTERY_CMD" "$battery_level_numeric"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
rtc_sleep() {
|
||||
duration=$1
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
sleep "$duration"
|
||||
else
|
||||
# shellcheck disable=SC2039
|
||||
[ "$(cat "$RTC")" -eq 0 ] && echo -n "$duration" >"$RTC"
|
||||
echo "mem" >/sys/power/state
|
||||
fi
|
||||
}
|
||||
|
||||
main_loop() {
|
||||
while true; do
|
||||
log_battery_stats
|
||||
|
||||
next_wakeup_secs=$("$DIR/next-wakeup" --schedule="$REFRESH_SCHEDULE" --timezone="$TIMEZONE")
|
||||
|
||||
if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ]; then
|
||||
action="sleep"
|
||||
prepare_sleep
|
||||
else
|
||||
action="suspend"
|
||||
refresh_dashboard
|
||||
fi
|
||||
|
||||
# take a bit of time before going to sleep, so this process can be aborted
|
||||
sleep 10
|
||||
|
||||
echo "Going to $action, next wakeup in ${next_wakeup_secs}s"
|
||||
|
||||
rtc_sleep "$next_wakeup_secs"
|
||||
done
|
||||
}
|
||||
|
||||
init
|
||||
main_loop
|
||||
23
dash/staging/device/dashboard/local/env.sh
Normal file
23
dash/staging/device/dashboard/local/env.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Export environment variables here
|
||||
export WIFI_TEST_IP=${WIFI_TEST_IP:-1.1.1.1}
|
||||
# 测试配置:全天每分钟刷新一次,便于验证图片拉取与屏幕刷新是否正常。
|
||||
export REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"* * * * *"}
|
||||
export TIMEZONE=${TIMEZONE:-"Asia/Shanghai"}
|
||||
|
||||
# By default, partial screen updates are used to update the screen,
|
||||
# to prevent the screen from flashing. After a few partial updates,
|
||||
# the screen will start to look a bit distorted (due to e-ink ghosting).
|
||||
# 测试阶段强制每次都做一次全刷,避免首页残影和局部刷新的旧内容干扰验证。
|
||||
# 等图片尺寸与刷新逻辑确认无误后,再改回 4 之类的值以节省功耗。
|
||||
export FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
|
||||
# When the time until the next wakeup is greater or equal to this number,
|
||||
# the dashboard will not be refreshed anymore, but instead show a
|
||||
# 'kindle is sleeping' screen. This can be useful if your schedule only runs
|
||||
# during the day, for example.
|
||||
export SLEEP_SCREEN_INTERVAL=3600
|
||||
|
||||
export LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
export LOW_BATTERY_THRESHOLD_PERCENT=10
|
||||
4
dash/staging/device/dashboard/local/fetch-dashboard.sh
Executable file
4
dash/staging/device/dashboard/local/fetch-dashboard.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env sh
|
||||
# Fetch a new dashboard image, make sure to output it to "$1".
|
||||
# For example:
|
||||
"$(dirname "$0")/../xh" -d -q -o "$1" get https://raw.githubusercontent.com/pascalw/kindle-dash/master/example/example.png
|
||||
17
dash/staging/device/dashboard/local/low-battery.sh
Normal file
17
dash/staging/device/dashboard/local/low-battery.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env sh
|
||||
battery_level_percentage=$1
|
||||
last_battery_report_state="$(dirname "$0")/state/last_battery_report"
|
||||
|
||||
previous_report_timestamp=$(cat "$last_battery_report_state" 2>/dev/null || echo '-1')
|
||||
now=$(date +%s)
|
||||
|
||||
# Implement desired logic here. The example below for example only reports low
|
||||
# battery every 24 hours.
|
||||
|
||||
if [ "$previous_report_timestamp" -eq -1 ] ||
|
||||
[ $((now - previous_report_timestamp)) -gt 86400 ]; then
|
||||
# Replace this with for example an HTTP call via curl, or xh
|
||||
echo "Reporting low battery: $battery_level_percentage%"
|
||||
|
||||
echo "$now" >"$last_battery_report_state"
|
||||
fi
|
||||
BIN
dash/staging/device/dashboard/next-wakeup
Executable file
BIN
dash/staging/device/dashboard/next-wakeup
Executable file
Binary file not shown.
BIN
dash/staging/device/dashboard/sleeping.png
Normal file
BIN
dash/staging/device/dashboard/sleeping.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
18
dash/staging/device/dashboard/start.sh
Executable file
18
dash/staging/device/dashboard/start.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
ENV_FILE="$DIR/local/env.sh"
|
||||
LOG_FILE="$DIR/logs/dash.log"
|
||||
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$ENV_FILE" ] && . "$ENV_FILE"
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
"$DIR/dash.sh"
|
||||
else
|
||||
"$DIR/dash.sh" >>"$LOG_FILE" 2>&1 &
|
||||
fi
|
||||
2
dash/staging/device/dashboard/stop.sh
Executable file
2
dash/staging/device/dashboard/stop.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env sh
|
||||
pkill -f dash.sh
|
||||
26
dash/staging/device/dashboard/wait-for-wifi.sh
Executable file
26
dash/staging/device/dashboard/wait-for-wifi.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env sh
|
||||
test_ip=$1
|
||||
|
||||
if [ -z "$test_ip" ]; then
|
||||
echo "No test ip specified"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wait_for_wifi() {
|
||||
max_retry=30
|
||||
counter=0
|
||||
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
|
||||
# shellcheck disable=SC2181
|
||||
while [ $? -ne 0 ]; do
|
||||
[ $counter -eq $max_retry ] && echo "Couldn't connect to Wi-Fi" && exit 1
|
||||
counter=$((counter + 1))
|
||||
|
||||
sleep 1
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
done
|
||||
}
|
||||
|
||||
wait_for_wifi
|
||||
echo "Wi-Fi connected"
|
||||
BIN
dash/staging/device/dashboard/xh
Executable file
BIN
dash/staging/device/dashboard/xh
Executable file
Binary file not shown.
10
dash/staging/device/extensions/kindle-dash/config.xml
Normal file
10
dash/staging/device/extensions/kindle-dash/config.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extension>
|
||||
<information>
|
||||
<name>Kindle dashboard</name>
|
||||
<id>pascalw-kindle-dash</id>
|
||||
</information>
|
||||
<menus>
|
||||
<menu type="json" dynamic="true">menu.json</menu>
|
||||
</menus>
|
||||
</extension>
|
||||
5
dash/staging/device/extensions/kindle-dash/menu.json
Normal file
5
dash/staging/device/extensions/kindle-dash/menu.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"items": [
|
||||
{"name": "Kindle Dashboard", "action": "/mnt/us/dashboard/start.sh"}
|
||||
]
|
||||
}
|
||||
122
dash/staging/kindle-dash-release/dash.sh
Executable file
122
dash/staging/kindle-dash-release/dash.sh
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
DASH_PNG="$DIR/dash.png"
|
||||
FETCH_DASHBOARD_CMD="$DIR/local/fetch-dashboard.sh"
|
||||
LOW_BATTERY_CMD="$DIR/local/low-battery.sh"
|
||||
|
||||
REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"2,32 8-17 * * MON-FRI"}
|
||||
FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
SLEEP_SCREEN_INTERVAL=${SLEEP_SCREEN_INTERVAL:-3600}
|
||||
RTC=/sys/devices/platform/mxc_rtc.0/wakeup_enable
|
||||
|
||||
LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
LOW_BATTERY_THRESHOLD_PERCENT=${LOW_BATTERY_THRESHOLD_PERCENT:-10}
|
||||
|
||||
num_refresh=0
|
||||
|
||||
init() {
|
||||
if [ -z "$TIMEZONE" ] || [ -z "$REFRESH_SCHEDULE" ]; then
|
||||
echo "Missing required configuration."
|
||||
echo "Timezone: ${TIMEZONE:-(not set)}."
|
||||
echo "Schedule: ${REFRESH_SCHEDULE:-(not set)}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Starting dashboard with $REFRESH_SCHEDULE refresh..."
|
||||
|
||||
/etc/init.d/framework stop
|
||||
initctl stop webreader >/dev/null 2>&1
|
||||
echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
||||
lipc-set-prop com.lab126.powerd preventScreenSaver 1
|
||||
}
|
||||
|
||||
prepare_sleep() {
|
||||
echo "Preparing sleep"
|
||||
|
||||
/usr/sbin/eips -f -g "$DIR/sleeping.png"
|
||||
|
||||
# Give screen time to refresh
|
||||
sleep 2
|
||||
|
||||
# Ensure a full screen refresh is triggered after wake from sleep
|
||||
num_refresh=$FULL_DISPLAY_REFRESH_RATE
|
||||
}
|
||||
|
||||
refresh_dashboard() {
|
||||
echo "Refreshing dashboard"
|
||||
"$DIR/wait-for-wifi.sh" "$WIFI_TEST_IP"
|
||||
|
||||
"$FETCH_DASHBOARD_CMD" "$DASH_PNG"
|
||||
fetch_status=$?
|
||||
|
||||
if [ "$fetch_status" -ne 0 ]; then
|
||||
echo "Not updating screen, fetch-dashboard returned $fetch_status"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$num_refresh" -eq "$FULL_DISPLAY_REFRESH_RATE" ]; then
|
||||
num_refresh=0
|
||||
|
||||
# trigger a full refresh once in every 4 refreshes, to keep the screen clean
|
||||
echo "Full screen refresh"
|
||||
/usr/sbin/eips -f -g "$DASH_PNG"
|
||||
else
|
||||
echo "Partial screen refresh"
|
||||
/usr/sbin/eips -g "$DASH_PNG"
|
||||
fi
|
||||
|
||||
num_refresh=$((num_refresh + 1))
|
||||
}
|
||||
|
||||
log_battery_stats() {
|
||||
battery_level=$(gasgauge-info -c)
|
||||
echo "$(date) Battery level: $battery_level."
|
||||
|
||||
if [ "$LOW_BATTERY_REPORTING" = true ]; then
|
||||
battery_level_numeric=${battery_level%?}
|
||||
if [ "$battery_level_numeric" -le "$LOW_BATTERY_THRESHOLD_PERCENT" ]; then
|
||||
"$LOW_BATTERY_CMD" "$battery_level_numeric"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
rtc_sleep() {
|
||||
duration=$1
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
sleep "$duration"
|
||||
else
|
||||
# shellcheck disable=SC2039
|
||||
[ "$(cat "$RTC")" -eq 0 ] && echo -n "$duration" >"$RTC"
|
||||
echo "mem" >/sys/power/state
|
||||
fi
|
||||
}
|
||||
|
||||
main_loop() {
|
||||
while true; do
|
||||
log_battery_stats
|
||||
|
||||
next_wakeup_secs=$("$DIR/next-wakeup" --schedule="$REFRESH_SCHEDULE" --timezone="$TIMEZONE")
|
||||
|
||||
if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ]; then
|
||||
action="sleep"
|
||||
prepare_sleep
|
||||
else
|
||||
action="suspend"
|
||||
refresh_dashboard
|
||||
fi
|
||||
|
||||
# take a bit of time before going to sleep, so this process can be aborted
|
||||
sleep 10
|
||||
|
||||
echo "Going to $action, next wakeup in ${next_wakeup_secs}s"
|
||||
|
||||
rtc_sleep "$next_wakeup_secs"
|
||||
done
|
||||
}
|
||||
|
||||
init
|
||||
main_loop
|
||||
23
dash/staging/kindle-dash-release/local/env.sh
Normal file
23
dash/staging/kindle-dash-release/local/env.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Export environment variables here
|
||||
export WIFI_TEST_IP=${WIFI_TEST_IP:-1.1.1.1}
|
||||
# 测试配置:全天每分钟刷新一次,便于验证图片拉取与屏幕刷新是否正常。
|
||||
export REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"* * * * *"}
|
||||
export TIMEZONE=${TIMEZONE:-"Asia/Shanghai"}
|
||||
|
||||
# By default, partial screen updates are used to update the screen,
|
||||
# to prevent the screen from flashing. After a few partial updates,
|
||||
# the screen will start to look a bit distorted (due to e-ink ghosting).
|
||||
# 测试阶段强制每次都做一次全刷,避免首页残影和局部刷新的旧内容干扰验证。
|
||||
# 等图片尺寸与刷新逻辑确认无误后,再改回 4 之类的值以节省功耗。
|
||||
export FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
|
||||
# When the time until the next wakeup is greater or equal to this number,
|
||||
# the dashboard will not be refreshed anymore, but instead show a
|
||||
# 'kindle is sleeping' screen. This can be useful if your schedule only runs
|
||||
# during the day, for example.
|
||||
export SLEEP_SCREEN_INTERVAL=3600
|
||||
|
||||
export LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
export LOW_BATTERY_THRESHOLD_PERCENT=10
|
||||
4
dash/staging/kindle-dash-release/local/fetch-dashboard.sh
Executable file
4
dash/staging/kindle-dash-release/local/fetch-dashboard.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env sh
|
||||
# Fetch a new dashboard image, make sure to output it to "$1".
|
||||
# For example:
|
||||
"$(dirname "$0")/../xh" -d -q -o "$1" get https://raw.githubusercontent.com/pascalw/kindle-dash/master/example/example.png
|
||||
17
dash/staging/kindle-dash-release/local/low-battery.sh
Normal file
17
dash/staging/kindle-dash-release/local/low-battery.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env sh
|
||||
battery_level_percentage=$1
|
||||
last_battery_report_state="$(dirname "$0")/state/last_battery_report"
|
||||
|
||||
previous_report_timestamp=$(cat "$last_battery_report_state" 2>/dev/null || echo '-1')
|
||||
now=$(date +%s)
|
||||
|
||||
# Implement desired logic here. The example below for example only reports low
|
||||
# battery every 24 hours.
|
||||
|
||||
if [ "$previous_report_timestamp" -eq -1 ] ||
|
||||
[ $((now - previous_report_timestamp)) -gt 86400 ]; then
|
||||
# Replace this with for example an HTTP call via curl, or xh
|
||||
echo "Reporting low battery: $battery_level_percentage%"
|
||||
|
||||
echo "$now" >"$last_battery_report_state"
|
||||
fi
|
||||
BIN
dash/staging/kindle-dash-release/next-wakeup
Executable file
BIN
dash/staging/kindle-dash-release/next-wakeup
Executable file
Binary file not shown.
BIN
dash/staging/kindle-dash-release/sleeping.png
Normal file
BIN
dash/staging/kindle-dash-release/sleeping.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
18
dash/staging/kindle-dash-release/start.sh
Executable file
18
dash/staging/kindle-dash-release/start.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
ENV_FILE="$DIR/local/env.sh"
|
||||
LOG_FILE="$DIR/logs/dash.log"
|
||||
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$ENV_FILE" ] && . "$ENV_FILE"
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
"$DIR/dash.sh"
|
||||
else
|
||||
"$DIR/dash.sh" >>"$LOG_FILE" 2>&1 &
|
||||
fi
|
||||
2
dash/staging/kindle-dash-release/stop.sh
Executable file
2
dash/staging/kindle-dash-release/stop.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env sh
|
||||
pkill -f dash.sh
|
||||
26
dash/staging/kindle-dash-release/wait-for-wifi.sh
Executable file
26
dash/staging/kindle-dash-release/wait-for-wifi.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env sh
|
||||
test_ip=$1
|
||||
|
||||
if [ -z "$test_ip" ]; then
|
||||
echo "No test ip specified"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wait_for_wifi() {
|
||||
max_retry=30
|
||||
counter=0
|
||||
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
|
||||
# shellcheck disable=SC2181
|
||||
while [ $? -ne 0 ]; do
|
||||
[ $counter -eq $max_retry ] && echo "Couldn't connect to Wi-Fi" && exit 1
|
||||
counter=$((counter + 1))
|
||||
|
||||
sleep 1
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
done
|
||||
}
|
||||
|
||||
wait_for_wifi
|
||||
echo "Wi-Fi connected"
|
||||
BIN
dash/staging/kindle-dash-release/xh
Executable file
BIN
dash/staging/kindle-dash-release/xh
Executable file
Binary file not shown.
1
dash/staging/languagebreak/DEVICES.txt
Normal file
1
dash/staging/languagebreak/DEVICES.txt
Normal file
@@ -0,0 +1 @@
|
||||
All the things!
|
||||
135
dash/staging/languagebreak/LanguageBreak/jb
Executable file
135
dash/staging/languagebreak/LanguageBreak/jb
Executable file
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Quick'n dirty JB key install script for LanguageBarrier.
|
||||
# Based on the "emergency" script from the Hotfix/Bridge restoration package.
|
||||
#
|
||||
# $Id: jb.sh 18327 2021-03-24 18:08:54Z NiLuJe $
|
||||
#
|
||||
##
|
||||
|
||||
# Helper functions, in case the bridge was still kicking.
|
||||
touch /mnt/us/LanguageBreakRan
|
||||
make_mutable() {
|
||||
local my_path="${1}"
|
||||
# NOTE: Can't do that on symlinks, hence the hoop-jumping...
|
||||
if [ -d "${my_path}" ] ; then
|
||||
find "${my_path}" -type d -exec chattr -i '{}' \;
|
||||
find "${my_path}" -type f -exec chattr -i '{}' \;
|
||||
elif [ -f "${my_path}" ] ; then
|
||||
chattr -i "${my_path}"
|
||||
fi
|
||||
}
|
||||
|
||||
# We actually do need that one
|
||||
make_immutable() {
|
||||
local my_path="${1}"
|
||||
if [ -d "${my_path}" ] ; then
|
||||
find "${my_path}" -type d -exec chattr +i '{}' \;
|
||||
find "${my_path}" -type f -exec chattr +i '{}' \;
|
||||
elif [ -f "${my_path}" ] ; then
|
||||
chattr +i "${my_path}"
|
||||
fi
|
||||
}
|
||||
|
||||
POS=1
|
||||
LANGBREAK_LOG="/mnt/us/languagebreak_log"
|
||||
UKSSQSH="/etc/uks.sqsh"
|
||||
jb_log() {
|
||||
f_log "I" "languagebreak" "${2}" "" "${1}"
|
||||
echo "${1}" >> "${LANGBREAK_LOG}"
|
||||
eips 1 "${POS}" "${1}"
|
||||
POS=$((POS+1))
|
||||
sleep 0.2
|
||||
}
|
||||
|
||||
# For logging
|
||||
[ -f "/etc/upstart/functions" ] && source "/etc/upstart/functions"
|
||||
rm -f "${LANGBREAK_LOG}"
|
||||
touch "${LANGBREAK_LOG}"
|
||||
jb_log "LanguageBreak by Marek" "info"
|
||||
jb_log "It was the chinese all along." "info"
|
||||
POS=$((POS+1))
|
||||
jb_log "big thanks to bluebotlabs, GeorgeYellow and Niluje" "info"
|
||||
jb_log "Loaded logging functions" "main"
|
||||
jb_log "I am $(whoami) - $(id)"
|
||||
# Duh'
|
||||
mntroot rw
|
||||
|
||||
# JB first
|
||||
if [ -f $UKSSQSH ] ; then
|
||||
jb_log "${UKSSQSH} - exists - replacing whole sqshfs"
|
||||
make_mutable "${UKSSQSH}"
|
||||
LOOP=$(mount | grep ' on /etc/uks ' | awk '{print $1}')
|
||||
jb_log "Got uks loop device at $LOOP"
|
||||
umount $LOOP
|
||||
losetup -d $LOOP
|
||||
cp /mnt/us/patchedUks.sqsh ${UKSSQSH}
|
||||
mount -o loop=$LOOP,norelatime,nodiratime,noatime -t squashfs ${UKSSQSH} /etc/uks
|
||||
RET=$?
|
||||
if [ $RET -eq 0 ] ; then
|
||||
jb_log "Added developer key :)" "jb"
|
||||
else
|
||||
jb_log "Unable to add developer key (${RET})" "jb"
|
||||
fi
|
||||
POS=$((POS+1))
|
||||
jb_log "$(ls /etc/uks)"
|
||||
|
||||
chown root:root "${UKSSQSH}"
|
||||
chmod 0644 "${UKSSQSH}"
|
||||
make_immutable "${UKSSQSH}"
|
||||
jb_log "Updated permissions for new squashfs keystore" "jb"
|
||||
else
|
||||
jb_log "${UKSSQSH} - doesn't exist - using legacy method"
|
||||
|
||||
if [ -f "/etc/uks/pubdevkey01.pem" ] ; then
|
||||
make_mutable "/etc/uks/pubdevkey01.pem"
|
||||
rm -f "/etc/uks/pubdevkey01.pem"
|
||||
wt_log "Removed existing developer key" "jb"
|
||||
else
|
||||
wt_log "Didn't find existing developer key" "jb"
|
||||
fi
|
||||
cat > "/etc/uks/pubdevkey01.pem" << EOF
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJn1jWU+xxVv/eRKfCPR9e47lP
|
||||
WN2rH33z9QbfnqmCxBRLP6mMjGy6APyycQXg3nPi5fcb75alZo+Oh012HpMe9Lnp
|
||||
eEgloIdm1E4LOsyrz4kttQtGRlzCErmBGt6+cAVEV86y2phOJ3mLk0Ek9UQXbIUf
|
||||
rvyJnS2MKLG2cczjlQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
EOF
|
||||
RET="$?"
|
||||
|
||||
if [ -f "/etc/uks/pubdevkey01.pem" ] ; then
|
||||
wt_log "Created developer key (${RET})" "jb"
|
||||
else
|
||||
wt_log "Unable to create developer key (${RET})" "jb"
|
||||
fi
|
||||
|
||||
chown root:root "/etc/uks/pubdevkey01.pem"
|
||||
chmod 0644 "/etc/uks/pubdevkey01.pem"
|
||||
make_immutable "/etc/uks/pubdevkey01.pem"
|
||||
|
||||
wt_log "Updated permissions for developer key" "jb"
|
||||
fi
|
||||
|
||||
|
||||
# Make sure we can use UYK for OTA packages on FW >= 5.12.x
|
||||
make_mutable "/PRE_GM_DEBUGGING_FEATURES_ENABLED__REMOVE_AT_GMC"
|
||||
rm -rf "/PRE_GM_DEBUGGING_FEATURES_ENABLED__REMOVE_AT_GMC"
|
||||
touch "/PRE_GM_DEBUGGING_FEATURES_ENABLED__REMOVE_AT_GMC"
|
||||
make_immutable "/PRE_GM_DEBUGGING_FEATURES_ENABLED__REMOVE_AT_GMC"
|
||||
jb_log "Enabled developer flag" "br"
|
||||
|
||||
make_mutable "/MNTUS_EXEC"
|
||||
rm -rf "/MNTUS_EXEC"
|
||||
touch "/MNTUS_EXEC"
|
||||
make_immutable "/MNTUS_EXEC"
|
||||
jb_log "Enabled mntus exec flag" "br"
|
||||
|
||||
# Bye
|
||||
sync
|
||||
mntroot ro
|
||||
|
||||
# Finally, change language back to english
|
||||
lipc-send-event com.lab126.blanket.langpicker changeLocale -s "en-US"
|
||||
|
||||
jb_log "Finished installing jailbreak!" "main"
|
||||
BIN
dash/staging/languagebreak/LanguageBreak/patchedUks.sqsh
Normal file
BIN
dash/staging/languagebreak/LanguageBreak/patchedUks.sqsh
Normal file
Binary file not shown.
123
dash/staging/languagebreak/README.MD
Normal file
123
dash/staging/languagebreak/README.MD
Normal file
@@ -0,0 +1,123 @@
|
||||
# **LanguageBreak**
|
||||
Jailbreak for any kindle running FW 5.16.2.1.1 or **LOWER**
|
||||
|
||||
[](https://ko-fi.com/E1E1QLG4D)
|
||||
|
||||
**The exploit works best around version 5.16.2, so if you are on lower firmware you should consider updating**
|
||||
|
||||
Do not update past 5.16.2.1.1 even after jailbreak, there have been big changes since and **everything** is broken, only thing you can do on these versions is downgrade (if your jailbreak survived).
|
||||
|
||||
Big thanks to Bluebotlabs for all the help along the way and GeorgeYellow and bulltricks for bringing the vulnerability to light
|
||||
|
||||
The latest tarball can always be found [here]("https://github.com/notmarek/LanguageBreak/releases/latest")
|
||||
|
||||
##
|
||||
Make sure to remove any kind of password lock - if you forget to this and are stuck on the password screen enter 111222777 and the kindle will factory reset.
|
||||
|
||||
|
||||
Your files **will** be deleted make sure to make a backup.
|
||||
|
||||
# Installation
|
||||
|
||||
## Before jailbreak
|
||||
|
||||
1. Make sure to read the entirety of the instructions **before** proceeding.
|
||||
2. Enable airplane mode
|
||||
3. Make sure that there are no stray .bin files or update.bin.tmp.partial files on the kindle
|
||||
4. Repeat number 3 troughout the proccess
|
||||
|
||||
## Jailbreak
|
||||
|
||||
1. Type ;enter_demo in the Kindle search bar
|
||||
2. Reboot the device
|
||||
3. Once in demo mode, skip setting up wifi and enter random values for store registration
|
||||
4. Skip searching for a demo payload
|
||||
5. Select the "standard" demo type
|
||||
6. Press "Done" at the prompt to sideload content.
|
||||
7. Once the demo is setup, do the "secret gesture" (double finger tap on bottom right of screen then swipe left)
|
||||
8. Enter the demo configuration menu by typing ;demo into the search bar
|
||||
9. Select the "Sideload Content" option
|
||||
10. Copy the contents of the LanguageBreak folder to the Kindle - merging and replacing all files
|
||||
11. Unplug your kindle and go back to the demo menu (viz. step 8)
|
||||
12. Select the "Resell Device" option press Yes/Resell
|
||||
13. Now wait for the press power button to start
|
||||
14. The second it appears plug your kindle back into your computer and copy the contents of the LanguageBreak folder into it once again, overwrite files then safely eject
|
||||
15. Hold the power button as instructed on screen
|
||||
16. A language selection menu should appear in a few seconds
|
||||
17. Choose Chinese (The one above the odd Pseudot language, and/or below Japanese)
|
||||
18. Your kindle should reboot and you should see some log message on the screen
|
||||
|
||||
## After jailbreak
|
||||
|
||||
1. After the device has rebooted, type ;uzb into the search bar
|
||||
2. Connect the device to a PC and copy `Update_hotfix_languagebreak-{language you want to end up with}.bin` to the root of the Kindle storage
|
||||
3. Eject the device and either enter ;dsts or swipe down and select the settings icon to enter the device settings menu
|
||||
4. Select `Update Your Kindle` to install the hotfix
|
||||
5. This will take your device out of demo mode and clean up unneeded jailbreak files.
|
||||
6. You will now probably be in `managed mode`
|
||||
|
||||
## Exiting managed/demo mode after jailbreak
|
||||
|
||||
### Unregistered kindle
|
||||
1. Enter `;demo` into the search bar
|
||||
2. Press the right button
|
||||
3. The device will say that its "entering demo", but will actually reset into normal mode in English
|
||||
4. After this check if you have an mkk folder on your kindle - if it's missing reinstall then hotfix and have fun :)
|
||||
|
||||
### Registered kindle
|
||||
1. Enter `;enter_demo` into the search bar
|
||||
2. Reboot your device
|
||||
3. The device will be in full demo mode so do the setup without wifi and with random values
|
||||
4. Do the secret gesture to get into the kindle UI
|
||||
5. Enter `;demo` into the search bar
|
||||
6. Choose `Resell device` and press `Resell/Yes`
|
||||
7. The device will actually reset into normal mode in English
|
||||
4. After this check if you have an mkk folder on your kindle - if it's missing reinstall then hotfix and have fun :)
|
||||
|
||||
|
||||
# FAQ
|
||||
```
|
||||
Q: How do i check that it worked?
|
||||
A (before installing hotfix): Install hotfix, if you can do that then it worked.
|
||||
A (after installing hotfix): Type `;log` into the search bar, this should show some text at the top of the screen.
|
||||
|
||||
Q: Where are the hotfix files?
|
||||
A: The structure of the tarball is as follows
|
||||
LanguageBreak.tar.gz
|
||||
|-- LanguageBreak
|
||||
| |-- documents
|
||||
| | |-- dictionaries
|
||||
| | | |-- a; export SLASH=$(awk 'BEGIN {print substr(ARGV[1], 0, 1)}' ${PWD}); sh ${SLASH}mnt${SLASH}us${SLASH}jb
|
||||
| | | |-- amisane
|
||||
| |-- DONT_CHECK_BATTERY
|
||||
| |-- jb
|
||||
| |-- patchedUks
|
||||
| |-- .demo
|
||||
| | |-- boot.flag
|
||||
|-- Update_hotfix_languagebreak-*.bin
|
||||
```
|
||||
|
||||
# Troubleshooting
|
||||
Can't seem to get it to work?
|
||||
|
||||
The exploit works best around version 5.16.2, so if you are on lower firmware you should consider updating
|
||||
|
||||
Download the update file of the kindle version you are currently on from amazon install it and try again.
|
||||
|
||||
```
|
||||
PW5: https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_paperwhite_11th_5.XX.X.bin
|
||||
PW4: https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_paperwhite_v2_5.XX.X.bin
|
||||
PW3: https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_paperwhite_5.XX.X.bin
|
||||
Kindle 11th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_11th_5.XX.X.bin
|
||||
Kindle 10th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_10th_5.XX.X.bin
|
||||
Kindle 8th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_8th_5.XX.X.bin
|
||||
Scribe: https://s3.amazonaws.com/firmwaredownloads/update_kindle_scribe_5.XX.X.bin
|
||||
Oasis 10th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_oasis_v2_5.XX.X.bin
|
||||
Oasis 9th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_oasis_5.XX.X.bin
|
||||
Oasis 8th Gen: https://s3.amazonaws.com/firmwaredownloads/update_kindle_oasis_5.XX.X.bin
|
||||
```
|
||||
|
||||
So version 5.16.2.1.1 for PW4 would be [https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_paperwhite_v2_5.16.2.1.1.bin](]https://s3.amazonaws.com/firmwaredownloads/update_kindle_all_new_paperwhite_v2_5.16.2.1.1.bin)
|
||||
|
||||
|
||||
[Consider buying me a coffee :)]("https://ko-fi.com/notmarek")
|
||||
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-de-DE.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-de-DE.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-en-GB.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-en-GB.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-en-US.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-en-US.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-AR.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-AR.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-CL.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-CL.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-CO.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-CO.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-ES.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-ES.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-MX.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-es-MX.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-fr-CA.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-fr-CA.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-fr-FR.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-fr-FR.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-it-IT.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-it-IT.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-ja-JP.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-ja-JP.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-nl-NL.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-nl-NL.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-pt-BR.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-pt-BR.bin
Normal file
Binary file not shown.
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-ru-RU.bin
Normal file
BIN
dash/staging/languagebreak/Update_hotfix_languagebreak-ru-RU.bin
Normal file
Binary file not shown.
Binary file not shown.
3259
dash/staging/mrpi/ChangeLog.txt
Normal file
3259
dash/staging/mrpi/ChangeLog.txt
Normal file
File diff suppressed because it is too large
Load Diff
1
dash/staging/mrpi/VERSION
Normal file
1
dash/staging/mrpi/VERSION
Normal file
@@ -0,0 +1 @@
|
||||
1.7.N @ r19303 on 2023-Nov-06 @ 18:18 - Patched for FW >= 5.16.3
|
||||
27
dash/staging/mrpi/extensions/MRInstaller/CREDITS
Normal file
27
dash/staging/mrpi/extensions/MRInstaller/CREDITS
Normal file
@@ -0,0 +1,27 @@
|
||||
kindletool: KindleTool, Copyright (C) 2011-2015 Yifan Lu, licensed under the GNU General Public License version 3+ (http://www.gnu.org/licenses/gpl.html).
|
||||
(https://github.com/NiLuJe/KindleTool/)
|
||||
|
||||
|
|
||||
|-> libarchive, Copyright (C) Tim Kientzle, licensed under the New BSD License (http://www.opensource.org/licenses/bsd-license.php)
|
||||
| (http://libarchive.github.com/)
|
||||
|
|
||||
|-> GMP, GNU MP Library, Copyright 1991-2013 Free Software Foundation, Inc.,
|
||||
| licensed under the GNU Lesser General Public License version 3+ (http://www.gnu.org/licenses/lgpl.html).
|
||||
| (http://gmplib.org/)
|
||||
|
|
||||
`-> nettle, Copyright (C) 2001-2013 Niels Möller,
|
||||
licensed under the GNU Lesser General Public License version 2.1+ (https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html).
|
||||
(http://www.lysator.liu.se/~nisse/nettle)
|
||||
|
||||
libz: zlib, Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler,
|
||||
Licensed under the zlib license (http://zlib.net/zlib_license.html)
|
||||
(http://zlib.net/)
|
||||
|
||||
fbink: FBInk (FrameBuffer eInker), Copyright (C) 2018-2019 NiLuJe <ninuje@gmail.com>,
|
||||
Released under the GNU General Public License version 3+ (https://www.gnu.org/licenses/gpl.html)
|
||||
(https://github.com/NiLuJe/FBInk)
|
||||
|
||||
BigBlue_Terminal.ttf: BigBlue Terminal +, Copyright (C) VileR, <viler@int10h.org>,
|
||||
Licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)
|
||||
(https://int10h.org/blog/2015/12/bigblue-terminal-oldschool-fixed-width-font/).
|
||||
Patched with extra glyphs via https://github.com/ryanoasis/nerd-fonts/, see the WiKi for individual licenses.
|
||||
1183
dash/staging/mrpi/extensions/MRInstaller/bin/mrinstaller.sh
Executable file
1183
dash/staging/mrpi/extensions/MRInstaller/bin/mrinstaller.sh
Executable file
File diff suppressed because it is too large
Load Diff
12
dash/staging/mrpi/extensions/MRInstaller/config.xml
Executable file
12
dash/staging/mrpi/extensions/MRInstaller/config.xml
Executable file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extension>
|
||||
<information>
|
||||
<name>MR Installer</name>
|
||||
<version>1.6</version>
|
||||
<author>NiLuJe</author>
|
||||
<id>MRInstaller</id>
|
||||
</information>
|
||||
<menus>
|
||||
<menu type="json" dynamic="true">menu.json</menu>
|
||||
</menus>
|
||||
</extension>
|
||||
Binary file not shown.
78
dash/staging/mrpi/extensions/MRInstaller/data/icons.py
Executable file
78
dash/staging/mrpi/extensions/MRInstaller/data/icons.py
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python2
|
||||
"""
|
||||
Barebones example of FBInk usage through Python's cFFI module
|
||||
"""
|
||||
|
||||
# To get a Py3k-like print function
|
||||
from __future__ import print_function
|
||||
|
||||
import sys
|
||||
# Load the wrapper module, it's linked against FBInk, so the dynamic loader will take care of pulling in the actual FBInk library
|
||||
from _fbink import ffi, lib as FBInk
|
||||
|
||||
# Let's check which FBInk version we're using...
|
||||
# NOTE: ffi.string() returns a bytes on Python 3, not a str, hence the extra decode
|
||||
print("Loaded FBInk {}".format(ffi.string(FBInk.fbink_version()).decode("ascii")))
|
||||
|
||||
# And now we're good to go! Let's print "Hello World" in the center of the screen...
|
||||
# Setup the config...
|
||||
fbink_cfg = ffi.new("FBInkConfig *")
|
||||
fbink_cfg.is_centered = False
|
||||
fbink_cfg.is_halfway = True
|
||||
fbink_cfg.is_cleared = True
|
||||
fbink_cfg.is_verbose = True
|
||||
|
||||
fbink_ot_cfg = ffi.new("FBInkOTConfig *")
|
||||
fbink_ot_cfg.size_pt = 24
|
||||
|
||||
"""
|
||||
# Open the FB...
|
||||
fbfd = FBInk.fbink_open()
|
||||
if fbfd == -1:
|
||||
raise SystemExit("Failed to open the framebuffer, aborting . . .")
|
||||
|
||||
# Initialize FBInk...
|
||||
if FBInk.fbink_init(fbfd, fbink_cfg) < 0:
|
||||
raise SystemExit("Failed to initialize FBInk, aborting . . .")
|
||||
|
||||
# Do stuff!
|
||||
if FBInk.fbink_print(fbfd, b"Hello World", fbink_cfg) < 0:
|
||||
print("Failed to print that string!", file=sys.stderr)
|
||||
|
||||
# And now we can wind things down...
|
||||
if FBInk.fbink_close(fbfd) < 0:
|
||||
raise SystemExit("Failed to close the framebuffer, aborting . . .")
|
||||
"""
|
||||
|
||||
# Or, the same but in a slightly more Pythonic approach ;).
|
||||
fbfd = FBInk.fbink_open()
|
||||
try:
|
||||
FBInk.fbink_init(fbfd, fbink_cfg)
|
||||
FBInk.fbink_add_ot_font("BigBlue_Terminal.ttf", FBInk.FNT_REGULAR)
|
||||
string = u"Success \uf632 or \ufadf or \ufae0 or \ufc8f or \uf633 or \uf4a1" // \uf633
|
||||
string += u"\n"
|
||||
string += u"Error \uf071 or \uf525 or \uf529 or \uf421 or \ufb8f" // \uf071
|
||||
string += u"\n"
|
||||
string += u"Wait \uf252 or \ufa1e or \uf49b" // \uf252
|
||||
string += u"\n"
|
||||
string += u"Python \ue73c or \ue235 or \uf81f or \ue606" // \ue73c
|
||||
string += u"\n"
|
||||
string += u"USBNet \ue795 or \uf68c or \ufcb5 or \uf489" // \uf68c
|
||||
string += u"\n"
|
||||
string += u"Bridge \uf270 or \uf52c or \ue286 or \uf5a6 or \ue214" // \ue286 (AMZ: \uf270)
|
||||
string += u"\n"
|
||||
string += u":( \uf119 or \uf6f7" // \uf119
|
||||
string += u"\n"
|
||||
string += u"Linux \uf17c or \uf31a or \uf83c" // \uf17c
|
||||
string += u"\n"
|
||||
string += u":) \uf118 or \uf6f4" // \uf118
|
||||
string += u"\n"
|
||||
string += u"Tools \ue20f or \ufbf6 or \uf992 or \ufab6 or \uf425" // \uf425
|
||||
string += u"\n"
|
||||
string += u"MRPI \ufcdd or \ufcde or \uf8d5 or \uf962 or \ufac3 or \uf487 or \uf427" // \uf8d5 (KUAL: \uf962)
|
||||
string = string.encode("utf-8")
|
||||
# NOTE: On Python 3, cFFI maps char to bytes, not str
|
||||
FBInk.fbink_print_ot(fbfd, string, fbink_ot_cfg, fbink_cfg, ffi.NULL)
|
||||
finally:
|
||||
FBInk.fbink_free_ot_fonts()
|
||||
FBInk.fbink_close(fbfd)
|
||||
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-K3.tar.gz
Normal file
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-K3.tar.gz
Normal file
Binary file not shown.
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-K5.tar.gz
Normal file
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-K5.tar.gz
Normal file
Binary file not shown.
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-KHF.tar.gz
Normal file
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-KHF.tar.gz
Normal file
Binary file not shown.
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-PW2.tar.gz
Normal file
BIN
dash/staging/mrpi/extensions/MRInstaller/data/mrpi-PW2.tar.gz
Normal file
Binary file not shown.
24
dash/staging/mrpi/extensions/MRInstaller/menu.json
Executable file
24
dash/staging/mrpi/extensions/MRInstaller/menu.json
Executable file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"comment001": "MR Package Installer",
|
||||
"comment002": "",
|
||||
"comment003": "$Id: menu.json 11305 2014-12-23 14:56:54Z NiLuJe $",
|
||||
"comment004": "",
|
||||
"items": [
|
||||
{
|
||||
"name": "Helper",
|
||||
"priority": -998,
|
||||
"items": [
|
||||
{
|
||||
"name": "Install MR Packages",
|
||||
"action": "./bin/mrinstaller.sh",
|
||||
"params": "launch_installer",
|
||||
"priority": -998,
|
||||
"exitmenu": true,
|
||||
"refresh": false,
|
||||
"status": false,
|
||||
"internal": "status Launching the MR Installer"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
122
dash/staging/post-jailbreak-root/dashboard/dash.sh
Executable file
122
dash/staging/post-jailbreak-root/dashboard/dash.sh
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
DASH_PNG="$DIR/dash.png"
|
||||
FETCH_DASHBOARD_CMD="$DIR/local/fetch-dashboard.sh"
|
||||
LOW_BATTERY_CMD="$DIR/local/low-battery.sh"
|
||||
|
||||
REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"2,32 8-17 * * MON-FRI"}
|
||||
FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
SLEEP_SCREEN_INTERVAL=${SLEEP_SCREEN_INTERVAL:-3600}
|
||||
RTC=/sys/devices/platform/mxc_rtc.0/wakeup_enable
|
||||
|
||||
LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
LOW_BATTERY_THRESHOLD_PERCENT=${LOW_BATTERY_THRESHOLD_PERCENT:-10}
|
||||
|
||||
num_refresh=0
|
||||
|
||||
init() {
|
||||
if [ -z "$TIMEZONE" ] || [ -z "$REFRESH_SCHEDULE" ]; then
|
||||
echo "Missing required configuration."
|
||||
echo "Timezone: ${TIMEZONE:-(not set)}."
|
||||
echo "Schedule: ${REFRESH_SCHEDULE:-(not set)}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Starting dashboard with $REFRESH_SCHEDULE refresh..."
|
||||
|
||||
/etc/init.d/framework stop
|
||||
initctl stop webreader >/dev/null 2>&1
|
||||
echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
||||
lipc-set-prop com.lab126.powerd preventScreenSaver 1
|
||||
}
|
||||
|
||||
prepare_sleep() {
|
||||
echo "Preparing sleep"
|
||||
|
||||
/usr/sbin/eips -f -g "$DIR/sleeping.png"
|
||||
|
||||
# Give screen time to refresh
|
||||
sleep 2
|
||||
|
||||
# Ensure a full screen refresh is triggered after wake from sleep
|
||||
num_refresh=$FULL_DISPLAY_REFRESH_RATE
|
||||
}
|
||||
|
||||
refresh_dashboard() {
|
||||
echo "Refreshing dashboard"
|
||||
"$DIR/wait-for-wifi.sh" "$WIFI_TEST_IP"
|
||||
|
||||
"$FETCH_DASHBOARD_CMD" "$DASH_PNG"
|
||||
fetch_status=$?
|
||||
|
||||
if [ "$fetch_status" -ne 0 ]; then
|
||||
echo "Not updating screen, fetch-dashboard returned $fetch_status"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$num_refresh" -eq "$FULL_DISPLAY_REFRESH_RATE" ]; then
|
||||
num_refresh=0
|
||||
|
||||
# trigger a full refresh once in every 4 refreshes, to keep the screen clean
|
||||
echo "Full screen refresh"
|
||||
/usr/sbin/eips -f -g "$DASH_PNG"
|
||||
else
|
||||
echo "Partial screen refresh"
|
||||
/usr/sbin/eips -g "$DASH_PNG"
|
||||
fi
|
||||
|
||||
num_refresh=$((num_refresh + 1))
|
||||
}
|
||||
|
||||
log_battery_stats() {
|
||||
battery_level=$(gasgauge-info -c)
|
||||
echo "$(date) Battery level: $battery_level."
|
||||
|
||||
if [ "$LOW_BATTERY_REPORTING" = true ]; then
|
||||
battery_level_numeric=${battery_level%?}
|
||||
if [ "$battery_level_numeric" -le "$LOW_BATTERY_THRESHOLD_PERCENT" ]; then
|
||||
"$LOW_BATTERY_CMD" "$battery_level_numeric"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
rtc_sleep() {
|
||||
duration=$1
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
sleep "$duration"
|
||||
else
|
||||
# shellcheck disable=SC2039
|
||||
[ "$(cat "$RTC")" -eq 0 ] && echo -n "$duration" >"$RTC"
|
||||
echo "mem" >/sys/power/state
|
||||
fi
|
||||
}
|
||||
|
||||
main_loop() {
|
||||
while true; do
|
||||
log_battery_stats
|
||||
|
||||
next_wakeup_secs=$("$DIR/next-wakeup" --schedule="$REFRESH_SCHEDULE" --timezone="$TIMEZONE")
|
||||
|
||||
if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ]; then
|
||||
action="sleep"
|
||||
prepare_sleep
|
||||
else
|
||||
action="suspend"
|
||||
refresh_dashboard
|
||||
fi
|
||||
|
||||
# take a bit of time before going to sleep, so this process can be aborted
|
||||
sleep 10
|
||||
|
||||
echo "Going to $action, next wakeup in ${next_wakeup_secs}s"
|
||||
|
||||
rtc_sleep "$next_wakeup_secs"
|
||||
done
|
||||
}
|
||||
|
||||
init
|
||||
main_loop
|
||||
23
dash/staging/post-jailbreak-root/dashboard/local/env.sh
Normal file
23
dash/staging/post-jailbreak-root/dashboard/local/env.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Export environment variables here
|
||||
export WIFI_TEST_IP=${WIFI_TEST_IP:-1.1.1.1}
|
||||
# 测试配置:全天每分钟刷新一次,便于验证图片拉取与屏幕刷新是否正常。
|
||||
export REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"* * * * *"}
|
||||
export TIMEZONE=${TIMEZONE:-"Asia/Shanghai"}
|
||||
|
||||
# By default, partial screen updates are used to update the screen,
|
||||
# to prevent the screen from flashing. After a few partial updates,
|
||||
# the screen will start to look a bit distorted (due to e-ink ghosting).
|
||||
# 测试阶段强制每次都做一次全刷,避免首页残影和局部刷新的旧内容干扰验证。
|
||||
# 等图片尺寸与刷新逻辑确认无误后,再改回 4 之类的值以节省功耗。
|
||||
export FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0}
|
||||
|
||||
# When the time until the next wakeup is greater or equal to this number,
|
||||
# the dashboard will not be refreshed anymore, but instead show a
|
||||
# 'kindle is sleeping' screen. This can be useful if your schedule only runs
|
||||
# during the day, for example.
|
||||
export SLEEP_SCREEN_INTERVAL=3600
|
||||
|
||||
export LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false}
|
||||
export LOW_BATTERY_THRESHOLD_PERCENT=10
|
||||
4
dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh
Executable file
4
dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env sh
|
||||
# Fetch a new dashboard image, make sure to output it to "$1".
|
||||
# For example:
|
||||
"$(dirname "$0")/../xh" -d -q -o "$1" get https://raw.githubusercontent.com/pascalw/kindle-dash/master/example/example.png
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env sh
|
||||
battery_level_percentage=$1
|
||||
last_battery_report_state="$(dirname "$0")/state/last_battery_report"
|
||||
|
||||
previous_report_timestamp=$(cat "$last_battery_report_state" 2>/dev/null || echo '-1')
|
||||
now=$(date +%s)
|
||||
|
||||
# Implement desired logic here. The example below for example only reports low
|
||||
# battery every 24 hours.
|
||||
|
||||
if [ "$previous_report_timestamp" -eq -1 ] ||
|
||||
[ $((now - previous_report_timestamp)) -gt 86400 ]; then
|
||||
# Replace this with for example an HTTP call via curl, or xh
|
||||
echo "Reporting low battery: $battery_level_percentage%"
|
||||
|
||||
echo "$now" >"$last_battery_report_state"
|
||||
fi
|
||||
BIN
dash/staging/post-jailbreak-root/dashboard/next-wakeup
Executable file
BIN
dash/staging/post-jailbreak-root/dashboard/next-wakeup
Executable file
Binary file not shown.
BIN
dash/staging/post-jailbreak-root/dashboard/sleeping.png
Normal file
BIN
dash/staging/post-jailbreak-root/dashboard/sleeping.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
18
dash/staging/post-jailbreak-root/dashboard/start.sh
Executable file
18
dash/staging/post-jailbreak-root/dashboard/start.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env sh
|
||||
DEBUG=${DEBUG:-false}
|
||||
[ "$DEBUG" = true ] && set -x
|
||||
|
||||
DIR="$(dirname "$0")"
|
||||
ENV_FILE="$DIR/local/env.sh"
|
||||
LOG_FILE="$DIR/logs/dash.log"
|
||||
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
[ -f "$ENV_FILE" ] && . "$ENV_FILE"
|
||||
|
||||
if [ "$DEBUG" = true ]; then
|
||||
"$DIR/dash.sh"
|
||||
else
|
||||
"$DIR/dash.sh" >>"$LOG_FILE" 2>&1 &
|
||||
fi
|
||||
2
dash/staging/post-jailbreak-root/dashboard/stop.sh
Executable file
2
dash/staging/post-jailbreak-root/dashboard/stop.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env sh
|
||||
pkill -f dash.sh
|
||||
26
dash/staging/post-jailbreak-root/dashboard/wait-for-wifi.sh
Executable file
26
dash/staging/post-jailbreak-root/dashboard/wait-for-wifi.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env sh
|
||||
test_ip=$1
|
||||
|
||||
if [ -z "$test_ip" ]; then
|
||||
echo "No test ip specified"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wait_for_wifi() {
|
||||
max_retry=30
|
||||
counter=0
|
||||
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
|
||||
# shellcheck disable=SC2181
|
||||
while [ $? -ne 0 ]; do
|
||||
[ $counter -eq $max_retry ] && echo "Couldn't connect to Wi-Fi" && exit 1
|
||||
counter=$((counter + 1))
|
||||
|
||||
sleep 1
|
||||
ping -c 1 "$test_ip" >/dev/null 2>&1
|
||||
done
|
||||
}
|
||||
|
||||
wait_for_wifi
|
||||
echo "Wi-Fi connected"
|
||||
BIN
dash/staging/post-jailbreak-root/dashboard/xh
Executable file
BIN
dash/staging/post-jailbreak-root/dashboard/xh
Executable file
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
kindletool: KindleTool, Copyright (C) 2011-2015 Yifan Lu, licensed under the GNU General Public License version 3+ (http://www.gnu.org/licenses/gpl.html).
|
||||
(https://github.com/NiLuJe/KindleTool/)
|
||||
|
||||
|
|
||||
|-> libarchive, Copyright (C) Tim Kientzle, licensed under the New BSD License (http://www.opensource.org/licenses/bsd-license.php)
|
||||
| (http://libarchive.github.com/)
|
||||
|
|
||||
|-> GMP, GNU MP Library, Copyright 1991-2013 Free Software Foundation, Inc.,
|
||||
| licensed under the GNU Lesser General Public License version 3+ (http://www.gnu.org/licenses/lgpl.html).
|
||||
| (http://gmplib.org/)
|
||||
|
|
||||
`-> nettle, Copyright (C) 2001-2013 Niels Möller,
|
||||
licensed under the GNU Lesser General Public License version 2.1+ (https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html).
|
||||
(http://www.lysator.liu.se/~nisse/nettle)
|
||||
|
||||
libz: zlib, Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler,
|
||||
Licensed under the zlib license (http://zlib.net/zlib_license.html)
|
||||
(http://zlib.net/)
|
||||
|
||||
fbink: FBInk (FrameBuffer eInker), Copyright (C) 2018-2019 NiLuJe <ninuje@gmail.com>,
|
||||
Released under the GNU General Public License version 3+ (https://www.gnu.org/licenses/gpl.html)
|
||||
(https://github.com/NiLuJe/FBInk)
|
||||
|
||||
BigBlue_Terminal.ttf: BigBlue Terminal +, Copyright (C) VileR, <viler@int10h.org>,
|
||||
Licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)
|
||||
(https://int10h.org/blog/2015/12/bigblue-terminal-oldschool-fixed-width-font/).
|
||||
Patched with extra glyphs via https://github.com/ryanoasis/nerd-fonts/, see the WiKi for individual licenses.
|
||||
1183
dash/staging/post-jailbreak-root/extensions/MRInstaller/bin/mrinstaller.sh
Executable file
1183
dash/staging/post-jailbreak-root/extensions/MRInstaller/bin/mrinstaller.sh
Executable file
File diff suppressed because it is too large
Load Diff
12
dash/staging/post-jailbreak-root/extensions/MRInstaller/config.xml
Executable file
12
dash/staging/post-jailbreak-root/extensions/MRInstaller/config.xml
Executable file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extension>
|
||||
<information>
|
||||
<name>MR Installer</name>
|
||||
<version>1.6</version>
|
||||
<author>NiLuJe</author>
|
||||
<id>MRInstaller</id>
|
||||
</information>
|
||||
<menus>
|
||||
<menu type="json" dynamic="true">menu.json</menu>
|
||||
</menus>
|
||||
</extension>
|
||||
Binary file not shown.
78
dash/staging/post-jailbreak-root/extensions/MRInstaller/data/icons.py
Executable file
78
dash/staging/post-jailbreak-root/extensions/MRInstaller/data/icons.py
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python2
|
||||
"""
|
||||
Barebones example of FBInk usage through Python's cFFI module
|
||||
"""
|
||||
|
||||
# To get a Py3k-like print function
|
||||
from __future__ import print_function
|
||||
|
||||
import sys
|
||||
# Load the wrapper module, it's linked against FBInk, so the dynamic loader will take care of pulling in the actual FBInk library
|
||||
from _fbink import ffi, lib as FBInk
|
||||
|
||||
# Let's check which FBInk version we're using...
|
||||
# NOTE: ffi.string() returns a bytes on Python 3, not a str, hence the extra decode
|
||||
print("Loaded FBInk {}".format(ffi.string(FBInk.fbink_version()).decode("ascii")))
|
||||
|
||||
# And now we're good to go! Let's print "Hello World" in the center of the screen...
|
||||
# Setup the config...
|
||||
fbink_cfg = ffi.new("FBInkConfig *")
|
||||
fbink_cfg.is_centered = False
|
||||
fbink_cfg.is_halfway = True
|
||||
fbink_cfg.is_cleared = True
|
||||
fbink_cfg.is_verbose = True
|
||||
|
||||
fbink_ot_cfg = ffi.new("FBInkOTConfig *")
|
||||
fbink_ot_cfg.size_pt = 24
|
||||
|
||||
"""
|
||||
# Open the FB...
|
||||
fbfd = FBInk.fbink_open()
|
||||
if fbfd == -1:
|
||||
raise SystemExit("Failed to open the framebuffer, aborting . . .")
|
||||
|
||||
# Initialize FBInk...
|
||||
if FBInk.fbink_init(fbfd, fbink_cfg) < 0:
|
||||
raise SystemExit("Failed to initialize FBInk, aborting . . .")
|
||||
|
||||
# Do stuff!
|
||||
if FBInk.fbink_print(fbfd, b"Hello World", fbink_cfg) < 0:
|
||||
print("Failed to print that string!", file=sys.stderr)
|
||||
|
||||
# And now we can wind things down...
|
||||
if FBInk.fbink_close(fbfd) < 0:
|
||||
raise SystemExit("Failed to close the framebuffer, aborting . . .")
|
||||
"""
|
||||
|
||||
# Or, the same but in a slightly more Pythonic approach ;).
|
||||
fbfd = FBInk.fbink_open()
|
||||
try:
|
||||
FBInk.fbink_init(fbfd, fbink_cfg)
|
||||
FBInk.fbink_add_ot_font("BigBlue_Terminal.ttf", FBInk.FNT_REGULAR)
|
||||
string = u"Success \uf632 or \ufadf or \ufae0 or \ufc8f or \uf633 or \uf4a1" // \uf633
|
||||
string += u"\n"
|
||||
string += u"Error \uf071 or \uf525 or \uf529 or \uf421 or \ufb8f" // \uf071
|
||||
string += u"\n"
|
||||
string += u"Wait \uf252 or \ufa1e or \uf49b" // \uf252
|
||||
string += u"\n"
|
||||
string += u"Python \ue73c or \ue235 or \uf81f or \ue606" // \ue73c
|
||||
string += u"\n"
|
||||
string += u"USBNet \ue795 or \uf68c or \ufcb5 or \uf489" // \uf68c
|
||||
string += u"\n"
|
||||
string += u"Bridge \uf270 or \uf52c or \ue286 or \uf5a6 or \ue214" // \ue286 (AMZ: \uf270)
|
||||
string += u"\n"
|
||||
string += u":( \uf119 or \uf6f7" // \uf119
|
||||
string += u"\n"
|
||||
string += u"Linux \uf17c or \uf31a or \uf83c" // \uf17c
|
||||
string += u"\n"
|
||||
string += u":) \uf118 or \uf6f4" // \uf118
|
||||
string += u"\n"
|
||||
string += u"Tools \ue20f or \ufbf6 or \uf992 or \ufab6 or \uf425" // \uf425
|
||||
string += u"\n"
|
||||
string += u"MRPI \ufcdd or \ufcde or \uf8d5 or \uf962 or \ufac3 or \uf487 or \uf427" // \uf8d5 (KUAL: \uf962)
|
||||
string = string.encode("utf-8")
|
||||
# NOTE: On Python 3, cFFI maps char to bytes, not str
|
||||
FBInk.fbink_print_ot(fbfd, string, fbink_ot_cfg, fbink_cfg, ffi.NULL)
|
||||
finally:
|
||||
FBInk.fbink_free_ot_fonts()
|
||||
FBInk.fbink_close(fbfd)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
24
dash/staging/post-jailbreak-root/extensions/MRInstaller/menu.json
Executable file
24
dash/staging/post-jailbreak-root/extensions/MRInstaller/menu.json
Executable file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"comment001": "MR Package Installer",
|
||||
"comment002": "",
|
||||
"comment003": "$Id: menu.json 11305 2014-12-23 14:56:54Z NiLuJe $",
|
||||
"comment004": "",
|
||||
"items": [
|
||||
{
|
||||
"name": "Helper",
|
||||
"priority": -998,
|
||||
"items": [
|
||||
{
|
||||
"name": "Install MR Packages",
|
||||
"action": "./bin/mrinstaller.sh",
|
||||
"params": "launch_installer",
|
||||
"priority": -998,
|
||||
"exitmenu": true,
|
||||
"refresh": false,
|
||||
"status": false,
|
||||
"internal": "status Launching the MR Installer"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extension>
|
||||
<information>
|
||||
<name>Kindle dashboard</name>
|
||||
<id>pascalw-kindle-dash</id>
|
||||
</information>
|
||||
<menus>
|
||||
<menu type="json" dynamic="true">menu.json</menu>
|
||||
</menus>
|
||||
</extension>
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"items": [
|
||||
{"name": "Kindle Dashboard", "action": "/mnt/us/dashboard/start.sh"}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
mntroot rw
|
||||
cd /usr/bin
|
||||
mv otaupd otaupd.bck
|
||||
mv otav3 otav3.bck
|
||||
mntroot ro
|
||||
reboot
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
mntroot rw
|
||||
cd /usr/bin
|
||||
mv otaupd.bck otaupd
|
||||
mv otav3.bck otav3
|
||||
mntroot ro
|
||||
reboot
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extension>
|
||||
<information>
|
||||
</information>
|
||||
<menus>
|
||||
<menu type="json" dynamic="true">menu.json</menu>
|
||||
</menus>
|
||||
</extension>
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"name": "Rename OTA binaries",
|
||||
"priority": -998,
|
||||
"items": [
|
||||
{
|
||||
"name": "Rename",
|
||||
"priority": 1,
|
||||
"action": "bin/rename.sh",
|
||||
"exitmenu": true
|
||||
},
|
||||
{
|
||||
"name": "Restore",
|
||||
"priority": 2,
|
||||
"action": "bin/restore.sh",
|
||||
"exitmenu": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
dash/staging/watchthis/KV-5.13.6/KV-5.13.6.zip
Normal file
BIN
dash/staging/watchthis/KV-5.13.6/KV-5.13.6.zip
Normal file
Binary file not shown.
1
dash/staging/watchthis/KV-5.13.6/demo.json
Normal file
1
dash/staging/watchthis/KV-5.13.6/demo.json
Normal file
@@ -0,0 +1 @@
|
||||
{"type": "demo_activation_manifest", "version": 1, "locale": ["de_AT", "it_CH", "ro_RO", "mt_MT", "es_EC", "es_US", "pt_BR", "cs_CZ", "fr_LU", "es_UY", "es_MX", "sk_SK", "es_ES", "ar_OM", "es_VE", "nl_BE", "sq_AL", "sv_SE", "da_DK", "es_NI", "iw_IL", "ko_KR", "en_US", "en_MT", "el_GR", "it_IT", "pl_PL", "fr_BE", "be_BY", "en_AU", "tr_TR", "ja_JP", "de_DE", "es_SV", "ar_QA", "de_CH", "zh_HK", "ar_YE", "es_CO", "es_CL", "fr_CA", "es_CR", "en_SG", "fr_CH", "vi_VN", "fi_FI", "en_CA", "lv_LV", "uk_UA", "es_DO", "ga_IE", "ar_IQ", "sl_SI", "ar_AE", "pt_PT", "en_GY", "en_PH", "th_TH", "in_ID", "ca_ES", "hu_HU", "ar_SA", "ar_SD", "sr_BA", "ar_BH", "ar_JO", "nl_NL", "is_IS", "es_AR", "sr_RS", "en_IE", "hr_HR", "ar_KW", "de_LU", "lt_LT", "ar_SY", "en_IN", "es_BO", "no_NO", "en_ZA", "ru_RU", "ar_TN", "ar_LB", "hi_IN", "fr_FR", "el_CY", "ms_MY", "zh_TW", "ar_LY", "sr_CS", "es_GT", "en_NZ", "es_PE", "zh_SG", "es_PA", "ar_DZ", "bg_BG", "mk_MK", "ar_MA", "sr_ME", "en_GB", "es_HN", "et_EE", "es_PR", "ar_EG", "es_PY"], "files": [{"name": "KV-5.13.6.zip", "checksum": "f65287a2af835cfb60aef7b47e4ec968"}]}
|
||||
BIN
dash/staging/watchthis/Update_hotfix_watchthis_custom.bin
Normal file
BIN
dash/staging/watchthis/Update_hotfix_watchthis_custom.bin
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"type": "demo_activation_manifest", "version": 1, "locale": ["de_AT", "it_CH", "ro_RO", "mt_MT", "es_EC", "es_US", "pt_BR", "cs_CZ", "fr_LU", "es_UY", "es_MX", "sk_SK", "es_ES", "ar_OM", "es_VE", "nl_BE", "sq_AL", "sv_SE", "da_DK", "es_NI", "iw_IL", "ko_KR", "en_US", "en_MT", "el_GR", "it_IT", "pl_PL", "fr_BE", "be_BY", "en_AU", "tr_TR", "ja_JP", "de_DE", "es_SV", "ar_QA", "de_CH", "zh_HK", "ar_YE", "es_CO", "es_CL", "fr_CA", "es_CR", "en_SG", "fr_CH", "vi_VN", "fi_FI", "en_CA", "lv_LV", "uk_UA", "es_DO", "ga_IE", "ar_IQ", "sl_SI", "ar_AE", "pt_PT", "en_GY", "en_PH", "th_TH", "in_ID", "ca_ES", "hu_HU", "ar_SA", "ar_SD", "sr_BA", "ar_BH", "ar_JO", "nl_NL", "is_IS", "es_AR", "sr_RS", "en_IE", "hr_HR", "ar_KW", "de_LU", "lt_LT", "ar_SY", "en_IN", "es_BO", "no_NO", "en_ZA", "ru_RU", "ar_TN", "ar_LB", "hi_IN", "fr_FR", "el_CY", "ms_MY", "zh_TW", "ar_LY", "sr_CS", "es_GT", "en_NZ", "es_PE", "zh_SG", "es_PA", "ar_DZ", "bg_BG", "mk_MK", "ar_MA", "sr_ME", "en_GB", "es_HN", "et_EE", "es_PR", "ar_EG", "es_PY"], "files": [{"name": "KV-5.13.6.zip", "checksum": "f65287a2af835cfb60aef7b47e4ec968"}]}
|
||||
Binary file not shown.
Reference in New Issue
Block a user