Added the utility scripts

This commit is contained in:
Michel-FK 2020-05-30 09:22:50 +02:00
parent 04d2c698b6
commit 09dc20c6e7
28 changed files with 927 additions and 0 deletions

View File

@ -0,0 +1,20 @@
#!/bin/sh
BRIGHTNESS_FILE="/etc/current_brightness"
BRIGHTNESS_DEFAULT_VALUE=100
# Sanity check: File does not exist
if [ ! -f "${BRIGHTNESS_FILE}" ]; then
#echo "error: \"${BRIGHTNESS_FILE}\" does not exist" >&2
echo ${BRIGHTNESS_DEFAULT_VALUE} > "${BRIGHTNESS_FILE}"
fi
# Sanity check: Check if integer
brightness=$(cat "${BRIGHTNESS_FILE}")
if ! [ "${brightness}" -ne "${brightness}" ] 2> /dev/null; then
#echo "error: \"${brightness}\" is not a number" >&2
echo ${BRIGHTNESS_DEFAULT_VALUE} > "${BRIGHTNESS_FILE}"
brightness=${BRIGHTNESS_DEFAULT_VALUE}
fi
echo ${brightness}
exit 0

View File

@ -0,0 +1,7 @@
#!/bin/sh
SYSTEM_BRIGHTNESS="/sys/class/backlight/backlight/brightness"
let brightness=$(cat "${SYSTEM_BRIGHTNESS}")*10-10
echo ${brightness}
exit 0

View File

