Full Code of pinkavaj/rtl-sdr for AI

master cd36c2881559 cached
117 files
917.8 KB
305.9k tokens
731 symbols
1 requests
Download .txt
Showing preview only (959K chars total). Download the full file or copy to clipboard to get everything.
Repository: pinkavaj/rtl-sdr
Branch: master
Commit: cd36c2881559
Files: 117
Total size: 917.8 KB

Directory structure:
gitextract_nuacun34/

├── .github/
│   └── workflows/
│       └── c-cpp.yml
├── .gitignore
├── .travis.yml
├── AUTHORS
├── CMakeLists.txt
├── COPYING
├── Doxyfile.in
├── Makefile.am
├── README.md
├── README.rtlfm_cmdfile
├── README.rtlsdr_rpc
├── README_improvements.md
├── cmake/
│   ├── Modules/
│   │   ├── FindLibUSB.cmake
│   │   ├── FindThreads.cmake
│   │   └── Version.cmake
│   └── cmake_uninstall.cmake.in
├── configure.ac
├── contrib/
│   └── jenkins.sh
├── cross_build_mingw32.sh
├── cross_build_mingw64.sh
├── debian/
│   ├── .gitignore
│   ├── README.Debian
│   ├── changelog
│   ├── compat
│   ├── control
│   ├── copyright
│   ├── copyright-scan-patterns.yml
│   ├── debianize_armhf
│   ├── debianize_x32
│   ├── debianize_x64
│   ├── heatmap.py
│   ├── librtlsdr-dev.dirs
│   ├── librtlsdr-dev.install
│   ├── librtlsdr0.dirs
│   ├── librtlsdr0.install
│   ├── librtlsdr0.maintscript
│   ├── librtlsdr0.metainfo.xml
│   ├── librtlsdr0.udev
│   ├── rtl-sdr-blacklist.conf
│   ├── rtl-sdr.dirs
│   ├── rtl-sdr.examples
│   ├── rtl-sdr.install
│   ├── rtl-sdr.manpages
│   ├── rtl_adsb.1
│   ├── rtl_eeprom.1
│   ├── rtl_fm.1
│   ├── rtl_power.1
│   ├── rtl_sdr.1
│   ├── rtl_tcp.1
│   ├── rtl_test.1
│   ├── rules
│   ├── source/
│   │   └── format
│   └── watch
├── git-version-gen
├── include/
│   ├── CMakeLists.txt
│   ├── Makefile.am
│   ├── controlThread.h
│   ├── reg_field.h
│   ├── rtl-sdr.h
│   ├── rtl-sdr_export.h
│   ├── rtl_tcp.h
│   ├── rtlsdr_i2c.h
│   ├── rtlsdr_rpc.h
│   ├── rtlsdr_rpc_msg.h
│   ├── tuner_e4k.h
│   ├── tuner_fc0012.h
│   ├── tuner_fc0013.h
│   ├── tuner_fc2580.h
│   └── tuner_r82xx.h
├── install-blacklist.sh
├── librtlsdr.pc.in
├── m4/
│   └── .gitignore
├── mingw-w32-i686.cmake
├── mingw-w64-x64_64.cmake
├── protocol_rtl_tcp.txt
├── rtl-sdr.rules
├── rtlsdr-blacklist.conf
├── src/
│   ├── CMakeLists.txt
│   ├── Makefile.am
│   ├── controlThread.c
│   ├── convenience/
│   │   ├── convenience.c
│   │   ├── convenience.h
│   │   ├── rtl_convenience.c
│   │   ├── rtl_convenience.h
│   │   ├── wavehdr.h
│   │   ├── waveread.c
│   │   ├── waveread.h
│   │   ├── wavewrite.c
│   │   └── wavewrite.h
│   ├── getopt/
│   │   ├── getopt.c
│   │   └── getopt.h
│   ├── librtlsdr.c
│   ├── rtl_adsb.c
│   ├── rtl_app_ver.h.in
│   ├── rtl_biast.c
│   ├── rtl_eeprom.c
│   ├── rtl_fm.c
│   ├── rtl_ir.c
│   ├── rtl_power.c
│   ├── rtl_raw2wav.c
│   ├── rtl_rpcd.c
│   ├── rtl_sdr.c
│   ├── rtl_tcp.c
│   ├── rtl_test.c
│   ├── rtl_udp.c
│   ├── rtl_wavestat.c
│   ├── rtl_wavestream.c
│   ├── rtlsdr.rc.in
│   ├── rtlsdr_rpc.c
│   ├── rtlsdr_rpc_msg.c
│   ├── tuner_e4k.c
│   ├── tuner_fc0012.c
│   ├── tuner_fc0013.c
│   ├── tuner_fc2580.c
│   └── tuner_r82xx.c
└── win32-qtcreator/
    ├── CMakeLists.txt
    └── README.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/c-cpp.yml
================================================
name: C/C++ CI

on:
  push:
    branches: [ master, development ]
  pull_request:
    branches: [ master, development ]

jobs:
  build_ubuntu-amd64_latest:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: prerequisites
    # pre-installed on ubuntu-1804: build-essential, git 2.28.0, cmake 3.10/3.17, make
    # pre-installed: clang 6.0 / 8 / 9, gcc/++ 7.5.0/8.4.0/9.3.0
      run: sudo apt -qq update && sudo apt -yqq install libusb-1.0-0-dev
    - name: cmake_make
      run: mkdir build && cmake -S . -B build && cd build && make
    - name: compress
      run: tar zcvf librtlsdr_build_ubuntu-amd64_latest.tar.gz --directory=build/src --exclude=CMakeFiles --exclude=*.cmake --exclude=Makefile --exclude=rtl_app_ver.h .
    - name: 'Upload Artifact'
      uses: actions/upload-artifact@v2
      with:
        name: ubuntu_latest_build
        path: librtlsdr_build_ubuntu-amd64_latest.tar.gz

  build_macos_latest:
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v2
    #- name: prerequisites
    # pre-installed on macos-10.15: git 2.28.0, cmake 3.18.2, libusb 1.0.23
    # pre-installed: clang/LLVM 10.0.1, gcc/++ 8.4.0/9.3.0
    #  run: brew install libusb
    - name: cmake_make
      run: mkdir build && cmake -S . -B build && cd build && make
    - name: compress
      run: tar zcvf librtlsdr_build_macos-latest.tar.gz --directory=build/src --exclude=CMakeFiles --exclude=*.cmake --exclude=Makefile --exclude=rtl_app_ver.h .
    - name: 'Upload Artifact'
      uses: actions/upload-artifact@v2
      with:
        name: macos_latest_build
        path: librtlsdr_build_macos-latest.tar.gz

  cross_build_win32_win64_latest:
    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v2
    - name: prerequisites
      run: sudo apt -qq update && sudo apt -yqq install gcc-mingw-w64
    - name: build_w32_static
      run: bash ./cross_build_mingw32.sh static -DLINK_RTLTOOLS_AGAINST_STATIC_LIB=ON
    - name: build_w32_static_udpsrv
      run: bash ./cross_build_mingw32.sh static_udpsrv -DLINK_RTLTOOLS_AGAINST_STATIC_LIB=ON -DPROVIDE_UDP_SERVER=ON
    - name: build_w32_dlldep
      run: bash ./cross_build_mingw32.sh dlldep
    - name: build_w32_dlldep_udpsrv
      run: bash ./cross_build_mingw32.sh dlldep_udpsrv -DPROVIDE_UDP_SERVER=ON

    - name: build_w64_static
      run: bash ./cross_build_mingw64.sh static -DLINK_RTLTOOLS_AGAINST_STATIC_LIB=ON
    - name: build_w64_static_udpsrv
      run: bash ./cross_build_mingw64.sh static_udpsrv -DLINK_RTLTOOLS_AGAINST_STATIC_LIB=ON -DPROVIDE_UDP_SERVER=ON
    - name: build_w64_dlldep
      run: bash ./cross_build_mingw64.sh dlldep
    - name: build_w64_dlldep_udpsrv
      run: bash ./cross_build_mingw64.sh dlldep_udpsrv -DPROVIDE_UDP_SERVER=ON

    - name: 'upload w32 static artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w32_static
        path: rtlsdr-bin-w32_static/bin/
    - name: 'upload w32 static_udpsrv artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w32_static_udpsrv
        path: rtlsdr-bin-w32_static_udpsrv/bin/
    - name: 'upload w32 dlldep artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w32_dlldep
        path: rtlsdr-bin-w32_dlldep/bin/
    - name: 'upload w32 dlldep_udpsrv artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w32_dlldep_udpsrv
        path: rtlsdr-bin-w32_dlldep_udpsrv/bin/

    - name: 'upload w64 static artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w64_static
        path: rtlsdr-bin-w64_static/bin/
    - name: 'upload w64 static_udpsrv artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w64_static_udpsrv
        path: rtlsdr-bin-w64_static_udpsrv/bin/
    - name: 'upload w64 dlldep artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w64_dlldep
        path: rtlsdr-bin-w64_dlldep/bin/
    - name: 'upload w64 dlldep_udpsrv artifact'
      uses: actions/upload-artifact@v2
      with:
        name: rtlsdr-bin-w64_dlldep_udpsrv
        path: rtlsdr-bin-w64_dlldep_udpsrv/bin/



================================================
FILE: .gitignore
================================================
Makefile
Makefile.in
.deps
.libs
*.o
*.lo
*.la
*.pc
aclocal.m4
acinclude.m4
aminclude.am
m4/*.m4
autom4te.cache
config.h*
config.sub
config.log
config.status
config.guess
configure
depcomp
missing
ltmain.sh
install-sh
stamp-h1
libtool
Doxyfile

.tarball-version
.version

.*.swp

doc/

src/rtl_sdr
src/rtl_tcp

CMakeCache.txt
*/CMakeFiles
CMakeFiles
build

