#!/bin/sh
# accd - keep battery between resume_capacity and suspend_capacity.
# Config: /etc/acc.conf

CONFIG=/etc/acc.conf
CHARGER=/sys/class/power_supply/pm8150b-charger
BATTERY=/sys/class/power_supply/qcom-battery

interval=30
resume_capacity=20
suspend_capacity=50

[ -f "$CONFIG" ] && . "$CONFIG"

for v in "$interval" "$resume_capacity" "$suspend_capacity"; do
  case "$v" in
    ''|*[!0-9]*)
      echo "charge-limit: invalid value '$v' in $CONFIG" >&2
      exit 1
      ;;
  esac
done
[ "$suspend_capacity" -gt "$resume_capacity" ] || {
  echo "charge-limit: suspend_capacity must be greater than resume_capacity" >&2
  exit 1
}

log() { logger -t accd "$@"; }

while :; do
  cap=$(cat "$BATTERY/capacity" 2>/dev/null) || { sleep "$interval"; continue; }
  enabled=$(cat "$CHARGER/charging_enabled" 2>/dev/null)

  if [ "$enabled" = 1 ] && [ "$cap" -ge "$suspend_capacity" ]; then
    echo 0 > "$CHARGER/charging_enabled"
    log "suspended charging at ${cap}%"
  elif [ "$enabled" = 0 ] && [ "$cap" -le "$resume_capacity" ]; then
    echo 1 > "$CHARGER/charging_enabled"
    log "resumed charging at ${cap}%"
  fi
  sleep "$interval"
done
