xref: /OK3568_Linux_fs/device/rockchip/common/images/oem/oem_uvcc/aicamera.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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