**/*.o
**/*.so*
**/*.a
src/rtl_adsb
src/rtl_eeprom
src/rtl_fm
src/rtl_ir
src/rtl_power
src/rtl_rpcd
src/rtl_test

debianize/*.deb
.cproject
.project


================================================
FILE: .travis.yml
================================================
language: c
compiler:
  - gcc
  - clang

before_install:
 - sudo apt-get update -qq
 - sudo apt-get install -qq libusb-1.0-0-dev

script: cmake . && make && sudo make install


================================================
FILE: AUTHORS
================================================
Steve Markgraf <steve@steve-m.de>
Dimitri Stolnikov <horiz0n@gmx.net>
Hoernchen <la@tfc-server.de>
Kyle Keen <keenerd@gmail.com>


================================================
FILE: CMakeLists.txt
================================================
# Copyright 2012 OSMOCOM Project
#
# This file is part of rtl-sdr
#
# 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.


########################################################################
# Project setup
########################################################################
cmake_minimum_required(VERSION 2.6...3.19)
project(rtlsdr C)

# quite old cmake version - probably for compatibility with old OS versions?
# see https://cmake.org/cmake/help/cmake2.6docs.html


#select the release build type by default to get optimization flags
if(NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE "Release")
   message(STATUS "Build type not specified: defaulting to release.")
endif(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)

if(NOT LIB_INSTALL_DIR)
   set(LIB_INSTALL_DIR lib)
endif()

OPTION(LINK_RTLTOOLS_AGAINST_STATIC_LIB "Link rtl-tools statically against librtlsdr" OFF)

OPTION(PROVIDE_UDP_SERVER "Provide UDP server for tests" OFF)

OPTION(WITH_RPC "RPC for non-Windows" OFF)

# Set the version information here
set(VERSION_INFO_MAJOR_VERSION 0) # increment major on api compatibility changes
set(VERSION_INFO_MINOR_VERSION 9) # increment minor on feature-level changes
set(VERSION_INFO_PATCH_VERSION git) # increment patch for bug fixes and docs
include(Version) # setup version info

########################################################################
# Version defines to include in library and tools
########################################################################

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/src/rtl_app_ver.h.in
    ${CMAKE_CURRENT_BINARY_DIR}/src/rtl_app_ver.h
    @ONLY )


if(PROVIDE_UDP_SERVER)
    add_definitions(-DWITH_UDP_SERVER)
endif()

########################################################################
# Compiler specific setup
########################################################################
if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32)
    ADD_DEFINITIONS(-Wall)
    ADD_DEFINITIONS(-Wextra)
    ADD_DEFINITIONS(-Wno-unused-parameter)
    ADD_DEFINITIONS(-Wno-unused)
    ADD_DEFINITIONS(-Wsign-compare)
    ADD_DEFINITIONS(-Wdeclaration-after-statement)
    #http://gcc.gnu.org/wiki/Visibility
    add_definitions(-fvisibility=hidden)
elseif(MSVC14 OR MSVC14)
#pthread-w32 issue, timespec is now part of time.h
    ADD_DEFINITIONS(-D_TIMESPEC_DEFINED)
endif()
if (APPLE)
  set(CMAKE_MACOSX_RPATH ON)
endif (APPLE)

OPTION(RTL_STATIC_BUILD "Build rtl-tools static (except RTLSDR.DLL) on MinGW/Win32" ON)
if(RTL_STATIC_BUILD)
    if (WIN32)
        if(MINGW)
            # Special MINGW stuff here
            # see https://cmake.org/pipermail/cmake/2012-September/051970.html
            # see http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw
            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -static")
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
            set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -s")
            set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++ -s")
        endif()
    endif()
endif()


#########################################################################
# Bug Fix
#########################################################################
OPTION(NEED_PTHREADS_WORKARROUND "PThreads Workarround for timespec")
IF (NEED_PTHREADS_WORKARROUND)
    ADD_DEFINITIONS(-DNEED_PTHREADS_WORKARROUND)
ENDIF()

########################################################################
# Find build dependencies
########################################################################
find_package(PkgConfig)
find_package(LibUSB)
cmake_policy(SET CMP0075 NEW)
if(WIN32 AND NOT MINGW)
    set(THREADS_USE_PTHREADS_WIN32 true)
endif()
find_package(Threads)

if(NOT LIBUSB_FOUND)
    message(FATAL_ERROR "LibUSB 1.0 required to compile rtl-sdr")
endif()
if(NOT THREADS_FOUND)
    message(FATAL_ERROR "pthreads(-win32) required to compile rtl-sdr")
endif()
########################################################################
# Setup the include and linker paths
########################################################################
include_directories(
    ${PROJECT_SOURCE_DIR}/include
    ${LIBUSB_INCLUDE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}/src
    ${THREADS_PTHREADS_INCLUDE_DIR}
)

#link_directories(
#    ...
#)

# Set component parameters
#set(INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)

########################################################################
# Create uninstall target
########################################################################
if(NOT TARGET uninstall)
    configure_file(
        ${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
        ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
        @ONLY
    )

    add_custom_target(uninstall
        ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
    )
endif()

########################################################################
# Install udev rules
########################################################################
option(INSTALL_UDEV_RULES "Install udev rules for RTL-SDR" OFF)
if (INSTALL_UDEV_RULES)
    install (
        FILES rtl-sdr.rules
        DESTINATION "/etc/udev/rules.d"
        COMPONENT "udev"
        )
else (INSTALL_UDEV_RULES)
    message (STATUS "Udev rules not being installed, install them with -DINSTALL_UDEV_RULES=ON")
endif (INSTALL_UDEV_RULES)

option(DETACH_KERNEL_DRIVER "Detach kernel driver if loaded" OFF)
if (DETACH_KERNEL_DRIVER)
    message (STATUS "Building with kernel driver detaching enabled")
    add_definitions(-DDETACH_KERNEL_DRIVER=1)
else (DETACH_KERNEL_DRIVER)
    message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable")
endif (DETACH_KERNEL_DRIVER)

########################################################################
# Add subdirectories
########################################################################
add_subdirectory(include)
add_subdirectory(src)

########################################################################
# Create Pkg Config File
########################################################################
FOREACH(inc ${LIBUSB_INCLUDE_DIR})
    LIST(APPEND RTLSDR_PC_CFLAGS "-I${inc}")
ENDFOREACH(inc)

FOREACH(lib ${LIBUSB_LIBRARY_DIRS})
    LIST(APPEND RTLSDR_PC_LIBS "-L${lib}")
ENDFOREACH(lib)

# use space-separation format for the pc file
STRING(REPLACE ";" " " RTLSDR_PC_CFLAGS "${RTLSDR_PC_CFLAGS}")
STRING(REPLACE ";" " " RTLSDR_PC_LIBS "${RTLSDR_PC_LIBS}")

# unset these vars to avoid hard-coded paths to cross environment
IF(CMAKE_CROSSCOMPILING)
    UNSET(RTLSDR_PC_CFLAGS)
    UNSET(RTLSDR_PC_LIBS)
ENDIF(CMAKE_CROSSCOMPILING)

set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix \${prefix})
set(libdir \${exec_prefix}/${LIB_INSTALL_DIR})
set(includedir \${prefix}/include)

CONFIGURE_FILE(
    ${CMAKE_CURRENT_SOURCE_DIR}/librtlsdr.pc.in
    ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc
@ONLY)

INSTALL(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc
    DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
)

########################################################################
# Print Summary
########################################################################
MESSAGE(STATUS "Building for version: ${VERSION} / ${LIBVER}")
MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")


================================================
FILE: COPYING
================================================
		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program 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 2 of the License, or
    (at your option) any later version.

    This program 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 this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


================================================
FILE: Doxyfile.in
================================================
# Doxyfile 1.7.4

# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a hash (#) is considered a comment and will be ignored.
# The format is:
#       TAG = value [value, ...]
# For lists items can also be appended using:
#       TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (" ").

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# http://www.gnu.org/software/libiconv for the list of possible encodings.

DOXYFILE_ENCODING      = UTF-8

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.

PROJECT_NAME           = librtlsdr

# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.

PROJECT_NUMBER         = @VERSION@

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer
# a quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          = "RTL-SDR library"

# With the PROJECT_LOGO tag one can specify an logo or icon that is
# included in the documentation. The maximum height of the logo should not
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
# Doxygen will copy the logo to the output directory.

PROJECT_LOGO           =

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.

OUTPUT_DIRECTORY       = doc

# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# format and will distribute the generated files over these directories.
# Enabling this option can be useful when feeding doxygen a huge amount of
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.

CREATE_SUBDIRS         = NO

# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.

OUTPUT_LANGUAGE        = English

# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.

BRIEF_MEMBER_DESC      = YES

# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.

REPEAT_BRIEF           = YES

# This tag implements a quasi-intelligent brief description abbreviator
# that is used to form the text in various listings. Each string
# in this list, if found as the leading text of the brief description, will be
# stripped from the text and the result after processing the whole list, is
# used as the annotated text. Otherwise, the brief description is used as-is.
# If left blank, the following values are used ("$name" is automatically
# replaced with the name of the entity): "The $name class" "The $name widget"
# "The $name file" "is" "provides" "specifies" "contains"
# "represents" "a" "an" "the"

ABBREVIATE_BRIEF       =

# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.

ALWAYS_DETAILED_SEC    = NO

# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.

INLINE_INHERITED_MEMB  = NO

# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.

FULL_PATH_NAMES        = YES

# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the
# path to strip.

STRIP_FROM_PATH        =

# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
# the reader which header file to include in order to use a class.
# If left blank only the name of the header file containing the class
# definition is used. Otherwise one should specify the include paths that
# are normally passed to the compiler using the -I flag.

STRIP_FROM_INC_PATH    =

# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful if your file system
# doesn't support long names like on DOS, Mac, or CD-ROM.

SHORT_NAMES            = NO

# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like regular Qt-style comments
# (thus requiring an explicit @brief command for a brief description.)

JAVADOC_AUTOBRIEF      = NO

# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
# interpret the first line (until the first dot) of a Qt-style
# comment as the brief description. If set to NO, the comments
# will behave just like regular Qt-style comments (thus requiring
# an explicit \brief command for a brief description.)

QT_AUTOBRIEF           = NO

# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
# The new default is to treat a multi-line C++ comment block as a detailed
# description. Set this tag to YES if you prefer the old behaviour instead.

MULTILINE_CPP_IS_BRIEF = NO

# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# re-implements.

INHERIT_DOCS           = YES

# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
# a new page for each member. If set to NO, the documentation of a member will
# be part of the file/class/namespace that contains it.

SEPARATE_MEMBER_PAGES  = NO

# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.

TAB_SIZE               = 8

# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
# For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.

ALIASES                =

# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.

OPTIMIZE_OUTPUT_FOR_C  = YES

# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
# sources only. Doxygen will then generate output that is more tailored for
# Java. For instance, namespaces will be presented as packages, qualified
# scopes will look different, etc.

OPTIMIZE_OUTPUT_JAVA   = NO

# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources only. Doxygen will then generate output that is more tailored for
# Fortran.

OPTIMIZE_FOR_FORTRAN   = NO

# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for
# VHDL.

OPTIMIZE_OUTPUT_VHDL   = NO

# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given extension.
# Doxygen has a built-in mapping, but you can override or extend it using this
# tag. The format is ext=language, where ext is a file extension, and language
# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.

EXTENSION_MAPPING      =

# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should
# set this tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
# func(std::string) {}). This also makes the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.

BUILTIN_STL_SUPPORT    = NO

# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.

CPP_CLI_SUPPORT        = NO

# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
# Doxygen will parse them like normal C++ but will assume all classes use public
# instead of private inheritance when no explicit protection keyword is present.

SIP_SUPPORT            = NO

# For Microsoft's IDL there are propget and propput attributes to indicate getter
# and setter methods for a property. Setting this option to YES (the default)
# will make doxygen replace the get and set methods by a property in the
# documentation. This will only work if the methods are indeed getting or
# setting a simple type. If this is not the case, or you want to show the
# methods anyway, you should set this option to NO.

IDL_PROPERTY_SUPPORT   = YES

# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.

DISTRIBUTE_GROUP_DOC   = NO

# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
# the same type (for instance a group of public functions) to be put as a
# subgroup of that type (e.g. under the Public Functions section). Set it to
# NO to prevent subgrouping. Alternatively, this can be done per class using
# the \nosubgrouping command.

SUBGROUPING            = YES

# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
# unions are shown inside the group in which they are included (e.g. using
# @ingroup) instead of on a separate page (for HTML and Man pages) or
# section (for LaTeX and RTF).

INLINE_GROUPED_CLASSES = NO

# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
# is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically
# be useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.

TYPEDEF_HIDES_STRUCT   = NO

# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
# determine which symbols to keep in memory and which to flush to disk.
# When the cache is full, less often used symbols will be written to disk.
# For small to medium size projects (<1000 input files) the default value is
# probably good enough. For larger projects a too small cache size can cause
# doxygen to be busy swapping symbols to and from disk most of the time
# causing a significant performance penalty.
# If the system has enough physical memory increasing the cache will improve the
# performance by keeping more symbols in memory. Note that the value works on
# a logarithmic scale so increasing the size by one will roughly double the
# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
# corresponding to a cache size of 2^16 = 65536 symbols

SYMBOL_CACHE_SIZE      = 0

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES

EXTRACT_ALL            = NO

# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.

EXTRACT_PRIVATE        = NO

# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.

EXTRACT_STATIC         = YES

# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.

EXTRACT_LOCAL_CLASSES  = YES

# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.

EXTRACT_LOCAL_METHODS  = NO

# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
# anonymous namespaces are hidden.

EXTRACT_ANON_NSPACES   = NO

# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.

HIDE_UNDOC_MEMBERS     = NO

# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.

HIDE_UNDOC_CLASSES     = NO

# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
# If set to NO (the default) these declarations will be included in the
# documentation.

HIDE_FRIEND_COMPOUNDS  = NO

# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
# documentation blocks found inside the body of a function.
# If set to NO (the default) these blocks will be appended to the
# function's detailed documentation block.

HIDE_IN_BODY_DOCS      = NO

# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation.

INTERNAL_DOCS          = NO

# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.

CASE_SENSE_NAMES       = YES

# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.

HIDE_SCOPE_NAMES       = NO

# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
# will put a list of the files that are included by a file in the documentation
# of that file.

SHOW_INCLUDE_FILES     = YES

# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
# will list include files with double quotes in the documentation
# rather than with sharp brackets.

FORCE_LOCAL_INCLUDES   = NO

# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.

INLINE_INFO            = YES

# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
# will sort the (detailed) documentation of file and class members
# alphabetically by member name. If set to NO the members will appear in
# declaration order.

SORT_MEMBER_DOCS       = YES

# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
# brief documentation of file, namespace and class members alphabetically
# by member name. If set to NO (the default) the members will appear in
# declaration order.

SORT_BRIEF_DOCS        = NO

# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
# will sort the (brief and detailed) documentation of class members so that
# constructors and destructors are listed first. If set to NO (the default)
# the constructors will appear in the respective orders defined by
# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.

SORT_MEMBERS_CTORS_1ST = NO

# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
# hierarchy of group names into alphabetical order. If set to NO (the default)
# the group names will appear in their defined order.

SORT_GROUP_NAMES       = NO

# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
# sorted by fully-qualified names, including namespaces. If set to
# NO (the default), the class list will be sorted only by class name,
# not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the
# alphabetical list.

SORT_BY_SCOPE_NAME     = NO

# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
# do proper type resolution of all parameters of a function it will reject a
# match between the prototype and the implementation of a member function even
# if there is only one candidate or it is obvious which candidate to choose
# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
# will still accept a match between prototype and implementation in such cases.

STRICT_PROTO_MATCHING  = NO

# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.

GENERATE_TODOLIST      = YES

# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.

GENERATE_TESTLIST      = YES

# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.

GENERATE_BUGLIST       = YES

# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# disable (NO) the deprecated list. This list is created by putting
# \deprecated commands in the documentation.

GENERATE_DEPRECATEDLIST= YES

# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.

ENABLED_SECTIONS       =

# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or macro consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and macros in the
# documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting.

MAX_INITIALIZER_LINES  = 30

# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.

SHOW_USED_FILES        = YES

# If the sources in your project are distributed over multiple directories
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
# in the documentation. The default is NO.

SHOW_DIRECTORIES       = NO

# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.

SHOW_FILES             = YES

# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
# Namespaces page.
# This will remove the Namespaces entry from the Quick Index
# and from the Folder Tree View (if specified). The default is YES.

SHOW_NAMESPACES        = YES

# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command <command> <input-file>, where <command> is the value of
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
# provided by doxygen. Whatever the program writes to standard output
# is used as the file version. See the manual for examples.

FILE_VERSION_FILTER    =

# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. The create the layout file
# that represents doxygen's defaults, run doxygen with the -l option.
# You can optionally specify a file name after the option, if omitted
# DoxygenLayout.xml will be used as the name of the layout file.

LAYOUT_FILE            =

#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------

# The QUIET tag can be used to turn on/off the messages that are generated
# by doxygen. Possible values are YES and NO. If left blank NO is used.

QUIET                  = NO

# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated by doxygen. Possible values are YES and NO. If left blank
# NO is used.

WARNINGS               = YES

# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
# automatically be disabled.

WARN_IF_UNDOCUMENTED   = YES

# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some
# parameters in a documented function, or documenting parameters that
# don't exist or using markup commands wrongly.

WARN_IF_DOC_ERROR      = YES

# The WARN_NO_PARAMDOC option can be enabled to get warnings for
# functions that are documented, but have no documentation for their parameters
# or return value. If set to NO (the default) doxygen will only warn about
# wrong or incomplete parameter documentation, but not about the absence of
# documentation.

WARN_NO_PARAMDOC       = NO

# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# warning originated and the warning text. Optionally the format may contain
# $version, which will be replaced by the version of the file (if it could
# be obtained via FILE_VERSION_FILTER)

WARN_FORMAT            = "$file:$line: $text"

# The WARN_LOGFILE tag can be used to specify a file to which warning
# and error messages should be written. If left blank the output is written
# to stderr.

WARN_LOGFILE           =

#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------

# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.

INPUT                  = include src

# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# also the default input encoding. Doxygen uses libiconv (or the iconv built
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
# the list of possible encodings.

INPUT_ENCODING         = UTF-8

# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
# *.f90 *.f *.for *.vhd *.vhdl

FILE_PATTERNS          =

# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.

RECURSIVE              = YES

# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.

EXCLUDE                =

# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.

EXCLUDE_SYMLINKS       = NO

# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories. Note that the wildcards are matched
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*

EXCLUDE_PATTERNS       =

# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test

EXCLUDE_SYMBOLS        =

# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).

EXAMPLE_PATH           =

# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.

EXAMPLE_PATTERNS       =

# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude
# commands irrespective of the value of the RECURSIVE tag.
# Possible values are YES and NO. If left blank NO is used.

EXAMPLE_RECURSIVE      = NO

# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).

IMAGE_PATH             = images/

# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
# to standard output.
# If FILTER_PATTERNS is specified, this tag will be
# ignored.

INPUT_FILTER           =

# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis.
# Doxygen will compare the file name with each pattern and apply the
# filter if there is a match.
# The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
# info on how filters are used. If FILTER_PATTERNS is empty or if
# non of the patterns match the file name, INPUT_FILTER is applied.

FILTER_PATTERNS        =

# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).

FILTER_SOURCE_FILES    = NO

# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
# and it is also possible to disable source filtering for a specific pattern
# using *.ext= (so without naming a filter). This option only has effect when
# FILTER_SOURCE_FILES is enabled.

FILTER_SOURCE_PATTERNS =

#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------

# If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources.
# Note: To get rid of all source code in the generated output, make sure also
# VERBATIM_HEADERS is set to NO.

SOURCE_BROWSER         = NO

# Setting the INLINE_SOURCES tag to YES will include the body
# of functions and classes directly in the documentation.

INLINE_SOURCES         = NO

# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.

STRIP_CODE_COMMENTS    = YES

# If the REFERENCED_BY_RELATION tag is set to YES
# then for each documented function all documented
# functions referencing it will be listed.

REFERENCED_BY_RELATION = YES

# If the REFERENCES_RELATION tag is set to YES
# then for each documented function all documented entities
# called/used by that function will be listed.

REFERENCES_RELATION    = YES

# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
# link to the source code.
# Otherwise they will link to the documentation.

REFERENCES_LINK_SOURCE = YES

# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
# tagging system (see http://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.

USE_HTAGS              = NO

# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.

VERBATIM_HEADERS       = YES

#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
# of all compounds will be generated. Enable this if the project
# contains a lot of classes, structs, unions or interfaces.

ALPHABETICAL_INDEX     = NO

# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
# in which this list will be split (can be a number in the range [1..20])

COLS_IN_ALPHA_INDEX    = 5

# In case all classes in a project start with a common prefix, all
# classes will be put under the same header in the alphabetical index.
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.

IGNORE_PREFIX          =

#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------

# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
# generate HTML output.

GENERATE_HTML          = YES

# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.

HTML_OUTPUT            = html

# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
# doxygen will generate files with .html extension.

HTML_FILE_EXTENSION    = .html

# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# standard header. Note that when using a custom header you are responsible
# for the proper inclusion of any scripts and style sheets that doxygen
# needs, which is dependent on the configuration options used.
# It is adviced to generate a default header using "doxygen -w html
# header.html footer.html stylesheet.css YourConfigFile" and then modify
# that header. Note that the header is subject to change so you typically
# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW!

HTML_HEADER            =

# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.

HTML_FOOTER            =

# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!

HTML_STYLESHEET        =

# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that
# the files will be copied as-is; there are no commands or markers available.

HTML_EXTRA_FILES       =

# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the stylesheet and background images
# according to this color. Hue is specified as an angle on a colorwheel,
# see http://en.wikipedia.org/wiki/Hue for more information.
# For instance the value 0 represents red, 60 is yellow, 120 is green,
# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
# The allowed range is 0 to 359.

HTML_COLORSTYLE_HUE    = 220

# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
# the colors in the HTML output. For a value of 0 the output will use
# grayscales only. A value of 255 will produce the most vivid colors.

HTML_COLORSTYLE_SAT    = 100

# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
# the luminance component of the colors in the HTML output. Values below
# 100 gradually make the output lighter, whereas values above 100 make
# the output darker. The value divided by 100 is the actual gamma applied,
# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
# and 100 does not change the gamma.

HTML_COLORSTYLE_GAMMA  = 80

# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting
# this to NO can help when comparing the output of multiple runs.

HTML_TIMESTAMP         = YES

# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.

HTML_ALIGN_MEMBERS     = YES

# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded. For this to work a browser that supports
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).

HTML_DYNAMIC_SECTIONS  = NO

# If the GENERATE_DOCSET tag is set to YES, additional index files
# will be generated that can be used as input for Apple's Xcode 3
# integrated development environment, introduced with OSX 10.5 (Leopard).
# To create a documentation set, doxygen will generate a Makefile in the
# HTML output directory. Running make will produce the docset in that
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.

GENERATE_DOCSET        = NO

# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
# feed. A documentation feed provides an umbrella under which multiple
# documentation sets from a single provider (such as a company or product suite)
# can be grouped.

DOCSET_FEEDNAME        = "Doxygen generated docs"

# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
# should uniquely identify the documentation set bundle. This should be a
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
# will append .docset to the name.

DOCSET_BUNDLE_ID       = org.doxygen.Project

# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.

DOCSET_PUBLISHER_ID    = org.doxygen.Publisher

# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.

DOCSET_PUBLISHER_NAME  = Publisher

# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
# of the generated HTML documentation.

GENERATE_HTMLHELP      = NO

# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output directory.

CHM_FILE               =

# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
# the HTML help compiler on the generated index.hhp.

HHC_LOCATION           =

# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO).

GENERATE_CHI           = NO

# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
# content.

CHM_INDEX_ENCODING     =

# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
# controls whether a binary table of contents is generated (YES) or a
# normal table of contents (NO) in the .chm file.

BINARY_TOC             = NO

# The TOC_EXPAND flag can be set to YES to add extra items for group members
# to the contents of the HTML help documentation and to the tree view.

TOC_EXPAND             = NO

# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
# that can be used as input for Qt's qhelpgenerator to generate a
# Qt Compressed Help (.qch) of the generated HTML documentation.

GENERATE_QHP           = NO

# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
# be used to specify the file name of the resulting .qch file.
# The path specified is relative to the HTML output folder.

QCH_FILE               =

# The QHP_NAMESPACE tag specifies the namespace to use when generating
# Qt Help Project output. For more information please see
# http://doc.trolltech.com/qthelpproject.html#namespace

QHP_NAMESPACE          = org.doxygen.Project

# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
# Qt Help Project output. For more information please see
# http://doc.trolltech.com/qthelpproject.html#virtual-folders

QHP_VIRTUAL_FOLDER     = doc

# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
# add. For more information please see
# http://doc.trolltech.com/qthelpproject.html#custom-filters

QHP_CUST_FILTER_NAME   =

# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
# Qt Help Project / Custom Filters</a>.

QHP_CUST_FILTER_ATTRS  =

# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's
# filter section matches.
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
# Qt Help Project / Filter Attributes</a>.

QHP_SECT_FILTER_ATTRS  =

# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
# be used to specify the location of Qt's qhelpgenerator.
# If non-empty doxygen will try to run qhelpgenerator on the generated
# .qhp file.

QHG_LOCATION           =

# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
#  will be generated, which together with the HTML files, form an Eclipse help
# plugin. To install this plugin and make it available under the help contents
# menu in Eclipse, the contents of the directory containing the HTML and XML
# files needs to be copied into the plugins directory of eclipse. The name of
# the directory within the plugins directory should be the same as
# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
# the help appears.

GENERATE_ECLIPSEHELP   = NO

# A unique identifier for the eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have
# this name.

ECLIPSE_DOC_ID         = org.doxygen.Project

# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
# top of each HTML page. The value NO (the default) enables the index and
# the value YES disables it.

DISABLE_INDEX          = NO

# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
# (range [0,1..20]) that doxygen will group on one line in the generated HTML
# documentation. Note that a value of 0 will completely suppress the enum
# values from appearing in the overview section.

ENUM_VALUES_PER_LINE   = 4

# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information.
# If the tag value is set to YES, a side panel will be generated
# containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
# Windows users are probably better off using the HTML help feature.

GENERATE_TREEVIEW      = YES

# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
# and Class Hierarchy pages using a tree view instead of an ordered list.

USE_INLINE_TREES       = NO

# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
# used to set the initial width (in pixels) of the frame in which the tree
# is shown.

TREEVIEW_WIDTH         = 250

# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
# links to external symbols imported via tag files in a separate window.

EXT_LINKS_IN_WINDOW    = NO

# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
# when you change the font size after a successful doxygen run you need
# to manually remove any form_*.png images from the HTML output directory
# to force them to be regenerated.

FORMULA_FONTSIZE       = 10

# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are
# not supported properly for IE 6.0, but are supported on all modern browsers.
# Note that when changing this option you need to delete any form_*.png files
# in the HTML output before the changes have effect.

FORMULA_TRANSPARENT    = YES

# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
# (see http://www.mathjax.org) which uses client side Javascript for the
# rendering instead of using prerendered bitmaps. Use this if you do not
# have LaTeX installed or if you want to formulas look prettier in the HTML
# output. When enabled you also need to install MathJax separately and
# configure the path to it using the MATHJAX_RELPATH option.

USE_MATHJAX            = NO

# When MathJax is enabled you need to specify the location relative to the
# HTML output directory using the MATHJAX_RELPATH option. The destination
# directory should contain the MathJax.js script. For instance, if the mathjax
# directory is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the
# mathjax.org site, so you can quickly see the result without installing
# MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment.

MATHJAX_RELPATH        = http://www.mathjax.org/mathjax

# When the SEARCHENGINE tag is enabled doxygen will generate a search box
# for the HTML output. The underlying search engine uses javascript
# and DHTML and should work on any modern browser. Note that when using
# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
# (GENERATE_DOCSET) there is already a search function so this one should
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.

SEARCHENGINE           = NO

# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a PHP enabled web server instead of at the web client
# using Javascript. Doxygen will generate the search PHP script and index
# file to put on the web server. The advantage of the server
# based approach is that it scales better to large projects and allows
# full text search. The disadvantages are that it is more difficult to setup
# and does not have live searching capabilities.

SERVER_BASED_SEARCH    = NO

#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------

# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
# generate Latex output.

GENERATE_LATEX         = YES

# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `latex' will be used as the default path.

LATEX_OUTPUT           = latex

# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. If left blank `latex' will be used as the default command name.
# Note that when enabling USE_PDFLATEX this option is only used for
# generating bitmaps for formulas in the HTML output, but not in the
# Makefile that is written to the output directory.

LATEX_CMD_NAME         = latex

# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
# generate index for LaTeX. If left blank `makeindex' will be used as the
# default command name.

MAKEINDEX_CMD_NAME     = makeindex

# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
# LaTeX documents. This may be useful for small projects and may help to
# save some trees in general.

COMPACT_LATEX          = NO

# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, letter, legal and
# executive. If left blank a4wide will be used.

PAPER_TYPE             = a4wide

# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
# packages that should be included in the LaTeX output.

EXTRA_PACKAGES         =

# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!

LATEX_HEADER           =

# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
# the generated latex document. The footer should contain everything after
# the last chapter. If it is left blank doxygen will generate a
# standard footer. Notice: only use this tag if you know what you are doing!

LATEX_FOOTER           =

# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references
# This makes the output suitable for online browsing using a pdf viewer.

PDF_HYPERLINKS         = NO

# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
# plain latex in the generated Makefile. Set this option to YES to get a
# higher quality PDF documentation.

USE_PDFLATEX           = NO

# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
# command to the generated LaTeX files. This will instruct LaTeX to keep
# running if errors occur, instead of asking the user for help.
# This option is also used when generating formulas in HTML.

LATEX_BATCHMODE        = NO

# If LATEX_HIDE_INDICES is set to YES then doxygen will not
# include the index chapters (such as File Index, Compound Index, etc.)
# in the output.

LATEX_HIDE_INDICES     = NO

# If LATEX_SOURCE_CODE is set to YES then doxygen will include
# source code with syntax highlighting in the LaTeX output.
# Note that which sources are shown also depends on other settings
# such as SOURCE_BROWSER.

LATEX_SOURCE_CODE      = NO

#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------

# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimized for Word 97 and may not look very pretty with
# other RTF readers or editors.

GENERATE_RTF           = NO

# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `rtf' will be used as the default path.

RTF_OUTPUT             = rtf

# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
# RTF documents. This may be useful for small projects and may help to
# save some trees in general.

COMPACT_RTF            = NO

# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
# will contain hyperlink fields. The RTF file will
# contain links (just like the HTML output) instead of page references.
# This makes the output suitable for online browsing using WORD or other
# programs which support those fields.
# Note: wordpad (write) and others do not support links.

RTF_HYPERLINKS         = NO

# Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.

RTF_STYLESHEET_FILE    =

# Set optional variables used in the generation of an rtf document.
# Syntax is similar to doxygen's config file.

RTF_EXTENSIONS_FILE    =

#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------

# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
# generate man pages

GENERATE_MAN           = NO

# The MAN_OUTPUT tag is used to specify where the man pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `man' will be used as the default path.

MAN_OUTPUT             = man

# The MAN_EXTENSION tag determines the extension that is added to
# the generated man pages (default is the subroutine's section .3)

MAN_EXTENSION          = .3

# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
# then it will generate one additional man file for each entity
# documented in the real man page(s). These additional files
# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.

MAN_LINKS              = NO

#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------

# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
# the code including all documentation.

GENERATE_XML           = NO

# The XML_OUTPUT tag is used to specify where the XML pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `xml' will be used as the default path.

XML_OUTPUT             = xml

# The XML_SCHEMA tag can be used to specify an XML schema,
# which can be used by a validating XML parser to check the
# syntax of the XML files.

XML_SCHEMA             =

# The XML_DTD tag can be used to specify an XML DTD,
# which can be used by a validating XML parser to check the
# syntax of the XML files.

XML_DTD                =

# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
# enabling this will significantly increase the size of the XML output.

XML_PROGRAMLISTING     = YES

#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------

# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
# generate an AutoGen Definitions (see autogen.sf.net) file
# that captures the structure of the code including all
# documentation. Note that this feature is still experimental
# and incomplete at the moment.

GENERATE_AUTOGEN_DEF   = NO

#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------

# If the GENERATE_PERLMOD tag is set to YES Doxygen will
# generate a Perl module file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.

GENERATE_PERLMOD       = NO

# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
# the necessary Makefile rules, Perl scripts and LaTeX code to be able
# to generate PDF and DVI output from the Perl module output.

PERLMOD_LATEX          = NO

# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
# nicely formatted so it can be parsed by a human reader.
# This is useful
# if you want to understand what is going on.
# On the other hand, if this
# tag is set to NO the size of the Perl module output will be much smaller
# and Perl will parse it just the same.

PERLMOD_PRETTY         = YES

# The names of the make variables in the generated doxyrules.make file
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
# This is useful so different doxyrules.make files included by the same
# Makefile don't overwrite each other's variables.

PERLMOD_MAKEVAR_PREFIX =

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
# evaluate all C-preprocessor directives found in the sources and include
# files.

ENABLE_PREPROCESSING   = NO

# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
# names in the source code. If set to NO (the default) only conditional
# compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES.

MACRO_EXPANSION        = NO

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# PREDEFINED and EXPAND_AS_DEFINED tags.

EXPAND_ONLY_PREDEF     = NO

# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
# pointed to by INCLUDE_PATH will be searched when a #include is found.

SEARCH_INCLUDES        = YES

# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by
# the preprocessor.

INCLUDE_PATH           =

# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will
# be used.

INCLUDE_FILE_PATTERNS  =

# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed. To prevent a macro definition from being
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.

PREDEFINED             =

# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition that
# overrules the definition found in the source code.

EXPAND_AS_DEFINED      =

# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all references to function-like macros
# that are alone on a line, have an all uppercase name, and do not end with a
# semicolon, because these will confuse the parser if not removed.

SKIP_FUNCTION_MACROS   = YES

#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------

# The TAGFILES option can be used to specify one or more tagfiles.
# Optionally an initial location of the external documentation
# can be added for each tagfile. The format of a tag file without
# this location is as follows:
#
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
#
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where "loc1" and "loc2" can be relative or absolute paths or
# URLs. If a location is present for each tag, the installdox tool
# does not have to be run to correct the links.
# Note that each tag file must have a unique name
# (where the name does NOT include the path)
# If a tag file is not located in the directory in which doxygen
# is run, you must also specify the path to the tagfile here.

TAGFILES               =

# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.

GENERATE_TAGFILE       =

# If the ALLEXTERNALS tag is set to YES all external classes will be listed
# in the class index. If set to NO only the inherited external classes
# will be listed.

ALLEXTERNALS           = NO

# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will
# be listed.

EXTERNAL_GROUPS        = YES

# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of `which perl').

PERL_PATH              = /usr/bin/perl

#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------

# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
# or super classes. Setting the tag to NO turns the diagrams off. Note that
# this option also works with HAVE_DOT disabled, but it is recommended to
# install and use dot, since it yields more powerful graphs.

CLASS_DIAGRAMS         = YES

# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.

MSCGEN_PATH            =

# If set to YES, the inheritance and collaboration graphs will hide
# inheritance and usage relations if the target is undocumented
# or is not a class.

HIDE_UNDOC_RELATIONS   = YES

# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)

HAVE_DOT               = NO

# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
# allowed to run in parallel. When set to 0 (the default) doxygen will
# base this on the number of processors available in the system. You can set it
# explicitly to a value larger than 0 to get control over the balance
# between CPU load and processing speed.

DOT_NUM_THREADS        = 0

# By default doxygen will write a font called Helvetica to the output
# directory and reference it in all dot files that doxygen generates.
# When you want a differently looking font you can specify the font name
# using DOT_FONTNAME. You need to make sure dot is able to find the font,
# which can be done by putting it in a standard location or by setting the
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
# containing the font.

DOT_FONTNAME           = Helvetica

# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
# The default size is 10pt.

DOT_FONTSIZE           = 10

# By default doxygen will tell dot to use the output directory to look for the
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
# different font using DOT_FONTNAME you can set the path where dot
# can find it using this tag.

DOT_FONTPATH           =

# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
# the CLASS_DIAGRAMS tag to NO.

CLASS_GRAPH            = YES

# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect implementation dependencies (inheritance, containment, and
# class references variables) of the class with other documented classes.

COLLABORATION_GRAPH    = YES

# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for groups, showing the direct groups dependencies

GROUP_GRAPHS           = YES

# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.

UML_LOOK               = NO

# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.

TEMPLATE_RELATIONS     = NO

# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
# file showing the direct and indirect include dependencies of the file with
# other documented files.

INCLUDE_GRAPH          = YES

# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
# documented header file showing the documented files that directly or
# indirectly include this file.

INCLUDED_BY_GRAPH      = YES

# If the CALL_GRAPH and HAVE_DOT options are set to YES then
# doxygen will generate a call dependency graph for every global function
# or class method. Note that enabling this option will significantly increase
# the time of a run. So in most cases it will be better to enable call graphs
# for selected functions only using the \callgraph command.

CALL_GRAPH             = NO

# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
# doxygen will generate a caller dependency graph for every global function
# or class method. Note that enabling this option will significantly increase
# the time of a run. So in most cases it will be better to enable caller
# graphs for selected functions only using the \callergraph command.

CALLER_GRAPH           = NO

# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will generate a graphical hierarchy of all classes instead of a textual one.

GRAPHICAL_HIERARCHY    = YES

# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
# then doxygen will show the dependencies a directory has on other directories
# in a graphical way. The dependency relations are determined by the #include
# relations between the files in the directories.

DIRECTORY_GRAPH        = YES

# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are svg, png, jpg, or gif.
# If left blank png will be used.

DOT_IMAGE_FORMAT       = png

# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.

DOT_PATH               = /usr/bin/dot

# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the
# \dotfile command).

DOTFILE_DIRS           =

# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the
# \mscfile command).

MSCFILE_DIRS           =

# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
# nodes that will be shown in the graph. If the number of nodes in a graph
# becomes larger than this value, doxygen will truncate the graph, which is
# visualized by representing a node as a red box. Note that doxygen if the
# number of direct children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.

DOT_GRAPH_MAX_NODES    = 50

# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
# graphs generated by dot. A depth value of 3 means that only nodes reachable
# from the root by following a path via at most 3 edges will be shown. Nodes
# that lay further from the root node will be omitted. Note that setting this
# option to 1 or 2 may greatly reduce the computation time needed for large
# code bases. Also note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.

MAX_DOT_GRAPH_DEPTH    = 0

# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not
# seem to support this out of the box. Warning: Depending on the platform used,
# enabling this option may lead to badly anti-aliased labels on the edges of
# a graph (i.e. they become hard to read).

DOT_TRANSPARENT        = NO

# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10)
# support this, this feature is disabled by default.

DOT_MULTI_TARGETS      = NO

# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.

GENERATE_LEGEND        = YES

# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
# remove the intermediate dot files that are used to generate
# the various graphs.

DOT_CLEANUP            = YES


================================================
FILE: Makefile.am
================================================
AUTOMAKE_OPTIONS = foreign dist-bzip2 1.6
ACLOCAL_AMFLAGS = -I m4

INCLUDES = $(all_includes) -I$(top_srcdir)/include
SUBDIRS = include src

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = librtlsdr.pc

BUILT_SOURCES = $(top_srcdir)/.version
$(top_srcdir)/.version:
	echo $(VERSION) > $@-t && mv $@-t $@
dist-hook:
	echo $(VERSION) > $(distdir)/.tarball-version

install-udev-rules:
	$(INSTALL_DATA) rtl-sdr.rules /etc/udev/rules.d

uninstall-udev-rules:
	rm -rf /etc/udev/rules.d/rtl-sdr.rules

EXTRA_DIST = git-version-gen .version

if HAVE_DOXYGEN

pkgdocdir=$(docdir)/$(PACKAGE)-$(VERSION)
doc_htmldir=$(pkgdocdir)/html

doc_html_DATA = $(top_builddir)/doc/html.tar

$(doc_html_DATA): $(top_builddir)/doc/html/index.html
	cd $(top_builddir)/doc && tar cf html.tar html

$(top_builddir)/doc/html/index.html: $(SOURCES) Doxyfile
	@rm -rf doc
	mkdir -p doc
	$(DOXYGEN) Doxyfile

install-data-hook:
	cd $(DESTDIR)$(doc_htmldir) && tar xf html.tar --strip-components 1 && rm -f html.tar

uninstall-hook:
	rm -rf $(DESTDIR)/$(doc_htmldir)

DX_CLEAN = doc/{html,latex}/* doc/html.tar

endif

MOSTLYCLEANFILES = $(DX_CLEAN)


================================================
FILE: README.md
================================================
[![librtlsdr version](https://img.shields.io/github/tag/librtlsdr/librtlsdr.svg?style=flat&label=librtlsdr)](https://github.com/librtlsdr/librtlsdr/releases)
[![GPLv2 License](http://img.shields.io/badge/license-GPLv2-brightgreen.svg)](https://tldrlegal.com/license/gnu-general-public-license-v2)

# Description

rtl-sdr turns your Realtek RTL2832 based DVB dongle into a SDR receiver


# New enhancements and features in this version

Many different developments have been taken in this release. For an overview, see [improvements](README_improvements.md)

# Build / Install (on debian/ubuntu)

## prerequisites
development tools have to be installed:
```
sudo apt-get install build-essential cmake git
```

install the libusb-1.0 development package::
```
sudo apt-get install libusb-dev libusb-1.0-0-dev
```

## retrieve the sources - right branch

```
git clone https://github.com/librtlsdr/librtlsdr.git
```

in case you want the *development* branch, e.g. for testing or preparing patches:
```
cd librtlsdr
git checkout development
```

by default, you should have the *master* branch, in doubt:
```
cd librtlsdr
git status
git checkout master
```

## build
run cmake and start compilation. cmake will accept some options, e.g.
* `-DINSTALL_UDEV_RULES=ON`, default is `OFF`
* `-DDETACH_KERNEL_DRIVER=ON`, default is `OFF`
* `-DPROVIDE_UDP_SERVER=ON`, default is `OFF`
* `-DWITH_RPC=ON`, default is `OFF`
* `-DLINK_RTLTOOLS_AGAINST_STATIC_LIB=ON`, default is `OFF`
* `-DRTL_STATIC_BUILD=OFF`, default is `ON`: for MINGW on WIN32

all cmake options are optional

```
mkdir build && cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
```

## install
setup into prefix, usually will require `sudo`:
```
sudo make install
sudo ldconfig
```

# Development builds / binaries

[GitHub Actions](https://github.com/librtlsdr/librtlsdr/actions) is used for development builds - for Linux (x86), MacOS and Windows x86 32/64.
Cross-builds for Windows from a Linux machine: see [cross_build_mingw32.sh](cross_build_mingw32.sh) or [cross_build_mingw64.sh](cross_build_mingw64.sh)

# For more information see:

http://superkuh.com/rtlsdr.html

https://osmocom.org/projects/rtl-sdr/wiki/Rtl-sdr


# Setup for SDR only use - without DVB compatibility:

- a special USB vendor/product id got reserved at http://pid.codes/ : 0x1209/0x2832
- for such devices the linux kernel's DVB modules are not loaded automatically,
 thus can be used without blacklisting *dvb_usb_rtl28xxu* below /etc/modprobe.d/
- this allows to use a second RTL dongle for use with DVB in parallel
- the IDs can be programmed with '`rtl_eeprom -n`' or '`rtl_eeprom -g realtek_sdr`'
- for permanent blacklisting you might check/call following from the clone git directory
    ```./install-blacklist.sh```


# Contributing

Pull requests are always welcome but please make changes to, and pull request from, the development branch.

## Initial setup:

- fork the librtlsdr repo via GitHub
- clone your fork locally and cd to the cloned repo's folder
- add the upstream development repo:
    * `git remote add upstream git@github.com:librtlsdr/librtlsdr.git`
- track the development branch: 
    * `git branch --track development origin/development`

## Normal workflow:

- checkout the development branch and make your changes
- commit your changes
- sync your local development branch with the upstream development branch:
    * `git fetch upstream`
    * `git merge upstream/development`
- push your commit/s to your forked repo
- do a pull request via GitHub


================================================
FILE: README.rtlfm_cmdfile
================================================

rtl_fm now has option '-C' for a command file, from which a list of frequencies are read.
So it's similar to using a frequency range, as with "-f 118M:137M:25k"
The difference is, that you can parametrize one frequency per line together with
- the tuner gain
- condition for triggering
- measurement duration
and a command to execute.
Lines starting with '#' are skipped / interpreted as comments.
Parameters a seperated by comma.

Here's an example:
---
# freq in Hz or special keyword, gain in dB, trig_crit (in/out/lt/gt), trig_level, trig_tolerance, #meas, #blocks, trigger_command
# windows: rtl_fm -f 105.2m -E rdc -w 350k -s 200k -m 2.2m      -B 200000 -C cmdfile.csv -n -v
#          rtl_fm -f 105.2m -E rdc -w 350k -s 200k -m 2.2m -W 4 -B 10000  -C cmdfile.csv -n -v
# linux: ./rtl_fm -f 105.2m -E rdc -w 350k -s 200k -m 2.2m -B 200000 -C cmdfile.csv -n -v
#
# windows command examples:
# cmd.exe, /C echo hello world
# cmd.exe, /C start notepad
# calc.exe
#
# linux examples:
# ssmtp
# sendxmpp
## for piping some message to ssmtp or sendxmpp you'll need to write small scripts

# 'adcmax' keyword in first column activates measurement of max adc value at capture rate to determine optimum gain and avoid oversteering
# 'adcrms' keyword activates rms calculation at capture rate. for usual it's similar to adcmax. there are differences in case of oversteering
#   activate verbose output (option '-v') to get the output. The maximum possible sample value is 128.
#   You should have approx. 6 dB headroom to allow measuring stronger signals, that means measured baseline values should be below 64.
#   An the other side you'll want to measure weaker signals, so the measured baseline value should be above a minimum of approx 8 or 16.
adcmax,
adcrms,
100.7m, 30, in, 0, 1, 10, 100,
33.0m, 20,out,60, 3, 10, 400, /home/odroid/test/simple.sh, frq !freq! gain !gain! measured !mlevel! tenth dB !crit! { !reflevel! +/- !reftol! tenth dB }
# now check for optimal gain in some steps, which should be done per frequency!:
100.7m, 0, gt, 400, 1, 1, 100,
100.7m, 3, gt, 400, 1, 1, 100,
100.7m, 6, gt, 400, 1, 1, 100,
100.7m, 12, gt, 400, 1, 1, 100,
100.7m, 18, gt, 400, 1, 1, 100,

---

* first frequency is 100.7 MHz, tuned with ~ 30 dB tuner gain;
condition is 'in' { 0 +/- 1 } dB,
with 10 measurements, averaging the rms level in dB.
Each single measurement is processed after decimation of block/buffer-size many samples (see option -W).
  The resulting number of decimated samples might get too small to allow a reliable measurement.
  This number also depends on the capture rate: ensure minimum capture rate with option '-m'. This is also important for reducing aliases.
  Check the output 'block length after decimation is ... samples'!
If condition for measured level is true, then a command can be triggered, which is executed in background.
Then, a next trigger for this frequency is blocked for 100 measurements.
There is nothing triggered for 100.7 MHz.

* 2nd frequency is 33.0 MHz, tuned with ~ 20 dB tuner gain;
condition is 'out' { 60 +/- 3 } dB,
with 10 measurements.
That means, the trigger is activated when averaged level is below 57 dB or above 63 dB.
Next trigger for this frequency is blocked for 400 measurements.
Triggered command is the shell script '/home/odroid/test/simple.sh',
with the arguments 'frq !freq! gain !gain! measured !mlevel! tenth dB !crit! { !reflevel! +/- !reftol! tenth dB }'.
You can use following keywords in the arguments, which need to be free standing!:
- !freq!
current frequency in Hz

- !gain!
current tuner gain in tenth dB to allow easier evaluation from scripts.

- !mlevel!
average measured level in tenth dB

- !crit!
one of "in", "out", "<" or ">" for the tested condition

- !reflevel!
condition's reference level in tenth dB

- !reftol!
condition's reference tolerance in tenth dB


Application might be monitoring of some stations
and triggering a notification, e.g. via ssmtp or sendxmpp,
when a stations power level is below it's expected value.

Another application might be triggering a recording with a second RTL dongle.


Send comments, suggestions or reports to
Hayati Ayguen <h_ayguen@web.de>



================================================
FILE: README.rtlsdr_rpc
================================================
This implementation of librtlsdr makes remote dongles
appear to the local software as if they were on the
same computer. It works by forwarding librtlsdr calls
to the remote computer over TCP.

It allows one to use existing tools without modifying
them. Also, it allows a developer to use the same API
no matter weither the dongle is local or distant.

To use it, one must compile and install the library
with CMAKE the usual way. Note that you may need to
uninstall the existing librtlsdr, as people reported
runtime errors due to conflicting installs.

Then, a server (called rtl_rpcd) must be run on the
remote location.

In my case, the dongle is in a beagle bone black is
at address 192.168.0.43:
beagleboneblack #> ./rtl_rpcd

Then, the existing tool (for instance rtlizer) can be
run on the local computer using:
RTLSDR_RPC_IS_ENABLED=1 RTLSDR_RPC_SERV_ADDR=192.168.0.43 \
rtlizer

This implementation still has some limitations, but
works well in most cases. Please report any bug to
texane@gmail.com

Also, note that the latest version of libusb should be
used as librtlsdr crashed when used with older version
(esp. the rtlsdr_read_async routine):
https://github.com/libusb/libusb.git

list of known working software:
rtl_fm
rtl_power
rtlsdr-waterfall
rtlizer
gnuradio-companion
cubicsdr
gqrx
linrad


================================================
FILE: README_improvements.md
================================================

# improvements, compared to the osmocom sources


## versions

comparing osmocom's git git://git.osmocom.org/rtl-sdr.git dated from 2020-08-19
against librtlsdr's development branch (initially same date, but updated 2020-10-04)


## "Driver" Library Features

* added support for special USB (vendor) VID 0x1209 (product) PID 0x2832: "Generic RTL2832U":
  * A special USB vendor/product id got reserved at http://pid.codes/1209/2832/
  * for such devices the linux kernel's DVB modules are not loaded automatically, thus can be used without blacklisting dvb_usb_rtl28xxu below /etc/modprobe.d/
  * this allows to use a second RTL dongle for use with DVB in parallel
  * the IDs can be programmed with '`rtl_eeprom -n`' or '`rtl_eeprom -g realtek_sdr`'
  * see https://www.rtl-sdr.com/watching-dvb-t-tv-and-using-sdr-mode-at-the-same-time-with-two-rtl-sdrs/

* added support for using RTLSDR-Dongle from remote - see rtl_rpcd and [README.rtlsdr_rpc](README.rtlsdr_rpc)

* support for all GPIO pins of RTL2832 through API and rtl_biast

  * functions were provided from Marko Cebokli at http://lea.hamradio.si/~s57uuu/mischam/rtlsdr/ports.html

* improvements for R820T/2 tuner
  also see https://codingspirit.de/librtlsdr-driver.pdf
  several features from https://github.com/old-dab/rtlsdr/
  
  * added better bandwidth support
    * added smaller bandwidths, improving selectivity:
      290, 375, 420, 470, 600, 860, 950, 1100, 1200, 1300, 1500, 1600, 1750, 1800, 1950, 2200, 3000, 5000 kHz.
      These are coarse measured values .. which might get adjusted in future.
    * bandwidth filters utilize tuner's low- and highpass filters at IF
  * added spectrum flipping (inside tuner) - and back in RTL2832
    * the band edges (low/high-pass) have different steepness;
      the steeper edge can be selected with the mixer sideband (`rtlsdr_set_tuner_sideband()`),
      to achieve better attenuation depending on signal scenario
  * added (automatic) control over VGA (variable gain amplifier)
    * VGA gain (besides LNA and Mixer) can be utilized and set to automatic, letting it controlled from RTL2832U.
      Having all automatic (AGC) including activation of digital AGC in RTL2832 (`rtlsdr_set_agc_mode()`), oversteering effects got reduced (a lot).
    * total gain range now up to 100 dB
  * deactivated "Filter extension under weak signal" for a stable filter characteristic
  * added shifting of IF-center, to receive away from DC. see `rtlsdr_set_tuner_band_center()`

* harmonic reception for R820T/2 tuner:

  * allow reception for frequencies above ~ 1.76 GHz
  * tested in lab conditions up to 6.0 GHz
  * 5th harmonic is used automatically by default when direct reception is not possible (when tuner-PLL doesn't lock)
  * 3rd harmonic looks also promising. harmonic factor is parametrizable with passthrough driver option '**harm=**' to set n-th harmonic
  * reception in real world from antenna is very likely to require a suitable high pass or bandpass filter and an LNA in front of the RTLSDR dongle

* passthrough driver options:

  * all the rtlsdr tools below support option '**-O**' followed by a '**:**' separated string of specific options,
    which are passed to the library by calling `rtlsdr_set_opt_string()`.

  * process options from environment variable **LIBRTLSDR_OPT** for applications which don't support/use `rtlsdr_set_opt_string()` and don't support some of the features. 

  * there are many options, e.g.

    * **bw=** set the tuner bandwidth in kHz
    * **agc=** activate tuner AGC
    * **gain=** set tuner's gain value manually in tenth dB
    * **dagc=** set digital AGC of RTL2832
    * **t=** set bias tee for RTL-SDR V3 or compatible, see https://www.rtl-sdr.com/rtl-sdr-blog-v-3-dongles-user-guide/
    * **tp=** set pin for bias tee
    * **ds=** set direct sampling (HF mode) for RTL-SDR V3 or compatible, see https://www.rtl-sdr.com/rtl-sdr-blog-v-3-dongles-user-guide/
    * **dm=** set direct sampling mode

  * many of the options are R820T/2-tuner specific:

    * **bc=** set the the reception bands' center in Hz

    * **sb=** set tuner sideband

    * **ifm=** set IF mode (AGC, fixed gain, ..) for VGA (variable gain amplifier)

    * **harm=** set n-th harmonic reception

    * **vcocmin=** set minimum VCO current

    * **vcocmax=** set maximum VCO current

    * **vcoalgo=** set VCO algorithm

      

* probably some more: it's highly probable, that this list is incomplete


## "Driver" Library API

* added rtlsdr_set_and_get_tuner_bandwidth(), which also delivers the bandwidth.
 [ with rtlsdr_set_tuner_bandwidth() does not deliver the bandwidth ]
* added rtlsdr_set_tuner_band_center(),  to set center of the filtered tuner band
* added rtlsdr_set_tuner_sideband(), to set mixer sideband
* added rtlsdr_set_tuner_gain_ext(), special for R820T/2 tuner
* added rtlsdr_set_tuner_if_mode(), sets AGC modes in detail
* added rtlsdr_set_dithering(), to allow disabling frequency dithering for R820T/2 tuner
* added rtlsdr_set_ds_mode() including threshold frequency
* added rtlsdr_ir_query()
* added rtlsdr_set_opt_string() and rtlsdr_get_opt_help()
 for configuration of 'driver' - especially from command line.
new alternative: environment variable **LIBRTLSDR_OPT**
* added rtlsdr_set_tuner_i2c_register(), rtlsdr_get_tuner_i2c_register()
 and rtlsdr_set_tuner_i2c_override()
 exposing hacking of tuner-specific I2C registers
* added rtlsdr_get_ver_id(),
 to allow discrimination between osmocom library - or this fork
* added rtlsdr_get_version()
* added rtlsdr_set_gpio_output(), rtlsdr_set_gpio_input(), rtlsdr_set_gpio_bit(), rtlsdr_get_gpio_bit(), rtlsdr_set_gpio_byte(), rtlsdr_get_gpio_byte() and rtlsdr_set_gpio_status()
* added rtlsdr_set_center_freq64(), to set frequencies above ~4.29 GHz, the 32-bit limit
* added rtlsdr_get_center_freq64()
* added rtlsdr_set_harmonic_rx() to activate/change harmonic reception


## Added Tools

* added rtl_ir:
 display received IR signals.
  * requires the IR diode of an RTL-SDR - which might not exist!

* added rtl_rpcd:
 a Remote Procedure Call server for RTL-SDR dongles.
  * for use, set environment variable "**RTLSDR_RPC_IS_ENABLED**"
  * optionally set environment varibales "**RTLSDR_RPC_SERV_ADDR**"
    and "**RTLSDR_RPC_SERV_PORT**". These default to "127.0.0.1" and "40000".
  * requires cmake option **WITH_RPC**

* added rtl_raw2wav:
 save rtl_sdr or rtl_fm's output (pipe) into a wave file,
 including some meta information like timestamp and frequency

* added rtl_udp:
 same as rtl_tcp - just using UDP instead of TCP

* added rtl_wavestat:
 display wave file meta information

* added rtl_wavestream:
 stream raw data (in specified format)


## Improved Tools

* rtl_fm:
  * added command file option '-C', which can trigger actions depending on signal.
    have a look at [README.rtlfm_cmdfile](README.rtlfm_cmdfile).
  * added command line interface option '-E rdc', to enable dc blocking on raw I/Q data at capture rate
  * added CLI option '-E rtlagc', to enable rtl2832's digital agc
  * added CLI option '-E bclo', to use tuner bandwidths low  corner as band center
  * added CLI option '-E bchi', to use tuner bandwidths high corner as band center
  * added CLI option '-O', to set RTL driver options separated with ':', e.g. -O 'bc=30000:agc=0'
  * added CLI option '-R', to specify number of seconds to run
  * added CLI option '-H', to write wave Header to file, producing a wave file with meta information,
    compatible with several SDR programs
  * added CLI option '-o', to request oversampling (4 recommended) for processing gain
* rtl_biast:
   * several options for reading/writing other GPIOs
* many tools have more options.
 compare all the details by starting with command line option '-h'.


## "Driver" Library's UDP-Server

* enabled by cmake option **PROVIDE_UDP_SERVER** for tests. OFF by default

* activated by rtlsdr_set_opt_string(): "**port=1**" or "**port=**<udp_port>",
 default port number: 32323
 
* purpose is to allow configuration at runtime with a simple text protocol, e.g. with netcat

* for detailed protocol, see comment section in parse() of librtlsdr.c.
 or look for sections with '#ifdef WITH_UDP_SERVER'
 
* this feature was copied and enhanced from https://sourceforge.net/projects/librtlsdr-wincontrol/ developed from [sourceforge user randaller](https://sourceforge.net/u/randaller/profile/), which in turn is an adaption of https://github.com/gat3way/r820tweak, which was developed by Milen Rangelov

* simple usage from command line, e.g. to retrieve help

   ```
   echo "h" | timeout 1 netcat -u 127.0.0.1 32323
   ```

   without `timeout`, press Ctrl+C
   the output is:

   ```
   g <register>                  # get content of I2C ..
   s <register> <value> [<mask>] # set conten
   S <register> <value> [<mask>] # set content - keeping value in future
   i <IFfrequency>  # set IF frequency [0 .. 28'800'000]
   f <RFfrequency>  # set center frequency
   b <bandwidth>    # set tuner bandwidth
   c <frequency>    # set tuner bw center in output [-1'600'000 .. 1'600'000]
   v <sideband>     # set tuner sideband: 0 for LSB, 1 for USB
   a <tunerIFmode>  # set VGA: 0 for auto; in tenth dB or 10000+idx
   m <tuner gain>   # set tuner gain
   M <gainMode>     # 0 .. 3: digital rtl agc (0..1) * 2 + tuner agc (0..1)
   ```



## RTL_TCP TCP-PROTOCOL

* allows non-GPL programs to utilize the RTLSDR stuff in a license compliant way

* added several control functions in rtl_tcp, not existing in osmocom release:
 UDP_ESTABLISH, UDP_TERMINATE, SET_I2C_TUNER_REGISTER, SET_I2C_TUNER_OVERRIDE,
 SET_TUNER_BW_IF_CENTER, SET_TUNER_IF_MODE, SET_SIDEBAND, REPORT_I2C_REGS, SET_FREQ_HI32

* control functions documented in rtl_tcp.h

* (by default) control port number 1234, configurable via command-line-interface (CLI)

* response(s) at +1 of control port: 1235, configurable via CLI

* protocol details in protocol_rtl_tcp.txt



================================================
FILE: cmake/Modules/FindLibUSB.cmake
================================================
if(NOT LIBUSB_FOUND)
  pkg_check_modules (LIBUSB_PKG libusb-1.0)
  find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h
    PATHS
    ${LIBUSB_PKG_INCLUDE_DIRS}
    /usr/include/libusb-1.0
    /usr/include
    /usr/local/include
  )

#standard library name for libusb-1.0
set(libusb1_library_names usb-1.0 libusb-1.0)

#libusb-1.0 compatible library on freebsd
if((CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") OR (CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD"))
    list(APPEND libusb1_library_names usb)
endif()

  find_library(LIBUSB_LIBRARIES
    NAMES ${libusb1_library_names}
    PATHS
    ${LIBUSB_PKG_LIBRARY_DIRS}
    /usr/lib
    /usr/local/lib
  )

include(CheckFunctionExists)
if(LIBUSB_INCLUDE_DIRS)
    set(CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIRS})
endif()
if(LIBUSB_LIBRARIES)
    set(CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES})
endif()

CHECK_FUNCTION_EXISTS("libusb_handle_events_timeout_completed" HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
if(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)
    add_definitions(-DHAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED=1)
endif(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED)

CHECK_FUNCTION_EXISTS("libusb_error_name" HAVE_LIBUSB_ERROR_NAME)
if(HAVE_LIBUSB_ERROR_NAME)
    add_definitions(-DHAVE_LIBUSB_ERROR_NAME=1)
endif(HAVE_LIBUSB_ERROR_NAME)

if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
  set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
  message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")
else(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
  set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found")
  message(STATUS "libusb-1.0 not found.")
endif(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)

mark_as_advanced(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES)

endif(NOT LIBUSB_FOUND)


================================================
FILE: cmake/Modules/FindThreads.cmake
================================================
# Updated FindThreads.cmake that supports pthread-win32
# Downloaded from http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=6399

# - This module determines the thread library of the system.
#
# The following variables are set
#  CMAKE_THREAD_LIBS_INIT     - the thread library
#  CMAKE_USE_SPROC_INIT       - are we using sproc?
#  CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads?
#  CMAKE_USE_PTHREADS_INIT    - are we using pthreads
#  CMAKE_HP_PTHREADS_INIT     - are we using hp pthreads
#
# If use of pthreads-win32 is desired, the following variables
# can be set.
#
#  THREADS_USE_PTHREADS_WIN32 -
#    Setting this to true searches for the pthreads-win32
#    port (since CMake 2.8.0)
#
#  THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME
#      C  = no exceptions (default)
#         (NOTE: This is the default scheme on most POSIX thread
#          implementations and what you should probably be using)
#      CE = C++ Exception Handling
#      SE = Structure Exception Handling (MSVC only)
#      (NOTE: Changing this option from the default may affect
#       the portability of your application.  See pthreads-win32
#       documentation for more details.)
#
#======================================================
# Example usage where threading library
# is provided by the system:
#
#   find_package(Threads REQUIRED)
#   add_executable(foo foo.cc)
#   target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT})
#
# Example usage if pthreads-win32 is desired on Windows
# or a system provided thread library:
#
#   set(THREADS_USE_PTHREADS_WIN32 true)
#   find_package(Threads REQUIRED)
#   include_directories(${THREADS_PTHREADS_INCLUDE_DIR})
#
#   add_executable(foo foo.cc)
#   target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT})
#

INCLUDE (CheckIncludeFiles)
INCLUDE (CheckLibraryExists)
SET(Threads_FOUND FALSE)

IF(WIN32 AND NOT CYGWIN AND THREADS_USE_PTHREADS_WIN32)
  SET(_Threads_ptwin32 true)
ENDIF()

# Do we have sproc?
IF(CMAKE_SYSTEM MATCHES IRIX)
  CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h"  CMAKE_HAVE_SPROC_H)
ENDIF()

IF(CMAKE_HAVE_SPROC_H)
  # We have sproc
  SET(CMAKE_USE_SPROC_INIT 1)

ELSEIF(_Threads_ptwin32)

  IF(NOT DEFINED THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME)
    # Assign the default scheme
    SET(THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME "C")
  ELSE()
    # Validate the scheme specified by the user
    IF(NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "C" AND
       NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "CE" AND
       NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
         MESSAGE(FATAL_ERROR "See documentation for FindPthreads.cmake, only C, CE, and SE modes are allowed")
    ENDIF()
    IF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
      MESSAGE(FATAL_ERROR "Structured Exception Handling is only allowed for MSVC")
    ENDIF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE")
  ENDIF()

  FIND_PATH(THREADS_PTHREADS_INCLUDE_DIR pthread.h)

  # Determine the library filename
  IF(MSVC)
    SET(_Threads_pthreads_libname
        pthreadV${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2)
  ELSEIF(MINGW)
    SET(_Threads_pthreads_libname
        pthreadG${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2)
  ELSE()
    MESSAGE(FATAL_ERROR "This should never happen")
  ENDIF()

  # Use the include path to help find the library if possible
  SET(_Threads_lib_paths "")
  IF(THREADS_PTHREADS_INCLUDE_DIR)
     GET_FILENAME_COMPONENT(_Threads_root_dir
                            ${THREADS_PTHREADS_INCLUDE_DIR} PATH)
     SET(_Threads_lib_paths ${_Threads_root_dir}/lib)
  ENDIF()
  FIND_LIBRARY(THREADS_PTHREADS_WIN32_LIBRARY
               NAMES ${_Threads_pthreads_libname}
               PATHS ${_Threads_lib_paths}
               DOC "The Portable Threads Library for Win32"
               NO_SYSTEM_PATH
               )

  IF(THREADS_PTHREADS_INCLUDE_DIR AND THREADS_PTHREADS_WIN32_LIBRARY)
    MARK_AS_ADVANCED(THREADS_PTHREADS_INCLUDE_DIR)
    SET(CMAKE_THREAD_LIBS_INIT ${THREADS_PTHREADS_WIN32_LIBRARY})
    SET(CMAKE_HAVE_THREADS_LIBRARY 1)
    SET(Threads_FOUND TRUE)
  ENDIF()

  MARK_AS_ADVANCED(THREADS_PTHREADS_WIN32_LIBRARY)

ELSE()
  # Do we have pthreads?
  CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_H)
  IF(CMAKE_HAVE_PTHREAD_H)

    #
    # We have pthread.h
    # Let's check for the library now.
    #
    SET(CMAKE_HAVE_THREADS_LIBRARY)
    IF(NOT THREADS_HAVE_PTHREAD_ARG)

      # Do we have -lpthreads
      CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
      IF(CMAKE_HAVE_PTHREADS_CREATE)
        SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
        SET(CMAKE_HAVE_THREADS_LIBRARY 1)
        SET(Threads_FOUND TRUE)
      ENDIF()

      # Ok, how about -lpthread
      CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE)
      IF(CMAKE_HAVE_PTHREAD_CREATE)
        SET(CMAKE_THREAD_LIBS_INIT "-lpthread")
        SET(Threads_FOUND TRUE)
        SET(CMAKE_HAVE_THREADS_LIBRARY 1)
      ENDIF()

      IF(CMAKE_SYSTEM MATCHES "SunOS.*")
        # On sun also check for -lthread
        CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
        IF(CMAKE_HAVE_THR_CREATE)
          SET(CMAKE_THREAD_LIBS_INIT "-lthread")
          SET(CMAKE_HAVE_THREADS_LIBRARY 1)
          SET(Threads_FOUND TRUE)
        ENDIF()
      ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")

    ENDIF(NOT THREADS_HAVE_PTHREAD_ARG)

    IF(NOT CMAKE_HAVE_THREADS_LIBRARY)
      # If we did not found -lpthread, -lpthread, or -lthread, look for -pthread
      IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
        MESSAGE(STATUS "Check if compiler accepts -pthread")
        TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
          ${CMAKE_BINARY_DIR}
          ${CMAKE_ROOT}/Modules/CheckForPthreads.c
          CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
          COMPILE_OUTPUT_VARIABLE OUTPUT)

        IF(THREADS_HAVE_PTHREAD_ARG)
          IF(THREADS_PTHREAD_ARG MATCHES "^2$")
            SET(Threads_FOUND TRUE)
            MESSAGE(STATUS "Check if compiler accepts -pthread - yes")
          ELSE()
            MESSAGE(STATUS "Check if compiler accepts -pthread - no")
            FILE(APPEND
              ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
              "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
          ENDIF()
        ELSE()
          MESSAGE(STATUS "Check if compiler accepts -pthread - no")
          FILE(APPEND
            ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
            "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
        ENDIF()

      ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")

      IF(THREADS_HAVE_PTHREAD_ARG)
        SET(Threads_FOUND TRUE)
        SET(CMAKE_THREAD_LIBS_INIT "-pthread")
      ENDIF()

    ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY)
  ENDIF(CMAKE_HAVE_PTHREAD_H)
ENDIF()

IF(CMAKE_THREAD_LIBS_INIT)
  SET(CMAKE_USE_PTHREADS_INIT 1)
  SET(Threads_FOUND TRUE)
ENDIF()

IF(CMAKE_SYSTEM MATCHES "Windows"
   AND NOT THREADS_USE_PTHREADS_WIN32)
  SET(CMAKE_USE_WIN32_THREADS_INIT 1)
  SET(Threads_FOUND TRUE)
ENDIF()

IF(CMAKE_USE_PTHREADS_INIT)
  IF(CMAKE_SYSTEM MATCHES "HP-UX-*")
    # Use libcma if it exists and can be used.  It provides more
    # symbols than the plain pthread library.  CMA threads
    # have actually been deprecated:
    #   http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395
    #   http://docs.hp.com/en/947/d8.html
    # but we need to maintain compatibility here.
    # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads
    # are available.
    CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA)
    IF(CMAKE_HAVE_HP_CMA)
      SET(CMAKE_THREAD_LIBS_INIT "-lcma")
      SET(CMAKE_HP_PTHREADS_INIT 1)
      SET(Threads_FOUND TRUE)
    ENDIF(CMAKE_HAVE_HP_CMA)
    SET(CMAKE_USE_PTHREADS_INIT 1)
  ENDIF()

  IF(CMAKE_SYSTEM MATCHES "OSF1-V*")
    SET(CMAKE_USE_PTHREADS_INIT 0)
    SET(CMAKE_THREAD_LIBS_INIT )
  ENDIF()

  IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*")
    SET(CMAKE_USE_PTHREADS_INIT 1)
    SET(Threads_FOUND TRUE)
    SET(CMAKE_THREAD_LIBS_INIT )
    SET(CMAKE_USE_WIN32_THREADS_INIT 0)
  ENDIF()
ENDIF(CMAKE_USE_PTHREADS_INIT)

INCLUDE(FindPackageHandleStandardArgs)
IF(_Threads_ptwin32)
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG
    THREADS_PTHREADS_WIN32_LIBRARY THREADS_PTHREADS_INCLUDE_DIR)
ELSE()
  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND)
ENDIF()


================================================
FILE: cmake/Modules/Version.cmake
================================================
# Copyright 2013 OSMOCOM Project
#
# This file is part of rtl-sdr
#
# rtl-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, or (at your option)
# any later version.
#
# rtl-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 rtl-sdr; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.

if(DEFINED __INCLUDED_VERSION_CMAKE)
    return()
endif()
set(__INCLUDED_VERSION_CMAKE TRUE)

# VERSION_INFO_* variables must be provided by user
set(MAJOR_VERSION ${VERSION_INFO_MAJOR_VERSION})
set(MINOR_VERSION ${VERSION_INFO_MINOR_VERSION})
set(PATCH_VERSION ${VERSION_INFO_PATCH_VERSION})

########################################################################
# Extract the version string from git describe.
########################################################################
find_package(Git QUIET)

if(GIT_FOUND AND EXISTS ${PROJECT_SOURCE_DIR}/.git)
    message(STATUS "Extracting version information from git describe...")
    execute_process(
        COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=4 --long
        OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    )
else()
    set(GIT_DESCRIBE "v${MAJOR_VERSION}.${MINOR_VERSION}.x-xxx-xunknown")
endif()

########################################################################
# Use the logic below to set the version constants
########################################################################
if("${PATCH_VERSION}" STREQUAL "git")
    # VERSION: 3.6git-xxx-gxxxxxxxx
    # LIBVER:  3.6git
    set(VERSION "${GIT_DESCRIBE}")
    set(LIBVER  "${MAJOR_VERSION}.${MINOR_VERSION}${PATCH_VERSION}")
else()
    # This is a numbered release.
    # VERSION: 3.6.1
    # LIBVER:  3.6.1
    set(VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
    set(LIBVER "${VERSION}")
endif()


================================================
FILE: cmake/cmake_uninstall.cmake.in
================================================
# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F

IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
  MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
STRING(REGEX REPLACE "\n" ";" files "${files}")
FOREACH(file ${files})
  MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
  IF(EXISTS "$ENV{DESTDIR}${file}")
    EXEC_PROGRAM(
      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
      OUTPUT_VARIABLE rm_out
      RETURN_VALUE rm_retval
      )
    IF(NOT "${rm_retval}" STREQUAL 0)
      MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
    ENDIF(NOT "${rm_retval}" STREQUAL 0)
  ELSEIF(IS_SYMLINK "$ENV{DESTDIR}${file}")
    EXEC_PROGRAM(
      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
      OUTPUT_VARIABLE rm_out
      RETURN_VALUE rm_retval
      )
    IF(NOT "${rm_retval}" STREQUAL 0)
      MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
    ENDIF(NOT "${rm_retval}" STREQUAL 0)
  ELSE(EXISTS "$ENV{DESTDIR}${file}")
    MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
  ENDIF(EXISTS "$ENV{DESTDIR}${file}")
ENDFOREACH(file)


================================================
FILE: configure.ac
================================================
AC_INIT([librtlsdr],
        m4_esyscmd([./git-version-gen .tarball-version]),
        [osmocom-sdr@lists.osmocom.org])

AM_INIT_AUTOMAKE([dist-bzip2])

dnl kernel style compile messages
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

dnl checks for programs
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_INSTALL
AM_PROG_CC_C_O
LT_INIT
AC_PROG_LIBTOOL

PKG_CHECK_MODULES(LIBUSB, libusb-1.0 >= 1.0)
LIBS="$LIBS $LIBUSB_LIBS"
CFLAGS="$CFLAGS $LIBUSB_CFLAGS"

AC_PATH_PROG(DOXYGEN,doxygen,false)
AM_CONDITIONAL(HAVE_DOXYGEN, test $DOXYGEN != false)

AC_CONFIG_MACRO_DIR([m4])

dnl checks for header files
AC_HEADER_STDC
AC_CHECK_HEADERS(sys/types.h)
AC_CHECK_HEADERS(pthread.h,, [AC_MSG_ERROR([pthread.h required])])

# pc variables
AC_SUBST(RTLSDR_PC_LIBS,["$LIBS"])
AC_SUBST(RTLSDR_PC_CFLAGS,["$CFLAGS"])

dnl checks for required libraries
dnl pthreads
AC_CHECK_LIB(pthread, pthread_create, [LIBS="$LIBS -lpthread"])

dnl libmath (for rtl_fm)
AC_CHECK_LIB(m, atan2, [LIBS="$LIBS -lm"])

dnl libmath (for rtl_adsb)
AC_CHECK_LIB(m, sqrt, [LIBS="$LIBS -lm"])

dnl libmath (for rtl_power)
AC_CHECK_LIB(m, atan2, [LIBS="$LIBS -lm"])

dnl librealtime (for rtl_test)
AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])

AC_ARG_ENABLE(sanitize,
		[AS_HELP_STRING([--enable-sanitize], [Compile with address sanitizer enabled], )],
		[sanitize=$enableval], [sanitize="no"])
if test x"$sanitize" = x"yes"
then
	CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined"
	CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
fi

AC_ARG_ENABLE(werror,
	[AS_HELP_STRING(
		[--enable-werror],
		[Turn all compiler warnings into errors, with exceptions:
		 a) deprecation (allow upstream to mark deprecation without breaking builds);
		 b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
		]
	)],
	[werror=$enableval], [werror="no"])
if test x"$werror" = x"yes"
then
	WERROR_FLAGS="-Werror"
	WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
	WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
	CFLAGS="$CFLAGS $WERROR_FLAGS"
	CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
fi

# The following test is taken from WebKit's webkit.m4
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fvisibility=hidden "
AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
    [ AC_MSG_RESULT([yes])
      SYMBOL_VISIBILITY="-fvisibility=hidden"],
      AC_MSG_RESULT([no]))
CFLAGS="$saved_CFLAGS"
AC_SUBST(SYMBOL_VISIBILITY)

AC_MSG_CHECKING(whether compiler understands -Wall)
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wno-unused -Wsign-compare -Wdeclaration-after-statement"
AC_TRY_COMPILE([],[],
  AC_MSG_RESULT(yes),
  AC_MSG_RESULT(no)
  CFLAGS="$old_CFLAGS")

AC_ARG_ENABLE(driver-detach,
[  --enable-driver-detach          Enable detaching of kernel driver (disabled by default)],
[if test x$enableval = xyes; then
    CFLAGS="$CFLAGS -DDETACH_KERNEL_DRIVER"
fi])

dnl Generate the output
AC_CONFIG_HEADER(config.h)

AC_OUTPUT(
	librtlsdr.pc
	include/Makefile
	src/Makefile
	Makefile
	Doxyfile
)


================================================
FILE: contrib/jenkins.sh
================================================
#!/usr/bin/env bash
# jenkins build helper script for openbsc.  This is how we build on jenkins.osmocom.org

if ! [ -x "$(command -v osmo-build-dep.sh)" ]; then
	echo "Error: We need to have scripts/osmo-deps.sh from http://git.osmocom.org/osmo-ci/ in PATH !"
	exit 2
fi


set -ex

base="$PWD"
deps="$base/deps"
inst="$deps/install"
export deps inst

osmo-clean-workspace.sh

mkdir "$deps" || true

set +x
echo
echo
echo
echo " =============================== rtl-sdr ==============================="
echo
set -x

cd "$base"
autoreconf --install --force
./configure --enable-sanitize --enable-werror
$MAKE $PARALLEL_MAKE
LD_LIBRARY_PATH="$inst/lib" $MAKE check \
  || cat-testlogs.sh
LD_LIBRARY_PATH="$inst/lib" \
  DISTCHECK_CONFIGURE_FLAGS="--enable-werror" \
  $MAKE distcheck \
  || cat-testlogs.sh

osmo-clean-workspace.sh


================================================
FILE: cross_build_mingw32.sh
================================================
#!/bin/bash

# requires debian/ubuntu packages: zip gcc-mingw-w64

REPO_DIR=$(pwd)

if [ -z "$1" ]; then
  echo "usage: $0 <zip-post> <any other cmake options>"
  exit 1
fi

ZIP_POST="$1"
shift

CROSS="i686-w64-mingw32"
WN="w32"
TOOLCHAIN="mingw-w32-i686.cmake"

# libusb
if /bin/true; then
  cd ${REPO_DIR} && rm -rf libusb_${WN}
  cd ${REPO_DIR} && git clone --branch v1.0.23 https://github.com/libusb/libusb.git libusb_${WN}
  echo -e "\n\n********************************************************"
  echo "start build of libusb_${WN}"
  cd ${REPO_DIR}/libusb_${WN} && ./bootstrap.sh && \
    CC=${CROSS}-gcc \
    AR=${CROSS}-ar \
    RANLIB=${CROSS}-ranlib \
    ./configure --prefix=${REPO_DIR}/mingw_libusb_${WN} --host=${CROSS} --disable-shared && \
    make && make install
    echo -e "\n\nlisting of ${REPO_DIR}/mingw_libusb_${WN}"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}
    echo -e "\nlisting of ${REPO_DIR}/mingw_libusb_${WN}/include"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}/include
    echo -e "\nlisting of ${REPO_DIR}/mingw_libusb_${WN}/lib"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}/lib
    echo -e "\n"
fi

# librtlsdr
if /bin/true; then
  cd ${REPO_DIR} && rm -rf build_${WN}
  echo -e "\n\n********************************************************"
  echo "start build of librtlsdr_${WN}"
  mkdir ${REPO_DIR}/build_${WN} && cd ${REPO_DIR}/build_${WN} && \
    cmake -DCMAKE_TOOLCHAIN_FILE=${REPO_DIR}/${TOOLCHAIN} \
      -DCMAKE_INSTALL_PREFIX=${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST} \
      -DRTL_STATIC_BUILD=ON "$@"  \
      -DLIBUSB_INCLUDE_DIR=${REPO_DIR}/mingw_libusb_${WN}/include/libusb-1.0 \
      -DLIBUSB_LIBRARIES=${REPO_DIR}/mingw_libusb_${WN}/lib/libusb-1.0.a \
      ../  && \
    make && make install
  md5sum  ${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/* >${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/md5sums.txt
  sha1sum ${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/* >${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/sha1sums.txt
fi



================================================
FILE: cross_build_mingw64.sh
================================================
#!/bin/bash

# requires debian/ubuntu packages: zip gcc-mingw-w64

REPO_DIR=$(pwd)

if [ -z "$1" ]; then
  echo "usage: $0 <zip-post> <any other cmake options>"
  exit 1
fi

ZIP_POST="$1"
shift

CROSS="x86_64-w64-mingw32"
WN="w64"
TOOLCHAIN="mingw-w64-x64_64.cmake"

# libusb
if /bin/true; then
  cd ${REPO_DIR} && rm -rf libusb_${WN}
  cd ${REPO_DIR} && git clone --branch v1.0.23 https://github.com/libusb/libusb.git libusb_${WN}
  echo -e "\n\n********************************************************"
  echo "start build of libusb_${WN}"
  cd ${REPO_DIR}/libusb_${WN} && ./bootstrap.sh && \
    CC=${CROSS}-gcc \
    AR=${CROSS}-ar \
    RANLIB=${CROSS}-ranlib \
    ./configure --prefix=${REPO_DIR}/mingw_libusb_${WN} --host=${CROSS} --disable-shared && \
    make && make install
    echo -e "\n\nlisting of ${REPO_DIR}/mingw_libusb_${WN}"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}
    echo -e "\nlisting of ${REPO_DIR}/mingw_libusb_${WN}/include"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}/include
    echo -e "\nlisting of ${REPO_DIR}/mingw_libusb_${WN}/lib"
    ls -alh ${REPO_DIR}/mingw_libusb_${WN}/lib
    echo -e "\n"
fi

# librtlsdr
if /bin/true; then
  cd ${REPO_DIR} && rm -rf build_${WN}
  echo -e "\n\n********************************************************"
  echo "start build of librtlsdr_${WN}"
  mkdir ${REPO_DIR}/build_${WN} && cd ${REPO_DIR}/build_${WN} && \
    cmake -DCMAKE_TOOLCHAIN_FILE=${REPO_DIR}/${TOOLCHAIN} \
      -DCMAKE_INSTALL_PREFIX=${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST} \
      -DRTL_STATIC_BUILD=ON "$@"  \
      -DLIBUSB_INCLUDE_DIR=${REPO_DIR}/mingw_libusb_${WN}/include/libusb-1.0 \
      -DLIBUSB_LIBRARIES=${REPO_DIR}/mingw_libusb_${WN}/lib/libusb-1.0.a \
      ../  && \
    make && make install
  md5sum  ${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/* >${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/md5sums.txt
  sha1sum ${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/* >${REPO_DIR}/rtlsdr-bin-${WN}_${ZIP_POST}/bin/sha1sums.txt
fi



================================================
FILE: debian/.gitignore
================================================
*.deb


================================================
FILE: debian/README.Debian
================================================
rtl-sdr for Debian
-------------------

In the beginning Antti Palosaari noticed that some digital video
receiver tuners can be turned into a cheap software defined radio.

Since there is also support in the Linux kernel to use these devices
as digital video receivers, by default the hardware will be claimed
by Linux keernel drivers for that purpose.

Having these rtl-sdr packages installed likely means that these
devices should be available for the alternate software defined
radio use.

The librtlsdr0 package in Debian has configuration files to
help manage the conflicting uses:

1. Blacklists DVB-T kernel modules provided by the Linux kernel
-------------------------------------------------------------------

Config file:
/etc/modprobe.d/librtlsdr-blacklist.conf

contains lines to blacklist dvb_usb_rtl28xxu, e4000 and rtl2832
kernel modules.

Should you wish to use a device via the Linux video receiver software
while still having the librtlsdr0 package installed you may edit
this file. (Placing a # at the beginning os a line makes it a comment.)

Then unplug/plug the USB stick.

Not that if rtl-sdr applications are then run, they will complain about
failing to open the device. In that case, restore the blacklist and
unplug/plug the USB stick.

If librtlsdr-blacklist.conf does not exist, then rtl-sdr was built
with the DETACH_KERNEL_DRIVER option.

2. Permissions
--------------

Devices are available to users in the plugdev group.

The librtlsdr0 package installs these default rules:
/lib/udev/rules.d/60-librtlsdr0.rules

If you have permissions issues, you may override these values
with your own rules in /etc:

/etc/udev/rules.d/60-librtlsdr0.rules

After editing udev rules, run as root: 
 udevadm control --reload-rules



================================================
FILE: debian/changelog
================================================
rtl-sdr (0.7git) unstable; urgency=medium

  * Accumulated changes from librtlsdr community

 -- Karl Semich <0xloem@gmail.com>  Wed, 03 Oct 2018 15:09:44 +0000

rtl-sdr (0.6git) unstable; urgency=medium

  * New upstream release

 -- Harald Welte <laforge@gnumonks.org>  Sun, 06 Jun 2018 15:09:42 +0200

rtl-sdr (0.5.4-1) unstable; urgency=medium

  * New upstream release
  * update to v0.5.4-3-ga854ae8
    use USB zero-copy transfers if possible

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 12 May 2018 16:49:43 -0400

rtl-sdr (0.5.3-14) unstable; urgency=medium

  * update to v0.5.3-20-g4520f00 (Closes: #892974)
  * minimal ipv6 support (Closes: #870804)
  * VCS to salsa
  * AppStream metadata.xml

 -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 16 Apr 2018 20:45:53 -0400

rtl-sdr (0.5.3-13) unstable; urgency=medium

  * build with libusb-1.0-0-dev stub on hurd-i386
  * initial ipv6 support for rtl_tcp...

 -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 23 Nov 2017 15:59:40 -0500

rtl-sdr (0.5.3-12) unstable; urgency=medium

  * add new HanfTek dongle
  * Bias T support (Closes: #854378, #842249)

 -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 23 Aug 2017 23:31:27 -0400

rtl-sdr (0.5.3-11) unstable; urgency=medium

  * correct invocation of rm_conffile (Thanks Chris!) (Closes: #838161)
  * drop uploaders line on advice of MIA team. (Closes: #836590)

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 08 Oct 2016 11:17:47 -0400

rtl-sdr (0.5.3-10) unstable; urgency=medium

  * remove rtl-sdr-blacklist.conf on upgrade. Thanks Bob! (Closes: #829517)

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 09 Jul 2016 23:38:24 -0400

rtl-sdr (0.5.3-9) unstable; urgency=medium

  * Edit of debian/librtlsdr0.udev in 0.5.3-8 was a no-op. Real fix
    done to debian/patches/use-udev-uaccess-rules. (Closes: #825073)

 -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 25 May 2016 17:19:57 -0400

rtl-sdr (0.5.3-8) unstable; urgency=high

  * Fix syntax errors for systemd-udevd in udev rules (Closes: #825073)

 -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 24 May 2016 21:08:50 -0400

rtl-sdr (0.5.3-7) unstable; urgency=medium

  * better udev rules (more like camera devices in libgphoto2-6)

 -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 10 May 2016 19:20:27 -0400

rtl-sdr (0.5.3-6) unstable; urgency=medium

  * Use ENV{ID_SOFTWARE_RADIO}=1 in udev rules (Closes: #823089)
  * Enable DETACH_KERNEL_DRIVER (Closes: 823022)
  * Make myself maintainer so I get the bug reports

 -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 08 May 2016 12:12:13 -0400

rtl-sdr (0.5.3-5) unstable; urgency=medium

  * Add watch fiule
  * place rtl-sdr -n comm section (Closes: #758077)
  * improve-librtlsdr-pc-file (Closes: #784912)
  * improve-scanning-range-parsing (LP: #1469478)

 -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 23 Aug 2015 10:35:42 -0400

rtl-sdr (0.5.3-4) unstable; urgency=low

  * Update to v0.5.3-12-ge3c03f7

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 08 Aug 2015 23:43:54 -0400

rtl-sdr (0.5.3-3) unstable; urgency=low

  * Update to v0.5.3-5-g6ee5573
    lib: handle events after canceling transfers
    lib: change default number of transfers to 15
    rtl_tcp: make all global variables static

 -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 13 Apr 2014 10:48:49 -0400

rtl-sdr (0.5.3-2) unstable; urgency=low

  * Upstream: lib: only print to stderr in tuner_r82xx_set_pll()
  * Update man pages (New -M (modulation) and -E (option) and ppm setting)
  * Have librtlsdr0 also install a blacklist for linux video drivers

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 08 Feb 2014 22:40:06 -0500

rtl-sdr (0.5.3-1) unstable; urgency=low

  * New upstream git tag release

 -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 06 Feb 2014 20:45:38 -0500

rtl-sdr (0.5.2.7.3ab6-1~bpo70+1) wheezy-backports; urgency=low

  * Rebuild for wheezy-backports.

 -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 21 Jan 2014 19:34:16 -0500

rtl-sdr (0.5.2.7.3ab6-1) unstable; urgency=low

  * New upstream snapshot

 -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 29 Dec 2013 21:37:19 -0500

rtl-sdr (0.5.1.14.360d-1~wheezy) stable; urgency=low

  * New upstream snapshot
  * GNU Radio LiveDVD 2013-1110

 -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 11 Nov 2013 12:46:00 -0500

rtl-sdr (0.5.0.4.4914-2) unstable; urgency=low

  * Use kfreebsd libusb

 -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 01 Nov 2013 17:16:42 -0400

rtl-sdr (0.5.0.4.4914-1) stable; urgency=low

  * New upstream snapshot (Closes: #701018).
  * Match GNU Radio live distribution version
  * Sponsored upload

 -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 28 Sep 2013 16:55:08 -0400

rtl-sdr (0.5.0+git20130715-1) unstable; urgency=low

  * Initial release (Closes: #701018).

 -- Adam Cécile (Le_Vert) <gandalf@le-vert.net>  Mon, 15 Jul 2013 15:51:05 +0200

librtlsdr (0.0git3198f14-1) unstable; urgency=low

  * New upstream git

 -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 14 May 2012 20:28:18 -0400


================================================
FILE: debian/compat
================================================
9


================================================
FILE: debian/control
================================================
Source: rtl-sdr
Section: comm
Priority: optional
Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Build-Depends: cmake,
               debhelper (>= 9.0.0~),
               libusb-1.0-0-dev [linux-any],
               libusb-dev [hurd-i386],
               libusb2-dev [kfreebsd-any]
Standards-Version: 4.1.4
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Vcs-Browser: https://salsa.debian.org/bottoms/pkg-rtl-sdr
Vcs-Git: https://salsa.debian.org/bottoms/pkg-rtl-sdr.git

Package: librtlsdr-dev
Section: libdevel
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: librtlsdr0 (= ${binary:Version}),
         libusb-1.0-0-dev [!kfreebsd-any],
         libusb2-dev [kfreebsd-any],
         ${misc:Depends}
Description: Software defined radio receiver for Realtek RTL2832U (development)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains development files.

Package: librtlsdr0
Section: libs
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: ${misc:Depends}, ${shlibs:Depends}
Multi-Arch: same
Description: Software defined radio receiver for Realtek RTL2832U (library)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains the shared library.

Package: rtl-sdr
Architecture: any
Depends: librtlsdr0 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}
Description: Software defined radio receiver for Realtek RTL2832U (tools)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains a set of command line utilities:
  * rtl_adsb: a simple ADS-B decoder for RTL2832 based DVB-T receivers
  * rtl_eeprom: an EEPROM programming tool for RTL2832 based DVB-T receivers
  * rtl_fm: a narrow band FM demodulator for RTL2832 based DVB-T receivers
  * rtl_sdr: an I/Q recorder for RTL2832 based DVB-T receivers
  * rtl_tcp: an I/Q spectrum server for RTL2832 based DVB-T receivers
  * rtl_test: a benchmark tool for RTL2832 based DVB-T receivers


================================================
FILE: debian/copyright
================================================
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: rtl-sdr
Upstream-Contact: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Source:
 git clone git://git.osmocom.org/rtl-sdr.git
 The upstream package source tarball was generated from the tag:
 git archive --format=tar --prefix=rtl-sdr-0.5.2.7.3ab6/ 3ab6ff | gzip > ../rtl-sdr_0.5.2.7.3ab6.orig.tar.gz
Comment:
 Debian packages sponsored by A. Maitland Bottoms,
 based upon packaging work by Adam Cécile.
 .
 Upstream Authors:
 Steve Markgraf <steve@steve-m.de>
 Dimitri Stolnikov <horiz0n@gmx.net>
 Hoernchen <la@tfc-server.de>
 Kyle Keen <keenerd@gmail.com>
Copyright: 2012,2013 OSMOCOM Project
License: GPL-2.0+

Files: *
Copyright: 2012, 2013, OSMOCOM Project
License: GPL-3+

Files: debian/*
Copyright: 2013 Adam Cécile (Le_Vert) <gandalf@le-vert.net>
           2012,2013 A. Maitland Bottoms <bottoms@debian.org>
License: GPL-2.0+

Files: debian/librtlsdr0.udev
Copyright: 2012, 2013, Osmocom rtl-sdr project
License: GPL-3+

Files: debian/rtl_adsb.1
Copyright: Copyright (c) 2013, A. Maitland Bottoms <bottoms@debian.org>
License: GPL-2.0+

Files: debian/rtl_eeprom.1
  debian/rtl_test.1
Copyright: Copyright (c) 2013, A. Maitland Bottoms <bottoms@debian.org>
License: GPL-2+

Files: git-version-gen
Copyright: 2007-2010, Free Software Foundation, Inc.
License: GPL-3+

Files: include/*
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
  2012, Hans-Frieder Vogt <hfvogt@gmx.net>
License: GPL-2+

Files: include/CMakeLists.txt
Copyright: 2012, 2013, OSMOCOM Project
License: GPL-3+

Files: include/rtl-sdr.h
Copyright: 2012, Dimitri Stolnikov <horiz0n@gmx.net>
  2012, 2013, Steve Markgraf <steve@steve-m.de>
License: GPL-2+

Files: include/rtl-sdr_export.h
Copyright: 2012, Hoernchen <la@tfc-server.de>
License: GPL-2+

Files: include/tuner_e4k.h
Copyright: 2012, Sylvain Munaut <tnt@246tNt.com>
  2012, Hoernchen <la@tfc-server.de>
  2011, 2012, Harald Welte <laforge@gnumonks.org>
License: GPL-2+

Files: include/tuner_fc2580.h
Copyright: Steve Markgraf <steve@steve-m.de>
License: GPL-2.0+

Files: include/tuner_r82xx.h
Copyright: 2013, Steve Markgraf <steve@steve-m.de>
  2013, Mauro Carvalho Chehab <mchehab@redhat.com>
License: GPL-2+

Files: rtl-sdr.rules
Copyright: 2012, 2013, Osmocom rtl-sdr project
License: GPL-3+

Files: src/*
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
License: GPL-2+

Files: src/CMakeLists.txt
Copyright: 2012, 2013, OSMOCOM Project
License: GPL-3+

Files: src/Makefile.am
Copyright: 2012 Steve Markgraf <steve@steve-m.de>
           2012 Dimitri Stolnikov <horiz0n@gmx.net>
License: GPL-2.0+

Files: src/convenience/*
Copyright: 2014, Kyle Keen <keenerd@gmail.com>
License: GPL-2+

Files: src/getopt/*
Copyright: 88-96, 98, 99, 1987, 2000, 2001
License: LGPL-2.1+

Files: src/getopt/getopt.h
Copyright: 1989-1994, 1996-1999, 2001, Free Software Foundation, Inc.
License: LGPL-2.1+

Files: src/librtlsdr.c
Copyright: 2012-2014, Steve Markgraf <steve@steve-m.de>
  2012, Dimitri Stolnikov <horiz0n@gmx.net>
License: GPL-2+

Files: src/rtl_adsb.c
Copyright: 2012, Youssef Touil <youssef@sdrsharp.com>
  2012, Steve Markgraf <steve@steve-m.de>
  2012, Kyle Keen <keenerd@gmail.com>
  2012, Ian Gilmour <ian@sdrsharp.com>
  2012, Hoernchen <la@tfc-server.de>
License: GPL-2+

Files: src/rtl_fm.c
Copyright: 2013, Elias Oenal <EliasOenal@gmail.com>
  2012, Steve Markgraf <steve@steve-m.de>
  2012, Kyle Keen <keenerd@gmail.com>
  2012, Hoernchen <la@tfc-server.de>
License: GPL-2+

Files: src/rtl_power.c
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
  2012, Kyle Keen <keenerd@gmail.com>
  2012, Hoernchen <la@tfc-server.de>
License: GPL-2+

Files: src/rtl_tcp.c
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
  2012, 2013, Hoernchen <la@tfc-server.de>
License: GPL-2+

Files: src/rtl_test.c
Copyright: 2014, Michael Tatarinov <kukabu@gmail.com>
  2012-2014, Steve Markgraf <steve@steve-m.de>
  2012-2014, Kyle Keen <keenerd@gmail.com>
License: GPL-2+

Files: src/tuner_e4k.c
Copyright: 2012, Sylvain Munaut <tnt@246tNt.com>
  2012, Hoernchen <la@tfc-server.de>
  2011, 2012, Harald Welte <laforge@gnumonks.org>
License: GPL-2+

Files: src/tuner_fc0012.c
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
  2012, Hans-Frieder Vogt <hfvogt@gmx.net>
License: GPL-2+

Files: src/tuner_fc0013.c
Copyright: 2012, Steve Markgraf <steve@steve-m.de>
  2012, Hans-Frieder Vogt <hfvogt@gmx.net>
  2010, Fitipower Integrated Technology Inc
License: GPL-2+

Files: src/tuner_fc2580.c
Copyright: Steve Markgraf <steve@steve-m.de>
    Dimitri Stolnikov <horiz0n@gmx.net>
License: GPL-2.0+

Files: src/tuner_r82xx.c
Copyright: 2013, Steve Markgraf <steve@steve-m.de>
  2013, Mauro Carvalho Chehab <mchehab@redhat.com>
License: GPL-2+

License: GPL-2+
 This program 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; version 2 dated June, 1991, or (at
 your option) any later version.
 .
 On Debian systems, the complete text of version 2 of the GNU General
 Public License can be found in '/usr/share/common-licenses/GPL-2'.

License: GPL-2.0+
 This package 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 2 of the License, or
 (at your option) any later version.
 .
 This package 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 this program. If not, see <http://www.gnu.org/licenses/>
 .
 On Debian systems, the complete text of the GNU General
 Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

License: GPL-3+
 This program 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.
 .
 This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 .
 On Debian systems, the complete text of the GNU Lesser General
 Public License can be found in "/usr/share/common-licenses/GPL-3".

License: LGPL-2.1+
 This package is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.
 .
 This package 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
 Lesser General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 On Debian systems, the complete text of the GNU Lesser General
 Public License can be found in "/usr/share/common-licenses/LGPL-2".


================================================
FILE: debian/copyright-scan-patterns.yml
================================================
ignore :
  suffixes :
   - in


================================================
FILE: debian/debianize_armhf
================================================
#!/bin/bash

REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../"

G_REV=`git rev-parse --short=8 HEAD`
DATE=`date +"%Y%m%d%H%M%S"`
#VERSION="0.5.3-git+${DATE}.${G_REV}~$1"
VERSION=`git describe | cut -dv -f2`
#
# librtlsdr0
#

rm -fr /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/usr/lib/arm-linux-gnueabihf/
mkdir -p /tmp/librtlsdr0/DEBIAN

cat <<- EOF > /tmp/librtlsdr0/DEBIAN/control
Package: librtlsdr0
Source: rtl-sdr
Version: ${VERSION}
Architecture: armhf
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: libc6 (>= 2.14), libusb-1.0-0 (>= 2:1.0.9)
Section: libs
Priority: extra
Multi-Arch: same
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (library)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains the shared library.
EOF

DEB_PKG="librtlsdr0_${VERSION}_armhf.deb"

cp -rf ${REPO_DIR}/build/src/lib*so* /tmp/librtlsdr0/usr/lib/arm-linux-gnueabihf/
dpkg-deb -b /tmp/librtlsdr0/ ./${DEB_PKG}

echo ${DEB_PKG}

#
# rtl-sdr
#

rm -fr /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/usr/bin/
mkdir -p /tmp/rtl-sdr/DEBIAN

cat <<- EOF > /tmp/rtl-sdr/DEBIAN/control
Package: rtl-sdr
Version: ${VERSION}
Architecture: armhf
Maintainer: Lucas Teske <lucas@teske.net.br>
Depends: librtlsdr0 (= ${VERSION}), libc6 (>= 2.15)
Section: libs
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (tools)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains a set of command line utilities:
  * rtl_adsb: a simple ADS-B decoder for RTL2832 based DVB-T receivers
  * rtl_eeprom: an EEPROM programming tool for RTL2832 based DVB-T receivers
  * rtl_fm: a narrow band FM demodulator for RTL2832 based DVB-T receivers
  * rtl_sdr: an I/Q recorder for RTL2832 based DVB-T receivers
  * rtl_tcp: an I/Q spectrum server for RTL2832 based DVB-T receivers
  * rtl_test: a benchmark tool for RTL2832 based DVB-T receivers


EOF

DEB_PKG="rtl-sdr_${VERSION}_armhf.deb"

cp -rf ${REPO_DIR}/build/src/rtl_* /tmp/rtl-sdr/usr/bin/
dpkg-deb -b /tmp/rtl-sdr/ ./${DEB_PKG}

echo ${DEB_PKG}


#
# librtlsdr-dev
#

rm -fr /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/usr/include
mkdir -p /tmp/librtlsdr-dev/usr/lib/pkgconfig
mkdir -p /tmp/librtlsdr-dev/DEBIAN

cat <<- EOF > /tmp/librtlsdr-dev/DEBIAN/control
Package: librtlsdr-dev
Source: rtl-sdr
Version: ${VERSION}
Architecture: armhf
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: librtlsdr0 (= ${VERSION})
Section: libdevel
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (development files)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains development files.

EOF

DEB_PKG="librtlsdr-dev_${VERSION}_armhf.deb"

cp -rf ${REPO_DIR}/include/*.h /tmp/librtlsdr-dev/usr/include
cp ${REPO_DIR}/build/librtlsdr.pc /tmp/librtlsdr-dev/usr/lib/pkgconfig/
dpkg-deb -b /tmp/librtlsdr-dev/ ./${DEB_PKG}

echo ${DEB_PKG}

================================================
FILE: debian/debianize_x32
================================================
#!/bin/bash

REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../"

G_REV=`git rev-parse --short=8 HEAD`
DATE=`date +"%Y%m%d%H%M%S"`
#VERSION="0.5.3-git+${DATE}.${G_REV}~$1"
VERSION=`git describe | cut -dv -f2`
#
# librtlsdr0
#

rm -fr /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/usr/lib/i386-linux-gnu/
mkdir -p /tmp/librtlsdr0/DEBIAN

cat <<- EOF > /tmp/librtlsdr0/DEBIAN/control
Package: librtlsdr0
Source: rtl-sdr
Version: ${VERSION}
Architecture: i386
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: libc6 (>= 2.14), libusb-1.0-0 (>= 2:1.0.9)
Section: libs
Priority: extra
Multi-Arch: same
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (library)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains the shared library.
EOF

DEB_PKG="librtlsdr0_${VERSION}_i386.deb"

cp -rf ${REPO_DIR}/build/src/lib*so* /tmp/librtlsdr0/usr/lib/i386-linux-gnu/
dpkg-deb -b /tmp/librtlsdr0/ ./${DEB_PKG}

echo ${DEB_PKG}

#
# rtl-sdr
#

rm -fr /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/usr/bin/
mkdir -p /tmp/rtl-sdr/DEBIAN

cat <<- EOF > /tmp/rtl-sdr/DEBIAN/control
Package: rtl-sdr
Version: ${VERSION}
Architecture: i386
Maintainer: Lucas Teske <lucas@teske.net.br>
Depends: librtlsdr0 (= ${VERSION}), libc6 (>= 2.15)
Section: libs
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (tools)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains a set of command line utilities:
  * rtl_adsb: a simple ADS-B decoder for RTL2832 based DVB-T receivers
  * rtl_eeprom: an EEPROM programming tool for RTL2832 based DVB-T receivers
  * rtl_fm: a narrow band FM demodulator for RTL2832 based DVB-T receivers
  * rtl_sdr: an I/Q recorder for RTL2832 based DVB-T receivers
  * rtl_tcp: an I/Q spectrum server for RTL2832 based DVB-T receivers
  * rtl_test: a benchmark tool for RTL2832 based DVB-T receivers


EOF

DEB_PKG="rtl-sdr_${VERSION}_i386.deb"

cp -rf ${REPO_DIR}/build/src/rtl_* /tmp/rtl-sdr/usr/bin/
dpkg-deb -b /tmp/rtl-sdr/ ./${DEB_PKG}

echo ${DEB_PKG}


#
# librtlsdr-dev
#

rm -fr /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/usr/include
mkdir -p /tmp/librtlsdr-dev/usr/lib/pkgconfig
mkdir -p /tmp/librtlsdr-dev/DEBIAN

cat <<- EOF > /tmp/librtlsdr-dev/DEBIAN/control
Package: librtlsdr-dev
Source: rtl-sdr
Version: ${VERSION}
Architecture: i386
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: librtlsdr0 (= ${VERSION})
Section: libdevel
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (development files)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains development files.

EOF

DEB_PKG="librtlsdr-dev_${VERSION}_i386.deb"

cp -rf ${REPO_DIR}/include/*.h /tmp/librtlsdr-dev/usr/include
cp ${REPO_DIR}/build/librtlsdr.pc /tmp/librtlsdr-dev/usr/lib/pkgconfig/
dpkg-deb -b /tmp/librtlsdr-dev/ ./${DEB_PKG}

echo ${DEB_PKG}

================================================
FILE: debian/debianize_x64
================================================
#!/bin/bash

REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../"

G_REV=`git rev-parse --short=8 HEAD`
DATE=`date +"%Y%m%d%H%M%S"`
#VERSION="0.5.3-git+${DATE}.${G_REV}~$1"
VERSION=`git describe | cut -dv -f2`
#
# librtlsdr0
#

rm -fr /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/
mkdir -p /tmp/librtlsdr0/usr/lib/x86_64-linux-gnu/
mkdir -p /tmp/librtlsdr0/DEBIAN

cat <<- EOF > /tmp/librtlsdr0/DEBIAN/control
Package: librtlsdr0
Source: rtl-sdr
Version: ${VERSION}
Architecture: amd64
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: libc6 (>= 2.14), libusb-1.0-0 (>= 2:1.0.9)
Section: libs
Priority: extra
Multi-Arch: same
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (library)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains the shared library.
EOF

DEB_PKG="librtlsdr0_${VERSION}_amd64.deb"

cp -rf ${REPO_DIR}/build/src/lib*so* /tmp/librtlsdr0/usr/lib/x86_64-linux-gnu/
dpkg-deb -b /tmp/librtlsdr0/ ./${DEB_PKG}

echo ${DEB_PKG}

#
# rtl-sdr
#

rm -fr /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/
mkdir -p /tmp/rtl-sdr/usr/bin/
mkdir -p /tmp/rtl-sdr/DEBIAN

cat <<- EOF > /tmp/rtl-sdr/DEBIAN/control
Package: rtl-sdr
Version: ${VERSION}
Architecture: amd64
Maintainer: Lucas Teske <lucas@teske.net.br>
Depends: librtlsdr0 (= ${VERSION}), libc6 (>= 2.15)
Section: libs
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (tools)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains a set of command line utilities:
  * rtl_adsb: a simple ADS-B decoder for RTL2832 based DVB-T receivers
  * rtl_eeprom: an EEPROM programming tool for RTL2832 based DVB-T receivers
  * rtl_fm: a narrow band FM demodulator for RTL2832 based DVB-T receivers
  * rtl_sdr: an I/Q recorder for RTL2832 based DVB-T receivers
  * rtl_tcp: an I/Q spectrum server for RTL2832 based DVB-T receivers
  * rtl_test: a benchmark tool for RTL2832 based DVB-T receivers


EOF

DEB_PKG="rtl-sdr_${VERSION}_amd64.deb"

cp -rf ${REPO_DIR}/build/src/rtl_* /tmp/rtl-sdr/usr/bin/
dpkg-deb -b /tmp/rtl-sdr/ ./${DEB_PKG}

echo ${DEB_PKG}


#
# librtlsdr-dev
#

rm -fr /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/
mkdir -p /tmp/librtlsdr-dev/usr/include
mkdir -p /tmp/librtlsdr-dev/usr/lib/pkgconfig
mkdir -p /tmp/librtlsdr-dev/DEBIAN

cat <<- EOF > /tmp/librtlsdr-dev/DEBIAN/control
Package: librtlsdr-dev
Source: rtl-sdr
Version: ${VERSION}
Architecture: amd64
Maintainer: Lucas Teske <lucas@teske.net.br>
Pre-Depends: multiarch-support
Depends: librtlsdr0 (= ${VERSION})
Section: libdevel
Priority: extra
Homepage: http://sdr.osmocom.org/trac/wiki/rtl-sdr
Description: Software defined radio receiver for Realtek RTL2832U (development files)
 rtl-sdr is a software defined radio (SDR) receiver software for certain
 low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
 .
 This package contains development files.

EOF

DEB_PKG="librtlsdr-dev_${VERSION}_amd64.deb"

cp -rf ${REPO_DIR}/include/*.h /tmp/librtlsdr-dev/usr/include
cp ${REPO_DIR}/build/librtlsdr.pc /tmp/librtlsdr-dev/usr/lib/pkgconfig/
dpkg-deb -b /tmp/librtlsdr-dev/ ./${DEB_PKG}

echo ${DEB_PKG}

================================================
FILE: debian/heatmap.py
================================================
#! /usr/bin/env python2

from PIL import Image, ImageDraw, ImageFont
import sys, gzip, math, colorsys, datetime
from collections import defaultdict
from itertools import *

# todo: matplotlib powered --interactive
# arbitrary freq marker spacing

path = sys.argv[1]
output = sys.argv[2]

raw_data = lambda: open(path)
if path.endswith('.gz'):
    raw_data = lambda: gzip.open(path, 'rb')

def frange(start, stop, step):
    i = 0
    while (i*step + start <= stop):
        yield i*step + start
        i += 1

print("loading")

freqs = set()
f_cache = set()
times = set()
labels = set()
min_z = 0
max_z = -100
start, stop = None, None
for line in raw_data():
    line = [s.strip() for s in line.strip().split(',')]
    line = [line[0], line[1]] + [float(s) for s in line[2:] if s]

    low = line[2]
    high = line[3]
    step = line[4]
    f_key = (int(low), int(high), step)
    if f_key not in f_cache:
        freqs.update(list(frange(int(low), int(high), step)))
        freqs.add(high)
        labels.add(low)
        f_cache.add(f_key)

    t = line[0] + ' ' + line[1]
    times.add(t)

    zs = line[6:]
    min_z = min(min_z, min(z for z in zs if not math.isinf(z)))
    max_z = max(max_z, max(zs))

    if start is None:
        start = datetime.datetime.strptime(line[0] + ' ' + line[1], '%Y-%m-%d %H:%M:%S')
    stop = datetime.datetime.strptime(line[0] + ' ' + line[1], '%Y-%m-%d %H:%M:%S')

freqs = list(sorted(list(freqs)))
times = list(sorted(list(times)))
labels = list(sorted(list(labels)))

if len(labels) == 1:
    delta = (max(freqs) - min(freqs)) / (len(freqs) / 500)
    delta = round(delta / 10**int(math.log10(delta))) * 10**int(math.log10(delta))
    delta = int(delta)
    lower = int(math.ceil(min(freqs) / delta) * delta)
    labels = list(range(lower, int(max(freqs)), delta))

print("x: %i, y: %i, z: (%f, %f)" % (len(freqs), len(times), min_z, max_z))

def rgb2(z):
    g = (z - min_z) / (max_z - min_z)
    return (int(g*255), int(g*255), 50)

def rgb3(z):
    g = (z - min_z) / (max_z - min_z)
    c = colorsys.hsv_to_rgb(0.65-(g-0.08), 1, 0.2+g)
    return (int(c[0]*256),int(c[1]*256),int(c[2]*256))

print("drawing")
img = Image.new("RGB", (len(freqs), len(times)))
pix = img.load()
x_size = img.size[0]
for line in raw_data():
    line = [s.strip() for s in line.strip().split(',')]
    line = [line[0], line[1]] + [float(s) for s in line[2:] if s]
    t = line[0] + ' ' + line[1]
    if t not in times:
        continue  # happens with live files
    y = times.index(t)
    low = line[2]
    high = line[3]
    step = line[4]
    x_start = freqs.index(low)
    for i in range(len(line[6:])):
        x = x_start + i
        if x >= x_size:
            continue
        z = line[6+i]
        # fast check for nan/-inf
        if not z >= min_z:
            z = min_z
        pix[x,y] = rgb2(z)

print("labeling")
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
pixel_width = step
for label in labels:
    y = 10
    #x = freqs.index(label)
    x = int((label-min(freqs)) / pixel_width)
    s = '%.3fMHz' % (label/1000000.0)
    draw.text((x, y), s, font=font, fill='white')

duration = stop - start
duration = duration.seconds
pixel_height = duration / len(times)
hours = int(duration / 3600)
minutes = int((duration - 3600*hours) / 60)
draw.text((2, img.size[1] - 45), 'Duration: %i:%02i' % (hours, minutes), font=font, fill='white')
draw.text((2, img.size[1] - 35), 'Range: %.2fMHz - %.2fMHz' % (min(freqs)/1e6, max(freqs)/1e6), font=font, fill='white')
draw.text((2, img.size[1] - 25), 'Pixel: %.2fHz x %is' % (pixel_width, int(round(pixel_height))), font=font, fill='white')
draw.text((2, img.size[1] - 15), 'Started: {0}'.format(start), font=font, fill='white')
# bin size

print("saving")
img.save(output)








================================================
FILE: debian/librtlsdr-dev.dirs
================================================
usr/lib
usr/include


================================================
FILE: debian/librtlsdr-dev.install
================================================
usr/include/*
usr/lib/*/lib*.a
usr/lib/*/lib*.so
usr/lib/*/pkgconfig/*


================================================
FILE: debian/librtlsdr0.dirs
================================================
etc/modprobe.d
usr/lib


================================================
FILE: debian/librtlsdr0.install
================================================
usr/lib/*/lib*.so.*
debian/librtlsdr0.metainfo.xml usr/share/metainfo


