1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunTRY_CNT=0 5*4882a593Smuzhiyunget_pid(){ 6*4882a593Smuzhiyun ps -A | grep "$1" | awk '{print $1}' 7*4882a593Smuzhiyun} 8*4882a593Smuzhiyunwait_process_killed(){ 9*4882a593Smuzhiyun if [ "$2" = "" ]; then return; fi 10*4882a593Smuzhiyun while [ "$(get_pid $1)" = "$2" ] 11*4882a593Smuzhiyun do 12*4882a593Smuzhiyun sleep 0.1 13*4882a593Smuzhiyun done 14*4882a593Smuzhiyun} 15*4882a593Smuzhiyun 16*4882a593Smuzhiyuncheck_uvc_suspend() 17*4882a593Smuzhiyun{ 18*4882a593Smuzhiyun if [ -e /tmp/uvc_goto_suspend ];then 19*4882a593Smuzhiyun echo "uvc go to suspend now" 20*4882a593Smuzhiyun ispserver_pid=$(get_pid ispserver) 21*4882a593Smuzhiyun aiserver_pid=$(get_pid aiserver) 22*4882a593Smuzhiyun killall ispserver 23*4882a593Smuzhiyun killall aiserver 24*4882a593Smuzhiyun wait_process_killed ispserver ${ispserver_pid} 25*4882a593Smuzhiyun wait_process_killed aiserver ${aiserver_pid} 26*4882a593Smuzhiyun CNT=0 27*4882a593Smuzhiyun while [ "$CNT" -gt 20 ] 28*4882a593Smuzhiyun do 29*4882a593Smuzhiyun if [ -e /tmp/uvc_goto_suspend ];then 30*4882a593Smuzhiyun sleep 0.1 31*4882a593Smuzhiyun let CNT=CNT+1 32*4882a593Smuzhiyun else 33*4882a593Smuzhiyun CNT=100 34*4882a593Smuzhiyun fi 35*4882a593Smuzhiyun done 36*4882a593Smuzhiyun if [ -e /tmp/uvc_goto_suspend ];then 37*4882a593Smuzhiyun rm /tmp/uvc_goto_suspend -rf 38*4882a593Smuzhiyun echo mem > /sys/power/state 39*4882a593Smuzhiyun fi 40*4882a593Smuzhiyun fi 41*4882a593Smuzhiyun} 42*4882a593Smuzhiyun 43*4882a593Smuzhiyuncheck_uvc_buffer() 44*4882a593Smuzhiyun{ 45*4882a593Smuzhiyun if [ "$TRY_CNT" -gt 0 ];then 46*4882a593Smuzhiyun let TRY_CNT=TRY_CNT-1 47*4882a593Smuzhiyun #echo "++++++++TRY_CNT:$TRY_CNT" 48*4882a593Smuzhiyun fi 49*4882a593Smuzhiyun if [ "$TRY_CNT" -gt 10 ];then 50*4882a593Smuzhiyun echo "+++check_uvc_buffer recovery fail,reboot to recovery now+++" 51*4882a593Smuzhiyun reboot & 52*4882a593Smuzhiyun fi 53*4882a593Smuzhiyun if [ -e /tmp/uvc_camera_no_buf ];then 54*4882a593Smuzhiyun let TRY_CNT=TRY_CNT+10 55*4882a593Smuzhiyun echo "uvc no buf to send 200 frames,try to recovery isp time,timeout:$TRY_CNT" 56*4882a593Smuzhiyun killall ispserver 57*4882a593Smuzhiyun killall aiserver 58*4882a593Smuzhiyun rm /tmp/uvc_camera_no_buf -rf 59*4882a593Smuzhiyun fi 60*4882a593Smuzhiyun} 61*4882a593Smuzhiyuncheck_alive() 62*4882a593Smuzhiyun{ 63*4882a593Smuzhiyun if [[ ! -f "/oem/usr/bin/$1" && ! -f "/usr/bin/$1" ]]; then 64*4882a593Smuzhiyun return 1 65*4882a593Smuzhiyun fi 66*4882a593Smuzhiyun PID=`busybox ps |grep $1 |grep -v grep | wc -l` 67*4882a593Smuzhiyun if [ $PID -le 0 ];then 68*4882a593Smuzhiyun if [ "$1"x == "uvc_app"x ];then 69*4882a593Smuzhiyun echo " uvc app die ,restart it and usb reprobe !!!" 70*4882a593Smuzhiyun killall adbd 71*4882a593Smuzhiyun killall uac_app & 72*4882a593Smuzhiyun sleep 1 73*4882a593Smuzhiyun killall -9 adbd 74*4882a593Smuzhiyun killall -9 uac_app 75*4882a593Smuzhiyun rm -rf /sys/kernel/config/usb_gadget/rockchip/configs/b.1/f* 76*4882a593Smuzhiyun echo none > /sys/kernel/config/usb_gadget/rockchip/UDC 77*4882a593Smuzhiyun rmdir /sys/kernel/config/usb_gadget/rockchip/functions/rndis.gs0 78*4882a593Smuzhiyun rmdir /sys/kernel/config/usb_gadget/rockchip/functions/ffs.adb 79*4882a593Smuzhiyun rmdir /sys/kernel/config/usb_gadget/rockchip/functions/uac* 80*4882a593Smuzhiyun UDC=`ls /sys/class/udc/| awk '{print $1}'` 81*4882a593Smuzhiyun echo $UDC > /sys/bus/platform/drivers/dwc3/unbind 82*4882a593Smuzhiyun echo $UDC > /sys/bus/platform/drivers/dwc3/bind 83*4882a593Smuzhiyun /oem/usb_config.sh rndis off #disable adb 84*4882a593Smuzhiyun usb_irq_set 85*4882a593Smuzhiyun uvc_app & 86*4882a593Smuzhiyun else 87*4882a593Smuzhiyun if [ "$1"x == "ispserver"x ];then 88*4882a593Smuzhiyun ispserver -n & 89*4882a593Smuzhiyun else 90*4882a593Smuzhiyun if [ "$1"x == "aiserver"x ];then 91*4882a593Smuzhiyun echo "aiserver is die,tell uvc to recovery" 92*4882a593Smuzhiyun killall -3 uvc_app 93*4882a593Smuzhiyun aiserver & 94*4882a593Smuzhiyun sleep .5 95*4882a593Smuzhiyun killall -10 smart_display_service 96*4882a593Smuzhiyun else 97*4882a593Smuzhiyun $1 & 98*4882a593Smuzhiyun fi 99*4882a593Smuzhiyun fi 100*4882a593Smuzhiyun fi 101*4882a593Smuzhiyun fi 102*4882a593Smuzhiyun} 103*4882a593Smuzhiyun 104*4882a593Smuzhiyunstop_unused_daemon() 105*4882a593Smuzhiyun{ 106*4882a593Smuzhiyun killall -9 adbd 107*4882a593Smuzhiyun killall -9 ntpd 108*4882a593Smuzhiyun killall -9 connmand 109*4882a593Smuzhiyun killall -9 dropbear 110*4882a593Smuzhiyun killall -9 start_rknn.sh 111*4882a593Smuzhiyun killall -9 rknn_server 112*4882a593Smuzhiyun} 113*4882a593Smuzhiyun 114*4882a593Smuzhiyunusb_irq_set() 115*4882a593Smuzhiyun{ 116*4882a593Smuzhiyun #for usb uvc iso 117*4882a593Smuzhiyun usbirq=`cat /proc/interrupts |grep dwc3| awk '{print $1}'|tr -cd "[0-9]"` 118*4882a593Smuzhiyun echo "usb irq:$usbirq" 119*4882a593Smuzhiyun echo 1 > /proc/irq/$usbirq/smp_affinity_list 120*4882a593Smuzhiyun} 121*4882a593Smuzhiyun#ulimit -c unlimited 122*4882a593Smuzhiyundbserver & 123*4882a593Smuzhiyunispserver -n & 124*4882a593Smuzhiyunstop_unused_daemon 125*4882a593Smuzhiyun#uac_app & 126*4882a593Smuzhiyun/oem/usb_config.sh rndis 127*4882a593Smuzhiyunusb_irq_set 128*4882a593Smuzhiyunuvc_app & 129*4882a593Smuzhiyunaiserver & 130*4882a593Smuzhiyunsleep .5 131*4882a593Smuzhiyunsmart_display_service & 132*4882a593Smuzhiyunwhile true 133*4882a593Smuzhiyundo 134*4882a593Smuzhiyun check_alive dbserver 135*4882a593Smuzhiyun check_alive ispserver 136*4882a593Smuzhiyun check_alive uvc_app 137*4882a593Smuzhiyun# check_alive uac_app 138*4882a593Smuzhiyun check_alive aiserver 139*4882a593Smuzhiyun# check_uvc_buffer 140*4882a593Smuzhiyun# check_uvc_suspend 141*4882a593Smuzhiyun sleep 2 142*4882a593Smuzhiyun check_alive smart_display_service 143*4882a593Smuzhiyundone 144