#!/bin/sh # i2c_keepalive.sh — X6200 AXP PMU keepalive # # The X6200 uses an AXP PMU on I2C bus 0, address 0x72. # Without periodic I2C traffic the unit powers off after ~180s. # This script sends a combined write+read transaction every second. # # Requires: i2c-tools (i2ctransfer) BUS=0 ADDR=0x72 INTERVAL=1 # Only allow one instance if pidof -x "$(basename "$0")" >/dev/null 2>&1; then COUNT="$(pidof -x "$(basename "$0")" | wc -w)" [ "$COUNT" -gt 1 ] && { echo "[keepalive] already running"; exit 0; } fi trap 'exit 0' INT TERM # One-time kick at startup i2ctransfer -y "$BUS" w4@"$ADDR" 0xFF 0xFE 0x02 0x80 >/dev/null 2>&1 i2ctransfer -y "$BUS" w4@"$ADDR" 0xFF 0xFE 0x03 0x80 >/dev/null 2>&1 # Main keepalive loop while :; do i2ctransfer -y "$BUS" w2@"$ADDR" 0x20 0x00 r1@"$ADDR" >/dev/null 2>&1 sleep "$INTERVAL" done