[hamradio-commits] pkg-hamradio-commits Digest, Vol 34, Issue 19
Carl-Gunnar Hillefors
sm6oer at gmail.com
Wed Sep 2 01:22:20 UTC 2015
UNSUBSCRIBE
UNSUBSCRIBE sm6oer at gmail.com
UNSUBSCRIBE sm6oer at swipnet.se
UNSUBSCRIBE sm6oer at swipnet.com
UNSUBSCRIBE
2015-09-02 2:22 GMT+02:00 <
pkg-hamradio-commits-request at lists.alioth.debian.org>:
> Send pkg-hamradio-commits mailing list submissions to
> pkg-hamradio-commits at lists.alioth.debian.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>
> https://lists.alioth.debian.org/mailman/listinfo/pkg-hamradio-commits
> or, via email, send a message with subject or body 'help' to
> pkg-hamradio-commits-request at lists.alioth.debian.org
>
> You can reach the person managing the list at
> pkg-hamradio-commits-owner at lists.alioth.debian.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of pkg-hamradio-commits digest..."
>
>
> Today's Topics:
>
> 1. [gnss-sdr] 53/251: Reducing the length of the test
> (Carles Fernandez)
> 2. [gnss-sdr] 54/251: Refactored out rtl_tcp stuff to libs
> (Carles Fernandez)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 02 Sep 2015 00:22:35 +0000
> From: Carles Fernandez <carles_fernandez-guest at moszumanska.debian.org>
> To: gnss-sdr_cvs at packages.qa.debian.org,
> pkg-hamradio-commits at lists.alioth.debian.org
> Subject: [hamradio-commits] [gnss-sdr] 53/251: Reducing the length of
> the test
> Message-ID: <E1ZWvox-0005tp-HB at moszumanska.debian.org>
> Content-Type: text/plain; charset=utf-8
>
> This is an automated email from the git hooks/post-receive script.
>
> carles_fernandez-guest pushed a commit to branch master
> in repository gnss-sdr.
>
> commit 9fa8efba5b04f9437ec865c76a0583a4edb4e27f
> Author: Carles Fernandez <carles.fernandez at gmail.com>
> Date: Sun May 10 13:20:52 2015 +0200
>
> Reducing the length of the test
> ---
> src/tests/arithmetic/code_generation_test.cc | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/src/tests/arithmetic/code_generation_test.cc
> b/src/tests/arithmetic/code_generation_test.cc
> index e8f87ab..2cb56a5 100644
> --- a/src/tests/arithmetic/code_generation_test.cc
> +++ b/src/tests/arithmetic/code_generation_test.cc
> @@ -43,7 +43,7 @@ TEST(CodeGenGPSL1_Test, CodeGeneration)
> signed int _prn = 1;
> unsigned int _chip_shift = 4;
>
> - int iterations = 100000;
> + int iterations = 1000;
>
> struct timeval tv;
> gettimeofday(&tv, NULL);
> @@ -93,7 +93,7 @@ TEST(CodeGenGPSL1Sampled_Test, CodeGeneration)
> int _samplesPerCode = round(_fs / (_codeFreqBasis / _codeLength));
> std::complex<float>* _dest = new std::complex<float>[_samplesPerCode];
>
> - int iterations = 10000;
> + int iterations = 1000;
>
> struct timeval tv;
> gettimeofday(&tv, NULL);
> @@ -133,8 +133,6 @@ TEST(CodeGenGPSL1Sampled_Test, CodeGeneration)
>
> TEST(ComplexCarrier_Test, CodeGeneration)
> {
> - //signed int _prn = 1;
> - //unsigned int _chip_shift = 4;
> double _fs = 8000000;
> double _f = 4000;
> const signed int _codeFreqBasis = 1023000; //Hz
> @@ -142,7 +140,7 @@ TEST(ComplexCarrier_Test, CodeGeneration)
> int _samplesPerCode = round(_fs / (_codeFreqBasis / _codeLength));
> std::complex<float>* _dest = new std::complex<float>[_samplesPerCode];
>
> - int iterations = 100000;
> + int iterations = 1000;
>
> struct timeval tv;
> gettimeofday(&tv, NULL);
> @@ -150,7 +148,6 @@ TEST(ComplexCarrier_Test, CodeGeneration)
>
> for(int i = 0; i < iterations; i++)
> {
> - //gps_l1_ca_code_gen_complex_sampled( _dest, _prn, _fs,
> _chip_shift);
> complex_exp_gen_conj( _dest, _f, _fs, _samplesPerCode);
> }
>
>
> --
> Alioth's /usr/local/bin/git-commit-notice on /srv/
> git.debian.org/git/pkg-hamradio/gnss-sdr.git
>
>
>
> ------------------------------
>
> Message: 2
> Date: Wed, 02 Sep 2015 00:22:35 +0000
> From: Carles Fernandez <carles_fernandez-guest at moszumanska.debian.org>
> To: gnss-sdr_cvs at packages.qa.debian.org,
> pkg-hamradio-commits at lists.alioth.debian.org
> Subject: [hamradio-commits] [gnss-sdr] 54/251: Refactored out rtl_tcp
> stuff to libs
> Message-ID: <E1ZWvox-0005u3-K6 at moszumanska.debian.org>
> Content-Type: text/plain; charset=utf-8
>
> This is an automated email from the git hooks/post-receive script.
>
> carles_fernandez-guest pushed a commit to branch master
> in repository gnss-sdr.
>
> commit 5f3ae0c66b0df42d62da07ab7d77256ca453dad2
> Author: Anthony Arnold <anthony.arnold at uqconnect.edu.au>
> Date: Sun May 10 22:57:43 2015 +1000
>
> Refactored out rtl_tcp stuff to libs
> ---
> conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf | 5 +-
> src/algorithms/signal_source/CMakeLists.txt | 1 +
> .../adapters/rtl_tcp_signal_source.cc | 37 ++--
> .../signal_source/adapters/rtl_tcp_signal_source.h | 1 +
> .../signal_source/gnuradio_blocks/CMakeLists.txt | 3 +-
> .../gnuradio_blocks/rtl_tcp_signal_source_c.cc | 233
> ++++++++++++---------
> .../gnuradio_blocks/rtl_tcp_signal_source_c.h | 24 ++-
> .../signal_source/{ => libs}/CMakeLists.txt | 9 +-
> .../signal_source/libs/rtl_tcp_commands.cc | 53 +++++
> .../signal_source/libs/rtl_tcp_commands.h | 55 +++++
> .../signal_source/libs/rtl_tcp_dongle_info.cc | 90 ++++++++
> .../signal_source/libs/rtl_tcp_dongle_info.h | 78 +++++++
> 12 files changed, 468 insertions(+), 121 deletions(-)
>
> diff --git a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
> b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
> index 5db4b11..e9e35e6 100644
> --- a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
> +++ b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
> @@ -72,12 +72,15 @@ SignalSource.dump_filename=../data/signal_source.dat
> ; it helps to not overload the CPU, but the processing time will be
> longer.
> SignalSource.enable_throttle_control=false
>
> -;#Address of the rtl_tcp server
> +;#Address of the rtl_tcp server (IPv6 allowed)
> SignalSource.address=127.0.0.1
>
> ;#Port of the rtl_tcp server
> SignalSource.port=1234
>
> +;# Set to true if I/Q samples come swapped
> +SignalSource.swap_iq=false
> +
> ;######### SIGNAL_CONDITIONER CONFIG ############
> ;## It holds blocks to change data type, filter and resample input data.
>
> diff --git a/src/algorithms/signal_source/CMakeLists.txt
> b/src/algorithms/signal_source/CMakeLists.txt
> index c826083..5cd1218 100644
> --- a/src/algorithms/signal_source/CMakeLists.txt
> +++ b/src/algorithms/signal_source/CMakeLists.txt
> @@ -16,5 +16,6 @@
> # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> #
>
> +add_subdirectory(libs)
> add_subdirectory(adapters)
> add_subdirectory(gnuradio_blocks)
> diff --git
> a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc
> b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc
> index 24c9e66..29c82d0 100644
> --- a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc
> +++ b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc
> @@ -68,6 +68,7 @@
> RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface*
> configuration,
> item_type_ = configuration->property(role + ".item_type",
> default_item_type);
> address_ = configuration->property(role + ".address",
> default_address);
> port_ = configuration->property(role + ".port", default_port);
> + flip_iq_ = configuration->property(role + ".flip_iq", false);
>
> if (item_type_.compare("short") == 0)
> {
> @@ -81,7 +82,7 @@
> RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface*
> configuration,
> {
> std::cout << "Connecting to " << address_ << ":" << port_
> << std::endl;
> LOG (INFO) << "Connecting to " << address_ << ":" << port_;
> - signal_source_ = rtl_tcp_make_signal_source_c (address_,
> port_);
> + signal_source_ = rtl_tcp_make_signal_source_c (address_,
> port_, flip_iq_);
> }
> catch( boost::exception & e )
> {
> @@ -94,21 +95,29 @@
> RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface*
> configuration,
> // 3. set rx frequency
> signal_source_->set_frequency(freq_);
>
> - // TODO set rx gain
> + // 4. set rx gain
> signal_source_->set_agc_mode(true);
> -
> - /*if (this->AGC_enabled_ == true)
> - {
> - signal_source_->set_agc_mode(true);
> - std::cout << "AGC enabled" << std::endl;
> - LOG(INFO) << "AGC enabled";
> - }
> +
> + if (this->AGC_enabled_ == true)
> + {
> + std::cout << "AGC enabled" << std::endl;
> + LOG(INFO) << "AGC enabled";
> + signal_source_->set_agc_mode(true);
> + }
> else
> - {
> - signal_source_->set_agc_mode(false);
> - signal_source_->set_gain(gain_, 0);
> - signal_source_->set_if_gain(if_gain_, 0);
> - }*/
> + {
> + std::cout << "AGC disabled" << std::endl;
> + LOG(INFO) << "AGC disabled";
> + signal_source_->set_agc_mode(false);
> +
> + std::cout << "Setting gain to " << gain_ << std::endl;
> + LOG(INFO) << "Setting gain to " << gain_;
> + signal_source_->set_gain(gain_);
> +
> + std::cout << "Setting IF gain to " << if_gain_ <<
> std::endl;
> + LOG(INFO) << "Setting IF gain to " << if_gain_;
> + signal_source_->set_if_gain(if_gain_);
> + }
> }
> else
> {
> diff --git a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h
> b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h
> index 6168110..9f44370 100644
> --- a/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h
> +++ b/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h
> @@ -87,6 +87,7 @@ private:
> short port_;
> bool AGC_enabled_;
> double sample_rate_;
> + bool flip_iq_;
>
> unsigned int in_stream_;
> unsigned int out_stream_;
> diff --git a/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt
> b/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt
> index 5b41c3a..e5cf494 100644
> --- a/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt
> +++ b/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt
> @@ -25,6 +25,7 @@ set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES
>
> include_directories(
> $(CMAKE_CURRENT_SOURCE_DIR)
> + ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs
> ${GLOG_INCLUDE_DIRS}
> ${GFlags_INCLUDE_DIRS}
> ${GNURADIO_RUNTIME_INCLUDE_DIRS}
> @@ -34,4 +35,4 @@ include_directories(
> file(GLOB SIGNAL_SOURCE_GR_BLOCKS_HEADERS "*.h")
> add_library(signal_source_gr_blocks ${SIGNAL_SOURCE_GR_BLOCKS_SOURCES}
> ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS})
> source_group(Headers FILES ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS})
> -target_link_libraries(signal_source_gr_blocks
> ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES})
> +target_link_libraries(signal_source_gr_blocks signal_source_lib
> ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES})
> diff --git
> a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc
> b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc
> index ccc5fbe..f754ba3 100644
> ---
> a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc
> +++
> b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc
> @@ -3,6 +3,8 @@
> * \brief An rtl_tcp signal source reader.
> * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au
> *
> + * This module contains logic taken from gr-omsosdr
> + * <http://git.osmocom.org/gr-osmosdr>
> *
> -------------------------------------------------------------------------
> *
> * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
> @@ -29,8 +31,11 @@
> */
>
> #include "rtl_tcp_signal_source_c.h"
> +#include "rtl_tcp_commands.h"
> +#include "rtl_tcp_dongle_info.h"
> #include <glog/logging.h>
> #include <boost/thread/thread.hpp>
> +#include <map>
>
> using google::LogMessage;
>
> @@ -38,119 +43,93 @@ namespace ip = boost::asio::ip;
> using boost::asio::ip::tcp;
>
> // Buffer constants
> +// TODO: Make these configurable
> enum {
> RTL_TCP_BUFFER_SIZE = 1024 * 16, // 16 KB
> RTL_TCP_PAYLOAD_SIZE = 1024 * 4 // 4 KB
> };
>
> -// command ids
> -enum {
> - CMD_ID_SET_FREQUENCY = 1,
> - CMD_ID_SET_SAMPLE_RATE = 2,
> - CMD_ID_SET_GAIN_MODE = 3,
> - CMD_ID_SET_GAIN = 4,
> - CMD_ID_SET_IF_GAIN = 6,
> - CMD_ID_SET_AGC_MODE = 8
> -};
> -
> -// rtl_tcp command
> -struct command {
> - enum {
> - data_size = 1 + sizeof (unsigned int)
> - };
> - boost::array<unsigned char, data_size> data_;
> -
> - command (unsigned char cmd, unsigned int param)
> - {
> - data_[0] = cmd;
> - unsigned int nparam =
> - boost::asio::detail::socket_ops::host_to_network_long (param);
> - memcpy (&data_[1], &nparam, sizeof (nparam));
> - }
> -
> - boost::system::error_code send (tcp::socket &socket_) {
> - boost::system::error_code ec;
> - socket_.send (boost::asio::buffer (data_), 0, ec);
> - return ec;
> - }
> -};
> -
> -// set frequency command
> -struct set_frequency_command : command {
> - set_frequency_command (unsigned int freq)
> - : command (CMD_ID_SET_FREQUENCY, freq)
> - {
> - }
> -};
> -
> -// set sample rate command
> -struct set_sample_rate_command : command {
> - set_sample_rate_command (unsigned int sample_rate)
> - : command (CMD_ID_SET_SAMPLE_RATE, sample_rate)
> - {
> - }
> -};
> -
> -// set gain mode command
> -struct set_gain_mode_command : command {
> - set_gain_mode_command (bool manual)
> - : command (CMD_ID_SET_GAIN_MODE, static_cast<unsigned int>( manual ))
> - {
> - }
> -};
> -
> -
> -// set agc mode command
> -struct set_agc_mode_command : command {
> - set_agc_mode_command (bool manual)
> - : command (CMD_ID_SET_AGC_MODE, static_cast<unsigned int>( manual ))
> - {
> - }
> -};
> -
> -
> rtl_tcp_signal_source_c_sptr
> rtl_tcp_make_signal_source_c(const std::string &address,
> - short port)
> + short port,
> + bool flip_iq)
> {
> - return gnuradio::get_initial_sptr (new rtl_tcp_signal_source_c
> (address, port));
> + return gnuradio::get_initial_sptr (new rtl_tcp_signal_source_c
> (address,
> + port,
> +
> flip_iq));
> }
>
>
> rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string
> &address,
> - short port)
> + short port,
> + bool flip_iq)
> : gr::sync_block ("rtl_tcp_signal_source_c",
> gr::io_signature::make(0, 0, 0),
> gr::io_signature::make(1, 1, sizeof(gr_complex))),
> socket_ (io_service_),
> data_ (RTL_TCP_PAYLOAD_SIZE),
> + flip_iq_(flip_iq),
> buffer_ (RTL_TCP_BUFFER_SIZE),
> unread_ (0)
> {
> boost::system::error_code ec;
>
> - for (int i = 0; i < 256; i++) {
> - lookup_[i] = (((float)(i & 0xff)) - 127.4f) * (1.0f / 128.0f);
> + // 1. Setup lookup table
> + for (unsigned i = 0; i < 0xff; i++) {
> + lookup_[i] = ((float)(i & 0xff) - 127.4f) * (1.0f / 128.0f);
> }
>
> + // 2. Set socket options
> + socket_.set_option (boost::asio::socket_base::reuse_address (true),
> ec);
> + if (ec) {
> + std::cout << "Failed to set reuse address option." << std::endl;
> + LOG (WARNING) << "Failed to set reuse address option";
> + }
> + socket_.set_option (boost::asio::socket_base::linger (true, 0), ec);
> + if (ec) {
> + std::cout << "Failed to set linger option." << std::endl;
> + LOG (WARNING) << "Failed to set linger option";
> + }
> +
> + // 3. Connect socket
> ip::address addr = ip::address::from_string (address, ec);
> if (ec) {
> std::cout << address << " is not an IP address" << std::endl;
> - LOG (WARNING) << address << " is not an IP address";
> + LOG (ERROR) << address << " is not an IP address";
> return;
> }
>
> socket_.connect(tcp::endpoint (addr, port), ec);
> if (ec) {
> - std::cout << "Failed to connect to " << addr << ":" << port
> - << "(" << ec << ")" << std::endl;
> - LOG (WARNING) << "Failed to connect to " << addr << ":" << port
> - << "(" << ec << ")";
> - return;
> + std::cout << "Failed to connect to " << addr << ":" << port
> + << "(" << ec << ")" << std::endl;
> + LOG (ERROR) << "Failed to connect to " << addr << ":" << port
> + << "(" << ec << ")";
> + return;
> }
> std::cout << "Connected to " << addr << ":" << port << std::endl;
> LOG (WARNING) << "Connected to " << addr << ":" << port;
>
> + // 4. Set nodelay
> + socket_.set_option (tcp::no_delay (true), ec);
> + if (ec) {
> + std::cout << "Failed to set no delay option." << std::endl;
> + LOG (WARNING) << "Failed to set no delay option";
> + }
> +
> + // 5. Receive dongle info
> + rtl_tcp_dongle_info info;
> + ec = info.read (socket_);
> + if (ec) {
> + std::cout << "Failed to read dongle info." << std::endl;
> + LOG (WARNING) << "Failed to read dongle info";
> + }
> + else if (info.is_valid ()) {
> + std::cout << "Found " << info.get_type_name() << " tuner." <<
> std::endl;
> + LOG (INFO) << "Found " << info.get_type_name() << " tuner.";
> + }
> +
> + // 6. Start reading
> boost::asio::async_read (socket_, boost::asio::buffer (data_),
> boost::bind
> (&rtl_tcp_signal_source_c::handle_read,
> this, _1, _2));
> @@ -175,9 +154,14 @@ int rtl_tcp_signal_source_c::work (int noutput_items,
> this));
>
> for ( ; i < noutput_items && unread_ > 1; i++ ) {
> - float re = buffer_[--unread_];
> float im = buffer_[--unread_];
> - out[i] = gr_complex (re, im);
> + float re = buffer_[--unread_];
> + if (flip_iq_) {
> + out[i] = gr_complex (im, re);
> + }
> + else {
> + out[i] = gr_complex (re, im);
> + }
> }
> }
> not_full_.notify_one ();
> @@ -187,7 +171,7 @@ int rtl_tcp_signal_source_c::work (int noutput_items,
>
> void rtl_tcp_signal_source_c::set_frequency (int frequency) {
> boost::system::error_code ec =
> - set_frequency_command (frequency).send(socket_);
> + rtl_tcp_command (RTL_TCP_SET_FREQUENCY, frequency, socket_);
> if (ec) {
> std::cout << "Failed to set frequency" << std::endl;
> LOG (WARNING) << "Failed to set frequency";
> @@ -196,7 +180,7 @@ void rtl_tcp_signal_source_c::set_frequency (int
> frequency) {
>
> void rtl_tcp_signal_source_c::set_sample_rate (int sample_rate) {
> boost::system::error_code ec =
> - set_sample_rate_command (sample_rate).send(socket_);
> + rtl_tcp_command (RTL_TCP_SET_SAMPLE_RATE, sample_rate, socket_);
> if (ec) {
> std::cout << "Failed to set sample rate" << std::endl;
> LOG (WARNING) << "Failed to set sample rate";
> @@ -205,18 +189,79 @@ void rtl_tcp_signal_source_c::set_sample_rate (int
> sample_rate) {
>
>
> void rtl_tcp_signal_source_c::set_agc_mode (bool agc) {
> - boost::system::error_code ec =
> - set_gain_mode_command (!agc).send (socket_);
> - if (ec) {
> - std::cout << "Failed to set gain mode" << std::endl;
> - LOG (WARNING) << "Failed to set gain mode";
> - }
> - ec =
> - set_agc_mode_command (agc).send (socket_);
> - if (ec) {
> - std::cout << "Failed to set gain mode" << std::endl;
> - LOG (WARNING) << "Failed to set gain mode";
> - }
> + boost::system::error_code ec =
> + rtl_tcp_command (RTL_TCP_SET_GAIN_MODE, !agc, socket_);
> + if (ec) {
> + std::cout << "Failed to set gain mode" << std::endl;
> + LOG (WARNING) << "Failed to set gain mode";
> + }
> + ec =
> + rtl_tcp_command (RTL_TCP_SET_AGC_MODE, agc, socket_);
> + if (ec) {
> + std::cout << "Failed to set gain mode" << std::endl;
> + LOG (WARNING) << "Failed to set gain mode";
> + }
> +}
> +
> +void rtl_tcp_signal_source_c::set_gain (int gain) {
> + boost::system::error_code ec =
> + rtl_tcp_command (RTL_TCP_SET_GAIN, gain, socket_);
> + if (ec) {
> + std::cout << "Failed to set gain" << std::endl;
> + LOG (WARNING) << "Failed to set gain";
> + }
> +}
> +
> +void rtl_tcp_signal_source_c::set_if_gain (int gain) {
> + // from gr-osmosdr
> + struct range {
> + double start, stop, step;
> + };
> + std::vector<range> ranges = {
> + { -3, 6, 9 },
> + { 0, 9, 3 },
> + { 0, 9, 3 },
> + { 0, 2, 1 },
> + { 3, 15, 3},
> + { 3, 15, 3}
> + };
> +
> + std::map <int, double> gains;
> + for (int i = 0; i < static_cast<int>(ranges.size ()); i++) {
> + gains[i+1] = ranges[i].start;
> + }
> +
> + for (int i = ranges.size() - 1; i >= 0; i--) {
> + const range &r = ranges[i];
> + double error = gain;
> +
> + for (double g = r.start; g < r.stop; g += r.step) {
> + double sum = 0;
> + for (int j = 0; j < static_cast<int> ( gains.size() ); j++) {
> + if (i == j) {
> + sum += g;
> + }
> + else {
> + sum += gains[j + 1];
> + }
> + }
> + double err = std::abs (gain - sum);
> + if (err < error) {
> + error = err;
> + gains[i+1] = g;
> + }
> + }
> + }
> + for (unsigned stage = 1; stage <= gains.size(); stage++) {
> + int stage_gain = static_cast<int>( gains[stage] * 10 );
> + unsigned param = (stage << 16) | (stage_gain & 0xffff);
> + boost::system::error_code ec =
> + rtl_tcp_command (RTL_TCP_SET_IF_GAIN, param, socket_);
> + if (ec) {
> + std::cout << "Failed to set if gain" << std::endl;
> + LOG (WARNING) << "Failed to set if gain";
> + }
> + }
> }
>
> void
> @@ -252,7 +297,7 @@ rtl_tcp_signal_source_c::handle_read (const
> boost::system::error_code &ec,
> unread_++;
> }
> }
> - // let woker know that more data is available
> + // let woker know that more data is available
> not_empty_.notify_one ();
> // Read some more
> boost::asio::async_read (socket_,
> diff --git
> a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.h
> b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.h
> index 17ad456..d207a61 100644
> ---
> a/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.h
> +++
> b/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.h
> @@ -53,7 +53,8 @@ typedef boost::shared_ptr<rtl_tcp_signal_source_c>
>
> rtl_tcp_signal_source_c_sptr
> rtl_tcp_make_signal_source_c(const std::string &address,
> - short port);
> + short port,
> + bool flip_iq = false);
>
> /*!
> * \brief This class reads interleaved I/Q samples
> @@ -71,22 +72,27 @@ public:
> void set_frequency (int frequency);
> void set_sample_rate (int sample_rate);
> void set_agc_mode (bool agc);
> -
> + void set_gain (int gain);
> + void set_if_gain (int gain);
> +
> private:
> typedef boost::circular_buffer_space_optimized<float> buffer_type;
> -
> +
> friend rtl_tcp_signal_source_c_sptr
> rtl_tcp_make_signal_source_c(const std::string &address,
> - short port);
> + short port,
> + bool flip_iq);
>
> rtl_tcp_signal_source_c(const std::string &address,
> - short port);
> + short port,
> + bool flip_iq);
>
> // IO members
> boost::asio::io_service io_service_;
> boost::asio::ip::tcp::socket socket_;
> std::vector<unsigned char> data_;
> -
> + bool flip_iq_;
> +
> // producer-consumer helpers
> boost::mutex mutex_;
> boost::condition not_full_;
> @@ -94,13 +100,13 @@ private:
> buffer_type buffer_;
> size_t unread_;
>
> - // lookup for scaling bytes
> - boost::array<float, 256> lookup_;
> + // lookup for scaling data
> + boost::array<float, 0xff> lookup_;
>
> // async read callback
> void handle_read (const boost::system::error_code &ec,
> size_t bytes_transferred);
> -
> +
> inline bool not_full ( ) const {
> return unread_ < buffer_.capacity( );
> }
> diff --git a/src/algorithms/signal_source/CMakeLists.txt
> b/src/algorithms/signal_source/libs/CMakeLists.txt
> similarity index 73%
> copy from src/algorithms/signal_source/CMakeLists.txt
> copy to src/algorithms/signal_source/libs/CMakeLists.txt
> index c826083..a7e886c 100644
> --- a/src/algorithms/signal_source/CMakeLists.txt
> +++ b/src/algorithms/signal_source/libs/CMakeLists.txt
> @@ -16,5 +16,10 @@
> # along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> #
>
> -add_subdirectory(adapters)
> -add_subdirectory(gnuradio_blocks)
> +set (SIGNAL_SOURCE_LIB_SOURCES
> + rtl_tcp_commands.cc
> + rtl_tcp_dongle_info.cc)
> +
> +file(GLOB SIGNAL_SOURCE_LIB_HEADERS "*.h")
> +add_library(signal_source_lib ${SIGNAL_SOURCE_LIB_SOURCES}
> ${SIGNAL_SOURCE_LIB_HEADERS})
> +source_group(Headers FILES ${SIGNAL_SOURCE_LIB_HEADERS})
> \ No newline at end of file
> diff --git a/src/algorithms/signal_source/libs/rtl_tcp_commands.cc
> b/src/algorithms/signal_source/libs/rtl_tcp_commands.cc
> new file mode 100644
> index 0000000..7cf21ea
> --- /dev/null
> +++ b/src/algorithms/signal_source/libs/rtl_tcp_commands.cc
> @@ -0,0 +1,53 @@
> +/*!
> + * \file rtl_tcp_commands.cc
> + * \brief Defines methods for communicating with rtl_tcp
> + * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au
> + *
> + * This file contains information taken from librtlsdr:
> + * http://git.osmocom.org/rtl-sdr/
> + *
> -------------------------------------------------------------------------
> + *
> + * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
> + *
> + * GNSS-SDR is a software defined Global Navigation
> + * Satellite Systems receiver
> + *
> + * This file is part of GNSS-SDR.
> + *
> + * GNSS-SDR is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GNSS-SDR is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> + *
> + *
> -------------------------------------------------------------------------
> + */
> +#include "rtl_tcp_commands.h"
> +#include <string.h>
> +
> +using boost::asio::ip::tcp;
> +
> +
> +boost::system::error_code
> +rtl_tcp_command (RTL_TCP_COMMAND id, unsigned param, tcp::socket &socket)
> {
> + // Data payload
> + unsigned char data[sizeof (unsigned char) + sizeof (unsigned)];
> +
> + data[0] = static_cast<unsigned char> (id);
> +
> +
> + unsigned nparam =
> + boost::asio::detail::socket_ops::host_to_network_long (param);
> + ::memcpy (&data[1], &nparam, sizeof (nparam));
> +
> + boost::system::error_code ec;
> + socket.send (boost::asio::buffer (data), 0, ec);
> + return ec;
> +}
> diff --git a/src/algorithms/signal_source/libs/rtl_tcp_commands.h
> b/src/algorithms/signal_source/libs/rtl_tcp_commands.h
> new file mode 100644
> index 0000000..361dc10
> --- /dev/null
> +++ b/src/algorithms/signal_source/libs/rtl_tcp_commands.h
> @@ -0,0 +1,55 @@
> +/*!
> + * \file rtl_tcp_commands.h
> + * \brief Defines structures and constants for communicating with rtl_tcp
> + * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au
> + *
> + * This file contains information taken from librtlsdr:
> + * http://git.osmocom.org/rtl-sdr/
> + *
> -------------------------------------------------------------------------
> + *
> + * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
> + *
> + * GNSS-SDR is a software defined Global Navigation
> + * Satellite Systems receiver
> + *
> + * This file is part of GNSS-SDR.
> + *
> + * GNSS-SDR is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GNSS-SDR is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> + *
> + *
> -------------------------------------------------------------------------
> + */
> +#ifndef GNSS_SDR_RTL_TCP_COMMANDS_H
> +#define GNSS_SDR_RTL_TCP_COMMANDS_H
> +
> +#include <boost/asio/ip/tcp.hpp>
> +
> +/// Command IDs for configuration rtl_tcp
> +enum RTL_TCP_COMMAND {
> + RTL_TCP_SET_FREQUENCY = 1,
> + RTL_TCP_SET_SAMPLE_RATE = 2,
> + RTL_TCP_SET_GAIN_MODE = 3,
> + RTL_TCP_SET_GAIN = 4,
> + RTL_TCP_SET_IF_GAIN = 6,
> + RTL_TCP_SET_AGC_MODE = 8
> +};
> +
> +
> +/*!
> + * \brief Send a command to rtl_tcp over the given socket.
> + */
> +boost::system::error_code
> +rtl_tcp_command (RTL_TCP_COMMAND id, unsigned param,
> + boost::asio::ip::tcp::socket &socket);
> +
> +#endif // GNSS_SDR_RTL_TCP_COMMANDS_H
> diff --git a/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.cc
> b/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.cc
> new file mode 100644
> index 0000000..4312277
> --- /dev/null
> +++ b/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.cc
> @@ -0,0 +1,90 @@
> +/*!
> + * \file rtl_tcp_dongle_info.cc
> + * \brief Defines methods for retrieving and validating rtl_tcp donle
> + * info.
> + * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au
> + *
> + * This file contains information taken from librtlsdr:
> + * http://git.osmocom.org/rtl-sdr/
> + *
> -------------------------------------------------------------------------
> + *
> + * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
> + *
> + * GNSS-SDR is a software defined Global Navigation
> + * Satellite Systems receiver
> + *
> + * This file is part of GNSS-SDR.
> + *
> + * GNSS-SDR is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GNSS-SDR is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> + *
> + *
> -------------------------------------------------------------------------
> + */
> +#include "rtl_tcp_dongle_info.h"
> +#include <string.h>
> +
> +using boost::asio::ip::tcp;
> +
> +rtl_tcp_dongle_info::rtl_tcp_dongle_info ()
> + : tuner_type_ (0), tuner_gain_count_ (0)
> +{
> + ::memset (magic_, 0, sizeof (magic_));
> +}
> +
> +boost::system::error_code rtl_tcp_dongle_info::read (tcp::socket &socket)
> {
> + boost::system::error_code ec;
> +
> + unsigned char data[sizeof (char) * 4 + sizeof (uint32_t) * 2];
> + socket.receive (boost::asio::buffer (data), 0, ec);
> + if (!ec) {
> + ::memcpy (magic_, data, 4);
> +
> + uint32_t type;
> + ::memcpy (&type, &data[4], 4);
> +
> + tuner_type_ =
> + boost::asio::detail::socket_ops::network_to_host_long (type);
> +
> +
> + uint32_t count;
> + ::memcpy (&count, &data[8], 4);
> +
> + tuner_gain_count_ =
> + boost::asio::detail::socket_ops::network_to_host_long (count);
> + }
> + return ec;
> +}
> +
> +
> +const char *rtl_tcp_dongle_info::get_type_name () const {
> + switch (get_tuner_type()) {
> + default:
> + return "UNKNOWN";
> + case TUNER_E4000:
> + return "E4000";
> + case TUNER_FC0012:
> + return "FC0012";
> + case TUNER_FC0013:
> + return "FC0013";
> + case TUNER_FC2580:
> + return "FC2580";
> + case TUNER_R820T:
> + return "R820T";
> + case TUNER_R828D:
> + return "R828D";
> + }
> +}
> +
> +bool rtl_tcp_dongle_info::is_valid () const {
> + return ::memcmp (magic_, "RTL0", 4) == 0;
> +}
> diff --git a/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.h
> b/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.h
> new file mode 100644
> index 0000000..98e5f96
> --- /dev/null
> +++ b/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.h
> @@ -0,0 +1,78 @@
> +/*!
> + * \file rtl_tcp_dongle_info.h
> + * \brief Interface for a structure sent by rtl_tcp defining the hardware.
> + * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au
> + *
> + * This file contains information taken from librtlsdr:
> + * http://git.osmocom.org/rtl-sdr/
> + *
> -------------------------------------------------------------------------
> + *
> + * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
> + *
> + * GNSS-SDR is a software defined Global Navigation
> + * Satellite Systems receiver
> + *
> + * This file is part of GNSS-SDR.
> + *
> + * GNSS-SDR is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * GNSS-SDR is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
> + *
> + *
> -------------------------------------------------------------------------
> + */
> +#ifndef GNSS_SDR_RTL_TCP_DONGLE_INFO_H
> +#define GNSS_SDR_RTL_TCP_DONGLE_INFO_H
> +
> +#include <boost/asio/ip/tcp.hpp>
> +
> +/*!
> + * \brief This class represents the dongle information
> + * which is sent by rtl_tcp.
> + */
> +class rtl_tcp_dongle_info {
> + public:
> + enum {
> + TUNER_UNKNOWN = 0,
> + TUNER_E4000,
> + TUNER_FC0012,
> + TUNER_FC0013,
> + TUNER_FC2580,
> + TUNER_R820T,
> + TUNER_R828D
> + };
> +
> + private:
> + char magic_[4];
> + uint32_t tuner_type_;
> + uint32_t tuner_gain_count_;
> +
> + public:
> + rtl_tcp_dongle_info ();
> +
> + boost::system::error_code read (
> + boost::asio::ip::tcp::socket &socket);
> +
> + bool is_valid () const;
> +
> + const char *get_type_name () const;
> +
> + inline uint32_t get_tuner_type () const {
> + return tuner_type_;
> + }
> +
> + inline uint32_t get_tuner_gain_count () const {
> + return tuner_gain_count_;
> + }
> +};
> +
> +
> +#endif // GNSS_SDR_RTL_TCP_DONGLE_INFO_H
>
> --
> Alioth's /usr/local/bin/git-commit-notice on /srv/
> git.debian.org/git/pkg-hamradio/gnss-sdr.git
>
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> pkg-hamradio-commits mailing list
> pkg-hamradio-commits at lists.alioth.debian.org
> https://lists.alioth.debian.org/mailman/listinfo/pkg-hamradio-commits
>
>
> ------------------------------
>
> End of pkg-hamradio-commits Digest, Vol 34, Issue 19
> ****************************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-hamradio-commits/attachments/20150902/6152a329/attachment-0001.html>
More information about the pkg-hamradio-commits
mailing list