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"}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user