#!/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