This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/osmocom-sdr@lists.osmocom.org/.
CT2FZI IM58kr ct2fzi at gmail.comunsubscribe
Em 24/08/2016 22:55, <osmocom-sdr-request at lists.osmocom.org> escreveu:
> Send osmocom-sdr mailing list submissions to
> osmocom-sdr at lists.osmocom.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://lists.osmocom.org/mailman/listinfo/osmocom-sdr
> or, via email, send a message with subject or body 'help' to
> osmocom-sdr-request at lists.osmocom.org
>
> You can reach the person managing the list at
> osmocom-sdr-owner at lists.osmocom.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of osmocom-sdr digest..."
>
>
> Today's Topics:
>
> 1. PATCH: Fixed arbitrary resampling in rtl_fm
> (f.meyer-hermann at gsg-elektronik.de)
> 2. Uccess! My first librtlsdr application (Neoklis Kyriazis)
> 3. Re: Uccess! My first librtlsdr application (Lucas Teske)
> 4. Fwd: Development of rtl-sdr driver (Piotr Krysik)
> 5. RTL-SDR and RTL-TCP drivers (Krzysztof Halasa)
> 6. [PATCH] RTL-SDR: convert _lut to float[] to reduce size by a
> factor of 256 (Krzysztof Halasa)
> 7. [PATCH] RTL-TCP: Convert to single class model (Krzysztof Halasa)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 25 Jul 2016 13:13:13 +0200
> From: f.meyer-hermann at gsg-elektronik.de
> To: osmocom-sdr at lists.osmocom.org
> Subject: PATCH: Fixed arbitrary resampling in rtl_fm
> Message-ID: <20160725111313.GA15278 at gsg-elektronik.de>
> Content-Type: text/plain; charset=us-ascii
>
> As already on github, I fixed rtl_fm's arbitrary resampling by fixing the
> output buffer length and allowing upsampling by copying the audio data
> since
> the algorithm cannot work in-place.
> I have attached a patch, if you are interested to integrate it into the
> official branch.
> Regards,
>
> Ferdinand Meyer-Hermann
>
>
> ------------------------------
>
> Message: 2
> Date: Fri, 5 Aug 2016 05:09:49 +0000 (UTC)
> From: Neoklis Kyriazis <nkcyham at yahoo.com>
> To: "osmocom-sdr at lists.osmocom.org" <osmocom-sdr at lists.osmocom.org>
> Subject: Uccess! My first librtlsdr application
> Message-ID:
> <1565657774.9528793.1470373789409.JavaMail.yahoo at mail.yahoo.com>
> Content-Type: text/plain; charset=UTF-8
>
> Hi
>
>
> First, my thanks to everyone involved with the development and
> release of librtlsdr. Well done. :-)
>
> I always wanted to try my hand building an SDR application and
> so I installed the latest librtlsdr and started writing code
>
> to test the various functions in the librtlsdr library. Having
> gotten familiar with this, I started work on modifying my old
> Wx satellite APT image decoder app, xwxapt, to support an rtlsdr
> receiver beside the linear VHF receiver it was written for.
>
> Its always difficult to extensively modify an existing app, but
> in the end it all worked out well and xwxapt can now receive the
> old APT format images from Wx sats with the rtl-sdr receiver. In
> the process, I modified xwxapt to include controls for the rtl-sdr
> unit, display an FFT-derived spectrum of the 2.4kHz sub-carrier
> and a spectrum of the baseband O/P of the RTL2832 device. Images
> are decoded in real time and displayed incrementally in xwxapt's
> window. xwxapt is available under the GPL at:
>
>
> http://www.5b4az.org/ in Weather Imaging->Image Decoders menu.
>
> --
> Best Regards
> Neoklis - Ham Radio Call:5B4AZ
> http://www.5b4az.org/
>
>
> ------------------------------
>
> Message: 3
> Date: Fri, 5 Aug 2016 13:29:29 -0300
> From: Lucas Teske <lucas at teske.net.br>
> To: osmocom-sdr at lists.osmocom.org
> Subject: Re: Uccess! My first librtlsdr application
> Message-ID: <fb16ab1f-4ff9-3ba5-04a0-5b1231fa72ef at teske.net.br>
> Content-Type: text/plain; charset="utf-8"
>
> Nice Neoklis!
>
>
> It looks good, I will give a try on the weekend :D
>
>
> Btw, you should post the source-code at github, in this way it is easier
> to submit patches and stuff.
>
>
> Lucas
>
> Em 05/08/2016 02:09, Neoklis Kyriazis escreveu:
> > Hi
> >
> >
> > First, my thanks to everyone involved with the development and
> > release of librtlsdr. Well done. :-)
> >
> > I always wanted to try my hand building an SDR application and
> > so I installed the latest librtlsdr and started writing code
> >
> > to test the various functions in the librtlsdr library. Having
> > gotten familiar with this, I started work on modifying my old
> > Wx satellite APT image decoder app, xwxapt, to support an rtlsdr
> > receiver beside the linear VHF receiver it was written for.
> >
> > Its always difficult to extensively modify an existing app, but
> > in the end it all worked out well and xwxapt can now receive the
> > old APT format images from Wx sats with the rtl-sdr receiver. In
> > the process, I modified xwxapt to include controls for the rtl-sdr
> > unit, display an FFT-derived spectrum of the 2.4kHz sub-carrier
> > and a spectrum of the baseband O/P of the RTL2832 device. Images
> > are decoded in real time and displayed incrementally in xwxapt's
> > window. xwxapt is available under the GPL at:
> >
> >
> > http://www.5b4az.org/ in Weather Imaging->Image Decoders menu.
> >
> > --
> > Best Regards
> > Neoklis - Ham Radio Call:5B4AZ
> > http://www.5b4az.org/
>
>
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: smime.p7s
> Type: application/pkcs7-signature
> Size: 3823 bytes
> Desc: Assinatura criptogr??fica S/MIME
> URL: <http://lists.osmocom.org/pipermail/osmocom-sdr/
> attachments/20160805/d6b47cd6/attachment-0001.bin>
>
> ------------------------------
>
> Message: 4
> Date: Mon, 8 Aug 2016 13:14:30 +0200
> From: Piotr Krysik <ptrkrysik at gmail.com>
> To: osmocom-sdr at lists.osmocom.org
> Subject: Fwd: Development of rtl-sdr driver
> Message-ID: <fd1e2ce6-eeff-1901-eca7-4eecd09a9a74 at gmail.com>
> Content-Type: text/plain; charset=utf-8
>
>
> Hi everyone,
>
> I've send the e-mail to the OpenBSC list before, but as I was informed
> by Harald this is the right place for such discussions. So I'm resending
> it here.
>
> The osmocom's version of rtl-sdr driver seems to be the main one.
> Osmocom's repository is used by distributions to build rtl-sdr packages
> and it is source of the code for compilation with use of GNU Radio's
> Pybombs.
>
> Is there someone in the Osmocom who is maintaining it? There were some
> important developments regarding this driver and it would be great to
> add these patches in the Osmocom's repo.
>
> For example one that interests me is turning off dithering so multiple
> dongles sharing the same clock generate the same LO frequency. Currently
> there is always little frequency offset that makes coherent of the
> receivers operation much harder.
>
> Such changes of course have to be done carefully so nothing gets broken
> in the process. In case of turning off dithering it results with worse
> tuning granularity, so for example turning it off could be made optional.
>
> --
> Best Regards,
> Piotr Krysik
>
>
> ------------------------------
>
> Message: 5
> Date: Wed, 24 Aug 2016 23:43:03 +0200
> From: Krzysztof Halasa <khc at pm.waw.pl>
> To: osmocom-sdr at lists.osmocom.org
> Subject: RTL-SDR and RTL-TCP drivers
> Message-ID: <m3pooxu9lk.fsf at pm.waw.pl>
> Content-Type: text/plain
>
> Hello,
>
> it's my first mail on this list, so please forgive me if I do something
> wrong.
>
> I'm about to post a couple of patches for RTL drivers:
>
> 1. RTL-SDR: convert _lut to float[] to reduce size by a factor of 256.
>
> The _lut is being indexed by I + Q (16 bits = 65536 entries), however
> both samples can be processed independently, resulting in 8-bit LUT.
> Saves a bit of RAM and CPU cache.
>
> lib/rtl/rtl_source_c.cc | 19 ++++++-------------
> lib/rtl/rtl_source_c.h | 4 ++--
> 2 files changed, 8 insertions(+), 15 deletions(-)
>
>
> 2. RTL-TCP: Convert to single class model
>
> The existing RTL TCP driver is quite different from its brother RTL_SDR.
> It's much more complicated, uses gr::blocks::deinterleave and
> gr::blocks::float_to_complex, and generally doesn't work correctly
> (e.g. https://github.com/csete/gqrx/issues/99
> Spectrum is mirrored when filter or demodulator changes (rtl_tcp) #99)
>
> I've converted the RTL TCP driver to the model used by RTL_SDR,
> simplifying it in the process, and fixing the GQRX issue.
>
> lib/rtl_tcp/CMakeLists.txt | 1 -
> lib/rtl_tcp/rtl_tcp_source_c.cc | 352 ++++++++++++++++++++++++++++++
> ++--------
> lib/rtl_tcp/rtl_tcp_source_c.h | 32 +++-
> lib/rtl_tcp/rtl_tcp_source_f.cc | 327 ------------------------------
> -------
> lib/rtl_tcp/rtl_tcp_source_f.h | 125 --------------
> 5 files changed, 309 insertions(+), 528 deletions(-)
>
>
> I'm also thinking about merging the code common to RTL-SDR and RTL-TCP,
> but this it's done yet.
>
> Comments?
> --
> Krzysztof Halasa
>
>
> ------------------------------
>
> Message: 6
> Date: Wed, 24 Aug 2016 23:53:39 +0200
> From: Krzysztof Halasa <khc at pm.waw.pl>
> To: osmocom-sdr at lists.osmocom.org
> Subject: [PATCH] RTL-SDR: convert _lut to float[] to reduce size by a
> factor of 256
> Message-ID: <m3lgzlu93w.fsf at pm.waw.pl>
> Content-Type: text/plain
>
> The _lut is being indexed by I + Q (16 bits = 65536 entries), however
> both samples can be processed independently, resulting in 8-bit LUT.
> Saves a bit of RAM and CPU cache.
>
> diff --git a/lib/rtl/rtl_source_c.cc b/lib/rtl/rtl_source_c.cc
> index 93328b8..999ff9e 100644
> --- a/lib/rtl/rtl_source_c.cc
> +++ b/lib/rtl/rtl_source_c.cc
> @@ -172,15 +172,8 @@ rtl_source_c::rtl_source_c (const std::string &args)
> _samp_avail = _buf_len / BYTES_PER_SAMPLE;
>
> // create a lookup table for gr_complex values
> - for (unsigned int i = 0; i <= 0xffff; i++) {
> -#ifdef BOOST_LITTLE_ENDIAN
> - _lut.push_back( gr_complex( (float(i & 0xff) - 127.4f) *
> (1.0f/128.0f),
> - (float(i >> 8) - 127.4f) * (1.0f/128.0f)
> ) );
> -#else // BOOST_BIG_ENDIAN
> - _lut.push_back( gr_complex( (float(i >> 8) - 127.4f) * (1.0f/128.0f),
> - (float(i & 0xff) - 127.4f) *
> (1.0f/128.0f) ) );
> -#endif
> - }
> + for (unsigned int i = 0; i < 0x100; i++)
> + _lut.push_back((i - 127.4f) / 128.0f);
>
> _dev = NULL;
> ret = rtlsdr_open( &_dev, dev_index );
> @@ -230,11 +223,11 @@ rtl_source_c::rtl_source_c (const std::string &args)
>
> set_if_gain( 24 ); /* preset to a reasonable default (non-GRC use case)
> */
>
> - _buf = (unsigned short **) malloc(_buf_num * sizeof(unsigned short *));
> + _buf = (unsigned char **)malloc(_buf_num * sizeof(unsigned char *));
>
> if (_buf) {
> for(unsigned int i = 0; i < _buf_num; ++i)
> - _buf[i] = (unsigned short *) malloc(_buf_len);
> + _buf[i] = (unsigned char *)malloc(_buf_len);
> }
> }
>
> @@ -348,10 +341,10 @@ int rtl_source_c::work( int noutput_items,
>
> while (noutput_items && _buf_used) {
> const int nout = std::min(noutput_items, _samp_avail);
> - const unsigned short *buf = _buf[_buf_head] + _buf_offset;
> + const unsigned char *buf = _buf[_buf_head] + _buf_offset * 2;
>
> for (int i = 0; i < nout; ++i)
> - *out++ = _lut[ *(buf + i) ];
> + *out++ = gr_complex(_lut[buf[i * 2]], _lut[buf[i * 2 + 1]]);
>
> noutput_items -= nout;
> _samp_avail -= nout;
> diff --git a/lib/rtl/rtl_source_c.h b/lib/rtl/rtl_source_c.h
> index 76de400..902b386 100644
> --- a/lib/rtl/rtl_source_c.h
> +++ b/lib/rtl/rtl_source_c.h
> @@ -122,11 +122,11 @@ private:
> static void _rtlsdr_wait(rtl_source_c *obj);
> void rtlsdr_wait();
>
> - std::vector<gr_complex> _lut;
> + std::vector<float> _lut;
>
> rtlsdr_dev_t *_dev;
> gr::thread::thread _thread;
> - unsigned short **_buf;
> + unsigned char **_buf;
> unsigned int _buf_num;
> unsigned int _buf_len;
> unsigned int _buf_head;
>
>
> ------------------------------
>
> Message: 7
> Date: Wed, 24 Aug 2016 23:55:40 +0200
> From: Krzysztof Halasa <khc at pm.waw.pl>
> To: osmocom-sdr at lists.osmocom.org
> Subject: [PATCH] RTL-TCP: Convert to single class model
> Message-ID: <m3h9a9u90j.fsf at pm.waw.pl>
> Content-Type: text/plain
>
> The existing RTL TCP driver is quite different from its brother RTL_SDR.
> It's much more complicated, uses gr::blocks::deinterleave and
> gr::blocks::float_to_complex, and generally doesn't work correctly
> (e.g. https://github.com/csete/gqrx/issues/99
> Spectrum is mirrored when filter or demodulator changes (rtl_tcp) #99)
>
> I've converted the RTL TCP driver to the model used by RTL_SDR,
> simplifying it in the process, and fixing the GQRX issue.
>
> diff --git a/lib/rtl_tcp/CMakeLists.txt b/lib/rtl_tcp/CMakeLists.txt
> index 18400fd..9f7c201 100644
> --- a/lib/rtl_tcp/CMakeLists.txt
> +++ b/lib/rtl_tcp/CMakeLists.txt
> @@ -26,7 +26,6 @@ include_directories(
> )
>
> set(rtl_tcp_srcs
> - ${CMAKE_CURRENT_SOURCE_DIR}/rtl_tcp_source_f.cc
> ${CMAKE_CURRENT_SOURCE_DIR}/rtl_tcp_source_c.cc
> )
>
> diff --git a/lib/rtl_tcp/rtl_tcp_source_c.cc b/lib/rtl_tcp/rtl_tcp_source_
> c.cc
> index a365688..64a3f77 100644
> --- a/lib/rtl_tcp/rtl_tcp_source_c.cc
> +++ b/lib/rtl_tcp/rtl_tcp_source_c.cc
> @@ -1,4 +1,4 @@
> -/* -*- c++ -*- */
> +/* -*- mode: c++; c-basic-offset: 2 -*- */
> /*
> * Copyright 2012 Dimitri Stolnikov <horiz0n at gmx.net>
> *
> @@ -26,31 +26,114 @@
> #include <boost/algorithm/string.hpp>
>
> #include <gnuradio/io_signature.h>
> -#include <gnuradio/blocks/deinterleave.h>
> -#include <gnuradio/blocks/float_to_complex.h>
>
> #include "rtl_tcp_source_c.h"
> -
> #include "arg_helpers.h"
>
> +#if defined(_WIN32)
> +// if not posix, assume winsock
> +#pragma comment(lib, "ws2_32.lib")
> +#define USING_WINSOCK
> +#include <winsock2.h>
> +#include <ws2tcpip.h>
> +#define SHUT_RDWR 2
> +typedef char* optval_t;
> +#else
> +#include <netdb.h>
> +#include <sys/types.h>
> +#include <sys/socket.h>
> +#include <netinet/in.h>
> +#include <netinet/tcp.h>
> +#include <arpa/inet.h>
> +typedef void* optval_t;
> +#endif
> +
> +#ifdef _MSC_VER
> +#include <cstddef>
> +typedef ptrdiff_t ssize_t;
> +#endif //_MSC_VER
> +
> +#ifndef _WIN32
> +#include <netinet/in.h>
> +#else
> +#include <WinSock2.h>
> +#endif
> +
> +#define BYTES_PER_SAMPLE 2 // rtl_tcp device delivers 8 bit unsigned IQ
> data
> +
> +/* copied from rtl sdr code */
> +typedef struct { /* structure size must be multiple of 2 bytes */
> + char magic[4];
> + uint32_t tuner_type;
> + uint32_t tuner_gain_count;
> +} dongle_info_t;
> +
> +#ifdef _WIN32
> +#define __attribute__(x)
> +#pragma pack(push, 1)
> +#endif
> +struct command {
> + unsigned char cmd;
> + unsigned int param;
> +} __attribute__((packed));
> +#ifdef _WIN32
> +#pragma pack(pop)
> +#endif
> +
> +#define USE_SELECT 1 // non-blocking receive on all platforms
> +#define USE_RCV_TIMEO 0 // non-blocking receive on all but Cygwin
> +#define SRC_VERBOSE 0
> +#define SNK_VERBOSE 0
> +
> +static int is_error( int perr )
> +{
> + // Compare error to posix error code; return nonzero if match.
> +#if defined(USING_WINSOCK)
> +#define ENOPROTOOPT 109
> + // All codes to be checked for must be defined below
> + int werr = WSAGetLastError();
> + switch( werr ) {
> + case WSAETIMEDOUT:
> + return( perr == EAGAIN );
> + case WSAENOPROTOOPT:
> + return( perr == ENOPROTOOPT );
> + default:
> + fprintf(stderr,"rtl_tcp_source_f: unknown error %d WS err %d \n",
> perr, werr );
> + throw std::runtime_error("internal error");
> + }
> + return 0;
> +#else
> + return( perr == errno );
> +#endif
> +}
> +
> +static void report_error( const char *msg1, const char *msg2 )
> +{
> + // Deal with errors, both posix and winsock
> +#if defined(USING_WINSOCK)
> + int werr = WSAGetLastError();
> + fprintf(stderr, "%s: winsock error %d\n", msg1, werr );
> +#else
> + perror(msg1);
> +#endif
> + if( msg2 != NULL )
> + throw std::runtime_error(msg2);
> + return;
> +}
> +
> using namespace boost::assign;
>
> -static std::string get_tuner_name( enum rtlsdr_tuner tuner_type )
> +const char * rtl_tcp_source_c::get_tuner_name(void)
> {
> - if ( RTLSDR_TUNER_E4000 == tuner_type )
> - return "E4000";
> - else if ( RTLSDR_TUNER_FC0012 == tuner_type )
> - return "FC0012";
> - else if ( RTLSDR_TUNER_FC0013 == tuner_type )
> - return "FC0013";
> - else if ( RTLSDR_TUNER_FC2580 == tuner_type )
> - return "FC2580";
> - else if ( RTLSDR_TUNER_R820T == tuner_type )
> - return "R820T";
> - else if ( RTLSDR_TUNER_R828D == tuner_type )
> - return "R828D";
> - else
> - return "Unknown";
> + switch (d_tuner_type) {
> + case RTLSDR_TUNER_E4000: return "E4000";
> + case RTLSDR_TUNER_FC0012: return "FC0012";
> + case RTLSDR_TUNER_FC0013: return "FC0013";
> + case RTLSDR_TUNER_FC2580: return "FC2580";
> + case RTLSDR_TUNER_R820T: return "R820T";
> + case RTLSDR_TUNER_R828D: return "R828D";
> + default: return "Unknown";
> + }
> }
>
> rtl_tcp_source_c_sptr make_rtl_tcp_source_c(const std::string &args)
> @@ -59,9 +142,10 @@ rtl_tcp_source_c_sptr make_rtl_tcp_source_c(const
> std::string &args)
> }
>
> rtl_tcp_source_c::rtl_tcp_source_c(const std::string &args) :
> - gr::hier_block2("rtl_tcp_source_c",
> + gr::sync_block("rtl_tcp_source_c",
> gr::io_signature::make(0, 0, 0),
> gr::io_signature::make(1, 1, sizeof (gr_complex))),
> + d_socket(-1),
> _no_tuner(false),
> _auto_gain(false),
> _if_gain(0)
> @@ -107,43 +191,162 @@ rtl_tcp_source_c::rtl_tcp_source_c(const
> std::string &args) :
> if (payload_size <= 0)
> payload_size = 16384;
>
> - _src = make_rtl_tcp_source_f(sizeof(float), host.c_str(), port,
> payload_size);
> +#if defined(USING_WINSOCK) // for Windows (with MinGW)
> + // initialize winsock DLL
> + WSADATA wsaData;
> + int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
> + if( iResult != NO_ERROR ) {
> + report_error( "rtl_tcp_source_f WSAStartup", "can't open socket" );
> + }
> +#endif
>
> - if ( _src->get_tuner_type() != RTLSDR_TUNER_UNKNOWN )
> - {
> + // Set up the address stucture for the source address and port numbers
> + // Get the source IP address from the host name
> + struct addrinfo *ip_src; // store the source IP address to use
> + struct addrinfo hints;
> + memset( (void*)&hints, 0, sizeof(hints) );
> + hints.ai_family = AF_UNSPEC;
> + hints.ai_socktype = SOCK_STREAM;
> + hints.ai_protocol = IPPROTO_TCP;
> + hints.ai_flags = AI_PASSIVE;
> + char port_str[12];
> + sprintf( port_str, "%d", port );
> +
> + // FIXME leaks if report_error throws below
> + int ret = getaddrinfo(host.c_str(), port_str, &hints, &ip_src);
> + if (ret != 0)
> + report_error("rtl_tcp_source_f/getaddrinfo",
> + "can't initialize source socket" );
> +
> + // FIXME leaks if report_error throws below
> + d_temp_buff = new unsigned char[payload_size]; // allow it to hold up
> to payload_size bytes
> + d_LUT = new float[0x100];
> + for (int i = 0; i < 0x100; ++i)
> + d_LUT[i] = (((float)(i & 0xff)) - 127.4f) * (1.0f / 128.0f);
> +
> + // create socket
> + d_socket = socket(ip_src->ai_family, ip_src->ai_socktype,
> + ip_src->ai_protocol);
> + if (d_socket == -1)
> + report_error("socket open","can't open socket");
> +
> + // Turn on reuse address
> + int opt_val = 1;
> + if (setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (optval_t)&opt_val,
> sizeof(int)) == -1)
> + report_error("SO_REUSEADDR","can't set socket option SO_REUSEADDR");
> +
> + // Don't wait when shutting down
> + linger lngr;
> + lngr.l_onoff = 1;
> + lngr.l_linger = 0;
> + if (setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr,
> sizeof(linger)) == -1)
> + if (!is_error(ENOPROTOOPT)) // no SO_LINGER for SOCK_DGRAM on Windows
> + report_error("SO_LINGER","can't set socket option SO_LINGER");
> +
> +#if USE_RCV_TIMEO
> + // Set a timeout on the receive function to not block indefinitely
> + // This value can (and probably should) be changed
> + // Ignored on Cygwin
> +#if defined(USING_WINSOCK)
> + DWORD timeout = 1000; // milliseconds
> +#else
> + timeval timeout;
> + timeout.tv_sec = 1;
> + timeout.tv_usec = 0;
> +#endif
> + if (setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (optval_t)&timeout,
> sizeof(timeout)) == -1)
> + report_error("SO_RCVTIMEO","can't set socket option SO_RCVTIMEO");
> +#endif // USE_RCV_TIMEO
> +
> + while (::connect(d_socket, ip_src->ai_addr, ip_src->ai_addrlen) != 0)
> + ; // FIXME handle errors?
> + freeaddrinfo(ip_src);
> +
> + int flag = 1;
> + setsockopt(d_socket, IPPROTO_TCP, TCP_NODELAY, (char
> *)&flag,sizeof(flag));
> +
> + dongle_info_t dongle_info;
> + ret = recv(d_socket, (char*)&dongle_info, sizeof(dongle_info), 0);
> + if (sizeof(dongle_info) != ret)
> + fprintf(stderr,"failed to read dongle info\n");
> +
> + d_tuner_type = RTLSDR_TUNER_UNKNOWN;
> + d_tuner_gain_count = 0;
> + d_tuner_if_gain_count = 0;
> +
> + if (memcmp(dongle_info.magic, "RTL0", 4) == 0) {
> + d_tuner_type = rtlsdr_tuner(ntohl(dongle_info.tuner_type));
> + d_tuner_gain_count = ntohl(dongle_info.tuner_gain_count);
> + if (RTLSDR_TUNER_E4000 == d_tuner_type)
> + d_tuner_if_gain_count = 53;
> + }
> +
> + if (d_tuner_type != RTLSDR_TUNER_UNKNOWN) {
> std::cerr << "The RTL TCP server reports a "
> - << get_tuner_name( _src->get_tuner_type() )
> + << get_tuner_name()
> << " tuner with "
> - << _src->get_tuner_gain_count() << " RF and "
> - << _src->get_tuner_if_gain_count() << " IF gains."
> + << d_tuner_gain_count << " RF and "
> + << d_tuner_if_gain_count << " IF gains."
> << std::endl;
> }
>
> set_gain_mode(false); /* enable manual gain mode by default */
>
> - _src->set_direct_sampling(direct_samp);
> - if (direct_samp) {
> + // set direct sampling
> + struct command cmd = { 0x09, htonl(direct_samp) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> + if (direct_samp)
> _no_tuner = true;
> - }
>
> - _src->set_offset_tuning(offset_tune);
> -
> - /* rtl tcp source provides a stream of interleaved IQ floats */
> - gr::blocks::deinterleave::sptr deinterleave = \
> - gr::blocks::deinterleave::make( sizeof(float) );
> + // set offset tuning
> + cmd = { 0x0a, htonl(offset_tune) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> +}
>
> - /* block to convert deinterleaved floats to a complex stream */
> - gr::blocks::float_to_complex::sptr f2c = \
> - gr::blocks::float_to_complex::make( 1 );
> +rtl_tcp_source_c::~rtl_tcp_source_c()
> +{
> + delete [] d_temp_buff;
> +
> + if (d_socket != -1) {
> + shutdown(d_socket, SHUT_RDWR);
> +#if defined(USING_WINSOCK)
> + closesocket(d_socket);
> +#else
> + ::close(d_socket);
> +#endif
> + d_socket = -1;
> + }
>
> - connect(_src, 0, deinterleave, 0);
> - connect(deinterleave, 0, f2c, 0); /* I */
> - connect(deinterleave, 1, f2c, 1); /* Q */
> - connect(f2c, 0, self(), 0);
> +#if defined(USING_WINSOCK) // for Windows (with MinGW)
> + // free winsock resources
> + WSACleanup();
> +#endif
> }
>
> -rtl_tcp_source_c::~rtl_tcp_source_c()
> +
> +int rtl_tcp_source_c::work(int noutput_items,
> + gr_vector_const_void_star &input_items,
> + gr_vector_void_star &output_items)
> {
> + gr_complex *out = (gr_complex *)output_items[0];
> + int bytesleft = noutput_items * BYTES_PER_SAMPLE;
> + int index = 0;
> + int receivedbytes = 0;
> + while (bytesleft > 0) {
> + receivedbytes = recv(d_socket, (char*)&d_temp_buff[index], bytesleft,
> 0);
> +
> + if (receivedbytes == -1 && !is_error(EAGAIN)) {
> + fprintf(stderr, "socket error\n");
> + return -1;
> + }
> + bytesleft -= receivedbytes;
> + index += receivedbytes;
> + }
> +
> + for (int i = 0; i < noutput_items; i++)
> + out[i] = gr_complex(d_LUT[d_temp_buff[i * 2]], d_LUT[d_temp_buff[i *
> 2 + 1]]);
> +
> + return noutput_items;
> }
>
> std::string rtl_tcp_source_c::name()
> @@ -193,7 +396,8 @@ osmosdr::meta_range_t rtl_tcp_source_c::get_sample_rates(
> void )
>
> double rtl_tcp_source_c::set_sample_rate( double rate )
> {
> - _src->set_sample_rate( int(rate) );
> + struct command cmd = { 0x02, htonl(rate) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
>
> _rate = rate;
>
> @@ -214,24 +418,26 @@ osmosdr::freq_range_t rtl_tcp_source_c::get_freq_range(
> size_t chan )
> return range;
> }
>
> - enum rtlsdr_tuner tuner = _src->get_tuner_type();
> -
> - if ( tuner == RTLSDR_TUNER_E4000 ) {
> - /* there is a (temperature dependent) gap between 1100 to 1250 MHz */
> - range += osmosdr::range_t( 52e6, 2.2e9 );
> - } else if ( tuner == RTLSDR_TUNER_FC0012 ) {
> + switch (d_tuner_type) {
> + case RTLSDR_TUNER_FC0012:
> range += osmosdr::range_t( 22e6, 948e6 );
> - } else if ( tuner == RTLSDR_TUNER_FC0013 ) {
> + break;
> + case RTLSDR_TUNER_FC0013:
> range += osmosdr::range_t( 22e6, 1.1e9 );
> - } else if ( tuner == RTLSDR_TUNER_FC2580 ) {
> + break;
> + case RTLSDR_TUNER_FC2580:
> range += osmosdr::range_t( 146e6, 308e6 );
> range += osmosdr::range_t( 438e6, 924e6 );
> - } else if ( tuner == RTLSDR_TUNER_R820T ) {
> + break;
> + case RTLSDR_TUNER_R820T:
> range += osmosdr::range_t( 24e6, 1766e6 );
> - } else if ( tuner == RTLSDR_TUNER_R828D ) {
> + break;
> + case RTLSDR_TUNER_R828D:
> range += osmosdr::range_t( 24e6, 1766e6 );
> - } else {
> - range += osmosdr::range_t( 52e6, 2.2e9 ); // assume E4000 tuner
> + break;
> + default: // assume E4000 tuner
> + /* there is a (temperature dependent) gap between 1100 to 1250 MHz */
> + range += osmosdr::range_t( 52e6, 2.2e9 );
> }
>
> return range;
> @@ -239,7 +445,8 @@ osmosdr::freq_range_t rtl_tcp_source_c::get_freq_range(
> size_t chan )
>
> double rtl_tcp_source_c::set_center_freq( double freq, size_t chan )
> {
> - _src->set_freq( int(freq) );
> + struct command cmd = { 0x01, htonl(freq) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
>
> _freq = freq;
>
> @@ -253,7 +460,8 @@ double rtl_tcp_source_c::get_center_freq( size_t chan
> )
>
> double rtl_tcp_source_c::set_freq_corr( double ppm, size_t chan )
> {
> - _src->set_freq_corr( int(ppm) );
> + struct command cmd = { 0x05, htonl(ppm) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
>
> _corr = ppm;
>
> @@ -271,9 +479,8 @@ std::vector<std::string> rtl_tcp_source_c::get_gain_names(
> size_t chan )
>
> names += "LNA";
>
> - if ( _src->get_tuner_type() == RTLSDR_TUNER_E4000 ) {
> + if (d_tuner_type == RTLSDR_TUNER_E4000)
> names += "IF";
> - }
>
> return names;
> }
> @@ -301,8 +508,7 @@ osmosdr::gain_range_t rtl_tcp_source_c::get_gain_range(
> size_t chan )
> const int *ptr = NULL;
> int len = 0;
>
> - switch (_src->get_tuner_type())
> - {
> + switch (d_tuner_type) {
> case RTLSDR_TUNER_E4000:
> ptr = e4k_gains; len = sizeof(e4k_gains);
> break;
> @@ -335,11 +541,10 @@ osmosdr::gain_range_t rtl_tcp_source_c::get_gain_range(
> size_t chan )
> osmosdr::gain_range_t rtl_tcp_source_c::get_gain_range( const
> std::string & name, size_t chan )
> {
> if ( "IF" == name ) {
> - if ( _src->get_tuner_type() == RTLSDR_TUNER_E4000 ) {
> + if (d_tuner_type == RTLSDR_TUNER_E4000)
> return osmosdr::gain_range_t(3, 56, 1);
> - } else {
> + else
> return osmosdr::gain_range_t();
> - }
> }
>
> return get_gain_range( chan );
> @@ -347,8 +552,13 @@ osmosdr::gain_range_t rtl_tcp_source_c::get_gain_range(
> const std::string & name
>
> bool rtl_tcp_source_c::set_gain_mode( bool automatic, size_t chan )
> {
> - _src->set_gain_mode(int(!automatic));
> - _src->set_agc_mode(automatic);
> + // gain mode
> + struct command cmd = { 0x03, htonl(!automatic) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> +
> + // AGC mode
> + cmd = { 0x08, htonl(automatic) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
>
> _auto_gain = automatic;
>
> @@ -364,7 +574,8 @@ double rtl_tcp_source_c::set_gain( double gain, size_t
> chan )
> {
> osmosdr::gain_range_t gains = rtl_tcp_source_c::get_gain_range( chan );
>
> - _src->set_gain( int(gains.clip(gain) * 10.0) );
> + struct command cmd = { 0x04, htonl(int(gains.clip(gain) * 10.0)) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
>
> _gain = gain;
>
> @@ -396,7 +607,7 @@ double rtl_tcp_source_c::get_gain( const std::string &
> name, size_t chan )
>
> double rtl_tcp_source_c::set_if_gain(double gain, size_t chan)
> {
> - if ( _src->get_tuner_type() != RTLSDR_TUNER_E4000 ) {
> + if (d_tuner_type != RTLSDR_TUNER_E4000) {
> _if_gain = 0;
> return _if_gain;
> }
> @@ -448,7 +659,10 @@ double rtl_tcp_source_c::set_if_gain(double gain,
> size_t chan)
> std::cerr << " = " << sum << std::endl;
> #endif
> for (unsigned int stage = 1; stage <= gains.size(); stage++) {
> - _src->set_if_gain(stage, int(gains[ stage ] * 10.0));
> + int gain_i = int(gains[stage] * 10.0);
> + uint32_t params = stage << 16 | (gain_i & 0xffff);
> + struct command cmd = { 0x06, htonl(params) };
> + send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> }
>
> _if_gain = gain;
> diff --git a/lib/rtl_tcp/rtl_tcp_source_c.h b/lib/rtl_tcp/rtl_tcp_source_
> c.h
> index 454d1a2..b07e5dd 100644
> --- a/lib/rtl_tcp/rtl_tcp_source_c.h
> +++ b/lib/rtl_tcp/rtl_tcp_source_c.h
> @@ -1,4 +1,4 @@
> -/* -*- c++ -*- */
> +/* -*- mode: c++; c-basic-offset: 2 -*- */
> /*
> * Copyright 2012 Dimitri Stolnikov <horiz0n at gmx.net>
> *
> @@ -20,12 +20,10 @@
> #ifndef RTL_TCP_SOURCE_C_H
> #define RTL_TCP_SOURCE_C_H
>
> -#include <gnuradio/hier_block2.h>
> +#include <gnuradio/sync_block.h>
>
> #include "source_iface.h"
>
> -#include "rtl_tcp_source_f.h"
> -
> class rtl_tcp_source_c;
>
> typedef boost::shared_ptr< rtl_tcp_source_c > rtl_tcp_source_c_sptr;
> @@ -33,17 +31,33 @@ typedef boost::shared_ptr< rtl_tcp_source_c >
> rtl_tcp_source_c_sptr;
> rtl_tcp_source_c_sptr make_rtl_tcp_source_c( const std::string & args =
> "" );
>
> class rtl_tcp_source_c :
> - public gr::hier_block2,
> + public gr::sync_block,
> public source_iface
> {
> private:
> + /* copied from rtl sdr */
> + enum rtlsdr_tuner {
> + RTLSDR_TUNER_UNKNOWN = 0,
> + RTLSDR_TUNER_E4000,
> + RTLSDR_TUNER_FC0012,
> + RTLSDR_TUNER_FC0013,
> + RTLSDR_TUNER_FC2580,
> + RTLSDR_TUNER_R820T,
> + RTLSDR_TUNER_R828D
> + };
> +
> friend rtl_tcp_source_c_sptr make_rtl_tcp_source_c(const std::string
> &args);
>
> rtl_tcp_source_c(const std::string &args);
> + const char * get_tuner_name(void);
>
> public:
> ~rtl_tcp_source_c();
>
> + int work(int noutput_items,
> + gr_vector_const_void_star &input_items,
> + gr_vector_void_star &output_items);
> +
> std::string name();
>
> static std::vector< std::string > get_devices( bool fake = false );
> @@ -77,11 +91,17 @@ public:
> std::string get_antenna( size_t chan = 0 );
>
> private:
> + int d_socket; // handle to socket
> double _freq, _rate, _gain, _corr;
> bool _no_tuner;
> bool _auto_gain;
> double _if_gain;
> - rtl_tcp_source_f_sptr _src;
> +
> + enum rtlsdr_tuner d_tuner_type;
> + unsigned int d_tuner_gain_count;
> + unsigned int d_tuner_if_gain_count;
> + unsigned char *d_temp_buff; // hold buffer between calls
> + float *d_LUT;
> };
>
> #endif // RTL_TCP_SOURCE_C_H
> diff --git a/lib/rtl_tcp/rtl_tcp_source_f.cc b/lib/rtl_tcp/rtl_tcp_source_
> f.cc
> deleted file mode 100644
> index a17594c..0000000
> --- a/lib/rtl_tcp/rtl_tcp_source_f.cc
> +++ /dev/null
> @@ -1,327 +0,0 @@
> -/* -*- c++ -*- */
> -/*
> - * Copyright 2012 Hoernchen <la at tfc-server.de>
> - * Copyright 2012 Dimitri Stolnikov <horiz0n at gmx.net>
> - *
> - * GNU Radio 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, or (at your option)
> - * any later version.
> - *
> - * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
> - * the Free Software Foundation, Inc., 51 Franklin Street,
> - * Boston, MA 02110-1301, USA.
> - */
> -//#define HAVE_WINDOWS_H
> -
> -
> -#include <rtl_tcp_source_f.h>
> -#include <gnuradio/io_signature.h>
> -#include <stdexcept>
> -#include <errno.h>
> -#include <stdio.h>
> -#include <string.h>
> -
> -#ifndef _WIN32
> -#include <netinet/in.h>
> -#else
> -#include <WinSock2.h>
> -#endif
> -
> -/* copied from rtl sdr code */
> -typedef struct { /* structure size must be multiple of 2 bytes */
> - char magic[4];
> - uint32_t tuner_type;
> - uint32_t tuner_gain_count;
> -} dongle_info_t;
> -
> -#define USE_SELECT 1 // non-blocking receive on all platforms
> -#define USE_RCV_TIMEO 0 // non-blocking receive on all but Cygwin
> -#define SRC_VERBOSE 0
> -#define SNK_VERBOSE 0
> -
> -static int is_error( int perr )
> -{
> - // Compare error to posix error code; return nonzero if match.
> -#if defined(USING_WINSOCK)
> -#define ENOPROTOOPT 109
> - // All codes to be checked for must be defined below
> - int werr = WSAGetLastError();
> - switch( werr ) {
> - case WSAETIMEDOUT:
> - return( perr == EAGAIN );
> - case WSAENOPROTOOPT:
> - return( perr == ENOPROTOOPT );
> - default:
> - fprintf(stderr,"rtl_tcp_source_f: unknown error %d WS err %d \n",
> perr, werr );
> - throw std::runtime_error("internal error");
> - }
> - return 0;
> -#else
> - return( perr == errno );
> -#endif
> -}
> -
> -static void report_error( const char *msg1, const char *msg2 )
> -{
> - // Deal with errors, both posix and winsock
> -#if defined(USING_WINSOCK)
> - int werr = WSAGetLastError();
> - fprintf(stderr, "%s: winsock error %d\n", msg1, werr );
> -#else
> - perror(msg1);
> -#endif
> - if( msg2 != NULL )
> - throw std::runtime_error(msg2);
> - return;
> -}
> -
> -rtl_tcp_source_f::rtl_tcp_source_f(size_t itemsize,
> - const char *host,
> - unsigned short port,
> - int payload_size,
> - bool eof,
> - bool wait)
> - : gr::sync_block ("rtl_tcp_source_f",
> - gr::io_signature::make(0, 0, 0),
> - gr::io_signature::make(1, 1, sizeof(float))),
> - d_itemsize(itemsize),
> - d_payload_size(payload_size),
> - d_eof(eof),
> - d_wait(wait),
> - d_socket(-1),
> - d_temp_offset(0)
> -{
> - int ret = 0;
> -#if defined(USING_WINSOCK) // for Windows (with MinGW)
> - // initialize winsock DLL
> - WSADATA wsaData;
> - int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
> - if( iResult != NO_ERROR ) {
> - report_error( "rtl_tcp_source_f WSAStartup", "can't open socket" );
> - }
> -#endif
> -
> - // Set up the address stucture for the source address and port numbers
> - // Get the source IP address from the host name
> - struct addrinfo *ip_src; // store the source IP address to use
> - struct addrinfo hints;
> - memset( (void*)&hints, 0, sizeof(hints) );
> - hints.ai_family = AF_UNSPEC;
> - hints.ai_socktype = SOCK_STREAM;
> - hints.ai_protocol = IPPROTO_TCP;
> - hints.ai_flags = AI_PASSIVE;
> - char port_str[12];
> - sprintf( port_str, "%d", port );
> -
> - // FIXME leaks if report_error throws below
> - ret = getaddrinfo( host, port_str, &hints, &ip_src );
> - if( ret != 0 )
> - report_error("rtl_tcp_source_f/getaddrinfo",
> - "can't initialize source socket" );
> -
> - // FIXME leaks if report_error throws below
> - d_temp_buff = new unsigned char[d_payload_size]; // allow it to hold
> up to payload_size bytes
> - d_LUT= new float[0xff+1];
> - for(int i=0; i <=(0xff);++i){
> - d_LUT[i] = (((float)(i&0xff))-127.4f)*(1.0f/128.0f);
> - }
> - // create socket
> - d_socket = socket(ip_src->ai_family, ip_src->ai_socktype,
> - ip_src->ai_protocol);
> - if(d_socket == -1) {
> - report_error("socket open","can't open socket");
> - }
> -
> - // Turn on reuse address
> - int opt_val = 1;
> - if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (optval_t)&opt_val,
> sizeof(int)) == -1) {
> - report_error("SO_REUSEADDR","can't set socket option SO_REUSEADDR");
> - }
> -
> - // Don't wait when shutting down
> - linger lngr;
> - lngr.l_onoff = 1;
> - lngr.l_linger = 0;
> - if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr,
> sizeof(linger)) == -1) {
> - if( !is_error(ENOPROTOOPT) ) { // no SO_LINGER for SOCK_DGRAM on
> Windows
> - report_error("SO_LINGER","can't set socket option SO_LINGER");
> - }
> - }
> -
> -#if USE_RCV_TIMEO
> - // Set a timeout on the receive function to not block indefinitely
> - // This value can (and probably should) be changed
> - // Ignored on Cygwin
> -#if defined(USING_WINSOCK)
> - DWORD timeout = 1000; // milliseconds
> -#else
> - timeval timeout;
> - timeout.tv_sec = 1;
> - timeout.tv_usec = 0;
> -#endif
> - if(setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (optval_t)&timeout,
> sizeof(timeout)) == -1) {
> - report_error("SO_RCVTIMEO","can't set socket option SO_RCVTIMEO");
> - }
> -#endif // USE_RCV_TIMEO
> -
> - while(connect(d_socket, ip_src->ai_addr, ip_src->ai_addrlen) != 0);
> - freeaddrinfo(ip_src);
> -
> - int flag = 1;
> - setsockopt(d_socket, IPPROTO_TCP, TCP_NODELAY, (char
> *)&flag,sizeof(flag));
> -
> - dongle_info_t dongle_info;
> - ret = recv(d_socket, (char*)&dongle_info, sizeof(dongle_info), 0);
> - if (sizeof(dongle_info) != ret)
> - fprintf(stderr,"failed to read dongle info\n");
> -
> - d_tuner_type = RTLSDR_TUNER_UNKNOWN;
> - d_tuner_gain_count = 0;
> - d_tuner_if_gain_count = 0;
> -
> - if (memcmp(dongle_info.magic, "RTL0", 4) == 0)
> - {
> - d_tuner_type = ntohl(dongle_info.tuner_type);
> - d_tuner_gain_count = ntohl(dongle_info.tuner_gain_count);
> - if ( RTLSDR_TUNER_E4000 == d_tuner_type )
> - d_tuner_if_gain_count = 53;
> - }
> -}
> -
> -rtl_tcp_source_f_sptr make_rtl_tcp_source_f (size_t itemsize,
> - const char *ipaddr,
> - unsigned short port,
> - int payload_size,
> - bool eof,
> - bool wait)
> -{
> - return gnuradio::get_initial_sptr(new rtl_tcp_source_f (
> - itemsize,
> - ipaddr,
> - port,
> - payload_size,
> - eof,
> - wait));
> -}
> -
> -rtl_tcp_source_f::~rtl_tcp_source_f ()
> -{
> - delete [] d_temp_buff;
> -
> - if (d_socket != -1){
> - shutdown(d_socket, SHUT_RDWR);
> -#if defined(USING_WINSOCK)
> - closesocket(d_socket);
> -#else
> - ::close(d_socket);
> -#endif
> - d_socket = -1;
> - }
> -
> -#if defined(USING_WINSOCK) // for Windows (with MinGW)
> - // free winsock resources
> - WSACleanup();
> -#endif
> -}
> -
> -int rtl_tcp_source_f::work (int noutput_items,
> - gr_vector_const_void_star &input_items,
> - gr_vector_void_star &output_items)
> -{
> - float *out = (float *) output_items[0];
> - ssize_t r = 0;
> -
> - int bytesleft = noutput_items;
> - int index = 0;
> - int receivedbytes = 0;
> - while(bytesleft > 0) {
> - receivedbytes = recv(d_socket, (char*)&d_temp_buff[index], bytesleft,
> 0);
> -
> - if(receivedbytes == -1 && !is_error(EAGAIN)){
> - fprintf(stderr, "socket error\n");
> - return -1;
> - }
> - bytesleft -= receivedbytes;
> - index += receivedbytes;
> - }
> - r = noutput_items;
> -
> - for(int i=0; i<r; ++i)
> - out[i]=d_LUT[*(d_temp_buff+d_temp_offset+i)];
> -
> - return r;
> -}
> -
> -#ifdef _WIN32
> -#define __attribute__(x)
> -#pragma pack(push, 1)
> -#endif
> -struct command{
> - unsigned char cmd;
> - unsigned int param;
> -}__attribute__((packed));
> -#ifdef _WIN32
> -#pragma pack(pop)
> -#endif
> -
> -void rtl_tcp_source_f::set_freq(int freq)
> -{
> - struct command cmd = { 0x01, htonl(freq) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_sample_rate(int sample_rate)
> -{
> - struct command cmd = { 0x02, htonl(sample_rate) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_gain_mode(int manual)
> -{
> - struct command cmd = { 0x03, htonl(manual) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_gain(int gain)
> -{
> - struct command cmd = { 0x04, htonl(gain) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_freq_corr(int ppm)
> -{
> - struct command cmd = { 0x05, htonl(ppm) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_if_gain(int stage, int gain)
> -{
> - uint32_t params = stage << 16 | (gain & 0xffff);
> - struct command cmd = { 0x06, htonl(params) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_agc_mode(int on)
> -{
> - struct command cmd = { 0x08, htonl(on) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_direct_sampling(int on)
> -{
> - struct command cmd = { 0x09, htonl(on) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> -
> -void rtl_tcp_source_f::set_offset_tuning(int on)
> -{
> - struct command cmd = { 0x0a, htonl(on) };
> - send(d_socket, (const char*)&cmd, sizeof(cmd), 0);
> -}
> diff --git a/lib/rtl_tcp/rtl_tcp_source_f.h b/lib/rtl_tcp/rtl_tcp_source_
> f.h
> deleted file mode 100644
> index 84ac57a..0000000
> --- a/lib/rtl_tcp/rtl_tcp_source_f.h
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -/* -*- c++ -*- */
> -/*
> - * Copyright 2012 Hoernchen <la at tfc-server.de>
> - *
> - * GNU Radio 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, or (at your option)
> - * any later version.
> - *
> - * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
> - * the Free Software Foundation, Inc., 51 Franklin Street,
> - * Boston, MA 02110-1301, USA.
> - */
> -
> -#ifndef RTL_TCP_SOURCE_F_H
> -#define RTL_TCP_SOURCE_F_H
> -
> -#include <gnuradio/sync_block.h>
> -#include <gnuradio/thread/thread.h>
> -
> -#if defined(_WIN32)
> -// if not posix, assume winsock
> -#pragma comment(lib, "ws2_32.lib")
> -#define USING_WINSOCK
> -#include <winsock2.h>
> -#include <ws2tcpip.h>
> -#define SHUT_RDWR 2
> -typedef char* optval_t;
> -#else
> -#include <netdb.h>
> -#include <sys/types.h>
> -#include <sys/socket.h>
> -#include <netinet/in.h>
> -#include <netinet/tcp.h>
> -#include <arpa/inet.h>
> -typedef void* optval_t;
> -#endif
> -
> -#ifdef _MSC_VER
> -#include <cstddef>
> -typedef ptrdiff_t ssize_t;
> -#endif //_MSC_VER
> -
> -/* copied from rtl sdr */
> -enum rtlsdr_tuner {
> - RTLSDR_TUNER_UNKNOWN = 0,
> - RTLSDR_TUNER_E4000,
> - RTLSDR_TUNER_FC0012,
> - RTLSDR_TUNER_FC0013,
> - RTLSDR_TUNER_FC2580,
> - RTLSDR_TUNER_R820T,
> - RTLSDR_TUNER_R828D
> -};
> -
> -class rtl_tcp_source_f;
> -typedef boost::shared_ptr<rtl_tcp_source_f> rtl_tcp_source_f_sptr;
> -
> -rtl_tcp_source_f_sptr make_rtl_tcp_source_f (
> - size_t itemsize,
> - const char *host,
> - unsigned short port,
> - int payload_size,
> - bool eof = false,
> - bool wait = false);
> -
> -class rtl_tcp_source_f : public gr::sync_block
> -{
> -private:
> - size_t d_itemsize;
> - int d_payload_size; // maximum transmission unit (packet
> length)
> - bool d_eof; // zero-length packet is EOF
> - bool d_wait; // wait if data if not immediately
> available
> - int d_socket; // handle to socket
> - unsigned char *d_temp_buff; // hold buffer between calls
> - size_t d_temp_offset; // point to temp buffer location offset
> - float *d_LUT;
> -
> - unsigned int d_tuner_type;
> - unsigned int d_tuner_gain_count;
> - unsigned int d_tuner_if_gain_count;
> -
> -private:
> - rtl_tcp_source_f(size_t itemsize, const char *host,
> - unsigned short port, int payload_size, bool eof, bool
> wait);
> -
> - // The friend declaration allows make_source_c to
> - // access the private constructor.
> - friend rtl_tcp_source_f_sptr make_rtl_tcp_source_f (
> - size_t itemsize,
> - const char *host,
> - unsigned short port,
> - int payload_size,
> - bool eof,
> - bool wait);
> -
> -public:
> - ~rtl_tcp_source_f();
> -
> - enum rtlsdr_tuner get_tuner_type() { return (enum rtlsdr_tuner)
> d_tuner_type; }
> - unsigned int get_tuner_gain_count() { return d_tuner_gain_count; }
> - unsigned int get_tuner_if_gain_count() { return d_tuner_if_gain_count; }
> -
> - int work(int noutput_items,
> - gr_vector_const_void_star &input_items,
> - gr_vector_void_star &output_items);
> -
> - void set_freq(int freq);
> - void set_sample_rate(int sample_rate);
> - void set_gain_mode(int manual);
> - void set_gain(int gain);
> - void set_freq_corr(int ppm);
> - void set_if_gain(int stage, int gain);
> - void set_agc_mode(int on);
> - void set_direct_sampling(int on);
> - void set_offset_tuning(int on);
> -};
> -
> -
> -#endif /* RTL_TCP_SOURCE_F_H */
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> osmocom-sdr mailing list
> osmocom-sdr at lists.osmocom.org
> https://lists.osmocom.org/mailman/listinfo/osmocom-sdr
>
>
> ------------------------------
>
> End of osmocom-sdr Digest, Vol 21, Issue 2
> ******************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/osmocom-sdr/attachments/20160824/ad35ead1/attachment.htm>