grab.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. #!/bin/bash
  2. PCI=$(which pci)
  3. NAME=bench.out
  4. TIMEOUT=100000
  5. SLEEP_VAL=0.0003 #in s
  6. DURATION=1 #in s
  7. DMA_DEFAULT_TIMEOUT=0.004 #in s
  8. # BAR=`pci -i | grep "BAR 0" | awk '{print $6}' | cut -c -6` # it was -4 for cut, uros
  9. function set_frame_rate () {
  10. # change the dma timeout and wait period btw frames
  11. local val=$1
  12. local dma_val=$(echo "scale=0; 1000000000/(4*$val) + 100000 "|bc)
  13. val=$(echo "scale=0; 1000000000/(8*($val+1))"|bc) #+1 for rounding error
  14. val=$(echo "ibase=10;obase=16; $val"|bc)
  15. dma_val=$(echo "ibase=10;obase=16; $dma_val"|bc)
  16. pci -w 9180 $val
  17. sleep $SLEEP_VAL
  18. pci -w 64 $dma_val
  19. sleep $SLEEP_VAL
  20. }
  21. function set_num_frames () {
  22. local val=$1
  23. if [ -n "$val" ];then
  24. val=$(echo "ibase=10;obase=16; $val"|bc)
  25. pci -w 9170 $val
  26. fi
  27. }
  28. function single_frame () {
  29. echo "Single frame"
  30. if [ -f $NAME ]; then
  31. rm $NAME
  32. fi
  33. pci -w 9040 80000209
  34. sleep $SLEEP_VAL
  35. pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
  36. sleep $SLEEP_VAL
  37. pci -w 9040 80000201
  38. }
  39. function stimuli () {
  40. echo "perform stimuli"
  41. sleep $SLEEP_VAL
  42. if [ -f $NAME ]; then
  43. rm $NAME
  44. fi
  45. #write number of frames
  46. sleep $SLEEP_VAL
  47. # start stimuli
  48. pci -w 9040 80000211
  49. sleep $SLEEP_VAL
  50. pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
  51. sleep $SLEEP_VAL
  52. pci -w 9040 80000201
  53. # stop stimuli, keep readout active
  54. # pci -w 9040 80000201
  55. }
  56. function stream_active () {
  57. if [ "$EDGE" ]; then
  58. pci -w 0x9040 80008a01
  59. # for edge no need to sleep long
  60. sleep $SLEEP_VAL
  61. pci -w 0x9040 80000201
  62. else
  63. pci -w 0x9040 80000a01
  64. sleep $DURATION
  65. pci -w 0x9040 80000201
  66. fi
  67. }
  68. function stream () {
  69. echo "Stream"
  70. if [ -f $NAME ]; then
  71. rm $NAME
  72. fi
  73. stream_active &
  74. sleep $SLEEP_VAL
  75. pci -r dma0 --multipacket -o $NAME -t $TIMEOUT
  76. sleep $SLEEP_VAL
  77. }
  78. function print_help () {
  79. echo -e ""
  80. echo "Usage: grab.sh [--help] [--single] [--edge] [--stimuli] [--stream] [--timeout=] [--num-frames=] [--name=] [--decode=] [--duration=] [--frame-rate=]"
  81. echo -e "order of options is not important"
  82. echo -e ""
  83. echo -e "\e[33m --help: \033[1;m print this message and exit"
  84. echo -e "\e[33m --single: \033[1;m takes single frame"
  85. echo -e "\e[33m --stimuli: \033[1;m take frames with stimuli, default one frame"
  86. echo -e "\e[33m --stream: \033[1;m takes frames with software trigger"
  87. echo -e "\e[33m --decode: \033[1;m decode frame, place ipedec flags within quotes"
  88. echo -e "\e[33m --edge: \033[1;m takes frames on edge software trigger, use only with --stream flag"
  89. echo -e "\e[33m --timeout: \033[1;m set DMA timeout in us, default 100.000 us"
  90. echo -e "\e[33m --name: \033[1;m set name, default bench.out"
  91. echo -e "\e[33m--num-frames: \033[1;m number of frames for stimuli, use only with --stimuli flag"
  92. echo -e "\e[33m --duration: \033[1;m set streaming duration in s, default 1s"
  93. # echo -e "\e[33m--frame-rate: \033[1;m set frame rate in fps, use with --stimuli or --stream flag"
  94. echo -e "\nExample:"
  95. echo -e "grab.sh --single --name=test.out ; --> takes single frame, saved as test.out"
  96. echo -e "\nWrong:"
  97. echo -e "grab.sh --edge "
  98. echo -e "grab.sh --single --stimuli "
  99. }
  100. input=$@
  101. for i in "$@"; do
  102. case $i in
  103. --help)
  104. SHOW_USAGE=YES
  105. shift
  106. ;;
  107. --single)
  108. SINGLE=YES
  109. shift
  110. ;;
  111. --stimuli)
  112. MULTI=YES
  113. shift
  114. ;;
  115. --stream)
  116. STREAM=YES
  117. shift
  118. ;;
  119. --edge)
  120. EDGE=YES
  121. shift
  122. ;;
  123. --name=*)
  124. NAME="${i#*=}"
  125. shift
  126. ;;
  127. --decode=*)
  128. DECODE=YES
  129. DCD_FLAGS="${i#*=}"
  130. shift
  131. ;;
  132. --num-frames=*)
  133. SET_NUM_FRAMES=YES
  134. NUM_FRAMES="${i#*=}"
  135. shift
  136. ;;
  137. --duration=*)
  138. DURATION="${i#*=}"
  139. shift
  140. ;;
  141. --timeout=*)
  142. TIMEOUT="${i#*=}"
  143. shift
  144. ;;
  145. # --frame-rate=*)
  146. # SET_RATE=YES
  147. # FRAME_RATE="${i#*=}"
  148. # shift
  149. # ;;
  150. *)
  151. WRONG=YES
  152. shift
  153. ;;
  154. esac
  155. done
  156. if [ -z "$input" ]; then
  157. echo "Usage: grab.sh [--help] [--single] [--edge] [--stimuli] [--stream] [--timeout=] [--num-frames=] [--name=] [--decode=] [--duration=] [--frame-rate=]"
  158. exit 0
  159. fi
  160. if [ "$SINGLE" ]; then
  161. if [ "$MULTI" ]; then
  162. WRONG=YES
  163. elif [ "$STREAM" ]; then
  164. WRONG=YES
  165. fi
  166. elif [ "$MULTI" ]; then
  167. if [ "$STREAM" ]; then
  168. WRONG=YES
  169. fi
  170. fi
  171. if [ "$WRONG" ]; then
  172. echo -e ""
  173. echo -e "\e[101m !!!WRONG ARGUMENT!!!, check grab.sh --help \033[1;m"
  174. echo -e ""
  175. exit
  176. fi
  177. if [ "$SHOW_USAGE" ]; then
  178. print_help
  179. exit 0
  180. fi
  181. # if [ "$SET_RATE" ]; then
  182. # set_frame_rate $FRAME_RATE
  183. # else
  184. # # set default wai btw frames
  185. # sleep $SLEEP_VAL
  186. # pci -w 9180 280
  187. # sleep $SLEEP_VAL
  188. # # set default dma timeout (4ms)
  189. # pci -w 64 F4240
  190. # sleep $SLEEP_VAL
  191. # fi
  192. if [ "$SET_NUM_FRAMES" ]; then
  193. set_num_frames $NUM_FRAMES
  194. else
  195. # set default reg value
  196. sleep $SLEEP_VAL
  197. pci -w 9170 1
  198. sleep $SLEEP_VAL
  199. fi
  200. if [ "$EDGE" ]; then
  201. if [ -z "$STREAM" ]; then
  202. echo -e "\e[31m--edge is used only with --stream flag \033[1;m"
  203. exit 0
  204. fi
  205. fi
  206. if [ "$SINGLE" ]; then
  207. single_frame
  208. if [ "$DECODE" ]; then
  209. ipedec $DCD_FLAGS $NAME
  210. fi
  211. exit 0
  212. fi
  213. if [ "$MULTI" ]; then
  214. stimuli
  215. sleep $SLEEP_VAL
  216. if [ "$DECODE" ]; then
  217. echo "here"
  218. ipedec $DCD_FLAGS $NAME
  219. fi
  220. exit 0
  221. fi
  222. if [ "$STREAM" ]; then
  223. stream
  224. sleep $SLEEP_VAL
  225. if [ "$DECODE" ]; then
  226. ipedec $DCD_FLAGS $NAME
  227. fi
  228. exit 0
  229. fi