#!/bin/sh
#zkusit nejak prohledat nejdrive USB jestli je to vubec propojene
#gcc -o ExF1Ctrl exf1ctrl.c libexf1.c exf1api.c -lusb && ./ExF1Ctrl
# zaridit aby tento sript byl spousteny uvnitr jineho ktery by cekal na signal konec session a zabil skript + spustil znovu cekani !!! killall -2 CAMERA_START.sh
#!!! je potreba any si tam svoboda zaridilo nejake nc co bude pouslouchat v nekonecne smycce a budy zychytavt zaslane errory !!!!
#MAIN_PATH="/home/michal/Desktop/Prace/Golem/SCRIPTY_SERVER/2.3./"
MAIN_PATH="/home"
CAMERA_PATH="$MAIN_PATH/camera"
#CAMERA_PATH="$MAIN_PATH"
TOMOGRAPHY_PATH="$MAIN_PATH/tomography"
export DISPLAY=":0.0"
echo compiling ...
cd $CAMERA_PATH
gcc -o ExF1Ctrl exf1ctrl.c libexf1.c exf1api.c -lusb
cd $MAIN_PATH
SERVER='192.168.2.125'
#SERVER='192.168.0.55'
# N_CAM=2
PORT='2044' #initialization
PORT2='2045' #commands
GETPID_NC1='ps axf | grep "nc -l -p $PORT" | grep -v grep | awk '"'"'{print $1}'"'"''
GETPID_NC2='ps axf | grep "nc -l -p $PORT2" | grep -v grep | awk '"'"'{print $1}'"'"''
trap "echo Koncim ...; echo -e 'q\n' >> COMMAND; echo EXIT >> LOG1;echo EXIT >> LOG2;sleep 3; killall ExF1Ctrl; killall tail;kill -9 `eval $GETPID_NC1`;kill -9 `eval $GETPID_NC2`; exit" TERM INT KILL EXIT
#!!! =====================================================
COMMAND1="S 0.2 0.0" # "S 0.0 0.2" #fotak 2, horni
COMMAND2="S 0.15 0.0" #fotak 1, bocni
#!! ========================================================
#!! Je nutné nurne opravit zmeny nastavení v souboru $CAMERA_PATH/parameters.txt aby se to projevilo na webu !!!
CHECK='ps axf | grep "ExF1Ctrl $CAMERA" | grep -v grep | wc -l'
GETPID='ps axf | grep "ExF1Ctrl $CAMERA" | grep -v grep | awk '"'"'{print $1}'"'"''
# cd $CAMERA_PATH
finalize() {
PID=`eval $GETPID`
if [ ! -e "$MAIN_PATH/$SHOT-$CAMERA.MOV" ]
then
echo "Video $MAIN_PATH/$SHOT-$CAMERA.MOV neexistuje, $PID"
echo -e "q\n" >> COMMAND$CAMERA
sleep 5
echo "kill $PID"
kill $PID
return 1
fi
echo START finalize $SHOT-$CAMERA
mkdir "$CAMERA_PATH/$SHOT-$CAMERA" # 2>> /dev/null
cd "$CAMERA_PATH/$SHOT-$CAMERA"
mv $MAIN_PATH/$SHOT-$CAMERA.MOV ./
#rm plasma*.png 2>> /dev/null #remove pictures from prew. run
nice mplayer -nosound -speed 100 -vo png:outdir=./:z=1 ./$SHOT-$CAMERA.MOV >> /dev/null
#mplayer -nosound -vo jpeg:outdir=./:quality=100 ../$SHOT-$CAMERA
sleep 2
echo hledam
find -size -2500c -exec rm {} \;
NUMPIC=`ls *.png | wc -w` 2> /dev/null
if [ $NUMPIC -eq 0 ]
then
echo NO SNAPSHOT $SHOT-$CAMERA
cd $MAIN_PATH
# echo 1 > ERROR
scp $CAMERA_PATH/icon.png golem@$SERVER:/srv/www/svoboda/golem/shots/$SHOT/diagnostics/Radiation/0211FastCamera.ON/
return 1
fi
#
if [ $NUMPIC -gt 200 ]
then
echo TOO MUCH SNAPSHOTS $SHOT-$CAMERA, $NUMPIC
cd $MAIN_PATH
# echo 1 > ERROR
return 1
fi
echo convert $NUMPIC
for j in `ls *.png`
do
convert -rotate 270 $j $j #-flop
# convert -rotate 90 -flop $j $j #-flop
done
sleep 1
#
# convert -delay 20 -loop 1 00*.png plasma_animate-$CAMERA.gif
# echo !!! opravuji fotky !!!
sleep 1
echo $CAMERA_PATH/repair_photo.py $CAMERA_PATH/$SHOT-$CAMERA $CAMERA_PATH/$SHOT-$CAMERA
$CAMERA_PATH/repair_photo.py $CAMERA_PATH/$SHOT-$CAMERA $CAMERA_PATH/$SHOT-$CAMERA
echo montage
montage 00*.png -tile `ls *.png | wc -w`x1 -background black -geometry 96x336+8+0 plasma_all.png
convert -channel R -separate plasma_all.png plasma_red.png
convert -channel G -separate plasma_all.png plasma_green.png
convert -channel B -separate plasma_all.png plasma_blue.png
convert -resize 150x120 plasma_all.png icon.png
cp $CAMERA_PATH/parameters.txt ./
$CAMERA_PATH/repair_photo.py $CAMERA_PATH/$SHOT-$CAMERA $CAMERA_PATH/$SHOT-$CAMERA
convert -resize 150x120 CorrectedRGB.png icon.png
if [ -e $CAMERA_PATH/$SHOT-$CAMERA/CorrectedRGB.png ]
then
echo 0 > $CAMERA_PATH/$SHOT-$CAMERA/status # sign to database that it is finished correctly
fi
echo Copy ...
if ping -c1 $SERVER > /dev/null
then
#/srv/www/svoboda/golem/shots/$SHOT/diagnostics/Radiation/0211FastCamera.ON/tomography
scp -r $CAMERA_PATH/$SHOT-$CAMERA/ golem@$SERVER:/srv/www/svoboda/golem/shots/$SHOT/diagnostics/Radiation/0211FastCamera.ON/$CAMERA
scp $CAMERA_PATH/$SHOT-$CAMERA/icon.png golem@$SERVER:/srv/www/svoboda/golem/shots/$SHOT/diagnostics/Radiation/0211FastCamera.ON/
scp $CAMERA_PATH/$SHOT-$CAMERA/status golem@$SERVER:/srv/www/svoboda/golem/shots/$SHOT/diagnostics/Radiation/0211FastCamera.ON/
else
echo nejde ping na server $SERVER
fi
# cp plasma_all.png $CAMERA_PATH/plasma_all-$SHOT-$CAMERA.png
# cp plasma_red.png $CAMERA_PATH/plasma_red-$SHOT-$CAMERA.png
# cp plasma_blue.png $CAMERA_PATH/plasma_blue-$SHOT-$CAMERA.png
# cp plasma_green.png $CAMERA_PATH/plasma_green-$SHOT-$CAMERA.png
# cp plasma_all.png /tmp/plasma_all.png
# scp /tmp/plasma_all.png golem@$SERVER:/tmp/
echo DONE $SHOT-$CAMERA CAMERA $CAMERA
cd $MAIN_PATH
# cp $CAMERA_PATH/$SHOT-$CAMERA/plasma_all.png /home/tomography/geometry_golem_camera/$SHOT-$CAMERA.png
READY=`cat READY-$SHOT`
let READY=READY+1
echo $READY > READY-$SHOT
return 0
}
initialize()
{
while [ 1 ]
do
echo 1 > STATUS_$CAMERA
echo Initialize camera $CAMERA
echo ====================================== $CAMERA >> LOG$CAMERA
#tail -f -n1 LOG$CAMERA &
echo SESSION START `date` >> LOG$CAMERA
$CAMERA_PATH/ExF1Ctrl $CAMERA r #reload camera
echo 1 > STATUS_$CAMERA
sleep 5
C="COMMAND$CAMERA"
echo Init camera ... ${!C}
rm COMMAND$CAMERA
touch COMMAND$CAMERA
tail -f COMMAND$CAMERA | $CAMERA_PATH/ExF1Ctrl $CAMERA >> LOG$CAMERA &
sleep 2
echo ${!C} >> COMMAND$CAMERA #zapise prikazy pri inicializaci
sleep 2
if [ `eval $CHECK` -eq 0 ]
then
echo Reloading camera $CAMERA
$CAMERA_PATH/ExF1Ctrl $CAMERA r
sleep 5
continue
fi
# tail -f -n1 LOG$CAMERA &
break #ale pouze v pripade ze je to bez chyb
done
}
wait_for_init()
{
for CAMERA in `seq $N_CAM`
do
echo Waiting calibration $CAMERA
for i in `seq 60`
do
if [ `cat STATUS_$CAMERA` -eq 0 ]
then
tail -f COMMAND >> COMMAND$CAMERA &
echo CAMERA $CAMERA READY
break
fi
echo -en "$i\r"
sleep 1
done
if [ $i -eq 60 ]
then
echo INIT FAILED !!!
exit
fi
done
}
echo Waiting for initial signal
# nc -l -p $PORT #wait for tomography shot signal
echo SERVER CAMERA START INIT `date`
N_CAM=`usb-devices | grep "Vendor=07cf ProdID=1023" | wc -l` #!!!!!!!! NEJAK ZASLAT NA SERVER SVOBODOVI SIGN�L POKUD CHYB�
echo Pocet pripojenych fotaku $N_CAM
rm COMMAND
touch COMMAND
if [ $N_CAM -eq 0 ]
then
echo NO CAMERA !!!
exit
else
echo CEKAM NA FOTAKY
sleep 10
N_CAM=`usb-devices | grep "Vendor=07cf ProdID=1023" | wc -l` #!!!!!!!! NEJAK ZASLAT NA SERVER SVOBODOVI SIGN�L POKUD CHYB�
for CAMERA in `seq $N_CAM`
do
initialize &
done
sleep 2
echo CALIBRATION CAM $CAMERA
wait_for_init
echo CALIBRATION DONE !!!!!
fi
# SHOT=0
while [ 1 ]
do
echo 0 > ERROR
echo 0 > READY-$SHOT
echo "Waiting for trigger"
SHOT=`nc -l -p $PORT2`
echo SHOT $SHOT
# let SHOT=$SHOT+1
if [ $SHOT -eq 0 ]
then
echo Konec relace !!!
break
fi
rm $SHOT-1.MOV $SHOT-2.MOV 2> /dev/null
echo TRIGGER ShotNo $SHOT
sleep 15 # 14 #trigger je 10s pred vystrelem
#===================================
echo "m 10 $SHOT" >> COMMAND # bere data 5s !!!
#===================================
echo Waiting for movie from camera
for i in `seq 20`
do
if [ -e $SHOT-1.MOV ]
then
#SIZE_0=0
#SIZE=`ls -l $SHOT-1.MOV | tr -s " " | cut -d " " -f 5`
#while [ ! $SIZE -eq $SIZE_0 ]
#do
#SIZE_0=SIZE
#SIZE=`ls -l $SHOT-1.MOV | tr -s " " | cut -d " " -f 5`
#sleep 1
#done
break
fi
if [ `cat ERROR ` -eq 1 ]
then
echo "Byl tam error"
break
fi
echo -en "$i\r"
echo cekam
sleep 2
done
#sleep 8
sleep 12 # bug fix !!!
for CAMERA in `seq $N_CAM`
do
finalize &
echo 0 > READY-$SHOT
done
#reconstruct &
./CAMERA_TOMO.sh $SHOT >> TOMO_LOG &
echo DONE
sleep 5
N_USB=`usb-devices | grep "Vendor=07cf ProdID=1023" | wc -l`
CAMERA=""
N_CTRL=`eval $CHECK`
# echo '$N_USB $N_CTRL' $N_USB $N_CTRL
if [ $N_USB -eq 0 ]
then
echo NO CAMERA, => konec
exit
fi
if [ ! $N_USB -eq $N_CTRL ]
then
echo Zmizel nebo pribyl nejaky fotak pocet:
echo pocet USB $N_USB
echo pocet CTRL $N_CTRL
for CAMERA in `seq $N_CAM`
do
if [ `eval $CHECK` -eq 0 ]
then
echo Reloading camera $CAMERA ================
#!!! když tam pribude nejaky fotak je potreba restartova tcely tento program !!! ale pozor, az to dodela ty veci na pozadi !!!
$CAMERA_PATH/ExF1Ctrl $CAMERA r & #reload
sleep 20
if [ `eval $CHECK` -eq 0 ]
then
PID=`eval $GETPID`
kill $PID
fi
initialize
wait_for_init
echo =========================================
if [ `eval $CHECK` -eq 0 ]
then
echo restart nefunguje !!!!!!!!
exit
else
echo restart asi pomohl
fi
fi
done
#echo 1 > ERROR
fi
done
#echo KONCIM ....
#echo -e "q\n" >> COMMAND #ukonceni
#sleep 5
#echo =================================
#1;1Atail LOG1
#echo =================================
#tail LOG2
#echo =================================
#echo EXIT >> LOG1
#echo EXIT >> LOG2
#killall ExF1Ctrl;
#killall tail;