#!/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 80008a01 # for edge no need to sleep long sleep $SLEEP_VAL pci -w 0x9040 80000201 else pci -w 0x9040 80000a01 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