From 78133f9b5592e7af84169018dd314c9061e532b9 Mon Sep 17 00:00:00 2001 From: Christoph Honal Date: Wed, 26 Feb 2020 02:30:58 +0100 Subject: [PATCH] Finally fix build --- Dockerfile | 31 +- README.md | 2 +- build/blocks/ccsds_ldpc_decoder.xml | 85 - build/blocks/ccsds_ldpc_encoder.xml | 85 - build/blocks/ccsds_message_info.xml | 48 - build/blocks/ccsds_output_counter_cc.xml | 35 - build/blocks/ccsds_randomiser_softbits.xml | 56 - build/blocks/ccsds_send_nanolink.xml | 17 - build/blocks/ccsds_soft_to_hard_message.xml | 17 - build/blocks/ccsds_softbit_msg_sink_f.xml | 29 - build/blocks/ccsds_softbit_msg_source_f.xml | 29 - build/blocks/ccsds_udp_source_rate_idle_b.xml | 100 - build/gnuradio/downlink.grc | 4975 +++++++++++++++++ build/gnuradio/downlink.py | 315 ++ build/run-cli.sh | 2 +- build/run-gui.sh | 2 +- scripts/{run-dev.sh => run-dev-cli.sh} | 0 scripts/run-dev-gui.sh | 10 + 18 files changed, 5318 insertions(+), 520 deletions(-) delete mode 100644 build/blocks/ccsds_ldpc_decoder.xml delete mode 100644 build/blocks/ccsds_ldpc_encoder.xml delete mode 100644 build/blocks/ccsds_message_info.xml delete mode 100644 build/blocks/ccsds_output_counter_cc.xml delete mode 100644 build/blocks/ccsds_randomiser_softbits.xml delete mode 100644 build/blocks/ccsds_send_nanolink.xml delete mode 100644 build/blocks/ccsds_soft_to_hard_message.xml delete mode 100644 build/blocks/ccsds_softbit_msg_sink_f.xml delete mode 100644 build/blocks/ccsds_softbit_msg_source_f.xml delete mode 100644 build/blocks/ccsds_udp_source_rate_idle_b.xml create mode 100644 build/gnuradio/downlink.grc create mode 100644 build/gnuradio/downlink.py rename scripts/{run-dev.sh => run-dev-cli.sh} (100%) create mode 100644 scripts/run-dev-gui.sh diff --git a/Dockerfile b/Dockerfile index 5277bcd..62fe5aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,22 +47,21 @@ WORKDIR /app/move2radio/build RUN cmake -DAPPIMAGE=OFF -DCONDA_ENV=OFF -DLDPC_OFFLINE=ON -DGR_CCSDS_OFFLINE=ON -DFEC_OFFLINE=ON -DOFFLINE_DEPENDENCY_PATH=/app/move2radio-prop .. && \ make move2radio -# # Run stage -# FROM base AS run -# ENV DEBIAN_FRONTEND=noninteractive TZ=Europe/Berlin +# Run stage +FROM base AS run +ENV DEBIAN_FRONTEND=noninteractive TZ=Europe/Berlin +ENV PATH="/app/move2radio/build/prefix/usr/bin:${PATH}" \ + PYTHONPATH="/app/move2radio/build/prefix/usr/lib/python2.7/dist-packages:${PYTHONPATH}" \ + LD_LIBRARY_PATH="/app/move2radio/build/prefix/usr/lib:${LD_LIBRARY_PATH}" -# # Copy sources from build stage -# COPY --from=build /app/move2radio/build/prefix/usr /app/move2radio/build/prefix/usr -# COPY --from=build /app/move2radio/AppDir/move-ii-gr /app/move2radio/AppDir/move-ii-gr -# ENV PATH="/app/move2radio/build/prefix/usr/bin:${PATH}" \ -# PYTHONPATH="/app/move2radio/build/prefix/usr/lib/python2.7/dist-packages:${PYTHONPATH}" \ -# LD_LIBRARY_PATH="/app/move2radio/build/prefix/usr/lib:${LD_LIBRARY_PATH}" +# Copy sources from build stage +COPY --from=build /app/move2radio/build/prefix/usr /app/move2radio/build/prefix/usr +COPY --from=build /app/move2radio/AppDir/move-ii-gr/AR4JA_r12_k1024n.a /app/gnuradio/ +COPY build/gnuradio/* /app/gnuradio/ -# # Install binaries -# # COPY build/blocks/* app/move2radio/build/prefix/usr/share/gnuradio/grc/blocks/ -# COPY build/fakeserver/* /app/fakeserver/ -# COPY build/run*.sh /app/ -# RUN chmod 644 app/move2radio/build/prefix/usr/share/gnuradio/grc/blocks/*.xml && \ -# chmod +x /app/run*.sh && ldconfig +# Install binaries +COPY build/fakeserver/* /app/fakeserver/ +COPY build/run*.sh /app/ +RUN chmod +x /app/run*.sh && ldconfig -# ENTRYPOINT ["/app/run-cli.sh"] \ No newline at end of file +ENTRYPOINT ["/app/run-cli.sh"] \ No newline at end of file diff --git a/README.md b/README.md index 12b9fe5..e71f68d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Starting the container without any arguments opens a shell into the container. Y The GUI container needs to know which X11 server to connect to, this can be configured using `docker run --env DISPLAY=host.docker.internal:0.0 ...` when using Docker Desktop for Windows or OS X. On Linux `host.docker.internal` cannot be resolved so there you have to use something like `$(docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}')` (The gateway address of the `docker0` bridge interface) or its IP address directly like `172.17.0.1`, but note that your configuration may differ. ## Development -Use the `scripts/*-dev.sh` to build and run the docker container for local development. The other scripts will download and run the precompiled image. +Use the `scripts/*-dev*.sh` to build and run the docker container for local development. The other scripts will download and run the precompiled image. The public docker image is built by the CI server using the `master` branch of this repository. Please use the `dev` branch for local development. diff --git a/build/blocks/ccsds_ldpc_decoder.xml b/build/blocks/ccsds_ldpc_decoder.xml deleted file mode 100644 index 6e2bf48..0000000 --- a/build/blocks/ccsds_ldpc_decoder.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - LDPC Decoder (CCSDS) - ccsds_ldpc_decoder - CCSDS/Channelcoding - import ccsds - ccsds.ldpc_decoder($par_file, $systype.fcn, $puncttype.fcn, $num_punct, tuple($punct_pos)) - - - Paritycheck matrix - par_file - file_open - - - Systematic - systype - ccsds.LDPC_SYS_FRONT - enum - - - - - - Puncturing position - puncttype - ccsds.LDPC_PUNCT_NONE - enum - - - - - - - Number of punctures - num_punct - 0 - int - - - Custom puncturing positions - punct_pos - [] - int_vector - - - $num_punct >= 0 - - - in - message - - - - out - message - - diff --git a/build/blocks/ccsds_ldpc_encoder.xml b/build/blocks/ccsds_ldpc_encoder.xml deleted file mode 100644 index 7a1a484..0000000 --- a/build/blocks/ccsds_ldpc_encoder.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - LDPC Encoder (CCSDS) - ccsds_ldpc_encoder - CCSDS/Channelcoding - import ccsds - ccsds.ldpc_encoder($gen_file, $systype.fcn, $puncttype.fcn, $num_punct, tuple($punct_pos)) - - - Generator matrix - gen_file - file_open - - - Systematic - systype - ccsds.LDPC_SYS_FRONT - enum - - - - - - Puncturing position - puncttype - ccsds.LDPC_PUNCT_NONE - enum - - - - - - - Number of punctures - num_punct - 0 - int - - - Custom puncturing positions - punct_pos - [] - int_vector - - - $num_punct >= 0 - - - in - message - - - - out - message - - diff --git a/build/blocks/ccsds_message_info.xml b/build/blocks/ccsds_message_info.xml deleted file mode 100644 index a2f739e..0000000 --- a/build/blocks/ccsds_message_info.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - message_info - ccsds_message_info - [ccsds] - import ccsds - ccsds.message_info($prefix, $mode) - - Prefix - prefix - "Message info: " - - - Mode - mode - 10 - enum - - - - - - in - message - - -Print out messages with a timestamp. - -Prefix: String that will be written before the data line(s) - -Modes: - - Silent: Do not write anything - - Compact: Write one line summary of the message - - Full: Write full content of the message - - diff --git a/build/blocks/ccsds_output_counter_cc.xml b/build/blocks/ccsds_output_counter_cc.xml deleted file mode 100644 index d583412..0000000 --- a/build/blocks/ccsds_output_counter_cc.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - Output rate counter - ccsds_output_counter_cc - [ccsds] - import ccsds - ccsds.output_counter_cc($block_length) - - Block size - block_length - 1024 - int - - - in - complex - - - in_cpy - complex - 1 - - - out - message - 1 - - -Copies the input complex intput to the (optional) output. - -Counts the number of copied samples and emits a "block_out" message everytime 'Block size' samples have been copied. - -This block is intendet to enable limiting the number of samples queueing up before a transmitter. So far the only block capable of using this messages is the udp_source_rate_idle block. - - diff --git a/build/blocks/ccsds_randomiser_softbits.xml b/build/blocks/ccsds_randomiser_softbits.xml deleted file mode 100644 index 39efbd2..0000000 --- a/build/blocks/ccsds_randomiser_softbits.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - Pseudo (De)randomiser with Softbits (CCSDS) - ccsds_randomiser_softbits - CCSDS/Telemetry - import ccsds - ccsds.randomiser_softbits($poly,$seed) - - Generating Polynimoal - poly - 0x95 - int - - - Seed - seed - 0xFF - int - - $poly >= 0 - $poly < 256 - $seed >= 0 - $seed < 256 - - in - message - - - out - message - - -Pseudo (De)randomiser -Combines the input frame with a pseudo random sequence by XOR operation. A one -in the PRN sequence will invert the softbit, a zero will copy it untouched. The -pseudo random sequence is generated by an 8-bit linear feedback shift register -(LFSR) as defined in ECSS. - -The pseudo random sequence can be modified by the generating polygon as well as -shifted by choosing a different initial seed state. - -poly: Polynomial that defines the network of the 8 shift registers. The MSB -encodes whether the last shift register (which is used for the output) should be -used to generate the new input while the LSB encodes whether the first shift -register (that holds the input bit of the last step should be used to generate -the output. Or in ECSS definition: The MSB holds the coefficient for x^0 up to -the LSB which holds coefficient x^7. x^8 is not encoded as it is always set (due -to the fact that this is a maximum length 8 bit shift register). The default -value is 0x95 which corresponds to the randomiser defined in ECSS with the -polynomial representation x^8+x^7+x^5+x^3+x^0. - -seed: Initial state of the shift registers. MSB corresponds to the last register -(which will be the output on the next step). Default to all ones as defined in -ECSS. - - diff --git a/build/blocks/ccsds_send_nanolink.xml b/build/blocks/ccsds_send_nanolink.xml deleted file mode 100644 index 023d272..0000000 --- a/build/blocks/ccsds_send_nanolink.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - Send Nanolink Frames to REST - ccsds_send_nanolink - [ccsds] - import ccsds - ccsds.send_nanolink($url) - - Url - url - "localhost:8082" - - - in - message - - diff --git a/build/blocks/ccsds_soft_to_hard_message.xml b/build/blocks/ccsds_soft_to_hard_message.xml deleted file mode 100644 index edcc9a1..0000000 --- a/build/blocks/ccsds_soft_to_hard_message.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - Softbit PDU to Hardbyte PDU - ccsds_soft_to_hard_message - [ccsds]/Conversion - import ccsds - ccsds.soft_to_hard_message() - - in - message - - - out - message - - Convert PDU with softbit payload to PDU with hardbits (compacted to bytes) payload. - diff --git a/build/blocks/ccsds_softbit_msg_sink_f.xml b/build/blocks/ccsds_softbit_msg_sink_f.xml deleted file mode 100644 index 90fa469..0000000 --- a/build/blocks/ccsds_softbit_msg_sink_f.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - Softbit Message Sink - ccsds_softbit_msg_sink_f - CCSDS/Conversion - import ccsds - ccsds.softbit_msg_sink_f($frame_len) - - Frame length - frame_len - 40 - int - - - in - float - - - out - message - - -Softbit message sink - -Copies portions of Frame length softbits from the input stream to a softbit message. - -Frame length: Length of a frame in (soft)bits. - - diff --git a/build/blocks/ccsds_softbit_msg_source_f.xml b/build/blocks/ccsds_softbit_msg_source_f.xml deleted file mode 100644 index af40094..0000000 --- a/build/blocks/ccsds_softbit_msg_source_f.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - Softbit Message Source - ccsds_softbit_msg_source_f - CCSDS/Conversion - import ccsds - ccsds.softbit_msg_source_f($frame_len) - - Frame length - frame_len - 40 - int - - - in - message - - - out - float - - -Softbit message source - -Copies the floats contained in the incomming Softbit messages to the output stream. - -Frame length: Length of a frame in (soft)bits. - - diff --git a/build/blocks/ccsds_udp_source_rate_idle_b.xml b/build/blocks/ccsds_udp_source_rate_idle_b.xml deleted file mode 100644 index fb2f88d..0000000 --- a/build/blocks/ccsds_udp_source_rate_idle_b.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - Rate controled UDP source with idle frames - ccsds_udp_source_rate_idle_b - [ccsds] - 1 - import ccsds - ccsds.udp_source_rate_idle_b($host_recv, $port_recv, $host_ctl, $port_ctl, $max_frame_length, $block_len, $num_blocks_floating, $idle_pattern) - - Hostname (data) - host_recv - 'localhost' - string - - - Port (data) - port_recv - int - - - Hostname (control) - host_ctl - 'localhost' - string - - - Port (control) - port_ctl - int - - - Max Frame length (Bytes) - max_frame_length - 1024 - int - - - Block size (Bytes) - block_len - 1024 - int - - - Num. blocks floating - num_blocks_floating - 10 - int - - - Idle pattern - idle_pattern - [0x00, 0xFF,]*12 - raw - - $port_recv > 0 - $port_ctl > 0 - $max_frame_length > 0 - $block_len > 0 - $num_blocks_floating > 0 - - in - message - - - out - byte - - -UDP source with rate control and idle pattern insertion - -This block will keep 'Num. blocks floating' blocks of 'Block size' bytes in the downstream processing. It receives "block_out" messages from a downstream block to be notified once a block has left the processing chain at that block and a new one should be inserted by the source. - -It receives datagrams of a maximum size of 'Max Frame length' Bytes over the UDP socket listening to the data hostname and port and buffers them internally. If the internal buffer holds more data than what could be send out in 1 block, it sends a control datagram with the 's' Byte (encoded in ASCII) to the control hostname and port. Once the buffer contains less data than required to fill a complete block, it will send a 'g' Byte (encoded in ASCII) to the control hostname and port. - -If a new block has to be send out and there is not enough data in the internal buffer to complete the block, (multiple) copies of the idle patterns are inserted at the back of the buffer. - -If an element in the buffer does not completely fit into the current block to be send it is split, such that the rest of the element is send as first item of the next block. - -The only block so far that provides the "block_out" message is the output_counter block. - - -'Hostname (data)' and 'Port (data)': - Hostname and port for the UDP socket on which the data arrives and is stored in the internal buffer. The block will bind to this socket (UDP Server). - -'Hostname (control)' and 'Port (control)': - Target hostname and port for the control datagrams 's' and 'g'. The block will only send to this socket, but not bind to it (UDP Client). - -'Max Frame length': - Maximum frame (datagram) length in Bytes that can be received over the data socket. This value is only used for buffer allocation. - -'Block size': - Number of bytes that constitute one data block. The value entered here must correspond to the block size parameter of the downstream block that provides the "block_out" messages or the flowgrapg between the two blocks will fill up, or run empty over time. - -'Num. blocks floating': - Number of data blocks that should be in the flowgraph at the same time. - -'Idle pattern': - Python vector of Bytes that form the idle pattern. Everytime a new data block has to be send out and there is not enough data in the internal buffer to fill this data block, one or multiple copies of the idle pattern are added to the end of the internal buffer in order to be able to complete the data block transmission. If transmitted, the idle pattern is always transmitted completely. - - diff --git a/build/gnuradio/downlink.grc b/build/gnuradio/downlink.grc new file mode 100644 index 0000000..7175577 --- /dev/null +++ b/build/gnuradio/downlink.grc @@ -0,0 +1,4975 @@ + + + + Mon May 8 08:57:40 2017 + + options + + author + Sebastian Rückerl + + + window_size + 2048,4096 + + + category + [GRC Hier Blocks] + + + comment + + + + description + + + + _enabled + True + + + _coordinate + (8, 8) + + + _rotation + 0 + + + generate_options + qt_gui + + + hier_block_src_path + .: + + + id + downlink + + + max_nouts + payload*8 + + + qt_qss_theme + + + + realtime_scheduling + + + + run_command + {python} -u {filename} + + + run_options + prompt + + + run + True + + + sizing_mode + fixed + + + thread_safe_setters + + + + title + Downlink from TVAC (This should run all the time) + + + placement + (0,0) + + + + variable + + comment + + + + _enabled + 1 + + + _coordinate + (1184, 429) + + + _rotation + 0 + + + id + block_len_enc + + + value + 1024/8*2 + + + + variable_qtgui_range + + comment + + + + value + 0 + + + _enabled + 0 + + + _coordinate + (1504, 136) + + + gui_hint + + + + _rotation + 0 + + + id + freq_adjust + + + label + RX frequency adjust + + + min_len + 200 + + + orient + Qt.Horizontal + + + start + -60e3 + + + step + 1 + + + stop + 60e3 + + + rangeType + float + + + widget + counter_slider + + + + variable_qtgui_range + + comment + + + + value + 0 + + + _enabled + 1 + + + _coordinate + (856, 8) + + + gui_hint + + + + _rotation + 0 + + + id + freq_offset + + + label + Frequency Offset + + + min_len + 200 + + + orient + Qt.Horizontal + + + start + -400e3 + + + step + 1.5e3 + + + stop + 400e3 + + + rangeType + float + + + widget + counter_slider + + + + variable_qtgui_range + + comment + + + + value + 0 + + + _enabled + 1 + + + _coordinate + (1504, 16) + + + gui_hint + + + + _rotation + 0 + + + id + freq_offset_flag + + + label + Enable flatsat freq + + + min_len + 200 + + + orient + Qt.Horizontal + + + start + 0 + + + step + 1 + + + stop + 1 + + + rangeType + float + + + widget + counter_slider + + + + variable_function_probe + + block_id + blocks_probe_signal_x_0 + + + comment + + + + _enabled + False + + + function_args + + + + function_name + get_number + + + _coordinate + (1016, 256) + + + _rotation + 0 + + + id + frequency_error + + + value + 0 + + + poll_rate + 5000 + + + + variable + + comment + + + + _enabled + 1 + + + _coordinate + (1096, 429) + + + _rotation + 0 + + + id + payload + + + value + block_len_enc+4 + + + + variable_qtgui_range + + comment + + + + value + 0 + + + _enabled + 1 + + + _coordinate + (1008, 9) + + + gui_hint + + + + _rotation + 0 + + + id + rgain + + + label + RX Gain + + + min_len + 200 + + + orient + Qt.Horizontal + + + start + 0 + + + step + 1 + + + stop + 11 + + + rangeType + float + + + widget + counter_slider + + + + variable + + comment + + + + _enabled + 1 + + + _coordinate + (192, 29) + + + _rotation + 0 + + + id + samp_rate + + + value + 250000 + + + + variable + + comment + + + + _enabled + 1 + + + _coordinate + (192, 92) + + + _rotation + 0 + + + id + samp_rate_factor + + + value + 5 + + + + variable_constellation + + comment + + + + const_points + [-1, 1] + + + type + calcdist + + + dims + 1 + + + _enabled + 1 + + + _coordinate + (80, 664) + + + _rotation + 0 + + + id + variable_constellation_0 + + + rot_sym + 4 + + + soft_dec_lut + None + + + precision + 8 + + + sym_map + [0, 1] + + + + analog_agc_xx + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (856, 135) + + + _rotation + 0 + + + gain + 1.0 + + + id + analog_agc_xx_0 + + + max_gain + 65536 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + rate + 1e-4 + + + reference + 0.5 + + + type + complex + + + + analog_pll_freqdet_cf + + alias + + + + comment + + + + affinity + + + + _enabled + False + + + _coordinate + (712, 254) + + + _rotation + 0 + + + id + analog_pll_freqdet_cf_0 + + + w + 3.14/200 + + + max_freq + 2*3.14/5 + + + maxoutbuf + 0 + + + min_freq + -2*3.14/5 + + + minoutbuf + 0 + + + + analog_sig_source_x + + amp + 1 + + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + freq + -50000 + + + _coordinate + (544, 8) + + + _rotation + 0 + + + id + analog_sig_source_x_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + offset + 0 + + + type + complex + + + samp_rate + samp_rate + + + waveform + analog.GR_COS_WAVE + + + + analog_sig_source_x + + amp + 1 + + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + freq + -freq_offset + + + _coordinate + (24, 120) + + + _rotation + 0 + + + id + analog_sig_source_x_0_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + offset + 0 + + + type + complex + + + samp_rate + samp_rate*samp_rate_factor + + + waveform + analog.GR_COS_WAVE + + + + band_pass_filter + + beta + 6.76 + + + alias + + + + comment + + + + affinity + + + + decim + 1 + + + _enabled + True + + + type + fir_filter_ccc + + + _coordinate + (360, 124) + + + _rotation + 0 + + + gain + 1 + + + high_cutoff_freq + 60e3 + + + id + band_pass_filter_0 + + + interp + 1 + + + low_cutoff_freq + 40e3 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + samp_rate + samp_rate*samp_rate_factor + + + width + 6e3 + + + win + firdes.WIN_HAMMING + + + + blocks_add_const_vxx + + alias + + + + comment + + + + const + -1 + + + affinity + + + + _enabled + True + + + _coordinate + (928, 540) + + + _rotation + 0 + + + id + blocks_add_const_vxx_0 + + + type + float + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + vlen + 1 + + + + blocks_char_to_float + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (800, 540) + + + _rotation + 0 + + + id + blocks_char_to_float_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + scale + 0.5 + + + vlen + 1 + + + + blocks_file_sink + + append + False + + + alias + + + + comment + + + + affinity + + + + _enabled + 0 + + + file + /home/move2/bpskbb.file + + + _coordinate + (768, 32) + + + _rotation + 0 + + + id + blocks_file_sink_0 + + + type + complex + + + unbuffered + False + + + vlen + 1 + + + + blocks_message_debug + + alias + + + + comment + + + + affinity + + + + _enabled + 0 + + + _coordinate + (1912, 264) + + + _rotation + 0 + + + id + blocks_message_debug_1_0 + + + + blocks_message_debug + + alias + + + + comment + + + + affinity + + + + _enabled + 0 + + + _coordinate + (1456, 832) + + + _rotation + 0 + + + id + blocks_message_debug_1_0_0 + + + + blocks_multiply_xx + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (608, 144) + + + _rotation + 0 + + + id + blocks_multiply_xx_0 + + + type + complex + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + num_inputs + 2 + + + vlen + 1 + + + + blocks_multiply_xx + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (240, 208) + + + _rotation + 0 + + + id + blocks_multiply_xx_0_0 + + + type + complex + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + num_inputs + 2 + + + vlen + 1 + + + + blocks_null_sink + + alias + + + + bus_conns + [[0,],] + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (1912, 583) + + + _rotation + 180 + + + id + blocks_null_sink_1 + + + type + byte + + + num_inputs + 1 + + + vlen + 1 + + + + blocks_probe_signal_x + + alias + + + + comment + + + + affinity + + + + _enabled + False + + + _coordinate + (896, 327) + + + _rotation + 0 + + + id + blocks_probe_signal_x_0 + + + type + float + + + + blocks_udp_sink + + alias + + + + comment + + + + affinity + + + + ipaddr + 127.0.0.1 + + + port + 5435 + + + _enabled + True + + + _coordinate + (656, 416) + + + _rotation + 0 + + + id + blocks_udp_sink_0 + + + type + complex + + + psize + 1472 + + + eof + True + + + vlen + 1 + + + + blocks_udp_sink + + alias + + + + comment + + + + affinity + + + + ipaddr + 127.0.0.1 + + + port + 5433 + + + _enabled + True + + + _coordinate + (776, 648) + + + _rotation + 0 + + + id + blocks_udp_sink_0_0 + + + type + byte + + + psize + 1472 + + + eof + True + + + vlen + 1 + + + + blocks_udp_sink + + alias + + + + comment + + + + affinity + + + + ipaddr + 127.0.0.1 + + + port + 5431 + + + _enabled + True + + + _coordinate + (1832, 703) + + + _rotation + 0 + + + id + blocks_udp_sink_0_1 + + + type + byte + + + psize + 256 + + + eof + True + + + vlen + 1 + + + + ccsds_blob_msg_sink_b + + blob_len + 256/2 + + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (1392, 684) + + + _rotation + 0 + + + id + ccsds_blob_msg_sink_b_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + ccsds_blob_msg_sink_b + + blob_len + block_len_enc + + + alias + + + + comment + + + + affinity + + + + _enabled + False + + + _coordinate + (1848, 628) + + + _rotation + 180 + + + id + ccsds_blob_msg_sink_b_1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + ccsds_ldpc_decoder + + alias + + + + comment + + + + affinity + + + + punct_pos + [] + + + drop_invalid + False + + + _enabled + True + + + _coordinate + (1808, 392) + + + _rotation + 0 + + + id + ccsds_ldpc_decoder_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + num_punct + 512 + + + par_file + /app/gnuradio/AR4JA_r12_k1024n.a + + + puncttype + punct_back + + + systype + sys_front + + + + ccsds_message_info + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (1456, 932) + + + _rotation + 0 + + + id + ccsds_message_info_0 + + + mode + 10 + + + prefix + "Block received and sent to Nanolink: " + + + + ccsds_mpsk_ambiguity_resolver_f + + ASM_len + 32 + + + alias + + + + comment + + + + affinity + + + + corr_threshold + 0.8 + + + _enabled + True + + + frame_len + block_len_enc + + + _coordinate + (1040, 498) + + + _rotation + 0 + + + id + ccsds_mpsk_ambiguity_resolver_f_0 + + + threshold + 1 + + + M + 2 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + ASM + '49E0DCC7' + + + num_tail_sym + 0 + + + + ccsds_randomiser_softbits + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (1424, 453) + + + _rotation + 0 + + + poly + 0x95 + + + id + ccsds_randomiser_softbits_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + seed + 0xFF + + + + ccsds_softbits_msg_to_bytes_b + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (1432, 583) + + + _rotation + 0 + + + id + ccsds_softbits_msg_to_bytes_b_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + dc_blocker_xx + + alias + + + + comment + + + + affinity + + + + _enabled + 2 + + + _coordinate + (720, 108) + + + _rotation + 0 + + + id + dc_blocker_xx_0 + + + length + 512 + + + long_form + True + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + type + cc + + + + digital_constellation_decoder_cb + + alias + + + + comment + + + + constellation + variable_constellation_0 + + + affinity + + + + _enabled + True + + + _coordinate + (408, 540) + + + _rotation + 0 + + + id + digital_constellation_decoder_cb_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + digital_diff_decoder_bb + + alias + + + + comment + + + + affinity + + + + _enabled + 2 + + + _coordinate + (624, 540) + + + _rotation + 0 + + + id + digital_diff_decoder_bb_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + modulus + 2 + + + + digital_mpsk_receiver_cc + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (80, 477) + + + _rotation + 0 + + + gain_mu + 0.05 + + + gain_omega + 4 + + + id + digital_mpsk_receiver_cc_0_0 + + + w + cmath.pi/100.0 + + + M + 2 + + + fmax + 0.05 + + + maxoutbuf + 0 + + + fmin + -0.05 + + + minoutbuf + 0 + + + mu + 0.25 + + + omega_relative_limit + 0.005 + + + omega + 4 + + + theta + 0 + + + + digital_probe_mpsk_snr_est_c + + alias + + + + comment + + + + affinity + + + + _enabled + False + + + alpha + 0.001 + + + _coordinate + (1616, 255) + + + _rotation + 0 + + + id + digital_probe_mpsk_snr_est_c_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + msg_nsamples + 1000 + + + type + 3 + + + + fir_filter_xxx + + alias + + + + comment + + + + affinity + + + + decim + samp_rate_factor + + + _enabled + True + + + _coordinate + (544, 292) + + + _rotation + 0 + + + id + fir_filter_xxx_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + samp_delay + 0 + + + taps + 1 + + + type + ccc + + + + note + + alias + + + + comment + + + + _enabled + True + + + _coordinate + (336, 20) + + + _rotation + 0 + + + id + note_0 + + + note + ,xb200=144M + + + + note + + alias + + + + comment + + + + _enabled + True + + + _coordinate + (1616, 916) + + + _rotation + 0 + + + id + note_1 + + + note + moveii-master does not have message_info yet, use message_debug instead + + + + osmosdr_source + + alias + + + + ant0 + + + + bb_gain0 + 0 + + + bw0 + 0 + + + dc_offset_mode0 + 0 + + + corr0 + 0 + + + freq0 + 145.79e6 + + + gain_mode0 + False + + + if_gain0 + 0 + + + iq_balance_mode0 + 0 + + + gain0 + rgain + + + ant10 + + + + bb_gain10 + 20 + + + bw10 + 0 + + + dc_offset_mode10 + 0 + + + corr10 + 0 + + + freq10 + 100e6 + + + gain_mode10 + False + + + if_gain10 + 20 + + + iq_balance_mode10 + 0 + + + gain10 + 10 + + + ant11 + + + + bb_gain11 + 20 + + + bw11 + 0 + + + dc_offset_mode11 + 0 + + + corr11 + 0 + + + freq11 + 100e6 + + + gain_mode11 + False + + + if_gain11 + 20 + + + iq_balance_mode11 + 0 + + + gain11 + 10 + + + ant12 + + + + bb_gain12 + 20 + + + bw12 + 0 + + + dc_offset_mode12 + 0 + + + corr12 + 0 + + + freq12 + 100e6 + + + gain_mode12 + False + + + if_gain12 + 20 + + + iq_balance_mode12 + 0 + + + gain12 + 10 + + + ant13 + + + + bb_gain13 + 20 + + + bw13 + 0 + + + dc_offset_mode13 + 0 + + + corr13 + 0 + + + freq13 + 100e6 + + + gain_mode13 + False + + + if_gain13 + 20 + + + iq_balance_mode13 + 0 + + + gain13 + 10 + + + ant14 + + + + bb_gain14 + 20 + + + bw14 + 0 + + + dc_offset_mode14 + 0 + + + corr14 + 0 + + + freq14 + 100e6 + + + gain_mode14 + False + + + if_gain14 + 20 + + + iq_balance_mode14 + 0 + + + gain14 + 10 + + + ant15 + + + + bb_gain15 + 20 + + + bw15 + 0 + + + dc_offset_mode15 + 0 + + + corr15 + 0 + + + freq15 + 100e6 + + + gain_mode15 + False + + + if_gain15 + 20 + + + iq_balance_mode15 + 0 + + + gain15 + 10 + + + ant16 + + + + bb_gain16 + 20 + + + bw16 + 0 + + + dc_offset_mode16 + 0 + + + corr16 + 0 + + + freq16 + 100e6 + + + gain_mode16 + False + + + if_gain16 + 20 + + + iq_balance_mode16 + 0 + + + gain16 + 10 + + + ant17 + + + + bb_gain17 + 20 + + + bw17 + 0 + + + dc_offset_mode17 + 0 + + + corr17 + 0 + + + freq17 + 100e6 + + + gain_mode17 + False + + + if_gain17 + 20 + + + iq_balance_mode17 + 0 + + + gain17 + 10 + + + ant18 + + + + bb_gain18 + 20 + + + bw18 + 0 + + + dc_offset_mode18 + 0 + + + corr18 + 0 + + + freq18 + 100e6 + + + gain_mode18 + False + + + if_gain18 + 20 + + + iq_balance_mode18 + 0 + + + gain18 + 10 + + + ant19 + + + + bb_gain19 + 20 + + + bw19 + 0 + + + dc_offset_mode19 + 0 + + + corr19 + 0 + + + freq19 + 100e6 + + + gain_mode19 + False + + + if_gain19 + 20 + + + iq_balance_mode19 + 0 + + + gain19 + 10 + + + ant1 + + + + bb_gain1 + 20 + + + bw1 + 0 + + + dc_offset_mode1 + 0 + + + corr1 + 0 + + + freq1 + 100e6 + + + gain_mode1 + False + + + if_gain1 + 20 + + + iq_balance_mode1 + 0 + + + gain1 + 10 + + + ant20 + + + + bb_gain20 + 20 + + + bw20 + 0 + + + dc_offset_mode20 + 0 + + + corr20 + 0 + + + freq20 + 100e6 + + + gain_mode20 + False + + + if_gain20 + 20 + + + iq_balance_mode20 + 0 + + + gain20 + 10 + + + ant21 + + + + bb_gain21 + 20 + + + bw21 + 0 + + + dc_offset_mode21 + 0 + + + corr21 + 0 + + + freq21 + 100e6 + + + gain_mode21 + False + + + if_gain21 + 20 + + + iq_balance_mode21 + 0 + + + gain21 + 10 + + + ant22 + + + + bb_gain22 + 20 + + + bw22 + 0 + + + dc_offset_mode22 + 0 + + + corr22 + 0 + + + freq22 + 100e6 + + + gain_mode22 + False + + + if_gain22 + 20 + + + iq_balance_mode22 + 0 + + + gain22 + 10 + + + ant23 + + + + bb_gain23 + 20 + + + bw23 + 0 + + + dc_offset_mode23 + 0 + + + corr23 + 0 + + + freq23 + 100e6 + + + gain_mode23 + False + + + if_gain23 + 20 + + + iq_balance_mode23 + 0 + + + gain23 + 10 + + + ant24 + + + + bb_gain24 + 20 + + + bw24 + 0 + + + dc_offset_mode24 + 0 + + + corr24 + 0 + + + freq24 + 100e6 + + + gain_mode24 + False + + + if_gain24 + 20 + + + iq_balance_mode24 + 0 + + + gain24 + 10 + + + ant25 + + + + bb_gain25 + 20 + + + bw25 + 0 + + + dc_offset_mode25 + 0 + + + corr25 + 0 + + + freq25 + 100e6 + + + gain_mode25 + False + + + if_gain25 + 20 + + + iq_balance_mode25 + 0 + + + gain25 + 10 + + + ant26 + + + + bb_gain26 + 20 + + + bw26 + 0 + + + dc_offset_mode26 + 0 + + + corr26 + 0 + + + freq26 + 100e6 + + + gain_mode26 + False + + + if_gain26 + 20 + + + iq_balance_mode26 + 0 + + + gain26 + 10 + + + ant27 + + + + bb_gain27 + 20 + + + bw27 + 0 + + + dc_offset_mode27 + 0 + + + corr27 + 0 + + + freq27 + 100e6 + + + gain_mode27 + False + + + if_gain27 + 20 + + + iq_balance_mode27 + 0 + + + gain27 + 10 + + + ant28 + + + + bb_gain28 + 20 + + + bw28 + 0 + + + dc_offset_mode28 + 0 + + + corr28 + 0 + + + freq28 + 100e6 + + + gain_mode28 + False + + + if_gain28 + 20 + + + iq_balance_mode28 + 0 + + + gain28 + 10 + + + ant29 + + + + bb_gain29 + 20 + + + bw29 + 0 + + + dc_offset_mode29 + 0 + + + corr29 + 0 + + + freq29 + 100e6 + + + gain_mode29 + False + + + if_gain29 + 20 + + + iq_balance_mode29 + 0 + + + gain29 + 10 + + + ant2 + + + + bb_gain2 + 20 + + + bw2 + 0 + + + dc_offset_mode2 + 0 + + + corr2 + 0 + + + freq2 + 100e6 + + + gain_mode2 + False + + + if_gain2 + 20 + + + iq_balance_mode2 + 0 + + + gain2 + 10 + + + ant30 + + + + bb_gain30 + 20 + + + bw30 + 0 + + + dc_offset_mode30 + 0 + + + corr30 + 0 + + + freq30 + 100e6 + + + gain_mode30 + False + + + if_gain30 + 20 + + + iq_balance_mode30 + 0 + + + gain30 + 10 + + + ant31 + + + + bb_gain31 + 20 + + + bw31 + 0 + + + dc_offset_mode31 + 0 + + + corr31 + 0 + + + freq31 + 100e6 + + + gain_mode31 + False + + + if_gain31 + 20 + + + iq_balance_mode31 + 0 + + + gain31 + 10 + + + ant3 + + + + bb_gain3 + 20 + + + bw3 + 0 + + + dc_offset_mode3 + 0 + + + corr3 + 0 + + + freq3 + 100e6 + + + gain_mode3 + False + + + if_gain3 + 20 + + + iq_balance_mode3 + 0 + + + gain3 + 10 + + + ant4 + + + + bb_gain4 + 20 + + + bw4 + 0 + + + dc_offset_mode4 + 0 + + + corr4 + 0 + + + freq4 + 100e6 + + + gain_mode4 + False + + + if_gain4 + 20 + + + iq_balance_mode4 + 0 + + + gain4 + 10 + + + ant5 + + + + bb_gain5 + 20 + + + bw5 + 0 + + + dc_offset_mode5 + 0 + + + corr5 + 0 + + + freq5 + 100e6 + + + gain_mode5 + False + + + if_gain5 + 20 + + + iq_balance_mode5 + 0 + + + gain5 + 10 + + + ant6 + + + + bb_gain6 + 20 + + + bw6 + 0 + + + dc_offset_mode6 + 0 + + + corr6 + 0 + + + freq6 + 100e6 + + + gain_mode6 + False + + + if_gain6 + 20 + + + iq_balance_mode6 + 0 + + + gain6 + 10 + + + ant7 + + + + bb_gain7 + 20 + + + bw7 + 0 + + + dc_offset_mode7 + 0 + + + corr7 + 0 + + + freq7 + 100e6 + + + gain_mode7 + False + + + if_gain7 + 20 + + + iq_balance_mode7 + 0 + + + gain7 + 10 + + + ant8 + + + + bb_gain8 + 20 + + + bw8 + 0 + + + dc_offset_mode8 + 0 + + + corr8 + 0 + + + freq8 + 100e6 + + + gain_mode8 + False + + + if_gain8 + 20 + + + iq_balance_mode8 + 0 + + + gain8 + 10 + + + ant9 + + + + bb_gain9 + 20 + + + bw9 + 0 + + + dc_offset_mode9 + 0 + + + corr9 + 0 + + + freq9 + 100e6 + + + gain_mode9 + False + + + if_gain9 + 20 + + + iq_balance_mode9 + 0 + + + gain9 + 10 + + + comment + + + + affinity + + + + args + rtl=0 + + + _enabled + 1 + + + _coordinate + (0, 228) + + + _rotation + 0 + + + id + osmosdr_source_0 + + + maxoutbuf + 0 + + + clock_source0 + + + + time_source0 + + + + clock_source1 + + + + time_source1 + + + + clock_source2 + + + + time_source2 + + + + clock_source3 + + + + time_source3 + + + + clock_source4 + + + + time_source4 + + + + clock_source5 + + + + time_source5 + + + + clock_source6 + + + + time_source6 + + + + clock_source7 + + + + time_source7 + + + + minoutbuf + 0 + + + nchan + 1 + + + num_mboards + 1 + + + type + fc32 + + + sample_rate + samp_rate*samp_rate_factor + + + sync + + + + + qtgui_freq_sink_x + + autoscale + False + + + average + 1.0 + + + axislabels + True + + + bw + samp_rate + + + alias + + + + fc + 0 + + + comment + + + + ctrlpanel + False + + + affinity + + + + _enabled + 0 + + + fftsize + 1024 + + + _coordinate + (1264, 134) + + + gui_hint + + + + _rotation + 0 + + + grid + False + + + id + qtgui_freq_sink_x_0 + + + legend + True + + + alpha1 + 1.0 + + + color1 + "blue" + + + label1 + + + + width1 + 1 + + + alpha10 + 1.0 + + + color10 + "dark blue" + + + label10 + + + + width10 + 1 + + + alpha2 + 1.0 + + + color2 + "red" + + + label2 + + + + width2 + 1 + + + alpha3 + 1.0 + + + color3 + "green" + + + label3 + + + + width3 + 1 + + + alpha4 + 1.0 + + + color4 + "black" + + + label4 + + + + width4 + 1 + + + alpha5 + 1.0 + + + color5 + "cyan" + + + label5 + + + + width5 + 1 + + + alpha6 + 1.0 + + + color6 + "magenta" + + + label6 + + + + width6 + 1 + + + alpha7 + 1.0 + + + color7 + "yellow" + + + label7 + + + + width7 + 1 + + + alpha8 + 1.0 + + + color8 + "dark red" + + + label8 + + + + width8 + 1 + + + alpha9 + 1.0 + + + color9 + "dark green" + + + label9 + + + + width9 + 1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "" + + + nconnections + 1 + + + showports + True + + + freqhalf + True + + + tr_chan + 0 + + + tr_level + 0.0 + + + tr_mode + qtgui.TRIG_MODE_FREE + + + tr_tag + "" + + + type + complex + + + update_time + 0.10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + label + Relative Gain + + + ymax + 10 + + + ymin + -140 + + + units + dB + + + + qtgui_sink_x + + bw + samp_rate + + + alias + + + + fc + 0 + + + freqchangevar + None + + + comment + + + + affinity + + + + _enabled + 0 + + + fftsize + 1024 + + + _coordinate + (312, 423) + + + gui_hint + + + + _rotation + 0 + + + id + qtgui_sink_x_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "Nach Sync" + + + plotconst + True + + + plotfreq + True + + + plottime + True + + + plotwaterfall + True + + + showports + True + + + showrf + False + + + type + complex + + + rate + 10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + qtgui_sink_x + + bw + samp_rate*samp_rate_factor + + + alias + + + + fc + 0 + + + freqchangevar + None + + + comment + + + + affinity + + + + _enabled + True + + + fftsize + 1024 + + + _coordinate + (336, 272) + + + gui_hint + + + + _rotation + 0 + + + id + qtgui_sink_x_0_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "Vor Sync" + + + plotconst + True + + + plotfreq + True + + + plottime + True + + + plotwaterfall + True + + + showports + True + + + showrf + False + + + type + complex + + + rate + 10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + qtgui_sink_x + + bw + samp_rate + + + alias + + + + fc + 0 + + + freqchangevar + None + + + comment + + + + affinity + + + + _enabled + True + + + fftsize + 1024 + + + _coordinate + (816, 264) + + + gui_hint + + + + _rotation + 0 + + + id + qtgui_sink_x_0_0_1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "Vor Sync" + + + plotconst + True + + + plotfreq + True + + + plottime + True + + + plotwaterfall + True + + + showports + True + + + showrf + False + + + type + complex + + + rate + 10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + qtgui_sink_x + + bw + samp_rate + + + alias + + + + fc + 0 + + + freqchangevar + None + + + comment + + + + affinity + + + + _enabled + 1 + + + fftsize + 1024 + + + _coordinate + (496, 599) + + + gui_hint + + + + _rotation + 0 + + + id + qtgui_sink_x_1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "" + + + plotconst + True + + + plotfreq + False + + + plottime + False + + + plotwaterfall + False + + + showports + True + + + showrf + False + + + type + complex + + + rate + 10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + qtgui_waterfall_sink_x + + axislabels + True + + + bw + samp_rate + + + alias + + + + fc + 0 + + + comment + + + + affinity + + + + _enabled + False + + + fftsize + 1024 + + + _coordinate + (1136, 12) + + + gui_hint + + + + _rotation + 0 + + + grid + False + + + id + qtgui_waterfall_sink_x_0 + + + int_max + 10 + + + int_min + -140 + + + legend + True + + + alpha1 + 1.0 + + + color1 + 0 + + + label1 + + + + alpha10 + 1.0 + + + color10 + 0 + + + label10 + + + + alpha2 + 1.0 + + + color2 + 0 + + + label2 + + + + alpha3 + 1.0 + + + color3 + 0 + + + label3 + + + + alpha4 + 1.0 + + + color4 + 0 + + + label4 + + + + alpha5 + 1.0 + + + color5 + 0 + + + label5 + + + + alpha6 + 1.0 + + + color6 + 0 + + + label6 + + + + alpha7 + 1.0 + + + color7 + 0 + + + label7 + + + + alpha8 + 1.0 + + + color8 + 0 + + + label8 + + + + alpha9 + 1.0 + + + color9 + 0 + + + label9 + + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "" + + + nconnections + 1 + + + showports + True + + + freqhalf + True + + + type + complex + + + update_time + 0.1 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + qtgui_waterfall_sink_x + + axislabels + True + + + bw + samp_rate + + + alias + + + + fc + 0 + + + comment + + + + affinity + + + + _enabled + False + + + fftsize + 1024 + + + _coordinate + (1264, 30) + + + gui_hint + + + + _rotation + 0 + + + grid + False + + + id + qtgui_waterfall_sink_x_1_0 + + + int_max + 10 + + + int_min + -140 + + + legend + True + + + alpha1 + 1.0 + + + color1 + 0 + + + label1 + + + + alpha10 + 1.0 + + + color10 + 0 + + + label10 + + + + alpha2 + 1.0 + + + color2 + 0 + + + label2 + + + + alpha3 + 1.0 + + + color3 + 0 + + + label3 + + + + alpha4 + 1.0 + + + color4 + 0 + + + label4 + + + + alpha5 + 1.0 + + + color5 + 0 + + + label5 + + + + alpha6 + 1.0 + + + color6 + 0 + + + label6 + + + + alpha7 + 1.0 + + + color7 + 0 + + + label7 + + + + alpha8 + 1.0 + + + color8 + 0 + + + label8 + + + + alpha9 + 1.0 + + + color9 + 0 + + + label9 + + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + name + "" + + + nconnections + 1 + + + showports + True + + + freqhalf + True + + + type + complex + + + update_time + 0.10 + + + wintype + firdes.WIN_BLACKMAN_hARRIS + + + + rational_resampler_xxx + + alias + + + + comment + + + + affinity + + + + decim + 5 + + + _enabled + 1 + + + fbw + 0 + + + _coordinate + (1016, 216) + + + _rotation + 0 + + + id + rational_resampler_xxx_1 + + + interp + 1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + taps + + + + type + ccc + + + + analog_agc_xx_0 + rational_resampler_xxx_1 + 0 + 0 + + + analog_pll_freqdet_cf_0 + blocks_probe_signal_x_0 + 0 + 0 + + + analog_sig_source_x_0 + blocks_multiply_xx_0 + 0 + 0 + + + analog_sig_source_x_0_0 + blocks_multiply_xx_0_0 + 0 + 0 + + + band_pass_filter_0 + fir_filter_xxx_0 + 0 + 0 + + + blocks_add_const_vxx_0 + ccsds_mpsk_ambiguity_resolver_f_0 + 0 + 0 + + + blocks_char_to_float_0 + blocks_add_const_vxx_0 + 0 + 0 + + + blocks_multiply_xx_0 + blocks_file_sink_0 + 0 + 0 + + + blocks_multiply_xx_0 + dc_blocker_xx_0 + 0 + 0 + + + blocks_multiply_xx_0 + qtgui_sink_x_0_0_1 + 0 + 0 + + + blocks_multiply_xx_0_0 + band_pass_filter_0 + 0 + 0 + + + ccsds_blob_msg_sink_b_0 + blocks_message_debug_1_0_0 + out + print_pdu + + + ccsds_blob_msg_sink_b_0 + ccsds_message_info_0 + out + in + + + ccsds_ldpc_decoder_0 + blocks_message_debug_1_0 + out + print_pdu + + + ccsds_ldpc_decoder_0 + ccsds_softbits_msg_to_bytes_b_0 + out + in + + + ccsds_mpsk_ambiguity_resolver_f_0 + ccsds_randomiser_softbits_0 + out + in + + + ccsds_randomiser_softbits_0 + ccsds_ldpc_decoder_0 + out + in + + + ccsds_softbits_msg_to_bytes_b_0 + blocks_null_sink_1 + 0 + 0 + + + ccsds_softbits_msg_to_bytes_b_0 + blocks_udp_sink_0_1 + 0 + 0 + + + ccsds_softbits_msg_to_bytes_b_0 + ccsds_blob_msg_sink_b_0 + 0 + 0 + + + ccsds_softbits_msg_to_bytes_b_0 + ccsds_blob_msg_sink_b_1 + 0 + 0 + + + dc_blocker_xx_0 + analog_agc_xx_0 + 0 + 0 + + + digital_constellation_decoder_cb_0 + digital_diff_decoder_bb_0 + 0 + 0 + + + digital_diff_decoder_bb_0 + blocks_char_to_float_0 + 0 + 0 + + + digital_diff_decoder_bb_0 + blocks_udp_sink_0_0 + 0 + 0 + + + digital_mpsk_receiver_cc_0_0 + digital_constellation_decoder_cb_0 + 0 + 0 + + + digital_mpsk_receiver_cc_0_0 + qtgui_sink_x_0 + 0 + 0 + + + digital_mpsk_receiver_cc_0_0 + qtgui_sink_x_1 + 0 + 0 + + + digital_probe_mpsk_snr_est_c_0 + blocks_message_debug_1_0 + snr + print + + + fir_filter_xxx_0 + blocks_multiply_xx_0 + 0 + 1 + + + osmosdr_source_0 + blocks_multiply_xx_0_0 + 0 + 1 + + + osmosdr_source_0 + blocks_udp_sink_0 + 0 + 0 + + + osmosdr_source_0 + qtgui_sink_x_0_0 + 0 + 0 + + + rational_resampler_xxx_1 + analog_pll_freqdet_cf_0 + 0 + 0 + + + rational_resampler_xxx_1 + digital_mpsk_receiver_cc_0_0 + 0 + 0 + + + rational_resampler_xxx_1 + qtgui_freq_sink_x_0 + 0 + 0 + + + rational_resampler_xxx_1 + qtgui_waterfall_sink_x_1_0 + 0 + 0 + + diff --git a/build/gnuradio/downlink.py b/build/gnuradio/downlink.py new file mode 100644 index 0000000..5abc196 --- /dev/null +++ b/build/gnuradio/downlink.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: Downlink from TVAC (This should run all the time) +# Author: Sebastian Rückerl +# Generated: Wed Feb 26 01:20:37 2020 +################################################## + +if __name__ == '__main__': + import ctypes + import sys + if sys.platform.startswith('linux'): + try: + x11 = ctypes.cdll.LoadLibrary('libX11.so') + x11.XInitThreads() + except: + print "Warning: failed to XInitThreads()" + +from PyQt4 import Qt +from gnuradio import analog +from gnuradio import blocks +from gnuradio import digital +from gnuradio import digital;import cmath +from gnuradio import eng_notation +from gnuradio import filter +from gnuradio import gr +from gnuradio import qtgui +from gnuradio.eng_option import eng_option +from gnuradio.filter import firdes +from gnuradio.qtgui import Range, RangeWidget +from optparse import OptionParser +import ccsds +import math +import osmosdr +import sip +import sys +import time +from gnuradio import qtgui + + +class downlink(gr.top_block, Qt.QWidget): + + def __init__(self): + gr.top_block.__init__(self, "Downlink from TVAC (This should run all the time)") + Qt.QWidget.__init__(self) + self.setWindowTitle("Downlink from TVAC (This should run all the time)") + qtgui.util.check_set_qss() + try: + self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) + except: + pass + self.top_scroll_layout = Qt.QVBoxLayout() + self.setLayout(self.top_scroll_layout) + self.top_scroll = Qt.QScrollArea() + self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) + self.top_scroll_layout.addWidget(self.top_scroll) + self.top_scroll.setWidgetResizable(True) + self.top_widget = Qt.QWidget() + self.top_scroll.setWidget(self.top_widget) + self.top_layout = Qt.QVBoxLayout(self.top_widget) + self.top_grid_layout = Qt.QGridLayout() + self.top_layout.addLayout(self.top_grid_layout) + + self.settings = Qt.QSettings("GNU Radio", "downlink") + self.restoreGeometry(self.settings.value("geometry").toByteArray()) + + + ################################################## + # Variables + ################################################## + self.block_len_enc = block_len_enc = 1024/8*2 + + self.variable_constellation_0 = variable_constellation_0 = digital.constellation_calcdist(([-1, 1]), ([0, 1]), 4, 1).base() + + self.samp_rate_factor = samp_rate_factor = 5 + self.samp_rate = samp_rate = 250000 + self.rgain = rgain = 0 + self.payload = payload = block_len_enc+4 + self.freq_offset_flag = freq_offset_flag = 0 + self.freq_offset = freq_offset = 0 + + ################################################## + # Blocks + ################################################## + self._rgain_range = Range(0, 11, 1, 0, 200) + self._rgain_win = RangeWidget(self._rgain_range, self.set_rgain, 'RX Gain', "counter_slider", float) + self.top_grid_layout.addWidget(self._rgain_win) + self._freq_offset_range = Range(-400e3, 400e3, 1.5e3, 0, 200) + self._freq_offset_win = RangeWidget(self._freq_offset_range, self.set_freq_offset, 'Frequency Offset', "counter_slider", float) + self.top_grid_layout.addWidget(self._freq_offset_win) + self.rational_resampler_xxx_1 = filter.rational_resampler_ccc( + interpolation=1, + decimation=5, + taps=None, + fractional_bw=None, + ) + self.qtgui_sink_x_1 = qtgui.sink_c( + 1024, #fftsize + firdes.WIN_BLACKMAN_hARRIS, #wintype + 0, #fc + samp_rate, #bw + "", #name + False, #plotfreq + False, #plotwaterfall + False, #plottime + True, #plotconst + ) + self.qtgui_sink_x_1.set_update_time(1.0/10) + self._qtgui_sink_x_1_win = sip.wrapinstance(self.qtgui_sink_x_1.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_sink_x_1_win) + + self.qtgui_sink_x_1.enable_rf_freq(False) + + + + self.qtgui_sink_x_0_0_1 = qtgui.sink_c( + 1024, #fftsize + firdes.WIN_BLACKMAN_hARRIS, #wintype + 0, #fc + samp_rate, #bw + "Vor Sync", #name + True, #plotfreq + True, #plotwaterfall + True, #plottime + True, #plotconst + ) + self.qtgui_sink_x_0_0_1.set_update_time(1.0/10) + self._qtgui_sink_x_0_0_1_win = sip.wrapinstance(self.qtgui_sink_x_0_0_1.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_sink_x_0_0_1_win) + + self.qtgui_sink_x_0_0_1.enable_rf_freq(False) + + + + self.qtgui_sink_x_0_0 = qtgui.sink_c( + 1024, #fftsize + firdes.WIN_BLACKMAN_hARRIS, #wintype + 0, #fc + samp_rate*samp_rate_factor, #bw + "Vor Sync", #name + True, #plotfreq + True, #plotwaterfall + True, #plottime + True, #plotconst + ) + self.qtgui_sink_x_0_0.set_update_time(1.0/10) + self._qtgui_sink_x_0_0_win = sip.wrapinstance(self.qtgui_sink_x_0_0.pyqwidget(), Qt.QWidget) + self.top_grid_layout.addWidget(self._qtgui_sink_x_0_0_win) + + self.qtgui_sink_x_0_0.enable_rf_freq(False) + + + + self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + 'rtl=0' ) + self.osmosdr_source_0.set_sample_rate(samp_rate*samp_rate_factor) + self.osmosdr_source_0.set_center_freq(145.79e6, 0) + self.osmosdr_source_0.set_freq_corr(0, 0) + self.osmosdr_source_0.set_dc_offset_mode(0, 0) + self.osmosdr_source_0.set_iq_balance_mode(0, 0) + self.osmosdr_source_0.set_gain_mode(False, 0) + self.osmosdr_source_0.set_gain(rgain, 0) + self.osmosdr_source_0.set_if_gain(0, 0) + self.osmosdr_source_0.set_bb_gain(0, 0) + self.osmosdr_source_0.set_antenna('', 0) + self.osmosdr_source_0.set_bandwidth(0, 0) + + self._freq_offset_flag_range = Range(0, 1, 1, 0, 200) + self._freq_offset_flag_win = RangeWidget(self._freq_offset_flag_range, self.set_freq_offset_flag, 'Enable flatsat freq', "counter_slider", float) + self.top_grid_layout.addWidget(self._freq_offset_flag_win) + self.fir_filter_xxx_0 = filter.fir_filter_ccc(samp_rate_factor, (1, )) + self.fir_filter_xxx_0.declare_sample_delay(0) + self.digital_mpsk_receiver_cc_0_0 = digital.mpsk_receiver_cc(2, 0, cmath.pi/100.0, -0.05, 0.05, 0.25, 0.05, 4, 4, 0.005) + self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(variable_constellation_0) + self.ccsds_softbits_msg_to_bytes_b_0 = ccsds.softbits_msg_to_bytes_b() + self.ccsds_randomiser_softbits_0 = ccsds.randomiser_softbits(0x95,0xFF) + self.ccsds_mpsk_ambiguity_resolver_f_0 = ccsds.mpsk_ambiguity_resolver_f(2,'49E0DCC7',32,1,0.8,block_len_enc,0) + self.ccsds_message_info_0 = ccsds.message_info("Block received and sent to Nanolink: ", 10) + self.ccsds_ldpc_decoder_0 = ccsds.ldpc_decoder('/app/gnuradio/AR4JA_r12_k1024n.a', ccsds.LDPC_SYS_FRONT, ccsds.LDPC_PUNCT_BACK, 512, tuple(([])), False) + self.ccsds_blob_msg_sink_b_0 = ccsds.blob_msg_sink_b(256/2) + self.blocks_udp_sink_0_1 = blocks.udp_sink(gr.sizeof_char*1, '127.0.0.1', 5431, 256, True) + self.blocks_udp_sink_0_0 = blocks.udp_sink(gr.sizeof_char*1, '127.0.0.1', 5433, 1472, True) + self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_gr_complex*1, '127.0.0.1', 5435, 1472, True) + self.blocks_null_sink_1 = blocks.null_sink(gr.sizeof_char*1) + self.blocks_multiply_xx_0_0 = blocks.multiply_vcc(1) + self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) + self.blocks_char_to_float_0 = blocks.char_to_float(1, 0.5) + self.blocks_add_const_vxx_0 = blocks.add_const_vff((-1, )) + self.band_pass_filter_0 = filter.fir_filter_ccc(1, firdes.complex_band_pass( + 1, samp_rate*samp_rate_factor, 40e3, 60e3, 6e3, firdes.WIN_HAMMING, 6.76)) + self.analog_sig_source_x_0_0 = analog.sig_source_c(samp_rate*samp_rate_factor, analog.GR_COS_WAVE, -freq_offset, 1, 0) + self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, -50000, 1, 0) + self.analog_agc_xx_0 = analog.agc_cc(1e-4, 0.5, 1.0) + self.analog_agc_xx_0.set_max_gain(65536) + + + + ################################################## + # Connections + ################################################## + self.msg_connect((self.ccsds_blob_msg_sink_b_0, 'out'), (self.ccsds_message_info_0, 'in')) + self.msg_connect((self.ccsds_ldpc_decoder_0, 'out'), (self.ccsds_softbits_msg_to_bytes_b_0, 'in')) + self.msg_connect((self.ccsds_mpsk_ambiguity_resolver_f_0, 'out'), (self.ccsds_randomiser_softbits_0, 'in')) + self.msg_connect((self.ccsds_randomiser_softbits_0, 'out'), (self.ccsds_ldpc_decoder_0, 'in')) + self.connect((self.analog_agc_xx_0, 0), (self.rational_resampler_xxx_1, 0)) + self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 0)) + self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_multiply_xx_0_0, 0)) + self.connect((self.band_pass_filter_0, 0), (self.fir_filter_xxx_0, 0)) + self.connect((self.blocks_add_const_vxx_0, 0), (self.ccsds_mpsk_ambiguity_resolver_f_0, 0)) + self.connect((self.blocks_char_to_float_0, 0), (self.blocks_add_const_vxx_0, 0)) + self.connect((self.blocks_multiply_xx_0, 0), (self.analog_agc_xx_0, 0)) + self.connect((self.blocks_multiply_xx_0, 0), (self.qtgui_sink_x_0_0_1, 0)) + self.connect((self.blocks_multiply_xx_0_0, 0), (self.band_pass_filter_0, 0)) + self.connect((self.ccsds_softbits_msg_to_bytes_b_0, 0), (self.blocks_null_sink_1, 0)) + self.connect((self.ccsds_softbits_msg_to_bytes_b_0, 0), (self.blocks_udp_sink_0_1, 0)) + self.connect((self.ccsds_softbits_msg_to_bytes_b_0, 0), (self.ccsds_blob_msg_sink_b_0, 0)) + self.connect((self.digital_constellation_decoder_cb_0, 0), (self.blocks_char_to_float_0, 0)) + self.connect((self.digital_constellation_decoder_cb_0, 0), (self.blocks_udp_sink_0_0, 0)) + self.connect((self.digital_mpsk_receiver_cc_0_0, 0), (self.digital_constellation_decoder_cb_0, 0)) + self.connect((self.digital_mpsk_receiver_cc_0_0, 0), (self.qtgui_sink_x_1, 0)) + self.connect((self.fir_filter_xxx_0, 0), (self.blocks_multiply_xx_0, 1)) + self.connect((self.osmosdr_source_0, 0), (self.blocks_multiply_xx_0_0, 1)) + self.connect((self.osmosdr_source_0, 0), (self.blocks_udp_sink_0, 0)) + self.connect((self.osmosdr_source_0, 0), (self.qtgui_sink_x_0_0, 0)) + self.connect((self.rational_resampler_xxx_1, 0), (self.digital_mpsk_receiver_cc_0_0, 0)) + + def closeEvent(self, event): + self.settings = Qt.QSettings("GNU Radio", "downlink") + self.settings.setValue("geometry", self.saveGeometry()) + event.accept() + + def get_block_len_enc(self): + return self.block_len_enc + + def set_block_len_enc(self, block_len_enc): + self.block_len_enc = block_len_enc + self.set_payload(self.block_len_enc+4) + + def get_variable_constellation_0(self): + return self.variable_constellation_0 + + def set_variable_constellation_0(self, variable_constellation_0): + self.variable_constellation_0 = variable_constellation_0 + + def get_samp_rate_factor(self): + return self.samp_rate_factor + + def set_samp_rate_factor(self, samp_rate_factor): + self.samp_rate_factor = samp_rate_factor + self.qtgui_sink_x_0_0.set_frequency_range(0, self.samp_rate*self.samp_rate_factor) + self.osmosdr_source_0.set_sample_rate(self.samp_rate*self.samp_rate_factor) + self.band_pass_filter_0.set_taps(firdes.complex_band_pass(1, self.samp_rate*self.samp_rate_factor, 40e3, 60e3, 6e3, firdes.WIN_HAMMING, 6.76)) + self.analog_sig_source_x_0_0.set_sampling_freq(self.samp_rate*self.samp_rate_factor) + + def get_samp_rate(self): + return self.samp_rate + + def set_samp_rate(self, samp_rate): + self.samp_rate = samp_rate + self.qtgui_sink_x_1.set_frequency_range(0, self.samp_rate) + self.qtgui_sink_x_0_0_1.set_frequency_range(0, self.samp_rate) + self.qtgui_sink_x_0_0.set_frequency_range(0, self.samp_rate*self.samp_rate_factor) + self.osmosdr_source_0.set_sample_rate(self.samp_rate*self.samp_rate_factor) + self.band_pass_filter_0.set_taps(firdes.complex_band_pass(1, self.samp_rate*self.samp_rate_factor, 40e3, 60e3, 6e3, firdes.WIN_HAMMING, 6.76)) + self.analog_sig_source_x_0_0.set_sampling_freq(self.samp_rate*self.samp_rate_factor) + self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate) + + def get_rgain(self): + return self.rgain + + def set_rgain(self, rgain): + self.rgain = rgain + self.osmosdr_source_0.set_gain(self.rgain, 0) + + def get_payload(self): + return self.payload + + def set_payload(self, payload): + self.payload = payload + + def get_freq_offset_flag(self): + return self.freq_offset_flag + + def set_freq_offset_flag(self, freq_offset_flag): + self.freq_offset_flag = freq_offset_flag + + def get_freq_offset(self): + return self.freq_offset + + def set_freq_offset(self, freq_offset): + self.freq_offset = freq_offset + self.analog_sig_source_x_0_0.set_frequency(-self.freq_offset) + + +def main(top_block_cls=downlink, options=None): + + from distutils.version import StrictVersion + if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): + style = gr.prefs().get_string('qtgui', 'style', 'raster') + Qt.QApplication.setGraphicsSystem(style) + qapp = Qt.QApplication(sys.argv) + + tb = top_block_cls() + tb.start(2080) + tb.show() + + def quitting(): + tb.stop() + tb.wait() + qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) + qapp.exec_() + + +if __name__ == '__main__': + main() diff --git a/build/run-cli.sh b/build/run-cli.sh index af28ad4..6079f3d 100644 --- a/build/run-cli.sh +++ b/build/run-cli.sh @@ -4,4 +4,4 @@ mkdir -p /app/data/output touch /app/data/output/frames.txt python3 /app/fakeserver/server.py & -bash \ No newline at end of file +/app/gnuradio/downlink.py \ No newline at end of file diff --git a/build/run-gui.sh b/build/run-gui.sh index f6592c9..34a0dba 100644 --- a/build/run-gui.sh +++ b/build/run-gui.sh @@ -4,4 +4,4 @@ mkdir -p /app/data/output touch /app/data/output/frames.txt python3 /app/fakeserver/server.py & -gnuradio-companion \ No newline at end of file +gnuradio-companion /app/gnuradio/downlink.grc \ No newline at end of file diff --git a/scripts/run-dev.sh b/scripts/run-dev-cli.sh similarity index 100% rename from scripts/run-dev.sh rename to scripts/run-dev-cli.sh diff --git a/scripts/run-dev-gui.sh b/scripts/run-dev-gui.sh new file mode 100644 index 0000000..f87c04a --- /dev/null +++ b/scripts/run-dev-gui.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +cd "${0%/*}/.." +source ./config/config.sh + +docker run -it --rm \ + -v $(pwd)/data:/app/data:rw \ + --env DISPLAY=host.docker.internal:0.0 \ + --entrypoint /app/run-gui.sh \ + move2docker:dev-$(arch) \ No newline at end of file