================================================
FILE: debian/librtlsdr0.maintscript
================================================
rm_conffile /etc/modprobe.d/rtl-sdr-blacklist.conf 0.5.3-10~


================================================
FILE: debian/librtlsdr0.metainfo.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<component>
  <id>librtlsdr0</id>
  <metadata_license>GPL-2+</metadata_license>
  <name>librtlsdr0</name>
  <summary>Control of rtl-sdr radio receiver</summary>
  <description>
    <p>
rtl-sdr is a software defined radio (SDR) receiver software for certain
low-cost DVB-T/DAB(+) USB dongles based on the Realtek RTL2832U chip.
    </p>
  </description>
  <provides>
    <modalias>usb:v0BDAp2832d*</modalias>
    <modalias>usb:v0BDAp2838d*</modalias>
    <modalias>usb:v0413p6680d*</modalias>
    <modalias>usb:v0413p6F0Fd*</modalias>
    <modalias>usb:v0458p707Fd*</modalias>
    <modalias>usb:v0CCDp00A9d*</modalias>
    <modalias>usb:v0CCDp00B3d*</modalias>
    <modalias>usb:v0CCDp00B4d*</modalias>
    <modalias>usb:v0CCDp00B5d*</modalias>
    <modalias>usb:v0CCDp00B7d*</modalias>
    <modalias>usb:v0CCDp00B8d*</modalias>
    <modalias>usb:v0CCDp00B9d*</modalias>
    <modalias>usb:v0CCDp00C0d*</modalias>
    <modalias>usb:v0CCDp00C6d*</modalias>
    <modalias>usb:v0CCDp00D3d*</modalias>
    <modalias>usb:v0CCDp00D7d*</modalias>
    <modalias>usb:v0CCDp00E0d*</modalias>
    <modalias>usb:v1554p5020d*</modalias>
    <modalias>usb:v15F4p0131d*</modalias>
    <modalias>usb:v15F4p0133d*</modalias>
    <modalias>usb:v185Bp0620d*</modalias>
    <modalias>usb:v185Bp0650d*</modalias>
    <modalias>usb:v185Bp0680d*</modalias>
    <modalias>usb:v1B80pD393d*</modalias>
    <modalias>usb:v1B80pD394d*</modalias>
    <modalias>usb:v1B80pD395d*</modalias>
    <modalias>usb:v1B80pD397d*</modalias>
    <modalias>usb:v1B80pD398d*</modalias>
    <modalias>usb:v1B80pD39Dd*</modalias>
    <modalias>usb:v1B80pD3A4d*</modalias>
    <modalias>usb:v1B80pD3A8d*</modalias>
    <modalias>usb:v1B80pD3AFd*</modalias>
    <modalias>usb:v1B80pD3B0d*</modalias>
    <modalias>usb:v1D19p1101d*</modalias>
    <modalias>usb:v1D19p1102d*</modalias>
    <modalias>usb:v1D19p1103d*</modalias>
    <modalias>usb:v1D19p1104d*</modalias>
    <modalias>usb:v1F4DpA803d*</modalias>
    <modalias>usb:v1F4DpB803d*</modalias>
    <modalias>usb:v1F4DpC803d*</modalias>
    <modalias>usb:v1F4DpD286d*</modalias>
    <modalias>usb:v1F4DpD803d*</modalias>
  </provides>
