123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #!/bin/sh
- # General constants declaration
- THRESHOLD_PERCENT_LOW_BAT=5
- THRESHOLD_PERCENT_EXTREMELY_LOW_BAT=2
- MAX_LOW_BAT_COUNT=5
- SLEEP_SECS=2
- RESCALE_MAX_PERCENTAGE=120
- # Blink Low bat constants declaration
- BLINK_ICON=0
- LOW_BAT_DISPLAY_TIMEOUT=5
- # Files and commands declaration
- USB_PRESENT_FILE="/sys/class/power_supply/axp20x-usb/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="/tmp/current_battery_percentage"
- LOW_BAT_ICON="/sys/class/graphics/fb0/low_battery"
- # Variables declaration
- low_bat_status=0
- low_bat_displayed=0
- cur_secs_disp=0
- low_bat_count=0
- # Default: Hide Low Bat Icon
- echo 0 > ${LOW_BAT_ICON}
- # 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
- low_bat_count=0
- echo 0 > ${LOW_BAT_ICON}
- fi
- fi
- else
- if [ ${low_bat_status} -eq 1 ]; then
- # Reset status
- low_bat_status=0
- low_bat_count=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 low_bat_count++
- echo "low_bat_count = ${low_bat_count}"
- # Clean shutdown
- if [ ${low_bat_count} -ge ${MAX_LOW_BAT_COUNT} ]; then
- echo "Battery extremely low, shutting down now..."
- powerdown schedule 1
- 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_DISPLAY_TIMEOUT} ]; 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_DISPLAY_TIMEOUT} ]; 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
|