123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #!/bin/bash
- PCI=$(which pci)
- NAME=bench.out
- TIMEOUT=100000
- SLEEP_VAL=0.0003 #in s
- DURATION=1 #in s
- DMA_DEFAULT_TIMEOUT=0.004 #in s
- # BAR=`pci -i | grep "BAR 0" | awk '{print $6}' | cut -c -6` # it was -4 for cut, uros
- function set_frame_rate () {
- # change the dma timeout and wait period btw frames
- local val=$1
- local dma_val=$(echo "scale=0; 1000000000/(4*$val) + 100000 "|bc)
- val=$(echo "scale=0; 1000000000/(8*($val+1))"|bc) #+1 for rounding error
- val=$(echo "ibase=10;obase=16; $val"|bc)
- dma_val=$(echo "ibase=10;obase=16; $dma_val"|bc)
- pci -w 9180 $val
- sleep $SLEEP_VAL
- pci -w 64 $dma_val
- sleep $SLEEP_VAL
- }
- function set_num_frames () {
- local val=$1
- if [ -n "$val" ];then
- val=$(echo "ibase=10;obase=16; $val"|bc)
- pci -w 9170 $val
- fi
- }
- function single_frame () {
- echo "Single frame"
- if [ -f $NAME ]; then
- rm $NAME
- fi
- pci -w 9040 80000209
- sleep $SLEEP_VAL
- pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
- sleep $SLEEP_VAL
- pci -w 9040 80000201
- }
- function stimuli () {
- echo "perform stimuli"
- sleep $SLEEP_VAL
- if [ -f $NAME ]; then
- rm $NAME
- fi
- #write number of frames
- sleep $SLEEP_VAL
- # start stimuli
- pci -w 9040 80000211
- sleep $SLEEP_VAL
- pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
- sleep $SLEEP_VAL
- pci -w 9040 80000201
- # stop stimuli, keep readout active
- # pci -w 9040 80000201
- }
- function stream_active () {
- if [ "$EDGE" ]; then
- pci -w 0x9040 8000ca01
- # for edge no need to sleep long
- sleep $SLEEP_VAL
- pci -w 0x9040 80000201
- else
- pci -w 0x9040 80004a01
- sleep $DURATION
- pci -w 0x9040 80000201
- fi
- }
- function stream () {
- echo "Stream"
- if [ -f $NAME ]; then
- rm $NAME
- fi
- stream_active &
- sleep $SLEEP_VAL
- pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
- sleep $SLEEP_VAL
- }
- function print_help () {
- echo -e ""
- echo "Usage: grab.sh [--help] [--single] [--edge] [--stimuli] [--stream] [--timeout=] [--num-frames=] [--name=] [--decode=] [--duration=] [--frame-rate=]"
- echo -e "order of options is not important"
- echo -e ""
- echo -e "\e[33m --help: \033[1;m print this message and exit"
- echo -e "\e[33m --single: \033[1;m takes single frame"
- echo -e "\e[33m --stimuli: \033[1;m take frames with stimuli, default one frame"
- echo -e "\e[33m --stream: \033[1;m takes frames with software trigger"
- echo -e "\e[33m --decode: \033[1;m decode frame, place ipedec flags within quotes"
- echo -e "\e[33m --edge: \033[1;m takes frames on edge software trigger, use only with --stream flag"
- echo -e "\e[33m --timeout: \033[1;m set DMA timeout in us, default 100.000 us"
- echo -e "\e[33m --name: \033[1;m set name, default bench.out"
- echo -e "\e[33m--num-frames: \033[1;m number of frames for stimuli, use only with --stimuli flag"
- echo -e "\e[33m --duration: \033[1;m set streaming duration in s, default 1s"
- # echo -e "\e[33m--frame-rate: \033[1;m set frame rate in fps, use with --stimuli or --stream flag"
- echo -e "\nExample:"
- echo -e "grab.sh --single --name=test.out ; --> takes single frame, saved as test.out"
- echo -e "\nWrong:"
- echo -e "grab.sh --edge "
- echo -e "grab.sh --single --stimuli "
- }
- input=$@
- for i in "$@"; do
- case $i in
- --help)
- SHOW_USAGE=YES
- shift
- ;;
- --single)
- SINGLE=YES
- shift
- ;;
- --stimuli)
- MULTI=YES
- shift
- ;;
- --stream)
- STREAM=YES
- shift
- ;;
- --edge)
- EDGE=YES
- shift
- ;;
- --name=*)
- NAME="${i#*=}"
- shift
- ;;
- --decode=*)
- DECODE=YES
- DCD_FLAGS="${i#*=}"
- shift
- ;;
- --num-frames=*)
- SET_NUM_FRAMES=YES
- NUM_FRAMES="${i#*=}"
- shift
- ;;
- --duration=*)
- DURATION="${i#*=}"
- shift
- ;;
- --timeout=*)
- TIMEOUT="${i#*=}"
- shift
- ;;
- # --frame-rate=*)
- # SET_RATE=YES
- # FRAME_RATE="${i#*=}"
- # shift
- # ;;
- *)
- WRONG=YES
- shift
- ;;
- esac
- done
- if [ -z "$input" ]; then
- echo "Usage: grab.sh [--help] [--single] [--edge] [--stimuli] [--stream] [--timeout=] [--num-frames=] [--name=] [--decode=] [--duration=] [--frame-rate=]"
- exit 0
- fi
- if [ "$SINGLE" ]; then
- if [ "$MULTI" ]; then
- WRONG=YES
- elif [ "$STREAM" ]; then
- WRONG=YES
- fi
- elif [ "$MULTI" ]; then
- if [ "$STREAM" ]; then
- WRONG=YES
- fi
- fi
- if [ "$WRONG" ]; then
- echo -e ""
- echo -e "\e[101m !!!WRONG ARGUMENT!!!, check grab.sh --help \033[1;m"
- echo -e ""
- exit
- fi
- if [ "$SHOW_USAGE" ]; then
- print_help
- exit 0
- fi
- # if [ "$SET_RATE" ]; then
- # set_frame_rate $FRAME_RATE
- # else
- # # set default wai btw frames
- # sleep $SLEEP_VAL
- # pci -w 9180 280
- # sleep $SLEEP_VAL
- # # set default dma timeout (4ms)
- # pci -w 64 F4240
- # sleep $SLEEP_VAL
- # fi
- if [ "$SET_NUM_FRAMES" ]; then
- set_num_frames $NUM_FRAMES
- else
- # set default reg value
- sleep $SLEEP_VAL
- pci -w 9170 1
- sleep $SLEEP_VAL
- fi
- if [ "$EDGE" ]; then
- if [ -z "$STREAM" ]; then
- echo -e "\e[31m--edge is used only with --stream flag \033[1;m"
- exit 0
- fi
- fi
- if [ "$SINGLE" ]; then
- single_frame
- if [ "$DECODE" ]; then
- ipedec $DCD_FLAGS $NAME
- fi
- exit 0
- fi
- if [ "$MULTI" ]; then
- stimuli
- sleep $SLEEP_VAL
- if [ "$DECODE" ]; then
- echo "here"
- ipedec $DCD_FLAGS $NAME
- fi
- exit 0
- fi
- if [ "$STREAM" ]; then
- stream
- sleep $SLEEP_VAL
- if [ "$DECODE" ]; then
- ipedec $DCD_FLAGS $NAME
- fi
- exit 0
- fi
|