</component>


================================================
FILE: debian/librtlsdr0.udev
================================================
#
# Copyright 2012-2013 Osmocom rtl-sdr project
#
# This program 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.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
#

# original RTL2832U vid/pid (hama nano, for example)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0666"

# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"

# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0666"

# Leadtek WinFast DTV Dongle mini D (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0666"

# Genius TVGo DVB-T03 USB dongle (Ver. B)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0666"

# Terratec Cinergy T Stick Black (rev 1) (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0666"

# Terratec NOXON rev 1 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0666"

# Terratec Deutschlandradio DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0666"

# Terratec NOXON DAB Stick - Radio Energy (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0666"

# Terratec Media Broadcast DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0666"

# Terratec BR DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0666"

# Terratec WDR DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0666"

# Terratec MuellerVerlag DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0666"

# Terratec Fraunhofer DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0666"

# Terratec Cinergy T Stick RC (Rev.3) (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0666"

# Terratec T Stick PLUS (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0666"

# Terratec NOXON rev 2 (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0666"

# PixelView PV-DT235U(RN) (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0666"

# Astrometa DVB-T/DVB-T2 (R828D)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0666"

# HanfTek DAB+FM+DVB-T
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0133", MODE:="0666"

# Compro Videomate U620F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0666"

# Compro Videomate U650F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0666"

