#!/bin/sh

# picam2_watchdog.sh
# 2025-02-25
# by Gernot Walzl

PICAM_SERVICE=${PICAM_SERVICE:-'picam2_surveillance'}

reload_module () {
  local KMOD="$1"
  if lsmod | grep -q "^${KMOD} "; then
    rmmod "$KMOD"
    modprobe "$KMOD"
  fi
}

journalctl -u "$PICAM_SERVICE" -f | while read LINE; do
  if echo "$LINE" | grep -q 'Camera frontend has timed out'; then
    systemctl stop "$PICAM_SERVICE"
    reload_module bcm2835_codec
    reload_module bcm2835_isp
    reload_module bcm2835_unicam
    reload_module bcm2835_v4l2
    systemctl start "$PICAM_SERVICE"
  fi
done