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