# Compro Videomate U680F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0666"

# GIGABYTE GT-U7300 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0666"

# DIKOM USB-DVBT HD
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0666"

# Peak 102569AGPK (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0666"

# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0666"

# Zaapa ZT-MINDVBZP (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0666"

# SVEON STV20 DVB-T USB & FM (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0666"

# Twintech UT-40 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0666"

# ASUS U3100MINI_PLUS_V2 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0666"

# SVEON STV27 DVB-T USB & FM (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0666"

# SVEON STV21 DVB-T USB & FM
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0666"

# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0666"

# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0666"

# Dexatek DK 5217 DVB-T Dongle (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0666"

# MSI DigiVox Micro HD (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0666"

# Sweex DVB-T USB (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0666"

# GTek T803 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0666"

# Lifeview LV5TDeluxe (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0666"

# MyGica TD312 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0666"

# PROlectrix DV107669 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0666"


================================================
FILE: debian/rtl-sdr-blacklist.conf
================================================
# This system has librtlsdr0 installed in order to
# use digital video broadcast receivers as generic
# software defined radios.
blacklist dvb_usb_rtl28xxu
blacklist e4000
blacklist rtl2832


================================================
FILE: debian/rtl-sdr.dirs
================================================
usr/bin


================================================
FILE: debian/rtl-sdr.examples
================================================
debian/heatmap.py


