diff --git a/decoding.sh b/decoding.sh index d87f7ec..c20ec8c 100644 --- a/decoding.sh +++ b/decoding.sh @@ -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 } @@ -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[*]}'" @@ -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