#!/bin/sh

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX)

# Simple script to watch the battery capacity and
# turn the power LED orange when it reaches 30%, red at 20%, and blinking red at 10%

# Minimal OS variable loading for performance

[ "$(cat /proc/device-tree/model)" = "Retroid Pocket 5" ] || exit 0

LED_PATH="/sys/devices/platform/"

function bat_led_off() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 0 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 0 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_red() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 0 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 0 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_green() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 255 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 255 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_orange() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 20 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 20 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_yellow() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 125 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 125 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_charging() {
  n=1
  br=$(seq 0 5 255)
  while [ "$n" -lt 4 ]; do
    echo 180  >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 180 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 20 180 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 20 180 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}


PREV_BATCAP="null"
while true
  do
  BAT_LED_STATE=$(cat /sys/class/power_supply/battery/status)
    CAP=$(cat /sys/class/power_supply/battery/capacity)
    STAT=$(cat /sys/class/power_supply/battery/status)
      if [ ${STAT} == "Discharging" ]; then
        if (( ${CAP} <= 10 ))
          then
            for ctr in $(seq 1 1 5)
          do
            bat_led_red
            sleep .5
            bat_led_off
            sleep .5
          done
          continue
        elif (( ${CAP} <= 20 ))
        then
          BATCAP="D_RED"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_red
          fi
        elif (( ${CAP} <=  30 ))
        then
          BATCAP="D_ORANGE"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_orange
          fi
        elif (( ${CAP} <=  50 ))
        then
          BATCAP="D_YELLOW"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_yellow
          fi
        else
          BATCAP="D_GREEN"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_green
          fi
        fi
      elif (( ${CAP} <= 94 ))
      then
        BATCAP="C_ORANGE"
        if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
          bat_led_orange
        fi
      elif (( ${CAP} >= 95 ))
      then
        BATCAP="C_GREEN"
        if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
          bat_led_green
        fi
      elif [ ${STAT} == "Charging" ]; then
        BATCAP="C_ANBER"
        if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
          bat_led_charging
        fi
      fi
      PREV_BATCAP=${BATCAP}
      sleep 15
done