================================================
FILE: debian/rtl-sdr.install
================================================
usr/bin/*


================================================
FILE: debian/rtl-sdr.manpages
================================================
debian/rtl_adsb.1
debian/rtl_eeprom.1
debian/rtl_fm.1
debian/rtl_power.1
debian/rtl_sdr.1
debian/rtl_tcp.1
debian/rtl_test.1


================================================
FILE: debian/rtl_adsb.1
================================================
.TH "rtl_adsb" 1 "0.5.0" RTL-SDR "User Commands"
.SH NAME
rtl_adsb \- a simple ADS-B decoder
.SH DESCRIPTION
Uses a re-purposed DVB-T receiver as a software defined
radio to receive and decode ADS-B data.	Written by Kyle Keen
and incorporated in the osmocom rtl-sdr project.
.LP
Automatic dependent surveillance-broadcast, ADS-B, consists
of position and other status data transmitted by aircraft
in support of air traffic control in order to improve safety
of flight.
.LP
Much software is available for the RTL2832. Most of the user-level
packages rely on the librtlsdr library which comes as part of the
rtl-sdr codebase. This codebase contains both the library itself and
also a number of command line tools such as rtl_test, rtl_sdr,
rtl_tcp, and rtl_fm. These command line tools use the library to test
for the existence of RTL2832 devices and to perform basic data
transfer functions to and from the device.
.LP
Because most of the RTL2832 devices are connected using USB, the
librtlsdr library depends on the libusb library to communicate with
the device.
.SH USAGE
With a suitable antenna for receiving the 1090 MHz signal attached
to the rtl-sdr supported device, this program will output the
data decoded from that signal.
.SH SYNOPSIS
.B  rtl_adsb [-R] [-g gain] [-p ppm] [output file]
.SH OPTIONS
.IP "-d device_index (default: 0)"
.IP "-V verbove output (default: off)"
.IP "-S show short frames (default: off)"
.IP "-Q quality (0: no sanity checks, 0.5: half bit, 1: one bit (default), 2: two bits)"
.IP "-e allowed_errors (default: 5)"
.IP "-g tuner_gain (default: automatic)"
.IP "-p ppm_error (default: 0)"
.IP tfilename
 (a '-' dumps samples to stdout)
 (omitting the filename also uses stdout)
.SH EXAMPLES
.IP "Streaming with netcat:"
  rtl_adsb | netcat -lp 8080

  while true; do rtl_adsb | nc -lp 8080; done
.IP "Streaming with socat:"
  rtl_adsb | socat -u - TCP4:sdrsharp.com:47806
.SH SEE ALSO
RTL-SDR wiki documentation:
.B http://sdr.osmocom.org/trac/wiki/rtl-sdr
.LP
Other rtl-sdr programs:
.sp
rtl_eeprom(1), rtl_fm(1), rtl_sdr(1), rtl_tcp(1), rtl_test(1)
.SH AUTHOR
This manual page was written by Maitland Bottoms
for the Debian project (but may be used by others).
.SH COPYRIGHT
Copyright (c) 2013 A. Maitland Bottoms <bottoms@debian.org>
.LP
This program 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 2 of the License, or
(at your option) any later version.
.LP
This program 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.


================================================
FILE: debian/rtl_eeprom.1
================================================
.TH "rtl_eeprom" 1 "0.5.0" RTL-SDR "User Commands"
.SH NAME
rtl-eeprom \- EEPROM programming tool for RTL2832 based DVB-T receivers
.SH DESCRIPTION
Dumps configuration and also writes EEPROM configuration.
Written by Steve Markgraf and incorporated in the osmocom rtl-sdr project.
.LP
Use at your own risk, especially -w!
.LP
Much software is available for the RTL2832. Most of the user-level
packages rely on the librtlsdr library which comes as part of the
rtl-sdr codebase. This codebase contains both the library itself and
also a number of command line tools such as rtl_test, rtl_sdr,
rtl_tcp, and rtl_fm. These command line tools use the library to test
for the existence of RTL2832 devices and to perform basic data
transfer functions to and from the device.
.LP
Because most of the RTL2832 devices are connected using USB, the
librtlsdr library depends on the libusb library to communicate with
the device.
.SH USAGE
Writing bad information to the EEPROM will make your
device useless. 
.SH SYNOPSIS
.B  rtl_eeprom [OPTIONS]
.SH OPTIONS
.IP "-d device_index (default: 0)"
.IP "-m <str> set manufacturer string"
.IP "-p <str> set product string"
.IP "-s <str> set serial number string"
.IP "-i <0,1> disable/enable IR-endpoint"
.IP "-g <conf> generate default config and write to device"
   <conf> can be one of:
   realtek  Realtek default (as without EEPROM)
   realtek_oem  Realtek default OEM with EEPROM
   noxon  Terratec NOXON DAB Stick
   terratec_black  Terratec T Stick Black
   terratec_plus  Terratec T Stick+ (DVB-T/DAB)
.IP "-w <filename> write dumped file to device"
.IP "-r <filename> dump EEPROM to file"
.IP "-h display this help text"
.LP
Use on your own risk, especially -w!
.SH SEE ALSO
RTL-SDR wiki documentation:
.B http://sdr.osmocom.org/trac/wiki/rtl-sdr
.LP
Other rtl-sdr programs:
.sp
rtl_adsb(1), rtl_fm(1), rtl_sdr(1), rtl_tcp(1), rtl_test(1)
.SH AUTHOR
This manual page was written by Maitland Bottoms
for the Debian project (but may be used by others).
.SH COPYRIGHT
Copyright (c) 2013 A. Maitland Bottoms <bottoms@debian.org>
.LP
This program 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 2 of the License, or
(at your option) any later version.
.LP
This program 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.


================================================
FILE: debian/rtl_fm.1
================================================
.TH "rtl_adsb" 1 "0.5.0" RTL-SDR "User Commands"
.SH NAME
rtl_fm \- a simple FM demodulator for RTL2832 based DVB-T receivers
.SH DESCRIPTION
Uses a re-purposed DVB-T receiver as a software defined
radio to receive narrow band FM signals and demodulate
to audio. Written for and incorporated in the osmocom rtl-sdr project.
.LP
Narrowband FM is commonly used by public service agencies and
commercial dispatch operations in the VHF and UHF bands.
Also can demodulate Wideband FM, as found in the 88-108 MHz FM
broadcast band.
Experimental options include AM, LSB, USB and DSB demodulation.
.LP
Much software is available for the RTL2832. Most of the user-level
packages rely on the librtlsdr library which comes as part of the
rtl-sdr codebase. This codebase contains both the library itself and
also a number of command line tools such as rtl_test, rtl_sdr,
rtl_tcp, and rtl_fm. These command line tools use the library to test
for the existence of RTL2832 devices and to perform basic data
transfer functions to and from the device.
.LP
Because most of the RTL2832 devices are connected using USB, the
librtlsdr library depends on the libusb library to communicate with
the device.
.SH USAGE
With a suitable antenna for receiving the signal attached
to the rtl-sdr supported device, this program will output the
digital audio data decoded from that signal. The data can be
listened to by piping to Sox or aplay applications to play the
stream on the computer sound card.
.SH SYNOPSIS
.B  rtl_fm [-f freq] [-options] [filename]
.SH OPTIONS
.IP "-f frequency_to_tune_to [Hz]"
 use multiple -f for scanning, (requires squelch)
 ranges supported, -f 118M:137M:25k
.IP "[-M modulation (default: fm)]"
 fm, wbfm, raw, am, usb, lsb
 wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp
 raw mode outputs 2x16 bit IQ pairs
.IP "-s sample_rate (default: 24k)"
.IP "-d device_index (default: 0)"
.IP "-g tuner_gain (default: automatic)"
.IP "-l squelch_level (default: 0/off)"
.IP "-o oversampling (default: 1, 4 recommended)"
 for fm squelch is inverted
.IP "[-o oversampling (default: 1, 4 recommended)]"
.IP "-p ppm_error (default: 0)"
.IP "[-E enable_option (default: none)]"
 use multiple -E to enable multiple options
    edge:   enable lower edge tuning
    dc:     enable dc blocking filter
    deemp:  enable de-emphasis filter
    direct: enable direct sampling
    offset: enable offset tuning
.IP "filename ('-' means stdout)"
 omitting the filename also uses stdout
.SH Experimental options
.IP "[-r resample_rate (default: none / same as -s)]"
.IP "[-t squelch_delay (default: 10)]"
  +values will mute/scan, -values will exit
.IP "[-F fir_size (default: off)]"
    enables low-leakage downsample filter
    size can be 0 or 9.  0 has bad roll off
.IP "-A std/fast/lut choose atan math (default: std)"
.IP filename
 (a '-' dumps samples to stdout)
 (omitting the filename also uses stdout)
.SH EXAMPLES
Produces signed 16 bit ints, use Sox or aplay to hear them.
.IP "rtl_fm ... - | play -t raw -r 24k -es -b 16 -c 1 -V1 -"
                  | aplay -r 24k -f S16_LE -t raw -c 1
         -M wbfm  | play -r 32k ...
.IP "rtl_fm ...  -s 22050 - | multimon -t raw /dev/stdin"
.SH SEE ALSO
RTL-SDR wiki documentation:
.B http://sdr.osmocom.org/trac/wiki/rtl-sdr
.LP
Rtl_fm Guide:
.B http://kmkeen.com/rtl-demod-guide/
.LP
.sp
sox(1), play(1), aplay(1)
.LP
Other rtl-sdr programs:
.sp
rtl_adsb(1), rtl_eeprom(1), rtl_sdr(1), rtl_tcp(1), rtl_test(1)
.SH AUTHOR
This manual page was written by Maitland Bottoms
for the Debian project (but may be used by others).
.SH COPYRIGHT
Copyright (c) 2013 A. Maitland Bottoms <bottoms@debian.org>
.LP
This program 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 2 of the License, or
(at your option) any later version.
.LP
Thi
Download .txt
gitextract_nuacun34/

├── .github/
│   └── workflows/
│       └── c-cpp.yml
├── .gitignore
├── .travis.yml
├── AUTHORS
├── CMakeLists.txt
├── COPYING
├── Doxyfile.in
├── Makefile.am
├── README.md
├── README.rtlfm_cmdfile
├── README.rtlsdr_rpc
├── README_improvements.md
├── cmake/
│   ├── Modules/
│   │   ├── FindLibUSB.cmake
│   │   ├── FindThreads.cmake
│   │   └── Version.cmake
│   └── cmake_uninstall.cmake.in
├── configure.ac
├── contrib/
│   └── jenkins.sh
├── cross_build_mingw32.sh
├── cross_build_mingw64.sh
├── debian/
│   ├── .gitignore
│   ├── README.Debian
│   ├── changelog
│   ├── compat
│   ├── control
│   ├── copyright
│   ├── copyright-scan-patterns.yml
│   ├── debianize_armhf
│   ├── debianize_x32
│   ├── debianize_x64
│   ├── heatmap.py
│   ├── librtlsdr-dev.dirs
│   ├── librtlsdr-dev.install
│   ├── librtlsdr0.dirs
│   ├── librtlsdr0.install
│   ├── librtlsdr0.maintscript
│   ├── librtlsdr0.metainfo.xml
│   ├── librtlsdr0.udev
│   ├── rtl-sdr-blacklist.conf
│   ├── rtl-sdr.dirs
│   ├── rtl-sdr.examples
│   ├── rtl-sdr.install
│   ├── rtl-sdr.manpages
│   ├── rtl_adsb.1
│   ├── rtl_eeprom.1
│   ├── rtl_fm.1
│   ├── rtl_power.1
│   ├── rtl_sdr.1
│   ├── rtl_tcp.1
│   ├── rtl_test.1
│   ├── rules
│   ├── source/
│   │   └── format
│   └── watch
├── git-version-gen
├── include/
│   ├── CMakeLists.txt
│   ├── Makefile.am
│   ├── controlThread.h
│   ├── reg_field.h
│   ├── rtl-sdr.h
│   ├── rtl-sdr_export.h
│   ├── rtl_tcp.h
│   ├── rtlsdr_i2c.h
│   ├── rtlsdr_rpc.h
│   ├── rtlsdr_rpc_msg.h
│   ├── tuner_e4k.h
│   ├── tuner_fc0012.h
│   ├── tuner_fc0013.h
│   ├── tuner_fc2580.h
│   └── tuner_r82xx.h
├── install-blacklist.sh
├── librtlsdr.pc.in
├── m4/
│   └── .gitignore
├── mingw-w32-i686.cmake
├── mingw-w64-x64_64.cmake
├── protocol_rtl_tcp.txt
├── rtl-sdr.rules
├── rtlsdr-blacklist.conf
├── src/
│   ├── CMakeLists.txt
│   ├── Makefile.am
│   ├── controlThread.c
│   ├── convenience/
│   │   ├── convenience.c
│   │   ├── convenience.h
│   │   ├── rtl_convenience.c
│   │   ├── rtl_convenience.h
│   │   ├── wavehdr.h
│   │   ├── waveread.c
│   │   ├── waveread.h
│   │   ├── wavewrite.c
│   │   └── wavewrite.h
│   ├── getopt/
│   │   ├── getopt.c
│   │   └── getopt.h
│   ├── librtlsdr.c
│   ├── rtl_adsb.c
│   ├── rtl_app_ver.h.in
│   ├── rtl_biast.c
│   ├── rtl_eeprom.c
│   ├── rtl_fm.c
│   ├── rtl_ir.c
│   ├── rtl_power.c
│   ├── rtl_raw2wav.c
│   ├── rtl_rpcd.c
│   ├── rtl_sdr.c
│   ├── rtl_tcp.c
│   ├── rtl_test.c
│   ├── rtl_udp.c
│   ├── rtl_wavestat.c
│   ├── rtl_wavestream.c
│   ├── rtlsdr.rc.in
│   ├── rtlsdr_rpc.c
│   ├── rtlsdr_rpc_msg.c
│   ├── tuner_e4k.c
│   ├── tuner_fc0012.c
│   ├── tuner_fc0013.c
│   ├── tuner_fc2580.c
│   └── tuner_r82xx.c
└── win32-qtcreator/
    ├── CMakeLists.txt
    └── README.txt
Download .txt
SYMBOL INDEX (731 symbols across 39 files)

FILE: debian/heatmap.py
  function frange (line 18) | def frange(start, stop, step):
  function rgb2 (line 71) | def rgb2(z):
  function rgb3 (line 75) | def rgb3(z):

FILE: include/controlThread.h
  type ctrl_thread_data_t (line 26) | typedef struct

FILE: include/reg_field.h
  type cmd_op (line 7) | enum cmd_op {
  type pstate (line 13) | enum pstate {
  type strbuf (line 18) | struct strbuf {
  type cmd_state (line 23) | struct cmd_state {
  type cmd (line 30) | struct cmd {
  type reg_field (line 39) | struct reg_field {
  type reg_field_ops (line 45) | struct reg_field_ops {
  type reg_field_ops (line 54) | struct reg_field_ops
  type reg_field (line 54) | struct reg_field
  type reg_field_ops (line 55) | struct reg_field_ops
  type reg_field (line 55) | struct reg_field
  type cmd_state (line 56) | struct cmd_state
  type cmd_op (line 56) | enum cmd_op
  type reg_field_ops (line 58) | struct reg_field_ops

FILE: include/rtl-sdr.h
  type rtlsdr_dev_t (line 33) | typedef struct rtlsdr_dev rtlsdr_dev_t;
  type rtlsdr_tuner (line 244) | enum rtlsdr_tuner {
  type rtlsdr_ds_mode (line 454) | enum rtlsdr_ds_mode {
  type rtlsdr_ds_mode (line 471) | enum rtlsdr_ds_mode

FILE: include/rtl_tcp.h
  type RTL_TCP_COMMANDS (line 33) | enum RTL_TCP_COMMANDS {

FILE: include/rtlsdr_rpc_msg.h
  type rtlsdr_rpc_op_t (line 8) | typedef enum
  type rtlsdr_rpc_fmt_t (line 52) | typedef struct
  type rtlsdr_rpc_msg_t (line 62) | typedef struct

FILE: include/tuner_e4k.h
  type e4k_reg (line 31) | enum e4k_reg {
  type e4k_agc_mode (line 144) | enum e4k_agc_mode {
  type e4k_band (line 158) | enum e4k_band {
  type e4k_mixer_filter_bw (line 165) | enum e4k_mixer_filter_bw {
  type e4k_if_filter (line 177) | enum e4k_if_filter {
  type e4k_pll_params (line 182) | struct e4k_pll_params {
  type e4k_state (line 193) | struct e4k_state {
  type e4k_state (line 201) | struct e4k_state
  type e4k_state (line 202) | struct e4k_state
  type e4k_state (line 203) | struct e4k_state
  type e4k_state (line 204) | struct e4k_state
  type e4k_state (line 205) | struct e4k_state
  type e4k_state (line 206) | struct e4k_state
  type e4k_state (line 207) | struct e4k_state
  type e4k_pll_params (line 207) | struct e4k_pll_params
  type e4k_pll_params (line 208) | struct e4k_pll_params
  type e4k_state (line 209) | struct e4k_state
  type e4k_if_filter (line 209) | enum e4k_if_filter
  type e4k_state (line 210) | struct e4k_state
  type e4k_if_filter (line 210) | enum e4k_if_filter
  type e4k_state (line 212) | struct e4k_state
  type e4k_state (line 213) | struct e4k_state
  type e4k_state (line 215) | struct e4k_state
  type e4k_state (line 216) | struct e4k_state
  type e4k_state (line 217) | struct e4k_state
  type e4k_state (line 219) | struct e4k_state
  type e4k_state (line 220) | struct e4k_state
  type e4k_state (line 221) | struct e4k_state

FILE: include/tuner_fc2580.h
  type fc2580_band_type (line 15) | typedef enum {
  type fc2580_fci_result_type (line 22) | typedef enum {
  type FUNCTION_STATUS (line 27) | enum FUNCTION_STATUS
  type FC2580_AGC_MODE (line 95) | enum FC2580_AGC_MODE
  type FC2580_BANDWIDTH_MODE (line 103) | enum FC2580_BANDWIDTH_MODE

FILE: include/tuner_r82xx.h
  type r82xx_chip (line 46) | enum r82xx_chip {
  type r82xx_tuner_type (line 55) | enum r82xx_tuner_type {
  type r82xx_xtal_cap_value (line 61) | enum r82xx_xtal_cap_value {
  type r82xx_config (line 69) | struct r82xx_config {
  type r82xx_priv (line 82) | struct r82xx_priv {
  type r82xx_freq_range (line 136) | struct r82xx_freq_range {
  type r82xx_delivery_system (line 146) | enum r82xx_delivery_system {
  type r82xx_priv (line 153) | struct r82xx_priv
  type r82xx_priv (line 154) | struct r82xx_priv
  type r82xx_priv (line 155) | struct r82xx_priv
  type r82xx_priv (line 156) | struct r82xx_priv
  type r82xx_priv (line 157) | struct r82xx_priv
  type r82xx_priv (line 158) | struct r82xx_priv
  type r82xx_priv (line 159) | struct r82xx_priv
  type r82xx_priv (line 160) | struct r82xx_priv
  type r82xx_priv (line 162) | struct r82xx_priv
  type r82xx_priv (line 164) | struct r82xx_priv
  type r82xx_priv (line 165) | struct r82xx_priv
  type r82xx_priv (line 166) | struct r82xx_priv
  type r82xx_priv (line 168) | struct r82xx_priv
  type r82xx_priv (line 169) | struct r82xx_priv
  type r82xx_priv (line 171) | struct r82xx_priv
  type r82xx_priv (line 172) | struct r82xx_priv
  type r82xx_priv (line 174) | struct r82xx_priv
  type r82xx_priv (line 175) | struct r82xx_priv
  type r82xx_priv (line 177) | struct r82xx_priv
  type r82xx_priv (line 178) | struct r82xx_priv
  type r82xx_priv (line 179) | struct r82xx_priv

FILE: src/controlThread.c
  type socklen_t (line 57) | typedef int socklen_t;
  type timeval (line 84) | struct timeval
  type linger (line 85) | struct linger
  type sockaddr_in (line 89) | struct sockaddr_in
  type sockaddr (line 121) | struct sockaddr
  type sockaddr (line 147) | struct sockaddr

FILE: src/convenience/convenience.c
  function atofs (line 43) | double atofs(char *s)
  function atoft (line 74) | double atoft(char *s)
  function atofp (line 102) | double atofp(char *s)
  type tm (line 123) | struct tm
  type tm (line 123) | struct tm
  function time_t (line 207) | time_t utctimestr_to_time(const char * str, double * fraction) {
  function time_t (line 241) | time_t localtimestr_to_time(const char * str, double * fraction) {
  function executeInBackground (line 260) | void executeInBackground( char * file, char * args, char * searchStr[], ...
  function executeInBackground (line 299) | void executeInBackground( char * file, char * args, char * searchStr[], ...

FILE: src/convenience/rtl_convenience.c
  function nearest_gain (line 44) | int nearest_gain(rtlsdr_dev_t *dev, int target_gain)
  function verbose_set_frequency (line 71) | int verbose_set_frequency(rtlsdr_dev_t *dev, uint64_t frequency)
  function verbose_set_sample_rate (line 83) | int verbose_set_sample_rate(rtlsdr_dev_t *dev, uint32_t samp_rate)
  function verbose_set_bandwidth (line 95) | int verbose_set_bandwidth(rtlsdr_dev_t *dev, uint32_t bandwidth)
  function verbose_direct_sampling (line 114) | int verbose_direct_sampling(rtlsdr_dev_t *dev, int on)
  function verbose_offset_tuning (line 131) | int verbose_offset_tuning(rtlsdr_dev_t *dev)
  function verbose_auto_gain (line 148) | int verbose_auto_gain(rtlsdr_dev_t *dev)
  function verbose_gain_set (line 160) | int verbose_gain_set(rtlsdr_dev_t *dev, int gain)
  function verbose_ppm_set (line 177) | int verbose_ppm_set(rtlsdr_dev_t *dev, int ppm_error)
  function verbose_reset_buffer (line 191) | int verbose_reset_buffer(rtlsdr_dev_t *dev)
  function verbose_device_search (line 200) | int verbose_device_search(char *s)

FILE: src/convenience/wavehdr.h
  type chunk_hdr (line 28) | typedef struct
  type Wind_SystemTime (line 34) | typedef struct
  type riff_chunk (line 47) | typedef struct
  type fmt_chunk (line 54) | typedef struct
  type auxi_chunk (line 66) | typedef struct
  type data_chunk (line 83) | typedef struct
  type waveFileHeader (line 89) | typedef struct

FILE: src/convenience/waveread.c
  function waveGetTimeInt (line 48) | static void waveGetTimeInt(const Wind_SystemTime *p, time_t *tim, double...
  function waveGetStartTime (line 96) | void waveGetStartTime(time_t *tim, double *fraction)
  function waveGetStopTime (line 101) | void waveGetStopTime(time_t *tim, double *fraction)
  function waveReadHeader (line 107) | int  waveReadHeader(FILE * f, uint32_t *srate, uint32_t *freq, int *bits...
  function waveReadSamples (line 235) | int  waveReadSamples(FILE* f,  void * vpData, size_t numSamples, int nee...
  function waveReadFrames (line 260) | int  waveReadFrames(FILE* f,  void * vpData, size_t numFrames, int needC...

FILE: src/convenience/wavewrite.c
  function gettimeofday (line 47) | int gettimeofday(struct timeval *tv, void* ignored)
  function waveSetCurrTime (line 69) | static void waveSetCurrTime(Wind_SystemTime *p)
  function waveSetStartTimeInt (line 92) | static void waveSetStartTimeInt(time_t tim, double fraction, Wind_System...
  function waveSetStartTime (line 107) | void waveSetStartTime(time_t tim, double fraction)
  function wavePrepareHeader (line 114) | void wavePrepareHeader(unsigned samplerate, unsigned freq, int bitsPerSa...
  function waveWriteHeader (line 151) | void waveWriteHeader(unsigned samplerate, unsigned freq, int bitsPerSamp...
  function waveWriteSamples (line 161) | int  waveWriteSamples(FILE* f,  void * vpData, size_t numSamples, int ne...
  function waveWriteFrames (line 186) | int  waveWriteFrames(FILE* f,  void * vpData, size_t numFrames, int need...
  function waveFinalizeHeader (line 212) | int  waveFinalizeHeader(FILE * f)

FILE: src/getopt/getopt.c
  function exchange (line 302) | static void
  function _getopt_internal (line 509) | int
  function getopt (line 975) | int
  function main (line 994) | int

FILE: src/getopt/getopt.h
  type option (line 94) | struct option
  type option (line 152) | struct option
  type option (line 155) | struct option
  type option (line 160) | struct option

FILE: src/librtlsdr.c
  type socklen_t (line 36) | typedef int socklen_t;
  type rtlsdr_tuner_iface_t (line 115) | typedef struct rtlsdr_tuner_iface {
  type rtlsdr_async_status (line 133) | enum rtlsdr_async_status {
  type softagc_mode (line 160) | enum softagc_mode {
  type softagc_stateT (line 167) | enum softagc_stateT {
  type softagc_state (line 175) | struct softagc_state {
  type rtlsdr_dev (line 203) | struct rtlsdr_dev {
  type softagc_stateT (line 294) | enum softagc_stateT
  function e4000_init (line 297) | int e4000_init(void *dev) {
  function e4000_exit (line 304) | int e4000_exit(void *dev) {
  function e4000_set_freq (line 308) | int e4000_set_freq(void *dev, uint32_t freq) {
  function e4000_set_bw (line 313) | int e4000_set_bw(void *dev, int bw, uint32_t *applied_bw, int apply) {
  function e4000_set_gain (line 326) | int e4000_set_gain(void *dev, int gain) {
  function e4000_set_if_gain (line 343) | int e4000_set_if_gain(void *dev, int stage, int gain) {
  function e4000_set_gain_mode (line 347) | int e4000_set_gain_mode(void *dev, int manual) {
  function fc0012_exit (line 352) | int fc0012_exit(void *dev) { return 0; }
  function fc0012_set_freq (line 353) | int fc0012_set_freq(void *dev, uint32_t freq) {
  function fc0012_set_bw (line 358) | int fc0012_set_bw(void *dev, int bw, uint32_t *applied_bw, int apply) { ...
  function fc0012_set_gain_mode (line 359) | int fc0012_set_gain_mode(void *dev, int manual) { return 0; }
  function _fc0012_set_i2c_register (line 360) | int _fc0012_set_i2c_register(void *dev, unsigned i2c_register, unsigned ...
  function _fc0013_init (line 364) | int _fc0013_init(void *dev) { return fc0013_init(dev); }
  function fc0013_exit (line 365) | int fc0013_exit(void *dev) { return 0; }
  function fc0013_set_freq (line 366) | int fc0013_set_freq(void *dev, uint32_t freq) {
  function fc0013_set_bw (line 369) | int fc0013_set_bw(void *dev, int bw, uint32_t *applied_bw, int apply) { ...
  function _fc0013_set_gain (line 370) | int _fc0013_set_gain(void *dev, int gain) { return fc0013_set_lna_gain(d...
  function fc2580_init (line 372) | int fc2580_init(void *dev) { return fc2580_Initialize(dev); }
  function fc2580_exit (line 373) | int fc2580_exit(void *dev) { return 0; }
  function _fc2580_set_freq (line 374) | int _fc2580_set_freq(void *dev, uint32_t freq) {
  function fc2580_set_bw (line 377) | int fc2580_set_bw(void *dev, int bw, uint32_t *applied_bw, int apply) {
  function fc2580_set_gain (line 382) | int fc2580_set_gain(void *dev, int gain) { return 0; }
  function fc2580_set_gain_mode (line 383) | int fc2580_set_gain_mode(void *dev, int manual) { return 0; }
  function r820t_init (line 385) | int r820t_init(void *dev) {
  function r820t_exit (line 405) | int r820t_exit(void *dev) {
  function r820t_set_freq64 (line 410) | int r820t_set_freq64(void *dev, uint64_t freq) {
  function r820t_set_freq (line 427) | int r820t_set_freq(void *dev, uint32_t freq) {
  function r820t_set_bw (line 432) | int r820t_set_bw(void *dev, int bw, uint32_t *applied_bw, int apply) {
  function r820t_set_bw_center (line 464) | int r820t_set_bw_center(void *dev, int32_t if_band_center_freq) {
  function rtlsdr_vga_control (line 495) | int rtlsdr_vga_control( rtlsdr_dev_t* devt, int rc, int rtl_vga_control ) {
  function r820t_set_gain (line 512) | int r820t_set_gain(void *dev, int gain) {
  function r820t_set_gain_ext (line 520) | int r820t_set_gain_ext(void *dev, int lna_gain, int mixer_gain, int vga_...
  function r820t_set_if_mode (line 528) | int r820t_set_if_mode(void *dev, int if_mode) {
  function r820t_set_gain_mode (line 536) | int r820t_set_gain_mode(void *dev, int manual) {
  function r820t_get_i2c_register (line 545) | unsigned r820t_get_i2c_register(void *dev, int reg) {
  function r820t_set_i2c_register (line 549) | int r820t_set_i2c_register(void *dev, unsigned i2c_register, unsigned da...
  function r820t_get_i2c_reg_array (line 556) | int r820t_get_i2c_reg_array(void *dev, unsigned char* data, int len) {
  function r820t_set_sideband (line 561) | int r820t_set_sideband(void *dev, int sideband) {
  function r820t_set_i2c_override (line 598) | int r820t_set_i2c_override(void *dev, unsigned i2c_register, unsigned da...
  type rtlsdr_dongle_t (line 645) | typedef struct rtlsdr_dongle {
  type usb_reg (line 722) | enum usb_reg {
  type sys_reg (line 733) | enum sys_reg {
  type blocks (line 794) | enum blocks {
  function rtlsdr_read_array (line 814) | int rtlsdr_read_array(rtlsdr_dev_t *dev, uint8_t block, uint16_t addr, u...
  function rtlsdr_write_array (line 828) | int rtlsdr_write_array(rtlsdr_dev_t *dev, uint8_t block, uint16_t addr, ...
  function rtlsdr_i2c_write_reg (line 842) | int rtlsdr_i2c_write_reg(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t re...
  function rtlsdr_i2c_read_reg (line 852) | uint8_t rtlsdr_i2c_read_reg(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t...
  function rtlsdr_i2c_write (line 863) | int rtlsdr_i2c_write(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t *buffe...
  function rtlsdr_i2c_read (line 873) | int rtlsdr_i2c_read(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t *buffer...
  function rtlsdr_read_reg (line 883) | uint16_t rtlsdr_read_reg(rtlsdr_dev_t *dev, uint8_t block, uint16_t addr...
  function rtlsdr_write_reg (line 901) | int rtlsdr_write_reg(rtlsdr_dev_t *dev, uint8_t block, uint16_t addr, ui...
  function rtlsdr_demod_read_reg (line 924) | uint16_t rtlsdr_demod_read_reg(rtlsdr_dev_t *dev, uint8_t page, uint16_t...
  function rtlsdr_demod_write_reg (line 943) | int rtlsdr_demod_write_reg(rtlsdr_dev_t *dev, uint8_t page, uint16_t add...
  function rtlsdr_set_gpio_bit (line 967) | int rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val)
  function rtlsdr_set_gpio_output (line 978) | int rtlsdr_set_gpio_output(rtlsdr_dev_t *dev, uint8_t gpio)
  function rtlsdr_get_gpio_bit (line 1002) | int rtlsdr_get_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int *val)
  function rtlsdr_set_gpio_input (line 1012) | int rtlsdr_set_gpio_input(rtlsdr_dev_t *dev, uint8_t gpio)
  function rtlsdr_set_gpio_status (line 1036) | int rtlsdr_set_gpio_status(rtlsdr_dev_t *dev, int *status )
  function rtlsdr_get_gpio_byte (line 1045) | int rtlsdr_get_gpio_byte(rtlsdr_dev_t *dev, int *val)
  function rtlsdr_set_gpio_byte (line 1051) | int rtlsdr_set_gpio_byte(rtlsdr_dev_t *dev, int val)
  function rtlsdr_set_i2c_repeater (line 1058) | void rtlsdr_set_i2c_repeater(rtlsdr_dev_t *dev, int on)
  function rtlsdr_set_fir (line 1078) | int rtlsdr_set_fir(rtlsdr_dev_t *dev)
  function rtlsdr_init_baseband (line 1111) | void rtlsdr_init_baseband(rtlsdr_dev_t *dev)
  function rtlsdr_deinit_baseband (line 1168) | int rtlsdr_deinit_baseband(rtlsdr_dev_t *dev)
  function rtlsdr_set_if_freq (line 1187) | static int rtlsdr_set_if_freq(rtlsdr_dev_t *dev, uint32_t freq)
  function rtlsdr_set_spectrum_inversion (line 1225) | static int rtlsdr_set_spectrum_inversion(rtlsdr_dev_t *dev, int sideband)
  function rtlsdr_set_sample_freq_correction (line 1242) | int rtlsdr_set_sample_freq_correction(rtlsdr_dev_t *dev, int ppm)
  function rtlsdr_set_xtal_freq (line 1256) | int rtlsdr_set_xtal_freq(rtlsdr_dev_t *dev, uint32_t rtl_freq, uint32_t ...
  function rtlsdr_get_xtal_freq (line 1305) | int rtlsdr_get_xtal_freq(rtlsdr_dev_t *dev, uint32_t *rtl_freq, uint32_t...
  function rtlsdr_get_usb_strings (line 1332) | int rtlsdr_get_usb_strings(rtlsdr_dev_t *dev, char *manufact, char *prod...
  function rtlsdr_write_eeprom (line 1380) | int rtlsdr_write_eeprom(rtlsdr_dev_t *dev, uint8_t *data, uint8_t offset...
  function rtlsdr_read_eeprom (line 1425) | int rtlsdr_read_eeprom(rtlsdr_dev_t *dev, uint8_t *data, uint8_t offset,...
  function rtlsdr_set_center_freq (line 1456) | int rtlsdr_set_center_freq(rtlsdr_dev_t *dev, uint32_t freq)
  function rtlsdr_set_center_freq64 (line 1492) | int rtlsdr_set_center_freq64(rtlsdr_dev_t *dev, uint64_t freq)
  function rtlsdr_is_tuner_PLL_locked (line 1533) | int rtlsdr_is_tuner_PLL_locked(rtlsdr_dev_t *dev)
  function rtlsdr_get_center_freq (line 1555) | uint32_t rtlsdr_get_center_freq(rtlsdr_dev_t *dev)
  function rtlsdr_get_center_freq64 (line 1570) | uint64_t rtlsdr_get_center_freq64(rtlsdr_dev_t *dev)
  function rtlsdr_set_freq_correction (line 1585) | int rtlsdr_set_freq_correction(rtlsdr_dev_t *dev, int ppm)
  function rtlsdr_get_freq_correction (line 1621) | int rtlsdr_get_freq_correction(rtlsdr_dev_t *dev)
  function rtlsdr_get_tuner_type (line 1636) | enum rtlsdr_tuner rtlsdr_get_tuner_type(rtlsdr_dev_t *dev)
  function rtlsdr_get_tuner_gains (line 1721) | int rtlsdr_get_tuner_gains(rtlsdr_dev_t *dev, int *gains)
  function rtlsdr_set_and_get_tuner_bandwidth (line 1742) | int rtlsdr_set_and_get_tuner_bandwidth(rtlsdr_dev_t *dev, uint32_t bw, u...
  function rtlsdr_set_tuner_bandwidth (line 1782) | int rtlsdr_set_tuner_bandwidth(rtlsdr_dev_t *dev, uint32_t bw )
  function rtlsdr_set_tuner_band_center (line 1793) | int rtlsdr_set_tuner_band_center(rtlsdr_dev_t *dev, int32_t if_band_cent...
  function rtlsdr_set_tuner_gain (line 1807) | int rtlsdr_set_tuner_gain(rtlsdr_dev_t *dev, int gain)
  function rtlsdr_set_tuner_gain_ext (line 1834) | int rtlsdr_set_tuner_gain_ext(rtlsdr_dev_t *dev, int lna_gain, int mixer...
  function rtlsdr_set_tuner_if_mode (line 1855) | int rtlsdr_set_tuner_if_mode(rtlsdr_dev_t *dev, int if_mode)
  function rtlsdr_get_tuner_gain (line 1876) | int rtlsdr_get_tuner_gain(rtlsdr_dev_t *dev)
  function rtlsdr_set_tuner_if_gain (line 1896) | int rtlsdr_set_tuner_if_gain(rtlsdr_dev_t *dev, int stage, int gain)
  function rtlsdr_set_tuner_gain_mode (line 1925) | int rtlsdr_set_tuner_gain_mode(rtlsdr_dev_t *dev, int mode)
  function rtlsdr_set_tuner_sideband (line 1958) | int rtlsdr_set_tuner_sideband(rtlsdr_dev_t *dev, int sideband)
  function rtlsdr_set_tuner_i2c_register (line 2018) | int rtlsdr_set_tuner_i2c_register(rtlsdr_dev_t *dev, unsigned i2c_regist...
  function rtlsdr_get_tuner_i2c_register (line 2042) | int rtlsdr_get_tuner_i2c_register(rtlsdr_dev_t *dev, unsigned char* data...
  function rtlsdr_set_tuner_i2c_override (line 2058) | int rtlsdr_set_tuner_i2c_override(rtlsdr_dev_t *dev, unsigned i2c_regist...
  function rtlsdr_set_sample_rate (line 2082) | int rtlsdr_set_sample_rate(rtlsdr_dev_t *dev, uint32_t samp_rate)
  function rtlsdr_get_sample_rate (line 2151) | uint32_t rtlsdr_get_sample_rate(rtlsdr_dev_t *dev)
  function rtlsdr_set_testmode (line 2166) | int rtlsdr_set_testmode(rtlsdr_dev_t *dev, int on)
  function rtlsdr_set_agc_mode (line 2185) | int rtlsdr_set_agc_mode(rtlsdr_dev_t *dev, int on)
  function rtlsdr_set_direct_sampling (line 2204) | int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on)
  function rtlsdr_get_direct_sampling (line 2278) | int rtlsdr_get_direct_sampling(rtlsdr_dev_t *dev)
  function rtlsdr_set_ds_mode (line 2293) | int rtlsdr_set_ds_mode(rtlsdr_dev_t *dev, enum rtlsdr_ds_mode mode, uint...
  function rtlsdr_update_ds (line 2330) | static int rtlsdr_update_ds(rtlsdr_dev_t *dev, uint64_t freq)
  function rtlsdr_set_offset_tuning (line 2356) | int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on)
  function rtlsdr_get_offset_tuning (line 2406) | int rtlsdr_get_offset_tuning(rtlsdr_dev_t *dev)
  function rtlsdr_set_dithering (line 2421) | int rtlsdr_set_dithering(rtlsdr_dev_t *dev, int dither)
  function rtlsdr_dongle_t (line 2429) | static rtlsdr_dongle_t *find_known_device(uint16_t vid, uint16_t pid)
  function rtlsdr_get_device_count (line 2444) | uint32_t rtlsdr_get_device_count(void)
  type libusb_device_descriptor (line 2485) | struct libusb_device_descriptor
  function rtlsdr_get_device_usb_strings (line 2526) | int rtlsdr_get_device_usb_strings(uint32_t index, char *manufact,
  function rtlsdr_get_index_by_serial (line 2582) | int rtlsdr_get_index_by_serial(const char *serial)
  function parseNum (line 2614) | static int parseNum(const char * pacNum) {
  function parseFreq (line 2658) | static double parseFreq(char *s)
  function parse (line 2720) | static int parse(char *message, rtlsdr_dev_t *dev)
  type sockaddr (line 3052) | struct sockaddr
  type sockaddr (line 3064) | struct sockaddr
  function rtlsdr_check_dongle_model (line 3088) | int rtlsdr_check_dongle_model(void *dev, char *manufact_check, char *pro...
  function rtlsdr_open (line 3097) | int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index)
  function rtlsdr_close (line 3448) | int rtlsdr_close(rtlsdr_dev_t *dev)
  function rtlsdr_reset_buffer (line 3508) | int rtlsdr_reset_buffer(rtlsdr_dev_t *dev)
  function rtlsdr_process_env_opts (line 3527) | static void rtlsdr_process_env_opts(rtlsdr_dev_t *dev)
  function rtlsdr_read_sync (line 3538) | int rtlsdr_read_sync(rtlsdr_dev_t *dev, void *buf, int len, int *n_read)
  function reactivate_softagc (line 3558) | static int reactivate_softagc(rtlsdr_dev_t *dev, enum softagc_stateT new...
  type softagc_state (line 3586) | struct softagc_state
  function softagc_init (line 3606) | static void softagc_init(rtlsdr_dev_t *dev)
  function softagc_uninit (line 3624) | static void softagc_uninit(rtlsdr_dev_t *dev)
  function softagc (line 3637) | static int softagc(rtlsdr_dev_t *dev, unsigned char *buf, int len)
  function _libusb_callback (line 3814) | static void LIBUSB_CALL _libusb_callback(struct libusb_transfer *xfer)
  function rtlsdr_wait_async (line 3847) | int rtlsdr_wait_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void...
  function _rtlsdr_alloc_async_buffers (line 3862) | static int _rtlsdr_alloc_async_buffers(rtlsdr_dev_t *dev)
  function _rtlsdr_free_async_buffers (line 3926) | static int _rtlsdr_free_async_buffers(rtlsdr_dev_t *dev)
  function rtlsdr_read_async (line 3966) | int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void...
  function rtlsdr_cancel_async (line 4090) | int rtlsdr_cancel_async(rtlsdr_dev_t *dev)
  function rtlsdr_get_tuner_clock (line 4119) | uint32_t rtlsdr_get_tuner_clock(void *dev)
  function rtlsdr_i2c_write_fn (line 4133) | int rtlsdr_i2c_write_fn(void *dev, uint8_t addr, uint8_t *buf, int len)
  function rtlsdr_i2c_read_fn (line 4141) | int rtlsdr_i2c_read_fn(void *dev, uint8_t addr, uint8_t *buf, int len)
  type rtl28xxu_req (line 4156) | struct rtl28xxu_req {
  type rtl28xxu_reg_val (line 4163) | struct rtl28xxu_reg_val {
  type rtl28xxu_reg_val_mask (line 4168) | struct rtl28xxu_reg_val_mask {
  function rtlsdr_read_regs (line 4175) | static int rtlsdr_read_regs(rtlsdr_dev_t *dev, uint8_t block, uint16_t a...
  function rtlsdr_write_reg_mask (line 4189) | static int rtlsdr_write_reg_mask(rtlsdr_dev_t *d, int block, uint16_t re...
  function rtlsdr_ir_query (line 4208) | int rtlsdr_ir_query(rtlsdr_dev_t *d, uint8_t *buf, size_t buf_len)
  function rtlsdr_set_bias_tee_gpio (line 4304) | int rtlsdr_set_bias_tee_gpio(rtlsdr_dev_t *dev, int gpio, int on)
  function rtlsdr_set_bias_tee (line 4321) | int rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on)
  function rtlsdr_set_harmonic_rx (line 4329) | int rtlsdr_set_harmonic_rx(rtlsdr_dev_t *dev, int harmonic)
  function rtlsdr_set_opt_string (line 4407) | int rtlsdr_set_opt_string(rtlsdr_dev_t *dev, const char *opts, int verbose)
  function rtlsdr_get_version (line 4664) | uint32_t rtlsdr_get_version() {

FILE: src/rtl_adsb.c
  function usage (line 92) | void usage(void)
  function BOOL (line 123) | BOOL WINAPI
  function sighandler (line 135) | static void sighandler(int signum)
  function display (line 143) | void display(int *frame, int len)
  function abs8 (line 166) | int abs8(int x)
  function squares_precompute (line 174) | void squares_precompute(void)
  function magnitute (line 185) | int magnitute(uint8_t *buf, int len)
  function single_manchester (line 197) | static inline uint16_t single_manchester(uint16_t a, uint16_t b, uint16_...
  function min16 (line 238) | static inline uint16_t min16(uint16_t a, uint16_t b)
  function max16 (line 243) | static inline uint16_t max16(uint16_t a, uint16_t b)
  function preamble (line 248) | static inline int preamble(uint16_t *buf, int i)
  function manchester (line 274) | void manchester(uint16_t *buf, int len)
  function messages (line 321) | void messages(uint16_t *buf, int len)
  function rtlsdr_callback (line 354) | static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  function main (line 375) | int main(int argc, char **argv)

FILE: src/rtl_biast.c
  function usage (line 38) | void usage(void)
  function main (line 62) | int main(int argc, char **argv)

FILE: src/rtl_eeprom.c
  type rtlsdr_config_t (line 40) | typedef struct rtlsdr_config {
  function dump_config (line 51) | void dump_config(rtlsdr_config_t *conf)
  function usage (line 68) | void usage(void)
  function get_string_descriptor (line 103) | int get_string_descriptor(int pos, uint8_t *data, char *str)
  function set_string_descriptor (line 120) | int set_string_descriptor(int pos, uint8_t *data, char *str)
  function parse_eeprom_to_conf (line 143) | int parse_eeprom_to_conf(rtlsdr_config_t *conf, uint8_t *dat)
  function gen_eeprom_from_conf (line 163) | int gen_eeprom_from_conf(rtlsdr_config_t *conf, uint8_t *dat)
  type configs (line 188) | enum configs {
  function gen_default_conf (line 198) | void gen_default_conf(rtlsdr_config_t *conf, int config)
  function main (line 272) | int main(int argc, char **argv)

FILE: src/rtl_fm.c
  type trigExpr (line 120) | enum trigExpr { crit_IN =0, crit_OUT, crit_LT, crit_GT }
  type cmd_state (line 127) | struct cmd_state
  type dongle_state (line 158) | struct dongle_state
  type demod_state (line 182) | struct demod_state
  type output_state (line 220) | struct output_state
  type controller_state (line 235) | struct controller_state
  type dongle_state (line 250) | struct dongle_state
  type demod_state (line 251) | struct demod_state
  type output_state (line 252) | struct output_state
  type controller_state (line 253) | struct controller_state
  type cmd_state (line 254) | struct cmd_state
  function usage (line 257) | void usage(void)
  function BOOL (line 347) | BOOL WINAPI
  function sighandler (line 359) | static void sighandler(int signum)
  function log2 (line 389) | double log2(double n)
  function rotate16_90 (line 431) | void rotate16_90(int16_t *buf, uint32_t len)
  function rotate16_neg90 (line 443) | void rotate16_neg90(int16_t *buf, uint32_t len)
  function rotate_90 (line 456) | void rotate_90(unsigned char *buf, uint32_t len)
  function rotate_neg90 (line 468) | void rotate_neg90(unsigned char *buf, uint32_t len)
  function low_pass (line 480) | void low_pass(struct demod_state *d)
  function cmd_init (line 513) | static void cmd_init(struct cmd_state *c)
  function toNextCmdLine (line 546) | static int toNextCmdLine(struct cmd_state *c)
  function testTrigCrit (line 659) | static int testTrigCrit(struct cmd_state *c, double level)
  function checkTriggerCommand (line 671) | static void checkTriggerCommand(struct cmd_state *c, unsigned char adcSa...
  function low_pass_simple (line 758) | int low_pass_simple(int16_t *signal2, int len, int step)
  function low_pass_real (line 774) | void low_pass_real(struct demod_state *s)
  function fifth_order (line 796) | void fifth_order(int16_t *data, int length, int16_t *hist)
  function generic_fir (line 827) | void generic_fir(int16_t *data, int length, int *fir, int16_t *hist)
  function multiply (line 855) | void multiply(int ar, int aj, int br, int bj, int *cr, int *cj)
  function polar_discriminant (line 861) | int polar_discriminant(int ar, int aj, int br, int bj)
  function fast_atan2 (line 870) | int fast_atan2(int y, int x)
  function polar_disc_fast (line 893) | int polar_disc_fast(int ar, int aj, int br, int bj)
  function atan_lut_init (line 900) | int atan_lut_init(void)
  function polar_disc_lut (line 913) | int polar_disc_lut(int ar, int aj, int br, int bj)
  function esbensen (line 951) | int esbensen(int ar, int aj, int br, int bj)
  function fm_demod (line 969) | void fm_demod(struct demod_state *fm)
  function am_demod (line 1002) | void am_demod(struct demod_state *fm)
  function usb_demod (line 1020) | void usb_demod(struct demod_state *fm)
  function lsb_demod (line 1032) | void lsb_demod(struct demod_state *fm)
  function raw_demod (line 1044) | void raw_demod(struct demod_state *fm)
  function deemph_filter (line 1053) | void deemph_filter(struct demod_state *fm)
  function dc_block_audio_filter (line 1071) | void dc_block_audio_filter(struct demod_state *fm)
  function dc_block_raw_filter (line 1086) | void dc_block_raw_filter(struct demod_state *fm, int16_t *buf, int len)
  function mad (line 1109) | int mad(int16_t *samples, int len, int step)
  function rms (line 1126) | int rms(int16_t *samples, int len, int step, int omitDCfix)
  function arbitrary_upsample (line 1157) | void arbitrary_upsample(int16_t *buf1, int16_t *buf2, int len1, int len2)
  function arbitrary_downsample (line 1180) | void arbitrary_downsample(int16_t *buf1, int16_t *buf2, int len1, int len2)
  function arbitrary_resample (line 1211) | void arbitrary_resample(int16_t *buf1, int16_t *buf2, int len1, int len2)
  function full_demod (line 1222) | void full_demod(struct demod_state *d)
  function rtlsdr_callback (line 1317) | static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  type dongle_state (line 1397) | struct dongle_state
  type demod_state (line 1404) | struct demod_state
  type output_state (line 1405) | struct output_state
  type cmd_state (line 1406) | struct cmd_state
  type output_state (line 1444) | struct output_state
  function optimal_settings (line 1466) | static void optimal_settings(uint64_t freq, uint32_t rate)
  type controller_state (line 1515) | struct controller_state
  type cmd_state (line 1516) | struct cmd_state
  function frequency_range (line 1682) | void frequency_range(struct controller_state *s, char *arg)
  function dongle_init (line 1702) | void dongle_init(struct dongle_state *s)
  function demod_init (line 1718) | void demod_init(struct demod_state *s)
  function demod_cleanup (line 1752) | void demod_cleanup(struct demod_state *s)
  function output_init (line 1759) | void output_init(struct output_state *s)
  function output_cleanup (line 1767) | void output_cleanup(struct output_state *s)
  function controller_init (line 1774) | void controller_init(struct controller_state *s)
  function controller_cleanup (line 1785) | void controller_cleanup(struct controller_state *s)
  function sanity_checks (line 1791) | void sanity_checks(void)
  function main (line 1810) | int main(int argc, char **argv)

FILE: src/rtl_ir.c
  type dongle_state (line 57) | struct dongle_state
  function dongle_init (line 64) | void dongle_init(struct dongle_state *s)
  type dongle_state (line 69) | struct dongle_state
  function usage (line 71) | void usage(void)
  function BOOL (line 94) | BOOL WINAPI
  function sighandler (line 106) | static void sighandler(int signum)
  function main (line 115) | int main(int argc, char **argv) {

FILE: src/rtl_power.c
  type tuning_state (line 94) | struct tuning_state
  type time_modes (line 115) | enum time_modes { VERBOSE_TIME, EPOCH_TIME }
  type tuning_state (line 119) | struct tuning_state
  type time_modes (line 125) | enum time_modes
  function usage (line 127) | void usage(void)
  function multi_bail (line 188) | void multi_bail(void)
  function BOOL (line 201) | BOOL WINAPI
  function sighandler (line 212) | static void sighandler(int signum)
  function log2 (line 241) | double log2(double n)
  function sine_table (line 253) | void sine_table(int size)
  function FIX_MPY (line 269) | static inline int16_t FIX_MPY(int16_t a, int16_t b)
  function fix_fft (line 277) | int fix_fft(int16_t iq[], int m)
  function rectangle (line 335) | double rectangle(int i, int length)
  function hamming (line 340) | double hamming(int i, int length)
  function blackman (line 350) | double blackman(int i, int length)
  function blackman_harris (line 361) | double blackman_harris(int i, int length)
  function hann_poisson (line 373) | double hann_poisson(int i, int length)
  function youssef (line 383) | double youssef(int i, int length)
  function kaiser (line 398) | double kaiser(int i, int length)
  function bartlett (line 404) | double bartlett(int i, int length)
  function rms_power (line 416) | void rms_power(struct tuning_state *ts)
  function frequency_range (line 444) | void frequency_range(char *arg, double crop)
  function retune (line 549) | void retune(rtlsdr_dev_t *d, uint64_t freq)
  function fifth_order (line 561) | void fifth_order(int16_t *data, int length)
  function remove_dc (line 588) | void remove_dc(int16_t *data, int length)
  function generic_fir (line 605) | void generic_fir(int16_t *data, int length, int *fir)
  function downsample_iq (line 635) | void downsample_iq(int16_t *data, int length)
  function real_conj (line 643) | int64_t real_conj(int16_t real, int16_t imag)
  function scanner (line 649) | void scanner(void)
  function csv_dbm (line 730) | void csv_dbm(struct tuning_state *ts)
  function main (line 775) | int main(int argc, char **argv)

FILE: src/rtl_raw2wav.c
  function usage (line 54) | void usage(void)
  function BOOL (line 74) | BOOL WINAPI
  function sighandler (line 85) | static void sighandler(int signum)
  function main (line 93) | int main(int argc, char **argv)

FILE: src/rtl_rpcd.c
  type rpcd_t (line 40) | typedef struct
  function resolve_ip_addr (line 60) | static int resolve_ip_addr
  function open_nonblock_socket (line 98) | static int open_nonblock_socket
  function init_rpcd (line 129) | static int init_rpcd(rpcd_t* rpcd, const char* addr, const char* port)
  function fini_rpcd (line 190) | static int fini_rpcd(rpcd_t* rpcd)
  function recv_all (line 208) | static int recv_all(int fd, uint8_t* buf, size_t size)
  function send_all_check_recv (line 240) | static int send_all_check_recv
  function send_all (line 295) | static int send_all(int fd, const uint8_t* buf, size_t size)
  function recv_msg (line 300) | static int recv_msg(int fd, rtlsdr_rpc_msg_t* m)
  function send_msg (line 328) | static int send_msg(int fd, rtlsdr_rpc_msg_t* m)
  function recv_query (line 333) | static int recv_query(rpcd_t* rpcd, rtlsdr_rpc_msg_t** q)
  function send_reply (line 342) | static int send_reply(rpcd_t* rpcd, rtlsdr_rpc_msg_t* r)
  function read_async_cb (line 347) | static void read_async_cb
  function handle_query (line 424) | static int handle_query
  function do_rpcd (line 1057) | static int do_rpcd(rpcd_t* rpcd)
  function usage (line 1125) | void usage(void)
  type linger (line 1150) | struct linger
  type sockaddr_in (line 1153) | struct sockaddr_in
  type timeval (line 1157) | struct timeval
  type sockaddr (line 1177) | struct sockaddr
  type sockaddr (line 1184) | struct sockaddr
  function main (line 1242) | int main(int ac, char** av)

FILE: src/rtl_sdr.c
  function usage (line 51) | void usage(void)
  function BOOL (line 79) | BOOL WINAPI
  function sighandler (line 91) | static void sighandler(int signum)
  function rtlsdr_callback (line 99) | static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  function main (line 137) | int main(int argc, char **argv)

FILE: src/rtl_tcp.c
  type socklen_t (line 54) | typedef int socklen_t;
  type llist (line 77) | struct llist {
  type dongle_info_t (line 83) | typedef struct { /* structure size must be multiple of 2 bytes */
  type llist (line 96) | struct llist
  function usage (line 101) | void usage(void)
  function gettimeofday (line 135) | int gettimeofday(struct timeval *tv, void* ignored)
  function BOOL (line 156) | BOOL WINAPI
  function sighandler (line 168) | static void sighandler(int signum)
  function rtlsdr_callback (line 176) | void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  type llist (line 226) | struct llist
  type timeval (line 228) | struct timeval
  type timespec (line 229) | struct timespec
  type timeval (line 230) | struct timeval
  function set_gain_by_index (line 283) | static int set_gain_by_index(rtlsdr_dev_t *_dev, unsigned int index)
  function check_tuner_pll (line 310) | static void check_tuner_pll(rtlsdr_dev_t *dev, int *tuner_unsupported, i...
  type command (line 342) | struct command{
  type command (line 353) | struct command
  type timeval (line 354) | struct timeval
  type ir_thread_data (line 663) | struct ir_thread_data
  type linger (line 674) | struct linger
  type sockaddr_in (line 677) | struct sockaddr_in
  type ir_thread_data (line 682) | struct ir_thread_data
  type ir_thread_data (line 682) | struct ir_thread_data
  type sockaddr (line 699) | struct sockaddr
  type sockaddr (line 706) | struct sockaddr
  function main (line 735) | int main(int argc, char **argv)

FILE: src/rtl_test.c
  type time_generic (line 63) | struct time_generic
  function usage (line 95) | void usage(void)
  function BOOL (line 122) | BOOL WINAPI
  function sighandler (line 134) | static void sighandler(int signum)
  function underrun_test (line 142) | static void underrun_test(unsigned char *buf, uint32_t len, int mute)
  function ppm_gettime (line 190) | static int ppm_gettime(struct time_generic *tg)
  function ppm_gettime (line 211) | static int ppm_gettime(struct time_generic *tg)
  function ppm_report (line 227) | static int ppm_report(uint64_t nsamples, uint64_t interval)
  function ppm_test (line 236) | static void ppm_test(uint32_t len)
  function rtlsdr_callback (line 288) | static void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  function max_step (line 297) | static uint32_t max_step(uint32_t freq) {
  function min_step (line 306) | static uint32_t min_step(uint32_t freq) {
  function report_band_start (line 310) | static void report_band_start(uint32_t start) {
  function report_band (line 315) | static void report_band(uint32_t low, uint32_t high) {
  function set_center_freq_wait (line 321) | static int set_center_freq_wait(rtlsdr_dev_t *dev, uint32_t freq, const ...
  function tuner_benchmark (line 343) | void tuner_benchmark(uint32_t beg_freq, uint32_t end_freq)
  function main (line 504) | int main(int argc, char **argv)

FILE: src/rtl_udp.c
  type socklen_t (line 54) | typedef int socklen_t;
  type sockaddr_in (line 64) | struct sockaddr_in
  type llist (line 74) | struct llist {
  type dongle_info_t (line 80) | typedef struct { /* structure size must be multiple of 2 bytes */
  type llist (line 93) | struct llist
  function usage (line 98) | void usage(void)
  function gettimeofday (line 131) | int gettimeofday(struct timeval *tv, void* ignored)
  function BOOL (line 152) | BOOL WINAPI
  function sighandler (line 164) | static void sighandler(int signum)
  function rtlsdr_callback (line 172) | void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx)
  type llist (line 222) | struct llist
  type timeval (line 224) | struct timeval
  type timespec (line 225) | struct timespec
  type timeval (line 226) | struct timeval
  type sockaddr (line 261) | struct sockaddr
  function set_gain_by_index (line 279) | static int set_gain_by_index(rtlsdr_dev_t *_dev, unsigned int index)
  function check_tuner_pll (line 306) | static void check_tuner_pll(rtlsdr_dev_t *dev, int *tuner_unsupported, i...
  type command (line 338) | struct command{
  type command (line 349) | struct command
  type timeval (line 350) | struct timeval
  type ir_thread_data (line 656) | struct ir_thread_data
  type linger (line 667) | struct linger
  type sockaddr_in (line 670) | struct sockaddr_in
  type ir_thread_data (line 675) | struct ir_thread_data
  type ir_thread_data (line 675) | struct ir_thread_data
  type sockaddr (line 692) | struct sockaddr
  type sockaddr (line 699) | struct sockaddr
  function main (line 728) | int main(int argc, char **argv)

FILE: src/rtl_wavestat.c
  function usage (line 54) | void usage(void)
  function BOOL (line 79) | BOOL WINAPI
  function sighandler (line 90) | static void sighandler(int signum)
  function main (line 98) | int main(int argc, char **argv)

FILE: src/rtl_wavestream.c
  function usage (line 60) | void usage(void)
  function BOOL (line 75) | BOOL WINAPI
  function sighandler (line 86) | static void sighandler(int signum)
  function main (line 94) | int main(int argc, char **argv)

FILE: src/rtlsdr_rpc.c
  type rtlsdr_rpc_cli_t (line 34) | typedef struct
  type rtlsdr_rpc_dev_t (line 59) | typedef struct rtlsdr_rpc_dev
  function resolve_ip_addr (line 66) | static int resolve_ip_addr
  function open_socket (line 104) | static int open_socket
  function init_cli (line 129) | static int init_cli(rtlsdr_rpc_cli_t* cli)
  function fini_cli (line 222) | __attribute__((unused))
  function alloc_qr (line 243) | static int alloc_qr
  function free_qr (line 272) | static void free_qr
  function recv_all (line 281) | static int recv_all(int fd, uint8_t* buf, size_t size)
  function send_all (line 313) | static int send_all(int fd, const uint8_t* buf, size_t size)
  function recv_msg (line 345) | static int recv_msg
  function send_msg (line 400) | static int send_msg(rtlsdr_rpc_cli_t* cli, rtlsdr_rpc_msg_t* m)
  function send_recv_msg (line 413) | static int send_recv_msg
  function send_flush_msgs (line 425) | static int send_flush_msgs
  function rtlsdr_rpc_get_device_count (line 452) | uint32_t rtlsdr_rpc_get_device_count(void)
  function rtlsdr_rpc_get_device_usb_strings (line 504) | int rtlsdr_rpc_get_device_usb_strings
  function rtlsdr_rpc_get_index_by_serial (line 538) | int rtlsdr_rpc_get_index_by_serial(const char* serial)
  function rtlsdr_rpc_open (line 562) | int rtlsdr_rpc_open(void** devp, uint32_t index)
  function rtlsdr_rpc_close (line 602) | int rtlsdr_rpc_close(void* devp)
  function rtlsdr_rpc_set_xtal_freq (line 627) | int rtlsdr_rpc_set_xtal_freq
  function rtlsdr_rpc_get_xtal_freq (line 654) | int rtlsdr_rpc_get_xtal_freq
  function rtlsdr_rpc_get_usb_strings (line 691) | int rtlsdr_rpc_get_usb_strings
  function rtlsdr_rpc_write_eeprom (line 726) | int rtlsdr_rpc_write_eeprom
  function rtlsdr_rpc_read_eeprom (line 733) | int rtlsdr_rpc_read_eeprom
  function rtlsdr_rpc_set_center_freq (line 740) | int rtlsdr_rpc_set_center_freq(void* devp, uint32_t freq)
  function rtlsdr_rpc_get_center_freq (line 765) | uint32_t rtlsdr_rpc_get_center_freq(void* devp)
  function rtlsdr_rpc_set_freq_correction (line 789) | int rtlsdr_rpc_set_freq_correction(void* devp, int ppm)
  function rtlsdr_rpc_get_freq_correction (line 814) | int rtlsdr_rpc_get_freq_correction(void* devp)
  function rtlsdr_rpc_get_tuner_type (line 837) | int rtlsdr_rpc_get_tuner_type(void* devp)
  function rtlsdr_rpc_get_tuner_gains (line 860) | int rtlsdr_rpc_get_tuner_gains(void* devp, int* gainsp)
  function rtlsdr_rpc_set_tuner_gain (line 905) | int rtlsdr_rpc_set_tuner_gain(void* devp, int gain)
  function rtlsdr_rpc_set_and_get_tuner_bandwidth (line 930) | int rtlsdr_rpc_set_and_get_tuner_bandwidth(void* devp, uint32_t bw, uint...
  function rtlsdr_rpc_get_tuner_gain (line 957) | int rtlsdr_rpc_get_tuner_gain(void* devp)
  function rtlsdr_rpc_set_tuner_if_gain (line 980) | int rtlsdr_rpc_set_tuner_if_gain(void* devp, int stage, int gain)
  function rtlsdr_rpc_set_tuner_gain_mode (line 1006) | int rtlsdr_rpc_set_tuner_gain_mode(void* devp, int manual)
  function rtlsdr_rpc_set_sample_rate (line 1031) | int rtlsdr_rpc_set_sample_rate(void* devp, uint32_t rate)
  function rtlsdr_rpc_get_sample_rate (line 1056) | uint32_t rtlsdr_rpc_get_sample_rate(void* devp)
  function rtlsdr_rpc_set_testmode (line 1080) | int rtlsdr_rpc_set_testmode(void* devp, int on)
  function rtlsdr_rpc_set_agc_mode (line 1105) | int rtlsdr_rpc_set_agc_mode(void* devp, int on)
  function rtlsdr_rpc_set_direct_sampling (line 1130) | int rtlsdr_rpc_set_direct_sampling(void* devp, int on)
  function rtlsdr_rpc_get_direct_sampling (line 1155) | int rtlsdr_rpc_get_direct_sampling(void* devp)
  function rtlsdr_rpc_set_offset_tuning (line 1178) | int rtlsdr_rpc_set_offset_tuning(void* devp, int on)
  function rtlsdr_rpc_get_offset_tuning (line 1203) | int rtlsdr_rpc_get_offset_tuning(void* devp)
  function rtlsdr_rpc_reset_buffer (line 1226) | int rtlsdr_rpc_reset_buffer(void* devp)
  function rtlsdr_rpc_read_sync (line 1250) | int rtlsdr_rpc_read_sync
  function rtlsdr_rpc_read_async (line 1292) | int rtlsdr_rpc_read_async
  function rtlsdr_rpc_wait_async (line 1348) | int rtlsdr_rpc_wait_async
  function rtlsdr_rpc_cancel_async (line 1357) | int rtlsdr_rpc_cancel_async(void* devp)
  function rtlsdr_rpc_is_enabled (line 1365) | unsigned int rtlsdr_rpc_is_enabled(void)

FILE: src/rtlsdr_rpc_msg.c
  function rtlsdr_rpc_msg_init (line 19) | int rtlsdr_rpc_msg_init(rtlsdr_rpc_msg_t* msg, size_t data_size)
  function rtlsdr_rpc_msg_fini (line 35) | int rtlsdr_rpc_msg_fini(rtlsdr_rpc_msg_t* msg)
  function rtlsdr_rpc_msg_reset (line 41) | void rtlsdr_rpc_msg_reset(rtlsdr_rpc_msg_t* msg)
  function rtlsdr_rpc_msg_realloc (line 46) | int rtlsdr_rpc_msg_realloc(rtlsdr_rpc_msg_t* msg, size_t size)
  function check_size (line 63) | static int check_size(const rtlsdr_rpc_msg_t* msg, size_t size)
  function check_size_or_realloc (line 69) | static int check_size_or_realloc(rtlsdr_rpc_msg_t* msg, size_t size)
  function pop_uint32 (line 89) | static int pop_uint32(rtlsdr_rpc_msg_t* msg, uint32_t* x)
  function push_mem_safe (line 101) | static void push_mem_safe(rtlsdr_rpc_msg_t* msg, const uint8_t* x, size_...
  function push_uint32_safe (line 107) | static void push_uint32_safe(rtlsdr_rpc_msg_t* msg, uint32_t x)
  function rtlsdr_rpc_msg_push_int32 (line 116) | int rtlsdr_rpc_msg_push_int32(rtlsdr_rpc_msg_t* msg, int x)
  function rtlsdr_rpc_msg_push_uint32 (line 123) | int rtlsdr_rpc_msg_push_uint32(rtlsdr_rpc_msg_t* msg, uint32_t x)
  function rtlsdr_rpc_msg_push_uint32_safe (line 130) | void rtlsdr_rpc_msg_push_uint32_safe(rtlsdr_rpc_msg_t* msg, uint32_t x)
  function rtlsdr_rpc_msg_push_str (line 135) | int rtlsdr_rpc_msg_push_str(rtlsdr_rpc_msg_t* msg, const char* s)
  function rtlsdr_rpc_msg_push_buf (line 142) | int rtlsdr_rpc_msg_push_buf(rtlsdr_rpc_msg_t* msg, const uint8_t* buf, s...
  function rtlsdr_rpc_msg_skip_safe (line 151) | void rtlsdr_rpc_msg_skip_safe(rtlsdr_rpc_msg_t* msg, size_t size)
  function rtlsdr_rpc_msg_pop_int32 (line 156) | int rtlsdr_rpc_msg_pop_int32(rtlsdr_rpc_msg_t* msg, int32_t* x)
  function rtlsdr_rpc_msg_pop_uint32 (line 161) | int rtlsdr_rpc_msg_pop_uint32(rtlsdr_rpc_msg_t* msg, uint32_t* x)
  function rtlsdr_rpc_msg_pop_str (line 166) | int rtlsdr_rpc_msg_pop_str(rtlsdr_rpc_msg_t* msg, const char** s)
  function rtlsdr_rpc_msg_pop_buf (line 184) | int rtlsdr_rpc_msg_pop_buf
  function put_uint8 (line 200) | static void put_uint8(void* p, uint8_t x)
  function put_uint16 (line 205) | static void put_uint16(void* p, uint16_t x)
  function put_uint32 (line 214) | static void put_uint32(void* p, uint32_t x)
  function get_uint8 (line 223) | static uint8_t get_uint8(const void* p)
  function get_uint16 (line 230) | static uint16_t get_uint16(const void* p)
  function get_uint32 (line 241) | static uint32_t get_uint32(const void* p)
  function rtlsdr_rpc_msg_set_size (line 252) | void rtlsdr_rpc_msg_set_size(rtlsdr_rpc_msg_t* msg, size_t size)
  function rtlsdr_rpc_msg_get_size (line 258) | size_t rtlsdr_rpc_msg_get_size(const rtlsdr_rpc_msg_t* msg)
  function rtlsdr_rpc_msg_set_op (line 264) | void rtlsdr_rpc_msg_set_op(rtlsdr_rpc_msg_t* msg, rtlsdr_rpc_op_t op)
  function rtlsdr_rpc_op_t (line 270) | rtlsdr_rpc_op_t rtlsdr_rpc_msg_get_op(const rtlsdr_rpc_msg_t* msg)
  function rtlsdr_rpc_msg_set_id (line 276) | void rtlsdr_rpc_msg_set_id(rtlsdr_rpc_msg_t* msg, uint8_t id)
  function rtlsdr_rpc_msg_get_id (line 282) | uint8_t rtlsdr_rpc_msg_get_id(const rtlsdr_rpc_msg_t* msg)
  function rtlsdr_rpc_msg_set_err (line 288) | void rtlsdr_rpc_msg_set_err(rtlsdr_rpc_msg_t* msg, int err)
  function rtlsdr_rpc_msg_get_err (line 294) | int rtlsdr_rpc_msg_get_err(const rtlsdr_rpc_msg_t* msg)

FILE: src/tuner_e4k.c
  function unsigned_delta (line 46) | uint32_t unsigned_delta(uint32_t a, uint32_t b)
  function e4k_reg_write (line 68) | static int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val)
  function e4k_reg_read (line 84) | static int e4k_reg_read(struct e4k_state *e4k, uint8_t reg)
  function e4k_reg_set_mask (line 104) | static int e4k_reg_set_mask(struct e4k_state *e4k, uint8_t reg,
  function e4k_field_write (line 121) | static int e4k_field_write(struct e4k_state *e4k, const struct reg_field...
  function e4k_field_read (line 140) | static int e4k_field_read(struct e4k_state *e4k, const struct reg_field ...
  function closest_arr_idx (line 170) | static int closest_arr_idx(const uint32_t *arr, unsigned int arr_size, u...
  function choose_rf_filter (line 189) | static int choose_rf_filter(enum e4k_band band, uint32_t freq)
  function e4k_rf_filter_set (line 217) | int e4k_rf_filter_set(struct e4k_state *e4k)
  type reg_field (line 268) | struct reg_field
  function find_if_bw (line 280) | static int find_if_bw(enum e4k_if_filter filter, uint32_t bw)
  function e4k_if_filter_bw_set (line 295) | int e4k_if_filter_bw_set(struct e4k_state *e4k, enum e4k_if_filter filter,
  function e4k_if_filter_chan_enable (line 316) | int e4k_if_filter_chan_enable(struct e4k_state *e4k, int on)
  function e4k_if_filter_bw_get (line 322) | int e4k_if_filter_bw_get(struct e4k_state *e4k, enum e4k_if_filter filter)
  type pll_settings (line 358) | struct pll_settings {
  type pll_settings (line 364) | struct pll_settings
  function is_fvco_valid (line 377) | static int is_fvco_valid(uint32_t fvco_z)
  function is_fosc_valid (line 389) | static int is_fosc_valid(uint32_t fosc)
  function is_z_valid (line 399) | static int is_z_valid(uint32_t z)
  function use_3ph_mixing (line 410) | static int use_3ph_mixing(uint32_t flo)
  function compute_fvco (line 421) | static uint64_t compute_fvco(uint32_t f_osc, uint8_t z, uint16_t x)
  function compute_flo (line 445) | static uint32_t compute_flo(uint32_t f_osc, uint8_t z, uint16_t x, uint8...
  function e4k_band_set (line 454) | static int e4k_band_set(struct e4k_state *e4k, enum e4k_band band)
  function e4k_compute_pll_params (line 486) | uint32_t e4k_compute_pll_params(struct e4k_pll_params *oscp, uint32_t fo...
  function e4k_tune_params (line 538) | int e4k_tune_params(struct e4k_state *e4k, struct e4k_pll_params *p)
  function e4k_tune_freq (line 577) | int e4k_tune_freq(struct e4k_state *e4k, uint32_t freq)
  type reg_field (line 641) | struct reg_field
  function e4k_set_lna_gain (line 671) | int e4k_set_lna_gain(struct e4k_state *e4k, int32_t gain)
  function e4k_set_enh_gain (line 683) | int e4k_set_enh_gain(struct e4k_state *e4k, int32_t gain)
  function e4k_enable_manual_gain (line 701) | int e4k_enable_manual_gain(struct e4k_state *e4k, uint8_t manual)
  function find_stage_gain (line 721) | static int find_stage_gain(uint8_t stage, int8_t val)
  function e4k_if_gain_set (line 744) | int e4k_if_gain_set(struct e4k_state *e4k, uint8_t stage, int8_t value)
  function e4k_mixer_gain_set (line 761) | int e4k_mixer_gain_set(struct e4k_state *e4k, int8_t value)
  function e4k_commonmode_set (line 779) | int e4k_commonmode_set(struct e4k_state *e4k, int8_t value)
  function e4k_manual_dc_offset (line 792) | int e4k_manual_dc_offset(struct e4k_state *e4k, int8_t iofs, int8_t iran...
  function e4k_dc_offset_calibrate (line 820) | int e4k_dc_offset_calibrate(struct e4k_state *e4k)
  type gain_comb (line 833) | struct gain_comb {
  type gain_comb (line 839) | struct gain_comb
  function e4k_dc_offset_gen_table (line 848) | int e4k_dc_offset_gen_table(struct e4k_state *e4k)
  function e4k_standby (line 902) | int e4k_standby(struct e4k_state *e4k, int enable)
  function magic_init (line 913) | static int magic_init(struct e4k_state *e4k)
  function e4k_init (line 929) | int e4k_init(struct e4k_state *e4k)

FILE: src/tuner_fc0012.c
  function fc0012_writereg (line 33) | static int fc0012_writereg(void *dev, uint8_t reg, uint8_t val)
  function fc0012_readreg (line 45) | static int fc0012_readreg(void *dev, uint8_t reg, uint8_t *val)
  function fc0012_set_i2c_register (line 61) | int fc0012_set_i2c_register(void *dev, unsigned i2c_register, unsigned d...
  function fc0012_get_i2c_register (line 68) | int fc0012_get_i2c_register(void *dev, unsigned char* data, int len)
  function print_registers (line 97) | static int print_registers(void *dev)
  function fc0012_init (line 148) | int fc0012_init(void *dev)
  function fc0012_set_params (line 205) | int fc0012_set_params(void *dev, uint32_t freq, uint32_t bandwidth)
  function fc0012_set_gain (line 373) | int fc0012_set_gain(void *dev, int gain)

FILE: src/tuner_fc0013.c
  function fc0013_writereg (line 36) | static int fc0013_writereg(void *dev, uint8_t reg, uint8_t val)
  function fc0013_readreg (line 48) | static int fc0013_readreg(void *dev, uint8_t reg, uint8_t *val)
  function fc0013_init (line 63) | int fc0013_init(void *dev)
  function fc0013_rc_cal_add (line 118) | int fc0013_rc_cal_add(void *dev, int rc_val)
  function fc0013_rc_cal_reset (line 155) | int fc0013_rc_cal_reset(void *dev)
  function fc0013_set_vhf_track (line 166) | static int fc0013_set_vhf_track(void *dev, uint32_t freq)
  function fc0013_set_params (line 197) | int fc0013_set_params(void *dev, uint32_t freq, uint32_t bandwidth)
  function fc0013_set_gain_mode (line 434) | int fc0013_set_gain_mode(void *dev, int manual)
  function fc0013_set_lna_gain (line 483) | int fc0013_set_lna_gain(void *dev, int gain)

FILE: src/tuner_fc2580.c
  function fc2580_fci_result_type (line 19) | fc2580_fci_result_type fc2580_i2c_write(void *pTuner, unsigned char reg,...
  function fc2580_fci_result_type (line 32) | fc2580_fci_result_type fc2580_i2c_read(void *pTuner, unsigned char reg, ...
  function fc2580_Initialize (line 47) | int fc2580_Initialize(void *pTuner)
  function fc2580_SetRfFreqHz (line 70) | int fc2580_SetRfFreqHz(void *pTuner, unsigned long RfFreqHz)
  function fc2580_SetBandwidthMode (line 95) | int fc2580_SetBandwidthMode(void *pTuner, int BandwidthMode)
  function fc2580_wait_msec (line 113) | void fc2580_wait_msec(void *pTuner, int a)
  function fc2580_fci_result_type (line 135) | fc2580_fci_result_type fc2580_set_init(void *pTuner, int ifagc_mode, uns...
  function fc2580_fci_result_type (line 184) | fc2580_fci_result_type fc2580_set_freq(void *pTuner, unsigned int f_lo, ...
  function fc2580_fci_result_type (line 361) | fc2580_fci_result_type fc2580_set_filter(void *pTuner, unsigned char fil...

FILE: src/tuner_r82xx.c
  type r82xx_freq_range (line 367) | struct r82xx_freq_range
  function shadow_store (line 542) | static void shadow_store(struct r82xx_priv *priv, uint8_t reg, const uin...
  function r82xx_write_arr (line 559) | static int r82xx_write_arr(struct r82xx_priv *priv, uint8_t reg, const u...
  function r82xx_write_reg (line 616) | static int r82xx_write_reg(struct r82xx_priv *priv, uint8_t reg, uint8_t...
  function r82xx_read_cache_reg (line 621) | int r82xx_read_cache_reg(struct r82xx_priv *priv, int reg)
  function r82xx_write_reg_mask (line 631) | int r82xx_write_reg_mask(struct r82xx_priv *priv, uint8_t reg, uint8_t v...
  function r82xx_write_reg_mask_ext (line 643) | int r82xx_write_reg_mask_ext(struct r82xx_priv *priv, uint8_t reg, uint8...
  function r82xx_bitrev (line 661) | static uint8_t r82xx_bitrev(uint8_t byte)
  function r82xx_read (line 669) | static int r82xx_read(struct r82xx_priv *priv, uint8_t reg, uint8_t *val...
  function print_registers (line 692) | static void print_registers(struct r82xx_priv *priv)
  function r82xx_set_mux (line 713) | static int r82xx_set_mux(struct r82xx_priv *priv, uint64_t freq)
  function r82xx_set_pll_yc (line 767) | static int r82xx_set_pll_yc(struct r82xx_priv *priv, uint32_t freq)
  function r82xx_set_pll (line 913) | static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
  function r82xx_is_tuner_locked (line 1153) | int r82xx_is_tuner_locked(struct r82xx_priv *priv)
  function r82xx_sysfreq_sel (line 1175) | static int r82xx_sysfreq_sel(struct r82xx_priv *priv,
  function r82xx_set_tv_standard (line 1253) | static int r82xx_set_tv_standard(struct r82xx_priv *priv,
  function r82xx_get_rf_gain_index (line 1354) | static void r82xx_get_rf_gain_index(int gain, int *ptr_lna_index, int *p...
  function r82xx_get_if_gain_index (line 1372) | static int r82xx_get_if_gain_index(int gain)
  function r82xx_get_lna_gain_from_index (line 1385) | static int r82xx_get_lna_gain_from_index(int lna_index)
  function r82xx_get_mixer_gain_from_index (line 1395) | static int r82xx_get_mixer_gain_from_index(int mixer_index)
  function r82xx_get_vga_gain_from_index (line 1405) | static int r82xx_get_vga_gain_from_index(int vga_index)
  function r82xx_set_gain (line 1417) | int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain,
  function r82xx_get_rf_gain (line 1491) | int r82xx_get_rf_gain(struct r82xx_priv *priv)
  function r82xx_get_if_gain (line 1500) | int r82xx_get_if_gain(struct r82xx_priv *priv)
  function r82xx_set_if_mode (line 1508) | int r82xx_set_if_mode(struct r82xx_priv *priv, int if_mode, int *rtl_vga...
  function r82xx_set_i2c_register (line 1575) | int r82xx_set_i2c_register(struct r82xx_priv *priv, unsigned i2c_registe...
  function r82xx_get_i2c_register (line 1584) | int r82xx_get_i2c_register(struct r82xx_priv *priv, unsigned char* data,...
  function r82xx_set_i2c_override (line 1603) | int r82xx_set_i2c_override(struct r82xx_priv *priv, unsigned i2c_registe...
  type IFinfo (line 1649) | struct IFinfo
  type IFinfo (line 1668) | struct IFinfo
  function r82xx_set_bandwidth (line 1758) | int r82xx_set_bandwidth(struct r82xx_priv *priv, int bw, uint32_t rate, ...
  function r82xx_set_bw_center (line 1943) | int r82xx_set_bw_center(struct r82xx_priv *priv, int32_t if_band_center_...
  function r82xx_set_sideband (line 1949) | int r82xx_set_sideband(struct r82xx_priv *priv, int sideband)
  function r82xx_get_sideband (line 1959) | int r82xx_get_sideband(struct r82xx_priv *priv)
  function r82xx_flip_rtl_sideband (line 1985) | int r82xx_flip_rtl_sideband(struct r82xx_priv *priv)
  function r82xx_set_freq64 (line 1991) | int r82xx_set_freq64(struct r82xx_priv *priv, uint64_t freq)
  function r82xx_set_freq (line 2126) | int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq)
  function r82xx_set_dither (line 2131) | int r82xx_set_dither(struct r82xx_priv *priv, int dither)
  function r82xx_standby (line 2142) | int r82xx_standby(struct r82xx_priv *priv)
  function r82xx_init (line 2192) | int r82xx_init(struct r82xx_priv *priv)
  function r82xx_gpio (line 2408) | static int r82xx_gpio(struct r82xx_priv *priv, int enable)
Condensed preview — 117 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,016K chars).
[
  {
    "path": ".github/workflows/c-cpp.yml",
    "chars": 4213,
    "preview": "name: C/C++ CI\n\non:\n  push:\n    branches: [ master, development ]\n  pull_request:\n    branches: [ master, development ]\n"
  },
  {
    "path": ".gitignore",
    "chars": 506,
    "preview": "Makefile\nMakefile.in\n.deps\n.libs\n*.o\n*.lo\n*.la\n*.pc\naclocal.m4\nacinclude.m4\naminclude.am\nm4/*.m4\nautom4te.cache\nconfig.h"
  },
  {
    "path": ".travis.yml",
    "chars": 175,
    "preview": "language: c\ncompiler:\n  - gcc\n  - clang\n\nbefore_install:\n - sudo apt-get update -qq\n - sudo apt-get install -qq libusb-1"
  },
  {
    "path": "AUTHORS",
    "chars": 129,
    "preview": "Steve Markgraf <steve@steve-m.de>\nDimitri Stolnikov <horiz0n@gmx.net>\nHoernchen <la@tfc-server.de>\nKyle Keen <keenerd@gm"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 8257,
    "preview": "# Copyright 2012 OSMOCOM Project\n#\n# This file is part of rtl-sdr\n#\n# GNU Radio is free software; you can redistribute i"
  },
  {
    "path": "COPYING",
    "chars": 17987,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
  },
  {
    "path": "Doxyfile.in",
    "chars": 72355,
    "preview": "# Doxyfile 1.7.4\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "Makefile.am",
    "chars": 1124,
    "preview": "AUTOMAKE_OPTIONS = foreign dist-bzip2 1.6\nACLOCAL_AMFLAGS = -I m4\n\nINCLUDES = $(all_includes) -I$(top_srcdir)/include\nSU"
  },
  {
    "path": "README.md",
    "chars": 3515,
    "preview": "[![librtlsdr version](https://img.shields.io/github/tag/librtlsdr/librtlsdr.svg?style=flat&label=librtlsdr)](https://git"
  },
  {
    "path": "README.rtlfm_cmdfile",
    "chars": 4170,
    "preview": "\nrtl_fm now has option '-C' for a command file, from which a list of frequencies are read.\nSo it's similar to using a fr"
  },
  {
    "path": "README.rtlsdr_rpc",
    "chars": 1310,
    "preview": "This implementation of librtlsdr makes remote dongles\nappear to the local software as if they were on the\nsame computer."
  },
  {
    "path": "README_improvements.md",
    "chars": 9931,
    "preview": "\n# improvements, compared to the osmocom sources\n\n\n## versions\n\ncomparing osmocom's git git://git.osmocom.org/rtl-sdr.gi"
  },
  {
    "path": "cmake/Modules/FindLibUSB.cmake",
    "chars": 1744,
    "preview": "if(NOT LIBUSB_FOUND)\n  pkg_check_modules (LIBUSB_PKG libusb-1.0)\n  find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h\n    PATHS"
  },
  {
    "path": "cmake/Modules/FindThreads.cmake",
    "chars": 8655,
    "preview": "# Updated FindThreads.cmake that supports pthread-win32\n# Downloaded from http://www.vtk.org/Bug/bug_view_advanced_page."
  },
  {
    "path": "cmake/Modules/Version.cmake",
    "chars": 2287,
    "preview": "# Copyright 2013 OSMOCOM Project\n#\n# This file is part of rtl-sdr\n#\n# rtl-sdr is free software; you can redistribute it "
  },
  {
    "path": "cmake/cmake_uninstall.cmake.in",
    "chars": 1370,
    "preview": "# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F\n\nIF(NOT EXISTS \"@CMAKE_CURRENT_BINARY_DI"
  },
  {
    "path": "configure.ac",
    "chars": 3088,
    "preview": "AC_INIT([librtlsdr],\n        m4_esyscmd([./git-version-gen .tarball-version]),\n        [osmocom-sdr@lists.osmocom.org])\n"
  },
  {
    "path": "contrib/jenkins.sh",
    "chars": 828,
    "preview": "#!/usr/bin/env bash\n# jenkins build helper script for openbsc.  This is how we build on jenkins.osmocom.org\n\nif ! [ -x \""
  },
  {
    "path": "cross_build_mingw32.sh",
    "chars": 1980,
    "preview": "#!/bin/bash\n\n# requires debian/ubuntu packages: zip gcc-mingw-w64\n\nREPO_DIR=$(pwd)\n\nif [ -z \"$1\" ]; then\n  echo \"usage: "
  },
  {
    "path": "cross_build_mingw64.sh",
    "chars": 1984,
    "preview": "#!/bin/bash\n\n# requires debian/ubuntu packages: zip gcc-mingw-w64\n\nREPO_DIR=$(pwd)\n\nif [ -z \"$1\" ]; then\n  echo \"usage: "
  },
  {
    "path": "debian/.gitignore",
    "chars": 6,
    "preview": "*.deb\n"
  },
  {
    "path": "debian/README.Debian",
    "chars": 1753,
    "preview": "rtl-sdr for Debian\n-------------------\n\nIn the beginning Antti Palosaari noticed that some digital video\nreceiver tuners"
  },
  {
    "path": "debian/changelog",
    "chars": 5073,
    "preview": "rtl-sdr (0.7git) unstable; urgency=medium\n\n  * Accumulated changes from librtlsdr community\n\n -- Karl Semich <0xloem@gma"
  },
  {
    "path": "debian/compat",
    "chars": 2,
    "preview": "9\n"
  },
  {
    "path": "debian/control",
    "chars": 2215,
    "preview": "Source: rtl-sdr\nSection: comm\nPriority: optional\nMaintainer: A. Maitland Bottoms <bottoms@debian.org>\nBuild-Depends: cma"
  },
  {
    "path": "debian/copyright",
    "chars": 7510,
    "preview": "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: rtl-sdr\nUpstream-Contact: http"
  },
  {
    "path": "debian/copyright-scan-patterns.yml",
    "chars": 30,
    "preview": "ignore :\n  suffixes :\n   - in\n"
  },
  {
    "path": "debian/debianize_armhf",
    "chars": 3481,
    "preview": "#!/bin/bash\n\nREPO_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )/../\"\n\nG_REV=`git rev-parse --short=8 HEAD`\nDATE"
  },
  {
    "path": "debian/debianize_x32",
    "chars": 3465,
    "preview": "#!/bin/bash\n\nREPO_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )/../\"\n\nG_REV=`git rev-parse --short=8 HEAD`\nDATE"
  },
  {
    "path": "debian/debianize_x64",
    "chars": 3475,
    "preview": "#!/bin/bash\n\nREPO_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )/../\"\n\nG_REV=`git rev-parse --short=8 HEAD`\nDATE"
  },
  {
    "path": "debian/heatmap.py",
    "chars": 3769,
    "preview": "#! /usr/bin/env python2\n\nfrom PIL import Image, ImageDraw, ImageFont\nimport sys, gzip, math, colorsys, datetime\nfrom col"
  },
  {
    "path": "debian/librtlsdr-dev.dirs",
    "chars": 20,
    "preview": "usr/lib\nusr/include\n"
  },
  {
    "path": "debian/librtlsdr-dev.install",
    "chars": 71,
    "preview": "usr/include/*\nusr/lib/*/lib*.a\nusr/lib/*/lib*.so\nusr/lib/*/pkgconfig/*\n"
  },
  {
    "path": "debian/librtlsdr0.dirs",
    "chars": 23,
    "preview": "etc/modprobe.d\nusr/lib\n"
  },
  {
    "path": "debian/librtlsdr0.install",
    "chars": 70,
    "preview": "usr/lib/*/lib*.so.*\ndebian/librtlsdr0.metainfo.xml usr/share/metainfo\n"
  },
  {
    "path": "debian/librtlsdr0.maintscript",
    "chars": 61,
    "preview": "rm_conffile /etc/modprobe.d/rtl-sdr-blacklist.conf 0.5.3-10~\n"
  },
  {
    "path": "debian/librtlsdr0.metainfo.xml",
    "chars": 2196,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component>\n  <id>librtlsdr0</id>\n  <metadata_license>GPL-2+</metadata_license>\n "
  },
  {
    "path": "debian/librtlsdr0.udev",
    "chars": 5794,
    "preview": "#\n# Copyright 2012-2013 Osmocom rtl-sdr project\n#\n# This program is free software: you can redistribute it and/or modify"
  },
  {
    "path": "debian/rtl-sdr-blacklist.conf",
    "chars": 190,
    "preview": "# This system has librtlsdr0 installed in order to\n# use digital video broadcast receivers as generic\n# software defined"
  },
  {
    "path": "debian/rtl-sdr.dirs",
    "chars": 8,
    "preview": "usr/bin\n"
  },
  {
    "path": "debian/rtl-sdr.examples",
    "chars": 18,
    "preview": "debian/heatmap.py\n"
  },
  {
    "path": "debian/rtl-sdr.install",
    "chars": 10,
    "preview": "usr/bin/*\n"
  },
  {
    "path": "debian/rtl-sdr.manpages",
    "chars": 125,
    "preview": "debian/rtl_adsb.1\ndebian/rtl_eeprom.1\ndebian/rtl_fm.1\ndebian/rtl_power.1\ndebian/rtl_sdr.1\ndebian/rtl_tcp.1\ndebian/rtl_te"
  },
  {
    "path": "debian/rtl_adsb.1",
    "chars": 2754,
    "preview": ".TH \"rtl_adsb\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl_adsb \\- a simple ADS-B decoder\n.SH DESCRIPTION\nUses a re-p"
  },
  {
    "path": "debian/rtl_eeprom.1",
    "chars": 2548,
    "preview": ".TH \"rtl_eeprom\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl-eeprom \\- EEPROM programming tool for RTL2832 based DVB-"
  },
  {
    "path": "debian/rtl_fm.1",
    "chars": 4121,
    "preview": ".TH \"rtl_adsb\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl_fm \\- a simple FM demodulator for RTL2832 based DVB-T rece"
  },
  {
    "path": "debian/rtl_power.1",
    "chars": 5171,
    "preview": ".TH rtl_power: \"1\" \"0.5.1\" RTL_SDR \"User Commands\"\n.SH NAME\nrtl_power: \\- wideband spectrum monitor utility\n.SH DESCRIPT"
  },
  {
    "path": "debian/rtl_sdr.1",
    "chars": 2874,
    "preview": ".TH \"rtl_sdr\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl-sdr \\- an I/Q recorder for RTL2832 based DVB-T receivers\n.S"
  },
  {
    "path": "debian/rtl_tcp.1",
    "chars": 3263,
    "preview": ".TH \"rtl_tcp\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl_tcp \\- an I/Q spectrum server for RTL2832 based DVB-T recei"
  },
  {
    "path": "debian/rtl_test.1",
    "chars": 2564,
    "preview": ".TH \"rtl_test\" 1 \"0.5.0\" RTL-SDR \"User Commands\"\n.SH NAME\nrtl_test \\- a benchmark tool for RTL2832 based DVB-T receivers"
  },
  {
    "path": "debian/rules",
    "chars": 353,
    "preview": "#!/usr/bin/make -f\nDEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)\nexport DEB_HOST_MULTIARCH\n\n%:\n\t"
  },
  {
    "path": "debian/source/format",
    "chars": 13,
    "preview": "3.0 (native)\n"
  },
  {
    "path": "debian/watch",
    "chars": 130,
    "preview": "version=4\nopts=\"mode=git, gitmode=full, pgpmode=none\" \\\n git://git.osmocom.org/rtl-sdr.git \\\n refs/tags/v([\\d\\.]+) debia"
  },
  {
    "path": "git-version-gen",
    "chars": 5440,
    "preview": "#!/bin/sh\n# Print a version string.\nscriptversion=2010-01-28.01\n\n# Copyright (C) 2007-2010 Free Software Foundation, Inc"
  },
  {
    "path": "include/CMakeLists.txt",
    "chars": 1027,
    "preview": "# Copyright 2012 OSMOCOM Project\n#\n# This file is part of rtl-sdr\n#\n# GNU Radio is free software; you can redistribute i"
  },
  {
    "path": "include/Makefile.am",
    "chars": 185,
    "preview": "rtlsdr_HEADERS = rtl-sdr.h rtl-sdr_export.h\n\nnoinst_HEADERS = reg_field.h rtlsdr_i2c.h tuner_e4k.h tuner_fc0012.h tuner_"
  },
  {
    "path": "include/controlThread.h",
    "chars": 1058,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2019 <>\n *\n * This progr"
  },
  {
    "path": "include/reg_field.h",
    "chars": 1208,
    "preview": "#ifndef _REG_FIELD_H\n#define _REG_FIELD_H\n\n#include <stdint.h>\n#include <stdarg.h>\n\nenum cmd_op {\n\tCMD_OP_GET\t= (1 << 0)"
  },
  {
    "path": "include/rtl-sdr.h",
    "chars": 26220,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012-2013 by Steve Markg"
  },
  {
    "path": "include/rtl-sdr_export.h",
    "chars": 1436,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Hoernchen <la@tf"
  },
  {
    "path": "include/rtl_tcp.h",
    "chars": 3845,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012-2013 by Steve Markg"
  },
  {
    "path": "include/rtlsdr_i2c.h",
    "chars": 230,
    "preview": "#ifndef __I2C_H\n#define __I2C_H\n\nuint32_t rtlsdr_get_tuner_clock(void *dev);\nint rtlsdr_i2c_write_fn(void *dev, uint8_t "
  },
  {
    "path": "include/rtlsdr_rpc.h",
    "chars": 2518,
    "preview": "#ifndef RTLSDR_RPC_H_INCLUDED\n#define RTLSDR_RPC_H_INCLUDED\n\n\n#include <stdint.h>\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#end"
  },
  {
    "path": "include/rtlsdr_rpc_msg.h",
    "chars": 2951,
    "preview": "#ifndef RTLSDR_RPC_MSG_H_INCLUDED\n#define RTLSDR_RPC_MSG_H_INCLUDED\n\n\n#include <stdint.h>\n#include <sys/types.h>\n\ntypede"
  },
  {
    "path": "include/tuner_e4k.h",
    "chars": 5958,
    "preview": "#ifndef _E4K_TUNER_H\n#define _E4K_TUNER_H\n\n/*\n * Elonics E4000 tuner driver\n *\n * (C) 2011-2012 by Harald Welte <laforge"
  },
  {
    "path": "include/tuner_fc0012.h",
    "chars": 1355,
    "preview": "/*\n * Fitipower FC0012 tuner driver\n *\n * Copyright (C) 2012 Hans-Frieder Vogt <hfvogt@gmx.net>\n *\n * modified for use i"
  },
  {
    "path": "include/tuner_fc0013.h",
    "chars": 1260,
    "preview": "/*\n * Fitipower FC0013 tuner driver\n *\n * Copyright (C) 2012 Hans-Frieder Vogt <hfvogt@gmx.net>\n *\n * modified for use i"
  },
  {
    "path": "include/tuner_fc2580.h",
    "chars": 3087,
    "preview": "#ifndef __TUNER_FC2580_H\n#define __TUNER_FC2580_H\n\n#define\tBORDER_FREQ\t\t\t2600000\t/* 2.6GHz : The border frequency which "
  },
  {
    "path": "include/tuner_r82xx.h",
    "chars": 5598,
    "preview": "/*\n * Rafael Micro R820T/R828D driver\n *\n * Copyright (C) 2013 Mauro Carvalho Chehab <mchehab@redhat.com>\n * Copyright ("
  },
  {
    "path": "install-blacklist.sh",
    "chars": 1000,
    "preview": "#!/bin/bash\n\nBLACKLIST_FN=\"\"\nif [ -f /etc/modprobe.d/rtlsdr-blacklist.conf ]; then\n  BLACKLIST_FN=\"rtlsdr-blacklist.conf"
  },
  {
    "path": "librtlsdr.pc.in",
    "chars": 267,
    "preview": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: RTL-SDR Library\nDescription: C "
  },
  {
    "path": "m4/.gitignore",
    "chars": 20,
    "preview": "/libtool.m4\n/lt*.m4\n"
  },
  {
    "path": "mingw-w32-i686.cmake",
    "chars": 831,
    "preview": "# Sample toolchain file for building for Windows from an Ubuntu Linux system.\n#\n# Typical usage:\n#    *) install cross c"
  },
  {
    "path": "mingw-w64-x64_64.cmake",
    "chars": 835,
    "preview": "# Sample toolchain file for building for Windows from an Ubuntu Linux system.\n#\n# Typical usage:\n#    *) install cross c"
  },
  {
    "path": "protocol_rtl_tcp.txt",
    "chars": 2984,
    "preview": "\nThe command protocol of rtl_tcp is on port 1234 (by default):\n========================================================="
  },
  {
    "path": "rtl-sdr.rules",
    "chars": 5934,
    "preview": "#\n# Copyright 2012-2013 Osmocom rtl-sdr project\n#\n# This program is free software: you can redistribute it and/or modify"
  },
  {
    "path": "rtlsdr-blacklist.conf",
    "chars": 121,
    "preview": "blacklist dvb_usb_rtl28xxu\nblacklist dvb_usb_v2\nblacklist rtl_2830\nblacklist rtl_2832\nblacklist r820t\nblacklist rtl8xxxu"
  },
  {
    "path": "src/CMakeLists.txt",
    "chars": 9627,
    "preview": "# Copyright 2012 OSMOCOM Project\n#\n# This file is part of rtl-sdr\n#\n# GNU Radio is free software; you can redistribute i"
  },
  {
    "path": "src/Makefile.am",
    "chars": 1639,
    "preview": "# This is _NOT_ the library release version, it's an API version.\n# Please read Chapter 6 \"Library interface versions\" o"
  },
  {
    "path": "src/controlThread.c",
    "chars": 6054,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/convenience/convenience.c",
    "chars": 6390,
    "preview": "/*\n * Copyright (C) 2014 by Kyle Keen <keenerd@gmail.com>\n *\n * This program is free software: you can redistribute it a"
  },
  {
    "path": "src/convenience/convenience.h",
    "chars": 1597,
    "preview": "/*\n * Copyright (C) 2014 by Kyle Keen <keenerd@gmail.com>\n *\n * This program is free software: you can redistribute it a"
  },
  {
    "path": "src/convenience/rtl_convenience.c",
    "chars": 7725,
    "preview": "/*\n * Copyright (C) 2014 by Kyle Keen <keenerd@gmail.com>\n *\n * This program is free software: you can redistribute it a"
  },
  {
    "path": "src/convenience/rtl_convenience.h",
    "chars": 3390,
    "preview": "/*\n * Copyright (C) 2014 by Kyle Keen <keenerd@gmail.com>\n *\n * This program is free software: you can redistribute it a"
  },
  {
    "path": "src/convenience/wavehdr.h",
    "chars": 2644,
    "preview": "/*\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * This program is free software: you can redistribute it"
  },
  {
    "path": "src/convenience/waveread.c",
    "chars": 7963,
    "preview": "/*\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * This program is free software: you can redistribute it"
  },
  {
    "path": "src/convenience/waveread.h",
    "chars": 1422,
    "preview": "/*\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * This program is free software: you can redistribute it"
  },
  {
    "path": "src/convenience/wavewrite.c",
    "chars": 6382,
    "preview": "/*\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * This program is free software: you can redistribute it"
  },
  {
    "path": "src/convenience/wavewrite.h",
    "chars": 1888,
    "preview": "/*\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * This program is free software: you can redistribute it"
  },
  {
    "path": "src/getopt/getopt.c",
    "chars": 30268,
    "preview": "/* Getopt for GNU.\n   NOTE: getopt is now part of the C library, so if you don't know what\n   \"Keep this file name-space"
  },
  {
    "path": "src/getopt/getopt.h",
    "chars": 6447,
    "preview": "/* Declarations for getopt.\n   Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc.\n   This file is p"
  },
  {
    "path": "src/librtlsdr.c",
    "chars": 127487,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012-2014 by Steve Markg"
  },
  {
    "path": "src/rtl_adsb.c",
    "chars": 12271,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_app_ver.h.in",
    "chars": 247,
    "preview": "#ifndef __RTL_APP_VER_H\n#define __RTL_APP_VER_H\n\n#define APP_VER_MAJOR\t@MAJOR_VERSION@\n#define APP_VER_MINOR\t@MINOR_VERS"
  },
  {
    "path": "src/rtl_biast.c",
    "chars": 4762,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * rtl_biast, tool to set bias tee gpio o"
  },
  {
    "path": "src/rtl_eeprom.c",
    "chars": 12508,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * rtl_eeprom, EEPROM modification tool\n "
  },
  {
    "path": "src/rtl_fm.c",
    "chars": 61825,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_ir.c",
    "chars": 5389,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2009 Antti Palosaari <cr"
  },
  {
    "path": "src/rtl_power.c",
    "chars": 26582,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_raw2wav.c",
    "chars": 8722,
    "preview": "/*\n * rtl-raw2wav, converts binary/raw data into wave files - including frequency\n * Copyright (C) 2019 by Hayati Ayguen"
  },
  {
    "path": "src/rtl_rpcd.c",
    "chars": 28264,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <unistd.h>\n#include <stddef.h>\n#include <string.h>\n#"
  },
  {
    "path": "src/rtl_sdr.c",
    "chars": 9293,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_tcp.c",
    "chars": 28746,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_test.c",
    "chars": 17088,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * rtl_test, test and benchmark tool\n *\n "
  },
  {
    "path": "src/rtl_udp.c",
    "chars": 27449,
    "preview": "/*\n * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver\n * Copyright (C) 2012 by Steve Markgraf <"
  },
  {
    "path": "src/rtl_wavestat.c",
    "chars": 7596,
    "preview": "/*\n * rtl-wavestat, display wave file meta information\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web.de>\n *\n * Th"
  },
  {
    "path": "src/rtl_wavestream.c",
    "chars": 9177,
    "preview": "/*\n * rtl-wavestream, stream raw data (in specified sample format)\n * Copyright (C) 2019 by Hayati Ayguen <h_ayguen@web."
  },
  {
    "path": "src/rtlsdr.rc.in",
    "chars": 790,
    "preview": "\n#include <windows.h>\n\nVS_VERSION_INFO VERSIONINFO\n  FILEVERSION 0,0,0,0\n  PRODUCTVERSION 0,0,0,0\n  FILEFLAGSMASK 0x3fL\n"
  },
  {
    "path": "src/rtlsdr_rpc.c",
    "chars": 30445,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <unistd.h>\n#include <stddef.h>\n#include <string.h>\n#"
  },
  {
    "path": "src/rtlsdr_rpc_msg.c",
    "chars": 6446,
    "preview": "#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stddef.h>\n#include \"rtlsdr_rpc_msg.h\"\n\n#if 1\n#incl"
  },
  {
    "path": "src/tuner_e4k.c",
    "chars": 24624,
    "preview": "/*\n * Elonics E4000 tuner driver\n *\n * (C) 2011-2012 by Harald Welte <laforge@gnumonks.org>\n * (C) 2012 by Sylvain Munau"
  },
  {
    "path": "src/tuner_fc0012.c",
    "chars": 9473,
    "preview": "/*\n * Fitipower FC0012 tuner driver\n *\n * Copyright (C) 2012 Hans-Frieder Vogt <hfvogt@gmx.net>\n *\n * modified for use i"
  },
  {
    "path": "src/tuner_fc0013.c",
    "chars": 10845,
    "preview": "/*\n * Fitipower FC0013 tuner driver\n *\n * Copyright (C) 2012 Hans-Frieder Vogt <hfvogt@gmx.net>\n * partially based on dr"
  },
  {
    "path": "src/tuner_fc2580.c",
    "chars": 15300,
    "preview": "/*\n * FCI FC2580 tuner driver, taken from the kernel driver that can be found\n * on http://linux.terratec.de/tv_en.html\n"
  },
  {
    "path": "src/tuner_r82xx.c",
    "chars": 71951,
    "preview": "/*\n * Rafael Micro R820T/R828D driver\n *\n * Copyright (C) 2013 Mauro Carvalho Chehab <mchehab@redhat.com>\n * Copyright ("
  },
  {
    "path": "win32-qtcreator/CMakeLists.txt",
    "chars": 3248,
    "preview": "project(rtlsdr)\ncmake_minimum_required(VERSION 2.8)\n\n# created and tested with\n# Qt 5.6.1 for Windows 32-bit (MinGW 4.9."
  },
  {
    "path": "win32-qtcreator/README.txt",
    "chars": 1690,
    "preview": "\nthere is an outdated \"How to compile new releases of librtlsdr (and tools) on Windows\" at\nhttps://www.reddit.com/r/RTLS"
  }
]

About this extraction

This page contains the full source code of the pinkavaj/rtl-sdr GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 117 files (917.8 KB), approximately 305.9k tokens, and a symbol index with 731 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!