diff --git a/README.md b/README.md
index e73b56a..3f659a8 100644
--- a/README.md
+++ b/README.md
@@ -25,4 +25,26 @@ The transmit side is designed to run on a Raspberry Pi, and the UART (/dev/ttyAM
### RX Testing
* `rx_tester.py` produces a stream of packets on stdout, as would be received from the fsk_demod modem (from codec2 - still under development).
* Run `python rx_tester.py | python rx_ssdv.py` to feed these test packets into the command-line ssdv rx script.
- * add `--partialupdate N` to the above command to have rx_gui.py update every N received packets.
\ No newline at end of file
+ * add `--partialupdate N` to the above command to have rx_gui.py update every N received packets.
+
+## Sending/Receiving Images
+### TX Site
+* Run either `python tx_picam.py` (might need sudo) or `python tx_test_images.py` on the transmitter Raspberry Pi.
+
+### RX Side
+To be able to run a full receive chain, from SDR through to images, you'll need:
+* GnuRadio + libraries for whatever SDR you plan on using.
+* `fsk_demod` and `drs232` from codec2-dev. You can get these using
+ * `svn checkout http://svn.code.sf.net/p/freetel/code/codec2-dev/`
+ * `cd codec2-dev && mkdir build-linux && cd build-linux && cmake ../`
+ * Build `drs232` using `gcc src/drs232.c -o src/drs232 -Wall`
+ * Then copy `src/fsk_demod` and `src/drs232` to this directory.
+
+* A few example gnuradio-companion flow-graphs are in the `grc` directory, for different SDRs. These receive samples from the SDR, demodulate a 500KHz section of spectrum as USB, resamples them to fsbaud*8 (which fsk_demod requires), then presents these samples via a TCP sink, which is acting as a TCP server. You will probably need to modify these to set the appropriate receive frequency.
+
+* To receive the FSK data and display the images 'live', run:
+ * In another terminal: `python rx_gui.py`, which will listen via UDP for new images to display.
+ * Start the appropriate GNURadio Companion Flowgraph. This will block until a client connects to the TCP Sinks TCP socket.
+ * Start the FSK modem with:
+ * `nc localhost 9898 | ./fsk_demod 2X 8 921600 115200 - - | ./drs232 - - | python rx_ssdv.py --partialupdate 8`
+
diff --git a/grc/usb_demod_fcdpp.grc b/grc/usb_demod_fcdpp.grc
new file mode 100644
index 0000000..0057932
--- /dev/null
+++ b/grc/usb_demod_fcdpp.grc
@@ -0,0 +1,1176 @@
+
+
+
+ Tue Feb 23 21:53:55 2016
+
+ options
+
+ id
+ usb_demod_rtlsdr
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ max_nouts
+ 0
+
+
+ realtime_scheduling
+
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ out_samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 0.9216e6
+
+
+ alias
+
+
+
+ _coordinate
+ (280, 491)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 0.192e6
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ gain
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 25
+
+
+ min
+ 0
+
+
+ max
+ 50
+
+
+ num_steps
+ 125
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (11, 270)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_complex_to_real
+
+ id
+ blocks_complex_to_real_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (696, 464)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency
+
+
+ value
+ 441.2e6
+
+
+ min
+ 435e6
+
+
+ max
+ 445e6
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (16, 515)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ SSB Demod
+
+
+ samp_rate
+ out_samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1040, 315)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Spectrum
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (784, 11)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_multiply_xx
+
+ id
+ blocks_multiply_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (456, 328)
+
+
+ _rotation
+ 0
+
+
+
+ rational_resampler_xxx
+
+ id
+ rational_resampler_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccc
+
+
+ interp
+ 8
+
+
+ decim
+ 1
+
+
+ taps
+
+
+
+ fbw
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (224, 251)
+
+
+ _rotation
+ 0
+
+
+
+ band_pass_filter
+
+ id
+ band_pass_filter_0
+
+
+ _enabled
+ True
+
+
+ type
+ fir_filter_ccc
+
+
+ decim
+ 1
+
+
+ interp
+ 1
+
+
+ gain
+ 1
+
+
+ samp_rate
+ samp_rate*8
+
+
+ low_cutoff_freq
+ 50000
+
+
+ high_cutoff_freq
+ 450000
+
+
+ width
+ 50000
+
+
+ win
+ firdes.WIN_HAMMING
+
+
+ beta
+ 6.76
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (584, 179)
+
+
+ _rotation
+ 0
+
+
+
+ analog_sig_source_x
+
+ id
+ analog_sig_source_x_3
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samp_rate
+ samp_rate*8
+
+
+ waveform
+ analog.GR_COS_WAVE
+
+
+ freq
+ samp_rate
+
+
+ amp
+ 1
+
+
+ offset
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (240, 355)
+
+
+ _rotation
+ 0
+
+
+
+ pfb_arb_resampler_xxx
+
+ id
+ pfb_arb_resampler_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccf
+
+
+ rrate
+ out_samp_rate/(samp_rate*8)
+
+
+ taps
+
+
+
+ nfilts
+ 32
+
+
+ atten
+ 100
+
+
+ samp_delay
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (776, 243)
+
+
+ _rotation
+ 0
+
+
+
+ fcdproplus_fcdproplus
+
+ id
+ fcdproplus_fcdproplus_0
+
+
+ _enabled
+ True
+
+
+ device_name
+ plughw:CARD=V20,DEV=0
+
+
+ unit
+ 1
+
+
+ lnaswitch
+ 1
+
+
+ mixergainswitch
+ 1
+
+
+ freq
+ freq
+
+
+ ppm
+ 0
+
+
+ if_gain
+ 40
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (176, 75)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ False
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate/4
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1048, 771)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_short_to_float
+
+ id
+ blocks_short_to_float_0
+
+
+ _enabled
+ False
+
+
+ vlen
+ 1
+
+
+ scale
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (880, 811)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_file_sink
+
+ id
+ blocks_file_sink_0
+
+
+ _enabled
+ False
+
+
+ file
+ /tmp/fsktest
+
+
+ type
+ short
+
+
+ vlen
+ 1
+
+
+ unbuffered
+ False
+
+
+ append
+ False
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1048, 659)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_float_to_short
+
+ id
+ blocks_float_to_short_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ scale
+ 32768
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (872, 587)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_tcp_sink
+
+ id
+ blks2_tcp_sink_0
+
+
+ _enabled
+ True
+
+
+ type
+ short
+
+
+ addr
+ 127.0.0.1
+
+
+ port
+ 9898
+
+
+ server
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1056, 539)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_float_to_short_0
+ blocks_file_sink_0
+ 0
+ 0
+
+
+ pfb_arb_resampler_xxx_0
+ blocks_complex_to_real_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ wxgui_fftsink2_1
+ 0
+ 0
+
+
+ blocks_short_to_float_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ blocks_float_to_short_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blocks_short_to_float_0
+ 0
+ 0
+
+
+ fcdproplus_fcdproplus_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ analog_sig_source_x_3
+ blocks_multiply_xx_0
+ 0
+ 1
+
+
+ fcdproplus_fcdproplus_0
+ rational_resampler_xxx_0
+ 0
+ 0
+
+
+ rational_resampler_xxx_0
+ blocks_multiply_xx_0
+ 0
+ 0
+
+
+ blocks_multiply_xx_0
+ band_pass_filter_0
+ 0
+ 0
+
+
+ band_pass_filter_0
+ pfb_arb_resampler_xxx_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blks2_tcp_sink_0
+ 0
+ 0
+
+
diff --git a/grc/usb_demod_hackrf.grc b/grc/usb_demod_hackrf.grc
new file mode 100644
index 0000000..4d1bd3b
--- /dev/null
+++ b/grc/usb_demod_hackrf.grc
@@ -0,0 +1,2310 @@
+
+
+
+ Tue Feb 23 21:53:55 2016
+
+ options
+
+ id
+ usb
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ max_nouts
+ 0
+
+
+ realtime_scheduling
+
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 4e6
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ gain
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 25
+
+
+ min
+ 0
+
+
+ max
+ 50
+
+
+ num_steps
+ 125
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (11, 270)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_complex_to_real
+
+ id
+ blocks_complex_to_real_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (696, 464)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ SSB Demod
+
+
+ samp_rate
+ samp_rate/4
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1040, 315)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Spectrum
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (560, 11)
+
+
+ _rotation
+ 0
+
+
+
+ band_pass_filter
+
+ id
+ band_pass_filter_0
+
+
+ _enabled
+ True
+
+
+ type
+ fir_filter_ccc
+
+
+ decim
+ 4
+
+
+ interp
+ 1
+
+
+ gain
+ 1
+
+
+ samp_rate
+ samp_rate
+
+
+ low_cutoff_freq
+ 50000
+
+
+ high_cutoff_freq
+ 450000
+
+
+ width
+ 50000
+
+
+ win
+ firdes.WIN_HAMMING
+
+
+ beta
+ 6.76
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (560, 211)
+
+
+ _rotation
+ 0
+
+
+
+ pfb_arb_resampler_xxx
+
+ id
+ pfb_arb_resampler_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccf
+
+
+ rrate
+ 0.9216
+
+
+ taps
+
+
+
+ nfilts
+ 32
+
+
+ atten
+ 100
+
+
+ samp_delay
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (368, 435)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source
+
+ id
+ osmosdr_source_0
+
+
+ _enabled
+ True
+
+
+ type
+ fc32
+
+
+ args
+
+
+
+ sync
+
+
+
+ num_mboards
+ 1
+
+
+ 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
+
+
+
+ nchan
+ 1
+
+
+ sample_rate
+ samp_rate
+
+
+ freq0
+ freq
+
+
+ corr0
+ 0
+
+
+ dc_offset_mode0
+ 0
+
+
+ iq_balance_mode0
+ 0
+
+
+ gain_mode0
+ False
+
+
+ gain0
+ 30
+
+
+ if_gain0
+ 20
+
+
+ bb_gain0
+ 20
+
+
+ ant0
+
+
+
+ bw0
+ 0
+
+
+ freq1
+ 100e6
+
+
+ corr1
+ 0
+
+
+ dc_offset_mode1
+ 0
+
+
+ iq_balance_mode1
+ 0
+
+
+ gain_mode1
+ False
+
+
+ gain1
+ 10
+
+
+ if_gain1
+ 20
+
+
+ bb_gain1
+ 20
+
+
+ ant1
+
+
+
+ bw1
+ 0
+
+
+ freq2
+ 100e6
+
+
+ corr2
+ 0
+
+
+ dc_offset_mode2
+ 0
+
+
+ iq_balance_mode2
+ 0
+
+
+ gain_mode2
+ False
+
+
+ gain2
+ 10
+
+
+ if_gain2
+ 20
+
+
+ bb_gain2
+ 20
+
+
+ ant2
+
+
+
+ bw2
+ 0
+
+
+ freq3
+ 100e6
+
+
+ corr3
+ 0
+
+
+ dc_offset_mode3
+ 0
+
+
+ iq_balance_mode3
+ 0
+
+
+ gain_mode3
+ False
+
+
+ gain3
+ 10
+
+
+ if_gain3
+ 20
+
+
+ bb_gain3
+ 20
+
+
+ ant3
+
+
+
+ bw3
+ 0
+
+
+ freq4
+ 100e6
+
+
+ corr4
+ 0
+
+
+ dc_offset_mode4
+ 0
+
+
+ iq_balance_mode4
+ 0
+
+
+ gain_mode4
+ False
+
+
+ gain4
+ 10
+
+
+ if_gain4
+ 20
+
+
+ bb_gain4
+ 20
+
+
+ ant4
+
+
+
+ bw4
+ 0
+
+
+ freq5
+ 100e6
+
+
+ corr5
+ 0
+
+
+ dc_offset_mode5
+ 0
+
+
+ iq_balance_mode5
+ 0
+
+
+ gain_mode5
+ False
+
+
+ gain5
+ 10
+
+
+ if_gain5
+ 20
+
+
+ bb_gain5
+ 20
+
+
+ ant5
+
+
+
+ bw5
+ 0
+
+
+ freq6
+ 100e6
+
+
+ corr6
+ 0
+
+
+ dc_offset_mode6
+ 0
+
+
+ iq_balance_mode6
+ 0
+
+
+ gain_mode6
+ False
+
+
+ gain6
+ 10
+
+
+ if_gain6
+ 20
+
+
+ bb_gain6
+ 20
+
+
+ ant6
+
+
+
+ bw6
+ 0
+
+
+ freq7
+ 100e6
+
+
+ corr7
+ 0
+
+
+ dc_offset_mode7
+ 0
+
+
+ iq_balance_mode7
+ 0
+
+
+ gain_mode7
+ False
+
+
+ gain7
+ 10
+
+
+ if_gain7
+ 20
+
+
+ bb_gain7
+ 20
+
+
+ ant7
+
+
+
+ bw7
+ 0
+
+
+ freq8
+ 100e6
+
+
+ corr8
+ 0
+
+
+ dc_offset_mode8
+ 0
+
+
+ iq_balance_mode8
+ 0
+
+
+ gain_mode8
+ False
+
+
+ gain8
+ 10
+
+
+ if_gain8
+ 20
+
+
+ bb_gain8
+ 20
+
+
+ ant8
+
+
+
+ bw8
+ 0
+
+
+ freq9
+ 100e6
+
+
+ corr9
+ 0
+
+
+ dc_offset_mode9
+ 0
+
+
+ iq_balance_mode9
+ 0
+
+
+ gain_mode9
+ False
+
+
+ gain9
+ 10
+
+
+ if_gain9
+ 20
+
+
+ bb_gain9
+ 20
+
+
+ ant9
+
+
+
+ bw9
+ 0
+
+
+ freq10
+ 100e6
+
+
+ corr10
+ 0
+
+
+ dc_offset_mode10
+ 0
+
+
+ iq_balance_mode10
+ 0
+
+
+ gain_mode10
+ False
+
+
+ gain10
+ 10
+
+
+ if_gain10
+ 20
+
+
+ bb_gain10
+ 20
+
+
+ ant10
+
+
+
+ bw10
+ 0
+
+
+ freq11
+ 100e6
+
+
+ corr11
+ 0
+
+
+ dc_offset_mode11
+ 0
+
+
+ iq_balance_mode11
+ 0
+
+
+ gain_mode11
+ False
+
+
+ gain11
+ 10
+
+
+ if_gain11
+ 20
+
+
+ bb_gain11
+ 20
+
+
+ ant11
+
+
+
+ bw11
+ 0
+
+
+ freq12
+ 100e6
+
+
+ corr12
+ 0
+
+
+ dc_offset_mode12
+ 0
+
+
+ iq_balance_mode12
+ 0
+
+
+ gain_mode12
+ False
+
+
+ gain12
+ 10
+
+
+ if_gain12
+ 20
+
+
+ bb_gain12
+ 20
+
+
+ ant12
+
+
+
+ bw12
+ 0
+
+
+ freq13
+ 100e6
+
+
+ corr13
+ 0
+
+
+ dc_offset_mode13
+ 0
+
+
+ iq_balance_mode13
+ 0
+
+
+ gain_mode13
+ False
+
+
+ gain13
+ 10
+
+
+ if_gain13
+ 20
+
+
+ bb_gain13
+ 20
+
+
+ ant13
+
+
+
+ bw13
+ 0
+
+
+ freq14
+ 100e6
+
+
+ corr14
+ 0
+
+
+ dc_offset_mode14
+ 0
+
+
+ iq_balance_mode14
+ 0
+
+
+ gain_mode14
+ False
+
+
+ gain14
+ 10
+
+
+ if_gain14
+ 20
+
+
+ bb_gain14
+ 20
+
+
+ ant14
+
+
+
+ bw14
+ 0
+
+
+ freq15
+ 100e6
+
+
+ corr15
+ 0
+
+
+ dc_offset_mode15
+ 0
+
+
+ iq_balance_mode15
+ 0
+
+
+ gain_mode15
+ False
+
+
+ gain15
+ 10
+
+
+ if_gain15
+ 20
+
+
+ bb_gain15
+ 20
+
+
+ ant15
+
+
+
+ bw15
+ 0
+
+
+ freq16
+ 100e6
+
+
+ corr16
+ 0
+
+
+ dc_offset_mode16
+ 0
+
+
+ iq_balance_mode16
+ 0
+
+
+ gain_mode16
+ False
+
+
+ gain16
+ 10
+
+
+ if_gain16
+ 20
+
+
+ bb_gain16
+ 20
+
+
+ ant16
+
+
+
+ bw16
+ 0
+
+
+ freq17
+ 100e6
+
+
+ corr17
+ 0
+
+
+ dc_offset_mode17
+ 0
+
+
+ iq_balance_mode17
+ 0
+
+
+ gain_mode17
+ False
+
+
+ gain17
+ 10
+
+
+ if_gain17
+ 20
+
+
+ bb_gain17
+ 20
+
+
+ ant17
+
+
+
+ bw17
+ 0
+
+
+ freq18
+ 100e6
+
+
+ corr18
+ 0
+
+
+ dc_offset_mode18
+ 0
+
+
+ iq_balance_mode18
+ 0
+
+
+ gain_mode18
+ False
+
+
+ gain18
+ 10
+
+
+ if_gain18
+ 20
+
+
+ bb_gain18
+ 20
+
+
+ ant18
+
+
+
+ bw18
+ 0
+
+
+ freq19
+ 100e6
+
+
+ corr19
+ 0
+
+
+ dc_offset_mode19
+ 0
+
+
+ iq_balance_mode19
+ 0
+
+
+ gain_mode19
+ False
+
+
+ gain19
+ 10
+
+
+ if_gain19
+ 20
+
+
+ bb_gain19
+ 20
+
+
+ ant19
+
+
+
+ bw19
+ 0
+
+
+ freq20
+ 100e6
+
+
+ corr20
+ 0
+
+
+ dc_offset_mode20
+ 0
+
+
+ iq_balance_mode20
+ 0
+
+
+ gain_mode20
+ False
+
+
+ gain20
+ 10
+
+
+ if_gain20
+ 20
+
+
+ bb_gain20
+ 20
+
+
+ ant20
+
+
+
+ bw20
+ 0
+
+
+ freq21
+ 100e6
+
+
+ corr21
+ 0
+
+
+ dc_offset_mode21
+ 0
+
+
+ iq_balance_mode21
+ 0
+
+
+ gain_mode21
+ False
+
+
+ gain21
+ 10
+
+
+ if_gain21
+ 20
+
+
+ bb_gain21
+ 20
+
+
+ ant21
+
+
+
+ bw21
+ 0
+
+
+ freq22
+ 100e6
+
+
+ corr22
+ 0
+
+
+ dc_offset_mode22
+ 0
+
+
+ iq_balance_mode22
+ 0
+
+
+ gain_mode22
+ False
+
+
+ gain22
+ 10
+
+
+ if_gain22
+ 20
+
+
+ bb_gain22
+ 20
+
+
+ ant22
+
+
+
+ bw22
+ 0
+
+
+ freq23
+ 100e6
+
+
+ corr23
+ 0
+
+
+ dc_offset_mode23
+ 0
+
+
+ iq_balance_mode23
+ 0
+
+
+ gain_mode23
+ False
+
+
+ gain23
+ 10
+
+
+ if_gain23
+ 20
+
+
+ bb_gain23
+ 20
+
+
+ ant23
+
+
+
+ bw23
+ 0
+
+
+ freq24
+ 100e6
+
+
+ corr24
+ 0
+
+
+ dc_offset_mode24
+ 0
+
+
+ iq_balance_mode24
+ 0
+
+
+ gain_mode24
+ False
+
+
+ gain24
+ 10
+
+
+ if_gain24
+ 20
+
+
+ bb_gain24
+ 20
+
+
+ ant24
+
+
+
+ bw24
+ 0
+
+
+ freq25
+ 100e6
+
+
+ corr25
+ 0
+
+
+ dc_offset_mode25
+ 0
+
+
+ iq_balance_mode25
+ 0
+
+
+ gain_mode25
+ False
+
+
+ gain25
+ 10
+
+
+ if_gain25
+ 20
+
+
+ bb_gain25
+ 20
+
+
+ ant25
+
+
+
+ bw25
+ 0
+
+
+ freq26
+ 100e6
+
+
+ corr26
+ 0
+
+
+ dc_offset_mode26
+ 0
+
+
+ iq_balance_mode26
+ 0
+
+
+ gain_mode26
+ False
+
+
+ gain26
+ 10
+
+
+ if_gain26
+ 20
+
+
+ bb_gain26
+ 20
+
+
+ ant26
+
+
+
+ bw26
+ 0
+
+
+ freq27
+ 100e6
+
+
+ corr27
+ 0
+
+
+ dc_offset_mode27
+ 0
+
+
+ iq_balance_mode27
+ 0
+
+
+ gain_mode27
+ False
+
+
+ gain27
+ 10
+
+
+ if_gain27
+ 20
+
+
+ bb_gain27
+ 20
+
+
+ ant27
+
+
+
+ bw27
+ 0
+
+
+ freq28
+ 100e6
+
+
+ corr28
+ 0
+
+
+ dc_offset_mode28
+ 0
+
+
+ iq_balance_mode28
+ 0
+
+
+ gain_mode28
+ False
+
+
+ gain28
+ 10
+
+
+ if_gain28
+ 20
+
+
+ bb_gain28
+ 20
+
+
+ ant28
+
+
+
+ bw28
+ 0
+
+
+ freq29
+ 100e6
+
+
+ corr29
+ 0
+
+
+ dc_offset_mode29
+ 0
+
+
+ iq_balance_mode29
+ 0
+
+
+ gain_mode29
+ False
+
+
+ gain29
+ 10
+
+
+ if_gain29
+ 20
+
+
+ bb_gain29
+ 20
+
+
+ ant29
+
+
+
+ bw29
+ 0
+
+
+ freq30
+ 100e6
+
+
+ corr30
+ 0
+
+
+ dc_offset_mode30
+ 0
+
+
+ iq_balance_mode30
+ 0
+
+
+ gain_mode30
+ False
+
+
+ gain30
+ 10
+
+
+ if_gain30
+ 20
+
+
+ bb_gain30
+ 20
+
+
+ ant30
+
+
+
+ bw30
+ 0
+
+
+ freq31
+ 100e6
+
+
+ corr31
+ 0
+
+
+ dc_offset_mode31
+ 0
+
+
+ iq_balance_mode31
+ 0
+
+
+ gain_mode31
+ False
+
+
+ gain31
+ 10
+
+
+ if_gain31
+ 20
+
+
+ bb_gain31
+ 20
+
+
+ ant31
+
+
+
+ bw31
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (224, 75)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency
+
+
+ value
+ 441.0e6
+
+
+ min
+ 435e6
+
+
+ max
+ 445e6
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (16, 515)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ False
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate/4
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1048, 843)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_short_to_float
+
+ id
+ blocks_short_to_float_0
+
+
+ _enabled
+ False
+
+
+ vlen
+ 1
+
+
+ scale
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (872, 867)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_file_sink
+
+ id
+ blocks_file_sink_0
+
+
+ _enabled
+ False
+
+
+ file
+ /tmp/fsktest
+
+
+ type
+ short
+
+
+ vlen
+ 1
+
+
+ unbuffered
+ False
+
+
+ append
+ False
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1048, 683)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_float_to_short
+
+ id
+ blocks_float_to_short_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ scale
+ 32768
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (872, 587)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_tcp_sink
+
+ id
+ blks2_tcp_sink_0
+
+
+ _enabled
+ True
+
+
+ type
+ short
+
+
+ addr
+ 127.0.0.1
+
+
+ port
+ 9898
+
+
+ server
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1072, 571)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blocks_file_sink_0
+ 0
+ 0
+
+
+ band_pass_filter_0
+ pfb_arb_resampler_xxx_0
+ 0
+ 0
+
+
+ pfb_arb_resampler_xxx_0
+ blocks_complex_to_real_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ wxgui_fftsink2_1
+ 0
+ 0
+
+
+ blocks_short_to_float_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ osmosdr_source_0
+ band_pass_filter_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ blocks_float_to_short_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blocks_short_to_float_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blks2_tcp_sink_0
+ 0
+ 0
+
+
diff --git a/grc/usb_demod_rtlsdr.grc b/grc/usb_demod_rtlsdr.grc
new file mode 100644
index 0000000..5971282
--- /dev/null
+++ b/grc/usb_demod_rtlsdr.grc
@@ -0,0 +1,2310 @@
+
+
+
+ Tue Feb 23 21:53:55 2016
+
+ options
+
+ id
+ usb_demod_rtlsdr
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ max_nouts
+ 0
+
+
+ realtime_scheduling
+
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 2e6
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 170)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ gain
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 25
+
+
+ min
+ 0
+
+
+ max
+ 50
+
+
+ num_steps
+ 125
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (11, 270)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Spectrum
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (560, 11)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_short_to_float
+
+ id
+ blocks_short_to_float_0
+
+
+ _enabled
+ False
+
+
+ vlen
+ 1
+
+
+ scale
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (880, 731)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ False
+
+
+ type
+ float
+
+
+ title
+ Scope Plot
+
+
+ samp_rate
+ samp_rate/4
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1048, 699)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+ Frequency
+
+
+ value
+ 440.960e6
+
+
+ min
+ 435e6
+
+
+ max
+ 445e6
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (16, 515)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source
+
+ id
+ osmosdr_source_0
+
+
+ _enabled
+ True
+
+
+ type
+ fc32
+
+
+ args
+
+
+
+ sync
+
+
+
+ num_mboards
+ 1
+
+
+ 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
+
+
+
+ nchan
+ 1
+
+
+ sample_rate
+ samp_rate
+
+
+ freq0
+ freq
+
+
+ corr0
+ 0
+
+
+ dc_offset_mode0
+ 0
+
+
+ iq_balance_mode0
+ 0
+
+
+ gain_mode0
+ True
+
+
+ gain0
+ 30
+
+
+ if_gain0
+ 20
+
+
+ bb_gain0
+ 20
+
+
+ ant0
+
+
+
+ bw0
+ 0
+
+
+ freq1
+ 100e6
+
+
+ corr1
+ 0
+
+
+ dc_offset_mode1
+ 0
+
+
+ iq_balance_mode1
+ 0
+
+
+ gain_mode1
+ False
+
+
+ gain1
+ 10
+
+
+ if_gain1
+ 20
+
+
+ bb_gain1
+ 20
+
+
+ ant1
+
+
+
+ bw1
+ 0
+
+
+ freq2
+ 100e6
+
+
+ corr2
+ 0
+
+
+ dc_offset_mode2
+ 0
+
+
+ iq_balance_mode2
+ 0
+
+
+ gain_mode2
+ False
+
+
+ gain2
+ 10
+
+
+ if_gain2
+ 20
+
+
+ bb_gain2
+ 20
+
+
+ ant2
+
+
+
+ bw2
+ 0
+
+
+ freq3
+ 100e6
+
+
+ corr3
+ 0
+
+
+ dc_offset_mode3
+ 0
+
+
+ iq_balance_mode3
+ 0
+
+
+ gain_mode3
+ False
+
+
+ gain3
+ 10
+
+
+ if_gain3
+ 20
+
+
+ bb_gain3
+ 20
+
+
+ ant3
+
+
+
+ bw3
+ 0
+
+
+ freq4
+ 100e6
+
+
+ corr4
+ 0
+
+
+ dc_offset_mode4
+ 0
+
+
+ iq_balance_mode4
+ 0
+
+
+ gain_mode4
+ False
+
+
+ gain4
+ 10
+
+
+ if_gain4
+ 20
+
+
+ bb_gain4
+ 20
+
+
+ ant4
+
+
+
+ bw4
+ 0
+
+
+ freq5
+ 100e6
+
+
+ corr5
+ 0
+
+
+ dc_offset_mode5
+ 0
+
+
+ iq_balance_mode5
+ 0
+
+
+ gain_mode5
+ False
+
+
+ gain5
+ 10
+
+
+ if_gain5
+ 20
+
+
+ bb_gain5
+ 20
+
+
+ ant5
+
+
+
+ bw5
+ 0
+
+
+ freq6
+ 100e6
+
+
+ corr6
+ 0
+
+
+ dc_offset_mode6
+ 0
+
+
+ iq_balance_mode6
+ 0
+
+
+ gain_mode6
+ False
+
+
+ gain6
+ 10
+
+
+ if_gain6
+ 20
+
+
+ bb_gain6
+ 20
+
+
+ ant6
+
+
+
+ bw6
+ 0
+
+
+ freq7
+ 100e6
+
+
+ corr7
+ 0
+
+
+ dc_offset_mode7
+ 0
+
+
+ iq_balance_mode7
+ 0
+
+
+ gain_mode7
+ False
+
+
+ gain7
+ 10
+
+
+ if_gain7
+ 20
+
+
+ bb_gain7
+ 20
+
+
+ ant7
+
+
+
+ bw7
+ 0
+
+
+ freq8
+ 100e6
+
+
+ corr8
+ 0
+
+
+ dc_offset_mode8
+ 0
+
+
+ iq_balance_mode8
+ 0
+
+
+ gain_mode8
+ False
+
+
+ gain8
+ 10
+
+
+ if_gain8
+ 20
+
+
+ bb_gain8
+ 20
+
+
+ ant8
+
+
+
+ bw8
+ 0
+
+
+ freq9
+ 100e6
+
+
+ corr9
+ 0
+
+
+ dc_offset_mode9
+ 0
+
+
+ iq_balance_mode9
+ 0
+
+
+ gain_mode9
+ False
+
+
+ gain9
+ 10
+
+
+ if_gain9
+ 20
+
+
+ bb_gain9
+ 20
+
+
+ ant9
+
+
+
+ bw9
+ 0
+
+
+ freq10
+ 100e6
+
+
+ corr10
+ 0
+
+
+ dc_offset_mode10
+ 0
+
+
+ iq_balance_mode10
+ 0
+
+
+ gain_mode10
+ False
+
+
+ gain10
+ 10
+
+
+ if_gain10
+ 20
+
+
+ bb_gain10
+ 20
+
+
+ ant10
+
+
+
+ bw10
+ 0
+
+
+ freq11
+ 100e6
+
+
+ corr11
+ 0
+
+
+ dc_offset_mode11
+ 0
+
+
+ iq_balance_mode11
+ 0
+
+
+ gain_mode11
+ False
+
+
+ gain11
+ 10
+
+
+ if_gain11
+ 20
+
+
+ bb_gain11
+ 20
+
+
+ ant11
+
+
+
+ bw11
+ 0
+
+
+ freq12
+ 100e6
+
+
+ corr12
+ 0
+
+
+ dc_offset_mode12
+ 0
+
+
+ iq_balance_mode12
+ 0
+
+
+ gain_mode12
+ False
+
+
+ gain12
+ 10
+
+
+ if_gain12
+ 20
+
+
+ bb_gain12
+ 20
+
+
+ ant12
+
+
+
+ bw12
+ 0
+
+
+ freq13
+ 100e6
+
+
+ corr13
+ 0
+
+
+ dc_offset_mode13
+ 0
+
+
+ iq_balance_mode13
+ 0
+
+
+ gain_mode13
+ False
+
+
+ gain13
+ 10
+
+
+ if_gain13
+ 20
+
+
+ bb_gain13
+ 20
+
+
+ ant13
+
+
+
+ bw13
+ 0
+
+
+ freq14
+ 100e6
+
+
+ corr14
+ 0
+
+
+ dc_offset_mode14
+ 0
+
+
+ iq_balance_mode14
+ 0
+
+
+ gain_mode14
+ False
+
+
+ gain14
+ 10
+
+
+ if_gain14
+ 20
+
+
+ bb_gain14
+ 20
+
+
+ ant14
+
+
+
+ bw14
+ 0
+
+
+ freq15
+ 100e6
+
+
+ corr15
+ 0
+
+
+ dc_offset_mode15
+ 0
+
+
+ iq_balance_mode15
+ 0
+
+
+ gain_mode15
+ False
+
+
+ gain15
+ 10
+
+
+ if_gain15
+ 20
+
+
+ bb_gain15
+ 20
+
+
+ ant15
+
+
+
+ bw15
+ 0
+
+
+ freq16
+ 100e6
+
+
+ corr16
+ 0
+
+
+ dc_offset_mode16
+ 0
+
+
+ iq_balance_mode16
+ 0
+
+
+ gain_mode16
+ False
+
+
+ gain16
+ 10
+
+
+ if_gain16
+ 20
+
+
+ bb_gain16
+ 20
+
+
+ ant16
+
+
+
+ bw16
+ 0
+
+
+ freq17
+ 100e6
+
+
+ corr17
+ 0
+
+
+ dc_offset_mode17
+ 0
+
+
+ iq_balance_mode17
+ 0
+
+
+ gain_mode17
+ False
+
+
+ gain17
+ 10
+
+
+ if_gain17
+ 20
+
+
+ bb_gain17
+ 20
+
+
+ ant17
+
+
+
+ bw17
+ 0
+
+
+ freq18
+ 100e6
+
+
+ corr18
+ 0
+
+
+ dc_offset_mode18
+ 0
+
+
+ iq_balance_mode18
+ 0
+
+
+ gain_mode18
+ False
+
+
+ gain18
+ 10
+
+
+ if_gain18
+ 20
+
+
+ bb_gain18
+ 20
+
+
+ ant18
+
+
+
+ bw18
+ 0
+
+
+ freq19
+ 100e6
+
+
+ corr19
+ 0
+
+
+ dc_offset_mode19
+ 0
+
+
+ iq_balance_mode19
+ 0
+
+
+ gain_mode19
+ False
+
+
+ gain19
+ 10
+
+
+ if_gain19
+ 20
+
+
+ bb_gain19
+ 20
+
+
+ ant19
+
+
+
+ bw19
+ 0
+
+
+ freq20
+ 100e6
+
+
+ corr20
+ 0
+
+
+ dc_offset_mode20
+ 0
+
+
+ iq_balance_mode20
+ 0
+
+
+ gain_mode20
+ False
+
+
+ gain20
+ 10
+
+
+ if_gain20
+ 20
+
+
+ bb_gain20
+ 20
+
+
+ ant20
+
+
+
+ bw20
+ 0
+
+
+ freq21
+ 100e6
+
+
+ corr21
+ 0
+
+
+ dc_offset_mode21
+ 0
+
+
+ iq_balance_mode21
+ 0
+
+
+ gain_mode21
+ False
+
+
+ gain21
+ 10
+
+
+ if_gain21
+ 20
+
+
+ bb_gain21
+ 20
+
+
+ ant21
+
+
+
+ bw21
+ 0
+
+
+ freq22
+ 100e6
+
+
+ corr22
+ 0
+
+
+ dc_offset_mode22
+ 0
+
+
+ iq_balance_mode22
+ 0
+
+
+ gain_mode22
+ False
+
+
+ gain22
+ 10
+
+
+ if_gain22
+ 20
+
+
+ bb_gain22
+ 20
+
+
+ ant22
+
+
+
+ bw22
+ 0
+
+
+ freq23
+ 100e6
+
+
+ corr23
+ 0
+
+
+ dc_offset_mode23
+ 0
+
+
+ iq_balance_mode23
+ 0
+
+
+ gain_mode23
+ False
+
+
+ gain23
+ 10
+
+
+ if_gain23
+ 20
+
+
+ bb_gain23
+ 20
+
+
+ ant23
+
+
+
+ bw23
+ 0
+
+
+ freq24
+ 100e6
+
+
+ corr24
+ 0
+
+
+ dc_offset_mode24
+ 0
+
+
+ iq_balance_mode24
+ 0
+
+
+ gain_mode24
+ False
+
+
+ gain24
+ 10
+
+
+ if_gain24
+ 20
+
+
+ bb_gain24
+ 20
+
+
+ ant24
+
+
+
+ bw24
+ 0
+
+
+ freq25
+ 100e6
+
+
+ corr25
+ 0
+
+
+ dc_offset_mode25
+ 0
+
+
+ iq_balance_mode25
+ 0
+
+
+ gain_mode25
+ False
+
+
+ gain25
+ 10
+
+
+ if_gain25
+ 20
+
+
+ bb_gain25
+ 20
+
+
+ ant25
+
+
+
+ bw25
+ 0
+
+
+ freq26
+ 100e6
+
+
+ corr26
+ 0
+
+
+ dc_offset_mode26
+ 0
+
+
+ iq_balance_mode26
+ 0
+
+
+ gain_mode26
+ False
+
+
+ gain26
+ 10
+
+
+ if_gain26
+ 20
+
+
+ bb_gain26
+ 20
+
+
+ ant26
+
+
+
+ bw26
+ 0
+
+
+ freq27
+ 100e6
+
+
+ corr27
+ 0
+
+
+ dc_offset_mode27
+ 0
+
+
+ iq_balance_mode27
+ 0
+
+
+ gain_mode27
+ False
+
+
+ gain27
+ 10
+
+
+ if_gain27
+ 20
+
+
+ bb_gain27
+ 20
+
+
+ ant27
+
+
+
+ bw27
+ 0
+
+
+ freq28
+ 100e6
+
+
+ corr28
+ 0
+
+
+ dc_offset_mode28
+ 0
+
+
+ iq_balance_mode28
+ 0
+
+
+ gain_mode28
+ False
+
+
+ gain28
+ 10
+
+
+ if_gain28
+ 20
+
+
+ bb_gain28
+ 20
+
+
+ ant28
+
+
+
+ bw28
+ 0
+
+
+ freq29
+ 100e6
+
+
+ corr29
+ 0
+
+
+ dc_offset_mode29
+ 0
+
+
+ iq_balance_mode29
+ 0
+
+
+ gain_mode29
+ False
+
+
+ gain29
+ 10
+
+
+ if_gain29
+ 20
+
+
+ bb_gain29
+ 20
+
+
+ ant29
+
+
+
+ bw29
+ 0
+
+
+ freq30
+ 100e6
+
+
+ corr30
+ 0
+
+
+ dc_offset_mode30
+ 0
+
+
+ iq_balance_mode30
+ 0
+
+
+ gain_mode30
+ False
+
+
+ gain30
+ 10
+
+
+ if_gain30
+ 20
+
+
+ bb_gain30
+ 20
+
+
+ ant30
+
+
+
+ bw30
+ 0
+
+
+ freq31
+ 100e6
+
+
+ corr31
+ 0
+
+
+ dc_offset_mode31
+ 0
+
+
+ iq_balance_mode31
+ 0
+
+
+ gain_mode31
+ False
+
+
+ gain31
+ 10
+
+
+ if_gain31
+ 20
+
+
+ bb_gain31
+ 20
+
+
+ ant31
+
+
+
+ bw31
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (224, 75)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_float_to_short
+
+ id
+ blocks_float_to_short_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ scale
+ 32768
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (872, 587)
+
+
+ _rotation
+ 0
+
+
+
+ band_pass_filter
+
+ id
+ band_pass_filter_0
+
+
+ _enabled
+ True
+
+
+ type
+ fir_filter_ccc
+
+
+ decim
+ 2
+
+
+ interp
+ 1
+
+
+ gain
+ 1
+
+
+ samp_rate
+ samp_rate
+
+
+ low_cutoff_freq
+ 50000
+
+
+ high_cutoff_freq
+ 450000
+
+
+ width
+ 50000
+
+
+ win
+ firdes.WIN_HAMMING
+
+
+ beta
+ 6.76
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (560, 211)
+
+
+ _rotation
+ 0
+
+
+
+ pfb_arb_resampler_xxx
+
+ id
+ pfb_arb_resampler_xxx_0
+
+
+ _enabled
+ True
+
+
+ type
+ ccf
+
+
+ rrate
+ 0.9216
+
+
+ taps
+
+
+
+ nfilts
+ 32
+
+
+ atten
+ 100
+
+
+ samp_delay
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (368, 435)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_1
+
+
+ _enabled
+ True
+
+
+ type
+ float
+
+
+ title
+ SSB Demod
+
+
+ samp_rate
+ samp_rate/4
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1040, 315)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_complex_to_real
+
+ id
+ blocks_complex_to_real_0
+
+
+ _enabled
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (696, 464)
+
+
+ _rotation
+ 0
+
+
+
+ blks2_tcp_sink
+
+ id
+ blks2_tcp_sink_0
+
+
+ _enabled
+ True
+
+
+ type
+ short
+
+
+ addr
+ 127.0.0.1
+
+
+ port
+ 9898
+
+
+ server
+ True
+
+
+ vlen
+ 1
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1080, 603)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_file_sink
+
+ id
+ blocks_file_sink_0
+
+
+ _enabled
+ False
+
+
+ file
+ /tmp/fsktest
+
+
+ type
+ short
+
+
+ vlen
+ 1
+
+
+ unbuffered
+ False
+
+
+ append
+ False
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (1072, 515)
+
+
+ _rotation
+ 0
+
+
+
+ osmosdr_source_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ blocks_short_to_float_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ osmosdr_source_0
+ band_pass_filter_0
+ 0
+ 0
+
+
+ band_pass_filter_0
+ pfb_arb_resampler_xxx_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blks2_tcp_sink_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blocks_short_to_float_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ blocks_float_to_short_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ wxgui_fftsink2_1
+ 0
+ 0
+
+
+ pfb_arb_resampler_xxx_0
+ blocks_complex_to_real_0
+ 0
+ 0
+
+
+ blocks_float_to_short_0
+ blocks_file_sink_0
+ 0
+ 0
+
+
diff --git a/rx_ssdv.py b/rx_ssdv.py
index 7803785..2c9231f 100644
--- a/rx_ssdv.py
+++ b/rx_ssdv.py
@@ -79,16 +79,16 @@ while True:
# Attempt to decode current image, and write out to a file.
temp_f.close()
# Run SSDV
- returncode = os.system("ssdv -d rxtemp.bin %s.jpg" % current_packet_time)
+ returncode = os.system("ssdv -d rxtemp.bin %s_%d.jpg" % (current_packet_time,current_image))
if returncode == 1:
print("ERROR: SSDV Decode failed!")
else:
print("SSDV Decoded OK!")
# Make a copy of the raw binary data.
- os.system("mv rxtemp.bin %s.ssdv" % current_packet_time)
+ os.system("mv rxtemp.bin %s_%d.bin" % (current_packet_time,current_image))
# Update live displays here.
- trigger_gui_update("%s.jpg" % current_packet_time)
+ trigger_gui_update("%s_%d.jpg" % (current_packet_time,current_image))
# Trigger upload to habhub here.
else:
diff --git a/rx_tester.py b/rx_tester.py
index 28916eb..6265d9e 100644
--- a/rx_tester.py
+++ b/rx_tester.py
@@ -9,7 +9,7 @@
import time, sys, os
# Set to whatever resolution you want to test.
-file_path = "./test_images/%d_800x608.ssdv" # _raw, _800x608, _640x480, _320x240
+file_path = "./test_images/%d_raw.ssdv" # _raw, _800x608, _640x480, _320x240
image_numbers = xrange(1,14)
print_as_hex = False
diff --git a/tx_picam.py b/tx_picam.py
new file mode 100644
index 0000000..5edc68d
--- /dev/null
+++ b/tx_picam.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+#
+# PiCam Transmitter Script
+# Capture images from the PiCam, and transmit them,
+#
+# Mark Jessop
+#
+
+import PacketTX, sys, os
+
+# Set to whatever resolution you want to transmit.
+tx_resolution = "1024x768"
+callsign = "VK5QI"
+
+
+debug_output = False # If True, packet bits are saved to debug.bin as one char per bit.
+
+def transmit_file(filename, tx_object):
+ file_size = os.path.getsize(filename)
+
+ if file_size % 256 > 0:
+ print("File size not a multiple of 256 bytes!")
+ return
+
+ print("Transmitting %d Packets." % (file_size/256))
+
+ f = open(filename,'rb')
+
+ for x in range(file_size/256):
+ data = f.read(256)
+ tx_object.tx_packet(data)
+
+ f.close()
+ print("Waiting for tx queue to empty...")
+ tx_object.wait()
+
+
+tx = PacketTX.PacketTX(debug=debug_output)
+tx.start_tx()
+
+image_id = 0
+
+try:
+ while True:
+ # Capture image using PiCam
+ print("Capturing Image...")
+ os.system("raspistill -t 100 -o temp.jpg -vf -hf -w 1024 -h 768")
+ # Resize using convert
+ print("Processing...")
+ #os.system("convert temp.jpg -resize %s\! temp.jpg" % tx_resolution)
+ # SSDV'ify the image.
+ os.system("ssdv -e -c %s -i %d temp.jpg temp.ssdv" % (callsign,image_id))
+ # Transmit image
+ print("Transmitting...")
+ transmit_file("temp.ssdv",tx)
+
+ # Increment Counter
+ image_id = (image_id+1)%256
+except KeyboardInterrupt:
+ print("Closing")
+ tx.close()
diff --git a/tx_test_images.py b/tx_test_images.py
index 8536a26..d39bb19 100644
--- a/tx_test_images.py
+++ b/tx_test_images.py
@@ -9,10 +9,10 @@
import PacketTX, sys, os
# Set to whatever resolution you want to test.
-file_path = "./test_images/%d_800x608.ssdv" # _raw, _800x608, _640x480, _320x240
+file_path = "./test_images/%d_320x240.ssdv" # _raw, _800x608, _640x480, _320x240
image_numbers = xrange(1,14)
-debug_output = False # If True, packet bits are saved to debug.bin as one char per bit.
+debug_output = True # If True, packet bits are saved to debug.bin as one char per bit.
def transmit_file(filename, tx_object):
file_size = os.path.getsize(filename)