Loading shoot.sh +31 −55 Original line number Diff line number Diff line Loading @@ -13,17 +13,10 @@ set -o pipefail # fail if any command in pipeline fails [ -p data_to_camera ] || mkfifo data_to_camera #{ for f in commands/*; do cat "$f"; sleep 4; done } | nc 192.168.42.1 7878 #{ # for i in $(seq 1 110); do # echo -n '{"rval":0,"msg_id":257,"param":2}{"rval":0,"msg_id":261,"param":"b6291d832eb3cbd92c724f32437e95c3","update":0}' | cut -c $i # sleep 0.05; # done # #} | { get_JSON() { RESPONSE='' OPEN_BRACKETS=0 while read -n1 char; do #echo -n $char >&2 Loading @@ -36,9 +29,12 @@ get_JSON() { OPEN_BRACKETS=$(expr $OPEN_BRACKETS - 1 || true) if [ $OPEN_BRACKETS -eq 0 ]; then echo "Received JSON: $RESPONSE" >&2 # TODO: assert contains '"rval":0' echo "$RESPONSE" RESPONSE='' # Assert the response contains '"rval":0' echo "$RESPONSE" | grep '"rval":0' >/dev/null || { echo 'Error: non-zero return value' >&2 false } break fi fi Loading @@ -48,98 +44,78 @@ get_JSON() { commander() { RESPONSE='' OPEN_BRACKETS=0 # 01 Request a token/session id echo '{"msg_id":257,"token":0}' TOKEN="$(get_JSON | sed 's/.*"param":\([0-9][0-9]*\).*/\1/')" echo '{"msg_id":257,"token":0}' && get_JSON TOKEN="$(echo \"$RESPONSE\" | sed 's/.*"param":\([0-9][0-9]*\).*/\1/')" # TODO: assert is numeric # 02 get SN #echo '{"msg_id":4097,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4097,"token":'$TOKEN'}' && get_JSON # 03 Get network config #echo '{"msg_id":1539,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1539,"token":'$TOKEN'}' && get_JSON # 04 maybe start streaming? or sth with SW update? # result: {"rval":0,"msg_id":261,"param":"b6291d832eb3cbd92c724f32437e95c3","update":0} #echo '{"param":"192.168.42.3","type":"TCP","msg_id":261,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"192.168.42.3","type":"TCP","msg_id":261,"token":'$TOKEN'}' && get_JSON # 05 Get camera settings #echo '{"msg_id":4365,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4365,"token":'$TOKEN'}' && get_JSON # 06 set time? mkdir+cd? #echo '{"param":"2019-04-17-16-42-19-3","msg_id":6147,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"2019-04-17-16-42-19-3","msg_id":6147,"token":'$TOKEN'}' && get_JSON # 07 get sd status #echo '{"msg_id":4358,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4358,"token":'$TOKEN'}' && get_JSON # 08 get camera settings + SW/HW info # result: {"rval":0,"msg_id":4364,"v_res":0,"loop":0,"p_res":3,"video_wb":0,"video_ev":0,"video_iso":0,"video_shutter":0,"still_wb":1,"still_ev":0,"still_iso":50,"still_shutter":33008,"buzzer":0,"standby_en":1,"standby_time":2,"poweroff_en":1,"poweroff_time":10,"cam_jpg":524,"cam_mp4":1,"battery":4,"led":1,"sn":"15908/00014363","product":"MJXJ-014363","ver":"1.3.104.110.5.17151;0.7.0.3.0.0.0.3;1.43.1.10.17012;1","md5":"b6291d832eb3cbd92c724f32437e95c3"} #echo '{"msg_id":4364,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4364,"token":'$TOKEN'}' && get_JSON # 09 set path #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 10 set path (again?) #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 11 set path 2 # result: {"rval":0,"msg_id":1283,"pwd":"/tmp/SD0/DCIM/20190417"} #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 12 get files in current directory # result: {"rval":0,"msg_id":1282,"listing":[{"IMG_20190417_164222.JPG":"2019-04-1716:42:26"},{"IMG_20190417_164222.DNG":"2019-04-1716:42:26"},{"IMG_20190417_164224.JPG":"2019-04-1716:42:28"},{"IMG_20190417_164224.DNG":"2019-04-1716:42:28"}]} #echo '{"msg_id":1282,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1282,"token":'$TOKEN'}' && get_JSON # 13 set path #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 14 get files #echo '{"msg_id":1282,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1282,"token":'$TOKEN'}' && get_JSON # 15 SHOOT! # result: {"rval":0,"msg_id":4864} #echo '{"msg_id":4864,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" echo '{"msg_id":4864,"token":'$TOKEN'}' && get_JSON # 16 get file properties (size, resolution, ...) # result: {"rval":0,"msg_id":1026,"size":2158173,"date":"2019-04-1716:50:11","resolution":"6912x3456","media_type":"img","scene_type":22868,"gyro":"0de17fbf09b532b922b9fbbc09b532b9f8fb7fbfe7b1353c22b9fbbce7b1353c05dd7f3f"} #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","msg_id":1026,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","msg_id":1026,"token":'$TOKEN'}' && get_JSON # 17 give me or generate thumbnail (hangs) #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","type":"thumb","msg_id":1025,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","type":"thumb","msg_id":1025,"token":'$TOKEN'}' && get_JSON # 18 ??? # result: {"rval":0,"msg_id":6154} echo '{"msg_id":6154,"token":'$TOKEN'}' DUMMY="$(get_JSON)" exit #echo '{"msg_id":6154,"token":'$TOKEN'}' && get_JSON # 19 ??? echo '{"msg_id":6154,"token":'$TOKEN'}' DUMMY="$(get_JSON)" #echo '{"msg_id":6154,"token":'$TOKEN'}' && get_JSON } # Do it... nc -v "$HOSTNAME" "$PORT" 0<data_to_camera | commander 1>data_to_camera || ( nc -v "$HOSTNAME" "$PORT" 0<data_to_camera | commander | tee data_to_camera || ( # TODO: handle known errors? (e.g. connection refused) echo Error $?; false ) Loading Loading
shoot.sh +31 −55 Original line number Diff line number Diff line Loading @@ -13,17 +13,10 @@ set -o pipefail # fail if any command in pipeline fails [ -p data_to_camera ] || mkfifo data_to_camera #{ for f in commands/*; do cat "$f"; sleep 4; done } | nc 192.168.42.1 7878 #{ # for i in $(seq 1 110); do # echo -n '{"rval":0,"msg_id":257,"param":2}{"rval":0,"msg_id":261,"param":"b6291d832eb3cbd92c724f32437e95c3","update":0}' | cut -c $i # sleep 0.05; # done # #} | { get_JSON() { RESPONSE='' OPEN_BRACKETS=0 while read -n1 char; do #echo -n $char >&2 Loading @@ -36,9 +29,12 @@ get_JSON() { OPEN_BRACKETS=$(expr $OPEN_BRACKETS - 1 || true) if [ $OPEN_BRACKETS -eq 0 ]; then echo "Received JSON: $RESPONSE" >&2 # TODO: assert contains '"rval":0' echo "$RESPONSE" RESPONSE='' # Assert the response contains '"rval":0' echo "$RESPONSE" | grep '"rval":0' >/dev/null || { echo 'Error: non-zero return value' >&2 false } break fi fi Loading @@ -48,98 +44,78 @@ get_JSON() { commander() { RESPONSE='' OPEN_BRACKETS=0 # 01 Request a token/session id echo '{"msg_id":257,"token":0}' TOKEN="$(get_JSON | sed 's/.*"param":\([0-9][0-9]*\).*/\1/')" echo '{"msg_id":257,"token":0}' && get_JSON TOKEN="$(echo \"$RESPONSE\" | sed 's/.*"param":\([0-9][0-9]*\).*/\1/')" # TODO: assert is numeric # 02 get SN #echo '{"msg_id":4097,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4097,"token":'$TOKEN'}' && get_JSON # 03 Get network config #echo '{"msg_id":1539,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1539,"token":'$TOKEN'}' && get_JSON # 04 maybe start streaming? or sth with SW update? # result: {"rval":0,"msg_id":261,"param":"b6291d832eb3cbd92c724f32437e95c3","update":0} #echo '{"param":"192.168.42.3","type":"TCP","msg_id":261,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"192.168.42.3","type":"TCP","msg_id":261,"token":'$TOKEN'}' && get_JSON # 05 Get camera settings #echo '{"msg_id":4365,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4365,"token":'$TOKEN'}' && get_JSON # 06 set time? mkdir+cd? #echo '{"param":"2019-04-17-16-42-19-3","msg_id":6147,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"2019-04-17-16-42-19-3","msg_id":6147,"token":'$TOKEN'}' && get_JSON # 07 get sd status #echo '{"msg_id":4358,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4358,"token":'$TOKEN'}' && get_JSON # 08 get camera settings + SW/HW info # result: {"rval":0,"msg_id":4364,"v_res":0,"loop":0,"p_res":3,"video_wb":0,"video_ev":0,"video_iso":0,"video_shutter":0,"still_wb":1,"still_ev":0,"still_iso":50,"still_shutter":33008,"buzzer":0,"standby_en":1,"standby_time":2,"poweroff_en":1,"poweroff_time":10,"cam_jpg":524,"cam_mp4":1,"battery":4,"led":1,"sn":"15908/00014363","product":"MJXJ-014363","ver":"1.3.104.110.5.17151;0.7.0.3.0.0.0.3;1.43.1.10.17012;1","md5":"b6291d832eb3cbd92c724f32437e95c3"} #echo '{"msg_id":4364,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":4364,"token":'$TOKEN'}' && get_JSON # 09 set path #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 10 set path (again?) #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 11 set path 2 # result: {"rval":0,"msg_id":1283,"pwd":"/tmp/SD0/DCIM/20190417"} #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 12 get files in current directory # result: {"rval":0,"msg_id":1282,"listing":[{"IMG_20190417_164222.JPG":"2019-04-1716:42:26"},{"IMG_20190417_164222.DNG":"2019-04-1716:42:26"},{"IMG_20190417_164224.JPG":"2019-04-1716:42:28"},{"IMG_20190417_164224.DNG":"2019-04-1716:42:28"}]} #echo '{"msg_id":1282,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1282,"token":'$TOKEN'}' && get_JSON # 13 set path #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/","msg_id":1283,"token":'$TOKEN'}' && get_JSON # 14 get files #echo '{"msg_id":1282,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"msg_id":1282,"token":'$TOKEN'}' && get_JSON # 15 SHOOT! # result: {"rval":0,"msg_id":4864} #echo '{"msg_id":4864,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" echo '{"msg_id":4864,"token":'$TOKEN'}' && get_JSON # 16 get file properties (size, resolution, ...) # result: {"rval":0,"msg_id":1026,"size":2158173,"date":"2019-04-1716:50:11","resolution":"6912x3456","media_type":"img","scene_type":22868,"gyro":"0de17fbf09b532b922b9fbbc09b532b9f8fb7fbfe7b1353c22b9fbbce7b1353c05dd7f3f"} #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","msg_id":1026,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","msg_id":1026,"token":'$TOKEN'}' && get_JSON # 17 give me or generate thumbnail (hangs) #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","type":"thumb","msg_id":1025,"token":'$TOKEN'}' #DUMMY="$(get_JSON)" #echo '{"param":"/tmp/SD0/DCIM/20190417/IMG_20190417_165017.JPG","type":"thumb","msg_id":1025,"token":'$TOKEN'}' && get_JSON # 18 ??? # result: {"rval":0,"msg_id":6154} echo '{"msg_id":6154,"token":'$TOKEN'}' DUMMY="$(get_JSON)" exit #echo '{"msg_id":6154,"token":'$TOKEN'}' && get_JSON # 19 ??? echo '{"msg_id":6154,"token":'$TOKEN'}' DUMMY="$(get_JSON)" #echo '{"msg_id":6154,"token":'$TOKEN'}' && get_JSON } # Do it... nc -v "$HOSTNAME" "$PORT" 0<data_to_camera | commander 1>data_to_camera || ( nc -v "$HOSTNAME" "$PORT" 0<data_to_camera | commander | tee data_to_camera || ( # TODO: handle known errors? (e.g. connection refused) echo Error $?; false ) Loading