144 lines
3.3 KiB
Bash
Raw Normal View History

2025-05-10 21:58:58 +08:00
#!/bin/sh
#
TRY_CNT=0
get_pid(){
ps -A | grep "$1" | awk '{print $1}'
}
wait_process_killed(){
if [ "$2" = "" ]; then return; fi
while [ "$(get_pid $1)" = "$2" ]
do
sleep 0.1
done
}
check_uvc_suspend()
{
if [ -e /tmp/uvc_goto_suspend ];then
echo "uvc go to suspend now"
ispserver_pid=$(get_pid ispserver)
aiserver_pid=$(get_pid aiserver)
killall ispserver
killall aiserver
wait_process_killed ispserver ${ispserver_pid}
wait_process_killed aiserver ${aiserver_pid}
CNT=0
while [ "$CNT" -gt 20 ]
do
if [ -e /tmp/uvc_goto_suspend ];then
sleep 0.1
let CNT=CNT+1
else
CNT=100
fi
done
if [ -e /tmp/uvc_goto_suspend ];then
rm /tmp/uvc_goto_suspend -rf
echo mem > /sys/power/state
fi
fi
}
check_uvc_buffer()
{
if [ "$TRY_CNT" -gt 0 ];then
let TRY_CNT=TRY_CNT-1
#echo "++++++++TRY_CNT:$TRY_CNT"
fi
if [ "$TRY_CNT" -gt 10 ];then
echo "+++check_uvc_buffer recovery fail,reboot to recovery now+++"
reboot &
fi
if [ -e /tmp/uvc_camera_no_buf ];then
let TRY_CNT=TRY_CNT+10
echo "uvc no buf to send 200 frames,try to recovery isp time,timeout:$TRY_CNT"
killall ispserver
killall aiserver
rm /tmp/uvc_camera_no_buf -rf
fi
}
check_alive()
{
if [[ ! -f "/oem/usr/bin/$1" && ! -f "/usr/bin/$1" ]]; then
return 1
fi
PID=`busybox ps |grep $1 |grep -v grep | wc -l`
if [ $PID -le 0 ];then
if [ "$1"x == "uvc_app"x ];then
echo " uvc app die ,restart it and usb reprobe !!!"
killall adbd
killall uac_app &
sleep 1
killall -9 adbd
killall -9 uac_app
rm -rf /sys/kernel/config/usb_gadget/rockchip/configs/b.1/f*
echo none > /sys/kernel/config/usb_gadget/rockchip/UDC
rmdir /sys/kernel/config/usb_gadget/rockchip/functions/rndis.gs0
rmdir /sys/kernel/config/usb_gadget/rockchip/functions/ffs.adb
rmdir /sys/kernel/config/usb_gadget/rockchip/functions/uac*
UDC=`ls /sys/class/udc/| awk '{print $1}'`
echo $UDC > /sys/bus/platform/drivers/dwc3/unbind
echo $UDC > /sys/bus/platform/drivers/dwc3/bind
/oem/usb_config.sh rndis off #disable adb
usb_irq_set
uvc_app &
else
if [ "$1"x == "ispserver"x ];then
ispserver -n &
else
if [ "$1"x == "aiserver"x ];then
echo "aiserver is die,tell uvc to recovery"
killall -3 uvc_app
aiserver &
sleep .5
killall -10 smart_display_service
else
$1 &
fi
fi
fi
fi
}
stop_unused_daemon()
{
killall -9 adbd
killall -9 ntpd
killall -9 connmand
killall -9 dropbear
killall -9 start_rknn.sh
killall -9 rknn_server
}
usb_irq_set()
{
#for usb uvc iso
usbirq=`cat /proc/interrupts |grep dwc3| awk '{print $1}'|tr -cd "[0-9]"`
echo "usb irq:$usbirq"
echo 1 > /proc/irq/$usbirq/smp_affinity_list
}
#ulimit -c unlimited
dbserver &
ispserver -n &
stop_unused_daemon
#uac_app &
/oem/usb_config.sh rndis
usb_irq_set
uvc_app &
aiserver &
sleep .5
smart_display_service &
while true
do
check_alive dbserver
check_alive ispserver
check_alive uvc_app
# check_alive uac_app
check_alive aiserver
# check_uvc_buffer
# check_uvc_suspend
sleep 2
check_alive smart_display_service
done