@ -0,0 +1,28 @@
#!/bin/sh
BRIGHTNESS_FILE="/etc/current_brightness"
SYSTEM_BRIGHTNESS="/sys/class/backlight/backlight/brightness"
# Check args
if [ ${#} != 1 ]; then
echo "Usage: ${0} new_brightness_percentage"
exit 1
fi
# Check value's range
if [ ${1} -gt 100 ]; then
echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
exit 1
fi
brightness_percentage=${1}
# Set new brightness percentage
let value=${1}+10
let value/=10
echo ${value} > "${SYSTEM_BRIGHTNESS}"
# Set new brightness value in brightness file
if [ ${?} -eq 0 ]; then
echo ${brightness_percentage} > "${BRIGHTNESS_FILE}"
fi
exit 0

View File

@ -0,0 +1,18 @@
#!/bin/sh
SYSTEM_BRIGHTNESS="/sys/class/backlight/backlight/brightness"
if [ ${#} != 1 ]; then
echo "Usage: $0 new_brightness_percentage"
exit 1
fi
if [ ${1} -gt 100 ]; then
echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
exit 1
fi
# Set new brightness percentage
let value=${1}+10
let value/=10
echo ${value} > "${SYSTEM_BRIGHTNESS}"
exit 0

View File

@ -0,0 +1,5 @@
#!/bin/sh
notif_set 0 "Getting system stats..."
killall -s USR1 system_stats
exit 0

View File

@ -0,0 +1,3 @@
#!/bin/sh
killall mednafen gpsp psnes pcsx sdlgnuboy PicoDriveBin
exit 0

View File

@ -0,0 +1,124 @@
#!/bin/sh
# General constants declaration
THRESHOLD_PERCENT_LOW_BAT=5
THRESHOLD_PERCENT_EXTREMELY_LOW_BAT=2
MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN=5
SLEEP_SECS=2
RESCALE_MAX_PERCENTAGE=110
# Blink Low bat constants declaration
BLINK_ICON=0
LOW_BAT_SECS_DISPLAYED=5
LOW_BAT_SECS_NOT_DISPLAYED=5
# Files and commands declaration
USB_PRESENT_FILE="/sys/class/power_supply/axp20x-usb/present"
#USB_PRESENT_FILE="/sys/class/power_supply/axp20x-ac/present" # Cheat for no USB present simulation when debugging
BAT_PRESENT_FILE="/sys/class/power_supply/axp20x-battery/present"
BAT_PERCENT_FILE="/sys/class/power_supply/axp20x-battery/capacity"
BAT_PERCENT_RESCALED_FILE="/etc/current_battery_percentage"
LOW_BAT_ICON="/sys/class/graphics/fb0/low_battery"
SCHEDULE_SHUTDOWN_CMD="sched_shutdown"
SIGNAL_URS1_TO_EMULATORS_CMD="signal_usr1_to_emulators"
# Variables declaration
low_bat_status=0
low_bat_displayed=0
cur_secs_disp=0
cur_nb_extremely_low_bat_before_shutdown=0
# Default: Hide Low Bat Icon
eval ${ICON_HIDE_CMD}
# Check low bat #
while true; do
#echo "Bat present: "$(cat ${BAT_PRESENT_FILE})"
#echo "USB present: "$(cat ${USB_PRESENT_FILE})"
#echo "Bat percentage: "$(cat ${BAT_PERCENT_FILE})"
# Get current bat percentage here once
cur_bat_percent=$(cat "${BAT_PERCENT_FILE}")
#echo "cur_bat_percent = ${cur_bat_percent}"
# Rescale bat percentage between 0 and RESCALE_MAX_PERCENTAGE
bat_percent_rescaled=$(printf "%.f" $(echo $cur_bat_percent $RESCALE_MAX_PERCENTAGE | awk '{print $1*$2/100}'))
#echo "bat_percent_rescaled = ${bat_percent_rescaled}"
# Re-maximize to 100%
bat_percent_rescaled_maxed=$(( bat_percent_rescaled < 100 ? bat_percent_rescaled : 100 ))
#echo "bat_percent_rescaled_maxed = ${bat_percent_rescaled_maxed}"
# Save in file
echo ${bat_percent_rescaled_maxed} > "${BAT_PERCENT_RESCALED_FILE}"
# Low bat status detection
if [ "$(cat ${USB_PRESENT_FILE})" -eq "0" ]; then
# Value of 0 means wrong i2c reading
if [ "${cur_bat_percent}" -ne "0" ]; then
# Check if we must change state
if [ "{$cur_bat_percent}" -le "${THRESHOLD_PERCENT_LOW_BAT}" -a "${low_bat_status}" -eq "0" ]; then
# Set Low Bat status
low_bat_status=1
low_bat_displayed=1
cur_secs_disp=0
echo 1 > "${LOW_BAT_ICON}"
elif [ "${cur_bat_percent}" -gt "${THRESHOLD_PERCENT_LOW_BAT}" -a "${low_bat_status}" -eq "1" ]; then
# Reset status
low_bat_status=0
cur_nb_extremely_low_bat_before_shutdown=0
echo 0 > "${LOW_BAT_ICON}"
fi
fi
else
if [ "${low_bat_status}" -eq "1" ]; then
# Reset status
low_bat_status=0
cur_nb_extremely_low_bat_before_shutdown=0
echo 0 > "${LOW_BAT_ICON}"
fi
fi
# Low bat processing
if [ "${low_bat_status}" -eq "1" ]; then
# Check extremely low bat for clean shutdown
if [ "${cur_bat_percent}" -le "${THRESHOLD_PERCENT_EXTREMELY_LOW_BAT}" ]; then
let cur_nb_extremely_low_bat_before_shutdown++
echo "cur_nb_extremely_low_bat_before_shutdown = ${cur_nb_extremely_low_bat_before_shutdown}"
# Clean shutdown
if [ "${cur_nb_extremely_low_bat_before_shutdown}" -ge "${MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN}" ]; then
echo "Battery extremely low, shutting down now..."
sched_shutdown 1 & signal_usr1_to_emulators
exit 0
fi
fi
# Blinking process
if [ "${BLINK_ICON}" -eq "1" ]; then
if [ "${low_bat_displayed}" -eq "1" -a "${cur_secs_disp}" -ge "${LOW_BAT_SECS_DISPLAYED}" ]; then
low_bat_displayed=0
cur_secs_disp=0
echo 0 > "${LOW_BAT_ICON}"
elif [ "${low_bat_displayed}" -eq "0" -a "${cur_secs_disp}" -ge "${LOW_BAT_SECS_NOT_DISPLAYED}" ]; then
low_bat_displayed=1
cur_secs_disp=0
echo 1 > "${LOW_BAT_ICON}"
fi
fi
fi
# Sleep before next check
sleep ${SLEEP_SECS}
# Increase vars
let cur_secs_disp+=${SLEEP_SECS}
done
exit 0

View File

@ -0,0 +1,7 @@
#!/bin/sh
# Clear all current notifications
NOTIFICATION_DISPLAY="/sys/class/graphics/fb0/notification"
printf "clear" > "${NOTIFICATION_DISPLAY}"
exit 0

View File

@ -0,0 +1,38 @@
#!/bin/sh
# Display notification for a certain amount of time
# Special char: ^ to add a new line
# Set seconds to 0 to display indefinitely (until the next notif)
NOTIFICATION_DISPLAY="/sys/class/graphics/fb0/notification"
display_usage() {
echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n"
}
# If less than two arguments supplied, display usage
if [ ${#} -le 1 ]; then
echo "Display notification for a certain amount of time"
display_usage
exit 1
fi
# Get number of seconds to display notif
nb_secs=${1}
if ! [ "${nb_secs}" -ne "${nb_secs}" ] 2> /dev/null; then
echo "error: \"${nb_secs}\" is not a number" >&2
exit 1
fi
# Print notif
printf "${*:2}" > "${NOTIFICATION_DISPLAY}"
# Clear notif if NB_SECS is not 0, otherwise never clear
if [ "${nb_secs}" -ne "0" ]; then
# Wait time before clearing notif
sleep ${nb_secs}
# Clear notif
printf "clear" > "${NOTIFICATION_DISPLAY}"
fi
exit 0

View File

@ -0,0 +1,36 @@
#!/bin/sh
# Erase previous notif and display new one in background process for a certain amount of seconds
# Special char: ^ to add a new line
# Set seconds to 0 to display indefinitely (until the next notif_set)
NOTIFICATION_DISPLAY="/sys/class/graphics/fb0/notification"
display_usage() {
echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n"
}
# If less than two arguments supplied, display usage
if [ $# -le 1 ]; then
echo "Erase previous notif and display new one in background process for a certain amount of time"
echo "Special char: ^ to add a new line"
echo "Set seconds to 0 to display indefinitely (until the next $(basename ${0}))"
display_usage
exit 1
fi
# Get number of seconds to display notif
nb_secs=${1}
if ! [ "${nb_secs}" -ne "${nb_secs}" ]; then
echo "error: \"${nb_secs}\" is not a number" >&2
exit 1
fi
# Kill previous notif_disp process
pkill notif_disp 2> /dev/null
## Clear previous notif
#printf "clear" > "${NOTIFICATION_DISPLAY}"
# Print new notif
notif_disp "$@" &
exit 0

View File

@ -0,0 +1,22 @@
#!/bin/sh
STEP_BRIGHTNESS=10
NOTIF_TIME_ON=2
# Get current value
current_brightness=$(brightness_get)
# Compute new brightness value
new_brightness=0
if [ "${current_brightness}" -gt "${STEP_BRIGHTNESS}" ]; then
let new_brightness=${current_brightness}-${STEP_BRIGHTNESS}
fi
# Change brightness
if [ "${new_brightness}" -ne "${current_brightness}" ]; then
brightness_set ${new_brightness}
fi
# Notif
notif_set ${NOTIF_TIME_ON} " BRIGHTNESS: ${new_brightness}%%"
exit 0

View File

@ -0,0 +1,22 @@
#!/bin/sh
STEP_BRIGHTNESS=10
NOTIF_TIME_ON=2
# Get current value
current_brightness=$(brightness_get)
# Compute new brightness value
new_brightness=${current_brightness}+${STEP_BRIGHTNESS}
if [ "${new_brightness}" -gt "100" ]; then
new_brightness=100
fi
# Change brightness
if [ "${new_brightness}" -ne "${current_brightness}" ]; then
brightness_set ${new_brightness}
fi
# Notif
notif_set ${NOTIF_TIME_ON} " BRIGHTNESS: ${new_brightness}%%"
exit 0

View File

@ -0,0 +1,22 @@
#!/bin/sh
STEP_VOLUME=10
NOTIF_TIME_ON=2
# Get current value
current_volume=$(volume_get)
# Compute new volume value
new_volume=0
if [ "${current_volume}" -gt "${STEP_VOLUME}" ]; then
new_volume=${current_volume}-${STEP_VOLUME}
fi
# Change volume
if [ "${new_volume}" -ne "${current_volume}" ]; then
volume_set ${new_volume}
fi
# Notif
notif_set ${NOTIF_TIME_ON} " VOLUME: ${new_volume}%%"
exit 0

View File

@ -0,0 +1,22 @@
#!/bin/sh
STEP_VOLUME=10
NOTIF_TIME_ON=2
# Get current value
current_volume=$(volume_get)
# Compute new volume value
new_volume=${current_volume}+${STEP_VOLUME}
if [ "{new_$volume}" -gt "100" ]; then
new_volume=100
fi
# Change volume
if [ "${new_volume}" -ne "{current_$volume}" ]; then
volume_set ${new_volume}
fi
# Notif
notif_set ${NOTIF_TIME_ON} " VOLUME: ${new_volume}%%"
exit 0

View File

@ -0,0 +1,15 @@
#!/bin/sh
if [ "${#}" != "1" ]; then
echo "Usage: $0 seconds_before_shutdown"
exit 1
fi
nb_secs_to_wait=$1
# Wait $nb_secs_to_wait seconds to catch signal USR2
# If the signal is caught, then it means a process canceled this shutdown
sleep ${nbl_secs_to_wait}
# Too late to cancel: init shutdown
shutdown_funkey

View File

@ -0,0 +1,22 @@
#!/bin/sh
# Notif fullscreen "Shutting down"
notif_set 0 "^^^^^^^^ SHUTTING DOWN...^^^^^^^^"
# Kill Emulators
#kill_emulators >/dev/null 2>&1
# Kill Retrofe
#pkill retrofe
# Sync filesystems (useful in case poweroff could not finish)
sync
# Unmount Roms partition
umount /mnt
# Shutdown amp
start_audio_amp 0 >/dev/null 2>&1
# Poweroff
poweroff

View File

@ -0,0 +1,6 @@
#!/bin/sh
# This should replaced by storing the correct PID before
# launching an emulator and signaling only this one.
killall -s USR1 mednafen gpsp psnes pcsx sdlgnuboy PicoDriveBin >/dev/null 2>&1
exit 0

View File

@ -0,0 +1,31 @@
#!/bin/sh
# Check number of args
if [ "${#}" -ne "1" ]; then
echo "Usage: $0 [1 for on, 0 for off]"
exit 1
fi
# Check Enable arg
enable=$1
if [ "${enable}" -eq "1" ]; then
echo "Turning ampli ON"
elif [ "${enable}" -eq "0" ]; then
echo "Turning ampli OFF"
else
echo "Usage: ${0} [1 for on, 0 for off]"
exit 1
fi
# PA enable GPIO
GPIO_PF6=166
# Export GPIO
if [ ! -d "/sys/class/gpio/gpio${GPIO_PF6}" ]; then
echo ${GPIO_PF6} > "/sys/class/gpio/export"
fi
# Enable/disable cmd
echo "out" > "/sys/class/gpio/gpio${GPIO_PF6}/direction"
echo ${enable} > "/sys/class/gpio/gpio${GPIO_PF6}/value"
exit 0

View File

@ -0,0 +1,12 @@
#!/bin/sh
LOCK_FILE="/var/lock/gpio_manager.lock"
if [ -f "${LOCK_FILE}" ]; then
echo "${LOCK_FILE} already exists"
exit 1
fi
touch "${LOCK_FILE}"
funkey_gpio_management
rm "${LOCK_FILE}"
exit 0

View File

@ -0,0 +1,43 @@
#!/bin/sh
LOCK_FILE="/var/lock/launcher.lock"
PREVENT_LAUNCHER_FILE="/mnt/prevent_launcher"
PREVENT_LAUNCHER_FILE2="/boot/prevent_launcher"
if [ -f "${LOCK_FILE}" ]; then
echo "${LOCK_FILE} already exists"
exit 1
fi
touch "${LOCK_FILE}"
# Launch Previous Game
QUICK_LOAD_FILE="/root/quick_load_cmd"
if [ -f "${QUICK_LOAD_FILE}" ]; then
command=$(cat "${QUICK_LOAD_FILE}")
echo "Found quick load file, restarting previous game with command:"
echo ${command}
rm "${QUICK_LOAD_FILE}"
eval ${command}
termfix_all
fi
# Loop to launch launcher indefinitely
while true; do
# Check if prevent launcher file present
if [ -f "${PREVENT_LAUNCHER_FILE}" ]; then
echo "Found file: ${PREVENT_LAUNCHER_FILE}, not launching launcher"
sleep 5
elif [ -f "${PREVENT_LAUNCHER_FILE2}" ]; then
echo "Found file: ${PREVENT_LAUNCHER_FILE2}, not launching launcher"
sleep 5
else
# Launch Retrofe
retrofe
# In case retrofe quits with errors, clear graphic VT
termfix_all
fi
done
rm "${LOCK_FILE}"
exit 0

View File

@ -0,0 +1,37 @@
#!/bin/sh
UPDATE_PERIOD=2 #seconds
notif_dirty=0
perform=0
# USR1 callback
function toggle_perform()
{
let perform=1-${perform}
if [ "${perform}" -eq "0" ]; then
notif_clear
notif_dirty=1
fi
}
trap toggle_perform SIGUSR1
while true; do
if [ "${perform}" -eq "1" ]; then
# Compute stats
cpu=$(printf "%.1f\n" $(mpstat -P ALL $UPDATE_PERIOD 1 | tail -1 | awk '{print 100-$12}'))
ram_mem=$(printf "%.1f\n" $(free | grep Mem | awk '{print $3/$2 * 100.0}'))
ram_swap=$(printf "%.1f\n" $(free | grep Swap | awk '{print $3/$2 * 100.0}'))
# Notif
if [ "${notif_dirty}" == "1" ]]; then
notif_clear
notif_dirty=0
else
notif_set 0 "CPU:${cpu}%% RAM:${ram_mem}%% SWAP:${ram_swap}%%"
fi
else
sleep ${UPDATE_PERIOD}
fi
done
exit 0

View File

@ -0,0 +1,6 @@
#!/bin/sh
for i in $(seq 0 11); do
termfix /dev/tty$i
done
exit 0

View File

@ -0,0 +1,257 @@
#!/bin/sh
#########################
# Functions declaration #
#########################
notif_system_corruption () {
local time_on_screen=30
local reason=""
if [[ "$#" -ge "1" ]]; then
time_on_screen=$1
fi
if [[ "$#" -ge "2" ]]; then
reason=$2
fi
notif_set $time_on_screen "^YOUR SYSTEM IS CORRUPTED:^$reason^^PLEASE REFLASH YOUR SD CARD"
}
exit_with_reason () {
local reason=$EXIT_CODE_FAILURE
# Check args
if [[ "$#" -ge "1" ]]; then
reason=$1
fi
echo "EXIT FAILURE $EXIT_CODE_FAILURE, check log file"
# Remove extraction folder
if [[ -d $EXTRACT_DIRECTORY ]]; then
echo "Removing extraction directory: $EXTRACT_DIRECTORY" >> $LOG_FILE_UPGRADE
rm -rf $EXTRACT_DIRECTORY
fi
# Copy log file to UPGRADE_ARCHIVES_DIRECTORY
cp "$LOG_FILE_UPGRADE" "$LOG_FILE_UPGRADE_COPY"
exit $reason
}
exit_failure () {
exit_with_reason $EXIT_CODE_FAILURE
}
get_targz_uncompressed_size () {
# check arg
if [[ "$#" != "1" ]]; then
extracted_size=0
return 1
fi
extracted_size=$(tar tzvf "$1" | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc)
return 0
}
################
# Exit reasons #
################
EXIT_CODE_SUCCESS=0
EXIT_CODE_FAILURE=1
EXIT_CODE_FAILURE_NO_VERSION=2
EXIT_CODE_FAILURE_WRONG_VERSION=3
EXIT_CODE_FAILURE_WRONG_TAR_GZ=4
EXIT_CODE_FAILURE_WRONG_MD5=5
EXIT_CODE_FAILURE_WRONG_EXTRACT_SIZE=6
EXIT_CODE_FAILURE_NO_SPACE=7
EXIT_CODE_FAILURE_EXTRACT_FAILED=8
EXIT_CODE_FAILURE_SCRIPT_NOT_FOUND=9
#####################
# Files declaration #
#####################
FUNKEY_VERSION_FILE="/etc/funkey_version"
UPGRADE_ARCHIVES_DIRECTORY="/mnt/"
EXTRACT_DIRECTORY=$UPGRADE_ARCHIVES_DIRECTORY/update_tmp
LOG_FILES_DIRECTORY="/usr/local/etc/upgrade_logs/"
LOG_FILE_UPGRADE="$LOG_FILES_DIRECTORY/upgrade_log_$(date +%m-%d-%y_%T).txt"
LOG_FILE_UPGRADE_COPY="$UPGRADE_ARCHIVES_DIRECTORY/upgrade_log.txt"
####################
# Vars declaration #
####################
upgrade_needed=0
upgrade_error=0
extracted_size=0
###################
# Process Upgrade #
###################
# Init log files
mkdir -p $LOG_FILES_DIRECTORY
echo -e "******* Upgrade Incremental FunKey, $(date) *******\n" > $LOG_FILE_UPGRADE
test -f $LOG_FILE_UPGRADE_COPY && rm $LOG_FILE_UPGRADE_COPY
# Get current FunKey version
if [[ -f $FUNKEY_VERSION_FILE ]]; then
FUNKEY_VERSION=$(cat $FUNKEY_VERSION_FILE)
# Check if positive number (float or integer)
if [[ "$FUNKEY_VERSION" != ^[+-]?[0-9]*$ ]];then
echo "Current FunKey version = $FUNKEY_VERSION" >> $LOG_FILE_UPGRADE
elif [[ "$FUNKEY_VERSION" != ^[+-]?[0-9]+\.?[0-9]*$ ]];then
echo "Current FunKey version = $FUNKEY_VERSION" >> $LOG_FILE_UPGRADE
else
echo "WRONG FUNKEY VERSION FOUND: $FUNKEY_VERSION !" >> $LOG_FILE_UPGRADE
# Notif
notif_system_corruption 20 "WRONG VERSION: $FUNKEY_VERSION"
# Exit failure
upgrade_error=1
exit_with_reason $EXIT_CODE_FAILURE_NO_VERSION
fi
else
echo "NO FUNKEY VERSION FOUND !" >> $LOG_FILE_UPGRADE
# Notif
notif_system_corruption 20 "NO VERSION"
# Exit failure
upgrade_error=1
exit_with_reason $EXIT_CODE_FAILURE_WRONG_VERSION
fi
# Check if upgrade file is present
upgrade_archive=$(ls -v $UPGRADE_ARCHIVES_DIRECTORY/upgrade_funkey_${FUNKEY_VERSION}_to_*.tar.gz 2> /dev/null | head -1)
other_upgrade_archives=$(ls $UPGRADE_ARCHIVES_DIRECTORY/upgrade_funkey_*.tar.gz 2> /dev/null)
if [[ ! -z "$upgrade_archive" ]]; then
echo -e "Upgrade archive found:\n $upgrade_archive" >> $LOG_FILE_UPGRADE
#echo -e "Upgrade archive found:\n $upgrade_archive"
upgrade_needed=1
elif [[ ! -z "$other_upgrade_archives" ]]; then
echo -e "Other upgrades files found:\n $other_upgrade_archives" >> $LOG_FILE_UPGRADE
else
echo "No upgrade files found" >> $LOG_FILE_UPGRADE
fi
if [[ "$upgrade_needed" == "1" ]]; then
# Check if tar.gz file is valid
tar_gz_file_list=$(tar -tzf "$upgrade_archive" 2>/dev/null)
tar_gz_validity=$?
if [[ "$tar_gz_validity" != "0" ]]; then
echo "WRONG TAR.GZ FILE" >> $LOG_FILE_UPGRADE
exit_with_reason $EXIT_CODE_FAILURE_WRONG_TAR_GZ
else
echo -e "\nList of files in archive:" >> $LOG_FILE_UPGRADE
echo $tar_gz_file_list >> $LOG_FILE_UPGRADE
echo -e "\n" >> $LOG_FILE_UPGRADE
fi
# Check if archive integrity is ok
file_no_ext=${upgrade_archive%.tar.gz}
md5_read=${file_no_ext##*_}
echo "MD5 read from file: $md5_read" >> $LOG_FILE_UPGRADE
md5_computed=$(md5sum $upgrade_archive | cut -d' ' -f1)
echo "MD5 computed from file: $md5_computed" >> $LOG_FILE_UPGRADE
if [[ "$md5_read" != "$md5_computed" ]]; then
echo "WRONG MD5" >> $LOG_FILE_UPGRADE
exit_with_reason $EXIT_CODE_FAILURE_WRONG_MD5
fi
# Get size of uncompressed data
get_targz_uncompressed_size "$upgrade_archive"
if [[ $extracted_size == "0" ]]; then
echo "CANNOT COMPUTE EXTRACTED SIZE" >> $LOG_FILE_UPGRADE
exit_with_reason $EXIT_CODE_FAILURE_WRONG_EXTRACT_SIZE
fi
echo "Extracted archive size: $extracted_size" >> $LOG_FILE_UPGRADE
# Check if enough space in /mnt for extraction
free_space=$(($(stat -f --format="%a*%S" $UPGRADE_ARCHIVES_DIRECTORY)))
echo "Free space in $UPGRADE_ARCHIVES_DIRECTORY: $free_space" >> $LOG_FILE_UPGRADE
if [[ "$free_space" -le "$extracted_size" ]]; then
missing_space=$(echo "$extracted_size - $free_space" | bc )
format_missing_space=$(numfmt --to=iec --suffix=B $missing_space)
echo "NOT ENOUGH FREE SPACE FOR EXTRACTION, MISSING $format_missing_space" >> $LOG_FILE_UPGRADE
echo "NOT ENOUGH FREE SPACE FOR EXTRACTION, MISSING $format_missing_space"
notif_set 20 "^NOT ENOUGH SPACE FOR UPDATE^PLEASE FREE $format_missing_space"
exit_with_reason $EXIT_CODE_FAILURE_NO_SPACE
fi
# Remove and create extraction folder
if [[ -d $EXTRACT_DIRECTORY ]]; then
echo "Removing extraction directory: $EXTRACT_DIRECTORY" >> $LOG_FILE_UPGRADE
rm -rf $EXTRACT_DIRECTORY
fi
mkdir $EXTRACT_DIRECTORY
# Notif before achive extraction
notif_set 0 "^^^^^^^ UPGRADE IN PROGRESS... ^ EXTRACTING FILES^^DO NOT TURN OFF THE CONSOLE! ^^^^^^"
# Extract archive
echo "Extracting to directory: $EXTRACT_DIRECTORY" >> $LOG_FILE_UPGRADE
tar xzf $upgrade_archive -C $EXTRACT_DIRECTORY 2> /dev/null
if [[ "$?" != "0" ]]; then
echo "EXTRACTION FAILED" >> $LOG_FILE_UPGRADE
exit_with_reason EXIT_CODE_FAILURE_EXTRACT_FAILED
fi
echo "Extracted directory content:" >> $LOG_FILE_UPGRADE
ls $EXTRACT_DIRECTORY >> $LOG_FILE_UPGRADE
# Check for update script
upgrade_script=$(ls $EXTRACT_DIRECTORY/launch_upgrade.sh 2> /dev/null | head -1)
if [[ -z "$upgrade_script" ]]; then
echo -e "UPGRADE SCRIPT NOT FOUND" >> $LOG_FILE_UPGRADE
echo -e "UPGRADE SCRIPT NOT FOUND"
notif_set 20 "^UPDATE FAILED:^SCRIPT NOT FOUND^^WRONG UPGRADE FILE"
exit_with_reason EXIT_CODE_FAILURE_SCRIPT_NOT_FOUND
fi
# Display notif before launching script
notif_set 0 "^^^^^^^ UPGRADE IN PROGRESS... ^$(basename "$upgrade_archive")^^DO NOT TURN OFF THE CONSOLE! ^^^^^^"
# Launch upgrade script
echo -e "Launching upgrade script" >> $LOG_FILE_UPGRADE
chmod 777 $upgrade_script
$upgrade_script "$LOG_FILE_UPGRADE"
if [[ "$?" != "0" ]]; then
echo -e "UPGRADE SCRIPT FAILURE" >> $LOG_FILE_UPGRADE
exit_failure
fi
echo -e "Upgrade script successfull" >> $LOG_FILE_UPGRADE
# Remove upgrade archive
echo -e "Remove upgrade archive" >> $LOG_FILE_UPGRADE
rm $upgrade_archive
# Remove and create extraction folder
if [[ -d $EXTRACT_DIRECTORY ]]; then
echo "Removing extraction directory: $EXTRACT_DIRECTORY" >> $LOG_FILE_UPGRADE
rm -rf $EXTRACT_DIRECTORY
fi
# Notif upgrade successfull
notif_set 0 "^^^^^^^^ UPGRADE SUCCESSFUL^ REBOOTING NOW^^^^^^^"
sleep 2
notif_clear
# Reboot FunKey
reboot
fi
# If no upgrade, remove log file
if [[ "$upgrade_needed" == "0" && "$upgrade_error" == "0" ]]; then
rm $LOG_FILE_UPGRADE
fi
# Exit success
exit $EXIT_CODE_SUCCESS

View File

@ -0,0 +1,20 @@
#!/bin/sh
VOLUME_FILE="/etc/current_volume"
VOLUME_DEFAULT_VALUE=50
# Sanity check: File does not exist
if [ ! -f "${VOLUME_FILE}" ]; then
#echo "error: \"${VOLUME_FILE}\" does not exist" >&2
echo ${VOLUME_DEFAULT_VALUE} > "${VOLUME_FILE}"
fi
# Sanity check: Check if integer
volume=$(cat "${VOLUME_FILE}")
if ! [ "${volume}" -ne "${volume}" ] ; then
#echo "error: \"${volume}\" is not a number" >&2
echo ${VOLUME_DEFAULT_VALUE} > "${VOLUME_FILE}"
volume=${VOLUME_DEFAULT_VALUE}
fi
echo ${volume}
exit 0

View File

@ -0,0 +1,4 @@
#!/bin/sh
amixer sget 'Headphone' | tail -1 | cut -d' ' -f7 | sed 's/[^0-9]//g'
exit 0

View File

@ -0,0 +1,45 @@
#!/bin/sh
VOLUME_FILE="/etc/current_volume"
# Check args
if [ ${#} != 1 ]; then
echo "Usage: ${0} new_volume_percentage"
exit 1
fi
# Check value's range
if [ ${1} -gt 100 ]; then
echo "Usage: Wrong volume percentage (${1}), must be between 0 and 100"
exit 1
fi
# Scale new volume value between 0 and 63
volume_percent=${1}
volume_integer=$(echo ${volume_percent} 63 100 | awk '{printf int($1*$2/$3)}')
volume_decimal=$(echo ${volume_percent} 63 100 ${volume_integer} | awk '{printf (($1*$2/$3)-$4)*100}')
if [ "${volume_decimal}" -ge "63" ]; then
let volume_integer++
fi
volume_scaled=${volume_integer}
# Get current value
current_volume=$(volume_get)
# Turn on/off ampli if necessary
if [ "${current_volume}" -eq "0" -a "${volume_scaled}" -ne "0" ]; then
echo "Turning AMP on"
start_audio_amp 1
elif [ "${current_volume}" -ne "0" -a "${volume_scaled}" -eq "0" ]; then
echo "Turning AMP off"
start_audio_amp 0
fi
# Set new volume
amixer -q sset 'Headphone' ${volume_scaled} unmute
# Change new volume value in volume file
if [ ${?} -eq 0 ]; then
echo ${volume_percent} > "${VOLUME_FILE}"
fi
exit 0

View File

@ -0,0 +1,38 @@
#!/bin/sh
# Check args
if [ ${#} != 1 ]; then
echo "Usage: ${0} new_volume_percentage"
exit 1
fi
# Check value's range
if [ ${1} -gt 100 ]; then
echo "Usage: Wrong volume percentage (${1}), must be between 0 and 100"
exit 1
fi
# Scale new volume value between 0 and 63
volume_percent=${1}
volume_integer=$(echo ${volume_percent} 63 100 | awk '{printf int($1*$2/$3)}')
volume_deccimal=$(echo ${volume_percent} 63 100 ${volume_integer} | awk '{printf (($1*$2/$3)-$4)*100}')
if [ "{$volume_decimal}" -ge "63" ]; then
let volume_integer++
fi
volume_scaled=${volume_integer}
# Get current value
current_volume=$(volume_get)
# Turn on/off ampli if necessary
if [ "${current_volume}" -eq "0" -a "${volume_scaled}" -ne "0" ]; then
echo "Turning AMP on"
start_audio_amp 1
elif [ "${current_volume}" -ne "0" -a "${volume_scaled}" -eq "0" ]; then
echo "Turning AMP off"
start_audio_amp 0
fi
# Set new volume
amixer -q sset 'Headphone' ${volume_scaled} unmute
exit 0

View File

@ -0,0 +1,17 @@
#!/bin/sh
# Write quick load file args
QUICK_LOAD_FILE="/root/quick_load_cmd"
printf "" > $QUICK_LOAD_FILE
whitespace="[[:space:]]"
for i in "$@"; do
if [[ "$i" != $whitespace && "$i" != "SDL_NOMOUSE=1" ]]
then
i=\""$i"\"
fi
printf "%s" "$i " >> $QUICK_LOAD_FILE
done
printf "\n" >> $QUICK_LOAD_FILE
exit 0