Skip to content

Commit

Permalink
WIP: cleanup #3 of the decode_daemon by fixing decode mode decision l…
Browse files Browse the repository at this point in the history
…ogic
  • Loading branch information
rrobinett committed Sep 13, 2021
1 parent 8a1e123 commit ff77ea3
Showing 1 changed file with 51 additions and 52 deletions.
103 changes: 51 additions & 52 deletions decoding.sh
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ function setup_signal_levels_log_file() {
printf "${date_str}: %20s %-55s %-55s %-55s FFT\n" "" "${pre_tx_header}" "${tx_header}" "${post_tx_header}" > ${local_signal_levels_log_file}
printf "${date_str}: %s %s %s\n" "${field_descriptions}" "${field_descriptions}" "${field_descriptions}" >> ${local_signal_levels_log_file}

wd_logger 1 "Setup header line in a new Signal Level log file '${local_signal_level_log_file}'"
wd_logger 1 "Setup header line in a new Signal Level log file '${local_signal_levels_log_file}'"
return 0
}

Expand Down Expand Up @@ -189,9 +189,9 @@ function decoding_daemon()
get_wav_file_list mode_seconds_files ${receiver_name} ${receiver_band} ${receiver_modes}
local ret_code=$?
if [[ ${ret_code} -ne 0 ]]; then
wd_logger 1 "Error ${ret_code} returned by 'get_wav_file_list mode_wav_file_list ${receiver_name} ${receiver_band} ${receiver_modes}'. 'sleep 1' and retry"
sleep 1
continue
wd_logger 1 "Error ${ret_code} returned by 'get_wav_file_list mode_wav_file_list ${receiver_name} ${receiver_band} ${receiver_modes}'. 'sleep 1' and retry"
sleep 1
continue
fi
local -a mode_wav_file_list=(${mode_seconds_files})
wd_logger 1 "The call 'get_wav_file_list mode_wav_file_list ${receiver_name} ${receiver_band} ${receiver_modes}' returned '${mode_wav_file_list[*]}'"
Expand All @@ -200,64 +200,63 @@ function decoding_daemon()
local returned_files
for returned_files in ${mode_wav_file_list[@]}; do
local returned_seconds=${returned_files%:*}
local returned_minutes=$(( returned_seconds / 60 ))
local comma_seperated_files=${returned_files#*:}
local wav_files=${comma_seperated_files//,/ }
local wav_file_list=( ${wav_files} )
wd_logger 1 "For WSPR packets of length ${returned_seconds} seconds, got list of files ${comma_seperated_files}. 'sleep 2'"
sleep 2
wd_logger 1 "For WSPR packets of length ${returned_seconds} seconds, got list of files ${comma_seperated_files}"

local wsprd_input_filename="${wav_file_list[0]:2:6}_${wav_file_list[0]:9:4}.wav"
local wav_file_freq_hz=${wav_file_list[0]#*_} ### Remove the year/date/time
wav_file_freq_hz=${wav_file_freq_hz%_*} ### Remove the _usb.wav
wav_file_freq_hz=${wav_file_freq_hz%_*} ### Remove the _usb.wav

local decode_mode
for decode_mode in ${receiver_modes_list[@]}; do
local decode_dir=${decode_mode}_${returned_seconds}
local processed_wav_files="no"
if [[ " ${receiver_modes_list[*]} " =~ " W${returned_minutes} " ]]; then
local decode_dir="W_${returned_seconds}"
mkdir -p ${decode_dir}
sox ${wav_file_list[@]} ${decode_dir}/${wsprd_input_filename} ### TODO: don't make so many copies and perhaps use list of files as input to jt9

wd_logger 1 "See if decoding of mode ${decode_mode:0:1} is configured for WSPR packets of length ${returned_seconds} seconds from files '${comma_seperated_files}'"
case ${decode_mode:0:1} in
W )
if [[ ${returned_seconds} -eq 120 ]] || [[ ${returned_seconds} -eq 900 ]] ; then
wd_logger 1 "Decode ${returned_seconds} second WSPR mode spots in wav files '${comma_seperated_files}' by combining them into one wav file '${wsprd_input_filename}' to be processed by 'wsprd'"

cd ${decode_dir}
local start_time=${SECONDS}
decode_wpsr_wav_file ${wsprd_input_filename} ${wav_file_freq_hz} ${rx_khz_offset} wsprd_stdout.txt
local ret_code=$?
rm ${wsprd_input_filename}
cd - >& /dev/null
if [[ ${ret_code} -ne 0 ]]; then
wd_logger 1 "ERROR: After $(( SECONDS - start_time )) seconds. For mode ${decode_mode}: 'decode_wpsr_wav_file ${wsprd_input_filename} ${wav_file_freq_hz} ${rx_khz_offset} wsprd_stdout.txt' => ${ret_code}"
else
wd_logger 1 "After $(( SECONDS - start_time )) seconds: For mode ${decode_mode}: command 'decode_wpsr_wav_file ${wsprd_input_filename} wsprd_stdout.txt' decoded: $(cat ${decode_dir}/wsprd_stdout.txt)"
fi
else
wd_logger 1 "Config file specifed WSPR decode of a ${returned_seconds} second wav file. This is not a valid WSPR packet length"
fi
;;
F )
wd_logger 1 "Files of ${returned_seconds} will be processed by cmd: '${JT9_CMD} -p ${returned_seconds} --fst4w ${wav_files}'"

cd ${decode_dir}
local start_time=${SECONDS}
${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt
local ret_code=$?
rm ${wsprd_input_filename}
cd - >& /dev/null
if [[ ${ret_code} -eq 0 ]]; then
wd_logger 1 "After $(( SECONDS - start_time )) seconds: cmd '${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt' printed $(cat ${decode_dir}/jt9_output.txt)"
else
wd_logger 1 "After $(( SECONDS - start_time )) seconds: ERROR: cmd '${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt' => ${ret_code} and printed $(cat jt9_output.txt)"
fi
;;
* )
wd_logger 1 "Invalid mode ${decode_mode} was specified in the the config file"
;;
esac
done
wd_logger 1 "Processed files '${wav_files}' for WSPR packet of length ${returned_seconds} seconds"
wd_logger 1 "Decode ${returned_seconds} second WSPR mode spots in wav files '${comma_seperated_files}' by combining them into one wav file '${wsprd_input_filename}' to be processed by 'wsprd'"

cd ${decode_dir}
local start_time=${SECONDS}
decode_wpsr_wav_file ${wsprd_input_filename} ${wav_file_freq_hz} ${rx_khz_offset} wsprd_stdout.txt
local ret_code=$?
rm ${wsprd_input_filename}
cd - >& /dev/null
if [[ ${ret_code} -ne 0 ]]; then
wd_logger 1 "ERROR: After $(( SECONDS - start_time )) seconds. For mode W_${returned_seconds}: 'decode_wpsr_wav_file ${wsprd_input_filename} ${wav_file_freq_hz} ${rx_khz_offset} wsprd_stdout.txt' => ${ret_code}"
else
wd_logger 1 "After $(( SECONDS - start_time )) seconds: For mode W_${returned_seconds}: command 'decode_wpsr_wav_file ${wsprd_input_filename} wsprd_stdout.txt' decoded: $(cat ${decode_dir}/wsprd_stdout.txt)"
fi
processed_wav_files="yes"
fi
if [[ " ${receiver_modes_list[*]} " =~ " F${returned_minutes} " ]]; then
wd_logger 1 "Files of ${returned_seconds} will be processed by cmd: '${JT9_CMD} -p ${returned_seconds} --fst4w ${wav_files}'"

local decode_dir="F_${returned_seconds}"
mkdir -p ${decode_dir}
sox ${wav_file_list[@]} ${decode_dir}/${wsprd_input_filename} ### TODO: don't make so many copies and perhaps use list of files as input to jt9
cd ${decode_dir}
set -x
local start_time=${SECONDS}
${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt
local ret_code=$?
rm ${wsprd_input_filename}
cd - >& /dev/null
set +x
if [[ ${ret_code} -eq 0 ]]; then
wd_logger 1 "After $(( SECONDS - start_time )) seconds: cmd '${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt' printed $(cat ${decode_dir}/jt9_output.txt)"
else
wd_logger 1 "After $(( SECONDS - start_time )) seconds: ERROR: cmd '${JT9_CMD} -p ${returned_seconds} --fst4w ${wsprd_input_filename} >& jt9_output.txt' => ${ret_code} and printed $(cat jt9_output.txt)"
fi
processed_wav_files="yes"
fi
if [[ ${processed_wav_files} == "no" ]]; then
wd_logger 1 "ERROR: created a wav file of ${returned_seconds}, but the conf file didn't specify a mode for that length"
else
wd_logger 1 "Processed files '${wav_files}' for WSPR packet of length ${returned_seconds} seconds"
fi
done
sleep 1
done
Expand Down

0 comments on commit ff77ea3

Please sign in to comment.