diff --git a/CMakeLists.txt b/CMakeLists.txt index cd1466f..40ef69d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,19 +6,69 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/") SET(CUBICSDR_VERSION_MAJOR "0") SET(CUBICSDR_VERSION_MINOR "2") -SET(CUBICSDR_VERSION_PATCH "0") -SET(CUBICSDR_VERSION_REL "") -SET(CUBICSDR_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}${CUBICSDR_VERSION_REL}") +SET(CUBICSDR_VERSION_PATCH "2") +SET(CUBICSDR_VERSION_SUFFIX "-alpha") +SET(CUBICSDR_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}${CUBICSDR_VERSION_SUFFIX}") SET(CPACK_PACKAGE_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}") SET(CPACK_PACKAGE_VERSION_MAJOR ${CUBICSDR_VERSION_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${CUBICSDR_VERSION_MINOR}) SET(CPACK_PACKAGE_VERSION_PATCH ${CUBICSDR_VERSION_PATCH}) -SET (VERSION_SUFFIX "" CACHE STRING "Add custom version suffix to CubicSDR application title.") +SET (CUSTOM_BUILD OFF CACHE BOOL "Enable custom build options") +# Build options for custom deploys, optimization and debugging +IF(CUSTOM_BUILD) + SET (CUBICSDR_BUILD_TITLE CACHE STRING "Custom Title") + # bundle flags + SET (CUBICSDR_INSTALL_NAME CACHE "CubicSDR" "Installation Name") + SET (CUBICSDR_INSTALL_TITLE CACHE "CubicSDR" "Installation Title") + SET (CUBICSDR_HEADER_IMAGE CACHE "" "Image file to display in header") + SET (CUBICSDR_HEADER_BG CACHE "000000" "Background Color (HEX) for header") + # feature flags + SET (CUBICSDR_ENABLE_VIEW_DEMOD ON CACHE BOOL "Enable Second Demodulator Spectrum/Waterfall view.") + SET (CUBICSDR_ENABLE_VIEW_SCOPE ON CACHE BOOL "Enable Demodulator Scope/Spectrum view.") + SET (CUBICSDR_MODEM_EXCLUDE CACHE "" "Comma-separated list of modems to exclude.") + + IF (NOT CUBICSDR_HEADER_IMAGE STREQUAL "") + SET(CUBICSDR_HAS_HEADER_IMAGE TRUE) + GET_FILENAME_COMPONENT(CUBICSDR_HEADER_IMAGE_FILE "${CUBICSDR_HEADER_IMAGE}" NAME) + GET_FILENAME_COMPONENT(CUBICSDR_HEADER_IMAGE_DIR "${CUBICSDR_HEADER_IMAGE}" PATH) + ADD_DEFINITIONS( + -DCUBICSDR_HEADER_IMAGE="${CUBICSDR_HEADER_IMAGE_FILE}" + -DCUBICSDR_HEADER_BG="${CUBICSDR_HEADER_BG}" + ) + ENDIF() + + IF (NOT CUBICSDR_MODEM_EXCLUDE STREQUAL "") + ADD_DEFINITIONS( + -DCUBICSDR_MODEM_EXCLUDE="${CUBICSDR_MODEM_EXCLUDE}" + ) + ENDIF() +ELSE() + SET (CUBICSDR_BUILD_TITLE "CubicSDR v${CUBICSDR_VERSION} by Charles J. Cliffe (@ccliffe) :: www.cubicsdr.com") + # bundle flags + SET (CUBICSDR_INSTALL_NAME "CubicSDR") + SET (CUBICSDR_INSTALL_TITLE "CubicSDR ${CUBICSDR_VERSION} Installer") + SET (CUBICSDR_HEADER_IMAGE "") + SET (CUBICSDR_HEADER_BG "") + # feature flags + SET (CUBICSDR_ENABLE_VIEW_DEMOD TRUE) + SET (CUBICSDR_ENABLE_VIEW_SCOPE TRUE) + SET (CUBICSDR_EXCLUDE_MODEM "") +ENDIF() + +IF(CUBICSDR_ENABLE_VIEW_DEMOD) + ADD_DEFINITIONS( -DCUBICSDR_ENABLE_VIEW_DEMOD=1 ) +ENDIF() + +IF(CUBICSDR_ENABLE_VIEW_SCOPE) + ADD_DEFINITIONS( -DCUBICSDR_ENABLE_VIEW_SCOPE=1 ) +ENDIF() ADD_DEFINITIONS( - -DCUBICSDR_VERSION="${CUBICSDR_VERSION}${VERSION_SUFFIX}" + -DCUBICSDR_INSTALL_NAME="${CUBICSDR_INSTALL_NAME}" + -DCUBICSDR_VERSION="${CUBICSDR_VERSION}" + -DCUBICSDR_BUILD_TITLE="${CUBICSDR_BUILD_TITLE}" ) SET (ENABLE_DIGITAL_LAB OFF CACHE BOOL "Enable 'Digital Lab' testing features.") @@ -26,16 +76,6 @@ IF(ENABLE_DIGITAL_LAB) ADD_DEFINITIONS( -DENABLE_DIGITAL_LAB=1 ) -IF(MSVC) - SET (ENABLE_LIQUID_EXPERIMENTAL OFF CACHE BOOL "Enable experimental liquid-dsp features (requires latest liquid-dsp installed)") -ELSE() - SET (ENABLE_LIQUID_EXPERIMENTAL ON CACHE BOOL "Enable experimental liquid-dsp features (requires latest liquid-dsp installed)") -ENDIF() -IF(ENABLE_LIQUID_EXPERIMENTAL) -ADD_DEFINITIONS( - -DENABLE_LIQUID_EXPERIMENTAL=1 -) -ENDIF() ENDIF() set(USE_HAMLIB OFF CACHE BOOL "Support hamlib for radio control functions.") @@ -50,7 +90,7 @@ if (USE_HAMLIB) include_directories(${HAMLIB_INCLUDE_DIR}) link_libraries(${HAMLIB_LIBRARY}) - ADD_DEFINITIONS(-DUSE_HAMLIB) + ADD_DEFINITIONS(-DUSE_HAMLIB) endif () macro(configure_files srcDir destDir globStr) @@ -103,16 +143,16 @@ SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/${EX_PLATFORM_NA SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/${EX_PLATFORM_NAME}) IF (MSVC) - include_directories ("${PROJECT_SOURCE_DIR}/external/wglext") - SET(LIQUID_INCLUDES "${PROJECT_SOURCE_DIR}/external/liquid-dsp/include/" CACHE STRING "Liquid-DSP include directory") - SET(LIQUID_LIBRARIES "${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/libliquid.lib" CACHE STRING "Liquid-DSP Library") - SET(LIQUID_DLL "${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/libliquid.dll" CACHE STRING "Liquid-DSP DLL") - SET(HAMLIB_DLLS "${PROJECT_SOURCE_DIR}/external/hamlib/${EX_PLATFORM}/libhamlib-2.dll;${PROJECT_SOURCE_DIR}/external/hamlib/${EX_PLATFORM}/libwinpthread-1.dll" CACHE STRING "HAMLIB DLLS") + include_directories ("${PROJECT_SOURCE_DIR}/external/wglext") + SET(LIQUID_INCLUDES "${PROJECT_SOURCE_DIR}/external/liquid-dsp/include/" CACHE STRING "Liquid-DSP include directory") + SET(LIQUID_LIBRARIES "${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/libliquid.lib" CACHE STRING "Liquid-DSP Library") + SET(LIQUID_DLL "${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/libliquid.dll" CACHE STRING "Liquid-DSP DLL") + SET(HAMLIB_DLLS "${PROJECT_SOURCE_DIR}/external/hamlib/${EX_PLATFORM}/libhamlib-2.dll;${PROJECT_SOURCE_DIR}/external/hamlib/${EX_PLATFORM}/libwinpthread-1.dll" CACHE STRING "HAMLIB DLLS") ELSE (MSVC) - ADD_DEFINITIONS( - -std=c++0x - -pthread - ) + ADD_DEFINITIONS( + -std=c++0x + -pthread + ) ENDIF(MSVC) find_package(OpenGL REQUIRED) @@ -128,50 +168,50 @@ find_package(SoapySDR "0.4.0" NO_MODULE REQUIRED) include_directories(${SOAPY_SDR_INCLUDE_DIR}) SET(OTHER_LIBRARIES ${SOAPY_SDR_LIBRARY} ${OTHER_LIBRARIES}) ADD_DEFINITIONS( - -DUSE_SOAPY_SDR=1 + -DUSE_SOAPY_SDR=1 ) IF (WIN32) - set(wxWidgets_USE_STATIC ON) + set(wxWidgets_USE_STATIC ON) - set(BUILD_INSTALLER OFF CACHE BOOL "Build Installer") - - # Audio device selection is not mandatory, dummy audio device is used if none are compiled in. - # Can also compile support for more than one simultaneously. - set(USE_AUDIO_DS ON CACHE BOOL "Include support for DirectSound") - set(USE_AUDIO_WASAPI OFF CACHE BOOL "Include support for WASAPI Audio") - # TODO: - # set(USE_AUDIO_ASIO OFF CACHE BOOL "Include support for ASIO Audio") + set(BUILD_INSTALLER OFF CACHE BOOL "Build Installer") + + # Audio device selection is not mandatory, dummy audio device is used if none are compiled in. + # Can also compile support for more than one simultaneously. + set(USE_AUDIO_DS ON CACHE BOOL "Include support for DirectSound") + set(USE_AUDIO_WASAPI OFF CACHE BOOL "Include support for WASAPI Audio") + # TODO: + # set(USE_AUDIO_ASIO OFF CACHE BOOL "Include support for ASIO Audio") - # WASAPI - IF(USE_AUDIO_WASAPI) - ADD_DEFINITIONS(-D__WINDOWS_WASAPI__) - IF (NOT MSVC) - SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} -luuid -lksuser) - ENDIF(NOT MSVC) - ENDIF(USE_AUDIO_WASAPI) + # WASAPI + IF(USE_AUDIO_WASAPI) + ADD_DEFINITIONS(-D__WINDOWS_WASAPI__) + IF (NOT MSVC) + SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} -luuid -lksuser) + ENDIF(NOT MSVC) + ENDIF(USE_AUDIO_WASAPI) - # DirectSound - IF (USE_AUDIO_DS) - ADD_DEFINITIONS(-D__WINDOWS_DS__) - IF (MSVC) - SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} dsound.lib) - ELSE (MSVC) - SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} -ldsound) - ENDIF (MSVC) - ENDIF(USE_AUDIO_DS) + # DirectSound + IF (USE_AUDIO_DS) + ADD_DEFINITIONS(-D__WINDOWS_DS__) + IF (MSVC) + SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} dsound.lib) + ELSE (MSVC) + SET(OTHER_LIBRARIES ${OTHER_LIBRARIES} -ldsound) + ENDIF (MSVC) + ENDIF(USE_AUDIO_DS) - SET(USE_MINGW_PATCH OFF CACHE BOOL "Add some missing functions when compiling against mingw liquid-dsp.") - IF (USE_MINGW_PATCH) - SET(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} legacy_stdio_definitions.lib libgcc.a") - ADD_DEFINITIONS( - -DMINGW_PATCH=1 - ) - SET (GCC_LINKDIR "" CACHE STRING "") - IF (GCC_LINKDIR) - link_directories("${GCC_LINKDIR}") - ENDIF() - ENDIF() + SET(USE_MINGW_PATCH OFF CACHE BOOL "Add some missing functions when compiling against mingw liquid-dsp.") + IF (USE_MINGW_PATCH) + SET(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} legacy_stdio_definitions.lib libgcc.a") + ADD_DEFINITIONS( + -DMINGW_PATCH=1 + ) + SET (GCC_LINKDIR "" CACHE STRING "") + IF (GCC_LINKDIR) + link_directories("${GCC_LINKDIR}") + ENDIF() + ENDIF() ENDIF (WIN32) IF (UNIX AND NOT APPLE) @@ -218,22 +258,23 @@ ENDIF (APPLE) SET (cubicsdr_sources - src/CubicSDR.cpp - src/AppFrame.cpp - src/AppConfig.cpp - src/FrequencyDialog.cpp + src/CubicSDR.cpp + src/AppFrame.cpp + src/AppConfig.cpp + src/FrequencyDialog.cpp src/DemodLabelDialog.cpp src/IOThread.cpp src/ModemProperties.cpp - src/sdr/SDRDeviceInfo.cpp - src/sdr/SDRPostThread.cpp - src/sdr/SDREnumerator.cpp - src/sdr/SoapySDRThread.h - src/demod/DemodulatorPreThread.cpp - src/demod/DemodulatorThread.cpp - src/demod/DemodulatorWorkerThread.cpp - src/demod/DemodulatorInstance.cpp - src/demod/DemodulatorMgr.cpp + src/BookmarkMgr.cpp + src/sdr/SDRDeviceInfo.cpp + src/sdr/SDRPostThread.cpp + src/sdr/SDREnumerator.cpp + src/sdr/SoapySDRThread.h + src/demod/DemodulatorPreThread.cpp + src/demod/DemodulatorThread.cpp + src/demod/DemodulatorWorkerThread.cpp + src/demod/DemodulatorInstance.cpp + src/demod/DemodulatorMgr.cpp src/modules/modem/Modem.cpp src/modules/modem/ModemAnalog.cpp src/modules/modem/ModemDigital.cpp @@ -245,49 +286,54 @@ SET (cubicsdr_sources src/modules/modem/analog/ModemIQ.cpp src/modules/modem/analog/ModemLSB.cpp src/modules/modem/analog/ModemUSB.cpp - src/audio/AudioThread.cpp - src/util/Gradient.cpp - src/util/Timer.cpp - src/util/MouseTracker.cpp - src/util/GLExt.cpp - src/util/GLFont.cpp - src/util/DataTree.cpp + src/audio/AudioThread.cpp + src/util/Gradient.cpp + src/util/Timer.cpp + src/util/MouseTracker.cpp + src/util/GLExt.cpp + src/util/GLFont.cpp + src/util/DataTree.cpp src/panel/ScopePanel.cpp src/panel/SpectrumPanel.cpp src/panel/WaterfallPanel.cpp src/panel/MeterPanel.cpp src/panel/MeterPanel.h - src/visual/ColorTheme.cpp - src/visual/PrimaryGLContext.cpp - src/visual/InteractiveCanvas.cpp - src/visual/MeterCanvas.cpp - src/visual/MeterContext.cpp - src/visual/TuningCanvas.cpp - src/visual/TuningContext.cpp - src/visual/ModeSelectorCanvas.cpp - src/visual/ModeSelectorContext.cpp - src/visual/ScopeCanvas.cpp - src/visual/ScopeContext.cpp - src/visual/SpectrumCanvas.cpp - src/visual/WaterfallCanvas.cpp + src/visual/ColorTheme.cpp + src/visual/PrimaryGLContext.cpp + src/visual/InteractiveCanvas.cpp + src/visual/MeterCanvas.cpp + src/visual/MeterContext.cpp + src/visual/TuningCanvas.cpp + src/visual/TuningContext.cpp + src/visual/ModeSelectorCanvas.cpp + src/visual/ModeSelectorContext.cpp + src/visual/ScopeCanvas.cpp + src/visual/ScopeContext.cpp + src/visual/SpectrumCanvas.cpp + src/visual/WaterfallCanvas.cpp src/visual/GainCanvas.cpp - src/process/VisualProcessor.cpp - src/process/ScopeVisualProcessor.cpp - src/process/SpectrumVisualProcessor.cpp - src/process/FFTVisualDataThread.cpp - src/process/FFTDataDistributor.cpp + src/visual/ImagePanel.cpp + src/process/VisualProcessor.cpp + src/process/ScopeVisualProcessor.cpp + src/process/SpectrumVisualProcessor.cpp + src/process/FFTVisualDataThread.cpp + src/process/FFTDataDistributor.cpp src/process/SpectrumVisualDataThread.cpp - src/ui/GLPanel.cpp + src/ui/GLPanel.cpp src/forms/SDRDevices/SDRDevices.cpp src/forms/SDRDevices/SDRDevicesForm.cpp src/forms/SDRDevices/SDRDeviceAdd.cpp src/forms/SDRDevices/SDRDeviceAddForm.cpp - external/lodepng/lodepng.cpp - external/tinyxml/tinyxml.cpp - external/tinyxml/tinystr.cpp - external/tinyxml/tinyxmlparser.cpp - external/tinyxml/tinyxmlerror.cpp - external/cubicvr2/math/cubic_math.cpp + src/forms/Bookmark/BookmarkPanel.cpp + src/forms/Bookmark/BookmarkView.cpp + src/forms/Dialog/ActionDialogBase.cpp + src/forms/Dialog/ActionDialog.cpp + external/lodepng/lodepng.cpp + external/tinyxml/tinyxml.cpp + external/tinyxml/tinystr.cpp + external/tinyxml/tinyxmlparser.cpp + external/tinyxml/tinyxmlerror.cpp + external/cubicvr2/math/cubic_math.cpp ) IF(ENABLE_DIGITAL_LAB) @@ -306,34 +352,30 @@ IF(ENABLE_DIGITAL_LAB) src/modules/modem/digital/ModemSQAM.cpp src/modules/modem/digital/ModemQAM.cpp src/modules/modem/digital/ModemQPSK.cpp - ) - IF(ENABLE_LIQUID_EXPERIMENTAL) - SET (cubicsdr_sources - ${cubicsdr_sources} src/modules/modem/digital/ModemFSK.cpp ) - ENDIF() ENDIF() SET (cubicsdr_headers - src/CubicSDRDefs.h - src/CubicSDR.h - src/AppFrame.h - src/AppConfig.h - src/FrequencyDialog.h + src/CubicSDRDefs.h + src/CubicSDR.h + src/AppFrame.h + src/AppConfig.h + src/FrequencyDialog.h src/DemodLabelDialog.h src/IOThread.h src/ModemProperties.h - src/sdr/SDRDeviceInfo.h - src/sdr/SDRPostThread.h - src/sdr/SDREnumerator.h - src/sdr/SoapySDRThread.cpp - src/demod/DemodulatorPreThread.h - src/demod/DemodulatorThread.h - src/demod/DemodulatorWorkerThread.h - src/demod/DemodulatorInstance.h - src/demod/DemodulatorMgr.h - src/demod/DemodDefs.h + src/BookmarkMgr.h + src/sdr/SDRDeviceInfo.h + src/sdr/SDRPostThread.h + src/sdr/SDREnumerator.h + src/sdr/SoapySDRThread.cpp + src/demod/DemodulatorPreThread.h + src/demod/DemodulatorThread.h + src/demod/DemodulatorWorkerThread.h + src/demod/DemodulatorInstance.h + src/demod/DemodulatorMgr.h + src/demod/DemodDefs.h src/modules/modem/Modem.h src/modules/modem/ModemAnalog.h src/modules/modem/ModemDigital.h @@ -345,63 +387,68 @@ SET (cubicsdr_headers src/modules/modem/analog/ModemIQ.h src/modules/modem/analog/ModemLSB.h src/modules/modem/analog/ModemUSB.h - src/audio/AudioThread.h - src/util/Gradient.h - src/util/Timer.h - src/util/ThreadQueue.h - src/util/MouseTracker.h - src/util/GLExt.h - src/util/GLFont.h - src/util/DataTree.h + src/audio/AudioThread.h + src/util/Gradient.h + src/util/Timer.h + src/util/ThreadQueue.h + src/util/MouseTracker.h + src/util/GLExt.h + src/util/GLFont.h + src/util/DataTree.h src/panel/ScopePanel.h src/panel/SpectrumPanel.h src/panel/WaterfallPanel.h - src/visual/ColorTheme.h - src/visual/PrimaryGLContext.h - src/visual/InteractiveCanvas.h - src/visual/MeterCanvas.h - src/visual/MeterContext.h - src/visual/TuningCanvas.h - src/visual/TuningContext.h - src/visual/ModeSelectorCanvas.h - src/visual/ModeSelectorContext.h - src/visual/ScopeCanvas.h - src/visual/ScopeContext.h - src/visual/SpectrumCanvas.h - src/visual/WaterfallCanvas.h + src/visual/ColorTheme.h + src/visual/PrimaryGLContext.h + src/visual/InteractiveCanvas.h + src/visual/MeterCanvas.h + src/visual/MeterContext.h + src/visual/TuningCanvas.h + src/visual/TuningContext.h + src/visual/ModeSelectorCanvas.h + src/visual/ModeSelectorContext.h + src/visual/ScopeCanvas.h + src/visual/ScopeContext.h + src/visual/SpectrumCanvas.h + src/visual/WaterfallCanvas.h src/visual/GainCanvas.h - src/process/VisualProcessor.h - src/process/ScopeVisualProcessor.h - src/process/SpectrumVisualProcessor.h - src/process/FFTVisualDataThread.h - src/process/FFTDataDistributor.h + src/visual/ImagePanel.h + src/process/VisualProcessor.h + src/process/ScopeVisualProcessor.h + src/process/SpectrumVisualProcessor.h + src/process/FFTVisualDataThread.h + src/process/FFTDataDistributor.h src/process/SpectrumVisualDataThread.h - src/ui/GLPanel.h - src/ui/UITestCanvas.cpp - src/ui/UITestCanvas.h - src/ui/UITestContext.cpp - src/ui/UITestContext.h + src/ui/GLPanel.h + src/ui/UITestCanvas.cpp + src/ui/UITestCanvas.h + src/ui/UITestContext.cpp + src/ui/UITestContext.h src/forms/SDRDevices/SDRDevices.h src/forms/SDRDevices/SDRDevicesForm.h src/forms/SDRDevices/SDRDeviceAdd.h src/forms/SDRDevices/SDRDeviceAddForm.h - external/lodepng/lodepng.h - external/tinyxml/tinyxml.h - external/tinyxml/tinystr.h - external/cubicvr2/math/aabb.h - external/cubicvr2/math/cubic_math.h - external/cubicvr2/math/cubic_types.h - external/cubicvr2/math/frustum.h - external/cubicvr2/math/mat3.h - external/cubicvr2/math/mat4.h - external/cubicvr2/math/plane.h - external/cubicvr2/math/quaternion.h - external/cubicvr2/math/sphere.h - external/cubicvr2/math/transform.h - external/cubicvr2/math/triangle.h - external/cubicvr2/math/vec2.h - external/cubicvr2/math/vec3.h - external/cubicvr2/math/vec4.h + src/forms/Bookmark/BookmarkPanel.h + src/forms/Bookmark/BookmarkView.h + src/forms/Dialog/ActionDialogBase.h + src/forms/Dialog/ActionDialog.h + external/lodepng/lodepng.h + external/tinyxml/tinyxml.h + external/tinyxml/tinystr.h + external/cubicvr2/math/aabb.h + external/cubicvr2/math/cubic_math.h + external/cubicvr2/math/cubic_types.h + external/cubicvr2/math/frustum.h + external/cubicvr2/math/mat3.h + external/cubicvr2/math/mat4.h + external/cubicvr2/math/plane.h + external/cubicvr2/math/quaternion.h + external/cubicvr2/math/sphere.h + external/cubicvr2/math/transform.h + external/cubicvr2/math/triangle.h + external/cubicvr2/math/vec2.h + external/cubicvr2/math/vec3.h + external/cubicvr2/math/vec4.h ) IF(ENABLE_DIGITAL_LAB) @@ -420,13 +467,8 @@ SET (cubicsdr_headers src/modules/modem/digital/ModemSQAM.h src/modules/modem/digital/ModemQAM.h src/modules/modem/digital/ModemQPSK.h + src/modules/modem/digital/ModemFSK.h ) -IF(ENABLE_LIQUID_EXPERIMENTAL) - SET (cubicsdr_sources - ${cubicsdr_sources} - src/modules/modem/digital/ModemFSK.h - ) -ENDIF() ENDIF() @@ -471,6 +513,8 @@ set(REG_EXT "[^/]*([.]cpp|[.]c|[.]h|[.]hpp)$") SOURCE_GROUP("Base" REGULAR_EXPRESSION "src/${REG_EXT}") SOURCE_GROUP("Forms\\SDRDevices" REGULAR_EXPRESSION "src/forms/SDRDevices/${REG_EXT}") +SOURCE_GROUP("Forms\\Bookmark" REGULAR_EXPRESSION "src/forms/Bookmark/${REG_EXT}") +SOURCE_GROUP("Forms\\Dialog" REGULAR_EXPRESSION "src/forms/Dialog/${REG_EXT}") SOURCE_GROUP("SDR" REGULAR_EXPRESSION "src/sdr/${REG_EXT}") IF(USE_HAMLIB) SOURCE_GROUP("Rig" REGULAR_EXPRESSION "src/rig/${REG_EXT}") @@ -493,25 +537,27 @@ SOURCE_GROUP("_ext-TinyXML" REGULAR_EXPRESSION "external/tinyxml/.*${REG_EXT}") SOURCE_GROUP("_ext-CubicVR2" REGULAR_EXPRESSION "external/cubicvr2/.*${REG_EXT}") include_directories ( - ${PROJECT_SOURCE_DIR}/src/forms/SDRDevices - ${PROJECT_SOURCE_DIR}/src/forms/DigitalConsole - ${PROJECT_SOURCE_DIR}/src/sdr - ${PROJECT_SOURCE_DIR}/src/demod - ${PROJECT_SOURCE_DIR}/src/modules - ${PROJECT_SOURCE_DIR}/src/modules/modem - ${PROJECT_SOURCE_DIR}/src/modules/modem/digital - ${PROJECT_SOURCE_DIR}/src/modules/modem/analog - ${PROJECT_SOURCE_DIR}/src/audio - ${PROJECT_SOURCE_DIR}/src/util - ${PROJECT_SOURCE_DIR}/src/panel - ${PROJECT_SOURCE_DIR}/src/visual - ${PROJECT_SOURCE_DIR}/src/process - ${PROJECT_SOURCE_DIR}/src/ui - ${PROJECT_SOURCE_DIR}/src/rig - ${PROJECT_SOURCE_DIR}/src - ${PROJECT_SOURCE_DIR}/external/lodepng - ${PROJECT_SOURCE_DIR}/external/tinyxml - ${PROJECT_SOURCE_DIR}/external/cubicvr2/math + ${PROJECT_SOURCE_DIR}/src/forms/SDRDevices + ${PROJECT_SOURCE_DIR}/src/forms/DigitalConsole + ${PROJECT_SOURCE_DIR}/src/forms/Bookmark + ${PROJECT_SOURCE_DIR}/src/forms/Dialog + ${PROJECT_SOURCE_DIR}/src/sdr + ${PROJECT_SOURCE_DIR}/src/demod + ${PROJECT_SOURCE_DIR}/src/modules + ${PROJECT_SOURCE_DIR}/src/modules/modem + ${PROJECT_SOURCE_DIR}/src/modules/modem/digital + ${PROJECT_SOURCE_DIR}/src/modules/modem/analog + ${PROJECT_SOURCE_DIR}/src/audio + ${PROJECT_SOURCE_DIR}/src/util + ${PROJECT_SOURCE_DIR}/src/panel + ${PROJECT_SOURCE_DIR}/src/visual + ${PROJECT_SOURCE_DIR}/src/process + ${PROJECT_SOURCE_DIR}/src/ui + ${PROJECT_SOURCE_DIR}/src/rig + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_SOURCE_DIR}/external/lodepng + ${PROJECT_SOURCE_DIR}/external/tinyxml + ${PROJECT_SOURCE_DIR}/external/cubicvr2/math ) set(RES_FILES "") @@ -520,11 +566,11 @@ if(MINGW OR MSVC) set(CMAKE_RC_COMPILER_INIT windres) ENABLE_LANGUAGE(RC) IF(EX_PLATFORM EQUAL 64) - SET(RC_TARGET "pe-x86-64") + SET(RC_TARGET "pe-x86-64") ELSE(EX_PLATFORM EQUAL 64) - SET(RC_TARGET "pe-i386") + SET(RC_TARGET "pe-i386") ENDIF(EX_PLATFORM EQUAL 64) - + SET(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") endif(MINGW OR MSVC) @@ -532,9 +578,12 @@ IF (NOT BUNDLE_APP) configure_files(${PROJECT_SOURCE_DIR}/font ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME}/fonts "*.fnt") configure_files(${PROJECT_SOURCE_DIR}/font ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME}/fonts "*.png") configure_files(${PROJECT_SOURCE_DIR}/icon ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME} CubicSDR.ico) - IF(MSVC) - configure_files(${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/ ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME} "*.dll") - ENDIF() + IF(MSVC) + configure_files(${PROJECT_SOURCE_DIR}/external/liquid-dsp/msvc/${EX_PLATFORM}/ ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME} "*.dll") + ENDIF() + IF (CUBICSDR_HAS_HEADER_IMAGE) + configure_files(${CUBICSDR_HEADER_IMAGE_DIR} ${CMAKE_BINARY_DIR}/${EX_PLATFORM_NAME} ${CUBICSDR_HEADER_IMAGE_FILE}) + ENDIF() add_executable(CubicSDR ${cubicsdr_sources} ${cubicsdr_headers} ${RES_FILES}) target_link_libraries(CubicSDR ${LIQUID_LIB} ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} ${OTHER_LIBRARIES}) ENDIF (NOT BUNDLE_APP) @@ -549,6 +598,8 @@ IF (MSVC) set_target_properties(CubicSDR PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS") set_target_properties(CubicSDR PROPERTIES COMPILE_DEFINITIONS_MINSIZEREL "_WINDOWS") set(CMAKE_CREATE_WIN32_EXE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"") + set_target_properties (CubicSDR PROPERTIES OUTPUT_NAME "${CUBICSDR_INSTALL_NAME}") + ENDIF(MSVC) IF (APPLE) @@ -570,20 +621,20 @@ IF (APPLE AND BUNDLE_APP) set(BUNDLE_MIR_SDR OFF CACHE BOOL "Bundle mir_sdr for personal use only -- do not distribute.") IF (BUNDLE_SOAPY_MODS) - ADD_DEFINITIONS( - -DBUNDLE_SOAPY_MODS=1 - ) - set(BUNDLED_MODS_ONLY OFF CACHE BOOL "Use bundled mods only") - IF (BUNDLED_MODS_ONLY) - ADD_DEFINITIONS( - -DBUNDLED_MODS_ONLY=1 - ) - ENDIF() + ADD_DEFINITIONS( + -DBUNDLE_SOAPY_MODS=1 + ) + set(BUNDLED_MODS_ONLY OFF CACHE BOOL "Use bundled mods only") + IF (BUNDLED_MODS_ONLY) + ADD_DEFINITIONS( + -DBUNDLED_MODS_ONLY=1 + ) + ENDIF() ENDIF() ADD_DEFINITIONS( - -std=c++0x - -pthread + -std=c++0x + -pthread -D_OSX_APP_ ) @@ -613,7 +664,7 @@ IF (APPLE AND BUNDLE_APP) MACOSX_BUNDLE_INFO_STRING "CubicSDR Open-Source Software-Defined Radio Application" MACOSX_BUNDLE_BUNDLE_NAME "CubicSDR" MACOSX_BUNDLE_BUNDLE_VERSION "${CUBICSDR_VERSION}" - MACOSX_BUNDLE_LONG_VERSION_STRING "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}.${CUBICSDR_VERSION_REL}" + MACOSX_BUNDLE_LONG_VERSION_STRING "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}${CUBICSDR_VERSION_SUFFIX}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}" MACOSX_BUNDLE_GUI_IDENTIFIER "com.cubicproductions.cubicsdr" MACOSX_BUNDLE_ICON_FILE "CubicSDR.icns" @@ -625,9 +676,10 @@ IF (APPLE AND BUNDLE_APP) # SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) IF (BUNDLE_SOAPY_MODS) - message(STATUS "SOAPY_ROOT: ${SOAPY_SDR_ROOT}") - file(GLOB SOAPY_MODS ${SOAPY_SDR_ROOT}/lib/SoapySDR/modules/*.so) + SET(SOAPY_SDR_MOD_PATH "${SOAPY_SDR_ROOT}/lib/SoapySDR/modules/${SOAPY_SDR_ABI_VERSION}") + + file(GLOB SOAPY_MODS ${SOAPY_MOD_PATH}/*.so) FOREACH(SOAPY_MOD_FILE ${SOAPY_MODS}) INSTALL( FILES "${SOAPY_MOD_FILE}" @@ -708,25 +760,26 @@ IF (APPLE AND BUNDLE_APP) include(CPack) ENDIF() + IF(APPLE AND NOT BUNDLE_APP) IF (NOT CMAKE_INSTALL_PREFIX) SET(CMAKE_INSTALL_PREFIX "/usr/") ENDIF() - ADD_DEFINITIONS( - -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" - ) + ADD_DEFINITIONS( + -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" + ) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro") - INSTALL(TARGETS CubicSDR DESTINATION bin) + INSTALL(TARGETS CubicSDR DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/src/CubicSDR.png - DESTINATION share/cubicsdr) + DESTINATION share/cubicsdr) install(FILES ${CUBICSDR_FONTS} - DESTINATION share/cubicsdr/fonts) + DESTINATION share/cubicsdr/fonts) CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" @@ -742,181 +795,200 @@ IF (WIN32 AND NOT BUILD_INSTALLER) ADD_DEFINITIONS( -DRES_FOLDER="../share/cubicsdr/" ) - + INSTALL(TARGETS CubicSDR DESTINATION bin) - INSTALL(FILES - ${LIQUID_DLL} - DESTINATION bin) + INSTALL(FILES + ${LIQUID_DLL} + DESTINATION bin) - IF(USE_HAMLIB) - FOREACH(HAMLIB_DLL ${HAMLIB_DLLS}) - message(STATUS "Copying Hamlib DLL: ${HAMLIB_DLL}") + IF(USE_HAMLIB) + FOREACH(HAMLIB_DLL ${HAMLIB_DLLS}) + message(STATUS "Copying Hamlib DLL: ${HAMLIB_DLL}") INSTALL( FILES "${HAMLIB_DLL}" DESTINATION bin ) - ENDFOREACH() - ENDIF() + ENDFOREACH() + ENDIF() INSTALL(FILES - ${PROJECT_SOURCE_DIR}/src/CubicSDR.png - DESTINATION share/cubicsdr) + ${PROJECT_SOURCE_DIR}/src/CubicSDR.png + DESTINATION share/cubicsdr) INSTALL(FILES - ${CUBICSDR_FONTS} - DESTINATION share/cubicsdr/fonts) + ${CUBICSDR_FONTS} + DESTINATION share/cubicsdr/fonts) + + IF (CUBICSDR_HAS_HEADER_IMAGE) + INSTALL(FILES + ${CUBICSDR_HEADER_IMAGE} + DESTINATION share/cubicsdr/) + ENDIF() + ENDIF() IF (WIN32 AND BUILD_INSTALLER) set(BUNDLE_SOAPY_MODS OFF CACHE BOOL "Bundle local SoapySDR modules") - set(CPACK_GENERATOR NSIS) - set(CPACK_PACKAGE_NAME "CubicSDR") - set(CPACK_PACKAGE_VENDOR "cubicsdr.com") - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CubicSDR ${CUBICSDR_VERSION} Installer") - set(CPACK_PACKAGE_INSTALL_DIRECTORY "CubicSDR") - SET(CPACK_NSIS_INSTALLED_ICON_NAME "CubicSDR.ico") - SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") - set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/icon\\\\NSIS_Header.bmp") - IF(EX_PLATFORM EQUAL 64) - SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") - SET(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") - SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") - set(CMAKE_CL_64 TRUE) # This gets around a bug in the CPack installer name generation for MinGW 64-bit since 2.8 - ELSE(EX_PLATFORM EQUAL 64) - SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") - SET(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} (x86)") - SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} (x86)") - set(CMAKE_CL_64 FALSE) - ENDIF(EX_PLATFORM EQUAL 64) - - set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") - install(TARGETS CubicSDR RUNTIME DESTINATION .) + set(CPACK_GENERATOR NSIS) + set(CPACK_PACKAGE_NAME "${CUBICSDR_INSTALL_NAME}") + set(CPACK_NSIS_DISPLAY_NAME "${CUBICSDR_INSTALL_TITLE}") + set(CPACK_PACKAGE_VENDOR "cubicsdr.com") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CUBICSDR_INSTALL_NAME}") + SET(CPACK_NSIS_INSTALLED_ICON_NAME "CubicSDR.ico") + SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") + set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/icon\\\\NSIS_Header.bmp") + IF(EX_PLATFORM EQUAL 64) + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + SET(CPACK_NSIS_PACKAGE_NAME "${CUBICSDR_INSTALL_NAME}") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CUBICSDR_INSTALL_NAME} ${CPACK_PACKAGE_VERSION}") + set(CMAKE_CL_64 TRUE) # This gets around a bug in the CPack installer name generation for MinGW 64-bit since 2.8 + ELSE(EX_PLATFORM EQUAL 64) + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") + SET(CPACK_NSIS_PACKAGE_NAME "${CUBICSDR_INSTALL_NAME} (x86)") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CUBICSDR_INSTALL_NAME} ${CPACK_PACKAGE_VERSION} (x86)") + set(CMAKE_CL_64 FALSE) + ENDIF(EX_PLATFORM EQUAL 64) + + set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") + install(TARGETS CubicSDR RUNTIME DESTINATION .) - install(FILES + install(FILES ${PROJECT_SOURCE_DIR}/icon/CubicSDR.ico - ${LIQUID_DLL} - DESTINATION .) + ${LIQUID_DLL} + DESTINATION .) - install(FILES + install(FILES ${CUBICSDR_FONTS} - DESTINATION fonts) - - IF(USE_HAMLIB) - FOREACH(HAMLIB_DLL ${HAMLIB_DLLS}) - message(STATUS "Copying Hamlib DLL: ${HAMLIB_DLL}") + DESTINATION fonts) + + IF (CUBICSDR_HAS_HEADER_IMAGE) + INSTALL(FILES + ${CUBICSDR_HEADER_IMAGE} + DESTINATION .) + ENDIF() + + IF(USE_HAMLIB) + FOREACH(HAMLIB_DLL ${HAMLIB_DLLS}) + message(STATUS "Copying Hamlib DLL: ${HAMLIB_DLL}") INSTALL( FILES - ${HAMLIB_DLL} - DESTINATION .) - ENDFOREACH() - ENDIF() + ${HAMLIB_DLL} + DESTINATION .) + ENDFOREACH() + ENDIF() - IF (BUNDLE_SOAPY_MODS) - ADD_DEFINITIONS( - -DBUNDLE_SOAPY_MODS=1 - ) - set(BUNDLED_MODS_ONLY OFF CACHE BOOL "Use bundled mods only") - IF (BUNDLED_MODS_ONLY) - ADD_DEFINITIONS( - -DBUNDLED_MODS_ONLY=1 - ) - ENDIF() - - file(GLOB SOAPY_BINS ${SOAPY_SDR_ROOT}/bin/*.dll) - file(GLOB SOAPY_MODS ${SOAPY_SDR_ROOT}/lib/SoapySDR/modules/*.dll) - message(STATUS "SOAPY_BINS: ${SOAPY_BINS}") - message(STATUS "SOAPY_MODS: ${SOAPY_MODS}") - install(FILES ${SOAPY_BINS} DESTINATION .) - install(FILES ${SOAPY_MODS} DESTINATION modules) - ENDIF(BUNDLE_SOAPY_MODS) - - IF(MSVC AND EX_PLATFORM EQUAL 32) - install(FILES - ${PROJECT_SOURCE_DIR}/external/msvc/${EX_PLATFORM_NAME}/libgcc_s_dw2-1.dll - DESTINATION .) - ENDIF(MSVC AND EX_PLATFORM EQUAL 32) + IF (BUNDLE_SOAPY_MODS) + ADD_DEFINITIONS( + -DBUNDLE_SOAPY_MODS=1 + ) + set(BUNDLED_MODS_ONLY OFF CACHE BOOL "Use bundled mods only") + IF (BUNDLED_MODS_ONLY) + ADD_DEFINITIONS( + -DBUNDLED_MODS_ONLY=1 + ) + ENDIF() + + file(GLOB SOAPY_BINS ${SOAPY_SDR_ROOT}/bin/*.dll) + file(GLOB SOAPY_MODS ${SOAPY_SDR_ROOT}/lib/SoapySDR/modules${SOAPY_SDR_ABI_VERSION}/*.dll) + message(STATUS "SOAPY_BINS: ${SOAPY_BINS}") + message(STATUS "SOAPY_MODS: ${SOAPY_MODS}") + install(FILES ${SOAPY_BINS} DESTINATION .) + install(FILES ${SOAPY_MODS} DESTINATION modules) + ENDIF(BUNDLE_SOAPY_MODS) + + IF(MSVC AND EX_PLATFORM EQUAL 32) + file(GLOB MSVC32_DEPS ${PROJECT_SOURCE_DIR}/external/msvc/${EX_PLATFORM_NAME}/*.dll) + install(FILES ${MSVC32_DEPS} DESTINATION .) + ENDIF(MSVC AND EX_PLATFORM EQUAL 32) - set(CPACK_PACKAGE_EXECUTABLES CubicSDR "CubicSDR") + set(CPACK_PACKAGE_EXECUTABLES CubicSDR "CubicSDR") - IF (MSVC) - install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/external/msvc/${EX_PLATFORM_NAME}/vc_redist.${EX_PLATFORM_NAME}.exe DESTINATION vc_redist) - set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\vc_redist\\\\vc_redist.${EX_PLATFORM_NAME}.exe\\\" /q:a'") - ENDIF (MSVC) - - - INCLUDE(CPack) + IF (MSVC) + install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/external/msvc/${EX_PLATFORM_NAME}/vc_redist.${EX_PLATFORM_NAME}.exe DESTINATION vc_redist) + set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\vc_redist\\\\vc_redist.${EX_PLATFORM_NAME}.exe\\\" /q:a'") + ENDIF (MSVC) + + + INCLUDE(CPack) ENDIF (WIN32 AND BUILD_INSTALLER) IF (UNIX AND NOT APPLE AND BUILD_DEB) set(CPACK_GENERATOR DEB) - set(CPACK_PACKAGE_NAME "CubicSDR") - SET(CPACK_DEBIAN_PACKAGE_DEPENDS " libwxgtk3.0-0, libpulse0") - SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Charles J. Cliffe ") - SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "CubicSDR Software Defined Radio application v${CUBICSDR_VERSION}") - SET(CPACK_DEBIAN_PACKAGE_SECTION "comm") + set(CPACK_PACKAGE_NAME "CubicSDR") + SET(CPACK_DEBIAN_PACKAGE_DEPENDS " libwxgtk3.0-0, libpulse0") + SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Charles J. Cliffe ") + SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "CubicSDR Software Defined Radio application v${CUBICSDR_VERSION}") + SET(CPACK_DEBIAN_PACKAGE_SECTION "comm") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") - SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${EX_PLATFORM_NAME}") + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${EX_PLATFORM_NAME}") IF (NOT CMAKE_INSTALL_PREFIX) SET(CMAKE_INSTALL_PREFIX "/usr/") ENDIF() - ADD_DEFINITIONS( - -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" - -D_FORTIFY_SOURCE=2 - ) - + ADD_DEFINITIONS( + -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" + -D_FORTIFY_SOURCE=2 + ) + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro") - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/external/deb/deb_post.sh.in" - "${CMAKE_CURRENT_BINARY_DIR}/deb_post.sh" @ONLY IMMEDIATE) + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/external/deb/deb_post.sh.in" + "${CMAKE_CURRENT_BINARY_DIR}/deb_post.sh" @ONLY IMMEDIATE) - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CubicSDR.desktop.in" - "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" @ONLY IMMEDIATE) + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CubicSDR.desktop.in" + "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" @ONLY IMMEDIATE) - INSTALL(TARGETS CubicSDR DESTINATION bin) + INSTALL(TARGETS CubicSDR DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/src/CubicSDR.png - DESTINATION share/cubicsdr) + DESTINATION share/cubicsdr) install(FILES ${CUBICSDR_FONTS} - DESTINATION share/cubicsdr/fonts) + DESTINATION share/cubicsdr/fonts) INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" DESTINATION share/applications) - INCLUDE(CPack) + INCLUDE(CPack) ENDIF() IF(UNIX AND NOT APPLE AND NOT BUILD_DEB) IF (NOT CMAKE_INSTALL_PREFIX) SET(CMAKE_INSTALL_PREFIX "/usr/") ENDIF() - ADD_DEFINITIONS( - -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" - ) + ADD_DEFINITIONS( + -DRES_FOLDER="${CMAKE_INSTALL_PREFIX}/share/cubicsdr/" + ) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro") - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CubicSDR.desktop.in" - "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" @ONLY IMMEDIATE) + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CubicSDR.desktop.in" + "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" @ONLY IMMEDIATE) - INSTALL(TARGETS CubicSDR DESTINATION bin) + INSTALL(TARGETS CubicSDR DESTINATION bin) INSTALL(FILES ${PROJECT_SOURCE_DIR}/src/CubicSDR.png - DESTINATION share/cubicsdr) + DESTINATION share/cubicsdr) INSTALL(FILES ${CUBICSDR_FONTS} - DESTINATION share/cubicsdr/fonts) + DESTINATION share/cubicsdr/fonts) + + + IF (CUBICSDR_HAS_HEADER_IMAGE) + INSTALL(FILES + ${CUBICSDR_HEADER_IMAGE} + DESTINATION share/cubicsdr) + ENDIF() INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop" - DESTINATION share/applications) + DESTINATION share/applications) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/external/deb/deb_post.sh.in" - "${CMAKE_CURRENT_BINARY_DIR}/deb_post.sh" @ONLY IMMEDIATE) + "${CMAKE_CURRENT_BINARY_DIR}/deb_post.sh" @ONLY IMMEDIATE) CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" diff --git a/LICENSE b/LICENSE index 00eec89..d159169 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ -GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 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. @@ -290,8 +290,8 @@ 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. - CubicSDR - Copyright (C) 2014 Charles J. Cliffe + + Copyright (C) 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 @@ -329,7 +329,7 @@ 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 + , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into @@ -337,4 +337,3 @@ 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. - diff --git a/README.md b/README.md index e931b94..579f298 100644 --- a/README.md +++ b/README.md @@ -48,4 +48,4 @@ Target Platforms: License: ------- - - GPL + - GPL-2.0+ diff --git a/external/liquid-dsp/How_to_build_liquid_dsp_for_Windows.txt b/external/liquid-dsp/How_to_build_liquid_dsp_for_Windows.txt new file mode 100644 index 0000000..386721b --- /dev/null +++ b/external/liquid-dsp/How_to_build_liquid_dsp_for_Windows.txt @@ -0,0 +1,14 @@ +- Building libliquid.dll and libliquid.a: +----------------------------------------- +- Install the Msys2 distribution as described on their site (https://msys2.github.io/) +- Add mingw32 and mingw64 compiler to the Msys2 installation. +- Copy config.h, makefile.mingw32, makefile.mingw64 in the liquid-dsp root directory. +- Run a Msys2 Win32 shell (mingw32.exe) and execute 'make -f makefile.mingw32 -j8' to compile a libliquid.dll 32bit Windows Dll. +- Run a Msys2 Win64 shell (mingw64.exe) and execute 'make -f makefile.mingw64 -j8' to compile a libliquid.dll 64bit Windows Dll. + +Note that the Win32 dll needs libgcc_s_dw2-1.dll and libwinpthread-1.dll (as a libgcc_s_dw2-1.dll dependency) as dependencies. +On the other hand, Win64 dll has no external dependencies. + +This process generates a .dll, .a together with libliquid.def the listing exported functions, and libliquid.lib the import lib matching the dll. + +In order to develop with Visual Studio, you need both the include/liquid.h at source level, and the libliquid.lib import library referenced in your project. \ No newline at end of file diff --git a/external/liquid-dsp/config.h b/external/liquid-dsp/config.h new file mode 100644 index 0000000..01a5eae --- /dev/null +++ b/external/liquid-dsp/config.h @@ -0,0 +1,192 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + + +#ifndef __LIQUID_CONFIG_H__ +#define __LIQUID_CONFIG_H__ + +/* Define to 1 if you have the header file. */ +#define HAVE_COMPLEX_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_FEC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_FFTW3_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `c' library (-lc). */ +#define HAVE_LIBC 1 + +/* Define to 1 if you have the `fec' library (-lfec). */ +/* #undef HAVE_LIBFEC */ + +/* Define to 1 if you have the `fftw3f' library (-lfftw3f). */ +/* #undef HAVE_LIBFFTW3F */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ //MMX +#define HAVE_MMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ //SSE +#define HAVE_XMMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ //SSE2 +#define HAVE_EMMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ //SSE3 +#define HAVE_PMMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ //SSE4.1 +//#define HAVE_SMMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ //AVX +//#define HAVE_IMMINTRIN_H 1 + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of `unsigned int', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_INT 4 + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#define HAVE_REALLOC 1 + +/* Support MMX instructions */ +#define HAVE_MMX /**/ + +/* Support SSE (Streaming SIMD Extensions) instructions */ +#define HAVE_SSE /**/ + +/* Support SSE2 (Streaming SIMD Extensions 2) instructions */ +#define HAVE_SSE2 /**/ + +/* Support SSE3 (Streaming SIMD Extensions 3) instructions */ +#define HAVE_SSE3 /**/ + +/* Support SSE4.1 (Streaming SIMD Extensions 4.1) instructions */ +#define HAVE_SSE41 /**/ + +/* Support SSE4.2 (Streaming SIMD Extensions 4.2) instructions */ +#define HAVE_SSE42 1 + +/* Support SSSE3 (Supplemental Streaming SIMD Extensions 3) instructions */ +#define HAVE_SSSE3 /**/ + +/* Support AVX (Advanced Vector Extensions) instructions */ +#define HAVE_AVX /**/ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TMMINTRIN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Force internal FFT even if libfftw is available */ +/* #undef LIQUID_FFTOVERRIDE */ + +/* Force overriding of SIMD (use portable C code) */ +/* #undef LIQUID_SIMDOVERRIDE */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "support@liquidsdr.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "liquid-dsp" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "liquid-dsp 1.3.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "liquid-dsp" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.3.0" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT32_T */ + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT8_T */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ + +/* Define to rpl_realloc if the replacement function should be used. */ +/* #undef realloc */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint32_t */ + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint8_t */ + + +#endif // __LIQUID_CONFIG_H__ + diff --git a/external/liquid-dsp/gcc/32/libliquid.a b/external/liquid-dsp/gcc/32/libliquid.a index 473d57d..a8b3d3f 100644 Binary files a/external/liquid-dsp/gcc/32/libliquid.a and b/external/liquid-dsp/gcc/32/libliquid.a differ diff --git a/external/liquid-dsp/gcc/32/libliquid.def b/external/liquid-dsp/gcc/32/libliquid.def index 6df6363..b3b8a0a 100644 --- a/external/liquid-dsp/gcc/32/libliquid.def +++ b/external/liquid-dsp/gcc/32/libliquid.def @@ -36,1836 +36,2058 @@ EXPORTS ampmodem_create @35 ampmodem_debug_print @36 ampmodem_demodulate @37 - ampmodem_destroy @38 - ampmodem_modulate @39 - ampmodem_print @40 - ampmodem_reset @41 - apsk128_map @42 DATA - apsk128_num_levels @43 DATA - apsk128_p @44 DATA - apsk128_phi @45 DATA - apsk128_r @46 DATA - apsk128_r_slicer @47 DATA - apsk16_map @48 DATA - apsk16_num_levels @49 DATA - apsk16_p @50 DATA - apsk16_phi @51 DATA - apsk16_r @52 DATA - apsk16_r_slicer @53 DATA - apsk256_map @54 DATA - apsk256_num_levels @55 DATA - apsk256_p @56 DATA - apsk256_phi @57 DATA - apsk256_r @58 DATA - apsk256_r_slicer @59 DATA - apsk32_map @60 DATA - apsk32_num_levels @61 DATA - apsk32_p @62 DATA - apsk32_phi @63 DATA - apsk32_r @64 DATA - apsk32_r_slicer @65 DATA - apsk4_map @66 DATA - apsk4_num_levels @67 DATA - apsk4_p @68 DATA - apsk4_phi @69 DATA - apsk4_r @70 DATA - apsk4_r_slicer @71 DATA - apsk64_map @72 DATA - apsk64_num_levels @73 DATA - apsk64_p @74 DATA - apsk64_phi @75 DATA - apsk64_r @76 DATA - apsk64_r_slicer @77 DATA - apsk8_map @78 DATA - apsk8_num_levels @79 DATA - apsk8_p @80 DATA - apsk8_phi @81 DATA - apsk8_r @82 DATA - apsk8_r_slicer @83 DATA - asgram_create @84 - asgram_destroy @85 - asgram_execute @86 - asgram_push @87 - asgram_reset @88 - asgram_set_scale @89 - autocorr_cccf_create @90 - autocorr_cccf_destroy @91 - autocorr_cccf_execute @92 - autocorr_cccf_execute_block @93 - autocorr_cccf_get_energy @94 - autocorr_cccf_print @95 - autocorr_cccf_push @96 - autocorr_cccf_reset @97 - autocorr_rrrf_create @98 - autocorr_rrrf_destroy @99 - autocorr_rrrf_execute @100 - autocorr_rrrf_execute_block @101 - autocorr_rrrf_get_energy @102 - autocorr_rrrf_print @103 - autocorr_rrrf_push @104 - autocorr_rrrf_reset @105 - awgn @106 - bessel_azpkf @107 - bilinear_zpkf @108 - blackmanharris @109 - bpacketgen_assemble_header @110 - bpacketgen_assemble_pnsequence @111 - bpacketgen_compute_packet_len @112 - bpacketgen_create @113 - bpacketgen_destroy @114 - bpacketgen_encode @115 - bpacketgen_get_packet_len @116 - bpacketgen_print @117 - bpacketgen_recreate @118 - bpacketsync_assemble_pnsequence @119 - bpacketsync_create @120 - bpacketsync_decode_header @121 - bpacketsync_decode_payload @122 - bpacketsync_destroy @123 - bpacketsync_execute @124 - bpacketsync_execute_bit @125 - bpacketsync_execute_byte @126 - bpacketsync_execute_rxheader @127 - bpacketsync_execute_rxpayload @128 - bpacketsync_execute_seekpn @129 - bpacketsync_execute_sym @130 - bpacketsync_print @131 - bpacketsync_reconfig @132 - bpacketsync_reset @133 - bpresync_cccf_correlate @134 - bpresync_cccf_correlatex @135 - bpresync_cccf_create @136 - bpresync_cccf_destroy @137 - bpresync_cccf_print @138 - bpresync_cccf_push @139 - bpresync_cccf_reset @140 - bsequence_accumulate @141 - bsequence_add @142 - bsequence_circshift @143 - bsequence_clear @144 - bsequence_correlate @145 - bsequence_create @146 - bsequence_create_ccodes @147 - bsequence_destroy @148 - bsequence_get_length @149 - bsequence_index @150 - bsequence_init @151 - bsequence_init_msequence @152 - bsequence_mul @153 - bsequence_print @154 - bsequence_push @155 - bsync_cccf_correlate @156 - bsync_cccf_create @157 - bsync_cccf_create_msequence @158 - bsync_cccf_destroy @159 - bsync_cccf_print @160 - bsync_crcf_correlate @161 - bsync_crcf_create @162 - bsync_crcf_create_msequence @163 - bsync_crcf_destroy @164 - bsync_crcf_print @165 - bsync_rrrf_correlate @166 - bsync_rrrf_create @167 - bsync_rrrf_create_msequence @168 - bsync_rrrf_destroy @169 - bsync_rrrf_print @170 - butter_azpkf @171 - cawgn @172 - cbuffercf_clear @173 - cbuffercf_create @174 - cbuffercf_create_max @175 - cbuffercf_debug_print @176 - cbuffercf_destroy @177 - cbuffercf_is_full @178 - cbuffercf_linearize @179 - cbuffercf_max_read @180 - cbuffercf_max_size @181 - cbuffercf_pop @182 - cbuffercf_print @183 - cbuffercf_push @184 - cbuffercf_read @185 - cbuffercf_release @186 - cbuffercf_size @187 - cbuffercf_space_available @188 - cbuffercf_write @189 - cbufferf_clear @190 - cbufferf_create @191 - cbufferf_create_max @192 - cbufferf_debug_print @193 - cbufferf_destroy @194 - cbufferf_is_full @195 - cbufferf_linearize @196 - cbufferf_max_read @197 - cbufferf_max_size @198 - cbufferf_pop @199 - cbufferf_print @200 - cbufferf_push @201 - cbufferf_read @202 - cbufferf_release @203 - cbufferf_size @204 - cbufferf_space_available @205 - cbufferf_write @206 - cheby1_azpkf @207 - cheby2_azpkf @208 - checksum_generate_key @209 - chromosome_clear @210 - chromosome_copy @211 - chromosome_create @212 - chromosome_create_basic @213 - chromosome_create_clone @214 - chromosome_crossover @215 - chromosome_destroy @216 - chromosome_get_num_traits @217 - chromosome_init @218 - chromosome_init_random @219 - chromosome_initf @220 - chromosome_mutate @221 - chromosome_print @222 - chromosome_printf @223 - chromosome_value @224 - chromosome_valuef @225 - compress_cf_mulaw @226 - compress_mulaw @227 - count_bit_errors @228 - count_bit_errors_array @229 - crandnf @230 - crc16_generate_key @231 - crc24_generate_key @232 - crc32_generate_key @233 - crc8_generate_key @234 - crc_generate_key @235 - crc_get_length @236 - crc_scheme_str @237 DATA - crc_validate_message @238 - cvsd_create @239 - cvsd_decode @240 - cvsd_decode8 @241 - cvsd_destroy @242 - cvsd_encode @243 - cvsd_encode8 @244 - cvsd_print @245 - detector_cccf_compute_dotprods @246 - detector_cccf_correlate @247 - detector_cccf_create @248 - detector_cccf_debug_print @249 - detector_cccf_destroy @250 - detector_cccf_estimate_offsets @251 - detector_cccf_print @252 - detector_cccf_reset @253 - detector_cccf_update_sumsq @254 - dotprod_cccf_create @255 - dotprod_cccf_destroy @256 - dotprod_cccf_execute @257 - dotprod_cccf_print @258 - dotprod_cccf_recreate @259 - dotprod_cccf_run @260 - dotprod_cccf_run4 @261 - dotprod_crcf_create @262 - dotprod_crcf_destroy @263 - dotprod_crcf_execute @264 - dotprod_crcf_print @265 - dotprod_crcf_recreate @266 - dotprod_crcf_run @267 - dotprod_crcf_run4 @268 - dotprod_rrrf_create @269 - dotprod_rrrf_destroy @270 - dotprod_rrrf_execute @271 - dotprod_rrrf_print @272 - dotprod_rrrf_recreate @273 - dotprod_rrrf_run @274 - dotprod_rrrf_run4 @275 - ellip_acdf @276 - ellip_asnf @277 - ellip_azpkf @278 - ellip_cdf @279 - ellip_snf @280 - ellipdegf @281 - ellipkf @282 - eqlms_cccf_create @283 - eqlms_cccf_create_rnyquist @284 - eqlms_cccf_destroy @285 - eqlms_cccf_execute @286 - eqlms_cccf_get_bw @287 - eqlms_cccf_get_weights @288 - eqlms_cccf_print @289 - eqlms_cccf_push @290 - eqlms_cccf_recreate @291 - eqlms_cccf_reset @292 - eqlms_cccf_set_bw @293 - eqlms_cccf_step @294 - eqlms_cccf_train @295 - eqlms_cccf_update_sumsq @296 - eqlms_rrrf_create @297 - eqlms_rrrf_create_rnyquist @298 - eqlms_rrrf_destroy @299 - eqlms_rrrf_execute @300 - eqlms_rrrf_get_bw @301 - eqlms_rrrf_get_weights @302 - eqlms_rrrf_print @303 - eqlms_rrrf_push @304 - eqlms_rrrf_recreate @305 - eqlms_rrrf_reset @306 - eqlms_rrrf_set_bw @307 - eqlms_rrrf_step @308 - eqlms_rrrf_train @309 - eqlms_rrrf_update_sumsq @310 - eqrls_cccf_create @311 - eqrls_cccf_destroy @312 - eqrls_cccf_execute @313 - eqrls_cccf_get_bw @314 - eqrls_cccf_get_weights @315 - eqrls_cccf_print @316 - eqrls_cccf_push @317 - eqrls_cccf_recreate @318 - eqrls_cccf_reset @319 - eqrls_cccf_set_bw @320 - eqrls_cccf_step @321 - eqrls_cccf_train @322 - eqrls_rrrf_create @323 - eqrls_rrrf_destroy @324 - eqrls_rrrf_execute @325 - eqrls_rrrf_get_bw @326 - eqrls_rrrf_get_weights @327 - eqrls_rrrf_print @328 - eqrls_rrrf_push @329 - eqrls_rrrf_recreate @330 - eqrls_rrrf_reset @331 - eqrls_rrrf_set_bw @332 - eqrls_rrrf_step @333 - eqrls_rrrf_train @334 - estimate_req_filter_As @335 - estimate_req_filter_df @336 - estimate_req_filter_len @337 - estimate_req_filter_len_Herrmann @338 - estimate_req_filter_len_Kaiser @339 - expand_cf_mulaw @340 - expand_mulaw @341 - fec_block_get_enc_msg_len @342 - fec_conv27_poly @343 DATA - fec_conv27p23_matrix @344 DATA - fec_conv27p34_matrix @345 DATA - fec_conv27p45_matrix @346 DATA - fec_conv27p56_matrix @347 DATA - fec_conv27p67_matrix @348 DATA - fec_conv27p78_matrix @349 DATA - fec_conv29_poly @350 DATA - fec_conv29p23_matrix @351 DATA - fec_conv29p34_matrix @352 DATA - fec_conv29p45_matrix @353 DATA - fec_conv29p56_matrix @354 DATA - fec_conv29p67_matrix @355 DATA - fec_conv29p78_matrix @356 DATA - fec_conv39_poly @357 DATA - fec_conv615_poly @358 DATA - fec_conv_create @359 - fec_conv_destroy @360 - fec_conv_get_enc_msg_len @361 - fec_conv_punctured_create @362 - fec_conv_punctured_decode @363 - fec_conv_punctured_destroy @364 - fec_conv_punctured_encode @365 - fec_create @366 - fec_decode @367 - fec_decode_soft @368 - fec_destroy @369 - fec_encode @370 - fec_get_enc_msg_length @371 - fec_get_rate @372 - fec_golay2412_create @373 - fec_golay2412_decode @374 - fec_golay2412_decode_symbol @375 - fec_golay2412_destroy @376 - fec_golay2412_encode @377 - fec_golay2412_encode_symbol @378 - fec_hamming128_create @379 - fec_hamming128_decode @380 - fec_hamming128_decode_soft @381 - fec_hamming128_decode_symbol @382 - fec_hamming128_destroy @383 - fec_hamming128_encode @384 - fec_hamming128_encode_symbol @385 - fec_hamming1511_decode_symbol @386 - fec_hamming1511_encode_symbol @387 - fec_hamming3126_decode_symbol @388 - fec_hamming3126_encode_symbol @389 - fec_hamming74_create @390 - fec_hamming74_decode @391 - fec_hamming74_decode_soft @392 - fec_hamming74_destroy @393 - fec_hamming74_encode @394 - fec_hamming84_create @395 - fec_hamming84_decode @396 - fec_hamming84_decode_soft @397 - fec_hamming84_destroy @398 - fec_hamming84_encode @399 - fec_pass_create @400 - fec_pass_decode @401 - fec_pass_destroy @402 - fec_pass_encode @403 - fec_pass_print @404 - fec_print @405 - fec_recreate @406 - fec_rep3_create @407 - fec_rep3_decode @408 - fec_rep3_decode_soft @409 - fec_rep3_destroy @410 - fec_rep3_encode @411 - fec_rep3_print @412 - fec_rep5_create @413 - fec_rep5_decode @414 - fec_rep5_decode_soft @415 - fec_rep5_destroy @416 - fec_rep5_encode @417 - fec_rep5_print @418 - fec_rs_create @419 - fec_rs_decode @420 - fec_rs_destroy @421 - fec_rs_encode @422 - fec_rs_get_enc_msg_len @423 - fec_scheme_is_convolutional @424 - fec_scheme_is_hamming @425 - fec_scheme_is_punctured @426 - fec_scheme_is_reedsolomon @427 - fec_scheme_is_repeat @428 - fec_scheme_str @429 DATA - fec_secded2216_compute_parity @430 - fec_secded2216_compute_syndrome @431 - fec_secded2216_create @432 - fec_secded2216_decode @433 - fec_secded2216_decode_symbol @434 - fec_secded2216_destroy @435 - fec_secded2216_encode @436 - fec_secded2216_encode_symbol @437 - fec_secded2216_estimate_ehat @438 - fec_secded3932_compute_parity @439 - fec_secded3932_compute_syndrome @440 - fec_secded3932_create @441 - fec_secded3932_decode @442 - fec_secded3932_decode_symbol @443 - fec_secded3932_destroy @444 - fec_secded3932_encode @445 - fec_secded3932_encode_symbol @446 - fec_secded3932_estimate_ehat @447 - fec_secded7264_compute_parity @448 - fec_secded7264_compute_syndrome @449 - fec_secded7264_create @450 - fec_secded7264_decode @451 - fec_secded7264_decode_symbol @452 - fec_secded7264_destroy @453 - fec_secded7264_encode @454 - fec_secded7264_encode_symbol @455 - fec_secded7264_estimate_ehat @456 - fec_sumproduct @457 - fec_sumproduct_step @458 - fecsoft_hamming128_decode @459 - fecsoft_hamming128_decode_n3 @460 - fecsoft_hamming128_n3 @461 DATA - fecsoft_hamming74_decode @462 - fecsoft_hamming84_decode @463 - fft_create_plan @464 - fft_create_plan_dft @465 - fft_create_plan_mixed_radix @466 - fft_create_plan_r2r_1d @467 - fft_create_plan_rader @468 - fft_create_plan_rader2 @469 - fft_create_plan_radix2 @470 - fft_destroy_plan @471 - fft_destroy_plan_dft @472 - fft_destroy_plan_mixed_radix @473 - fft_destroy_plan_r2r_1d @474 - fft_destroy_plan_rader @475 - fft_destroy_plan_rader2 @476 - fft_destroy_plan_radix2 @477 - fft_estimate_mixed_radix @478 - fft_execute @479 - fft_execute_REDFT00 @480 - fft_execute_REDFT01 @481 - fft_execute_REDFT10 @482 - fft_execute_REDFT11 @483 - fft_execute_RODFT00 @484 - fft_execute_RODFT01 @485 - fft_execute_RODFT10 @486 - fft_execute_RODFT11 @487 - fft_execute_dft @488 - fft_execute_dft_16 @489 - fft_execute_dft_2 @490 - fft_execute_dft_3 @491 - fft_execute_dft_4 @492 - fft_execute_dft_5 @493 - fft_execute_dft_6 @494 - fft_execute_dft_7 @495 - fft_execute_dft_8 @496 - fft_execute_mixed_radix @497 - fft_execute_rader @498 - fft_execute_rader2 @499 - fft_execute_radix2 @500 - fft_is_radix2 @501 - fft_print_plan @502 - fft_print_plan_r2r_1d @503 - fft_print_plan_recursive @504 - fft_r2r_1d_run @505 - fft_reverse_index @506 - fft_run @507 - fft_shift @508 - fftfilt_cccf_create @509 - fftfilt_cccf_destroy @510 - fftfilt_cccf_execute @511 - fftfilt_cccf_get_length @512 - fftfilt_cccf_print @513 - fftfilt_cccf_reset @514 - fftfilt_cccf_set_scale @515 - fftfilt_crcf_create @516 - fftfilt_crcf_destroy @517 - fftfilt_crcf_execute @518 - fftfilt_crcf_get_length @519 - fftfilt_crcf_print @520 - fftfilt_crcf_reset @521 - fftfilt_crcf_set_scale @522 - fftfilt_rrrf_create @523 - fftfilt_rrrf_destroy @524 - fftfilt_rrrf_execute @525 - fftfilt_rrrf_get_length @526 - fftfilt_rrrf_print @527 - fftfilt_rrrf_reset @528 - fftfilt_rrrf_set_scale @529 - fir_group_delay @530 - firdecim_cccf_clear @531 - firdecim_cccf_create @532 - firdecim_cccf_create_prototype @533 - firdecim_cccf_create_rnyquist @534 - firdecim_cccf_destroy @535 - firdecim_cccf_execute @536 - firdecim_cccf_execute_block @537 - firdecim_cccf_print @538 - firdecim_crcf_clear @539 - firdecim_crcf_create @540 - firdecim_crcf_create_prototype @541 - firdecim_crcf_create_rnyquist @542 - firdecim_crcf_destroy @543 - firdecim_crcf_execute @544 - firdecim_crcf_execute_block @545 - firdecim_crcf_print @546 - firdecim_rrrf_clear @547 - firdecim_rrrf_create @548 - firdecim_rrrf_create_prototype @549 - firdecim_rrrf_create_rnyquist @550 - firdecim_rrrf_destroy @551 - firdecim_rrrf_execute @552 - firdecim_rrrf_execute_block @553 - firdecim_rrrf_print @554 - firdespm_compute_error @555 - firdespm_compute_interp @556 - firdespm_compute_taps @557 - firdespm_create @558 - firdespm_destroy @559 - firdespm_execute @560 - firdespm_iext_search @561 - firdespm_init_grid @562 - firdespm_is_search_complete @563 - firdespm_print @564 - firdespm_run @565 - firfarrow_crcf_create @566 - firfarrow_crcf_destroy @567 - firfarrow_crcf_execute @568 - firfarrow_crcf_execute_block @569 - firfarrow_crcf_freqresponse @570 - firfarrow_crcf_genpoly @571 - firfarrow_crcf_get_coefficients @572 - firfarrow_crcf_get_length @573 - firfarrow_crcf_groupdelay @574 - firfarrow_crcf_print @575 - firfarrow_crcf_push @576 - firfarrow_crcf_reset @577 - firfarrow_crcf_set_delay @578 - firfarrow_rrrf_create @579 - firfarrow_rrrf_destroy @580 - firfarrow_rrrf_execute @581 - firfarrow_rrrf_execute_block @582 - firfarrow_rrrf_freqresponse @583 - firfarrow_rrrf_genpoly @584 - firfarrow_rrrf_get_coefficients @585 - firfarrow_rrrf_get_length @586 - firfarrow_rrrf_groupdelay @587 - firfarrow_rrrf_print @588 - firfarrow_rrrf_push @589 - firfarrow_rrrf_reset @590 - firfarrow_rrrf_set_delay @591 - firfilt_cccf_create @592 - firfilt_cccf_create_kaiser @593 - firfilt_cccf_create_rnyquist @594 - firfilt_cccf_destroy @595 - firfilt_cccf_execute @596 - firfilt_cccf_execute_block @597 - firfilt_cccf_freqresponse @598 - firfilt_cccf_get_length @599 - firfilt_cccf_groupdelay @600 - firfilt_cccf_print @601 - firfilt_cccf_push @602 - firfilt_cccf_recreate @603 - firfilt_cccf_reset @604 - firfilt_cccf_set_scale @605 - firfilt_crcf_create @606 - firfilt_crcf_create_kaiser @607 - firfilt_crcf_create_rnyquist @608 - firfilt_crcf_destroy @609 - firfilt_crcf_execute @610 - firfilt_crcf_execute_block @611 - firfilt_crcf_freqresponse @612 - firfilt_crcf_get_length @613 - firfilt_crcf_groupdelay @614 - firfilt_crcf_print @615 - firfilt_crcf_push @616 - firfilt_crcf_recreate @617 - firfilt_crcf_reset @618 - firfilt_crcf_set_scale @619 - firfilt_rrrf_create @620 - firfilt_rrrf_create_kaiser @621 - firfilt_rrrf_create_rnyquist @622 - firfilt_rrrf_destroy @623 - firfilt_rrrf_execute @624 - firfilt_rrrf_execute_block @625 - firfilt_rrrf_freqresponse @626 - firfilt_rrrf_get_length @627 - firfilt_rrrf_groupdelay @628 - firfilt_rrrf_print @629 - firfilt_rrrf_push @630 - firfilt_rrrf_recreate @631 - firfilt_rrrf_reset @632 - firfilt_rrrf_set_scale @633 - firhilbf_c2r_execute @634 - firhilbf_create @635 - firhilbf_decim_execute @636 - firhilbf_destroy @637 - firhilbf_interp_execute @638 - firhilbf_print @639 - firhilbf_r2c_execute @640 - firhilbf_reset @641 - firinterp_cccf_create @642 - firinterp_cccf_create_nyquist @643 - firinterp_cccf_create_prototype @644 - firinterp_cccf_create_rnyquist @645 - firinterp_cccf_destroy @646 - firinterp_cccf_execute @647 - firinterp_cccf_execute_block @648 - firinterp_cccf_print @649 - firinterp_cccf_reset @650 - firinterp_crcf_create @651 - firinterp_crcf_create_nyquist @652 - firinterp_crcf_create_prototype @653 - firinterp_crcf_create_rnyquist @654 - firinterp_crcf_destroy @655 - firinterp_crcf_execute @656 - firinterp_crcf_execute_block @657 - firinterp_crcf_print @658 - firinterp_crcf_reset @659 - firinterp_rrrf_create @660 - firinterp_rrrf_create_nyquist @661 - firinterp_rrrf_create_prototype @662 - firinterp_rrrf_create_rnyquist @663 - firinterp_rrrf_destroy @664 - firinterp_rrrf_execute @665 - firinterp_rrrf_execute_block @666 - firinterp_rrrf_print @667 - firinterp_rrrf_reset @668 - firpfb_cccf_create @669 - firpfb_cccf_create_drnyquist @670 - firpfb_cccf_create_rnyquist @671 - firpfb_cccf_destroy @672 - firpfb_cccf_execute @673 - firpfb_cccf_print @674 - firpfb_cccf_push @675 - firpfb_cccf_recreate @676 - firpfb_cccf_reset @677 - firpfb_crcf_create @678 - firpfb_crcf_create_drnyquist @679 - firpfb_crcf_create_rnyquist @680 - firpfb_crcf_destroy @681 - firpfb_crcf_execute @682 - firpfb_crcf_print @683 - firpfb_crcf_push @684 - firpfb_crcf_recreate @685 - firpfb_crcf_reset @686 - firpfb_rrrf_create @687 - firpfb_rrrf_create_drnyquist @688 - firpfb_rrrf_create_rnyquist @689 - firpfb_rrrf_destroy @690 - firpfb_rrrf_execute @691 - firpfb_rrrf_print @692 - firpfb_rrrf_push @693 - firpfb_rrrf_recreate @694 - firpfb_rrrf_reset @695 - firpfbch2_crcf_create @696 - firpfbch2_crcf_create_kaiser @697 - firpfbch2_crcf_destroy @698 - firpfbch2_crcf_execute @699 - firpfbch2_crcf_execute_analyzer @700 - firpfbch2_crcf_execute_synthesizer @701 - firpfbch2_crcf_print @702 - firpfbch2_crcf_reset @703 - firpfbch_cccf_analyzer_execute @704 - firpfbch_cccf_analyzer_push @705 - firpfbch_cccf_analyzer_run @706 - firpfbch_cccf_create @707 - firpfbch_cccf_create_kaiser @708 - firpfbch_cccf_create_rnyquist @709 - firpfbch_cccf_destroy @710 - firpfbch_cccf_print @711 - firpfbch_cccf_reset @712 - firpfbch_cccf_synthesizer_execute @713 - firpfbch_crcf_analyzer_execute @714 - firpfbch_crcf_analyzer_push @715 - firpfbch_crcf_analyzer_run @716 - firpfbch_crcf_create @717 - firpfbch_crcf_create_kaiser @718 - firpfbch_crcf_create_rnyquist @719 - firpfbch_crcf_destroy @720 - firpfbch_crcf_print @721 - firpfbch_crcf_reset @722 - firpfbch_crcf_synthesizer_execute @723 - flexframegen_assemble @724 - flexframegen_create @725 - flexframegen_destroy @726 - flexframegen_encode_header @727 - flexframegen_getframelen @728 - flexframegen_getprops @729 - flexframegen_is_assembled @730 - flexframegen_modulate_header @731 - flexframegen_modulate_payload @732 - flexframegen_print @733 - flexframegen_reconfigure @734 - flexframegen_reset @735 - flexframegen_setprops @736 - flexframegen_write_header @737 - flexframegen_write_payload @738 - flexframegen_write_preamble @739 - flexframegen_write_samples @740 - flexframegen_write_tail @741 - flexframegenprops_init_default @742 - flexframesync_create @743 - flexframesync_debug_disable @744 - flexframesync_debug_enable @745 - flexframesync_debug_print @746 - flexframesync_decode_header @747 - flexframesync_decode_payload @748 - flexframesync_destroy @749 - flexframesync_execute @750 - flexframesync_execute_rxheader @751 - flexframesync_execute_rxpayload @752 - flexframesync_execute_rxpn @753 - flexframesync_execute_seekpn @754 - flexframesync_print @755 - flexframesync_pushpn @756 - flexframesync_reset @757 - flexframesync_syncpn @758 - flexframesync_update_symsync @759 - fpoly_bessel @760 - fpoly_bessel_roots @761 - fpoly_bessel_roots_orchard @762 - fpoly_bessel_roots_orchard_recursion @763 - framegen64_byte_to_syms @764 - framegen64_create @765 - framegen64_destroy @766 - framegen64_execute @767 - framegen64_print @768 - framesync64_create @769 - framesync64_debug_disable @770 - framesync64_debug_enable @771 - framesync64_debug_print @772 - framesync64_decode_payload @773 - framesync64_destroy @774 - framesync64_execute @775 - framesync64_execute_rxpayload @776 - framesync64_execute_rxpreamble @777 - framesync64_execute_seekpn @778 - framesync64_print @779 - framesync64_pushpn @780 - framesync64_reset @781 - framesync64_syncpn @782 - framesync64_update_symsync @783 - framesyncstats_default @784 DATA - framesyncstats_init_default @785 - framesyncstats_print @786 - freqdem_create @787 - freqdem_demodulate @788 - freqdem_demodulate_block @789 - freqdem_destroy @790 - freqdem_print @791 - freqdem_reset @792 - freqmod_create @793 - freqmod_destroy @794 - freqmod_modulate @795 - freqmod_modulate_block @796 - freqmod_print @797 - freqmod_reset @798 - gasearch_create @799 - gasearch_create_advanced @800 - gasearch_crossover @801 - gasearch_destroy @802 - gasearch_evaluate @803 - gasearch_evolve @804 - gasearch_getopt @805 - gasearch_mutate @806 - gasearch_print @807 - gasearch_rank @808 - gasearch_run @809 - gasearch_set_mutation_rate @810 - gasearch_set_population_size @811 - gmskdem_create @812 - gmskdem_debug_print @813 - gmskdem_demodulate @814 - gmskdem_destroy @815 - gmskdem_print @816 - gmskdem_reset @817 - gmskdem_set_eq_bw @818 - gmskframegen_assemble @819 - gmskframegen_create @820 - gmskframegen_destroy @821 - gmskframegen_encode_header @822 - gmskframegen_getframelen @823 - gmskframegen_print @824 - gmskframegen_reset @825 - gmskframegen_write_header @826 - gmskframegen_write_payload @827 - gmskframegen_write_preamble @828 - gmskframegen_write_samples @829 - gmskframegen_write_tail @830 - gmskframesync_create @831 - gmskframesync_debug_disable @832 - gmskframesync_debug_enable @833 - gmskframesync_debug_print @834 - gmskframesync_decode_header @835 - gmskframesync_destroy @836 - gmskframesync_execute @837 - gmskframesync_execute_detectframe @838 - gmskframesync_execute_rxheader @839 - gmskframesync_execute_rxpayload @840 - gmskframesync_execute_rxpreamble @841 - gmskframesync_print @842 - gmskframesync_pushpn @843 - gmskframesync_reset @844 - gmskframesync_syncpn @845 - gmskframesync_update_fi @846 - gmskframesync_update_symsync @847 - gmskmod_create @848 - gmskmod_destroy @849 - gmskmod_modulate @850 - gmskmod_print @851 - gmskmod_reset @852 - golay2412_Gt @853 DATA - golay2412_H @854 DATA - golay2412_P @855 DATA - golay2412_matrix_mul @856 - golay2412_parity_search @857 - gradsearch_create @858 - gradsearch_destroy @859 - gradsearch_execute @860 - gradsearch_gradient @861 - gradsearch_linesearch @862 - gradsearch_norm @863 - gradsearch_print @864 - gradsearch_step @865 - gray_decode @866 - gray_encode @867 - hamming @868 - hamming128_enc_gentab @869 DATA - hamming74_dec_gentab @870 DATA - hamming74_enc_gentab @871 DATA - hamming84_dec_gentab @872 DATA - hamming84_enc_gentab @873 DATA - hann @874 - icrandnf @875 - iir_group_delay @876 - iirdecim_cccf_create @877 - iirdecim_cccf_create_prototype @878 - iirdecim_cccf_destroy @879 - iirdecim_cccf_execute @880 - iirdecim_cccf_execute_block @881 - iirdecim_cccf_groupdelay @882 - iirdecim_cccf_print @883 - iirdecim_cccf_reset @884 - iirdecim_crcf_create @885 - iirdecim_crcf_create_prototype @886 - iirdecim_crcf_destroy @887 - iirdecim_crcf_execute @888 - iirdecim_crcf_execute_block @889 - iirdecim_crcf_groupdelay @890 - iirdecim_crcf_print @891 - iirdecim_crcf_reset @892 - iirdecim_rrrf_create @893 - iirdecim_rrrf_create_prototype @894 - iirdecim_rrrf_destroy @895 - iirdecim_rrrf_execute @896 - iirdecim_rrrf_execute_block @897 - iirdecim_rrrf_groupdelay @898 - iirdecim_rrrf_print @899 - iirdecim_rrrf_reset @900 - iirdes_dzpk2sosf @901 - iirdes_dzpk2tff @902 - iirdes_dzpk_lp2bp @903 - iirdes_dzpk_lp2hp @904 - iirdes_freqprewarp @905 - iirdes_isstable @906 - iirdes_pll_active_PI @907 - iirdes_pll_active_lag @908 - iirfilt_cccf_create @909 - iirfilt_cccf_create_dc_blocker @910 - iirfilt_cccf_create_differentiator @911 - iirfilt_cccf_create_integrator @912 - iirfilt_cccf_create_pll @913 - iirfilt_cccf_create_prototype @914 - iirfilt_cccf_create_sos @915 - iirfilt_cccf_destroy @916 - iirfilt_cccf_execute @917 - iirfilt_cccf_execute_block @918 - iirfilt_cccf_execute_norm @919 - iirfilt_cccf_execute_sos @920 - iirfilt_cccf_freqresponse @921 - iirfilt_cccf_get_length @922 - iirfilt_cccf_groupdelay @923 - iirfilt_cccf_print @924 - iirfilt_cccf_reset @925 - iirfilt_crcf_create @926 - iirfilt_crcf_create_dc_blocker @927 - iirfilt_crcf_create_differentiator @928 - iirfilt_crcf_create_integrator @929 - iirfilt_crcf_create_pll @930 - iirfilt_crcf_create_prototype @931 - iirfilt_crcf_create_sos @932 - iirfilt_crcf_destroy @933 - iirfilt_crcf_execute @934 - iirfilt_crcf_execute_block @935 - iirfilt_crcf_execute_norm @936 - iirfilt_crcf_execute_sos @937 - iirfilt_crcf_freqresponse @938 - iirfilt_crcf_get_length @939 - iirfilt_crcf_groupdelay @940 - iirfilt_crcf_print @941 - iirfilt_crcf_reset @942 - iirfilt_rrrf_create @943 - iirfilt_rrrf_create_dc_blocker @944 - iirfilt_rrrf_create_differentiator @945 - iirfilt_rrrf_create_integrator @946 - iirfilt_rrrf_create_pll @947 - iirfilt_rrrf_create_prototype @948 - iirfilt_rrrf_create_sos @949 - iirfilt_rrrf_destroy @950 - iirfilt_rrrf_execute @951 - iirfilt_rrrf_execute_block @952 - iirfilt_rrrf_execute_norm @953 - iirfilt_rrrf_execute_sos @954 - iirfilt_rrrf_freqresponse @955 - iirfilt_rrrf_get_length @956 - iirfilt_rrrf_groupdelay @957 - iirfilt_rrrf_print @958 - iirfilt_rrrf_reset @959 - iirfiltsos_cccf_create @960 - iirfiltsos_cccf_destroy @961 - iirfiltsos_cccf_execute @962 - iirfiltsos_cccf_execute_df1 @963 - iirfiltsos_cccf_execute_df2 @964 - iirfiltsos_cccf_groupdelay @965 - iirfiltsos_cccf_print @966 - iirfiltsos_cccf_reset @967 - iirfiltsos_cccf_set_coefficients @968 - iirfiltsos_crcf_create @969 - iirfiltsos_crcf_destroy @970 - iirfiltsos_crcf_execute @971 - iirfiltsos_crcf_execute_df1 @972 - iirfiltsos_crcf_execute_df2 @973 - iirfiltsos_crcf_groupdelay @974 - iirfiltsos_crcf_print @975 - iirfiltsos_crcf_reset @976 - iirfiltsos_crcf_set_coefficients @977 - iirfiltsos_rrrf_create @978 - iirfiltsos_rrrf_destroy @979 - iirfiltsos_rrrf_execute @980 - iirfiltsos_rrrf_execute_df1 @981 - iirfiltsos_rrrf_execute_df2 @982 - iirfiltsos_rrrf_groupdelay @983 - iirfiltsos_rrrf_print @984 - iirfiltsos_rrrf_reset @985 - iirfiltsos_rrrf_set_coefficients @986 - iirinterp_cccf_create @987 - iirinterp_cccf_create_prototype @988 - iirinterp_cccf_destroy @989 - iirinterp_cccf_execute @990 - iirinterp_cccf_execute_block @991 - iirinterp_cccf_groupdelay @992 - iirinterp_cccf_print @993 - iirinterp_cccf_reset @994 - iirinterp_crcf_create @995 - iirinterp_crcf_create_prototype @996 - iirinterp_crcf_destroy @997 - iirinterp_crcf_execute @998 - iirinterp_crcf_execute_block @999 - iirinterp_crcf_groupdelay @1000 - iirinterp_crcf_print @1001 - iirinterp_crcf_reset @1002 - iirinterp_rrrf_create @1003 - iirinterp_rrrf_create_prototype @1004 - iirinterp_rrrf_destroy @1005 - iirinterp_rrrf_execute @1006 - iirinterp_rrrf_execute_block @1007 - iirinterp_rrrf_groupdelay @1008 - iirinterp_rrrf_print @1009 - iirinterp_rrrf_reset @1010 - interleaver_create @1011 - interleaver_decode @1012 - interleaver_decode_soft @1013 - interleaver_destroy @1014 - interleaver_encode @1015 - interleaver_encode_soft @1016 - interleaver_permute @1017 - interleaver_permute_mask @1018 - interleaver_permute_mask_soft @1019 - interleaver_permute_soft @1020 - interleaver_print @1021 - interleaver_set_depth @1022 - kaiser @1023 - kaiser_beta_As @1024 - landenf @1025 - liquid_MarcumQ1f @1026 - liquid_MarcumQf @1027 - liquid_Qf @1028 - liquid_apsk128 @1029 DATA - liquid_apsk16 @1030 DATA - liquid_apsk256 @1031 DATA - liquid_apsk32 @1032 DATA - liquid_apsk4 @1033 DATA - liquid_apsk64 @1034 DATA - liquid_apsk8 @1035 DATA - liquid_asechf @1036 - liquid_bdotprod @1037 - liquid_besseli0f @1038 - liquid_besselif @1039 - liquid_besselj0f @1040 - liquid_besseljf @1041 - liquid_c_leading_zeros @1042 DATA - liquid_c_ones @1043 DATA - liquid_c_ones_mod2 @1044 DATA - liquid_cacosf @1045 - liquid_cargf_approx @1046 - liquid_casinf @1047 - liquid_catanf @1048 - liquid_cexpf @1049 - liquid_clogf @1050 - liquid_cosf @1051 - liquid_count_leading_zeros @1052 - liquid_count_ones @1053 - liquid_count_ones_mod2 @1054 - liquid_cplxpair @1055 - liquid_cplxpair_cleanup @1056 - liquid_csqrtf @1057 - liquid_expf @1058 - liquid_factor @1059 - liquid_factorialf @1060 - liquid_fft_estimate_method @1061 - liquid_filter_autocorr @1062 - liquid_filter_crosscorr @1063 - liquid_filter_energy @1064 - liquid_filter_isi @1065 - liquid_firdes_arkaiser @1066 - liquid_firdes_doppler @1067 - liquid_firdes_farcsech @1068 - liquid_firdes_farcsech_freqresponse @1069 - liquid_firdes_fexp @1070 - liquid_firdes_fexp_freqresponse @1071 - liquid_firdes_fnyquist @1072 - liquid_firdes_fsech @1073 - liquid_firdes_fsech_freqresponse @1074 - liquid_firdes_gmskrx @1075 - liquid_firdes_gmsktx @1076 - liquid_firdes_hM3 @1077 - liquid_firdes_kaiser @1078 - liquid_firdes_nyquist @1079 - liquid_firdes_rcos @1080 - liquid_firdes_rfarcsech @1081 - liquid_firdes_rfexp @1082 - liquid_firdes_rfsech @1083 - liquid_firdes_rkaiser @1084 - liquid_firdes_rkaiser_bisection @1085 - liquid_firdes_rkaiser_internal_isi @1086 - liquid_firdes_rkaiser_quadratic @1087 - liquid_firdes_rnyquist @1088 - liquid_firdes_rrcos @1089 - liquid_gammaf @1090 - liquid_getopt_str2crc @1091 - liquid_getopt_str2fec @1092 - liquid_getopt_str2firfilt @1093 - liquid_getopt_str2mod @1094 - liquid_iirdes @1095 - liquid_invgauss @1096 - liquid_is_prime @1097 - liquid_kbd @1098 - liquid_kbd_window @1099 - liquid_lbcircshift @1100 - liquid_lbshift @1101 - liquid_lcircshift @1102 - liquid_levinson @1103 - liquid_libversion @1104 - liquid_libversion_number @1105 - liquid_lnbesselif @1106 - liquid_lngammaf @1107 - liquid_lnlowergammaf @1108 - liquid_lnuppergammaf @1109 - liquid_logf @1110 - liquid_lowergammaf @1111 - liquid_lpc @1112 - liquid_lshift @1113 - liquid_modem_is_apsk @1114 - liquid_modem_is_ask @1115 - liquid_modem_is_dpsk @1116 - liquid_modem_is_psk @1117 - liquid_modem_is_qam @1118 - liquid_modpow @1119 - liquid_msb_index @1120 - liquid_multimodal @1121 - liquid_nchoosek @1122 - liquid_nextpow2 @1123 - liquid_pack_array @1124 - liquid_pack_bytes @1125 - liquid_pack_soft_bits @1126 - liquid_primitive_root @1127 - liquid_primitive_root_prime @1128 - liquid_print_bitstring @1129 - liquid_print_crc_schemes @1130 - liquid_print_fec_schemes @1131 - liquid_print_modulation_schemes @1132 - liquid_rbcircshift @1133 - liquid_rbshift @1134 - liquid_rcircshift @1135 - liquid_repack_bytes @1136 - liquid_reverse_byte @1137 - liquid_reverse_byte_gentab @1138 DATA - liquid_reverse_uint16 @1139 - liquid_reverse_uint24 @1140 - liquid_reverse_uint32 @1141 - liquid_rosenbrock @1142 - liquid_rshift @1143 - liquid_sincosf @1144 - liquid_sinf @1145 - liquid_spiral @1146 - liquid_sumsqcf @1147 - liquid_sumsqf @1148 - liquid_tanf @1149 - liquid_totient @1150 - liquid_unique_factor @1151 - liquid_unpack_array @1152 - liquid_unpack_bytes @1153 - liquid_unpack_soft_bits @1154 - liquid_unwrap_phase @1155 - liquid_unwrap_phase2 @1156 - liquid_uppergammaf @1157 - liquid_vectorcf_abs @1158 - liquid_vectorcf_add @1159 - liquid_vectorcf_addscalar @1160 - liquid_vectorcf_carg @1161 - liquid_vectorcf_cexpj @1162 - liquid_vectorcf_mul @1163 - liquid_vectorcf_mulscalar @1164 - liquid_vectorcf_norm @1165 - liquid_vectorcf_normalize @1166 - liquid_vectorf_abs @1167 - liquid_vectorf_add @1168 - liquid_vectorf_addscalar @1169 - liquid_vectorf_carg @1170 - liquid_vectorf_cexpj @1171 - liquid_vectorf_mul @1172 - liquid_vectorf_mulscalar @1173 - liquid_vectorf_norm @1174 - liquid_vectorf_normalize @1175 - liquid_version @1176 DATA - matrix_add @1177 - matrix_aug @1178 - matrix_cgsolve @1179 - matrix_chol @1180 - matrix_det @1181 - matrix_det2x2 @1182 - matrix_div @1183 - matrix_eye @1184 - matrix_gjelim @1185 - matrix_gramschmidt @1186 - matrix_hermitian @1187 - matrix_hermitian_mul @1188 - matrix_inv @1189 - matrix_linsolve @1190 - matrix_ludecomp_crout @1191 - matrix_ludecomp_doolittle @1192 - matrix_mul @1193 - matrix_mul_hermitian @1194 - matrix_mul_transpose @1195 - matrix_ones @1196 - matrix_pdiv @1197 - matrix_pivot @1198 - matrix_pmul @1199 - matrix_print @1200 - matrix_proj @1201 - matrix_qrdecomp_gramschmidt @1202 - matrix_sub @1203 - matrix_swaprows @1204 - matrix_trans @1205 - matrix_transpose_mul @1206 - matrix_zeros @1207 - matrixc_add @1208 - matrixc_aug @1209 - matrixc_cgsolve @1210 - matrixc_chol @1211 - matrixc_det @1212 - matrixc_det2x2 @1213 - matrixc_div @1214 - matrixc_eye @1215 - matrixc_gjelim @1216 - matrixc_gramschmidt @1217 - matrixc_hermitian @1218 - matrixc_hermitian_mul @1219 - matrixc_inv @1220 - matrixc_linsolve @1221 - matrixc_ludecomp_crout @1222 - matrixc_ludecomp_doolittle @1223 - matrixc_mul @1224 - matrixc_mul_hermitian @1225 - matrixc_mul_transpose @1226 - matrixc_ones @1227 - matrixc_pdiv @1228 - matrixc_pivot @1229 - matrixc_pmul @1230 - matrixc_print @1231 - matrixc_proj @1232 - matrixc_qrdecomp_gramschmidt @1233 - matrixc_sub @1234 - matrixc_swaprows @1235 - matrixc_trans @1236 - matrixc_transpose_mul @1237 - matrixc_zeros @1238 - matrixcf_add @1239 - matrixcf_aug @1240 - matrixcf_cgsolve @1241 - matrixcf_chol @1242 - matrixcf_det @1243 - matrixcf_det2x2 @1244 - matrixcf_div @1245 - matrixcf_eye @1246 - matrixcf_gjelim @1247 - matrixcf_gramschmidt @1248 - matrixcf_hermitian @1249 - matrixcf_hermitian_mul @1250 - matrixcf_inv @1251 - matrixcf_linsolve @1252 - matrixcf_ludecomp_crout @1253 - matrixcf_ludecomp_doolittle @1254 - matrixcf_mul @1255 - matrixcf_mul_hermitian @1256 - matrixcf_mul_transpose @1257 - matrixcf_ones @1258 - matrixcf_pdiv @1259 - matrixcf_pivot @1260 - matrixcf_pmul @1261 - matrixcf_print @1262 - matrixcf_proj @1263 - matrixcf_qrdecomp_gramschmidt @1264 - matrixcf_sub @1265 - matrixcf_swaprows @1266 - matrixcf_trans @1267 - matrixcf_transpose_mul @1268 - matrixcf_zeros @1269 - matrixf_add @1270 - matrixf_aug @1271 - matrixf_cgsolve @1272 - matrixf_chol @1273 - matrixf_det @1274 - matrixf_det2x2 @1275 - matrixf_div @1276 - matrixf_eye @1277 - matrixf_gjelim @1278 - matrixf_gramschmidt @1279 - matrixf_hermitian @1280 - matrixf_hermitian_mul @1281 - matrixf_inv @1282 - matrixf_linsolve @1283 - matrixf_ludecomp_crout @1284 - matrixf_ludecomp_doolittle @1285 - matrixf_mul @1286 - matrixf_mul_hermitian @1287 - matrixf_mul_transpose @1288 - matrixf_ones @1289 - matrixf_pdiv @1290 - matrixf_pivot @1291 - matrixf_pmul @1292 - matrixf_print @1293 - matrixf_proj @1294 - matrixf_qrdecomp_gramschmidt @1295 - matrixf_sub @1296 - matrixf_swaprows @1297 - matrixf_trans @1298 - matrixf_transpose_mul @1299 - matrixf_zeros @1300 - modem_arb128opt @1301 DATA - modem_arb16opt @1302 DATA - modem_arb256opt @1303 DATA - modem_arb32opt @1304 DATA - modem_arb64opt @1305 DATA - modem_arb_V29 @1306 DATA - modem_arb_balance_iq @1307 - modem_arb_init @1308 - modem_arb_init_file @1309 - modem_arb_scale @1310 - modem_arb_sqam128 @1311 DATA - modem_arb_sqam32 @1312 DATA - modem_arb_vt64 @1313 DATA - modem_create @1314 - modem_create_V29 @1315 - modem_create_apsk @1316 - modem_create_arb @1317 - modem_create_arb128opt @1318 - modem_create_arb16opt @1319 - modem_create_arb256opt @1320 - modem_create_arb32opt @1321 - modem_create_arb64opt @1322 - modem_create_arb64vt @1323 - modem_create_arbitrary @1324 - modem_create_ask @1325 - modem_create_bpsk @1326 - modem_create_dpsk @1327 - modem_create_ook @1328 - modem_create_psk @1329 - modem_create_qam @1330 - modem_create_qpsk @1331 - modem_create_sqam128 @1332 - modem_create_sqam32 @1333 - modem_demodsoft_gentab @1334 - modem_demodulate @1335 - modem_demodulate_apsk @1336 - modem_demodulate_arb @1337 - modem_demodulate_ask @1338 - modem_demodulate_bpsk @1339 - modem_demodulate_dpsk @1340 - modem_demodulate_linear_array @1341 - modem_demodulate_linear_array_ref @1342 - modem_demodulate_ook @1343 - modem_demodulate_psk @1344 - modem_demodulate_qam @1345 - modem_demodulate_qpsk @1346 - modem_demodulate_soft @1347 - modem_demodulate_soft_arb @1348 - modem_demodulate_soft_bpsk @1349 - modem_demodulate_soft_qpsk @1350 - modem_demodulate_soft_table @1351 - modem_demodulate_sqam128 @1352 - modem_demodulate_sqam32 @1353 - modem_destroy @1354 - modem_gen_rand_sym @1355 - modem_get_bps @1356 - modem_get_demodulator_evm @1357 - modem_get_demodulator_phase_error @1358 - modem_get_demodulator_sample @1359 - modem_init @1360 - modem_init_map @1361 - modem_modulate @1362 - modem_modulate_apsk @1363 - modem_modulate_arb @1364 - modem_modulate_ask @1365 - modem_modulate_bpsk @1366 - modem_modulate_dpsk @1367 - modem_modulate_map @1368 - modem_modulate_ook @1369 - modem_modulate_psk @1370 - modem_modulate_qam @1371 - modem_modulate_qpsk @1372 - modem_modulate_sqam128 @1373 - modem_modulate_sqam32 @1374 - modem_print @1375 - modem_recreate @1376 - modem_reset @1377 - modulation_types @1378 DATA - msequence_advance @1379 - msequence_create @1380 - msequence_create_default @1381 - msequence_create_genpoly @1382 - msequence_default @1383 DATA - msequence_destroy @1384 - msequence_generate_symbol @1385 - msequence_get_length @1386 - msequence_get_state @1387 - msequence_print @1388 - msequence_reset @1389 - msequence_set_state @1390 - msresamp2_cccf_create @1391 - msresamp2_cccf_decim_execute @1392 - msresamp2_cccf_destroy @1393 - msresamp2_cccf_execute @1394 - msresamp2_cccf_get_delay @1395 - msresamp2_cccf_interp_execute @1396 - msresamp2_cccf_print @1397 - msresamp2_cccf_reset @1398 - msresamp2_crcf_create @1399 - msresamp2_crcf_decim_execute @1400 - msresamp2_crcf_destroy @1401 - msresamp2_crcf_execute @1402 - msresamp2_crcf_get_delay @1403 - msresamp2_crcf_interp_execute @1404 - msresamp2_crcf_print @1405 - msresamp2_crcf_reset @1406 - msresamp2_rrrf_create @1407 - msresamp2_rrrf_decim_execute @1408 - msresamp2_rrrf_destroy @1409 - msresamp2_rrrf_execute @1410 - msresamp2_rrrf_get_delay @1411 - msresamp2_rrrf_interp_execute @1412 - msresamp2_rrrf_print @1413 - msresamp2_rrrf_reset @1414 - msresamp_cccf_create @1415 - msresamp_cccf_decim_execute @1416 - msresamp_cccf_destroy @1417 - msresamp_cccf_execute @1418 - msresamp_cccf_get_delay @1419 - msresamp_cccf_interp_execute @1420 - msresamp_cccf_print @1421 - msresamp_cccf_reset @1422 - msresamp_crcf_create @1423 - msresamp_crcf_decim_execute @1424 - msresamp_crcf_destroy @1425 - msresamp_crcf_execute @1426 - msresamp_crcf_get_delay @1427 - msresamp_crcf_interp_execute @1428 - msresamp_crcf_print @1429 - msresamp_crcf_reset @1430 - msresamp_rrrf_create @1431 - msresamp_rrrf_decim_execute @1432 - msresamp_rrrf_destroy @1433 - msresamp_rrrf_execute @1434 - msresamp_rrrf_get_delay @1435 - msresamp_rrrf_interp_execute @1436 - msresamp_rrrf_print @1437 - msresamp_rrrf_reset @1438 - nco_crcf_adjust_frequency @1439 - nco_crcf_adjust_phase @1440 - nco_crcf_cexpf @1441 - nco_crcf_compute_sincos_nco @1442 - nco_crcf_compute_sincos_vco @1443 - nco_crcf_constrain_frequency @1444 - nco_crcf_constrain_phase @1445 - nco_crcf_cos @1446 - nco_crcf_create @1447 - nco_crcf_destroy @1448 - nco_crcf_get_frequency @1449 - nco_crcf_get_phase @1450 - nco_crcf_mix_block_down @1451 - nco_crcf_mix_block_up @1452 - nco_crcf_mix_down @1453 - nco_crcf_mix_up @1454 - nco_crcf_pll_reset @1455 - nco_crcf_pll_set_bandwidth @1456 - nco_crcf_pll_step @1457 - nco_crcf_reset @1458 - nco_crcf_set_frequency @1459 - nco_crcf_set_phase @1460 - nco_crcf_sin @1461 - nco_crcf_sincos @1462 - nco_crcf_step @1463 - ofdmflexframegen_assemble @1464 - ofdmflexframegen_create @1465 - ofdmflexframegen_destroy @1466 - ofdmflexframegen_encode_header @1467 - ofdmflexframegen_getframelen @1468 - ofdmflexframegen_getprops @1469 - ofdmflexframegen_is_assembled @1470 - ofdmflexframegen_modulate_header @1471 - ofdmflexframegen_print @1472 - ofdmflexframegen_reconfigure @1473 - ofdmflexframegen_reset @1474 - ofdmflexframegen_setprops @1475 - ofdmflexframegen_write_S0a @1476 - ofdmflexframegen_write_S0b @1477 - ofdmflexframegen_write_S1 @1478 - ofdmflexframegen_write_header @1479 - ofdmflexframegen_write_payload @1480 - ofdmflexframegen_writesymbol @1481 - ofdmflexframegenprops_init_default @1482 - ofdmflexframesync_create @1483 - ofdmflexframesync_debug_disable @1484 - ofdmflexframesync_debug_enable @1485 - ofdmflexframesync_debug_print @1486 - ofdmflexframesync_decode_header @1487 - ofdmflexframesync_destroy @1488 - ofdmflexframesync_execute @1489 - ofdmflexframesync_get_cfo @1490 - ofdmflexframesync_get_rssi @1491 - ofdmflexframesync_internal_callback @1492 - ofdmflexframesync_print @1493 - ofdmflexframesync_reset @1494 - ofdmflexframesync_rxheader @1495 - ofdmflexframesync_rxpayload @1496 - ofdmframe_init_S0 @1497 - ofdmframe_init_S1 @1498 - ofdmframe_init_default_sctype @1499 - ofdmframe_print_sctype @1500 - ofdmframe_validate_sctype @1501 - ofdmframegen_create @1502 - ofdmframegen_destroy @1503 - ofdmframegen_gensymbol @1504 - ofdmframegen_print @1505 - ofdmframegen_reset @1506 - ofdmframegen_write_S0a @1507 - ofdmframegen_write_S0b @1508 - ofdmframegen_write_S1 @1509 - ofdmframegen_writesymbol @1510 - ofdmframegen_writetail @1511 - ofdmframesync_S0_metrics @1512 - ofdmframesync_create @1513 - ofdmframesync_debug_disable @1514 - ofdmframesync_debug_enable @1515 - ofdmframesync_debug_print @1516 - ofdmframesync_destroy @1517 - ofdmframesync_estimate_eqgain @1518 - ofdmframesync_estimate_eqgain_poly @1519 - ofdmframesync_estimate_gain_S0 @1520 - ofdmframesync_estimate_gain_S1 @1521 - ofdmframesync_execute @1522 - ofdmframesync_execute_S0a @1523 - ofdmframesync_execute_S0b @1524 - ofdmframesync_execute_S1 @1525 - ofdmframesync_execute_rxsymbols @1526 - ofdmframesync_execute_seekplcp @1527 - ofdmframesync_get_cfo @1528 - ofdmframesync_get_rssi @1529 - ofdmframesync_print @1530 - ofdmframesync_reset @1531 - ofdmframesync_rxsymbol @1532 - optim_sort @1533 - optim_threshold_switch @1534 - packetizer_compute_dec_msg_len @1535 - packetizer_compute_enc_msg_len @1536 - packetizer_create @1537 - packetizer_decode @1538 - packetizer_decode_soft @1539 - packetizer_destroy @1540 - packetizer_encode @1541 - packetizer_get_dec_msg_len @1542 - packetizer_get_enc_msg_len @1543 - packetizer_print @1544 - packetizer_realloc_buffers @1545 - packetizer_recreate @1546 - packetizer_set_scheme @1547 - poly_expandbinomial @1548 - poly_expandbinomial_pm @1549 - poly_expandroots @1550 - poly_expandroots2 @1551 - poly_findroots @1552 - poly_findroots_bairstow @1553 - poly_findroots_bairstow_recursion @1554 - poly_findroots_durandkerner @1555 - poly_fit @1556 - poly_fit_lagrange @1557 - poly_fit_lagrange_barycentric @1558 - poly_interp_lagrange @1559 - poly_mul @1560 - poly_val @1561 - poly_val_lagrange_barycentric @1562 - polyc_expandbinomial @1563 - polyc_expandbinomial_pm @1564 - polyc_expandroots @1565 - polyc_expandroots2 @1566 - polyc_findroots @1567 - polyc_findroots_bairstow @1568 - polyc_findroots_bairstow_recursion @1569 - polyc_findroots_durandkerner @1570 - polyc_fit @1571 - polyc_fit_lagrange @1572 - polyc_fit_lagrange_barycentric @1573 - polyc_interp_lagrange @1574 - polyc_mul @1575 - polyc_val @1576 - polyc_val_lagrange_barycentric @1577 - polycf_expandbinomial @1578 - polycf_expandbinomial_pm @1579 - polycf_expandroots @1580 - polycf_expandroots2 @1581 - polycf_findroots @1582 - polycf_findroots_bairstow @1583 - polycf_findroots_bairstow_recursion @1584 - polycf_findroots_durandkerner @1585 - polycf_fit @1586 - polycf_fit_lagrange @1587 - polycf_fit_lagrange_barycentric @1588 - polycf_interp_lagrange @1589 - polycf_mul @1590 - polycf_val @1591 - polycf_val_lagrange_barycentric @1592 - polyf_expandbinomial @1593 - polyf_expandbinomial_pm @1594 - polyf_expandroots @1595 - polyf_expandroots2 @1596 - polyf_findroots @1597 - polyf_findroots_bairstow @1598 - polyf_findroots_bairstow_recursion @1599 - polyf_findroots_durandkerner @1600 - polyf_fit @1601 - polyf_fit_lagrange @1602 - polyf_fit_lagrange_barycentric @1603 - polyf_interp_lagrange @1604 - polyf_mul @1605 - polyf_val @1606 - polyf_val_lagrange_barycentric @1607 - presync_cccf_correlate @1608 - presync_cccf_correlatex @1609 - presync_cccf_create @1610 - presync_cccf_destroy @1611 - presync_cccf_print @1612 - presync_cccf_push @1613 - presync_cccf_reset @1614 - qnsearch_compute_Hessian @1615 - qnsearch_compute_gradient @1616 - qnsearch_create @1617 - qnsearch_destroy @1618 - qnsearch_normalize_gradient @1619 - qnsearch_print @1620 - qnsearch_reset @1621 - qnsearch_run @1622 - qnsearch_step @1623 - quantize_adc @1624 - quantize_dac @1625 - quantizercf_create @1626 - quantizercf_destroy @1627 - quantizercf_execute_adc @1628 - quantizercf_execute_dac @1629 - quantizercf_print @1630 - quantizerf_create @1631 - quantizerf_destroy @1632 - quantizerf_execute_adc @1633 - quantizerf_execute_dac @1634 - quantizerf_print @1635 - randexpf @1636 - randexpf_cdf @1637 - randexpf_pdf @1638 - randf @1639 - randf_cdf @1640 - randf_pdf @1641 - randgammaf @1642 - randgammaf_cdf @1643 - randgammaf_delta @1644 - randgammaf_pdf @1645 - randnakmf @1646 - randnakmf_cdf @1647 - randnakmf_pdf @1648 - randnf @1649 - randnf_cdf @1650 - randnf_pdf @1651 - randricekf @1652 - randricekf_cdf @1653 - randricekf_pdf @1654 - randweibf @1655 - randweibf_cdf @1656 - randweibf_pdf @1657 - resamp2_cccf_analyzer_execute @1658 - resamp2_cccf_clear @1659 - resamp2_cccf_create @1660 - resamp2_cccf_decim_execute @1661 - resamp2_cccf_destroy @1662 - resamp2_cccf_filter_execute @1663 - resamp2_cccf_get_delay @1664 - resamp2_cccf_interp_execute @1665 - resamp2_cccf_print @1666 - resamp2_cccf_recreate @1667 - resamp2_cccf_synthesizer_execute @1668 - resamp2_crcf_analyzer_execute @1669 - resamp2_crcf_clear @1670 - resamp2_crcf_create @1671 - resamp2_crcf_decim_execute @1672 - resamp2_crcf_destroy @1673 - resamp2_crcf_filter_execute @1674 - resamp2_crcf_get_delay @1675 - resamp2_crcf_interp_execute @1676 - resamp2_crcf_print @1677 - resamp2_crcf_recreate @1678 - resamp2_crcf_synthesizer_execute @1679 - resamp2_rrrf_analyzer_execute @1680 - resamp2_rrrf_clear @1681 - resamp2_rrrf_create @1682 - resamp2_rrrf_decim_execute @1683 - resamp2_rrrf_destroy @1684 - resamp2_rrrf_filter_execute @1685 - resamp2_rrrf_get_delay @1686 - resamp2_rrrf_interp_execute @1687 - resamp2_rrrf_print @1688 - resamp2_rrrf_recreate @1689 - resamp2_rrrf_synthesizer_execute @1690 - resamp_cccf_create @1691 - resamp_cccf_destroy @1692 - resamp_cccf_execute @1693 - resamp_cccf_execute_block @1694 - resamp_cccf_get_delay @1695 - resamp_cccf_print @1696 - resamp_cccf_reset @1697 - resamp_cccf_setrate @1698 - resamp_cccf_update_timing_state @1699 - resamp_crcf_create @1700 - resamp_crcf_destroy @1701 - resamp_crcf_execute @1702 - resamp_crcf_execute_block @1703 - resamp_crcf_get_delay @1704 - resamp_crcf_print @1705 - resamp_crcf_reset @1706 - resamp_crcf_setrate @1707 - resamp_crcf_update_timing_state @1708 - resamp_rrrf_create @1709 - resamp_rrrf_destroy @1710 - resamp_rrrf_execute @1711 - resamp_rrrf_execute_block @1712 - resamp_rrrf_get_delay @1713 - resamp_rrrf_print @1714 - resamp_rrrf_reset @1715 - resamp_rrrf_setrate @1716 - resamp_rrrf_update_timing_state @1717 - rkaiser_approximate_rho @1718 - scramble_data @1719 - secded2216_P @1720 DATA - secded2216_syndrome_w1 @1721 DATA - secded3932_P @1722 DATA - secded3932_syndrome_w1 @1723 DATA - secded7264_P @1724 DATA - secded7264_syndrome_w1 @1725 DATA - sincf @1726 - smatrix_indexsearch @1727 - smatrixb_clear @1728 - smatrixb_create @1729 - smatrixb_create_array @1730 - smatrixb_delete @1731 - smatrixb_destroy @1732 - smatrixb_eye @1733 - smatrixb_get @1734 - smatrixb_insert @1735 - smatrixb_isset @1736 - smatrixb_mul @1737 - smatrixb_mulf @1738 - smatrixb_print @1739 - smatrixb_print_expanded @1740 - smatrixb_reset @1741 - smatrixb_reset_max_mlist @1742 - smatrixb_reset_max_nlist @1743 - smatrixb_set @1744 - smatrixb_size @1745 - smatrixb_vmul @1746 - smatrixb_vmulf @1747 - smatrixf_clear @1748 - smatrixf_create @1749 - smatrixf_create_array @1750 - smatrixf_delete @1751 - smatrixf_destroy @1752 - smatrixf_eye @1753 - smatrixf_get @1754 - smatrixf_insert @1755 - smatrixf_isset @1756 - smatrixf_mul @1757 - smatrixf_print @1758 - smatrixf_print_expanded @1759 - smatrixf_reset @1760 - smatrixf_reset_max_mlist @1761 - smatrixf_reset_max_nlist @1762 - smatrixf_set @1763 - smatrixf_size @1764 - smatrixf_vmul @1765 - smatrixi_clear @1766 - smatrixi_create @1767 - smatrixi_create_array @1768 - smatrixi_delete @1769 - smatrixi_destroy @1770 - smatrixi_eye @1771 - smatrixi_get @1772 - smatrixi_insert @1773 - smatrixi_isset @1774 - smatrixi_mul @1775 - smatrixi_print @1776 - smatrixi_print_expanded @1777 - smatrixi_reset @1778 - smatrixi_reset_max_mlist @1779 - smatrixi_reset_max_nlist @1780 - smatrixi_set @1781 - smatrixi_size @1782 - smatrixi_vmul @1783 - spgramcf_accumulate_psd @1784 - spgramcf_create @1785 - spgramcf_create_kaiser @1786 - spgramcf_destroy @1787 - spgramcf_estimate_psd @1788 - spgramcf_execute @1789 - spgramcf_push @1790 - spgramcf_reset @1791 - spgramcf_write_accumulation @1792 - spgramf_accumulate_psd @1793 - spgramf_create @1794 - spgramf_create_kaiser @1795 - spgramf_destroy @1796 - spgramf_estimate_psd @1797 - spgramf_execute @1798 - spgramf_push @1799 - spgramf_reset @1800 - spgramf_write_accumulation @1801 - sumproduct_phi @1802 - symsync_crcf_advance_internal_loop @1803 - symsync_crcf_create @1804 - symsync_crcf_create_kaiser @1805 - symsync_crcf_create_rnyquist @1806 - symsync_crcf_destroy @1807 - symsync_crcf_execute @1808 - symsync_crcf_get_tau @1809 - symsync_crcf_lock @1810 - symsync_crcf_output_debug_file @1811 - symsync_crcf_print @1812 - symsync_crcf_reset @1813 - symsync_crcf_set_lf_bw @1814 - symsync_crcf_set_output_rate @1815 - symsync_crcf_setrate @1816 - symsync_crcf_step @1817 - symsync_crcf_unlock @1818 - symsync_rrrf_advance_internal_loop @1819 - symsync_rrrf_create @1820 - symsync_rrrf_create_kaiser @1821 - symsync_rrrf_create_rnyquist @1822 - symsync_rrrf_destroy @1823 - symsync_rrrf_execute @1824 - symsync_rrrf_get_tau @1825 - symsync_rrrf_lock @1826 - symsync_rrrf_output_debug_file @1827 - symsync_rrrf_print @1828 - symsync_rrrf_reset @1829 - symsync_rrrf_set_lf_bw @1830 - symsync_rrrf_set_output_rate @1831 - symsync_rrrf_setrate @1832 - symsync_rrrf_step @1833 - symsync_rrrf_unlock @1834 - unscramble_data @1835 - unscramble_data_soft @1836 - wdelaycf_clear @1837 - wdelaycf_create @1838 - wdelaycf_destroy @1839 - wdelaycf_print @1840 - wdelaycf_push @1841 - wdelaycf_read @1842 - wdelaycf_recreate @1843 - wdelayf_clear @1844 - wdelayf_create @1845 - wdelayf_destroy @1846 - wdelayf_print @1847 - wdelayf_push @1848 - wdelayf_read @1849 - wdelayf_recreate @1850 - windowcf_clear @1851 - windowcf_create @1852 - windowcf_debug_print @1853 - windowcf_destroy @1854 - windowcf_index @1855 - windowcf_print @1856 - windowcf_push @1857 - windowcf_read @1858 - windowcf_recreate @1859 - windowcf_write @1860 - windowf_clear @1861 - windowf_create @1862 - windowf_debug_print @1863 - windowf_destroy @1864 - windowf_index @1865 - windowf_print @1866 - windowf_push @1867 - windowf_read @1868 - windowf_recreate @1869 - windowf_write @1870 + ampmodem_demodulate_block @38 + ampmodem_destroy @39 + ampmodem_modulate @40 + ampmodem_modulate_block @41 + ampmodem_print @42 + ampmodem_reset @43 + apsk128_map @44 DATA + apsk128_num_levels @45 DATA + apsk128_p @46 DATA + apsk128_phi @47 DATA + apsk128_r @48 DATA + apsk128_r_slicer @49 DATA + apsk16_map @50 DATA + apsk16_num_levels @51 DATA + apsk16_p @52 DATA + apsk16_phi @53 DATA + apsk16_r @54 DATA + apsk16_r_slicer @55 DATA + apsk256_map @56 DATA + apsk256_num_levels @57 DATA + apsk256_p @58 DATA + apsk256_phi @59 DATA + apsk256_r @60 DATA + apsk256_r_slicer @61 DATA + apsk32_map @62 DATA + apsk32_num_levels @63 DATA + apsk32_p @64 DATA + apsk32_phi @65 DATA + apsk32_r @66 DATA + apsk32_r_slicer @67 DATA + apsk4_map @68 DATA + apsk4_num_levels @69 DATA + apsk4_p @70 DATA + apsk4_phi @71 DATA + apsk4_r @72 DATA + apsk4_r_slicer @73 DATA + apsk64_map @74 DATA + apsk64_num_levels @75 DATA + apsk64_p @76 DATA + apsk64_phi @77 DATA + apsk64_r @78 DATA + apsk64_r_slicer @79 DATA + apsk8_map @80 DATA + apsk8_num_levels @81 DATA + apsk8_p @82 DATA + apsk8_phi @83 DATA + apsk8_r @84 DATA + apsk8_r_slicer @85 DATA + asgramcf_create @86 + asgramcf_destroy @87 + asgramcf_execute @88 + asgramcf_print @89 + asgramcf_push @90 + asgramcf_reset @91 + asgramcf_set_scale @92 + asgramcf_write @93 + asgramf_create @94 + asgramf_destroy @95 + asgramf_execute @96 + asgramf_print @97 + asgramf_push @98 + asgramf_reset @99 + asgramf_set_scale @100 + asgramf_write @101 + autocorr_cccf_create @102 + autocorr_cccf_destroy @103 + autocorr_cccf_execute @104 + autocorr_cccf_execute_block @105 + autocorr_cccf_get_energy @106 + autocorr_cccf_print @107 + autocorr_cccf_push @108 + autocorr_cccf_reset @109 + autocorr_rrrf_create @110 + autocorr_rrrf_destroy @111 + autocorr_rrrf_execute @112 + autocorr_rrrf_execute_block @113 + autocorr_rrrf_get_energy @114 + autocorr_rrrf_print @115 + autocorr_rrrf_push @116 + autocorr_rrrf_reset @117 + awgn @118 + bessel_azpkf @119 + bilinear_zpkf @120 + blackmanharris @121 + blackmanharris7 @122 + bpacketgen_assemble_header @123 + bpacketgen_assemble_pnsequence @124 + bpacketgen_compute_packet_len @125 + bpacketgen_create @126 + bpacketgen_destroy @127 + bpacketgen_encode @128 + bpacketgen_get_packet_len @129 + bpacketgen_print @130 + bpacketgen_recreate @131 + bpacketsync_assemble_pnsequence @132 + bpacketsync_create @133 + bpacketsync_decode_header @134 + bpacketsync_decode_payload @135 + bpacketsync_destroy @136 + bpacketsync_execute @137 + bpacketsync_execute_bit @138 + bpacketsync_execute_byte @139 + bpacketsync_execute_rxheader @140 + bpacketsync_execute_rxpayload @141 + bpacketsync_execute_seekpn @142 + bpacketsync_execute_sym @143 + bpacketsync_print @144 + bpacketsync_reconfig @145 + bpacketsync_reset @146 + bpresync_cccf_correlate @147 + bpresync_cccf_correlatex @148 + bpresync_cccf_create @149 + bpresync_cccf_destroy @150 + bpresync_cccf_print @151 + bpresync_cccf_push @152 + bpresync_cccf_reset @153 + bsequence_accumulate @154 + bsequence_add @155 + bsequence_circshift @156 + bsequence_correlate @157 + bsequence_create @158 + bsequence_create_ccodes @159 + bsequence_destroy @160 + bsequence_get_length @161 + bsequence_index @162 + bsequence_init @163 + bsequence_init_msequence @164 + bsequence_mul @165 + bsequence_print @166 + bsequence_push @167 + bsequence_reset @168 + bsync_cccf_correlate @169 + bsync_cccf_create @170 + bsync_cccf_create_msequence @171 + bsync_cccf_destroy @172 + bsync_cccf_print @173 + bsync_crcf_correlate @174 + bsync_crcf_create @175 + bsync_crcf_create_msequence @176 + bsync_crcf_destroy @177 + bsync_crcf_print @178 + bsync_rrrf_correlate @179 + bsync_rrrf_create @180 + bsync_rrrf_create_msequence @181 + bsync_rrrf_destroy @182 + bsync_rrrf_print @183 + butter_azpkf @184 + cawgn @185 + cbuffercf_create @186 + cbuffercf_create_max @187 + cbuffercf_debug_print @188 + cbuffercf_destroy @189 + cbuffercf_is_full @190 + cbuffercf_linearize @191 + cbuffercf_max_read @192 + cbuffercf_max_size @193 + cbuffercf_pop @194 + cbuffercf_print @195 + cbuffercf_push @196 + cbuffercf_read @197 + cbuffercf_release @198 + cbuffercf_reset @199 + cbuffercf_size @200 + cbuffercf_space_available @201 + cbuffercf_write @202 + cbufferf_create @203 + cbufferf_create_max @204 + cbufferf_debug_print @205 + cbufferf_destroy @206 + cbufferf_is_full @207 + cbufferf_linearize @208 + cbufferf_max_read @209 + cbufferf_max_size @210 + cbufferf_pop @211 + cbufferf_print @212 + cbufferf_push @213 + cbufferf_read @214 + cbufferf_release @215 + cbufferf_reset @216 + cbufferf_size @217 + cbufferf_space_available @218 + cbufferf_write @219 + channel_cccf_add_awgn @220 + channel_cccf_add_carrier_offset @221 + channel_cccf_add_multipath @222 + channel_cccf_add_shadowing @223 + channel_cccf_create @224 + channel_cccf_destroy @225 + channel_cccf_execute @226 + channel_cccf_execute_block @227 + channel_cccf_print @228 + cheby1_azpkf @229 + cheby2_azpkf @230 + checksum_generate_key @231 + chromosome_copy @232 + chromosome_create @233 + chromosome_create_basic @234 + chromosome_create_clone @235 + chromosome_crossover @236 + chromosome_destroy @237 + chromosome_get_num_traits @238 + chromosome_init @239 + chromosome_init_random @240 + chromosome_initf @241 + chromosome_mutate @242 + chromosome_print @243 + chromosome_printf @244 + chromosome_reset @245 + chromosome_value @246 + chromosome_valuef @247 + compress_cf_mulaw @248 + compress_mulaw @249 + count_bit_errors @250 + count_bit_errors_array @251 + cpfskdem_create @252 + cpfskdem_demodulate @253 + cpfskdem_demodulate_coherent @254 + cpfskdem_demodulate_noncoherent @255 + cpfskdem_destroy @256 + cpfskdem_get_delay @257 + cpfskdem_init_coherent @258 + cpfskdem_init_noncoherent @259 + cpfskdem_print @260 + cpfskdem_reset @261 + cpfskmod_create @262 + cpfskmod_destroy @263 + cpfskmod_firdes @264 + cpfskmod_get_delay @265 + cpfskmod_modulate @266 + cpfskmod_print @267 + cpfskmod_reset @268 + crandnf @269 + crc16_generate_key @270 + crc24_generate_key @271 + crc32_generate_key @272 + crc8_generate_key @273 + crc_append_key @274 + crc_check_key @275 + crc_generate_key @276 + crc_get_length @277 + crc_scheme_str @278 DATA + crc_sizeof_key @279 + crc_validate_message @280 + cvsd_create @281 + cvsd_decode @282 + cvsd_decode8 @283 + cvsd_destroy @284 + cvsd_encode @285 + cvsd_encode8 @286 + cvsd_print @287 + detector_cccf_compute_dotprods @288 + detector_cccf_correlate @289 + detector_cccf_create @290 + detector_cccf_debug_print @291 + detector_cccf_destroy @292 + detector_cccf_estimate_offsets @293 + detector_cccf_print @294 + detector_cccf_reset @295 + detector_cccf_update_sumsq @296 + dotprod_cccf_create @297 + dotprod_cccf_destroy @298 + dotprod_cccf_execute @299 + dotprod_cccf_execute_mmx @300 + dotprod_cccf_execute_mmx4 @301 + dotprod_cccf_print @302 + dotprod_cccf_recreate @303 + dotprod_cccf_run @304 + dotprod_cccf_run4 @305 + dotprod_crcf_create @306 + dotprod_crcf_destroy @307 + dotprod_crcf_execute @308 + dotprod_crcf_execute_mmx @309 + dotprod_crcf_execute_mmx4 @310 + dotprod_crcf_print @311 + dotprod_crcf_recreate @312 + dotprod_crcf_run @313 + dotprod_crcf_run4 @314 + dotprod_rrrf_create @315 + dotprod_rrrf_destroy @316 + dotprod_rrrf_execute @317 + dotprod_rrrf_execute_mmx @318 + dotprod_rrrf_execute_mmx4 @319 + dotprod_rrrf_print @320 + dotprod_rrrf_recreate @321 + dotprod_rrrf_run @322 + dotprod_rrrf_run4 @323 + ellip_acdf @324 + ellip_asnf @325 + ellip_azpkf @326 + ellip_cdf @327 + ellip_snf @328 + ellipdegf @329 + ellipkf @330 + eqlms_cccf_create @331 + eqlms_cccf_create_lowpass @332 + eqlms_cccf_create_rnyquist @333 + eqlms_cccf_destroy @334 + eqlms_cccf_execute @335 + eqlms_cccf_execute_block @336 + eqlms_cccf_get_bw @337 + eqlms_cccf_get_weights @338 + eqlms_cccf_print @339 + eqlms_cccf_push @340 + eqlms_cccf_push_block @341 + eqlms_cccf_recreate @342 + eqlms_cccf_reset @343 + eqlms_cccf_set_bw @344 + eqlms_cccf_step @345 + eqlms_cccf_step_blind @346 + eqlms_cccf_train @347 + eqlms_cccf_update_sumsq @348 + eqlms_rrrf_create @349 + eqlms_rrrf_create_lowpass @350 + eqlms_rrrf_create_rnyquist @351 + eqlms_rrrf_destroy @352 + eqlms_rrrf_execute @353 + eqlms_rrrf_execute_block @354 + eqlms_rrrf_get_bw @355 + eqlms_rrrf_get_weights @356 + eqlms_rrrf_print @357 + eqlms_rrrf_push @358 + eqlms_rrrf_push_block @359 + eqlms_rrrf_recreate @360 + eqlms_rrrf_reset @361 + eqlms_rrrf_set_bw @362 + eqlms_rrrf_step @363 + eqlms_rrrf_step_blind @364 + eqlms_rrrf_train @365 + eqlms_rrrf_update_sumsq @366 + eqrls_cccf_create @367 + eqrls_cccf_destroy @368 + eqrls_cccf_execute @369 + eqrls_cccf_get_bw @370 + eqrls_cccf_get_weights @371 + eqrls_cccf_print @372 + eqrls_cccf_push @373 + eqrls_cccf_recreate @374 + eqrls_cccf_reset @375 + eqrls_cccf_set_bw @376 + eqrls_cccf_step @377 + eqrls_cccf_train @378 + eqrls_rrrf_create @379 + eqrls_rrrf_destroy @380 + eqrls_rrrf_execute @381 + eqrls_rrrf_get_bw @382 + eqrls_rrrf_get_weights @383 + eqrls_rrrf_print @384 + eqrls_rrrf_push @385 + eqrls_rrrf_recreate @386 + eqrls_rrrf_reset @387 + eqrls_rrrf_set_bw @388 + eqrls_rrrf_step @389 + eqrls_rrrf_train @390 + estimate_req_filter_As @391 + estimate_req_filter_df @392 + estimate_req_filter_len @393 + estimate_req_filter_len_Herrmann @394 + estimate_req_filter_len_Kaiser @395 + expand_cf_mulaw @396 + expand_mulaw @397 + fec_block_get_enc_msg_len @398 + fec_conv27_poly @399 DATA + fec_conv27p23_matrix @400 DATA + fec_conv27p34_matrix @401 DATA + fec_conv27p45_matrix @402 DATA + fec_conv27p56_matrix @403 DATA + fec_conv27p67_matrix @404 DATA + fec_conv27p78_matrix @405 DATA + fec_conv29_poly @406 DATA + fec_conv29p23_matrix @407 DATA + fec_conv29p34_matrix @408 DATA + fec_conv29p45_matrix @409 DATA + fec_conv29p56_matrix @410 DATA + fec_conv29p67_matrix @411 DATA + fec_conv29p78_matrix @412 DATA + fec_conv39_poly @413 DATA + fec_conv615_poly @414 DATA + fec_conv_create @415 + fec_conv_destroy @416 + fec_conv_get_enc_msg_len @417 + fec_conv_punctured_create @418 + fec_conv_punctured_decode @419 + fec_conv_punctured_destroy @420 + fec_conv_punctured_encode @421 + fec_create @422 + fec_decode @423 + fec_decode_soft @424 + fec_destroy @425 + fec_encode @426 + fec_get_enc_msg_length @427 + fec_get_rate @428 + fec_golay2412_create @429 + fec_golay2412_decode @430 + fec_golay2412_decode_symbol @431 + fec_golay2412_destroy @432 + fec_golay2412_encode @433 + fec_golay2412_encode_symbol @434 + fec_hamming128_create @435 + fec_hamming128_decode @436 + fec_hamming128_decode_soft @437 + fec_hamming128_decode_symbol @438 + fec_hamming128_destroy @439 + fec_hamming128_encode @440 + fec_hamming128_encode_symbol @441 + fec_hamming1511_decode_symbol @442 + fec_hamming1511_encode_symbol @443 + fec_hamming3126_decode_symbol @444 + fec_hamming3126_encode_symbol @445 + fec_hamming74_create @446 + fec_hamming74_decode @447 + fec_hamming74_decode_soft @448 + fec_hamming74_destroy @449 + fec_hamming74_encode @450 + fec_hamming84_create @451 + fec_hamming84_decode @452 + fec_hamming84_decode_soft @453 + fec_hamming84_destroy @454 + fec_hamming84_encode @455 + fec_pass_create @456 + fec_pass_decode @457 + fec_pass_destroy @458 + fec_pass_encode @459 + fec_pass_print @460 + fec_print @461 + fec_recreate @462 + fec_rep3_create @463 + fec_rep3_decode @464 + fec_rep3_decode_soft @465 + fec_rep3_destroy @466 + fec_rep3_encode @467 + fec_rep3_print @468 + fec_rep5_create @469 + fec_rep5_decode @470 + fec_rep5_decode_soft @471 + fec_rep5_destroy @472 + fec_rep5_encode @473 + fec_rep5_print @474 + fec_rs_create @475 + fec_rs_decode @476 + fec_rs_destroy @477 + fec_rs_encode @478 + fec_rs_get_enc_msg_len @479 + fec_scheme_is_convolutional @480 + fec_scheme_is_hamming @481 + fec_scheme_is_punctured @482 + fec_scheme_is_reedsolomon @483 + fec_scheme_is_repeat @484 + fec_scheme_str @485 DATA + fec_secded2216_compute_parity @486 + fec_secded2216_compute_syndrome @487 + fec_secded2216_create @488 + fec_secded2216_decode @489 + fec_secded2216_decode_symbol @490 + fec_secded2216_destroy @491 + fec_secded2216_encode @492 + fec_secded2216_encode_symbol @493 + fec_secded2216_estimate_ehat @494 + fec_secded3932_compute_parity @495 + fec_secded3932_compute_syndrome @496 + fec_secded3932_create @497 + fec_secded3932_decode @498 + fec_secded3932_decode_symbol @499 + fec_secded3932_destroy @500 + fec_secded3932_encode @501 + fec_secded3932_encode_symbol @502 + fec_secded3932_estimate_ehat @503 + fec_secded7264_compute_parity @504 + fec_secded7264_compute_syndrome @505 + fec_secded7264_create @506 + fec_secded7264_decode @507 + fec_secded7264_decode_symbol @508 + fec_secded7264_destroy @509 + fec_secded7264_encode @510 + fec_secded7264_encode_symbol @511 + fec_secded7264_estimate_ehat @512 + fec_sumproduct @513 + fec_sumproduct_step @514 + fecsoft_hamming128_decode @515 + fecsoft_hamming128_decode_n3 @516 + fecsoft_hamming128_n3 @517 DATA + fecsoft_hamming74_decode @518 + fecsoft_hamming84_decode @519 + fft_create_plan @520 + fft_create_plan_dft @521 + fft_create_plan_mixed_radix @522 + fft_create_plan_r2r_1d @523 + fft_create_plan_rader @524 + fft_create_plan_rader2 @525 + fft_create_plan_radix2 @526 + fft_destroy_plan @527 + fft_destroy_plan_dft @528 + fft_destroy_plan_mixed_radix @529 + fft_destroy_plan_r2r_1d @530 + fft_destroy_plan_rader @531 + fft_destroy_plan_rader2 @532 + fft_destroy_plan_radix2 @533 + fft_estimate_mixed_radix @534 + fft_execute @535 + fft_execute_REDFT00 @536 + fft_execute_REDFT01 @537 + fft_execute_REDFT10 @538 + fft_execute_REDFT11 @539 + fft_execute_RODFT00 @540 + fft_execute_RODFT01 @541 + fft_execute_RODFT10 @542 + fft_execute_RODFT11 @543 + fft_execute_dft @544 + fft_execute_dft_16 @545 + fft_execute_dft_2 @546 + fft_execute_dft_3 @547 + fft_execute_dft_4 @548 + fft_execute_dft_5 @549 + fft_execute_dft_6 @550 + fft_execute_dft_7 @551 + fft_execute_dft_8 @552 + fft_execute_mixed_radix @553 + fft_execute_rader @554 + fft_execute_rader2 @555 + fft_execute_radix2 @556 + fft_is_radix2 @557 + fft_print_plan @558 + fft_print_plan_r2r_1d @559 + fft_print_plan_recursive @560 + fft_r2r_1d_run @561 + fft_reverse_index @562 + fft_run @563 + fft_shift @564 + fftfilt_cccf_create @565 + fftfilt_cccf_destroy @566 + fftfilt_cccf_execute @567 + fftfilt_cccf_get_length @568 + fftfilt_cccf_print @569 + fftfilt_cccf_reset @570 + fftfilt_cccf_set_scale @571 + fftfilt_crcf_create @572 + fftfilt_crcf_destroy @573 + fftfilt_crcf_execute @574 + fftfilt_crcf_get_length @575 + fftfilt_crcf_print @576 + fftfilt_crcf_reset @577 + fftfilt_crcf_set_scale @578 + fftfilt_rrrf_create @579 + fftfilt_rrrf_destroy @580 + fftfilt_rrrf_execute @581 + fftfilt_rrrf_get_length @582 + fftfilt_rrrf_print @583 + fftfilt_rrrf_reset @584 + fftfilt_rrrf_set_scale @585 + fir_group_delay @586 + firdecim_cccf_create @587 + firdecim_cccf_create_kaiser @588 + firdecim_cccf_create_prototype @589 + firdecim_cccf_destroy @590 + firdecim_cccf_execute @591 + firdecim_cccf_execute_block @592 + firdecim_cccf_print @593 + firdecim_cccf_reset @594 + firdecim_crcf_create @595 + firdecim_crcf_create_kaiser @596 + firdecim_crcf_create_prototype @597 + firdecim_crcf_destroy @598 + firdecim_crcf_execute @599 + firdecim_crcf_execute_block @600 + firdecim_crcf_print @601 + firdecim_crcf_reset @602 + firdecim_rrrf_create @603 + firdecim_rrrf_create_kaiser @604 + firdecim_rrrf_create_prototype @605 + firdecim_rrrf_destroy @606 + firdecim_rrrf_execute @607 + firdecim_rrrf_execute_block @608 + firdecim_rrrf_print @609 + firdecim_rrrf_reset @610 + firdespm_compute_error @611 + firdespm_compute_interp @612 + firdespm_compute_taps @613 + firdespm_create @614 + firdespm_destroy @615 + firdespm_execute @616 + firdespm_iext_search @617 + firdespm_init_grid @618 + firdespm_is_search_complete @619 + firdespm_print @620 + firdespm_run @621 + firfarrow_crcf_create @622 + firfarrow_crcf_destroy @623 + firfarrow_crcf_execute @624 + firfarrow_crcf_execute_block @625 + firfarrow_crcf_freqresponse @626 + firfarrow_crcf_genpoly @627 + firfarrow_crcf_get_coefficients @628 + firfarrow_crcf_get_length @629 + firfarrow_crcf_groupdelay @630 + firfarrow_crcf_print @631 + firfarrow_crcf_push @632 + firfarrow_crcf_reset @633 + firfarrow_crcf_set_delay @634 + firfarrow_rrrf_create @635 + firfarrow_rrrf_destroy @636 + firfarrow_rrrf_execute @637 + firfarrow_rrrf_execute_block @638 + firfarrow_rrrf_freqresponse @639 + firfarrow_rrrf_genpoly @640 + firfarrow_rrrf_get_coefficients @641 + firfarrow_rrrf_get_length @642 + firfarrow_rrrf_groupdelay @643 + firfarrow_rrrf_print @644 + firfarrow_rrrf_push @645 + firfarrow_rrrf_reset @646 + firfarrow_rrrf_set_delay @647 + firfilt_cccf_create @648 + firfilt_cccf_create_kaiser @649 + firfilt_cccf_create_rect @650 + firfilt_cccf_create_rnyquist @651 + firfilt_cccf_destroy @652 + firfilt_cccf_execute @653 + firfilt_cccf_execute_block @654 + firfilt_cccf_freqresponse @655 + firfilt_cccf_get_length @656 + firfilt_cccf_groupdelay @657 + firfilt_cccf_print @658 + firfilt_cccf_push @659 + firfilt_cccf_recreate @660 + firfilt_cccf_reset @661 + firfilt_cccf_set_scale @662 + firfilt_crcf_create @663 + firfilt_crcf_create_kaiser @664 + firfilt_crcf_create_rect @665 + firfilt_crcf_create_rnyquist @666 + firfilt_crcf_destroy @667 + firfilt_crcf_execute @668 + firfilt_crcf_execute_block @669 + firfilt_crcf_freqresponse @670 + firfilt_crcf_get_length @671 + firfilt_crcf_groupdelay @672 + firfilt_crcf_print @673 + firfilt_crcf_push @674 + firfilt_crcf_recreate @675 + firfilt_crcf_reset @676 + firfilt_crcf_set_scale @677 + firfilt_rrrf_create @678 + firfilt_rrrf_create_kaiser @679 + firfilt_rrrf_create_rect @680 + firfilt_rrrf_create_rnyquist @681 + firfilt_rrrf_destroy @682 + firfilt_rrrf_execute @683 + firfilt_rrrf_execute_block @684 + firfilt_rrrf_freqresponse @685 + firfilt_rrrf_get_length @686 + firfilt_rrrf_groupdelay @687 + firfilt_rrrf_print @688 + firfilt_rrrf_push @689 + firfilt_rrrf_recreate @690 + firfilt_rrrf_reset @691 + firfilt_rrrf_set_scale @692 + firhilbf_c2r_execute @693 + firhilbf_create @694 + firhilbf_decim_execute @695 + firhilbf_decim_execute_block @696 + firhilbf_destroy @697 + firhilbf_interp_execute @698 + firhilbf_interp_execute_block @699 + firhilbf_print @700 + firhilbf_r2c_execute @701 + firhilbf_reset @702 + firinterp_cccf_create @703 + firinterp_cccf_create_kaiser @704 + firinterp_cccf_create_prototype @705 + firinterp_cccf_destroy @706 + firinterp_cccf_execute @707 + firinterp_cccf_execute_block @708 + firinterp_cccf_print @709 + firinterp_cccf_reset @710 + firinterp_crcf_create @711 + firinterp_crcf_create_kaiser @712 + firinterp_crcf_create_prototype @713 + firinterp_crcf_destroy @714 + firinterp_crcf_execute @715 + firinterp_crcf_execute_block @716 + firinterp_crcf_print @717 + firinterp_crcf_reset @718 + firinterp_rrrf_create @719 + firinterp_rrrf_create_kaiser @720 + firinterp_rrrf_create_prototype @721 + firinterp_rrrf_destroy @722 + firinterp_rrrf_execute @723 + firinterp_rrrf_execute_block @724 + firinterp_rrrf_print @725 + firinterp_rrrf_reset @726 + firpfb_cccf_create @727 + firpfb_cccf_create_drnyquist @728 + firpfb_cccf_create_kaiser @729 + firpfb_cccf_create_rnyquist @730 + firpfb_cccf_destroy @731 + firpfb_cccf_execute @732 + firpfb_cccf_execute_block @733 + firpfb_cccf_print @734 + firpfb_cccf_push @735 + firpfb_cccf_recreate @736 + firpfb_cccf_reset @737 + firpfb_cccf_set_scale @738 + firpfb_crcf_create @739 + firpfb_crcf_create_drnyquist @740 + firpfb_crcf_create_kaiser @741 + firpfb_crcf_create_rnyquist @742 + firpfb_crcf_destroy @743 + firpfb_crcf_execute @744 + firpfb_crcf_execute_block @745 + firpfb_crcf_print @746 + firpfb_crcf_push @747 + firpfb_crcf_recreate @748 + firpfb_crcf_reset @749 + firpfb_crcf_set_scale @750 + firpfb_rrrf_create @751 + firpfb_rrrf_create_drnyquist @752 + firpfb_rrrf_create_kaiser @753 + firpfb_rrrf_create_rnyquist @754 + firpfb_rrrf_destroy @755 + firpfb_rrrf_execute @756 + firpfb_rrrf_execute_block @757 + firpfb_rrrf_print @758 + firpfb_rrrf_push @759 + firpfb_rrrf_recreate @760 + firpfb_rrrf_reset @761 + firpfb_rrrf_set_scale @762 + firpfbch2_crcf_create @763 + firpfbch2_crcf_create_kaiser @764 + firpfbch2_crcf_destroy @765 + firpfbch2_crcf_execute @766 + firpfbch2_crcf_execute_analyzer @767 + firpfbch2_crcf_execute_synthesizer @768 + firpfbch2_crcf_print @769 + firpfbch2_crcf_reset @770 + firpfbch_cccf_analyzer_execute @771 + firpfbch_cccf_analyzer_push @772 + firpfbch_cccf_analyzer_run @773 + firpfbch_cccf_create @774 + firpfbch_cccf_create_kaiser @775 + firpfbch_cccf_create_rnyquist @776 + firpfbch_cccf_destroy @777 + firpfbch_cccf_print @778 + firpfbch_cccf_reset @779 + firpfbch_cccf_synthesizer_execute @780 + firpfbch_crcf_analyzer_execute @781 + firpfbch_crcf_analyzer_push @782 + firpfbch_crcf_analyzer_run @783 + firpfbch_crcf_create @784 + firpfbch_crcf_create_kaiser @785 + firpfbch_crcf_create_rnyquist @786 + firpfbch_crcf_destroy @787 + firpfbch_crcf_print @788 + firpfbch_crcf_reset @789 + firpfbch_crcf_synthesizer_execute @790 + flattop @791 + flexframegen_assemble @792 + flexframegen_create @793 + flexframegen_destroy @794 + flexframegen_generate_header @795 + flexframegen_generate_payload @796 + flexframegen_generate_preamble @797 + flexframegen_generate_symbol @798 + flexframegen_generate_tail @799 + flexframegen_getframelen @800 + flexframegen_getprops @801 + flexframegen_is_assembled @802 + flexframegen_print @803 + flexframegen_reconfigure @804 + flexframegen_reset @805 + flexframegen_setprops @806 + flexframegen_write_samples @807 + flexframegenprops_init_default @808 + flexframesync_create @809 + flexframesync_debug_disable @810 + flexframesync_debug_enable @811 + flexframesync_debug_print @812 + flexframesync_decode_header @813 + flexframesync_destroy @814 + flexframesync_execute @815 + flexframesync_execute_rxheader @816 + flexframesync_execute_rxpayload @817 + flexframesync_execute_rxpreamble @818 + flexframesync_execute_seekpn @819 + flexframesync_get_framedatastats @820 + flexframesync_print @821 + flexframesync_reset @822 + flexframesync_reset_framedatastats @823 + flexframesync_step @824 + fpoly_bessel @825 + fpoly_bessel_roots @826 + fpoly_bessel_roots_orchard @827 + fpoly_bessel_roots_orchard_recursion @828 + framedatastats_print @829 + framedatastats_reset @830 + framegen64_create @831 + framegen64_destroy @832 + framegen64_execute @833 + framegen64_print @834 + framesync64_create @835 + framesync64_debug_disable @836 + framesync64_debug_enable @837 + framesync64_debug_print @838 + framesync64_destroy @839 + framesync64_execute @840 + framesync64_execute_rxpayload @841 + framesync64_execute_rxpreamble @842 + framesync64_execute_seekpn @843 + framesync64_print @844 + framesync64_reset @845 + framesync64_step @846 + framesyncstats_default @847 DATA + framesyncstats_init_default @848 + framesyncstats_print @849 + freqdem_create @850 + freqdem_demodulate @851 + freqdem_demodulate_block @852 + freqdem_destroy @853 + freqdem_print @854 + freqdem_reset @855 + freqmod_create @856 + freqmod_destroy @857 + freqmod_modulate @858 + freqmod_modulate_block @859 + freqmod_print @860 + freqmod_reset @861 + fskdem_create @862 + fskdem_demodulate @863 + fskdem_destroy @864 + fskdem_get_frequency_error @865 + fskdem_print @866 + fskdem_reset @867 + fskmod_create @868 + fskmod_destroy @869 + fskmod_modulate @870 + fskmod_print @871 + fskmod_reset @872 + gasearch_create @873 + gasearch_create_advanced @874 + gasearch_crossover @875 + gasearch_destroy @876 + gasearch_evaluate @877 + gasearch_evolve @878 + gasearch_getopt @879 + gasearch_mutate @880 + gasearch_print @881 + gasearch_rank @882 + gasearch_run @883 + gasearch_set_mutation_rate @884 + gasearch_set_population_size @885 + gmskdem_create @886 + gmskdem_debug_print @887 + gmskdem_demodulate @888 + gmskdem_destroy @889 + gmskdem_print @890 + gmskdem_reset @891 + gmskdem_set_eq_bw @892 + gmskframegen_assemble @893 + gmskframegen_create @894 + gmskframegen_destroy @895 + gmskframegen_encode_header @896 + gmskframegen_getframelen @897 + gmskframegen_is_assembled @898 + gmskframegen_print @899 + gmskframegen_reset @900 + gmskframegen_write_header @901 + gmskframegen_write_payload @902 + gmskframegen_write_preamble @903 + gmskframegen_write_samples @904 + gmskframegen_write_tail @905 + gmskframesync_create @906 + gmskframesync_debug_disable @907 + gmskframesync_debug_enable @908 + gmskframesync_debug_print @909 + gmskframesync_decode_header @910 + gmskframesync_destroy @911 + gmskframesync_execute @912 + gmskframesync_execute_detectframe @913 + gmskframesync_execute_rxheader @914 + gmskframesync_execute_rxpayload @915 + gmskframesync_execute_rxpreamble @916 + gmskframesync_print @917 + gmskframesync_pushpn @918 + gmskframesync_reset @919 + gmskframesync_syncpn @920 + gmskframesync_update_fi @921 + gmskframesync_update_symsync @922 + gmskmod_create @923 + gmskmod_destroy @924 + gmskmod_modulate @925 + gmskmod_print @926 + gmskmod_reset @927 + golay2412_Gt @928 DATA + golay2412_H @929 DATA + golay2412_P @930 DATA + golay2412_matrix_mul @931 + golay2412_parity_search @932 + gradsearch_create @933 + gradsearch_destroy @934 + gradsearch_execute @935 + gradsearch_gradient @936 + gradsearch_linesearch @937 + gradsearch_norm @938 + gradsearch_print @939 + gradsearch_step @940 + gray_decode @941 + gray_encode @942 + hamming @943 + hamming128_enc_gentab @944 DATA + hamming74_dec_gentab @945 DATA + hamming74_enc_gentab @946 DATA + hamming84_dec_gentab @947 DATA + hamming84_enc_gentab @948 DATA + hann @949 + icrandnf @950 + iir_group_delay @951 + iirdecim_cccf_create @952 + iirdecim_cccf_create_default @953 + iirdecim_cccf_create_prototype @954 + iirdecim_cccf_destroy @955 + iirdecim_cccf_execute @956 + iirdecim_cccf_execute_block @957 + iirdecim_cccf_groupdelay @958 + iirdecim_cccf_print @959 + iirdecim_cccf_reset @960 + iirdecim_crcf_create @961 + iirdecim_crcf_create_default @962 + iirdecim_crcf_create_prototype @963 + iirdecim_crcf_destroy @964 + iirdecim_crcf_execute @965 + iirdecim_crcf_execute_block @966 + iirdecim_crcf_groupdelay @967 + iirdecim_crcf_print @968 + iirdecim_crcf_reset @969 + iirdecim_rrrf_create @970 + iirdecim_rrrf_create_default @971 + iirdecim_rrrf_create_prototype @972 + iirdecim_rrrf_destroy @973 + iirdecim_rrrf_execute @974 + iirdecim_rrrf_execute_block @975 + iirdecim_rrrf_groupdelay @976 + iirdecim_rrrf_print @977 + iirdecim_rrrf_reset @978 + iirdes_dzpk2sosf @979 + iirdes_dzpk2tff @980 + iirdes_dzpk_lp2bp @981 + iirdes_dzpk_lp2hp @982 + iirdes_freqprewarp @983 + iirdes_isstable @984 + iirdes_pll_active_PI @985 + iirdes_pll_active_lag @986 + iirfilt_cccf_create @987 + iirfilt_cccf_create_dc_blocker @988 + iirfilt_cccf_create_differentiator @989 + iirfilt_cccf_create_integrator @990 + iirfilt_cccf_create_lowpass @991 + iirfilt_cccf_create_pll @992 + iirfilt_cccf_create_prototype @993 + iirfilt_cccf_create_sos @994 + iirfilt_cccf_destroy @995 + iirfilt_cccf_execute @996 + iirfilt_cccf_execute_block @997 + iirfilt_cccf_execute_norm @998 + iirfilt_cccf_execute_sos @999 + iirfilt_cccf_freqresponse @1000 + iirfilt_cccf_get_length @1001 + iirfilt_cccf_groupdelay @1002 + iirfilt_cccf_print @1003 + iirfilt_cccf_reset @1004 + iirfilt_crcf_create @1005 + iirfilt_crcf_create_dc_blocker @1006 + iirfilt_crcf_create_differentiator @1007 + iirfilt_crcf_create_integrator @1008 + iirfilt_crcf_create_lowpass @1009 + iirfilt_crcf_create_pll @1010 + iirfilt_crcf_create_prototype @1011 + iirfilt_crcf_create_sos @1012 + iirfilt_crcf_destroy @1013 + iirfilt_crcf_execute @1014 + iirfilt_crcf_execute_block @1015 + iirfilt_crcf_execute_norm @1016 + iirfilt_crcf_execute_sos @1017 + iirfilt_crcf_freqresponse @1018 + iirfilt_crcf_get_length @1019 + iirfilt_crcf_groupdelay @1020 + iirfilt_crcf_print @1021 + iirfilt_crcf_reset @1022 + iirfilt_rrrf_create @1023 + iirfilt_rrrf_create_dc_blocker @1024 + iirfilt_rrrf_create_differentiator @1025 + iirfilt_rrrf_create_integrator @1026 + iirfilt_rrrf_create_lowpass @1027 + iirfilt_rrrf_create_pll @1028 + iirfilt_rrrf_create_prototype @1029 + iirfilt_rrrf_create_sos @1030 + iirfilt_rrrf_destroy @1031 + iirfilt_rrrf_execute @1032 + iirfilt_rrrf_execute_block @1033 + iirfilt_rrrf_execute_norm @1034 + iirfilt_rrrf_execute_sos @1035 + iirfilt_rrrf_freqresponse @1036 + iirfilt_rrrf_get_length @1037 + iirfilt_rrrf_groupdelay @1038 + iirfilt_rrrf_print @1039 + iirfilt_rrrf_reset @1040 + iirfiltsos_cccf_create @1041 + iirfiltsos_cccf_destroy @1042 + iirfiltsos_cccf_execute @1043 + iirfiltsos_cccf_execute_df1 @1044 + iirfiltsos_cccf_execute_df2 @1045 + iirfiltsos_cccf_groupdelay @1046 + iirfiltsos_cccf_print @1047 + iirfiltsos_cccf_reset @1048 + iirfiltsos_cccf_set_coefficients @1049 + iirfiltsos_crcf_create @1050 + iirfiltsos_crcf_destroy @1051 + iirfiltsos_crcf_execute @1052 + iirfiltsos_crcf_execute_df1 @1053 + iirfiltsos_crcf_execute_df2 @1054 + iirfiltsos_crcf_groupdelay @1055 + iirfiltsos_crcf_print @1056 + iirfiltsos_crcf_reset @1057 + iirfiltsos_crcf_set_coefficients @1058 + iirfiltsos_rrrf_create @1059 + iirfiltsos_rrrf_destroy @1060 + iirfiltsos_rrrf_execute @1061 + iirfiltsos_rrrf_execute_df1 @1062 + iirfiltsos_rrrf_execute_df2 @1063 + iirfiltsos_rrrf_groupdelay @1064 + iirfiltsos_rrrf_print @1065 + iirfiltsos_rrrf_reset @1066 + iirfiltsos_rrrf_set_coefficients @1067 + iirinterp_cccf_create @1068 + iirinterp_cccf_create_default @1069 + iirinterp_cccf_create_prototype @1070 + iirinterp_cccf_destroy @1071 + iirinterp_cccf_execute @1072 + iirinterp_cccf_execute_block @1073 + iirinterp_cccf_groupdelay @1074 + iirinterp_cccf_print @1075 + iirinterp_cccf_reset @1076 + iirinterp_crcf_create @1077 + iirinterp_crcf_create_default @1078 + iirinterp_crcf_create_prototype @1079 + iirinterp_crcf_destroy @1080 + iirinterp_crcf_execute @1081 + iirinterp_crcf_execute_block @1082 + iirinterp_crcf_groupdelay @1083 + iirinterp_crcf_print @1084 + iirinterp_crcf_reset @1085 + iirinterp_rrrf_create @1086 + iirinterp_rrrf_create_default @1087 + iirinterp_rrrf_create_prototype @1088 + iirinterp_rrrf_destroy @1089 + iirinterp_rrrf_execute @1090 + iirinterp_rrrf_execute_block @1091 + iirinterp_rrrf_groupdelay @1092 + iirinterp_rrrf_print @1093 + iirinterp_rrrf_reset @1094 + interleaver_create @1095 + interleaver_decode @1096 + interleaver_decode_soft @1097 + interleaver_destroy @1098 + interleaver_encode @1099 + interleaver_encode_soft @1100 + interleaver_permute @1101 + interleaver_permute_mask @1102 + interleaver_permute_mask_soft @1103 + interleaver_permute_soft @1104 + interleaver_print @1105 + interleaver_set_depth @1106 + kaiser @1107 + kaiser_beta_As @1108 + landenf @1109 + liquid_MarcumQ1f @1110 + liquid_MarcumQf @1111 + liquid_Qf @1112 + liquid_apsk128 @1113 DATA + liquid_apsk16 @1114 DATA + liquid_apsk256 @1115 DATA + liquid_apsk32 @1116 DATA + liquid_apsk4 @1117 DATA + liquid_apsk64 @1118 DATA + liquid_apsk8 @1119 DATA + liquid_asechf @1120 + liquid_bdotprod @1121 + liquid_besseli0f @1122 + liquid_besselif @1123 + liquid_besselj0f @1124 + liquid_besseljf @1125 + liquid_c_leading_zeros @1126 DATA + liquid_c_ones @1127 DATA + liquid_c_ones_mod2 @1128 DATA + liquid_cacosf @1129 + liquid_cargf_approx @1130 + liquid_casinf @1131 + liquid_catanf @1132 + liquid_cexpf @1133 + liquid_clogf @1134 + liquid_cosf @1135 + liquid_count_leading_zeros @1136 + liquid_count_ones @1137 + liquid_count_ones_mod2 @1138 + liquid_cplxpair @1139 + liquid_cplxpair_cleanup @1140 + liquid_csqrtf @1141 + liquid_expf @1142 + liquid_factor @1143 + liquid_factorialf @1144 + liquid_fft_estimate_method @1145 + liquid_filter_autocorr @1146 + liquid_filter_crosscorr @1147 + liquid_filter_energy @1148 + liquid_filter_isi @1149 + liquid_firdes_arkaiser @1150 + liquid_firdes_doppler @1151 + liquid_firdes_farcsech @1152 + liquid_firdes_farcsech_freqresponse @1153 + liquid_firdes_fexp @1154 + liquid_firdes_fexp_freqresponse @1155 + liquid_firdes_fnyquist @1156 + liquid_firdes_fsech @1157 + liquid_firdes_fsech_freqresponse @1158 + liquid_firdes_gmskrx @1159 + liquid_firdes_gmsktx @1160 + liquid_firdes_hM3 @1161 + liquid_firdes_kaiser @1162 + liquid_firdes_prototype @1163 + liquid_firdes_rcos @1164 + liquid_firdes_rfarcsech @1165 + liquid_firdes_rfexp @1166 + liquid_firdes_rfsech @1167 + liquid_firdes_rkaiser @1168 + liquid_firdes_rkaiser_bisection @1169 + liquid_firdes_rkaiser_internal_isi @1170 + liquid_firdes_rkaiser_quadratic @1171 + liquid_firdes_rrcos @1172 + liquid_gammaf @1173 + liquid_getopt_str2crc @1174 + liquid_getopt_str2fec @1175 + liquid_getopt_str2firfilt @1176 + liquid_getopt_str2mod @1177 + liquid_getopt_str2window @1178 + liquid_iirdes @1179 + liquid_invgauss @1180 + liquid_is_prime @1181 + liquid_kbd @1182 + liquid_kbd_window @1183 + liquid_lbcircshift @1184 + liquid_lbshift @1185 + liquid_lcircshift @1186 + liquid_levinson @1187 + liquid_libversion @1188 + liquid_libversion_number @1189 + liquid_lnbesselif @1190 + liquid_lngammaf @1191 + liquid_lnlowergammaf @1192 + liquid_lnuppergammaf @1193 + liquid_logf @1194 + liquid_lowergammaf @1195 + liquid_lpc @1196 + liquid_lshift @1197 + liquid_modem_is_apsk @1198 + liquid_modem_is_ask @1199 + liquid_modem_is_dpsk @1200 + liquid_modem_is_psk @1201 + liquid_modem_is_qam @1202 + liquid_modpow @1203 + liquid_msb_index @1204 + liquid_multimodal @1205 + liquid_nchoosek @1206 + liquid_nextpow2 @1207 + liquid_pack_array @1208 + liquid_pack_bytes @1209 + liquid_pack_soft_bits @1210 + liquid_primitive_root @1211 + liquid_primitive_root_prime @1212 + liquid_print_bitstring @1213 + liquid_print_crc_schemes @1214 + liquid_print_fec_schemes @1215 + liquid_print_modulation_schemes @1216 + liquid_print_windows @1217 + liquid_rbcircshift @1218 + liquid_rbshift @1219 + liquid_rcircshift @1220 + liquid_rcostaper_windowf @1221 + liquid_repack_bytes @1222 + liquid_reverse_byte @1223 + liquid_reverse_byte_gentab @1224 DATA + liquid_reverse_uint16 @1225 + liquid_reverse_uint24 @1226 + liquid_reverse_uint32 @1227 + liquid_rosenbrock @1228 + liquid_rshift @1229 + liquid_sincosf @1230 + liquid_sinf @1231 + liquid_spiral @1232 + liquid_sumsqcf @1233 + liquid_sumsqf @1234 + liquid_tanf @1235 + liquid_totient @1236 + liquid_unique_factor @1237 + liquid_unpack_array @1238 + liquid_unpack_bytes @1239 + liquid_unpack_soft_bits @1240 + liquid_unwrap_phase @1241 + liquid_unwrap_phase2 @1242 + liquid_uppergammaf @1243 + liquid_vectorcf_abs @1244 + liquid_vectorcf_add @1245 + liquid_vectorcf_addscalar @1246 + liquid_vectorcf_carg @1247 + liquid_vectorcf_cexpj @1248 + liquid_vectorcf_mul @1249 + liquid_vectorcf_mulscalar @1250 + liquid_vectorcf_norm @1251 + liquid_vectorcf_normalize @1252 + liquid_vectorf_abs @1253 + liquid_vectorf_add @1254 + liquid_vectorf_addscalar @1255 + liquid_vectorf_carg @1256 + liquid_vectorf_cexpj @1257 + liquid_vectorf_mul @1258 + liquid_vectorf_mulscalar @1259 + liquid_vectorf_norm @1260 + liquid_vectorf_normalize @1261 + liquid_version @1262 DATA + liquid_window_str @1263 DATA + matrix_add @1264 + matrix_aug @1265 + matrix_cgsolve @1266 + matrix_chol @1267 + matrix_det @1268 + matrix_det2x2 @1269 + matrix_div @1270 + matrix_eye @1271 + matrix_gjelim @1272 + matrix_gramschmidt @1273 + matrix_hermitian @1274 + matrix_hermitian_mul @1275 + matrix_inv @1276 + matrix_linsolve @1277 + matrix_ludecomp_crout @1278 + matrix_ludecomp_doolittle @1279 + matrix_mul @1280 + matrix_mul_hermitian @1281 + matrix_mul_transpose @1282 + matrix_ones @1283 + matrix_pdiv @1284 + matrix_pivot @1285 + matrix_pmul @1286 + matrix_print @1287 + matrix_proj @1288 + matrix_qrdecomp_gramschmidt @1289 + matrix_sub @1290 + matrix_swaprows @1291 + matrix_trans @1292 + matrix_transpose_mul @1293 + matrix_zeros @1294 + matrixc_add @1295 + matrixc_aug @1296 + matrixc_cgsolve @1297 + matrixc_chol @1298 + matrixc_det @1299 + matrixc_det2x2 @1300 + matrixc_div @1301 + matrixc_eye @1302 + matrixc_gjelim @1303 + matrixc_gramschmidt @1304 + matrixc_hermitian @1305 + matrixc_hermitian_mul @1306 + matrixc_inv @1307 + matrixc_linsolve @1308 + matrixc_ludecomp_crout @1309 + matrixc_ludecomp_doolittle @1310 + matrixc_mul @1311 + matrixc_mul_hermitian @1312 + matrixc_mul_transpose @1313 + matrixc_ones @1314 + matrixc_pdiv @1315 + matrixc_pivot @1316 + matrixc_pmul @1317 + matrixc_print @1318 + matrixc_proj @1319 + matrixc_qrdecomp_gramschmidt @1320 + matrixc_sub @1321 + matrixc_swaprows @1322 + matrixc_trans @1323 + matrixc_transpose_mul @1324 + matrixc_zeros @1325 + matrixcf_add @1326 + matrixcf_aug @1327 + matrixcf_cgsolve @1328 + matrixcf_chol @1329 + matrixcf_det @1330 + matrixcf_det2x2 @1331 + matrixcf_div @1332 + matrixcf_eye @1333 + matrixcf_gjelim @1334 + matrixcf_gramschmidt @1335 + matrixcf_hermitian @1336 + matrixcf_hermitian_mul @1337 + matrixcf_inv @1338 + matrixcf_linsolve @1339 + matrixcf_ludecomp_crout @1340 + matrixcf_ludecomp_doolittle @1341 + matrixcf_mul @1342 + matrixcf_mul_hermitian @1343 + matrixcf_mul_transpose @1344 + matrixcf_ones @1345 + matrixcf_pdiv @1346 + matrixcf_pivot @1347 + matrixcf_pmul @1348 + matrixcf_print @1349 + matrixcf_proj @1350 + matrixcf_qrdecomp_gramschmidt @1351 + matrixcf_sub @1352 + matrixcf_swaprows @1353 + matrixcf_trans @1354 + matrixcf_transpose_mul @1355 + matrixcf_zeros @1356 + matrixf_add @1357 + matrixf_aug @1358 + matrixf_cgsolve @1359 + matrixf_chol @1360 + matrixf_det @1361 + matrixf_det2x2 @1362 + matrixf_div @1363 + matrixf_eye @1364 + matrixf_gjelim @1365 + matrixf_gramschmidt @1366 + matrixf_hermitian @1367 + matrixf_hermitian_mul @1368 + matrixf_inv @1369 + matrixf_linsolve @1370 + matrixf_ludecomp_crout @1371 + matrixf_ludecomp_doolittle @1372 + matrixf_mul @1373 + matrixf_mul_hermitian @1374 + matrixf_mul_transpose @1375 + matrixf_ones @1376 + matrixf_pdiv @1377 + matrixf_pivot @1378 + matrixf_pmul @1379 + matrixf_print @1380 + matrixf_proj @1381 + matrixf_qrdecomp_gramschmidt @1382 + matrixf_sub @1383 + matrixf_swaprows @1384 + matrixf_trans @1385 + matrixf_transpose_mul @1386 + matrixf_zeros @1387 + modem_arb128opt @1388 DATA + modem_arb16opt @1389 DATA + modem_arb256opt @1390 DATA + modem_arb32opt @1391 DATA + modem_arb64opt @1392 DATA + modem_arb_V29 @1393 DATA + modem_arb_balance_iq @1394 + modem_arb_init @1395 + modem_arb_init_file @1396 + modem_arb_scale @1397 + modem_arb_sqam128 @1398 DATA + modem_arb_sqam32 @1399 DATA + modem_arb_vt64 @1400 DATA + modem_create @1401 + modem_create_V29 @1402 + modem_create_apsk @1403 + modem_create_arb @1404 + modem_create_arb128opt @1405 + modem_create_arb16opt @1406 + modem_create_arb256opt @1407 + modem_create_arb32opt @1408 + modem_create_arb64opt @1409 + modem_create_arb64vt @1410 + modem_create_arbitrary @1411 + modem_create_ask @1412 + modem_create_bpsk @1413 + modem_create_dpsk @1414 + modem_create_ook @1415 + modem_create_psk @1416 + modem_create_qam @1417 + modem_create_qpsk @1418 + modem_create_sqam128 @1419 + modem_create_sqam32 @1420 + modem_demodsoft_gentab @1421 + modem_demodulate @1422 + modem_demodulate_apsk @1423 + modem_demodulate_arb @1424 + modem_demodulate_ask @1425 + modem_demodulate_bpsk @1426 + modem_demodulate_dpsk @1427 + modem_demodulate_linear_array @1428 + modem_demodulate_linear_array_ref @1429 + modem_demodulate_ook @1430 + modem_demodulate_psk @1431 + modem_demodulate_qam @1432 + modem_demodulate_qpsk @1433 + modem_demodulate_soft @1434 + modem_demodulate_soft_arb @1435 + modem_demodulate_soft_bpsk @1436 + modem_demodulate_soft_qpsk @1437 + modem_demodulate_soft_table @1438 + modem_demodulate_sqam128 @1439 + modem_demodulate_sqam32 @1440 + modem_destroy @1441 + modem_gen_rand_sym @1442 + modem_get_bps @1443 + modem_get_demodulator_evm @1444 + modem_get_demodulator_phase_error @1445 + modem_get_demodulator_sample @1446 + modem_get_scheme @1447 + modem_init @1448 + modem_init_map @1449 + modem_modulate @1450 + modem_modulate_apsk @1451 + modem_modulate_arb @1452 + modem_modulate_ask @1453 + modem_modulate_bpsk @1454 + modem_modulate_dpsk @1455 + modem_modulate_map @1456 + modem_modulate_ook @1457 + modem_modulate_psk @1458 + modem_modulate_qam @1459 + modem_modulate_qpsk @1460 + modem_modulate_sqam128 @1461 + modem_modulate_sqam32 @1462 + modem_print @1463 + modem_recreate @1464 + modem_reset @1465 + modulation_types @1466 DATA + msequence_advance @1467 + msequence_create @1468 + msequence_create_default @1469 + msequence_create_genpoly @1470 + msequence_default @1471 DATA + msequence_destroy @1472 + msequence_generate_symbol @1473 + msequence_get_length @1474 + msequence_get_state @1475 + msequence_print @1476 + msequence_reset @1477 + msequence_set_state @1478 + msourcecf_add_modem @1479 + msourcecf_add_noise @1480 + msourcecf_add_source @1481 + msourcecf_add_tone @1482 + msourcecf_create @1483 + msourcecf_destroy @1484 + msourcecf_disable @1485 + msourcecf_enable @1486 + msourcecf_get_source @1487 + msourcecf_print @1488 + msourcecf_remove @1489 + msourcecf_reset @1490 + msourcecf_set_frequency @1491 + msourcecf_set_gain @1492 + msourcecf_write_samples @1493 + msresamp2_cccf_create @1494 + msresamp2_cccf_decim_execute @1495 + msresamp2_cccf_destroy @1496 + msresamp2_cccf_execute @1497 + msresamp2_cccf_get_delay @1498 + msresamp2_cccf_interp_execute @1499 + msresamp2_cccf_print @1500 + msresamp2_cccf_reset @1501 + msresamp2_crcf_create @1502 + msresamp2_crcf_decim_execute @1503 + msresamp2_crcf_destroy @1504 + msresamp2_crcf_execute @1505 + msresamp2_crcf_get_delay @1506 + msresamp2_crcf_interp_execute @1507 + msresamp2_crcf_print @1508 + msresamp2_crcf_reset @1509 + msresamp2_rrrf_create @1510 + msresamp2_rrrf_decim_execute @1511 + msresamp2_rrrf_destroy @1512 + msresamp2_rrrf_execute @1513 + msresamp2_rrrf_get_delay @1514 + msresamp2_rrrf_interp_execute @1515 + msresamp2_rrrf_print @1516 + msresamp2_rrrf_reset @1517 + msresamp_cccf_create @1518 + msresamp_cccf_decim_execute @1519 + msresamp_cccf_destroy @1520 + msresamp_cccf_execute @1521 + msresamp_cccf_get_delay @1522 + msresamp_cccf_interp_execute @1523 + msresamp_cccf_print @1524 + msresamp_cccf_reset @1525 + msresamp_crcf_create @1526 + msresamp_crcf_decim_execute @1527 + msresamp_crcf_destroy @1528 + msresamp_crcf_execute @1529 + msresamp_crcf_get_delay @1530 + msresamp_crcf_interp_execute @1531 + msresamp_crcf_print @1532 + msresamp_crcf_reset @1533 + msresamp_rrrf_create @1534 + msresamp_rrrf_decim_execute @1535 + msresamp_rrrf_destroy @1536 + msresamp_rrrf_execute @1537 + msresamp_rrrf_get_delay @1538 + msresamp_rrrf_interp_execute @1539 + msresamp_rrrf_print @1540 + msresamp_rrrf_reset @1541 + nco_crcf_adjust_frequency @1542 + nco_crcf_adjust_phase @1543 + nco_crcf_cexpf @1544 + nco_crcf_compute_sincos_nco @1545 + nco_crcf_compute_sincos_vco @1546 + nco_crcf_constrain_frequency @1547 + nco_crcf_constrain_phase @1548 + nco_crcf_cos @1549 + nco_crcf_create @1550 + nco_crcf_destroy @1551 + nco_crcf_get_frequency @1552 + nco_crcf_get_phase @1553 + nco_crcf_mix_block_down @1554 + nco_crcf_mix_block_up @1555 + nco_crcf_mix_down @1556 + nco_crcf_mix_up @1557 + nco_crcf_pll_reset @1558 + nco_crcf_pll_set_bandwidth @1559 + nco_crcf_pll_step @1560 + nco_crcf_reset @1561 + nco_crcf_set_frequency @1562 + nco_crcf_set_phase @1563 + nco_crcf_sin @1564 + nco_crcf_sincos @1565 + nco_crcf_step @1566 + ofdmflexframegen_assemble @1567 + ofdmflexframegen_create @1568 + ofdmflexframegen_destroy @1569 + ofdmflexframegen_encode_header @1570 + ofdmflexframegen_gen_S0a @1571 + ofdmflexframegen_gen_S0b @1572 + ofdmflexframegen_gen_S1 @1573 + ofdmflexframegen_gen_header @1574 + ofdmflexframegen_gen_payload @1575 + ofdmflexframegen_gen_symbol @1576 + ofdmflexframegen_gen_tail @1577 + ofdmflexframegen_gen_zeros @1578 + ofdmflexframegen_getframelen @1579 + ofdmflexframegen_getprops @1580 + ofdmflexframegen_is_assembled @1581 + ofdmflexframegen_modulate_header @1582 + ofdmflexframegen_print @1583 + ofdmflexframegen_reconfigure @1584 + ofdmflexframegen_reset @1585 + ofdmflexframegen_setprops @1586 + ofdmflexframegen_write @1587 + ofdmflexframegenprops_init_default @1588 + ofdmflexframesync_create @1589 + ofdmflexframesync_debug_disable @1590 + ofdmflexframesync_debug_enable @1591 + ofdmflexframesync_debug_print @1592 + ofdmflexframesync_decode_header @1593 + ofdmflexframesync_destroy @1594 + ofdmflexframesync_execute @1595 + ofdmflexframesync_get_cfo @1596 + ofdmflexframesync_get_rssi @1597 + ofdmflexframesync_internal_callback @1598 + ofdmflexframesync_print @1599 + ofdmflexframesync_reset @1600 + ofdmflexframesync_rxheader @1601 + ofdmflexframesync_rxpayload @1602 + ofdmframe_init_S0 @1603 + ofdmframe_init_S1 @1604 + ofdmframe_init_default_sctype @1605 + ofdmframe_init_sctype_range @1606 + ofdmframe_print_sctype @1607 + ofdmframe_validate_sctype @1608 + ofdmframegen_create @1609 + ofdmframegen_destroy @1610 + ofdmframegen_gensymbol @1611 + ofdmframegen_print @1612 + ofdmframegen_reset @1613 + ofdmframegen_write_S0a @1614 + ofdmframegen_write_S0b @1615 + ofdmframegen_write_S1 @1616 + ofdmframegen_writesymbol @1617 + ofdmframegen_writetail @1618 + ofdmframesync_S0_metrics @1619 + ofdmframesync_create @1620 + ofdmframesync_debug_disable @1621 + ofdmframesync_debug_enable @1622 + ofdmframesync_debug_print @1623 + ofdmframesync_destroy @1624 + ofdmframesync_estimate_eqgain @1625 + ofdmframesync_estimate_eqgain_poly @1626 + ofdmframesync_estimate_gain_S0 @1627 + ofdmframesync_estimate_gain_S1 @1628 + ofdmframesync_execute @1629 + ofdmframesync_execute_S0a @1630 + ofdmframesync_execute_S0b @1631 + ofdmframesync_execute_S1 @1632 + ofdmframesync_execute_rxsymbols @1633 + ofdmframesync_execute_seekplcp @1634 + ofdmframesync_get_cfo @1635 + ofdmframesync_get_rssi @1636 + ofdmframesync_print @1637 + ofdmframesync_reset @1638 + ofdmframesync_rxsymbol @1639 + optim_sort @1640 + optim_threshold_switch @1641 + packetizer_compute_dec_msg_len @1642 + packetizer_compute_enc_msg_len @1643 + packetizer_create @1644 + packetizer_decode @1645 + packetizer_decode_soft @1646 + packetizer_destroy @1647 + packetizer_encode @1648 + packetizer_get_crc @1649 + packetizer_get_dec_msg_len @1650 + packetizer_get_enc_msg_len @1651 + packetizer_get_fec0 @1652 + packetizer_get_fec1 @1653 + packetizer_print @1654 + packetizer_realloc_buffers @1655 + packetizer_recreate @1656 + packetizer_set_scheme @1657 + poly_expandbinomial @1658 + poly_expandbinomial_pm @1659 + poly_expandroots @1660 + poly_expandroots2 @1661 + poly_findroots @1662 + poly_findroots_bairstow @1663 + poly_findroots_bairstow_recursion @1664 + poly_findroots_durandkerner @1665 + poly_fit @1666 + poly_fit_lagrange @1667 + poly_fit_lagrange_barycentric @1668 + poly_interp_lagrange @1669 + poly_mul @1670 + poly_val @1671 + poly_val_lagrange_barycentric @1672 + polyc_expandbinomial @1673 + polyc_expandbinomial_pm @1674 + polyc_expandroots @1675 + polyc_expandroots2 @1676 + polyc_findroots @1677 + polyc_findroots_bairstow @1678 + polyc_findroots_bairstow_recursion @1679 + polyc_findroots_durandkerner @1680 + polyc_fit @1681 + polyc_fit_lagrange @1682 + polyc_fit_lagrange_barycentric @1683 + polyc_interp_lagrange @1684 + polyc_mul @1685 + polyc_val @1686 + polyc_val_lagrange_barycentric @1687 + polycf_expandbinomial @1688 + polycf_expandbinomial_pm @1689 + polycf_expandroots @1690 + polycf_expandroots2 @1691 + polycf_findroots @1692 + polycf_findroots_bairstow @1693 + polycf_findroots_bairstow_recursion @1694 + polycf_findroots_durandkerner @1695 + polycf_fit @1696 + polycf_fit_lagrange @1697 + polycf_fit_lagrange_barycentric @1698 + polycf_interp_lagrange @1699 + polycf_mul @1700 + polycf_val @1701 + polycf_val_lagrange_barycentric @1702 + polyf_expandbinomial @1703 + polyf_expandbinomial_pm @1704 + polyf_expandroots @1705 + polyf_expandroots2 @1706 + polyf_findroots @1707 + polyf_findroots_bairstow @1708 + polyf_findroots_bairstow_recursion @1709 + polyf_findroots_durandkerner @1710 + polyf_fit @1711 + polyf_fit_lagrange @1712 + polyf_fit_lagrange_barycentric @1713 + polyf_interp_lagrange @1714 + polyf_mul @1715 + polyf_val @1716 + polyf_val_lagrange_barycentric @1717 + presync_cccf_correlate @1718 + presync_cccf_correlatex @1719 + presync_cccf_create @1720 + presync_cccf_destroy @1721 + presync_cccf_print @1722 + presync_cccf_push @1723 + presync_cccf_reset @1724 + qdetector_cccf_create @1725 + qdetector_cccf_create_gmsk @1726 + qdetector_cccf_create_linear @1727 + qdetector_cccf_destroy @1728 + qdetector_cccf_execute @1729 + qdetector_cccf_execute_align @1730 + qdetector_cccf_execute_seek @1731 + qdetector_cccf_get_buf_len @1732 + qdetector_cccf_get_dphi @1733 + qdetector_cccf_get_gamma @1734 + qdetector_cccf_get_phi @1735 + qdetector_cccf_get_seq_len @1736 + qdetector_cccf_get_sequence @1737 + qdetector_cccf_get_tau @1738 + qdetector_cccf_print @1739 + qdetector_cccf_reset @1740 + qdetector_cccf_set_range @1741 + qdetector_cccf_set_threshold @1742 + qnsearch_compute_Hessian @1743 + qnsearch_compute_gradient @1744 + qnsearch_create @1745 + qnsearch_destroy @1746 + qnsearch_normalize_gradient @1747 + qnsearch_print @1748 + qnsearch_reset @1749 + qnsearch_run @1750 + qnsearch_step @1751 + qpacketmodem_configure @1752 + qpacketmodem_create @1753 + qpacketmodem_decode @1754 + qpacketmodem_decode_bits @1755 + qpacketmodem_decode_soft @1756 + qpacketmodem_decode_syms @1757 + qpacketmodem_destroy @1758 + qpacketmodem_encode @1759 + qpacketmodem_encode_syms @1760 + qpacketmodem_get_crc @1761 + qpacketmodem_get_fec0 @1762 + qpacketmodem_get_fec1 @1763 + qpacketmodem_get_frame_len @1764 + qpacketmodem_get_modscheme @1765 + qpacketmodem_get_payload_len @1766 + qpacketmodem_print @1767 + qpacketmodem_reset @1768 + qpilotgen_create @1769 + qpilotgen_destroy @1770 + qpilotgen_execute @1771 + qpilotgen_get_frame_len @1772 + qpilotgen_print @1773 + qpilotgen_recreate @1774 + qpilotgen_reset @1775 + qpilotsync_create @1776 + qpilotsync_destroy @1777 + qpilotsync_execute @1778 + qpilotsync_get_dphi @1779 + qpilotsync_get_frame_len @1780 + qpilotsync_get_gain @1781 + qpilotsync_get_phi @1782 + qpilotsync_print @1783 + qpilotsync_recreate @1784 + qpilotsync_reset @1785 + qsourcecf_create_modem @1786 + qsourcecf_create_noise @1787 + qsourcecf_create_tone @1788 + qsourcecf_destroy @1789 + qsourcecf_disable @1790 + qsourcecf_enable @1791 + qsourcecf_gen_sample @1792 + qsourcecf_print @1793 + qsourcecf_reset @1794 + qsourcecf_set_frequency @1795 + qsourcecf_set_gain @1796 + quantize_adc @1797 + quantize_dac @1798 + quantizercf_create @1799 + quantizercf_destroy @1800 + quantizercf_execute_adc @1801 + quantizercf_execute_dac @1802 + quantizercf_print @1803 + quantizerf_create @1804 + quantizerf_destroy @1805 + quantizerf_execute_adc @1806 + quantizerf_execute_dac @1807 + quantizerf_print @1808 + randexpf @1809 + randexpf_cdf @1810 + randexpf_pdf @1811 + randf @1812 + randf_cdf @1813 + randf_pdf @1814 + randgammaf @1815 + randgammaf_cdf @1816 + randgammaf_delta @1817 + randgammaf_pdf @1818 + randnakmf @1819 + randnakmf_cdf @1820 + randnakmf_pdf @1821 + randnf @1822 + randnf_cdf @1823 + randnf_pdf @1824 + randricekf @1825 + randricekf_cdf @1826 + randricekf_pdf @1827 + randweibf @1828 + randweibf_cdf @1829 + randweibf_pdf @1830 + resamp2_cccf_analyzer_execute @1831 + resamp2_cccf_create @1832 + resamp2_cccf_decim_execute @1833 + resamp2_cccf_destroy @1834 + resamp2_cccf_filter_execute @1835 + resamp2_cccf_get_delay @1836 + resamp2_cccf_interp_execute @1837 + resamp2_cccf_print @1838 + resamp2_cccf_recreate @1839 + resamp2_cccf_reset @1840 + resamp2_cccf_synthesizer_execute @1841 + resamp2_crcf_analyzer_execute @1842 + resamp2_crcf_create @1843 + resamp2_crcf_decim_execute @1844 + resamp2_crcf_destroy @1845 + resamp2_crcf_filter_execute @1846 + resamp2_crcf_get_delay @1847 + resamp2_crcf_interp_execute @1848 + resamp2_crcf_print @1849 + resamp2_crcf_recreate @1850 + resamp2_crcf_reset @1851 + resamp2_crcf_synthesizer_execute @1852 + resamp2_rrrf_analyzer_execute @1853 + resamp2_rrrf_create @1854 + resamp2_rrrf_decim_execute @1855 + resamp2_rrrf_destroy @1856 + resamp2_rrrf_filter_execute @1857 + resamp2_rrrf_get_delay @1858 + resamp2_rrrf_interp_execute @1859 + resamp2_rrrf_print @1860 + resamp2_rrrf_recreate @1861 + resamp2_rrrf_reset @1862 + resamp2_rrrf_synthesizer_execute @1863 + resamp_cccf_adjust_rate @1864 + resamp_cccf_create @1865 + resamp_cccf_create_default @1866 + resamp_cccf_destroy @1867 + resamp_cccf_execute @1868 + resamp_cccf_execute_block @1869 + resamp_cccf_get_delay @1870 + resamp_cccf_print @1871 + resamp_cccf_reset @1872 + resamp_cccf_set_rate @1873 + resamp_cccf_update_timing_state @1874 + resamp_crcf_adjust_rate @1875 + resamp_crcf_create @1876 + resamp_crcf_create_default @1877 + resamp_crcf_destroy @1878 + resamp_crcf_execute @1879 + resamp_crcf_execute_block @1880 + resamp_crcf_get_delay @1881 + resamp_crcf_print @1882 + resamp_crcf_reset @1883 + resamp_crcf_set_rate @1884 + resamp_crcf_update_timing_state @1885 + resamp_rrrf_adjust_rate @1886 + resamp_rrrf_create @1887 + resamp_rrrf_create_default @1888 + resamp_rrrf_destroy @1889 + resamp_rrrf_execute @1890 + resamp_rrrf_execute_block @1891 + resamp_rrrf_get_delay @1892 + resamp_rrrf_print @1893 + resamp_rrrf_reset @1894 + resamp_rrrf_set_rate @1895 + resamp_rrrf_update_timing_state @1896 + rkaiser_approximate_rho @1897 + scramble_data @1898 + secded2216_P @1899 DATA + secded2216_syndrome_w1 @1900 DATA + secded3932_P @1901 DATA + secded3932_syndrome_w1 @1902 DATA + secded7264_P @1903 DATA + secded7264_syndrome_w1 @1904 DATA + sincf @1905 + smatrix_indexsearch @1906 + smatrixb_clear @1907 + smatrixb_create @1908 + smatrixb_create_array @1909 + smatrixb_delete @1910 + smatrixb_destroy @1911 + smatrixb_eye @1912 + smatrixb_get @1913 + smatrixb_insert @1914 + smatrixb_isset @1915 + smatrixb_mul @1916 + smatrixb_mulf @1917 + smatrixb_print @1918 + smatrixb_print_expanded @1919 + smatrixb_reset @1920 + smatrixb_reset_max_mlist @1921 + smatrixb_reset_max_nlist @1922 + smatrixb_set @1923 + smatrixb_size @1924 + smatrixb_vmul @1925 + smatrixb_vmulf @1926 + smatrixf_clear @1927 + smatrixf_create @1928 + smatrixf_create_array @1929 + smatrixf_delete @1930 + smatrixf_destroy @1931 + smatrixf_eye @1932 + smatrixf_get @1933 + smatrixf_insert @1934 + smatrixf_isset @1935 + smatrixf_mul @1936 + smatrixf_print @1937 + smatrixf_print_expanded @1938 + smatrixf_reset @1939 + smatrixf_reset_max_mlist @1940 + smatrixf_reset_max_nlist @1941 + smatrixf_set @1942 + smatrixf_size @1943 + smatrixf_vmul @1944 + smatrixi_clear @1945 + smatrixi_create @1946 + smatrixi_create_array @1947 + smatrixi_delete @1948 + smatrixi_destroy @1949 + smatrixi_eye @1950 + smatrixi_get @1951 + smatrixi_insert @1952 + smatrixi_isset @1953 + smatrixi_mul @1954 + smatrixi_print @1955 + smatrixi_print_expanded @1956 + smatrixi_reset @1957 + smatrixi_reset_max_mlist @1958 + smatrixi_reset_max_nlist @1959 + smatrixi_set @1960 + smatrixi_size @1961 + smatrixi_vmul @1962 + spgramcf_create @1963 + spgramcf_create_default @1964 + spgramcf_destroy @1965 + spgramcf_estimate_psd @1966 + spgramcf_export_gnuplot @1967 + spgramcf_get_delay @1968 + spgramcf_get_nfft @1969 + spgramcf_get_num_samples @1970 + spgramcf_get_num_samples_total @1971 + spgramcf_get_num_transforms @1972 + spgramcf_get_num_transforms_total @1973 + spgramcf_get_psd @1974 + spgramcf_get_window_len @1975 + spgramcf_print @1976 + spgramcf_push @1977 + spgramcf_reset @1978 + spgramcf_set_alpha @1979 + spgramcf_step @1980 + spgramcf_write @1981 + spgramf_create @1982 + spgramf_create_default @1983 + spgramf_destroy @1984 + spgramf_estimate_psd @1985 + spgramf_export_gnuplot @1986 + spgramf_get_delay @1987 + spgramf_get_nfft @1988 + spgramf_get_num_samples @1989 + spgramf_get_num_samples_total @1990 + spgramf_get_num_transforms @1991 + spgramf_get_num_transforms_total @1992 + spgramf_get_psd @1993 + spgramf_get_window_len @1994 + spgramf_print @1995 + spgramf_push @1996 + spgramf_reset @1997 + spgramf_set_alpha @1998 + spgramf_step @1999 + spgramf_write @2000 + sumproduct_phi @2001 + symstreamcf_create @2002 + symstreamcf_create_linear @2003 + symstreamcf_destroy @2004 + symstreamcf_fill_buffer @2005 + symstreamcf_print @2006 + symstreamcf_reset @2007 + symstreamcf_write_samples @2008 + symsync_crcf_advance_internal_loop @2009 + symsync_crcf_create @2010 + symsync_crcf_create_kaiser @2011 + symsync_crcf_create_rnyquist @2012 + symsync_crcf_destroy @2013 + symsync_crcf_execute @2014 + symsync_crcf_get_tau @2015 + symsync_crcf_lock @2016 + symsync_crcf_output_debug_file @2017 + symsync_crcf_print @2018 + symsync_crcf_reset @2019 + symsync_crcf_set_lf_bw @2020 + symsync_crcf_set_output_rate @2021 + symsync_crcf_step @2022 + symsync_crcf_unlock @2023 + symsync_rrrf_advance_internal_loop @2024 + symsync_rrrf_create @2025 + symsync_rrrf_create_kaiser @2026 + symsync_rrrf_create_rnyquist @2027 + symsync_rrrf_destroy @2028 + symsync_rrrf_execute @2029 + symsync_rrrf_get_tau @2030 + symsync_rrrf_lock @2031 + symsync_rrrf_output_debug_file @2032 + symsync_rrrf_print @2033 + symsync_rrrf_reset @2034 + symsync_rrrf_set_lf_bw @2035 + symsync_rrrf_set_output_rate @2036 + symsync_rrrf_step @2037 + symsync_rrrf_unlock @2038 + symtrack_cccf_adjust_phase @2039 + symtrack_cccf_create @2040 + symtrack_cccf_create_default @2041 + symtrack_cccf_destroy @2042 + symtrack_cccf_execute @2043 + symtrack_cccf_execute_block @2044 + symtrack_cccf_print @2045 + symtrack_cccf_reset @2046 + symtrack_cccf_set_bandwidth @2047 + symtrack_cccf_set_modscheme @2048 + triangular @2049 + tvmpch_cccf_create @2050 + tvmpch_cccf_destroy @2051 + tvmpch_cccf_execute @2052 + tvmpch_cccf_execute_block @2053 + tvmpch_cccf_print @2054 + tvmpch_cccf_push @2055 + tvmpch_cccf_reset @2056 + unscramble_data @2057 + unscramble_data_soft @2058 + wdelaycf_create @2059 + wdelaycf_destroy @2060 + wdelaycf_print @2061 + wdelaycf_push @2062 + wdelaycf_read @2063 + wdelaycf_recreate @2064 + wdelaycf_reset @2065 + wdelayf_create @2066 + wdelayf_destroy @2067 + wdelayf_print @2068 + wdelayf_push @2069 + wdelayf_read @2070 + wdelayf_recreate @2071 + wdelayf_reset @2072 + windowcf_create @2073 + windowcf_debug_print @2074 + windowcf_destroy @2075 + windowcf_index @2076 + windowcf_print @2077 + windowcf_push @2078 + windowcf_read @2079 + windowcf_recreate @2080 + windowcf_reset @2081 + windowcf_write @2082 + windowf_create @2083 + windowf_debug_print @2084 + windowf_destroy @2085 + windowf_index @2086 + windowf_print @2087 + windowf_push @2088 + windowf_read @2089 + windowf_recreate @2090 + windowf_reset @2091 + windowf_write @2092 diff --git a/external/liquid-dsp/gcc/32/libliquid.dll b/external/liquid-dsp/gcc/32/libliquid.dll index 84dbf2d..108d0b4 100644 Binary files a/external/liquid-dsp/gcc/32/libliquid.dll and b/external/liquid-dsp/gcc/32/libliquid.dll differ diff --git a/external/liquid-dsp/gcc/64/libliquid.a b/external/liquid-dsp/gcc/64/libliquid.a index c030465..63fcc1c 100644 Binary files a/external/liquid-dsp/gcc/64/libliquid.a and b/external/liquid-dsp/gcc/64/libliquid.a differ diff --git a/external/liquid-dsp/gcc/64/libliquid.def b/external/liquid-dsp/gcc/64/libliquid.def index 6df6363..b3b8a0a 100644 --- a/external/liquid-dsp/gcc/64/libliquid.def +++ b/external/liquid-dsp/gcc/64/libliquid.def @@ -36,1836 +36,2058 @@ EXPORTS ampmodem_create @35 ampmodem_debug_print @36 ampmodem_demodulate @37 - ampmodem_destroy @38 - ampmodem_modulate @39 - ampmodem_print @40 - ampmodem_reset @41 - apsk128_map @42 DATA - apsk128_num_levels @43 DATA - apsk128_p @44 DATA - apsk128_phi @45 DATA - apsk128_r @46 DATA - apsk128_r_slicer @47 DATA - apsk16_map @48 DATA - apsk16_num_levels @49 DATA - apsk16_p @50 DATA - apsk16_phi @51 DATA - apsk16_r @52 DATA - apsk16_r_slicer @53 DATA - apsk256_map @54 DATA - apsk256_num_levels @55 DATA - apsk256_p @56 DATA - apsk256_phi @57 DATA - apsk256_r @58 DATA - apsk256_r_slicer @59 DATA - apsk32_map @60 DATA - apsk32_num_levels @61 DATA - apsk32_p @62 DATA - apsk32_phi @63 DATA - apsk32_r @64 DATA - apsk32_r_slicer @65 DATA - apsk4_map @66 DATA - apsk4_num_levels @67 DATA - apsk4_p @68 DATA - apsk4_phi @69 DATA - apsk4_r @70 DATA - apsk4_r_slicer @71 DATA - apsk64_map @72 DATA - apsk64_num_levels @73 DATA - apsk64_p @74 DATA - apsk64_phi @75 DATA - apsk64_r @76 DATA - apsk64_r_slicer @77 DATA - apsk8_map @78 DATA - apsk8_num_levels @79 DATA - apsk8_p @80 DATA - apsk8_phi @81 DATA - apsk8_r @82 DATA - apsk8_r_slicer @83 DATA - asgram_create @84 - asgram_destroy @85 - asgram_execute @86 - asgram_push @87 - asgram_reset @88 - asgram_set_scale @89 - autocorr_cccf_create @90 - autocorr_cccf_destroy @91 - autocorr_cccf_execute @92 - autocorr_cccf_execute_block @93 - autocorr_cccf_get_energy @94 - autocorr_cccf_print @95 - autocorr_cccf_push @96 - autocorr_cccf_reset @97 - autocorr_rrrf_create @98 - autocorr_rrrf_destroy @99 - autocorr_rrrf_execute @100 - autocorr_rrrf_execute_block @101 - autocorr_rrrf_get_energy @102 - autocorr_rrrf_print @103 - autocorr_rrrf_push @104 - autocorr_rrrf_reset @105 - awgn @106 - bessel_azpkf @107 - bilinear_zpkf @108 - blackmanharris @109 - bpacketgen_assemble_header @110 - bpacketgen_assemble_pnsequence @111 - bpacketgen_compute_packet_len @112 - bpacketgen_create @113 - bpacketgen_destroy @114 - bpacketgen_encode @115 - bpacketgen_get_packet_len @116 - bpacketgen_print @117 - bpacketgen_recreate @118 - bpacketsync_assemble_pnsequence @119 - bpacketsync_create @120 - bpacketsync_decode_header @121 - bpacketsync_decode_payload @122 - bpacketsync_destroy @123 - bpacketsync_execute @124 - bpacketsync_execute_bit @125 - bpacketsync_execute_byte @126 - bpacketsync_execute_rxheader @127 - bpacketsync_execute_rxpayload @128 - bpacketsync_execute_seekpn @129 - bpacketsync_execute_sym @130 - bpacketsync_print @131 - bpacketsync_reconfig @132 - bpacketsync_reset @133 - bpresync_cccf_correlate @134 - bpresync_cccf_correlatex @135 - bpresync_cccf_create @136 - bpresync_cccf_destroy @137 - bpresync_cccf_print @138 - bpresync_cccf_push @139 - bpresync_cccf_reset @140 - bsequence_accumulate @141 - bsequence_add @142 - bsequence_circshift @143 - bsequence_clear @144 - bsequence_correlate @145 - bsequence_create @146 - bsequence_create_ccodes @147 - bsequence_destroy @148 - bsequence_get_length @149 - bsequence_index @150 - bsequence_init @151 - bsequence_init_msequence @152 - bsequence_mul @153 - bsequence_print @154 - bsequence_push @155 - bsync_cccf_correlate @156 - bsync_cccf_create @157 - bsync_cccf_create_msequence @158 - bsync_cccf_destroy @159 - bsync_cccf_print @160 - bsync_crcf_correlate @161 - bsync_crcf_create @162 - bsync_crcf_create_msequence @163 - bsync_crcf_destroy @164 - bsync_crcf_print @165 - bsync_rrrf_correlate @166 - bsync_rrrf_create @167 - bsync_rrrf_create_msequence @168 - bsync_rrrf_destroy @169 - bsync_rrrf_print @170 - butter_azpkf @171 - cawgn @172 - cbuffercf_clear @173 - cbuffercf_create @174 - cbuffercf_create_max @175 - cbuffercf_debug_print @176 - cbuffercf_destroy @177 - cbuffercf_is_full @178 - cbuffercf_linearize @179 - cbuffercf_max_read @180 - cbuffercf_max_size @181 - cbuffercf_pop @182 - cbuffercf_print @183 - cbuffercf_push @184 - cbuffercf_read @185 - cbuffercf_release @186 - cbuffercf_size @187 - cbuffercf_space_available @188 - cbuffercf_write @189 - cbufferf_clear @190 - cbufferf_create @191 - cbufferf_create_max @192 - cbufferf_debug_print @193 - cbufferf_destroy @194 - cbufferf_is_full @195 - cbufferf_linearize @196 - cbufferf_max_read @197 - cbufferf_max_size @198 - cbufferf_pop @199 - cbufferf_print @200 - cbufferf_push @201 - cbufferf_read @202 - cbufferf_release @203 - cbufferf_size @204 - cbufferf_space_available @205 - cbufferf_write @206 - cheby1_azpkf @207 - cheby2_azpkf @208 - checksum_generate_key @209 - chromosome_clear @210 - chromosome_copy @211 - chromosome_create @212 - chromosome_create_basic @213 - chromosome_create_clone @214 - chromosome_crossover @215 - chromosome_destroy @216 - chromosome_get_num_traits @217 - chromosome_init @218 - chromosome_init_random @219 - chromosome_initf @220 - chromosome_mutate @221 - chromosome_print @222 - chromosome_printf @223 - chromosome_value @224 - chromosome_valuef @225 - compress_cf_mulaw @226 - compress_mulaw @227 - count_bit_errors @228 - count_bit_errors_array @229 - crandnf @230 - crc16_generate_key @231 - crc24_generate_key @232 - crc32_generate_key @233 - crc8_generate_key @234 - crc_generate_key @235 - crc_get_length @236 - crc_scheme_str @237 DATA - crc_validate_message @238 - cvsd_create @239 - cvsd_decode @240 - cvsd_decode8 @241 - cvsd_destroy @242 - cvsd_encode @243 - cvsd_encode8 @244 - cvsd_print @245 - detector_cccf_compute_dotprods @246 - detector_cccf_correlate @247 - detector_cccf_create @248 - detector_cccf_debug_print @249 - detector_cccf_destroy @250 - detector_cccf_estimate_offsets @251 - detector_cccf_print @252 - detector_cccf_reset @253 - detector_cccf_update_sumsq @254 - dotprod_cccf_create @255 - dotprod_cccf_destroy @256 - dotprod_cccf_execute @257 - dotprod_cccf_print @258 - dotprod_cccf_recreate @259 - dotprod_cccf_run @260 - dotprod_cccf_run4 @261 - dotprod_crcf_create @262 - dotprod_crcf_destroy @263 - dotprod_crcf_execute @264 - dotprod_crcf_print @265 - dotprod_crcf_recreate @266 - dotprod_crcf_run @267 - dotprod_crcf_run4 @268 - dotprod_rrrf_create @269 - dotprod_rrrf_destroy @270 - dotprod_rrrf_execute @271 - dotprod_rrrf_print @272 - dotprod_rrrf_recreate @273 - dotprod_rrrf_run @274 - dotprod_rrrf_run4 @275 - ellip_acdf @276 - ellip_asnf @277 - ellip_azpkf @278 - ellip_cdf @279 - ellip_snf @280 - ellipdegf @281 - ellipkf @282 - eqlms_cccf_create @283 - eqlms_cccf_create_rnyquist @284 - eqlms_cccf_destroy @285 - eqlms_cccf_execute @286 - eqlms_cccf_get_bw @287 - eqlms_cccf_get_weights @288 - eqlms_cccf_print @289 - eqlms_cccf_push @290 - eqlms_cccf_recreate @291 - eqlms_cccf_reset @292 - eqlms_cccf_set_bw @293 - eqlms_cccf_step @294 - eqlms_cccf_train @295 - eqlms_cccf_update_sumsq @296 - eqlms_rrrf_create @297 - eqlms_rrrf_create_rnyquist @298 - eqlms_rrrf_destroy @299 - eqlms_rrrf_execute @300 - eqlms_rrrf_get_bw @301 - eqlms_rrrf_get_weights @302 - eqlms_rrrf_print @303 - eqlms_rrrf_push @304 - eqlms_rrrf_recreate @305 - eqlms_rrrf_reset @306 - eqlms_rrrf_set_bw @307 - eqlms_rrrf_step @308 - eqlms_rrrf_train @309 - eqlms_rrrf_update_sumsq @310 - eqrls_cccf_create @311 - eqrls_cccf_destroy @312 - eqrls_cccf_execute @313 - eqrls_cccf_get_bw @314 - eqrls_cccf_get_weights @315 - eqrls_cccf_print @316 - eqrls_cccf_push @317 - eqrls_cccf_recreate @318 - eqrls_cccf_reset @319 - eqrls_cccf_set_bw @320 - eqrls_cccf_step @321 - eqrls_cccf_train @322 - eqrls_rrrf_create @323 - eqrls_rrrf_destroy @324 - eqrls_rrrf_execute @325 - eqrls_rrrf_get_bw @326 - eqrls_rrrf_get_weights @327 - eqrls_rrrf_print @328 - eqrls_rrrf_push @329 - eqrls_rrrf_recreate @330 - eqrls_rrrf_reset @331 - eqrls_rrrf_set_bw @332 - eqrls_rrrf_step @333 - eqrls_rrrf_train @334 - estimate_req_filter_As @335 - estimate_req_filter_df @336 - estimate_req_filter_len @337 - estimate_req_filter_len_Herrmann @338 - estimate_req_filter_len_Kaiser @339 - expand_cf_mulaw @340 - expand_mulaw @341 - fec_block_get_enc_msg_len @342 - fec_conv27_poly @343 DATA - fec_conv27p23_matrix @344 DATA - fec_conv27p34_matrix @345 DATA - fec_conv27p45_matrix @346 DATA - fec_conv27p56_matrix @347 DATA - fec_conv27p67_matrix @348 DATA - fec_conv27p78_matrix @349 DATA - fec_conv29_poly @350 DATA - fec_conv29p23_matrix @351 DATA - fec_conv29p34_matrix @352 DATA - fec_conv29p45_matrix @353 DATA - fec_conv29p56_matrix @354 DATA - fec_conv29p67_matrix @355 DATA - fec_conv29p78_matrix @356 DATA - fec_conv39_poly @357 DATA - fec_conv615_poly @358 DATA - fec_conv_create @359 - fec_conv_destroy @360 - fec_conv_get_enc_msg_len @361 - fec_conv_punctured_create @362 - fec_conv_punctured_decode @363 - fec_conv_punctured_destroy @364 - fec_conv_punctured_encode @365 - fec_create @366 - fec_decode @367 - fec_decode_soft @368 - fec_destroy @369 - fec_encode @370 - fec_get_enc_msg_length @371 - fec_get_rate @372 - fec_golay2412_create @373 - fec_golay2412_decode @374 - fec_golay2412_decode_symbol @375 - fec_golay2412_destroy @376 - fec_golay2412_encode @377 - fec_golay2412_encode_symbol @378 - fec_hamming128_create @379 - fec_hamming128_decode @380 - fec_hamming128_decode_soft @381 - fec_hamming128_decode_symbol @382 - fec_hamming128_destroy @383 - fec_hamming128_encode @384 - fec_hamming128_encode_symbol @385 - fec_hamming1511_decode_symbol @386 - fec_hamming1511_encode_symbol @387 - fec_hamming3126_decode_symbol @388 - fec_hamming3126_encode_symbol @389 - fec_hamming74_create @390 - fec_hamming74_decode @391 - fec_hamming74_decode_soft @392 - fec_hamming74_destroy @393 - fec_hamming74_encode @394 - fec_hamming84_create @395 - fec_hamming84_decode @396 - fec_hamming84_decode_soft @397 - fec_hamming84_destroy @398 - fec_hamming84_encode @399 - fec_pass_create @400 - fec_pass_decode @401 - fec_pass_destroy @402 - fec_pass_encode @403 - fec_pass_print @404 - fec_print @405 - fec_recreate @406 - fec_rep3_create @407 - fec_rep3_decode @408 - fec_rep3_decode_soft @409 - fec_rep3_destroy @410 - fec_rep3_encode @411 - fec_rep3_print @412 - fec_rep5_create @413 - fec_rep5_decode @414 - fec_rep5_decode_soft @415 - fec_rep5_destroy @416 - fec_rep5_encode @417 - fec_rep5_print @418 - fec_rs_create @419 - fec_rs_decode @420 - fec_rs_destroy @421 - fec_rs_encode @422 - fec_rs_get_enc_msg_len @423 - fec_scheme_is_convolutional @424 - fec_scheme_is_hamming @425 - fec_scheme_is_punctured @426 - fec_scheme_is_reedsolomon @427 - fec_scheme_is_repeat @428 - fec_scheme_str @429 DATA - fec_secded2216_compute_parity @430 - fec_secded2216_compute_syndrome @431 - fec_secded2216_create @432 - fec_secded2216_decode @433 - fec_secded2216_decode_symbol @434 - fec_secded2216_destroy @435 - fec_secded2216_encode @436 - fec_secded2216_encode_symbol @437 - fec_secded2216_estimate_ehat @438 - fec_secded3932_compute_parity @439 - fec_secded3932_compute_syndrome @440 - fec_secded3932_create @441 - fec_secded3932_decode @442 - fec_secded3932_decode_symbol @443 - fec_secded3932_destroy @444 - fec_secded3932_encode @445 - fec_secded3932_encode_symbol @446 - fec_secded3932_estimate_ehat @447 - fec_secded7264_compute_parity @448 - fec_secded7264_compute_syndrome @449 - fec_secded7264_create @450 - fec_secded7264_decode @451 - fec_secded7264_decode_symbol @452 - fec_secded7264_destroy @453 - fec_secded7264_encode @454 - fec_secded7264_encode_symbol @455 - fec_secded7264_estimate_ehat @456 - fec_sumproduct @457 - fec_sumproduct_step @458 - fecsoft_hamming128_decode @459 - fecsoft_hamming128_decode_n3 @460 - fecsoft_hamming128_n3 @461 DATA - fecsoft_hamming74_decode @462 - fecsoft_hamming84_decode @463 - fft_create_plan @464 - fft_create_plan_dft @465 - fft_create_plan_mixed_radix @466 - fft_create_plan_r2r_1d @467 - fft_create_plan_rader @468 - fft_create_plan_rader2 @469 - fft_create_plan_radix2 @470 - fft_destroy_plan @471 - fft_destroy_plan_dft @472 - fft_destroy_plan_mixed_radix @473 - fft_destroy_plan_r2r_1d @474 - fft_destroy_plan_rader @475 - fft_destroy_plan_rader2 @476 - fft_destroy_plan_radix2 @477 - fft_estimate_mixed_radix @478 - fft_execute @479 - fft_execute_REDFT00 @480 - fft_execute_REDFT01 @481 - fft_execute_REDFT10 @482 - fft_execute_REDFT11 @483 - fft_execute_RODFT00 @484 - fft_execute_RODFT01 @485 - fft_execute_RODFT10 @486 - fft_execute_RODFT11 @487 - fft_execute_dft @488 - fft_execute_dft_16 @489 - fft_execute_dft_2 @490 - fft_execute_dft_3 @491 - fft_execute_dft_4 @492 - fft_execute_dft_5 @493 - fft_execute_dft_6 @494 - fft_execute_dft_7 @495 - fft_execute_dft_8 @496 - fft_execute_mixed_radix @497 - fft_execute_rader @498 - fft_execute_rader2 @499 - fft_execute_radix2 @500 - fft_is_radix2 @501 - fft_print_plan @502 - fft_print_plan_r2r_1d @503 - fft_print_plan_recursive @504 - fft_r2r_1d_run @505 - fft_reverse_index @506 - fft_run @507 - fft_shift @508 - fftfilt_cccf_create @509 - fftfilt_cccf_destroy @510 - fftfilt_cccf_execute @511 - fftfilt_cccf_get_length @512 - fftfilt_cccf_print @513 - fftfilt_cccf_reset @514 - fftfilt_cccf_set_scale @515 - fftfilt_crcf_create @516 - fftfilt_crcf_destroy @517 - fftfilt_crcf_execute @518 - fftfilt_crcf_get_length @519 - fftfilt_crcf_print @520 - fftfilt_crcf_reset @521 - fftfilt_crcf_set_scale @522 - fftfilt_rrrf_create @523 - fftfilt_rrrf_destroy @524 - fftfilt_rrrf_execute @525 - fftfilt_rrrf_get_length @526 - fftfilt_rrrf_print @527 - fftfilt_rrrf_reset @528 - fftfilt_rrrf_set_scale @529 - fir_group_delay @530 - firdecim_cccf_clear @531 - firdecim_cccf_create @532 - firdecim_cccf_create_prototype @533 - firdecim_cccf_create_rnyquist @534 - firdecim_cccf_destroy @535 - firdecim_cccf_execute @536 - firdecim_cccf_execute_block @537 - firdecim_cccf_print @538 - firdecim_crcf_clear @539 - firdecim_crcf_create @540 - firdecim_crcf_create_prototype @541 - firdecim_crcf_create_rnyquist @542 - firdecim_crcf_destroy @543 - firdecim_crcf_execute @544 - firdecim_crcf_execute_block @545 - firdecim_crcf_print @546 - firdecim_rrrf_clear @547 - firdecim_rrrf_create @548 - firdecim_rrrf_create_prototype @549 - firdecim_rrrf_create_rnyquist @550 - firdecim_rrrf_destroy @551 - firdecim_rrrf_execute @552 - firdecim_rrrf_execute_block @553 - firdecim_rrrf_print @554 - firdespm_compute_error @555 - firdespm_compute_interp @556 - firdespm_compute_taps @557 - firdespm_create @558 - firdespm_destroy @559 - firdespm_execute @560 - firdespm_iext_search @561 - firdespm_init_grid @562 - firdespm_is_search_complete @563 - firdespm_print @564 - firdespm_run @565 - firfarrow_crcf_create @566 - firfarrow_crcf_destroy @567 - firfarrow_crcf_execute @568 - firfarrow_crcf_execute_block @569 - firfarrow_crcf_freqresponse @570 - firfarrow_crcf_genpoly @571 - firfarrow_crcf_get_coefficients @572 - firfarrow_crcf_get_length @573 - firfarrow_crcf_groupdelay @574 - firfarrow_crcf_print @575 - firfarrow_crcf_push @576 - firfarrow_crcf_reset @577 - firfarrow_crcf_set_delay @578 - firfarrow_rrrf_create @579 - firfarrow_rrrf_destroy @580 - firfarrow_rrrf_execute @581 - firfarrow_rrrf_execute_block @582 - firfarrow_rrrf_freqresponse @583 - firfarrow_rrrf_genpoly @584 - firfarrow_rrrf_get_coefficients @585 - firfarrow_rrrf_get_length @586 - firfarrow_rrrf_groupdelay @587 - firfarrow_rrrf_print @588 - firfarrow_rrrf_push @589 - firfarrow_rrrf_reset @590 - firfarrow_rrrf_set_delay @591 - firfilt_cccf_create @592 - firfilt_cccf_create_kaiser @593 - firfilt_cccf_create_rnyquist @594 - firfilt_cccf_destroy @595 - firfilt_cccf_execute @596 - firfilt_cccf_execute_block @597 - firfilt_cccf_freqresponse @598 - firfilt_cccf_get_length @599 - firfilt_cccf_groupdelay @600 - firfilt_cccf_print @601 - firfilt_cccf_push @602 - firfilt_cccf_recreate @603 - firfilt_cccf_reset @604 - firfilt_cccf_set_scale @605 - firfilt_crcf_create @606 - firfilt_crcf_create_kaiser @607 - firfilt_crcf_create_rnyquist @608 - firfilt_crcf_destroy @609 - firfilt_crcf_execute @610 - firfilt_crcf_execute_block @611 - firfilt_crcf_freqresponse @612 - firfilt_crcf_get_length @613 - firfilt_crcf_groupdelay @614 - firfilt_crcf_print @615 - firfilt_crcf_push @616 - firfilt_crcf_recreate @617 - firfilt_crcf_reset @618 - firfilt_crcf_set_scale @619 - firfilt_rrrf_create @620 - firfilt_rrrf_create_kaiser @621 - firfilt_rrrf_create_rnyquist @622 - firfilt_rrrf_destroy @623 - firfilt_rrrf_execute @624 - firfilt_rrrf_execute_block @625 - firfilt_rrrf_freqresponse @626 - firfilt_rrrf_get_length @627 - firfilt_rrrf_groupdelay @628 - firfilt_rrrf_print @629 - firfilt_rrrf_push @630 - firfilt_rrrf_recreate @631 - firfilt_rrrf_reset @632 - firfilt_rrrf_set_scale @633 - firhilbf_c2r_execute @634 - firhilbf_create @635 - firhilbf_decim_execute @636 - firhilbf_destroy @637 - firhilbf_interp_execute @638 - firhilbf_print @639 - firhilbf_r2c_execute @640 - firhilbf_reset @641 - firinterp_cccf_create @642 - firinterp_cccf_create_nyquist @643 - firinterp_cccf_create_prototype @644 - firinterp_cccf_create_rnyquist @645 - firinterp_cccf_destroy @646 - firinterp_cccf_execute @647 - firinterp_cccf_execute_block @648 - firinterp_cccf_print @649 - firinterp_cccf_reset @650 - firinterp_crcf_create @651 - firinterp_crcf_create_nyquist @652 - firinterp_crcf_create_prototype @653 - firinterp_crcf_create_rnyquist @654 - firinterp_crcf_destroy @655 - firinterp_crcf_execute @656 - firinterp_crcf_execute_block @657 - firinterp_crcf_print @658 - firinterp_crcf_reset @659 - firinterp_rrrf_create @660 - firinterp_rrrf_create_nyquist @661 - firinterp_rrrf_create_prototype @662 - firinterp_rrrf_create_rnyquist @663 - firinterp_rrrf_destroy @664 - firinterp_rrrf_execute @665 - firinterp_rrrf_execute_block @666 - firinterp_rrrf_print @667 - firinterp_rrrf_reset @668 - firpfb_cccf_create @669 - firpfb_cccf_create_drnyquist @670 - firpfb_cccf_create_rnyquist @671 - firpfb_cccf_destroy @672 - firpfb_cccf_execute @673 - firpfb_cccf_print @674 - firpfb_cccf_push @675 - firpfb_cccf_recreate @676 - firpfb_cccf_reset @677 - firpfb_crcf_create @678 - firpfb_crcf_create_drnyquist @679 - firpfb_crcf_create_rnyquist @680 - firpfb_crcf_destroy @681 - firpfb_crcf_execute @682 - firpfb_crcf_print @683 - firpfb_crcf_push @684 - firpfb_crcf_recreate @685 - firpfb_crcf_reset @686 - firpfb_rrrf_create @687 - firpfb_rrrf_create_drnyquist @688 - firpfb_rrrf_create_rnyquist @689 - firpfb_rrrf_destroy @690 - firpfb_rrrf_execute @691 - firpfb_rrrf_print @692 - firpfb_rrrf_push @693 - firpfb_rrrf_recreate @694 - firpfb_rrrf_reset @695 - firpfbch2_crcf_create @696 - firpfbch2_crcf_create_kaiser @697 - firpfbch2_crcf_destroy @698 - firpfbch2_crcf_execute @699 - firpfbch2_crcf_execute_analyzer @700 - firpfbch2_crcf_execute_synthesizer @701 - firpfbch2_crcf_print @702 - firpfbch2_crcf_reset @703 - firpfbch_cccf_analyzer_execute @704 - firpfbch_cccf_analyzer_push @705 - firpfbch_cccf_analyzer_run @706 - firpfbch_cccf_create @707 - firpfbch_cccf_create_kaiser @708 - firpfbch_cccf_create_rnyquist @709 - firpfbch_cccf_destroy @710 - firpfbch_cccf_print @711 - firpfbch_cccf_reset @712 - firpfbch_cccf_synthesizer_execute @713 - firpfbch_crcf_analyzer_execute @714 - firpfbch_crcf_analyzer_push @715 - firpfbch_crcf_analyzer_run @716 - firpfbch_crcf_create @717 - firpfbch_crcf_create_kaiser @718 - firpfbch_crcf_create_rnyquist @719 - firpfbch_crcf_destroy @720 - firpfbch_crcf_print @721 - firpfbch_crcf_reset @722 - firpfbch_crcf_synthesizer_execute @723 - flexframegen_assemble @724 - flexframegen_create @725 - flexframegen_destroy @726 - flexframegen_encode_header @727 - flexframegen_getframelen @728 - flexframegen_getprops @729 - flexframegen_is_assembled @730 - flexframegen_modulate_header @731 - flexframegen_modulate_payload @732 - flexframegen_print @733 - flexframegen_reconfigure @734 - flexframegen_reset @735 - flexframegen_setprops @736 - flexframegen_write_header @737 - flexframegen_write_payload @738 - flexframegen_write_preamble @739 - flexframegen_write_samples @740 - flexframegen_write_tail @741 - flexframegenprops_init_default @742 - flexframesync_create @743 - flexframesync_debug_disable @744 - flexframesync_debug_enable @745 - flexframesync_debug_print @746 - flexframesync_decode_header @747 - flexframesync_decode_payload @748 - flexframesync_destroy @749 - flexframesync_execute @750 - flexframesync_execute_rxheader @751 - flexframesync_execute_rxpayload @752 - flexframesync_execute_rxpn @753 - flexframesync_execute_seekpn @754 - flexframesync_print @755 - flexframesync_pushpn @756 - flexframesync_reset @757 - flexframesync_syncpn @758 - flexframesync_update_symsync @759 - fpoly_bessel @760 - fpoly_bessel_roots @761 - fpoly_bessel_roots_orchard @762 - fpoly_bessel_roots_orchard_recursion @763 - framegen64_byte_to_syms @764 - framegen64_create @765 - framegen64_destroy @766 - framegen64_execute @767 - framegen64_print @768 - framesync64_create @769 - framesync64_debug_disable @770 - framesync64_debug_enable @771 - framesync64_debug_print @772 - framesync64_decode_payload @773 - framesync64_destroy @774 - framesync64_execute @775 - framesync64_execute_rxpayload @776 - framesync64_execute_rxpreamble @777 - framesync64_execute_seekpn @778 - framesync64_print @779 - framesync64_pushpn @780 - framesync64_reset @781 - framesync64_syncpn @782 - framesync64_update_symsync @783 - framesyncstats_default @784 DATA - framesyncstats_init_default @785 - framesyncstats_print @786 - freqdem_create @787 - freqdem_demodulate @788 - freqdem_demodulate_block @789 - freqdem_destroy @790 - freqdem_print @791 - freqdem_reset @792 - freqmod_create @793 - freqmod_destroy @794 - freqmod_modulate @795 - freqmod_modulate_block @796 - freqmod_print @797 - freqmod_reset @798 - gasearch_create @799 - gasearch_create_advanced @800 - gasearch_crossover @801 - gasearch_destroy @802 - gasearch_evaluate @803 - gasearch_evolve @804 - gasearch_getopt @805 - gasearch_mutate @806 - gasearch_print @807 - gasearch_rank @808 - gasearch_run @809 - gasearch_set_mutation_rate @810 - gasearch_set_population_size @811 - gmskdem_create @812 - gmskdem_debug_print @813 - gmskdem_demodulate @814 - gmskdem_destroy @815 - gmskdem_print @816 - gmskdem_reset @817 - gmskdem_set_eq_bw @818 - gmskframegen_assemble @819 - gmskframegen_create @820 - gmskframegen_destroy @821 - gmskframegen_encode_header @822 - gmskframegen_getframelen @823 - gmskframegen_print @824 - gmskframegen_reset @825 - gmskframegen_write_header @826 - gmskframegen_write_payload @827 - gmskframegen_write_preamble @828 - gmskframegen_write_samples @829 - gmskframegen_write_tail @830 - gmskframesync_create @831 - gmskframesync_debug_disable @832 - gmskframesync_debug_enable @833 - gmskframesync_debug_print @834 - gmskframesync_decode_header @835 - gmskframesync_destroy @836 - gmskframesync_execute @837 - gmskframesync_execute_detectframe @838 - gmskframesync_execute_rxheader @839 - gmskframesync_execute_rxpayload @840 - gmskframesync_execute_rxpreamble @841 - gmskframesync_print @842 - gmskframesync_pushpn @843 - gmskframesync_reset @844 - gmskframesync_syncpn @845 - gmskframesync_update_fi @846 - gmskframesync_update_symsync @847 - gmskmod_create @848 - gmskmod_destroy @849 - gmskmod_modulate @850 - gmskmod_print @851 - gmskmod_reset @852 - golay2412_Gt @853 DATA - golay2412_H @854 DATA - golay2412_P @855 DATA - golay2412_matrix_mul @856 - golay2412_parity_search @857 - gradsearch_create @858 - gradsearch_destroy @859 - gradsearch_execute @860 - gradsearch_gradient @861 - gradsearch_linesearch @862 - gradsearch_norm @863 - gradsearch_print @864 - gradsearch_step @865 - gray_decode @866 - gray_encode @867 - hamming @868 - hamming128_enc_gentab @869 DATA - hamming74_dec_gentab @870 DATA - hamming74_enc_gentab @871 DATA - hamming84_dec_gentab @872 DATA - hamming84_enc_gentab @873 DATA - hann @874 - icrandnf @875 - iir_group_delay @876 - iirdecim_cccf_create @877 - iirdecim_cccf_create_prototype @878 - iirdecim_cccf_destroy @879 - iirdecim_cccf_execute @880 - iirdecim_cccf_execute_block @881 - iirdecim_cccf_groupdelay @882 - iirdecim_cccf_print @883 - iirdecim_cccf_reset @884 - iirdecim_crcf_create @885 - iirdecim_crcf_create_prototype @886 - iirdecim_crcf_destroy @887 - iirdecim_crcf_execute @888 - iirdecim_crcf_execute_block @889 - iirdecim_crcf_groupdelay @890 - iirdecim_crcf_print @891 - iirdecim_crcf_reset @892 - iirdecim_rrrf_create @893 - iirdecim_rrrf_create_prototype @894 - iirdecim_rrrf_destroy @895 - iirdecim_rrrf_execute @896 - iirdecim_rrrf_execute_block @897 - iirdecim_rrrf_groupdelay @898 - iirdecim_rrrf_print @899 - iirdecim_rrrf_reset @900 - iirdes_dzpk2sosf @901 - iirdes_dzpk2tff @902 - iirdes_dzpk_lp2bp @903 - iirdes_dzpk_lp2hp @904 - iirdes_freqprewarp @905 - iirdes_isstable @906 - iirdes_pll_active_PI @907 - iirdes_pll_active_lag @908 - iirfilt_cccf_create @909 - iirfilt_cccf_create_dc_blocker @910 - iirfilt_cccf_create_differentiator @911 - iirfilt_cccf_create_integrator @912 - iirfilt_cccf_create_pll @913 - iirfilt_cccf_create_prototype @914 - iirfilt_cccf_create_sos @915 - iirfilt_cccf_destroy @916 - iirfilt_cccf_execute @917 - iirfilt_cccf_execute_block @918 - iirfilt_cccf_execute_norm @919 - iirfilt_cccf_execute_sos @920 - iirfilt_cccf_freqresponse @921 - iirfilt_cccf_get_length @922 - iirfilt_cccf_groupdelay @923 - iirfilt_cccf_print @924 - iirfilt_cccf_reset @925 - iirfilt_crcf_create @926 - iirfilt_crcf_create_dc_blocker @927 - iirfilt_crcf_create_differentiator @928 - iirfilt_crcf_create_integrator @929 - iirfilt_crcf_create_pll @930 - iirfilt_crcf_create_prototype @931 - iirfilt_crcf_create_sos @932 - iirfilt_crcf_destroy @933 - iirfilt_crcf_execute @934 - iirfilt_crcf_execute_block @935 - iirfilt_crcf_execute_norm @936 - iirfilt_crcf_execute_sos @937 - iirfilt_crcf_freqresponse @938 - iirfilt_crcf_get_length @939 - iirfilt_crcf_groupdelay @940 - iirfilt_crcf_print @941 - iirfilt_crcf_reset @942 - iirfilt_rrrf_create @943 - iirfilt_rrrf_create_dc_blocker @944 - iirfilt_rrrf_create_differentiator @945 - iirfilt_rrrf_create_integrator @946 - iirfilt_rrrf_create_pll @947 - iirfilt_rrrf_create_prototype @948 - iirfilt_rrrf_create_sos @949 - iirfilt_rrrf_destroy @950 - iirfilt_rrrf_execute @951 - iirfilt_rrrf_execute_block @952 - iirfilt_rrrf_execute_norm @953 - iirfilt_rrrf_execute_sos @954 - iirfilt_rrrf_freqresponse @955 - iirfilt_rrrf_get_length @956 - iirfilt_rrrf_groupdelay @957 - iirfilt_rrrf_print @958 - iirfilt_rrrf_reset @959 - iirfiltsos_cccf_create @960 - iirfiltsos_cccf_destroy @961 - iirfiltsos_cccf_execute @962 - iirfiltsos_cccf_execute_df1 @963 - iirfiltsos_cccf_execute_df2 @964 - iirfiltsos_cccf_groupdelay @965 - iirfiltsos_cccf_print @966 - iirfiltsos_cccf_reset @967 - iirfiltsos_cccf_set_coefficients @968 - iirfiltsos_crcf_create @969 - iirfiltsos_crcf_destroy @970 - iirfiltsos_crcf_execute @971 - iirfiltsos_crcf_execute_df1 @972 - iirfiltsos_crcf_execute_df2 @973 - iirfiltsos_crcf_groupdelay @974 - iirfiltsos_crcf_print @975 - iirfiltsos_crcf_reset @976 - iirfiltsos_crcf_set_coefficients @977 - iirfiltsos_rrrf_create @978 - iirfiltsos_rrrf_destroy @979 - iirfiltsos_rrrf_execute @980 - iirfiltsos_rrrf_execute_df1 @981 - iirfiltsos_rrrf_execute_df2 @982 - iirfiltsos_rrrf_groupdelay @983 - iirfiltsos_rrrf_print @984 - iirfiltsos_rrrf_reset @985 - iirfiltsos_rrrf_set_coefficients @986 - iirinterp_cccf_create @987 - iirinterp_cccf_create_prototype @988 - iirinterp_cccf_destroy @989 - iirinterp_cccf_execute @990 - iirinterp_cccf_execute_block @991 - iirinterp_cccf_groupdelay @992 - iirinterp_cccf_print @993 - iirinterp_cccf_reset @994 - iirinterp_crcf_create @995 - iirinterp_crcf_create_prototype @996 - iirinterp_crcf_destroy @997 - iirinterp_crcf_execute @998 - iirinterp_crcf_execute_block @999 - iirinterp_crcf_groupdelay @1000 - iirinterp_crcf_print @1001 - iirinterp_crcf_reset @1002 - iirinterp_rrrf_create @1003 - iirinterp_rrrf_create_prototype @1004 - iirinterp_rrrf_destroy @1005 - iirinterp_rrrf_execute @1006 - iirinterp_rrrf_execute_block @1007 - iirinterp_rrrf_groupdelay @1008 - iirinterp_rrrf_print @1009 - iirinterp_rrrf_reset @1010 - interleaver_create @1011 - interleaver_decode @1012 - interleaver_decode_soft @1013 - interleaver_destroy @1014 - interleaver_encode @1015 - interleaver_encode_soft @1016 - interleaver_permute @1017 - interleaver_permute_mask @1018 - interleaver_permute_mask_soft @1019 - interleaver_permute_soft @1020 - interleaver_print @1021 - interleaver_set_depth @1022 - kaiser @1023 - kaiser_beta_As @1024 - landenf @1025 - liquid_MarcumQ1f @1026 - liquid_MarcumQf @1027 - liquid_Qf @1028 - liquid_apsk128 @1029 DATA - liquid_apsk16 @1030 DATA - liquid_apsk256 @1031 DATA - liquid_apsk32 @1032 DATA - liquid_apsk4 @1033 DATA - liquid_apsk64 @1034 DATA - liquid_apsk8 @1035 DATA - liquid_asechf @1036 - liquid_bdotprod @1037 - liquid_besseli0f @1038 - liquid_besselif @1039 - liquid_besselj0f @1040 - liquid_besseljf @1041 - liquid_c_leading_zeros @1042 DATA - liquid_c_ones @1043 DATA - liquid_c_ones_mod2 @1044 DATA - liquid_cacosf @1045 - liquid_cargf_approx @1046 - liquid_casinf @1047 - liquid_catanf @1048 - liquid_cexpf @1049 - liquid_clogf @1050 - liquid_cosf @1051 - liquid_count_leading_zeros @1052 - liquid_count_ones @1053 - liquid_count_ones_mod2 @1054 - liquid_cplxpair @1055 - liquid_cplxpair_cleanup @1056 - liquid_csqrtf @1057 - liquid_expf @1058 - liquid_factor @1059 - liquid_factorialf @1060 - liquid_fft_estimate_method @1061 - liquid_filter_autocorr @1062 - liquid_filter_crosscorr @1063 - liquid_filter_energy @1064 - liquid_filter_isi @1065 - liquid_firdes_arkaiser @1066 - liquid_firdes_doppler @1067 - liquid_firdes_farcsech @1068 - liquid_firdes_farcsech_freqresponse @1069 - liquid_firdes_fexp @1070 - liquid_firdes_fexp_freqresponse @1071 - liquid_firdes_fnyquist @1072 - liquid_firdes_fsech @1073 - liquid_firdes_fsech_freqresponse @1074 - liquid_firdes_gmskrx @1075 - liquid_firdes_gmsktx @1076 - liquid_firdes_hM3 @1077 - liquid_firdes_kaiser @1078 - liquid_firdes_nyquist @1079 - liquid_firdes_rcos @1080 - liquid_firdes_rfarcsech @1081 - liquid_firdes_rfexp @1082 - liquid_firdes_rfsech @1083 - liquid_firdes_rkaiser @1084 - liquid_firdes_rkaiser_bisection @1085 - liquid_firdes_rkaiser_internal_isi @1086 - liquid_firdes_rkaiser_quadratic @1087 - liquid_firdes_rnyquist @1088 - liquid_firdes_rrcos @1089 - liquid_gammaf @1090 - liquid_getopt_str2crc @1091 - liquid_getopt_str2fec @1092 - liquid_getopt_str2firfilt @1093 - liquid_getopt_str2mod @1094 - liquid_iirdes @1095 - liquid_invgauss @1096 - liquid_is_prime @1097 - liquid_kbd @1098 - liquid_kbd_window @1099 - liquid_lbcircshift @1100 - liquid_lbshift @1101 - liquid_lcircshift @1102 - liquid_levinson @1103 - liquid_libversion @1104 - liquid_libversion_number @1105 - liquid_lnbesselif @1106 - liquid_lngammaf @1107 - liquid_lnlowergammaf @1108 - liquid_lnuppergammaf @1109 - liquid_logf @1110 - liquid_lowergammaf @1111 - liquid_lpc @1112 - liquid_lshift @1113 - liquid_modem_is_apsk @1114 - liquid_modem_is_ask @1115 - liquid_modem_is_dpsk @1116 - liquid_modem_is_psk @1117 - liquid_modem_is_qam @1118 - liquid_modpow @1119 - liquid_msb_index @1120 - liquid_multimodal @1121 - liquid_nchoosek @1122 - liquid_nextpow2 @1123 - liquid_pack_array @1124 - liquid_pack_bytes @1125 - liquid_pack_soft_bits @1126 - liquid_primitive_root @1127 - liquid_primitive_root_prime @1128 - liquid_print_bitstring @1129 - liquid_print_crc_schemes @1130 - liquid_print_fec_schemes @1131 - liquid_print_modulation_schemes @1132 - liquid_rbcircshift @1133 - liquid_rbshift @1134 - liquid_rcircshift @1135 - liquid_repack_bytes @1136 - liquid_reverse_byte @1137 - liquid_reverse_byte_gentab @1138 DATA - liquid_reverse_uint16 @1139 - liquid_reverse_uint24 @1140 - liquid_reverse_uint32 @1141 - liquid_rosenbrock @1142 - liquid_rshift @1143 - liquid_sincosf @1144 - liquid_sinf @1145 - liquid_spiral @1146 - liquid_sumsqcf @1147 - liquid_sumsqf @1148 - liquid_tanf @1149 - liquid_totient @1150 - liquid_unique_factor @1151 - liquid_unpack_array @1152 - liquid_unpack_bytes @1153 - liquid_unpack_soft_bits @1154 - liquid_unwrap_phase @1155 - liquid_unwrap_phase2 @1156 - liquid_uppergammaf @1157 - liquid_vectorcf_abs @1158 - liquid_vectorcf_add @1159 - liquid_vectorcf_addscalar @1160 - liquid_vectorcf_carg @1161 - liquid_vectorcf_cexpj @1162 - liquid_vectorcf_mul @1163 - liquid_vectorcf_mulscalar @1164 - liquid_vectorcf_norm @1165 - liquid_vectorcf_normalize @1166 - liquid_vectorf_abs @1167 - liquid_vectorf_add @1168 - liquid_vectorf_addscalar @1169 - liquid_vectorf_carg @1170 - liquid_vectorf_cexpj @1171 - liquid_vectorf_mul @1172 - liquid_vectorf_mulscalar @1173 - liquid_vectorf_norm @1174 - liquid_vectorf_normalize @1175 - liquid_version @1176 DATA - matrix_add @1177 - matrix_aug @1178 - matrix_cgsolve @1179 - matrix_chol @1180 - matrix_det @1181 - matrix_det2x2 @1182 - matrix_div @1183 - matrix_eye @1184 - matrix_gjelim @1185 - matrix_gramschmidt @1186 - matrix_hermitian @1187 - matrix_hermitian_mul @1188 - matrix_inv @1189 - matrix_linsolve @1190 - matrix_ludecomp_crout @1191 - matrix_ludecomp_doolittle @1192 - matrix_mul @1193 - matrix_mul_hermitian @1194 - matrix_mul_transpose @1195 - matrix_ones @1196 - matrix_pdiv @1197 - matrix_pivot @1198 - matrix_pmul @1199 - matrix_print @1200 - matrix_proj @1201 - matrix_qrdecomp_gramschmidt @1202 - matrix_sub @1203 - matrix_swaprows @1204 - matrix_trans @1205 - matrix_transpose_mul @1206 - matrix_zeros @1207 - matrixc_add @1208 - matrixc_aug @1209 - matrixc_cgsolve @1210 - matrixc_chol @1211 - matrixc_det @1212 - matrixc_det2x2 @1213 - matrixc_div @1214 - matrixc_eye @1215 - matrixc_gjelim @1216 - matrixc_gramschmidt @1217 - matrixc_hermitian @1218 - matrixc_hermitian_mul @1219 - matrixc_inv @1220 - matrixc_linsolve @1221 - matrixc_ludecomp_crout @1222 - matrixc_ludecomp_doolittle @1223 - matrixc_mul @1224 - matrixc_mul_hermitian @1225 - matrixc_mul_transpose @1226 - matrixc_ones @1227 - matrixc_pdiv @1228 - matrixc_pivot @1229 - matrixc_pmul @1230 - matrixc_print @1231 - matrixc_proj @1232 - matrixc_qrdecomp_gramschmidt @1233 - matrixc_sub @1234 - matrixc_swaprows @1235 - matrixc_trans @1236 - matrixc_transpose_mul @1237 - matrixc_zeros @1238 - matrixcf_add @1239 - matrixcf_aug @1240 - matrixcf_cgsolve @1241 - matrixcf_chol @1242 - matrixcf_det @1243 - matrixcf_det2x2 @1244 - matrixcf_div @1245 - matrixcf_eye @1246 - matrixcf_gjelim @1247 - matrixcf_gramschmidt @1248 - matrixcf_hermitian @1249 - matrixcf_hermitian_mul @1250 - matrixcf_inv @1251 - matrixcf_linsolve @1252 - matrixcf_ludecomp_crout @1253 - matrixcf_ludecomp_doolittle @1254 - matrixcf_mul @1255 - matrixcf_mul_hermitian @1256 - matrixcf_mul_transpose @1257 - matrixcf_ones @1258 - matrixcf_pdiv @1259 - matrixcf_pivot @1260 - matrixcf_pmul @1261 - matrixcf_print @1262 - matrixcf_proj @1263 - matrixcf_qrdecomp_gramschmidt @1264 - matrixcf_sub @1265 - matrixcf_swaprows @1266 - matrixcf_trans @1267 - matrixcf_transpose_mul @1268 - matrixcf_zeros @1269 - matrixf_add @1270 - matrixf_aug @1271 - matrixf_cgsolve @1272 - matrixf_chol @1273 - matrixf_det @1274 - matrixf_det2x2 @1275 - matrixf_div @1276 - matrixf_eye @1277 - matrixf_gjelim @1278 - matrixf_gramschmidt @1279 - matrixf_hermitian @1280 - matrixf_hermitian_mul @1281 - matrixf_inv @1282 - matrixf_linsolve @1283 - matrixf_ludecomp_crout @1284 - matrixf_ludecomp_doolittle @1285 - matrixf_mul @1286 - matrixf_mul_hermitian @1287 - matrixf_mul_transpose @1288 - matrixf_ones @1289 - matrixf_pdiv @1290 - matrixf_pivot @1291 - matrixf_pmul @1292 - matrixf_print @1293 - matrixf_proj @1294 - matrixf_qrdecomp_gramschmidt @1295 - matrixf_sub @1296 - matrixf_swaprows @1297 - matrixf_trans @1298 - matrixf_transpose_mul @1299 - matrixf_zeros @1300 - modem_arb128opt @1301 DATA - modem_arb16opt @1302 DATA - modem_arb256opt @1303 DATA - modem_arb32opt @1304 DATA - modem_arb64opt @1305 DATA - modem_arb_V29 @1306 DATA - modem_arb_balance_iq @1307 - modem_arb_init @1308 - modem_arb_init_file @1309 - modem_arb_scale @1310 - modem_arb_sqam128 @1311 DATA - modem_arb_sqam32 @1312 DATA - modem_arb_vt64 @1313 DATA - modem_create @1314 - modem_create_V29 @1315 - modem_create_apsk @1316 - modem_create_arb @1317 - modem_create_arb128opt @1318 - modem_create_arb16opt @1319 - modem_create_arb256opt @1320 - modem_create_arb32opt @1321 - modem_create_arb64opt @1322 - modem_create_arb64vt @1323 - modem_create_arbitrary @1324 - modem_create_ask @1325 - modem_create_bpsk @1326 - modem_create_dpsk @1327 - modem_create_ook @1328 - modem_create_psk @1329 - modem_create_qam @1330 - modem_create_qpsk @1331 - modem_create_sqam128 @1332 - modem_create_sqam32 @1333 - modem_demodsoft_gentab @1334 - modem_demodulate @1335 - modem_demodulate_apsk @1336 - modem_demodulate_arb @1337 - modem_demodulate_ask @1338 - modem_demodulate_bpsk @1339 - modem_demodulate_dpsk @1340 - modem_demodulate_linear_array @1341 - modem_demodulate_linear_array_ref @1342 - modem_demodulate_ook @1343 - modem_demodulate_psk @1344 - modem_demodulate_qam @1345 - modem_demodulate_qpsk @1346 - modem_demodulate_soft @1347 - modem_demodulate_soft_arb @1348 - modem_demodulate_soft_bpsk @1349 - modem_demodulate_soft_qpsk @1350 - modem_demodulate_soft_table @1351 - modem_demodulate_sqam128 @1352 - modem_demodulate_sqam32 @1353 - modem_destroy @1354 - modem_gen_rand_sym @1355 - modem_get_bps @1356 - modem_get_demodulator_evm @1357 - modem_get_demodulator_phase_error @1358 - modem_get_demodulator_sample @1359 - modem_init @1360 - modem_init_map @1361 - modem_modulate @1362 - modem_modulate_apsk @1363 - modem_modulate_arb @1364 - modem_modulate_ask @1365 - modem_modulate_bpsk @1366 - modem_modulate_dpsk @1367 - modem_modulate_map @1368 - modem_modulate_ook @1369 - modem_modulate_psk @1370 - modem_modulate_qam @1371 - modem_modulate_qpsk @1372 - modem_modulate_sqam128 @1373 - modem_modulate_sqam32 @1374 - modem_print @1375 - modem_recreate @1376 - modem_reset @1377 - modulation_types @1378 DATA - msequence_advance @1379 - msequence_create @1380 - msequence_create_default @1381 - msequence_create_genpoly @1382 - msequence_default @1383 DATA - msequence_destroy @1384 - msequence_generate_symbol @1385 - msequence_get_length @1386 - msequence_get_state @1387 - msequence_print @1388 - msequence_reset @1389 - msequence_set_state @1390 - msresamp2_cccf_create @1391 - msresamp2_cccf_decim_execute @1392 - msresamp2_cccf_destroy @1393 - msresamp2_cccf_execute @1394 - msresamp2_cccf_get_delay @1395 - msresamp2_cccf_interp_execute @1396 - msresamp2_cccf_print @1397 - msresamp2_cccf_reset @1398 - msresamp2_crcf_create @1399 - msresamp2_crcf_decim_execute @1400 - msresamp2_crcf_destroy @1401 - msresamp2_crcf_execute @1402 - msresamp2_crcf_get_delay @1403 - msresamp2_crcf_interp_execute @1404 - msresamp2_crcf_print @1405 - msresamp2_crcf_reset @1406 - msresamp2_rrrf_create @1407 - msresamp2_rrrf_decim_execute @1408 - msresamp2_rrrf_destroy @1409 - msresamp2_rrrf_execute @1410 - msresamp2_rrrf_get_delay @1411 - msresamp2_rrrf_interp_execute @1412 - msresamp2_rrrf_print @1413 - msresamp2_rrrf_reset @1414 - msresamp_cccf_create @1415 - msresamp_cccf_decim_execute @1416 - msresamp_cccf_destroy @1417 - msresamp_cccf_execute @1418 - msresamp_cccf_get_delay @1419 - msresamp_cccf_interp_execute @1420 - msresamp_cccf_print @1421 - msresamp_cccf_reset @1422 - msresamp_crcf_create @1423 - msresamp_crcf_decim_execute @1424 - msresamp_crcf_destroy @1425 - msresamp_crcf_execute @1426 - msresamp_crcf_get_delay @1427 - msresamp_crcf_interp_execute @1428 - msresamp_crcf_print @1429 - msresamp_crcf_reset @1430 - msresamp_rrrf_create @1431 - msresamp_rrrf_decim_execute @1432 - msresamp_rrrf_destroy @1433 - msresamp_rrrf_execute @1434 - msresamp_rrrf_get_delay @1435 - msresamp_rrrf_interp_execute @1436 - msresamp_rrrf_print @1437 - msresamp_rrrf_reset @1438 - nco_crcf_adjust_frequency @1439 - nco_crcf_adjust_phase @1440 - nco_crcf_cexpf @1441 - nco_crcf_compute_sincos_nco @1442 - nco_crcf_compute_sincos_vco @1443 - nco_crcf_constrain_frequency @1444 - nco_crcf_constrain_phase @1445 - nco_crcf_cos @1446 - nco_crcf_create @1447 - nco_crcf_destroy @1448 - nco_crcf_get_frequency @1449 - nco_crcf_get_phase @1450 - nco_crcf_mix_block_down @1451 - nco_crcf_mix_block_up @1452 - nco_crcf_mix_down @1453 - nco_crcf_mix_up @1454 - nco_crcf_pll_reset @1455 - nco_crcf_pll_set_bandwidth @1456 - nco_crcf_pll_step @1457 - nco_crcf_reset @1458 - nco_crcf_set_frequency @1459 - nco_crcf_set_phase @1460 - nco_crcf_sin @1461 - nco_crcf_sincos @1462 - nco_crcf_step @1463 - ofdmflexframegen_assemble @1464 - ofdmflexframegen_create @1465 - ofdmflexframegen_destroy @1466 - ofdmflexframegen_encode_header @1467 - ofdmflexframegen_getframelen @1468 - ofdmflexframegen_getprops @1469 - ofdmflexframegen_is_assembled @1470 - ofdmflexframegen_modulate_header @1471 - ofdmflexframegen_print @1472 - ofdmflexframegen_reconfigure @1473 - ofdmflexframegen_reset @1474 - ofdmflexframegen_setprops @1475 - ofdmflexframegen_write_S0a @1476 - ofdmflexframegen_write_S0b @1477 - ofdmflexframegen_write_S1 @1478 - ofdmflexframegen_write_header @1479 - ofdmflexframegen_write_payload @1480 - ofdmflexframegen_writesymbol @1481 - ofdmflexframegenprops_init_default @1482 - ofdmflexframesync_create @1483 - ofdmflexframesync_debug_disable @1484 - ofdmflexframesync_debug_enable @1485 - ofdmflexframesync_debug_print @1486 - ofdmflexframesync_decode_header @1487 - ofdmflexframesync_destroy @1488 - ofdmflexframesync_execute @1489 - ofdmflexframesync_get_cfo @1490 - ofdmflexframesync_get_rssi @1491 - ofdmflexframesync_internal_callback @1492 - ofdmflexframesync_print @1493 - ofdmflexframesync_reset @1494 - ofdmflexframesync_rxheader @1495 - ofdmflexframesync_rxpayload @1496 - ofdmframe_init_S0 @1497 - ofdmframe_init_S1 @1498 - ofdmframe_init_default_sctype @1499 - ofdmframe_print_sctype @1500 - ofdmframe_validate_sctype @1501 - ofdmframegen_create @1502 - ofdmframegen_destroy @1503 - ofdmframegen_gensymbol @1504 - ofdmframegen_print @1505 - ofdmframegen_reset @1506 - ofdmframegen_write_S0a @1507 - ofdmframegen_write_S0b @1508 - ofdmframegen_write_S1 @1509 - ofdmframegen_writesymbol @1510 - ofdmframegen_writetail @1511 - ofdmframesync_S0_metrics @1512 - ofdmframesync_create @1513 - ofdmframesync_debug_disable @1514 - ofdmframesync_debug_enable @1515 - ofdmframesync_debug_print @1516 - ofdmframesync_destroy @1517 - ofdmframesync_estimate_eqgain @1518 - ofdmframesync_estimate_eqgain_poly @1519 - ofdmframesync_estimate_gain_S0 @1520 - ofdmframesync_estimate_gain_S1 @1521 - ofdmframesync_execute @1522 - ofdmframesync_execute_S0a @1523 - ofdmframesync_execute_S0b @1524 - ofdmframesync_execute_S1 @1525 - ofdmframesync_execute_rxsymbols @1526 - ofdmframesync_execute_seekplcp @1527 - ofdmframesync_get_cfo @1528 - ofdmframesync_get_rssi @1529 - ofdmframesync_print @1530 - ofdmframesync_reset @1531 - ofdmframesync_rxsymbol @1532 - optim_sort @1533 - optim_threshold_switch @1534 - packetizer_compute_dec_msg_len @1535 - packetizer_compute_enc_msg_len @1536 - packetizer_create @1537 - packetizer_decode @1538 - packetizer_decode_soft @1539 - packetizer_destroy @1540 - packetizer_encode @1541 - packetizer_get_dec_msg_len @1542 - packetizer_get_enc_msg_len @1543 - packetizer_print @1544 - packetizer_realloc_buffers @1545 - packetizer_recreate @1546 - packetizer_set_scheme @1547 - poly_expandbinomial @1548 - poly_expandbinomial_pm @1549 - poly_expandroots @1550 - poly_expandroots2 @1551 - poly_findroots @1552 - poly_findroots_bairstow @1553 - poly_findroots_bairstow_recursion @1554 - poly_findroots_durandkerner @1555 - poly_fit @1556 - poly_fit_lagrange @1557 - poly_fit_lagrange_barycentric @1558 - poly_interp_lagrange @1559 - poly_mul @1560 - poly_val @1561 - poly_val_lagrange_barycentric @1562 - polyc_expandbinomial @1563 - polyc_expandbinomial_pm @1564 - polyc_expandroots @1565 - polyc_expandroots2 @1566 - polyc_findroots @1567 - polyc_findroots_bairstow @1568 - polyc_findroots_bairstow_recursion @1569 - polyc_findroots_durandkerner @1570 - polyc_fit @1571 - polyc_fit_lagrange @1572 - polyc_fit_lagrange_barycentric @1573 - polyc_interp_lagrange @1574 - polyc_mul @1575 - polyc_val @1576 - polyc_val_lagrange_barycentric @1577 - polycf_expandbinomial @1578 - polycf_expandbinomial_pm @1579 - polycf_expandroots @1580 - polycf_expandroots2 @1581 - polycf_findroots @1582 - polycf_findroots_bairstow @1583 - polycf_findroots_bairstow_recursion @1584 - polycf_findroots_durandkerner @1585 - polycf_fit @1586 - polycf_fit_lagrange @1587 - polycf_fit_lagrange_barycentric @1588 - polycf_interp_lagrange @1589 - polycf_mul @1590 - polycf_val @1591 - polycf_val_lagrange_barycentric @1592 - polyf_expandbinomial @1593 - polyf_expandbinomial_pm @1594 - polyf_expandroots @1595 - polyf_expandroots2 @1596 - polyf_findroots @1597 - polyf_findroots_bairstow @1598 - polyf_findroots_bairstow_recursion @1599 - polyf_findroots_durandkerner @1600 - polyf_fit @1601 - polyf_fit_lagrange @1602 - polyf_fit_lagrange_barycentric @1603 - polyf_interp_lagrange @1604 - polyf_mul @1605 - polyf_val @1606 - polyf_val_lagrange_barycentric @1607 - presync_cccf_correlate @1608 - presync_cccf_correlatex @1609 - presync_cccf_create @1610 - presync_cccf_destroy @1611 - presync_cccf_print @1612 - presync_cccf_push @1613 - presync_cccf_reset @1614 - qnsearch_compute_Hessian @1615 - qnsearch_compute_gradient @1616 - qnsearch_create @1617 - qnsearch_destroy @1618 - qnsearch_normalize_gradient @1619 - qnsearch_print @1620 - qnsearch_reset @1621 - qnsearch_run @1622 - qnsearch_step @1623 - quantize_adc @1624 - quantize_dac @1625 - quantizercf_create @1626 - quantizercf_destroy @1627 - quantizercf_execute_adc @1628 - quantizercf_execute_dac @1629 - quantizercf_print @1630 - quantizerf_create @1631 - quantizerf_destroy @1632 - quantizerf_execute_adc @1633 - quantizerf_execute_dac @1634 - quantizerf_print @1635 - randexpf @1636 - randexpf_cdf @1637 - randexpf_pdf @1638 - randf @1639 - randf_cdf @1640 - randf_pdf @1641 - randgammaf @1642 - randgammaf_cdf @1643 - randgammaf_delta @1644 - randgammaf_pdf @1645 - randnakmf @1646 - randnakmf_cdf @1647 - randnakmf_pdf @1648 - randnf @1649 - randnf_cdf @1650 - randnf_pdf @1651 - randricekf @1652 - randricekf_cdf @1653 - randricekf_pdf @1654 - randweibf @1655 - randweibf_cdf @1656 - randweibf_pdf @1657 - resamp2_cccf_analyzer_execute @1658 - resamp2_cccf_clear @1659 - resamp2_cccf_create @1660 - resamp2_cccf_decim_execute @1661 - resamp2_cccf_destroy @1662 - resamp2_cccf_filter_execute @1663 - resamp2_cccf_get_delay @1664 - resamp2_cccf_interp_execute @1665 - resamp2_cccf_print @1666 - resamp2_cccf_recreate @1667 - resamp2_cccf_synthesizer_execute @1668 - resamp2_crcf_analyzer_execute @1669 - resamp2_crcf_clear @1670 - resamp2_crcf_create @1671 - resamp2_crcf_decim_execute @1672 - resamp2_crcf_destroy @1673 - resamp2_crcf_filter_execute @1674 - resamp2_crcf_get_delay @1675 - resamp2_crcf_interp_execute @1676 - resamp2_crcf_print @1677 - resamp2_crcf_recreate @1678 - resamp2_crcf_synthesizer_execute @1679 - resamp2_rrrf_analyzer_execute @1680 - resamp2_rrrf_clear @1681 - resamp2_rrrf_create @1682 - resamp2_rrrf_decim_execute @1683 - resamp2_rrrf_destroy @1684 - resamp2_rrrf_filter_execute @1685 - resamp2_rrrf_get_delay @1686 - resamp2_rrrf_interp_execute @1687 - resamp2_rrrf_print @1688 - resamp2_rrrf_recreate @1689 - resamp2_rrrf_synthesizer_execute @1690 - resamp_cccf_create @1691 - resamp_cccf_destroy @1692 - resamp_cccf_execute @1693 - resamp_cccf_execute_block @1694 - resamp_cccf_get_delay @1695 - resamp_cccf_print @1696 - resamp_cccf_reset @1697 - resamp_cccf_setrate @1698 - resamp_cccf_update_timing_state @1699 - resamp_crcf_create @1700 - resamp_crcf_destroy @1701 - resamp_crcf_execute @1702 - resamp_crcf_execute_block @1703 - resamp_crcf_get_delay @1704 - resamp_crcf_print @1705 - resamp_crcf_reset @1706 - resamp_crcf_setrate @1707 - resamp_crcf_update_timing_state @1708 - resamp_rrrf_create @1709 - resamp_rrrf_destroy @1710 - resamp_rrrf_execute @1711 - resamp_rrrf_execute_block @1712 - resamp_rrrf_get_delay @1713 - resamp_rrrf_print @1714 - resamp_rrrf_reset @1715 - resamp_rrrf_setrate @1716 - resamp_rrrf_update_timing_state @1717 - rkaiser_approximate_rho @1718 - scramble_data @1719 - secded2216_P @1720 DATA - secded2216_syndrome_w1 @1721 DATA - secded3932_P @1722 DATA - secded3932_syndrome_w1 @1723 DATA - secded7264_P @1724 DATA - secded7264_syndrome_w1 @1725 DATA - sincf @1726 - smatrix_indexsearch @1727 - smatrixb_clear @1728 - smatrixb_create @1729 - smatrixb_create_array @1730 - smatrixb_delete @1731 - smatrixb_destroy @1732 - smatrixb_eye @1733 - smatrixb_get @1734 - smatrixb_insert @1735 - smatrixb_isset @1736 - smatrixb_mul @1737 - smatrixb_mulf @1738 - smatrixb_print @1739 - smatrixb_print_expanded @1740 - smatrixb_reset @1741 - smatrixb_reset_max_mlist @1742 - smatrixb_reset_max_nlist @1743 - smatrixb_set @1744 - smatrixb_size @1745 - smatrixb_vmul @1746 - smatrixb_vmulf @1747 - smatrixf_clear @1748 - smatrixf_create @1749 - smatrixf_create_array @1750 - smatrixf_delete @1751 - smatrixf_destroy @1752 - smatrixf_eye @1753 - smatrixf_get @1754 - smatrixf_insert @1755 - smatrixf_isset @1756 - smatrixf_mul @1757 - smatrixf_print @1758 - smatrixf_print_expanded @1759 - smatrixf_reset @1760 - smatrixf_reset_max_mlist @1761 - smatrixf_reset_max_nlist @1762 - smatrixf_set @1763 - smatrixf_size @1764 - smatrixf_vmul @1765 - smatrixi_clear @1766 - smatrixi_create @1767 - smatrixi_create_array @1768 - smatrixi_delete @1769 - smatrixi_destroy @1770 - smatrixi_eye @1771 - smatrixi_get @1772 - smatrixi_insert @1773 - smatrixi_isset @1774 - smatrixi_mul @1775 - smatrixi_print @1776 - smatrixi_print_expanded @1777 - smatrixi_reset @1778 - smatrixi_reset_max_mlist @1779 - smatrixi_reset_max_nlist @1780 - smatrixi_set @1781 - smatrixi_size @1782 - smatrixi_vmul @1783 - spgramcf_accumulate_psd @1784 - spgramcf_create @1785 - spgramcf_create_kaiser @1786 - spgramcf_destroy @1787 - spgramcf_estimate_psd @1788 - spgramcf_execute @1789 - spgramcf_push @1790 - spgramcf_reset @1791 - spgramcf_write_accumulation @1792 - spgramf_accumulate_psd @1793 - spgramf_create @1794 - spgramf_create_kaiser @1795 - spgramf_destroy @1796 - spgramf_estimate_psd @1797 - spgramf_execute @1798 - spgramf_push @1799 - spgramf_reset @1800 - spgramf_write_accumulation @1801 - sumproduct_phi @1802 - symsync_crcf_advance_internal_loop @1803 - symsync_crcf_create @1804 - symsync_crcf_create_kaiser @1805 - symsync_crcf_create_rnyquist @1806 - symsync_crcf_destroy @1807 - symsync_crcf_execute @1808 - symsync_crcf_get_tau @1809 - symsync_crcf_lock @1810 - symsync_crcf_output_debug_file @1811 - symsync_crcf_print @1812 - symsync_crcf_reset @1813 - symsync_crcf_set_lf_bw @1814 - symsync_crcf_set_output_rate @1815 - symsync_crcf_setrate @1816 - symsync_crcf_step @1817 - symsync_crcf_unlock @1818 - symsync_rrrf_advance_internal_loop @1819 - symsync_rrrf_create @1820 - symsync_rrrf_create_kaiser @1821 - symsync_rrrf_create_rnyquist @1822 - symsync_rrrf_destroy @1823 - symsync_rrrf_execute @1824 - symsync_rrrf_get_tau @1825 - symsync_rrrf_lock @1826 - symsync_rrrf_output_debug_file @1827 - symsync_rrrf_print @1828 - symsync_rrrf_reset @1829 - symsync_rrrf_set_lf_bw @1830 - symsync_rrrf_set_output_rate @1831 - symsync_rrrf_setrate @1832 - symsync_rrrf_step @1833 - symsync_rrrf_unlock @1834 - unscramble_data @1835 - unscramble_data_soft @1836 - wdelaycf_clear @1837 - wdelaycf_create @1838 - wdelaycf_destroy @1839 - wdelaycf_print @1840 - wdelaycf_push @1841 - wdelaycf_read @1842 - wdelaycf_recreate @1843 - wdelayf_clear @1844 - wdelayf_create @1845 - wdelayf_destroy @1846 - wdelayf_print @1847 - wdelayf_push @1848 - wdelayf_read @1849 - wdelayf_recreate @1850 - windowcf_clear @1851 - windowcf_create @1852 - windowcf_debug_print @1853 - windowcf_destroy @1854 - windowcf_index @1855 - windowcf_print @1856 - windowcf_push @1857 - windowcf_read @1858 - windowcf_recreate @1859 - windowcf_write @1860 - windowf_clear @1861 - windowf_create @1862 - windowf_debug_print @1863 - windowf_destroy @1864 - windowf_index @1865 - windowf_print @1866 - windowf_push @1867 - windowf_read @1868 - windowf_recreate @1869 - windowf_write @1870 + ampmodem_demodulate_block @38 + ampmodem_destroy @39 + ampmodem_modulate @40 + ampmodem_modulate_block @41 + ampmodem_print @42 + ampmodem_reset @43 + apsk128_map @44 DATA + apsk128_num_levels @45 DATA + apsk128_p @46 DATA + apsk128_phi @47 DATA + apsk128_r @48 DATA + apsk128_r_slicer @49 DATA + apsk16_map @50 DATA + apsk16_num_levels @51 DATA + apsk16_p @52 DATA + apsk16_phi @53 DATA + apsk16_r @54 DATA + apsk16_r_slicer @55 DATA + apsk256_map @56 DATA + apsk256_num_levels @57 DATA + apsk256_p @58 DATA + apsk256_phi @59 DATA + apsk256_r @60 DATA + apsk256_r_slicer @61 DATA + apsk32_map @62 DATA + apsk32_num_levels @63 DATA + apsk32_p @64 DATA + apsk32_phi @65 DATA + apsk32_r @66 DATA + apsk32_r_slicer @67 DATA + apsk4_map @68 DATA + apsk4_num_levels @69 DATA + apsk4_p @70 DATA + apsk4_phi @71 DATA + apsk4_r @72 DATA + apsk4_r_slicer @73 DATA + apsk64_map @74 DATA + apsk64_num_levels @75 DATA + apsk64_p @76 DATA + apsk64_phi @77 DATA + apsk64_r @78 DATA + apsk64_r_slicer @79 DATA + apsk8_map @80 DATA + apsk8_num_levels @81 DATA + apsk8_p @82 DATA + apsk8_phi @83 DATA + apsk8_r @84 DATA + apsk8_r_slicer @85 DATA + asgramcf_create @86 + asgramcf_destroy @87 + asgramcf_execute @88 + asgramcf_print @89 + asgramcf_push @90 + asgramcf_reset @91 + asgramcf_set_scale @92 + asgramcf_write @93 + asgramf_create @94 + asgramf_destroy @95 + asgramf_execute @96 + asgramf_print @97 + asgramf_push @98 + asgramf_reset @99 + asgramf_set_scale @100 + asgramf_write @101 + autocorr_cccf_create @102 + autocorr_cccf_destroy @103 + autocorr_cccf_execute @104 + autocorr_cccf_execute_block @105 + autocorr_cccf_get_energy @106 + autocorr_cccf_print @107 + autocorr_cccf_push @108 + autocorr_cccf_reset @109 + autocorr_rrrf_create @110 + autocorr_rrrf_destroy @111 + autocorr_rrrf_execute @112 + autocorr_rrrf_execute_block @113 + autocorr_rrrf_get_energy @114 + autocorr_rrrf_print @115 + autocorr_rrrf_push @116 + autocorr_rrrf_reset @117 + awgn @118 + bessel_azpkf @119 + bilinear_zpkf @120 + blackmanharris @121 + blackmanharris7 @122 + bpacketgen_assemble_header @123 + bpacketgen_assemble_pnsequence @124 + bpacketgen_compute_packet_len @125 + bpacketgen_create @126 + bpacketgen_destroy @127 + bpacketgen_encode @128 + bpacketgen_get_packet_len @129 + bpacketgen_print @130 + bpacketgen_recreate @131 + bpacketsync_assemble_pnsequence @132 + bpacketsync_create @133 + bpacketsync_decode_header @134 + bpacketsync_decode_payload @135 + bpacketsync_destroy @136 + bpacketsync_execute @137 + bpacketsync_execute_bit @138 + bpacketsync_execute_byte @139 + bpacketsync_execute_rxheader @140 + bpacketsync_execute_rxpayload @141 + bpacketsync_execute_seekpn @142 + bpacketsync_execute_sym @143 + bpacketsync_print @144 + bpacketsync_reconfig @145 + bpacketsync_reset @146 + bpresync_cccf_correlate @147 + bpresync_cccf_correlatex @148 + bpresync_cccf_create @149 + bpresync_cccf_destroy @150 + bpresync_cccf_print @151 + bpresync_cccf_push @152 + bpresync_cccf_reset @153 + bsequence_accumulate @154 + bsequence_add @155 + bsequence_circshift @156 + bsequence_correlate @157 + bsequence_create @158 + bsequence_create_ccodes @159 + bsequence_destroy @160 + bsequence_get_length @161 + bsequence_index @162 + bsequence_init @163 + bsequence_init_msequence @164 + bsequence_mul @165 + bsequence_print @166 + bsequence_push @167 + bsequence_reset @168 + bsync_cccf_correlate @169 + bsync_cccf_create @170 + bsync_cccf_create_msequence @171 + bsync_cccf_destroy @172 + bsync_cccf_print @173 + bsync_crcf_correlate @174 + bsync_crcf_create @175 + bsync_crcf_create_msequence @176 + bsync_crcf_destroy @177 + bsync_crcf_print @178 + bsync_rrrf_correlate @179 + bsync_rrrf_create @180 + bsync_rrrf_create_msequence @181 + bsync_rrrf_destroy @182 + bsync_rrrf_print @183 + butter_azpkf @184 + cawgn @185 + cbuffercf_create @186 + cbuffercf_create_max @187 + cbuffercf_debug_print @188 + cbuffercf_destroy @189 + cbuffercf_is_full @190 + cbuffercf_linearize @191 + cbuffercf_max_read @192 + cbuffercf_max_size @193 + cbuffercf_pop @194 + cbuffercf_print @195 + cbuffercf_push @196 + cbuffercf_read @197 + cbuffercf_release @198 + cbuffercf_reset @199 + cbuffercf_size @200 + cbuffercf_space_available @201 + cbuffercf_write @202 + cbufferf_create @203 + cbufferf_create_max @204 + cbufferf_debug_print @205 + cbufferf_destroy @206 + cbufferf_is_full @207 + cbufferf_linearize @208 + cbufferf_max_read @209 + cbufferf_max_size @210 + cbufferf_pop @211 + cbufferf_print @212 + cbufferf_push @213 + cbufferf_read @214 + cbufferf_release @215 + cbufferf_reset @216 + cbufferf_size @217 + cbufferf_space_available @218 + cbufferf_write @219 + channel_cccf_add_awgn @220 + channel_cccf_add_carrier_offset @221 + channel_cccf_add_multipath @222 + channel_cccf_add_shadowing @223 + channel_cccf_create @224 + channel_cccf_destroy @225 + channel_cccf_execute @226 + channel_cccf_execute_block @227 + channel_cccf_print @228 + cheby1_azpkf @229 + cheby2_azpkf @230 + checksum_generate_key @231 + chromosome_copy @232 + chromosome_create @233 + chromosome_create_basic @234 + chromosome_create_clone @235 + chromosome_crossover @236 + chromosome_destroy @237 + chromosome_get_num_traits @238 + chromosome_init @239 + chromosome_init_random @240 + chromosome_initf @241 + chromosome_mutate @242 + chromosome_print @243 + chromosome_printf @244 + chromosome_reset @245 + chromosome_value @246 + chromosome_valuef @247 + compress_cf_mulaw @248 + compress_mulaw @249 + count_bit_errors @250 + count_bit_errors_array @251 + cpfskdem_create @252 + cpfskdem_demodulate @253 + cpfskdem_demodulate_coherent @254 + cpfskdem_demodulate_noncoherent @255 + cpfskdem_destroy @256 + cpfskdem_get_delay @257 + cpfskdem_init_coherent @258 + cpfskdem_init_noncoherent @259 + cpfskdem_print @260 + cpfskdem_reset @261 + cpfskmod_create @262 + cpfskmod_destroy @263 + cpfskmod_firdes @264 + cpfskmod_get_delay @265 + cpfskmod_modulate @266 + cpfskmod_print @267 + cpfskmod_reset @268 + crandnf @269 + crc16_generate_key @270 + crc24_generate_key @271 + crc32_generate_key @272 + crc8_generate_key @273 + crc_append_key @274 + crc_check_key @275 + crc_generate_key @276 + crc_get_length @277 + crc_scheme_str @278 DATA + crc_sizeof_key @279 + crc_validate_message @280 + cvsd_create @281 + cvsd_decode @282 + cvsd_decode8 @283 + cvsd_destroy @284 + cvsd_encode @285 + cvsd_encode8 @286 + cvsd_print @287 + detector_cccf_compute_dotprods @288 + detector_cccf_correlate @289 + detector_cccf_create @290 + detector_cccf_debug_print @291 + detector_cccf_destroy @292 + detector_cccf_estimate_offsets @293 + detector_cccf_print @294 + detector_cccf_reset @295 + detector_cccf_update_sumsq @296 + dotprod_cccf_create @297 + dotprod_cccf_destroy @298 + dotprod_cccf_execute @299 + dotprod_cccf_execute_mmx @300 + dotprod_cccf_execute_mmx4 @301 + dotprod_cccf_print @302 + dotprod_cccf_recreate @303 + dotprod_cccf_run @304 + dotprod_cccf_run4 @305 + dotprod_crcf_create @306 + dotprod_crcf_destroy @307 + dotprod_crcf_execute @308 + dotprod_crcf_execute_mmx @309 + dotprod_crcf_execute_mmx4 @310 + dotprod_crcf_print @311 + dotprod_crcf_recreate @312 + dotprod_crcf_run @313 + dotprod_crcf_run4 @314 + dotprod_rrrf_create @315 + dotprod_rrrf_destroy @316 + dotprod_rrrf_execute @317 + dotprod_rrrf_execute_mmx @318 + dotprod_rrrf_execute_mmx4 @319 + dotprod_rrrf_print @320 + dotprod_rrrf_recreate @321 + dotprod_rrrf_run @322 + dotprod_rrrf_run4 @323 + ellip_acdf @324 + ellip_asnf @325 + ellip_azpkf @326 + ellip_cdf @327 + ellip_snf @328 + ellipdegf @329 + ellipkf @330 + eqlms_cccf_create @331 + eqlms_cccf_create_lowpass @332 + eqlms_cccf_create_rnyquist @333 + eqlms_cccf_destroy @334 + eqlms_cccf_execute @335 + eqlms_cccf_execute_block @336 + eqlms_cccf_get_bw @337 + eqlms_cccf_get_weights @338 + eqlms_cccf_print @339 + eqlms_cccf_push @340 + eqlms_cccf_push_block @341 + eqlms_cccf_recreate @342 + eqlms_cccf_reset @343 + eqlms_cccf_set_bw @344 + eqlms_cccf_step @345 + eqlms_cccf_step_blind @346 + eqlms_cccf_train @347 + eqlms_cccf_update_sumsq @348 + eqlms_rrrf_create @349 + eqlms_rrrf_create_lowpass @350 + eqlms_rrrf_create_rnyquist @351 + eqlms_rrrf_destroy @352 + eqlms_rrrf_execute @353 + eqlms_rrrf_execute_block @354 + eqlms_rrrf_get_bw @355 + eqlms_rrrf_get_weights @356 + eqlms_rrrf_print @357 + eqlms_rrrf_push @358 + eqlms_rrrf_push_block @359 + eqlms_rrrf_recreate @360 + eqlms_rrrf_reset @361 + eqlms_rrrf_set_bw @362 + eqlms_rrrf_step @363 + eqlms_rrrf_step_blind @364 + eqlms_rrrf_train @365 + eqlms_rrrf_update_sumsq @366 + eqrls_cccf_create @367 + eqrls_cccf_destroy @368 + eqrls_cccf_execute @369 + eqrls_cccf_get_bw @370 + eqrls_cccf_get_weights @371 + eqrls_cccf_print @372 + eqrls_cccf_push @373 + eqrls_cccf_recreate @374 + eqrls_cccf_reset @375 + eqrls_cccf_set_bw @376 + eqrls_cccf_step @377 + eqrls_cccf_train @378 + eqrls_rrrf_create @379 + eqrls_rrrf_destroy @380 + eqrls_rrrf_execute @381 + eqrls_rrrf_get_bw @382 + eqrls_rrrf_get_weights @383 + eqrls_rrrf_print @384 + eqrls_rrrf_push @385 + eqrls_rrrf_recreate @386 + eqrls_rrrf_reset @387 + eqrls_rrrf_set_bw @388 + eqrls_rrrf_step @389 + eqrls_rrrf_train @390 + estimate_req_filter_As @391 + estimate_req_filter_df @392 + estimate_req_filter_len @393 + estimate_req_filter_len_Herrmann @394 + estimate_req_filter_len_Kaiser @395 + expand_cf_mulaw @396 + expand_mulaw @397 + fec_block_get_enc_msg_len @398 + fec_conv27_poly @399 DATA + fec_conv27p23_matrix @400 DATA + fec_conv27p34_matrix @401 DATA + fec_conv27p45_matrix @402 DATA + fec_conv27p56_matrix @403 DATA + fec_conv27p67_matrix @404 DATA + fec_conv27p78_matrix @405 DATA + fec_conv29_poly @406 DATA + fec_conv29p23_matrix @407 DATA + fec_conv29p34_matrix @408 DATA + fec_conv29p45_matrix @409 DATA + fec_conv29p56_matrix @410 DATA + fec_conv29p67_matrix @411 DATA + fec_conv29p78_matrix @412 DATA + fec_conv39_poly @413 DATA + fec_conv615_poly @414 DATA + fec_conv_create @415 + fec_conv_destroy @416 + fec_conv_get_enc_msg_len @417 + fec_conv_punctured_create @418 + fec_conv_punctured_decode @419 + fec_conv_punctured_destroy @420 + fec_conv_punctured_encode @421 + fec_create @422 + fec_decode @423 + fec_decode_soft @424 + fec_destroy @425 + fec_encode @426 + fec_get_enc_msg_length @427 + fec_get_rate @428 + fec_golay2412_create @429 + fec_golay2412_decode @430 + fec_golay2412_decode_symbol @431 + fec_golay2412_destroy @432 + fec_golay2412_encode @433 + fec_golay2412_encode_symbol @434 + fec_hamming128_create @435 + fec_hamming128_decode @436 + fec_hamming128_decode_soft @437 + fec_hamming128_decode_symbol @438 + fec_hamming128_destroy @439 + fec_hamming128_encode @440 + fec_hamming128_encode_symbol @441 + fec_hamming1511_decode_symbol @442 + fec_hamming1511_encode_symbol @443 + fec_hamming3126_decode_symbol @444 + fec_hamming3126_encode_symbol @445 + fec_hamming74_create @446 + fec_hamming74_decode @447 + fec_hamming74_decode_soft @448 + fec_hamming74_destroy @449 + fec_hamming74_encode @450 + fec_hamming84_create @451 + fec_hamming84_decode @452 + fec_hamming84_decode_soft @453 + fec_hamming84_destroy @454 + fec_hamming84_encode @455 + fec_pass_create @456 + fec_pass_decode @457 + fec_pass_destroy @458 + fec_pass_encode @459 + fec_pass_print @460 + fec_print @461 + fec_recreate @462 + fec_rep3_create @463 + fec_rep3_decode @464 + fec_rep3_decode_soft @465 + fec_rep3_destroy @466 + fec_rep3_encode @467 + fec_rep3_print @468 + fec_rep5_create @469 + fec_rep5_decode @470 + fec_rep5_decode_soft @471 + fec_rep5_destroy @472 + fec_rep5_encode @473 + fec_rep5_print @474 + fec_rs_create @475 + fec_rs_decode @476 + fec_rs_destroy @477 + fec_rs_encode @478 + fec_rs_get_enc_msg_len @479 + fec_scheme_is_convolutional @480 + fec_scheme_is_hamming @481 + fec_scheme_is_punctured @482 + fec_scheme_is_reedsolomon @483 + fec_scheme_is_repeat @484 + fec_scheme_str @485 DATA + fec_secded2216_compute_parity @486 + fec_secded2216_compute_syndrome @487 + fec_secded2216_create @488 + fec_secded2216_decode @489 + fec_secded2216_decode_symbol @490 + fec_secded2216_destroy @491 + fec_secded2216_encode @492 + fec_secded2216_encode_symbol @493 + fec_secded2216_estimate_ehat @494 + fec_secded3932_compute_parity @495 + fec_secded3932_compute_syndrome @496 + fec_secded3932_create @497 + fec_secded3932_decode @498 + fec_secded3932_decode_symbol @499 + fec_secded3932_destroy @500 + fec_secded3932_encode @501 + fec_secded3932_encode_symbol @502 + fec_secded3932_estimate_ehat @503 + fec_secded7264_compute_parity @504 + fec_secded7264_compute_syndrome @505 + fec_secded7264_create @506 + fec_secded7264_decode @507 + fec_secded7264_decode_symbol @508 + fec_secded7264_destroy @509 + fec_secded7264_encode @510 + fec_secded7264_encode_symbol @511 + fec_secded7264_estimate_ehat @512 + fec_sumproduct @513 + fec_sumproduct_step @514 + fecsoft_hamming128_decode @515 + fecsoft_hamming128_decode_n3 @516 + fecsoft_hamming128_n3 @517 DATA + fecsoft_hamming74_decode @518 + fecsoft_hamming84_decode @519 + fft_create_plan @520 + fft_create_plan_dft @521 + fft_create_plan_mixed_radix @522 + fft_create_plan_r2r_1d @523 + fft_create_plan_rader @524 + fft_create_plan_rader2 @525 + fft_create_plan_radix2 @526 + fft_destroy_plan @527 + fft_destroy_plan_dft @528 + fft_destroy_plan_mixed_radix @529 + fft_destroy_plan_r2r_1d @530 + fft_destroy_plan_rader @531 + fft_destroy_plan_rader2 @532 + fft_destroy_plan_radix2 @533 + fft_estimate_mixed_radix @534 + fft_execute @535 + fft_execute_REDFT00 @536 + fft_execute_REDFT01 @537 + fft_execute_REDFT10 @538 + fft_execute_REDFT11 @539 + fft_execute_RODFT00 @540 + fft_execute_RODFT01 @541 + fft_execute_RODFT10 @542 + fft_execute_RODFT11 @543 + fft_execute_dft @544 + fft_execute_dft_16 @545 + fft_execute_dft_2 @546 + fft_execute_dft_3 @547 + fft_execute_dft_4 @548 + fft_execute_dft_5 @549 + fft_execute_dft_6 @550 + fft_execute_dft_7 @551 + fft_execute_dft_8 @552 + fft_execute_mixed_radix @553 + fft_execute_rader @554 + fft_execute_rader2 @555 + fft_execute_radix2 @556 + fft_is_radix2 @557 + fft_print_plan @558 + fft_print_plan_r2r_1d @559 + fft_print_plan_recursive @560 + fft_r2r_1d_run @561 + fft_reverse_index @562 + fft_run @563 + fft_shift @564 + fftfilt_cccf_create @565 + fftfilt_cccf_destroy @566 + fftfilt_cccf_execute @567 + fftfilt_cccf_get_length @568 + fftfilt_cccf_print @569 + fftfilt_cccf_reset @570 + fftfilt_cccf_set_scale @571 + fftfilt_crcf_create @572 + fftfilt_crcf_destroy @573 + fftfilt_crcf_execute @574 + fftfilt_crcf_get_length @575 + fftfilt_crcf_print @576 + fftfilt_crcf_reset @577 + fftfilt_crcf_set_scale @578 + fftfilt_rrrf_create @579 + fftfilt_rrrf_destroy @580 + fftfilt_rrrf_execute @581 + fftfilt_rrrf_get_length @582 + fftfilt_rrrf_print @583 + fftfilt_rrrf_reset @584 + fftfilt_rrrf_set_scale @585 + fir_group_delay @586 + firdecim_cccf_create @587 + firdecim_cccf_create_kaiser @588 + firdecim_cccf_create_prototype @589 + firdecim_cccf_destroy @590 + firdecim_cccf_execute @591 + firdecim_cccf_execute_block @592 + firdecim_cccf_print @593 + firdecim_cccf_reset @594 + firdecim_crcf_create @595 + firdecim_crcf_create_kaiser @596 + firdecim_crcf_create_prototype @597 + firdecim_crcf_destroy @598 + firdecim_crcf_execute @599 + firdecim_crcf_execute_block @600 + firdecim_crcf_print @601 + firdecim_crcf_reset @602 + firdecim_rrrf_create @603 + firdecim_rrrf_create_kaiser @604 + firdecim_rrrf_create_prototype @605 + firdecim_rrrf_destroy @606 + firdecim_rrrf_execute @607 + firdecim_rrrf_execute_block @608 + firdecim_rrrf_print @609 + firdecim_rrrf_reset @610 + firdespm_compute_error @611 + firdespm_compute_interp @612 + firdespm_compute_taps @613 + firdespm_create @614 + firdespm_destroy @615 + firdespm_execute @616 + firdespm_iext_search @617 + firdespm_init_grid @618 + firdespm_is_search_complete @619 + firdespm_print @620 + firdespm_run @621 + firfarrow_crcf_create @622 + firfarrow_crcf_destroy @623 + firfarrow_crcf_execute @624 + firfarrow_crcf_execute_block @625 + firfarrow_crcf_freqresponse @626 + firfarrow_crcf_genpoly @627 + firfarrow_crcf_get_coefficients @628 + firfarrow_crcf_get_length @629 + firfarrow_crcf_groupdelay @630 + firfarrow_crcf_print @631 + firfarrow_crcf_push @632 + firfarrow_crcf_reset @633 + firfarrow_crcf_set_delay @634 + firfarrow_rrrf_create @635 + firfarrow_rrrf_destroy @636 + firfarrow_rrrf_execute @637 + firfarrow_rrrf_execute_block @638 + firfarrow_rrrf_freqresponse @639 + firfarrow_rrrf_genpoly @640 + firfarrow_rrrf_get_coefficients @641 + firfarrow_rrrf_get_length @642 + firfarrow_rrrf_groupdelay @643 + firfarrow_rrrf_print @644 + firfarrow_rrrf_push @645 + firfarrow_rrrf_reset @646 + firfarrow_rrrf_set_delay @647 + firfilt_cccf_create @648 + firfilt_cccf_create_kaiser @649 + firfilt_cccf_create_rect @650 + firfilt_cccf_create_rnyquist @651 + firfilt_cccf_destroy @652 + firfilt_cccf_execute @653 + firfilt_cccf_execute_block @654 + firfilt_cccf_freqresponse @655 + firfilt_cccf_get_length @656 + firfilt_cccf_groupdelay @657 + firfilt_cccf_print @658 + firfilt_cccf_push @659 + firfilt_cccf_recreate @660 + firfilt_cccf_reset @661 + firfilt_cccf_set_scale @662 + firfilt_crcf_create @663 + firfilt_crcf_create_kaiser @664 + firfilt_crcf_create_rect @665 + firfilt_crcf_create_rnyquist @666 + firfilt_crcf_destroy @667 + firfilt_crcf_execute @668 + firfilt_crcf_execute_block @669 + firfilt_crcf_freqresponse @670 + firfilt_crcf_get_length @671 + firfilt_crcf_groupdelay @672 + firfilt_crcf_print @673 + firfilt_crcf_push @674 + firfilt_crcf_recreate @675 + firfilt_crcf_reset @676 + firfilt_crcf_set_scale @677 + firfilt_rrrf_create @678 + firfilt_rrrf_create_kaiser @679 + firfilt_rrrf_create_rect @680 + firfilt_rrrf_create_rnyquist @681 + firfilt_rrrf_destroy @682 + firfilt_rrrf_execute @683 + firfilt_rrrf_execute_block @684 + firfilt_rrrf_freqresponse @685 + firfilt_rrrf_get_length @686 + firfilt_rrrf_groupdelay @687 + firfilt_rrrf_print @688 + firfilt_rrrf_push @689 + firfilt_rrrf_recreate @690 + firfilt_rrrf_reset @691 + firfilt_rrrf_set_scale @692 + firhilbf_c2r_execute @693 + firhilbf_create @694 + firhilbf_decim_execute @695 + firhilbf_decim_execute_block @696 + firhilbf_destroy @697 + firhilbf_interp_execute @698 + firhilbf_interp_execute_block @699 + firhilbf_print @700 + firhilbf_r2c_execute @701 + firhilbf_reset @702 + firinterp_cccf_create @703 + firinterp_cccf_create_kaiser @704 + firinterp_cccf_create_prototype @705 + firinterp_cccf_destroy @706 + firinterp_cccf_execute @707 + firinterp_cccf_execute_block @708 + firinterp_cccf_print @709 + firinterp_cccf_reset @710 + firinterp_crcf_create @711 + firinterp_crcf_create_kaiser @712 + firinterp_crcf_create_prototype @713 + firinterp_crcf_destroy @714 + firinterp_crcf_execute @715 + firinterp_crcf_execute_block @716 + firinterp_crcf_print @717 + firinterp_crcf_reset @718 + firinterp_rrrf_create @719 + firinterp_rrrf_create_kaiser @720 + firinterp_rrrf_create_prototype @721 + firinterp_rrrf_destroy @722 + firinterp_rrrf_execute @723 + firinterp_rrrf_execute_block @724 + firinterp_rrrf_print @725 + firinterp_rrrf_reset @726 + firpfb_cccf_create @727 + firpfb_cccf_create_drnyquist @728 + firpfb_cccf_create_kaiser @729 + firpfb_cccf_create_rnyquist @730 + firpfb_cccf_destroy @731 + firpfb_cccf_execute @732 + firpfb_cccf_execute_block @733 + firpfb_cccf_print @734 + firpfb_cccf_push @735 + firpfb_cccf_recreate @736 + firpfb_cccf_reset @737 + firpfb_cccf_set_scale @738 + firpfb_crcf_create @739 + firpfb_crcf_create_drnyquist @740 + firpfb_crcf_create_kaiser @741 + firpfb_crcf_create_rnyquist @742 + firpfb_crcf_destroy @743 + firpfb_crcf_execute @744 + firpfb_crcf_execute_block @745 + firpfb_crcf_print @746 + firpfb_crcf_push @747 + firpfb_crcf_recreate @748 + firpfb_crcf_reset @749 + firpfb_crcf_set_scale @750 + firpfb_rrrf_create @751 + firpfb_rrrf_create_drnyquist @752 + firpfb_rrrf_create_kaiser @753 + firpfb_rrrf_create_rnyquist @754 + firpfb_rrrf_destroy @755 + firpfb_rrrf_execute @756 + firpfb_rrrf_execute_block @757 + firpfb_rrrf_print @758 + firpfb_rrrf_push @759 + firpfb_rrrf_recreate @760 + firpfb_rrrf_reset @761 + firpfb_rrrf_set_scale @762 + firpfbch2_crcf_create @763 + firpfbch2_crcf_create_kaiser @764 + firpfbch2_crcf_destroy @765 + firpfbch2_crcf_execute @766 + firpfbch2_crcf_execute_analyzer @767 + firpfbch2_crcf_execute_synthesizer @768 + firpfbch2_crcf_print @769 + firpfbch2_crcf_reset @770 + firpfbch_cccf_analyzer_execute @771 + firpfbch_cccf_analyzer_push @772 + firpfbch_cccf_analyzer_run @773 + firpfbch_cccf_create @774 + firpfbch_cccf_create_kaiser @775 + firpfbch_cccf_create_rnyquist @776 + firpfbch_cccf_destroy @777 + firpfbch_cccf_print @778 + firpfbch_cccf_reset @779 + firpfbch_cccf_synthesizer_execute @780 + firpfbch_crcf_analyzer_execute @781 + firpfbch_crcf_analyzer_push @782 + firpfbch_crcf_analyzer_run @783 + firpfbch_crcf_create @784 + firpfbch_crcf_create_kaiser @785 + firpfbch_crcf_create_rnyquist @786 + firpfbch_crcf_destroy @787 + firpfbch_crcf_print @788 + firpfbch_crcf_reset @789 + firpfbch_crcf_synthesizer_execute @790 + flattop @791 + flexframegen_assemble @792 + flexframegen_create @793 + flexframegen_destroy @794 + flexframegen_generate_header @795 + flexframegen_generate_payload @796 + flexframegen_generate_preamble @797 + flexframegen_generate_symbol @798 + flexframegen_generate_tail @799 + flexframegen_getframelen @800 + flexframegen_getprops @801 + flexframegen_is_assembled @802 + flexframegen_print @803 + flexframegen_reconfigure @804 + flexframegen_reset @805 + flexframegen_setprops @806 + flexframegen_write_samples @807 + flexframegenprops_init_default @808 + flexframesync_create @809 + flexframesync_debug_disable @810 + flexframesync_debug_enable @811 + flexframesync_debug_print @812 + flexframesync_decode_header @813 + flexframesync_destroy @814 + flexframesync_execute @815 + flexframesync_execute_rxheader @816 + flexframesync_execute_rxpayload @817 + flexframesync_execute_rxpreamble @818 + flexframesync_execute_seekpn @819 + flexframesync_get_framedatastats @820 + flexframesync_print @821 + flexframesync_reset @822 + flexframesync_reset_framedatastats @823 + flexframesync_step @824 + fpoly_bessel @825 + fpoly_bessel_roots @826 + fpoly_bessel_roots_orchard @827 + fpoly_bessel_roots_orchard_recursion @828 + framedatastats_print @829 + framedatastats_reset @830 + framegen64_create @831 + framegen64_destroy @832 + framegen64_execute @833 + framegen64_print @834 + framesync64_create @835 + framesync64_debug_disable @836 + framesync64_debug_enable @837 + framesync64_debug_print @838 + framesync64_destroy @839 + framesync64_execute @840 + framesync64_execute_rxpayload @841 + framesync64_execute_rxpreamble @842 + framesync64_execute_seekpn @843 + framesync64_print @844 + framesync64_reset @845 + framesync64_step @846 + framesyncstats_default @847 DATA + framesyncstats_init_default @848 + framesyncstats_print @849 + freqdem_create @850 + freqdem_demodulate @851 + freqdem_demodulate_block @852 + freqdem_destroy @853 + freqdem_print @854 + freqdem_reset @855 + freqmod_create @856 + freqmod_destroy @857 + freqmod_modulate @858 + freqmod_modulate_block @859 + freqmod_print @860 + freqmod_reset @861 + fskdem_create @862 + fskdem_demodulate @863 + fskdem_destroy @864 + fskdem_get_frequency_error @865 + fskdem_print @866 + fskdem_reset @867 + fskmod_create @868 + fskmod_destroy @869 + fskmod_modulate @870 + fskmod_print @871 + fskmod_reset @872 + gasearch_create @873 + gasearch_create_advanced @874 + gasearch_crossover @875 + gasearch_destroy @876 + gasearch_evaluate @877 + gasearch_evolve @878 + gasearch_getopt @879 + gasearch_mutate @880 + gasearch_print @881 + gasearch_rank @882 + gasearch_run @883 + gasearch_set_mutation_rate @884 + gasearch_set_population_size @885 + gmskdem_create @886 + gmskdem_debug_print @887 + gmskdem_demodulate @888 + gmskdem_destroy @889 + gmskdem_print @890 + gmskdem_reset @891 + gmskdem_set_eq_bw @892 + gmskframegen_assemble @893 + gmskframegen_create @894 + gmskframegen_destroy @895 + gmskframegen_encode_header @896 + gmskframegen_getframelen @897 + gmskframegen_is_assembled @898 + gmskframegen_print @899 + gmskframegen_reset @900 + gmskframegen_write_header @901 + gmskframegen_write_payload @902 + gmskframegen_write_preamble @903 + gmskframegen_write_samples @904 + gmskframegen_write_tail @905 + gmskframesync_create @906 + gmskframesync_debug_disable @907 + gmskframesync_debug_enable @908 + gmskframesync_debug_print @909 + gmskframesync_decode_header @910 + gmskframesync_destroy @911 + gmskframesync_execute @912 + gmskframesync_execute_detectframe @913 + gmskframesync_execute_rxheader @914 + gmskframesync_execute_rxpayload @915 + gmskframesync_execute_rxpreamble @916 + gmskframesync_print @917 + gmskframesync_pushpn @918 + gmskframesync_reset @919 + gmskframesync_syncpn @920 + gmskframesync_update_fi @921 + gmskframesync_update_symsync @922 + gmskmod_create @923 + gmskmod_destroy @924 + gmskmod_modulate @925 + gmskmod_print @926 + gmskmod_reset @927 + golay2412_Gt @928 DATA + golay2412_H @929 DATA + golay2412_P @930 DATA + golay2412_matrix_mul @931 + golay2412_parity_search @932 + gradsearch_create @933 + gradsearch_destroy @934 + gradsearch_execute @935 + gradsearch_gradient @936 + gradsearch_linesearch @937 + gradsearch_norm @938 + gradsearch_print @939 + gradsearch_step @940 + gray_decode @941 + gray_encode @942 + hamming @943 + hamming128_enc_gentab @944 DATA + hamming74_dec_gentab @945 DATA + hamming74_enc_gentab @946 DATA + hamming84_dec_gentab @947 DATA + hamming84_enc_gentab @948 DATA + hann @949 + icrandnf @950 + iir_group_delay @951 + iirdecim_cccf_create @952 + iirdecim_cccf_create_default @953 + iirdecim_cccf_create_prototype @954 + iirdecim_cccf_destroy @955 + iirdecim_cccf_execute @956 + iirdecim_cccf_execute_block @957 + iirdecim_cccf_groupdelay @958 + iirdecim_cccf_print @959 + iirdecim_cccf_reset @960 + iirdecim_crcf_create @961 + iirdecim_crcf_create_default @962 + iirdecim_crcf_create_prototype @963 + iirdecim_crcf_destroy @964 + iirdecim_crcf_execute @965 + iirdecim_crcf_execute_block @966 + iirdecim_crcf_groupdelay @967 + iirdecim_crcf_print @968 + iirdecim_crcf_reset @969 + iirdecim_rrrf_create @970 + iirdecim_rrrf_create_default @971 + iirdecim_rrrf_create_prototype @972 + iirdecim_rrrf_destroy @973 + iirdecim_rrrf_execute @974 + iirdecim_rrrf_execute_block @975 + iirdecim_rrrf_groupdelay @976 + iirdecim_rrrf_print @977 + iirdecim_rrrf_reset @978 + iirdes_dzpk2sosf @979 + iirdes_dzpk2tff @980 + iirdes_dzpk_lp2bp @981 + iirdes_dzpk_lp2hp @982 + iirdes_freqprewarp @983 + iirdes_isstable @984 + iirdes_pll_active_PI @985 + iirdes_pll_active_lag @986 + iirfilt_cccf_create @987 + iirfilt_cccf_create_dc_blocker @988 + iirfilt_cccf_create_differentiator @989 + iirfilt_cccf_create_integrator @990 + iirfilt_cccf_create_lowpass @991 + iirfilt_cccf_create_pll @992 + iirfilt_cccf_create_prototype @993 + iirfilt_cccf_create_sos @994 + iirfilt_cccf_destroy @995 + iirfilt_cccf_execute @996 + iirfilt_cccf_execute_block @997 + iirfilt_cccf_execute_norm @998 + iirfilt_cccf_execute_sos @999 + iirfilt_cccf_freqresponse @1000 + iirfilt_cccf_get_length @1001 + iirfilt_cccf_groupdelay @1002 + iirfilt_cccf_print @1003 + iirfilt_cccf_reset @1004 + iirfilt_crcf_create @1005 + iirfilt_crcf_create_dc_blocker @1006 + iirfilt_crcf_create_differentiator @1007 + iirfilt_crcf_create_integrator @1008 + iirfilt_crcf_create_lowpass @1009 + iirfilt_crcf_create_pll @1010 + iirfilt_crcf_create_prototype @1011 + iirfilt_crcf_create_sos @1012 + iirfilt_crcf_destroy @1013 + iirfilt_crcf_execute @1014 + iirfilt_crcf_execute_block @1015 + iirfilt_crcf_execute_norm @1016 + iirfilt_crcf_execute_sos @1017 + iirfilt_crcf_freqresponse @1018 + iirfilt_crcf_get_length @1019 + iirfilt_crcf_groupdelay @1020 + iirfilt_crcf_print @1021 + iirfilt_crcf_reset @1022 + iirfilt_rrrf_create @1023 + iirfilt_rrrf_create_dc_blocker @1024 + iirfilt_rrrf_create_differentiator @1025 + iirfilt_rrrf_create_integrator @1026 + iirfilt_rrrf_create_lowpass @1027 + iirfilt_rrrf_create_pll @1028 + iirfilt_rrrf_create_prototype @1029 + iirfilt_rrrf_create_sos @1030 + iirfilt_rrrf_destroy @1031 + iirfilt_rrrf_execute @1032 + iirfilt_rrrf_execute_block @1033 + iirfilt_rrrf_execute_norm @1034 + iirfilt_rrrf_execute_sos @1035 + iirfilt_rrrf_freqresponse @1036 + iirfilt_rrrf_get_length @1037 + iirfilt_rrrf_groupdelay @1038 + iirfilt_rrrf_print @1039 + iirfilt_rrrf_reset @1040 + iirfiltsos_cccf_create @1041 + iirfiltsos_cccf_destroy @1042 + iirfiltsos_cccf_execute @1043 + iirfiltsos_cccf_execute_df1 @1044 + iirfiltsos_cccf_execute_df2 @1045 + iirfiltsos_cccf_groupdelay @1046 + iirfiltsos_cccf_print @1047 + iirfiltsos_cccf_reset @1048 + iirfiltsos_cccf_set_coefficients @1049 + iirfiltsos_crcf_create @1050 + iirfiltsos_crcf_destroy @1051 + iirfiltsos_crcf_execute @1052 + iirfiltsos_crcf_execute_df1 @1053 + iirfiltsos_crcf_execute_df2 @1054 + iirfiltsos_crcf_groupdelay @1055 + iirfiltsos_crcf_print @1056 + iirfiltsos_crcf_reset @1057 + iirfiltsos_crcf_set_coefficients @1058 + iirfiltsos_rrrf_create @1059 + iirfiltsos_rrrf_destroy @1060 + iirfiltsos_rrrf_execute @1061 + iirfiltsos_rrrf_execute_df1 @1062 + iirfiltsos_rrrf_execute_df2 @1063 + iirfiltsos_rrrf_groupdelay @1064 + iirfiltsos_rrrf_print @1065 + iirfiltsos_rrrf_reset @1066 + iirfiltsos_rrrf_set_coefficients @1067 + iirinterp_cccf_create @1068 + iirinterp_cccf_create_default @1069 + iirinterp_cccf_create_prototype @1070 + iirinterp_cccf_destroy @1071 + iirinterp_cccf_execute @1072 + iirinterp_cccf_execute_block @1073 + iirinterp_cccf_groupdelay @1074 + iirinterp_cccf_print @1075 + iirinterp_cccf_reset @1076 + iirinterp_crcf_create @1077 + iirinterp_crcf_create_default @1078 + iirinterp_crcf_create_prototype @1079 + iirinterp_crcf_destroy @1080 + iirinterp_crcf_execute @1081 + iirinterp_crcf_execute_block @1082 + iirinterp_crcf_groupdelay @1083 + iirinterp_crcf_print @1084 + iirinterp_crcf_reset @1085 + iirinterp_rrrf_create @1086 + iirinterp_rrrf_create_default @1087 + iirinterp_rrrf_create_prototype @1088 + iirinterp_rrrf_destroy @1089 + iirinterp_rrrf_execute @1090 + iirinterp_rrrf_execute_block @1091 + iirinterp_rrrf_groupdelay @1092 + iirinterp_rrrf_print @1093 + iirinterp_rrrf_reset @1094 + interleaver_create @1095 + interleaver_decode @1096 + interleaver_decode_soft @1097 + interleaver_destroy @1098 + interleaver_encode @1099 + interleaver_encode_soft @1100 + interleaver_permute @1101 + interleaver_permute_mask @1102 + interleaver_permute_mask_soft @1103 + interleaver_permute_soft @1104 + interleaver_print @1105 + interleaver_set_depth @1106 + kaiser @1107 + kaiser_beta_As @1108 + landenf @1109 + liquid_MarcumQ1f @1110 + liquid_MarcumQf @1111 + liquid_Qf @1112 + liquid_apsk128 @1113 DATA + liquid_apsk16 @1114 DATA + liquid_apsk256 @1115 DATA + liquid_apsk32 @1116 DATA + liquid_apsk4 @1117 DATA + liquid_apsk64 @1118 DATA + liquid_apsk8 @1119 DATA + liquid_asechf @1120 + liquid_bdotprod @1121 + liquid_besseli0f @1122 + liquid_besselif @1123 + liquid_besselj0f @1124 + liquid_besseljf @1125 + liquid_c_leading_zeros @1126 DATA + liquid_c_ones @1127 DATA + liquid_c_ones_mod2 @1128 DATA + liquid_cacosf @1129 + liquid_cargf_approx @1130 + liquid_casinf @1131 + liquid_catanf @1132 + liquid_cexpf @1133 + liquid_clogf @1134 + liquid_cosf @1135 + liquid_count_leading_zeros @1136 + liquid_count_ones @1137 + liquid_count_ones_mod2 @1138 + liquid_cplxpair @1139 + liquid_cplxpair_cleanup @1140 + liquid_csqrtf @1141 + liquid_expf @1142 + liquid_factor @1143 + liquid_factorialf @1144 + liquid_fft_estimate_method @1145 + liquid_filter_autocorr @1146 + liquid_filter_crosscorr @1147 + liquid_filter_energy @1148 + liquid_filter_isi @1149 + liquid_firdes_arkaiser @1150 + liquid_firdes_doppler @1151 + liquid_firdes_farcsech @1152 + liquid_firdes_farcsech_freqresponse @1153 + liquid_firdes_fexp @1154 + liquid_firdes_fexp_freqresponse @1155 + liquid_firdes_fnyquist @1156 + liquid_firdes_fsech @1157 + liquid_firdes_fsech_freqresponse @1158 + liquid_firdes_gmskrx @1159 + liquid_firdes_gmsktx @1160 + liquid_firdes_hM3 @1161 + liquid_firdes_kaiser @1162 + liquid_firdes_prototype @1163 + liquid_firdes_rcos @1164 + liquid_firdes_rfarcsech @1165 + liquid_firdes_rfexp @1166 + liquid_firdes_rfsech @1167 + liquid_firdes_rkaiser @1168 + liquid_firdes_rkaiser_bisection @1169 + liquid_firdes_rkaiser_internal_isi @1170 + liquid_firdes_rkaiser_quadratic @1171 + liquid_firdes_rrcos @1172 + liquid_gammaf @1173 + liquid_getopt_str2crc @1174 + liquid_getopt_str2fec @1175 + liquid_getopt_str2firfilt @1176 + liquid_getopt_str2mod @1177 + liquid_getopt_str2window @1178 + liquid_iirdes @1179 + liquid_invgauss @1180 + liquid_is_prime @1181 + liquid_kbd @1182 + liquid_kbd_window @1183 + liquid_lbcircshift @1184 + liquid_lbshift @1185 + liquid_lcircshift @1186 + liquid_levinson @1187 + liquid_libversion @1188 + liquid_libversion_number @1189 + liquid_lnbesselif @1190 + liquid_lngammaf @1191 + liquid_lnlowergammaf @1192 + liquid_lnuppergammaf @1193 + liquid_logf @1194 + liquid_lowergammaf @1195 + liquid_lpc @1196 + liquid_lshift @1197 + liquid_modem_is_apsk @1198 + liquid_modem_is_ask @1199 + liquid_modem_is_dpsk @1200 + liquid_modem_is_psk @1201 + liquid_modem_is_qam @1202 + liquid_modpow @1203 + liquid_msb_index @1204 + liquid_multimodal @1205 + liquid_nchoosek @1206 + liquid_nextpow2 @1207 + liquid_pack_array @1208 + liquid_pack_bytes @1209 + liquid_pack_soft_bits @1210 + liquid_primitive_root @1211 + liquid_primitive_root_prime @1212 + liquid_print_bitstring @1213 + liquid_print_crc_schemes @1214 + liquid_print_fec_schemes @1215 + liquid_print_modulation_schemes @1216 + liquid_print_windows @1217 + liquid_rbcircshift @1218 + liquid_rbshift @1219 + liquid_rcircshift @1220 + liquid_rcostaper_windowf @1221 + liquid_repack_bytes @1222 + liquid_reverse_byte @1223 + liquid_reverse_byte_gentab @1224 DATA + liquid_reverse_uint16 @1225 + liquid_reverse_uint24 @1226 + liquid_reverse_uint32 @1227 + liquid_rosenbrock @1228 + liquid_rshift @1229 + liquid_sincosf @1230 + liquid_sinf @1231 + liquid_spiral @1232 + liquid_sumsqcf @1233 + liquid_sumsqf @1234 + liquid_tanf @1235 + liquid_totient @1236 + liquid_unique_factor @1237 + liquid_unpack_array @1238 + liquid_unpack_bytes @1239 + liquid_unpack_soft_bits @1240 + liquid_unwrap_phase @1241 + liquid_unwrap_phase2 @1242 + liquid_uppergammaf @1243 + liquid_vectorcf_abs @1244 + liquid_vectorcf_add @1245 + liquid_vectorcf_addscalar @1246 + liquid_vectorcf_carg @1247 + liquid_vectorcf_cexpj @1248 + liquid_vectorcf_mul @1249 + liquid_vectorcf_mulscalar @1250 + liquid_vectorcf_norm @1251 + liquid_vectorcf_normalize @1252 + liquid_vectorf_abs @1253 + liquid_vectorf_add @1254 + liquid_vectorf_addscalar @1255 + liquid_vectorf_carg @1256 + liquid_vectorf_cexpj @1257 + liquid_vectorf_mul @1258 + liquid_vectorf_mulscalar @1259 + liquid_vectorf_norm @1260 + liquid_vectorf_normalize @1261 + liquid_version @1262 DATA + liquid_window_str @1263 DATA + matrix_add @1264 + matrix_aug @1265 + matrix_cgsolve @1266 + matrix_chol @1267 + matrix_det @1268 + matrix_det2x2 @1269 + matrix_div @1270 + matrix_eye @1271 + matrix_gjelim @1272 + matrix_gramschmidt @1273 + matrix_hermitian @1274 + matrix_hermitian_mul @1275 + matrix_inv @1276 + matrix_linsolve @1277 + matrix_ludecomp_crout @1278 + matrix_ludecomp_doolittle @1279 + matrix_mul @1280 + matrix_mul_hermitian @1281 + matrix_mul_transpose @1282 + matrix_ones @1283 + matrix_pdiv @1284 + matrix_pivot @1285 + matrix_pmul @1286 + matrix_print @1287 + matrix_proj @1288 + matrix_qrdecomp_gramschmidt @1289 + matrix_sub @1290 + matrix_swaprows @1291 + matrix_trans @1292 + matrix_transpose_mul @1293 + matrix_zeros @1294 + matrixc_add @1295 + matrixc_aug @1296 + matrixc_cgsolve @1297 + matrixc_chol @1298 + matrixc_det @1299 + matrixc_det2x2 @1300 + matrixc_div @1301 + matrixc_eye @1302 + matrixc_gjelim @1303 + matrixc_gramschmidt @1304 + matrixc_hermitian @1305 + matrixc_hermitian_mul @1306 + matrixc_inv @1307 + matrixc_linsolve @1308 + matrixc_ludecomp_crout @1309 + matrixc_ludecomp_doolittle @1310 + matrixc_mul @1311 + matrixc_mul_hermitian @1312 + matrixc_mul_transpose @1313 + matrixc_ones @1314 + matrixc_pdiv @1315 + matrixc_pivot @1316 + matrixc_pmul @1317 + matrixc_print @1318 + matrixc_proj @1319 + matrixc_qrdecomp_gramschmidt @1320 + matrixc_sub @1321 + matrixc_swaprows @1322 + matrixc_trans @1323 + matrixc_transpose_mul @1324 + matrixc_zeros @1325 + matrixcf_add @1326 + matrixcf_aug @1327 + matrixcf_cgsolve @1328 + matrixcf_chol @1329 + matrixcf_det @1330 + matrixcf_det2x2 @1331 + matrixcf_div @1332 + matrixcf_eye @1333 + matrixcf_gjelim @1334 + matrixcf_gramschmidt @1335 + matrixcf_hermitian @1336 + matrixcf_hermitian_mul @1337 + matrixcf_inv @1338 + matrixcf_linsolve @1339 + matrixcf_ludecomp_crout @1340 + matrixcf_ludecomp_doolittle @1341 + matrixcf_mul @1342 + matrixcf_mul_hermitian @1343 + matrixcf_mul_transpose @1344 + matrixcf_ones @1345 + matrixcf_pdiv @1346 + matrixcf_pivot @1347 + matrixcf_pmul @1348 + matrixcf_print @1349 + matrixcf_proj @1350 + matrixcf_qrdecomp_gramschmidt @1351 + matrixcf_sub @1352 + matrixcf_swaprows @1353 + matrixcf_trans @1354 + matrixcf_transpose_mul @1355 + matrixcf_zeros @1356 + matrixf_add @1357 + matrixf_aug @1358 + matrixf_cgsolve @1359 + matrixf_chol @1360 + matrixf_det @1361 + matrixf_det2x2 @1362 + matrixf_div @1363 + matrixf_eye @1364 + matrixf_gjelim @1365 + matrixf_gramschmidt @1366 + matrixf_hermitian @1367 + matrixf_hermitian_mul @1368 + matrixf_inv @1369 + matrixf_linsolve @1370 + matrixf_ludecomp_crout @1371 + matrixf_ludecomp_doolittle @1372 + matrixf_mul @1373 + matrixf_mul_hermitian @1374 + matrixf_mul_transpose @1375 + matrixf_ones @1376 + matrixf_pdiv @1377 + matrixf_pivot @1378 + matrixf_pmul @1379 + matrixf_print @1380 + matrixf_proj @1381 + matrixf_qrdecomp_gramschmidt @1382 + matrixf_sub @1383 + matrixf_swaprows @1384 + matrixf_trans @1385 + matrixf_transpose_mul @1386 + matrixf_zeros @1387 + modem_arb128opt @1388 DATA + modem_arb16opt @1389 DATA + modem_arb256opt @1390 DATA + modem_arb32opt @1391 DATA + modem_arb64opt @1392 DATA + modem_arb_V29 @1393 DATA + modem_arb_balance_iq @1394 + modem_arb_init @1395 + modem_arb_init_file @1396 + modem_arb_scale @1397 + modem_arb_sqam128 @1398 DATA + modem_arb_sqam32 @1399 DATA + modem_arb_vt64 @1400 DATA + modem_create @1401 + modem_create_V29 @1402 + modem_create_apsk @1403 + modem_create_arb @1404 + modem_create_arb128opt @1405 + modem_create_arb16opt @1406 + modem_create_arb256opt @1407 + modem_create_arb32opt @1408 + modem_create_arb64opt @1409 + modem_create_arb64vt @1410 + modem_create_arbitrary @1411 + modem_create_ask @1412 + modem_create_bpsk @1413 + modem_create_dpsk @1414 + modem_create_ook @1415 + modem_create_psk @1416 + modem_create_qam @1417 + modem_create_qpsk @1418 + modem_create_sqam128 @1419 + modem_create_sqam32 @1420 + modem_demodsoft_gentab @1421 + modem_demodulate @1422 + modem_demodulate_apsk @1423 + modem_demodulate_arb @1424 + modem_demodulate_ask @1425 + modem_demodulate_bpsk @1426 + modem_demodulate_dpsk @1427 + modem_demodulate_linear_array @1428 + modem_demodulate_linear_array_ref @1429 + modem_demodulate_ook @1430 + modem_demodulate_psk @1431 + modem_demodulate_qam @1432 + modem_demodulate_qpsk @1433 + modem_demodulate_soft @1434 + modem_demodulate_soft_arb @1435 + modem_demodulate_soft_bpsk @1436 + modem_demodulate_soft_qpsk @1437 + modem_demodulate_soft_table @1438 + modem_demodulate_sqam128 @1439 + modem_demodulate_sqam32 @1440 + modem_destroy @1441 + modem_gen_rand_sym @1442 + modem_get_bps @1443 + modem_get_demodulator_evm @1444 + modem_get_demodulator_phase_error @1445 + modem_get_demodulator_sample @1446 + modem_get_scheme @1447 + modem_init @1448 + modem_init_map @1449 + modem_modulate @1450 + modem_modulate_apsk @1451 + modem_modulate_arb @1452 + modem_modulate_ask @1453 + modem_modulate_bpsk @1454 + modem_modulate_dpsk @1455 + modem_modulate_map @1456 + modem_modulate_ook @1457 + modem_modulate_psk @1458 + modem_modulate_qam @1459 + modem_modulate_qpsk @1460 + modem_modulate_sqam128 @1461 + modem_modulate_sqam32 @1462 + modem_print @1463 + modem_recreate @1464 + modem_reset @1465 + modulation_types @1466 DATA + msequence_advance @1467 + msequence_create @1468 + msequence_create_default @1469 + msequence_create_genpoly @1470 + msequence_default @1471 DATA + msequence_destroy @1472 + msequence_generate_symbol @1473 + msequence_get_length @1474 + msequence_get_state @1475 + msequence_print @1476 + msequence_reset @1477 + msequence_set_state @1478 + msourcecf_add_modem @1479 + msourcecf_add_noise @1480 + msourcecf_add_source @1481 + msourcecf_add_tone @1482 + msourcecf_create @1483 + msourcecf_destroy @1484 + msourcecf_disable @1485 + msourcecf_enable @1486 + msourcecf_get_source @1487 + msourcecf_print @1488 + msourcecf_remove @1489 + msourcecf_reset @1490 + msourcecf_set_frequency @1491 + msourcecf_set_gain @1492 + msourcecf_write_samples @1493 + msresamp2_cccf_create @1494 + msresamp2_cccf_decim_execute @1495 + msresamp2_cccf_destroy @1496 + msresamp2_cccf_execute @1497 + msresamp2_cccf_get_delay @1498 + msresamp2_cccf_interp_execute @1499 + msresamp2_cccf_print @1500 + msresamp2_cccf_reset @1501 + msresamp2_crcf_create @1502 + msresamp2_crcf_decim_execute @1503 + msresamp2_crcf_destroy @1504 + msresamp2_crcf_execute @1505 + msresamp2_crcf_get_delay @1506 + msresamp2_crcf_interp_execute @1507 + msresamp2_crcf_print @1508 + msresamp2_crcf_reset @1509 + msresamp2_rrrf_create @1510 + msresamp2_rrrf_decim_execute @1511 + msresamp2_rrrf_destroy @1512 + msresamp2_rrrf_execute @1513 + msresamp2_rrrf_get_delay @1514 + msresamp2_rrrf_interp_execute @1515 + msresamp2_rrrf_print @1516 + msresamp2_rrrf_reset @1517 + msresamp_cccf_create @1518 + msresamp_cccf_decim_execute @1519 + msresamp_cccf_destroy @1520 + msresamp_cccf_execute @1521 + msresamp_cccf_get_delay @1522 + msresamp_cccf_interp_execute @1523 + msresamp_cccf_print @1524 + msresamp_cccf_reset @1525 + msresamp_crcf_create @1526 + msresamp_crcf_decim_execute @1527 + msresamp_crcf_destroy @1528 + msresamp_crcf_execute @1529 + msresamp_crcf_get_delay @1530 + msresamp_crcf_interp_execute @1531 + msresamp_crcf_print @1532 + msresamp_crcf_reset @1533 + msresamp_rrrf_create @1534 + msresamp_rrrf_decim_execute @1535 + msresamp_rrrf_destroy @1536 + msresamp_rrrf_execute @1537 + msresamp_rrrf_get_delay @1538 + msresamp_rrrf_interp_execute @1539 + msresamp_rrrf_print @1540 + msresamp_rrrf_reset @1541 + nco_crcf_adjust_frequency @1542 + nco_crcf_adjust_phase @1543 + nco_crcf_cexpf @1544 + nco_crcf_compute_sincos_nco @1545 + nco_crcf_compute_sincos_vco @1546 + nco_crcf_constrain_frequency @1547 + nco_crcf_constrain_phase @1548 + nco_crcf_cos @1549 + nco_crcf_create @1550 + nco_crcf_destroy @1551 + nco_crcf_get_frequency @1552 + nco_crcf_get_phase @1553 + nco_crcf_mix_block_down @1554 + nco_crcf_mix_block_up @1555 + nco_crcf_mix_down @1556 + nco_crcf_mix_up @1557 + nco_crcf_pll_reset @1558 + nco_crcf_pll_set_bandwidth @1559 + nco_crcf_pll_step @1560 + nco_crcf_reset @1561 + nco_crcf_set_frequency @1562 + nco_crcf_set_phase @1563 + nco_crcf_sin @1564 + nco_crcf_sincos @1565 + nco_crcf_step @1566 + ofdmflexframegen_assemble @1567 + ofdmflexframegen_create @1568 + ofdmflexframegen_destroy @1569 + ofdmflexframegen_encode_header @1570 + ofdmflexframegen_gen_S0a @1571 + ofdmflexframegen_gen_S0b @1572 + ofdmflexframegen_gen_S1 @1573 + ofdmflexframegen_gen_header @1574 + ofdmflexframegen_gen_payload @1575 + ofdmflexframegen_gen_symbol @1576 + ofdmflexframegen_gen_tail @1577 + ofdmflexframegen_gen_zeros @1578 + ofdmflexframegen_getframelen @1579 + ofdmflexframegen_getprops @1580 + ofdmflexframegen_is_assembled @1581 + ofdmflexframegen_modulate_header @1582 + ofdmflexframegen_print @1583 + ofdmflexframegen_reconfigure @1584 + ofdmflexframegen_reset @1585 + ofdmflexframegen_setprops @1586 + ofdmflexframegen_write @1587 + ofdmflexframegenprops_init_default @1588 + ofdmflexframesync_create @1589 + ofdmflexframesync_debug_disable @1590 + ofdmflexframesync_debug_enable @1591 + ofdmflexframesync_debug_print @1592 + ofdmflexframesync_decode_header @1593 + ofdmflexframesync_destroy @1594 + ofdmflexframesync_execute @1595 + ofdmflexframesync_get_cfo @1596 + ofdmflexframesync_get_rssi @1597 + ofdmflexframesync_internal_callback @1598 + ofdmflexframesync_print @1599 + ofdmflexframesync_reset @1600 + ofdmflexframesync_rxheader @1601 + ofdmflexframesync_rxpayload @1602 + ofdmframe_init_S0 @1603 + ofdmframe_init_S1 @1604 + ofdmframe_init_default_sctype @1605 + ofdmframe_init_sctype_range @1606 + ofdmframe_print_sctype @1607 + ofdmframe_validate_sctype @1608 + ofdmframegen_create @1609 + ofdmframegen_destroy @1610 + ofdmframegen_gensymbol @1611 + ofdmframegen_print @1612 + ofdmframegen_reset @1613 + ofdmframegen_write_S0a @1614 + ofdmframegen_write_S0b @1615 + ofdmframegen_write_S1 @1616 + ofdmframegen_writesymbol @1617 + ofdmframegen_writetail @1618 + ofdmframesync_S0_metrics @1619 + ofdmframesync_create @1620 + ofdmframesync_debug_disable @1621 + ofdmframesync_debug_enable @1622 + ofdmframesync_debug_print @1623 + ofdmframesync_destroy @1624 + ofdmframesync_estimate_eqgain @1625 + ofdmframesync_estimate_eqgain_poly @1626 + ofdmframesync_estimate_gain_S0 @1627 + ofdmframesync_estimate_gain_S1 @1628 + ofdmframesync_execute @1629 + ofdmframesync_execute_S0a @1630 + ofdmframesync_execute_S0b @1631 + ofdmframesync_execute_S1 @1632 + ofdmframesync_execute_rxsymbols @1633 + ofdmframesync_execute_seekplcp @1634 + ofdmframesync_get_cfo @1635 + ofdmframesync_get_rssi @1636 + ofdmframesync_print @1637 + ofdmframesync_reset @1638 + ofdmframesync_rxsymbol @1639 + optim_sort @1640 + optim_threshold_switch @1641 + packetizer_compute_dec_msg_len @1642 + packetizer_compute_enc_msg_len @1643 + packetizer_create @1644 + packetizer_decode @1645 + packetizer_decode_soft @1646 + packetizer_destroy @1647 + packetizer_encode @1648 + packetizer_get_crc @1649 + packetizer_get_dec_msg_len @1650 + packetizer_get_enc_msg_len @1651 + packetizer_get_fec0 @1652 + packetizer_get_fec1 @1653 + packetizer_print @1654 + packetizer_realloc_buffers @1655 + packetizer_recreate @1656 + packetizer_set_scheme @1657 + poly_expandbinomial @1658 + poly_expandbinomial_pm @1659 + poly_expandroots @1660 + poly_expandroots2 @1661 + poly_findroots @1662 + poly_findroots_bairstow @1663 + poly_findroots_bairstow_recursion @1664 + poly_findroots_durandkerner @1665 + poly_fit @1666 + poly_fit_lagrange @1667 + poly_fit_lagrange_barycentric @1668 + poly_interp_lagrange @1669 + poly_mul @1670 + poly_val @1671 + poly_val_lagrange_barycentric @1672 + polyc_expandbinomial @1673 + polyc_expandbinomial_pm @1674 + polyc_expandroots @1675 + polyc_expandroots2 @1676 + polyc_findroots @1677 + polyc_findroots_bairstow @1678 + polyc_findroots_bairstow_recursion @1679 + polyc_findroots_durandkerner @1680 + polyc_fit @1681 + polyc_fit_lagrange @1682 + polyc_fit_lagrange_barycentric @1683 + polyc_interp_lagrange @1684 + polyc_mul @1685 + polyc_val @1686 + polyc_val_lagrange_barycentric @1687 + polycf_expandbinomial @1688 + polycf_expandbinomial_pm @1689 + polycf_expandroots @1690 + polycf_expandroots2 @1691 + polycf_findroots @1692 + polycf_findroots_bairstow @1693 + polycf_findroots_bairstow_recursion @1694 + polycf_findroots_durandkerner @1695 + polycf_fit @1696 + polycf_fit_lagrange @1697 + polycf_fit_lagrange_barycentric @1698 + polycf_interp_lagrange @1699 + polycf_mul @1700 + polycf_val @1701 + polycf_val_lagrange_barycentric @1702 + polyf_expandbinomial @1703 + polyf_expandbinomial_pm @1704 + polyf_expandroots @1705 + polyf_expandroots2 @1706 + polyf_findroots @1707 + polyf_findroots_bairstow @1708 + polyf_findroots_bairstow_recursion @1709 + polyf_findroots_durandkerner @1710 + polyf_fit @1711 + polyf_fit_lagrange @1712 + polyf_fit_lagrange_barycentric @1713 + polyf_interp_lagrange @1714 + polyf_mul @1715 + polyf_val @1716 + polyf_val_lagrange_barycentric @1717 + presync_cccf_correlate @1718 + presync_cccf_correlatex @1719 + presync_cccf_create @1720 + presync_cccf_destroy @1721 + presync_cccf_print @1722 + presync_cccf_push @1723 + presync_cccf_reset @1724 + qdetector_cccf_create @1725 + qdetector_cccf_create_gmsk @1726 + qdetector_cccf_create_linear @1727 + qdetector_cccf_destroy @1728 + qdetector_cccf_execute @1729 + qdetector_cccf_execute_align @1730 + qdetector_cccf_execute_seek @1731 + qdetector_cccf_get_buf_len @1732 + qdetector_cccf_get_dphi @1733 + qdetector_cccf_get_gamma @1734 + qdetector_cccf_get_phi @1735 + qdetector_cccf_get_seq_len @1736 + qdetector_cccf_get_sequence @1737 + qdetector_cccf_get_tau @1738 + qdetector_cccf_print @1739 + qdetector_cccf_reset @1740 + qdetector_cccf_set_range @1741 + qdetector_cccf_set_threshold @1742 + qnsearch_compute_Hessian @1743 + qnsearch_compute_gradient @1744 + qnsearch_create @1745 + qnsearch_destroy @1746 + qnsearch_normalize_gradient @1747 + qnsearch_print @1748 + qnsearch_reset @1749 + qnsearch_run @1750 + qnsearch_step @1751 + qpacketmodem_configure @1752 + qpacketmodem_create @1753 + qpacketmodem_decode @1754 + qpacketmodem_decode_bits @1755 + qpacketmodem_decode_soft @1756 + qpacketmodem_decode_syms @1757 + qpacketmodem_destroy @1758 + qpacketmodem_encode @1759 + qpacketmodem_encode_syms @1760 + qpacketmodem_get_crc @1761 + qpacketmodem_get_fec0 @1762 + qpacketmodem_get_fec1 @1763 + qpacketmodem_get_frame_len @1764 + qpacketmodem_get_modscheme @1765 + qpacketmodem_get_payload_len @1766 + qpacketmodem_print @1767 + qpacketmodem_reset @1768 + qpilotgen_create @1769 + qpilotgen_destroy @1770 + qpilotgen_execute @1771 + qpilotgen_get_frame_len @1772 + qpilotgen_print @1773 + qpilotgen_recreate @1774 + qpilotgen_reset @1775 + qpilotsync_create @1776 + qpilotsync_destroy @1777 + qpilotsync_execute @1778 + qpilotsync_get_dphi @1779 + qpilotsync_get_frame_len @1780 + qpilotsync_get_gain @1781 + qpilotsync_get_phi @1782 + qpilotsync_print @1783 + qpilotsync_recreate @1784 + qpilotsync_reset @1785 + qsourcecf_create_modem @1786 + qsourcecf_create_noise @1787 + qsourcecf_create_tone @1788 + qsourcecf_destroy @1789 + qsourcecf_disable @1790 + qsourcecf_enable @1791 + qsourcecf_gen_sample @1792 + qsourcecf_print @1793 + qsourcecf_reset @1794 + qsourcecf_set_frequency @1795 + qsourcecf_set_gain @1796 + quantize_adc @1797 + quantize_dac @1798 + quantizercf_create @1799 + quantizercf_destroy @1800 + quantizercf_execute_adc @1801 + quantizercf_execute_dac @1802 + quantizercf_print @1803 + quantizerf_create @1804 + quantizerf_destroy @1805 + quantizerf_execute_adc @1806 + quantizerf_execute_dac @1807 + quantizerf_print @1808 + randexpf @1809 + randexpf_cdf @1810 + randexpf_pdf @1811 + randf @1812 + randf_cdf @1813 + randf_pdf @1814 + randgammaf @1815 + randgammaf_cdf @1816 + randgammaf_delta @1817 + randgammaf_pdf @1818 + randnakmf @1819 + randnakmf_cdf @1820 + randnakmf_pdf @1821 + randnf @1822 + randnf_cdf @1823 + randnf_pdf @1824 + randricekf @1825 + randricekf_cdf @1826 + randricekf_pdf @1827 + randweibf @1828 + randweibf_cdf @1829 + randweibf_pdf @1830 + resamp2_cccf_analyzer_execute @1831 + resamp2_cccf_create @1832 + resamp2_cccf_decim_execute @1833 + resamp2_cccf_destroy @1834 + resamp2_cccf_filter_execute @1835 + resamp2_cccf_get_delay @1836 + resamp2_cccf_interp_execute @1837 + resamp2_cccf_print @1838 + resamp2_cccf_recreate @1839 + resamp2_cccf_reset @1840 + resamp2_cccf_synthesizer_execute @1841 + resamp2_crcf_analyzer_execute @1842 + resamp2_crcf_create @1843 + resamp2_crcf_decim_execute @1844 + resamp2_crcf_destroy @1845 + resamp2_crcf_filter_execute @1846 + resamp2_crcf_get_delay @1847 + resamp2_crcf_interp_execute @1848 + resamp2_crcf_print @1849 + resamp2_crcf_recreate @1850 + resamp2_crcf_reset @1851 + resamp2_crcf_synthesizer_execute @1852 + resamp2_rrrf_analyzer_execute @1853 + resamp2_rrrf_create @1854 + resamp2_rrrf_decim_execute @1855 + resamp2_rrrf_destroy @1856 + resamp2_rrrf_filter_execute @1857 + resamp2_rrrf_get_delay @1858 + resamp2_rrrf_interp_execute @1859 + resamp2_rrrf_print @1860 + resamp2_rrrf_recreate @1861 + resamp2_rrrf_reset @1862 + resamp2_rrrf_synthesizer_execute @1863 + resamp_cccf_adjust_rate @1864 + resamp_cccf_create @1865 + resamp_cccf_create_default @1866 + resamp_cccf_destroy @1867 + resamp_cccf_execute @1868 + resamp_cccf_execute_block @1869 + resamp_cccf_get_delay @1870 + resamp_cccf_print @1871 + resamp_cccf_reset @1872 + resamp_cccf_set_rate @1873 + resamp_cccf_update_timing_state @1874 + resamp_crcf_adjust_rate @1875 + resamp_crcf_create @1876 + resamp_crcf_create_default @1877 + resamp_crcf_destroy @1878 + resamp_crcf_execute @1879 + resamp_crcf_execute_block @1880 + resamp_crcf_get_delay @1881 + resamp_crcf_print @1882 + resamp_crcf_reset @1883 + resamp_crcf_set_rate @1884 + resamp_crcf_update_timing_state @1885 + resamp_rrrf_adjust_rate @1886 + resamp_rrrf_create @1887 + resamp_rrrf_create_default @1888 + resamp_rrrf_destroy @1889 + resamp_rrrf_execute @1890 + resamp_rrrf_execute_block @1891 + resamp_rrrf_get_delay @1892 + resamp_rrrf_print @1893 + resamp_rrrf_reset @1894 + resamp_rrrf_set_rate @1895 + resamp_rrrf_update_timing_state @1896 + rkaiser_approximate_rho @1897 + scramble_data @1898 + secded2216_P @1899 DATA + secded2216_syndrome_w1 @1900 DATA + secded3932_P @1901 DATA + secded3932_syndrome_w1 @1902 DATA + secded7264_P @1903 DATA + secded7264_syndrome_w1 @1904 DATA + sincf @1905 + smatrix_indexsearch @1906 + smatrixb_clear @1907 + smatrixb_create @1908 + smatrixb_create_array @1909 + smatrixb_delete @1910 + smatrixb_destroy @1911 + smatrixb_eye @1912 + smatrixb_get @1913 + smatrixb_insert @1914 + smatrixb_isset @1915 + smatrixb_mul @1916 + smatrixb_mulf @1917 + smatrixb_print @1918 + smatrixb_print_expanded @1919 + smatrixb_reset @1920 + smatrixb_reset_max_mlist @1921 + smatrixb_reset_max_nlist @1922 + smatrixb_set @1923 + smatrixb_size @1924 + smatrixb_vmul @1925 + smatrixb_vmulf @1926 + smatrixf_clear @1927 + smatrixf_create @1928 + smatrixf_create_array @1929 + smatrixf_delete @1930 + smatrixf_destroy @1931 + smatrixf_eye @1932 + smatrixf_get @1933 + smatrixf_insert @1934 + smatrixf_isset @1935 + smatrixf_mul @1936 + smatrixf_print @1937 + smatrixf_print_expanded @1938 + smatrixf_reset @1939 + smatrixf_reset_max_mlist @1940 + smatrixf_reset_max_nlist @1941 + smatrixf_set @1942 + smatrixf_size @1943 + smatrixf_vmul @1944 + smatrixi_clear @1945 + smatrixi_create @1946 + smatrixi_create_array @1947 + smatrixi_delete @1948 + smatrixi_destroy @1949 + smatrixi_eye @1950 + smatrixi_get @1951 + smatrixi_insert @1952 + smatrixi_isset @1953 + smatrixi_mul @1954 + smatrixi_print @1955 + smatrixi_print_expanded @1956 + smatrixi_reset @1957 + smatrixi_reset_max_mlist @1958 + smatrixi_reset_max_nlist @1959 + smatrixi_set @1960 + smatrixi_size @1961 + smatrixi_vmul @1962 + spgramcf_create @1963 + spgramcf_create_default @1964 + spgramcf_destroy @1965 + spgramcf_estimate_psd @1966 + spgramcf_export_gnuplot @1967 + spgramcf_get_delay @1968 + spgramcf_get_nfft @1969 + spgramcf_get_num_samples @1970 + spgramcf_get_num_samples_total @1971 + spgramcf_get_num_transforms @1972 + spgramcf_get_num_transforms_total @1973 + spgramcf_get_psd @1974 + spgramcf_get_window_len @1975 + spgramcf_print @1976 + spgramcf_push @1977 + spgramcf_reset @1978 + spgramcf_set_alpha @1979 + spgramcf_step @1980 + spgramcf_write @1981 + spgramf_create @1982 + spgramf_create_default @1983 + spgramf_destroy @1984 + spgramf_estimate_psd @1985 + spgramf_export_gnuplot @1986 + spgramf_get_delay @1987 + spgramf_get_nfft @1988 + spgramf_get_num_samples @1989 + spgramf_get_num_samples_total @1990 + spgramf_get_num_transforms @1991 + spgramf_get_num_transforms_total @1992 + spgramf_get_psd @1993 + spgramf_get_window_len @1994 + spgramf_print @1995 + spgramf_push @1996 + spgramf_reset @1997 + spgramf_set_alpha @1998 + spgramf_step @1999 + spgramf_write @2000 + sumproduct_phi @2001 + symstreamcf_create @2002 + symstreamcf_create_linear @2003 + symstreamcf_destroy @2004 + symstreamcf_fill_buffer @2005 + symstreamcf_print @2006 + symstreamcf_reset @2007 + symstreamcf_write_samples @2008 + symsync_crcf_advance_internal_loop @2009 + symsync_crcf_create @2010 + symsync_crcf_create_kaiser @2011 + symsync_crcf_create_rnyquist @2012 + symsync_crcf_destroy @2013 + symsync_crcf_execute @2014 + symsync_crcf_get_tau @2015 + symsync_crcf_lock @2016 + symsync_crcf_output_debug_file @2017 + symsync_crcf_print @2018 + symsync_crcf_reset @2019 + symsync_crcf_set_lf_bw @2020 + symsync_crcf_set_output_rate @2021 + symsync_crcf_step @2022 + symsync_crcf_unlock @2023 + symsync_rrrf_advance_internal_loop @2024 + symsync_rrrf_create @2025 + symsync_rrrf_create_kaiser @2026 + symsync_rrrf_create_rnyquist @2027 + symsync_rrrf_destroy @2028 + symsync_rrrf_execute @2029 + symsync_rrrf_get_tau @2030 + symsync_rrrf_lock @2031 + symsync_rrrf_output_debug_file @2032 + symsync_rrrf_print @2033 + symsync_rrrf_reset @2034 + symsync_rrrf_set_lf_bw @2035 + symsync_rrrf_set_output_rate @2036 + symsync_rrrf_step @2037 + symsync_rrrf_unlock @2038 + symtrack_cccf_adjust_phase @2039 + symtrack_cccf_create @2040 + symtrack_cccf_create_default @2041 + symtrack_cccf_destroy @2042 + symtrack_cccf_execute @2043 + symtrack_cccf_execute_block @2044 + symtrack_cccf_print @2045 + symtrack_cccf_reset @2046 + symtrack_cccf_set_bandwidth @2047 + symtrack_cccf_set_modscheme @2048 + triangular @2049 + tvmpch_cccf_create @2050 + tvmpch_cccf_destroy @2051 + tvmpch_cccf_execute @2052 + tvmpch_cccf_execute_block @2053 + tvmpch_cccf_print @2054 + tvmpch_cccf_push @2055 + tvmpch_cccf_reset @2056 + unscramble_data @2057 + unscramble_data_soft @2058 + wdelaycf_create @2059 + wdelaycf_destroy @2060 + wdelaycf_print @2061 + wdelaycf_push @2062 + wdelaycf_read @2063 + wdelaycf_recreate @2064 + wdelaycf_reset @2065 + wdelayf_create @2066 + wdelayf_destroy @2067 + wdelayf_print @2068 + wdelayf_push @2069 + wdelayf_read @2070 + wdelayf_recreate @2071 + wdelayf_reset @2072 + windowcf_create @2073 + windowcf_debug_print @2074 + windowcf_destroy @2075 + windowcf_index @2076 + windowcf_print @2077 + windowcf_push @2078 + windowcf_read @2079 + windowcf_recreate @2080 + windowcf_reset @2081 + windowcf_write @2082 + windowf_create @2083 + windowf_debug_print @2084 + windowf_destroy @2085 + windowf_index @2086 + windowf_print @2087 + windowf_push @2088 + windowf_read @2089 + windowf_recreate @2090 + windowf_reset @2091 + windowf_write @2092 diff --git a/external/liquid-dsp/gcc/64/libliquid.dll b/external/liquid-dsp/gcc/64/libliquid.dll index deffbce..1e488f4 100644 Binary files a/external/liquid-dsp/gcc/64/libliquid.dll and b/external/liquid-dsp/gcc/64/libliquid.dll differ diff --git a/external/liquid-dsp/include/liquid/liquid.h b/external/liquid-dsp/include/liquid/liquid.h index 933b7b3..7acd56d 100644 --- a/external/liquid-dsp/include/liquid/liquid.h +++ b/external/liquid-dsp/include/liquid/liquid.h @@ -1,20 +1,23 @@ /* - * Copyright (c) 2007 - 2014 Joseph Gaeddert + * Copyright (c) 2007 - 2016 Joseph Gaeddert * - * This file is part of liquid. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: * - * liquid 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. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * liquid 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 liquid. If not, see . + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef __LIQUID_H__ #define __LIQUID_H__ @@ -24,7 +27,6 @@ #pragma warning( disable : 4003 ) #endif - #ifdef __cplusplus extern "C" { # define LIQUID_USE_COMPLEX_H 0 @@ -32,6 +34,9 @@ extern "C" { # define LIQUID_USE_COMPLEX_H 1 #endif // __cplusplus +// common headers +#include + // // Make sure the version and version number macros weren't defined by // some prevoiusly included header file. @@ -128,11 +133,11 @@ void AGC(_execute)(AGC() _q, \ /* _q : automatic gain control object */ \ /* _x : input data array, [size: _n x 1] */ \ /* _n : number of input, output samples */ \ -/* _y : output data array, [szie: _n x 1] */ \ -void AGC(_execute_block)(AGC() _q, \ - TC * _x, \ - unsigned int _n, \ - TC * _y); \ +/* _y : output data array, [size: _n x 1] */ \ +void AGC(_execute_block)(AGC() _q, \ + TC * _x, \ + unsigned int _n, \ + TC * _y); \ \ /* lock/unlock gain control */ \ void AGC(_lock)( AGC() _q); \ @@ -232,7 +237,7 @@ void CBUFFER(_print)(CBUFFER() _q); \ void CBUFFER(_debug_print)(CBUFFER() _q); \ \ /* clear internal buffer */ \ -void CBUFFER(_clear)(CBUFFER() _q); \ +void CBUFFER(_reset)(CBUFFER() _q); \ \ /* get the number of elements currently in the buffer */ \ unsigned int CBUFFER(_size)(CBUFFER() _q); \ @@ -317,8 +322,8 @@ void WINDOW(_print)(WINDOW() _q); \ /* print window object to stdout (with extra information) */ \ void WINDOW(_debug_print)(WINDOW() _q); \ \ -/* clear/reset window object (initialize to zeros) */ \ -void WINDOW(_clear)(WINDOW() _q); \ +/* reset window object (initialize to zeros) */ \ +void WINDOW(_reset)(WINDOW() _q); \ \ /* read window buffer contents */ \ /* _q : window object */ \ @@ -381,7 +386,7 @@ void WDELAY(_destroy)(WDELAY() _q); \ void WDELAY(_print)(WDELAY() _q); \ \ /* clear/reset state of object */ \ -void WDELAY(_clear)(WDELAY() _q); \ +void WDELAY(_reset)(WDELAY() _q); \ \ /* read delayed sample from delay buffer object */ \ /* _q : delay buffer object */ \ @@ -402,6 +407,146 @@ LIQUID_WDELAY_DEFINE_API(WDELAY_MANGLE_CFLOAT, liquid_float_complex) +// +// MODULE : channel +// + +#define CHANNEL_MANGLE_CCCF(name) LIQUID_CONCAT(channel_cccf,name) + +// large macro +// CHANNEL : name-mangling macro +// TO : output data type +// TC : coefficients data type +// TI : input data type +#define LIQUID_CHANNEL_DEFINE_API(CHANNEL,TO,TC,TI) \ + \ +typedef struct CHANNEL(_s) * CHANNEL(); \ + \ +/* create channel object with default parameters */ \ +CHANNEL() CHANNEL(_create)(void); \ + \ +/* destroy channel object, freeing all internal memory */ \ +void CHANNEL(_destroy)(CHANNEL() _q); \ + \ +/* print channel object internals to standard output */ \ +void CHANNEL(_print)(CHANNEL() _q); \ + \ +/* apply additive white Gausss noise impairment */ \ +/* _q : channel object */ \ +/* _noise_floor_dB : noise floor power spectral density */ \ +/* _SNR_dB : signal-to-noise ratio [dB] */ \ +void CHANNEL(_add_awgn)(CHANNEL() _q, \ + float _noise_floor_dB, \ + float _SNRdB); \ + \ +/* apply carrier offset impairment */ \ +/* _q : channel object */ \ +/* _frequency : carrier frequency offse [radians/sample */ \ +/* _phase : carrier phase offset [radians] */ \ +void CHANNEL(_add_carrier_offset)(CHANNEL() _q, \ + float _frequency, \ + float _phase); \ + \ +/* apply multi-path channel impairment */ \ +/* _q : channel object */ \ +/* _h : channel coefficients (NULL for random) */ \ +/* _h_len : number of channel coefficients */ \ +void CHANNEL(_add_multipath)(CHANNEL() _q, \ + TC * _h, \ + unsigned int _h_len); \ + \ +/* apply slowly-varying shadowing impairment */ \ +/* _q : channel object */ \ +/* _sigma : std. deviation for log-normal shadowing */ \ +/* _fd : Doppler frequency, _fd in (0,0.5) */ \ +void CHANNEL(_add_shadowing)(CHANNEL() _q, \ + float _sigma, \ + float _fd); \ + \ +/* apply channel impairments on single input sample */ \ +/* _q : channel object */ \ +/* _x : input sample */ \ +/* _y : pointer to output sample */ \ +void CHANNEL(_execute)(CHANNEL() _q, \ + TI _x, \ + TO * _y); \ + \ +/* apply channel impairments on block of samples */ \ +/* _q : channel object */ \ +/* _x : input array [size: _n x 1] */ \ +/* _n : input array length */ \ +/* _y : output array [size: _n x 1] */ \ +void CHANNEL(_execute_block)(CHANNEL() _q, \ + TI * _x, \ + unsigned int _n, \ + TO * _y); \ + +LIQUID_CHANNEL_DEFINE_API(CHANNEL_MANGLE_CCCF, + liquid_float_complex, + liquid_float_complex, + liquid_float_complex) + + +// +// time-varying multi-path channel +// +#define TVMPCH_MANGLE_CCCF(name) LIQUID_CONCAT(tvmpch_cccf,name) + +// large macro +// TVMPCH : name-mangling macro +// TO : output data type +// TC : coefficients data type +// TI : input data type +#define LIQUID_TVMPCH_DEFINE_API(TVMPCH,TO,TC,TI) \ + \ +typedef struct TVMPCH(_s) * TVMPCH(); \ + \ +/* create channel object with default parameters */ \ +/* create time-varying multi-path channel emulator object */ \ +/* _n : number of coefficients, _n > 0 */ \ +/* _std : standard deviation */ \ +/* _tau : coherence time */ \ +TVMPCH() TVMPCH(_create)(unsigned int _n, \ + float _std, \ + float _tau); \ + \ +/* destroy channel object, freeing all internal memory */ \ +void TVMPCH(_destroy)(TVMPCH() _q); \ + \ +/* reset object */ \ +void TVMPCH(_reset)(TVMPCH() _q); \ + \ +/* print channel object internals to standard output */ \ +void TVMPCH(_print)(TVMPCH() _q); \ + \ +/* push sample into emulator */ \ +/* _q : channel object */ \ +/* _x : input sample */ \ +void TVMPCH(_push)(TVMPCH() _q, \ + TI _x); \ + \ +/* compute output sample */ \ +/* _q : channel object */ \ +/* _y : output sample */ \ +void TVMPCH(_execute)(TVMPCH() _q, \ + TO * _y); \ + \ +/* apply channel impairments on a block of samples */ \ +/* _q : channel object */ \ +/* _x : input array [size: _nx x 1] */ \ +/* _nx : input array length */ \ +/* _y : output array */ \ +void TVMPCH(_execute_block)(TVMPCH() _q, \ + TI * _x, \ + unsigned int _nx, \ + TO * _y); \ + +LIQUID_TVMPCH_DEFINE_API(TVMPCH_MANGLE_CCCF, + liquid_float_complex, + liquid_float_complex, + liquid_float_complex) + + // // MODULE : dotprod (vector dot product) // @@ -497,9 +642,9 @@ typedef struct EQLMS(_s) * EQLMS(); \ \ /* create LMS EQ initialized with external coefficients */ \ /* _h : filter coefficients (NULL for {1,0,0...}) */ \ -/* _p : filter length */ \ +/* _h_len : filter length */ \ EQLMS() EQLMS(_create)(T * _h, \ - unsigned int _p); \ + unsigned int _h_len); \ \ /* create LMS EQ initialized with square-root Nyquist */ \ /* _type : filter type (e.g. LIQUID_FIRFILT_RRC) */ \ @@ -513,13 +658,19 @@ EQLMS() EQLMS(_create_rnyquist)(int _type, \ float _beta, \ float _dt); \ \ +/* create LMS EQ initialized with low-pass filter */ \ +/* _h_len : filter length */ \ +/* _fc : filter cut-off, _fc in (0,0.5] */ \ +EQLMS() EQLMS(_create_lowpass)(unsigned int _h_len, \ + float _fc); \ + \ /* re-create EQ initialized with external coefficients */ \ /* _q : equalizer object */ \ /* _h : filter coefficients (NULL for {1,0,0...}) */ \ -/* _p : filter length */ \ +/* _h_len : filter length */ \ EQLMS() EQLMS(_recreate)(EQLMS() _q, \ T * _h, \ - unsigned int _p); \ + unsigned int _h_len); \ \ /* destroy equalizer object, freeing all internal memory */ \ void EQLMS(_destroy)(EQLMS() _q); \ @@ -539,12 +690,34 @@ void EQLMS(_set_bw)(EQLMS() _q, \ void EQLMS(_push)(EQLMS() _q, \ T _x); \ \ +/* push sample into equalizer internal buffer as block */ \ +/* _q : equalizer object */ \ +/* _x : input sample array */ \ +/* _n : input sample array length */ \ +void EQLMS(_push_block)(EQLMS() _q, \ + T * _x, \ + unsigned int _n); \ + \ /* execute internal dot product and return result */ \ /* _q : equalizer object */ \ /* _y : output sample */ \ void EQLMS(_execute)(EQLMS() _q, \ T * _y); \ \ +/* execute equalizer with block of samples using constant */ \ +/* modulus algorithm, operating on a decimation rate of _k */ \ +/* samples. */ \ +/* _q : equalizer object */ \ +/* _k : down-sampling rate */ \ +/* _x : input sample array [size: _n x 1] */ \ +/* _n : input sample array length */ \ +/* _y : output sample array [size: _n x 1] */ \ +void EQLMS(_execute_block)(EQLMS() _q, \ + unsigned int _k, \ + T * _x, \ + unsigned int _n, \ + T * _y); \ + \ /* step through one cycle of equalizer training */ \ /* _q : equalizer object */ \ /* _d : desired output */ \ @@ -553,6 +726,12 @@ void EQLMS(_step)(EQLMS() _q, \ T _d, \ T _d_hat); \ \ +/* step through one cycle of equalizer training (blind) */ \ +/* _q : equalizer object */ \ +/* _d_hat : actual output */ \ +void EQLMS(_step_blind)(EQLMS() _q, \ + T _d_hat); \ + \ /* get equalizer's internal coefficients */ \ /* _q : equalizer object */ \ /* _w : weights [size: _p x 1] */ \ @@ -685,24 +864,41 @@ crc_scheme liquid_getopt_str2crc(const char * _str); unsigned int crc_get_length(crc_scheme _scheme); // generate error-detection key -// // _scheme : error-detection scheme // _msg : input data message, [size: _n x 1] // _n : input data message size -unsigned int crc_generate_key(crc_scheme _scheme, +unsigned int crc_generate_key(crc_scheme _scheme, unsigned char * _msg, - unsigned int _n); + unsigned int _n); + +// generate error-detection key and append to end of message +// _scheme : error-detection scheme (resulting in 'p' bytes) +// _msg : input data message, [size: _n+p x 1] +// _n : input data message size (excluding key at end) +void crc_append_key(crc_scheme _scheme, + unsigned char * _msg, + unsigned int _n); // validate message using error-detection key -// // _scheme : error-detection scheme // _msg : input data message, [size: _n x 1] // _n : input data message size // _key : error-detection key -int crc_validate_message(crc_scheme _scheme, +int crc_validate_message(crc_scheme _scheme, unsigned char * _msg, - unsigned int _n, - unsigned int _key); + unsigned int _n, + unsigned int _key); + +// check message with key appended to end of array +// _scheme : error-detection scheme (resulting in 'p' bytes) +// _msg : input data message, [size: _n+p x 1] +// _n : input data message size (excluding key at end) +int crc_check_key(crc_scheme _scheme, + unsigned char * _msg, + unsigned int _n); + +// get size of key (bytes) +unsigned int crc_sizeof_key(crc_scheme _scheme); // available FEC schemes @@ -877,32 +1073,32 @@ void packetizer_destroy(packetizer _p); // print packetizer object internals void packetizer_print(packetizer _p); +// access methods unsigned int packetizer_get_dec_msg_len(packetizer _p); unsigned int packetizer_get_enc_msg_len(packetizer _p); +crc_scheme packetizer_get_crc (packetizer _p); +fec_scheme packetizer_get_fec0 (packetizer _p); +fec_scheme packetizer_get_fec1 (packetizer _p); -// packetizer_encode() -// // Execute the packetizer on an input message // // _p : packetizer object // _msg : input message (uncoded bytes) // _pkt : encoded output message -void packetizer_encode(packetizer _p, - unsigned char * _msg, - unsigned char * _pkt); +void packetizer_encode(packetizer _p, + const unsigned char * _msg, + unsigned char * _pkt); -// packetizer_decode() -// // Execute the packetizer to decode an input message, return validity // check of resulting data // // _p : packetizer object // _pkt : input message (coded bytes) // _msg : decoded output message -int packetizer_decode(packetizer _p, - unsigned char * _pkt, - unsigned char * _msg); +int packetizer_decode(packetizer _p, + const unsigned char * _pkt, + unsigned char * _msg); // Execute the packetizer to decode an input message, return validity // check of resulting data @@ -910,9 +1106,9 @@ int packetizer_decode(packetizer _p, // _p : packetizer object // _pkt : input message (coded soft bits) // _msg : decoded output message -int packetizer_decode_soft(packetizer _p, - unsigned char * _pkt, - unsigned char * _msg); +int packetizer_decode_soft(packetizer _p, + const unsigned char * _pkt, + unsigned char * _msg); // @@ -1100,20 +1296,17 @@ LIQUID_FFT_DEFINE_API(LIQUID_FFT_MANGLE_FLOAT,float,liquid_float_complex) typedef struct SPGRAM(_s) * SPGRAM(); \ \ /* create spgram object */ \ -/* _nfft : FFT size */ \ -/* _window : window [size: _window_len x 1] */ \ -/* _window_len : window length */ \ +/* _nfft : FFT size */ \ +/* _window : window [size: _window_len x 1] */ \ +/* _window_len : window length, _window_len in [1,_nfft] */ \ +/* _delay : delay between transforms, _delay > 0 */ \ SPGRAM() SPGRAM(_create)(unsigned int _nfft, \ - float * _window, \ - unsigned int _window_len); \ + int _wtype, \ + unsigned int _window_len, \ + unsigned int _delay); \ \ -/* create spgram object with Kaiser-Bessel window */ \ -/* _nfft : FFT size */ \ -/* _window_len : window length */ \ -/* _beta : Kaiser-Bessel parameter (_beta > 0) */ \ -SPGRAM() SPGRAM(_create_kaiser)(unsigned int _nfft, \ - unsigned int _window_len, \ - float _beta); \ +/* create default spgram object (Kaiser-Bessel window) */ \ +SPGRAM() SPGRAM(_create_default)(unsigned int _nfft); \ \ /* destroy spgram object */ \ void SPGRAM(_destroy)(SPGRAM() _q); \ @@ -1121,42 +1314,57 @@ void SPGRAM(_destroy)(SPGRAM() _q); \ /* resets the internal state of the spgram object */ \ void SPGRAM(_reset)(SPGRAM() _q); \ \ -/* push samples into spgram object */ \ +/* print internal state of the spgram object */ \ +void SPGRAM(_print)(SPGRAM() _q); \ + \ +/* set methods */ \ +int SPGRAM(_set_alpha)(SPGRAM() _q, float _alpha); \ + \ +/* access methods */ \ +unsigned int SPGRAM(_get_nfft) (SPGRAM() _q); \ +unsigned int SPGRAM(_get_window_len) (SPGRAM() _q); \ +unsigned int SPGRAM(_get_delay) (SPGRAM() _q); \ +uint64_t SPGRAM(_get_num_samples) (SPGRAM() _q); \ +uint64_t SPGRAM(_get_num_samples_total) (SPGRAM() _q); \ +uint64_t SPGRAM(_get_num_transforms) (SPGRAM() _q); \ +uint64_t SPGRAM(_get_num_transforms_total)(SPGRAM() _q); \ +float SPGRAM(_get_alpha) (SPGRAM() _q); \ + \ +/* push a single sample into the spgram object */ \ +/* _q : spgram object */ \ +/* _x : input sample */ \ +void SPGRAM(_push)(SPGRAM() _q, \ + TI _x); \ + \ +/* write a block of samples to the spgram object */ \ /* _q : spgram object */ \ /* _x : input buffer [size: _n x 1] */ \ /* _n : input buffer length */ \ -void SPGRAM(_push)(SPGRAM() _q, \ - TI * _x, \ - unsigned int _n); \ +void SPGRAM(_write)(SPGRAM() _q, \ + TI * _x, \ + unsigned int _n); \ \ -/* compute spectral periodogram output from current buffer */ \ -/* contents */ \ +/* compute spectral periodogram output (fft-shifted values */ \ +/* in dB) from current buffer contents */ \ /* _q : spgram object */ \ -/* _X : output complex spectrum [size: _nfft x 1] */ \ -void SPGRAM(_execute)(SPGRAM() _q, \ - TC * _X); \ +/* _X : output spectrum (dB) [size: _nfft x 1] */ \ +void SPGRAM(_get_psd)(SPGRAM() _q, \ + T * _X); \ \ -/* accumulate power spectral density */ \ -/* _q : spgram object */ \ -/* _x : input buffer [size: _n x 1] */ \ -/* _n : input buffer length */ \ -void SPGRAM(_accumulate_psd)(SPGRAM() _q, \ - TI * _x, \ - unsigned int _n); \ +/* export gnuplot file */ \ +/* _q : spgram object */ \ +/* _filename : input buffer [size: _n x 1] */ \ +int SPGRAM(_export_gnuplot)(SPGRAM() _q, \ + const char * _filename); \ \ -/* write accumulated psd */ \ -/* _q : spgram object */ \ -/* _x : input buffer [size: _n x 1] */ \ -/* _n : input buffer length [size: _nfft x 1] */ \ -void SPGRAM(_write_accumulation)(SPGRAM() _q, \ - T * _x); \ +/* object-independent methods */ \ \ /* estimate spectrum on input signal */ \ -/* _q : spgram object */ \ +/* _nfft : FFT size */ \ /* _x : input signal [size: _n x 1] */ \ /* _n : input signal length */ \ /* _psd : output spectrum, [size: _nfft x 1] */ \ -void SPGRAM(_estimate_psd)(SPGRAM() _q, \ +void SPGRAM(_estimate_psd)(unsigned int _nfft, \ TI * _x, \ unsigned int _n, \ T * _psd); \ @@ -1171,34 +1379,78 @@ LIQUID_SPGRAM_DEFINE_API(LIQUID_SPGRAM_MANGLE_FLOAT, liquid_float_complex, float) +// +// asgram : ascii spectral periodogram +// -// ascii spectrogram -typedef struct asgram_s * asgram; +#define LIQUID_ASGRAM_MANGLE_CFLOAT(name) LIQUID_CONCAT(asgramcf,name) +#define LIQUID_ASGRAM_MANGLE_FLOAT(name) LIQUID_CONCAT(asgramf, name) -// create asgram object -// _nfft : FFT size -asgram asgram_create(unsigned int _nfft); -void asgram_destroy(asgram _q); -void asgram_reset(asgram _q); -void asgram_set_scale(asgram _q, float _offset, float _scale); +// Macro : ASGRAM +// ASGRAM : name-mangling macro +// T : primitive data type +// TC : primitive data type (complex) +// TI : primitive data type (input) +#define LIQUID_ASGRAM_DEFINE_API(ASGRAM,T,TC,TI) \ + \ +typedef struct ASGRAM(_s) * ASGRAM(); \ + \ +/* create asgram object with size _nfft */ \ +ASGRAM() ASGRAM(_create)(unsigned int _nfft); \ + \ +/* destroy asgram object */ \ +void ASGRAM(_destroy)(ASGRAM() _q); \ + \ +/* resets the internal state of the asgram object */ \ +void ASGRAM(_reset)(ASGRAM() _q); \ + \ +/* set scale and offset for spectrogram */ \ +/* _q : asgram object */ \ +/* _offset : signal offset level [dB] */ \ +/* _scale : signal scale [dB] */ \ +void ASGRAM(_set_scale)(ASGRAM() _q, \ + float _offset, \ + float _scale); \ + \ +/* push a single sample into the asgram object */ \ +/* _q : asgram object */ \ +/* _x : input sample */ \ +void ASGRAM(_push)(ASGRAM() _q, \ + TI _x); \ + \ +/* write a block of samples to the asgram object */ \ +/* _q : asgram object */ \ +/* _x : input buffer [size: _n x 1] */ \ +/* _n : input buffer length */ \ +void ASGRAM(_write)(ASGRAM() _q, \ + TI * _x, \ + unsigned int _n); \ + \ +/* compute spectral periodogram output from current buffer */ \ +/* contents */ \ +/* _q : spgram object */ \ +/* _ascii : output ASCII string [size: _nfft x 1] */ \ +/* _peakval : peak power spectral density value [dB] */ \ +/* _peakfreq : peak power spectral density frequency */ \ +void ASGRAM(_execute)(ASGRAM() _q, \ + char * _ascii, \ + float * _peakval, \ + float * _peakfreq); \ + \ +/* compute spectral periodogram output from current buffer */ \ +/* contents and print standard format to stdout */ \ +void ASGRAM(_print)(ASGRAM() _q); \ -// push samples into asgram object -// _q : asgram object -// _x : input buffer [size: _n x 1] -// _n : input buffer length -void asgram_push(asgram _q, - liquid_float_complex * _x, - unsigned int _n); +LIQUID_ASGRAM_DEFINE_API(LIQUID_ASGRAM_MANGLE_CFLOAT, + float, + liquid_float_complex, + liquid_float_complex) + +LIQUID_ASGRAM_DEFINE_API(LIQUID_ASGRAM_MANGLE_FLOAT, + float, + liquid_float_complex, + float) -// execute asgram -// _q : asgram object -// _ascii : ASCII character output buffer [size: _nfft x 1] -// _peakval : peak PSD value [dB] -// _peakfreq : normalized frequency of peak PSD value -void asgram_execute(asgram _q, - char * _ascii, - float * _peakval, - float * _peakfreq); // // MODULE : filter @@ -1232,6 +1484,20 @@ typedef enum { LIQUID_FIRFILT_RFARCSECH, // flipped arc-hyperbolic secant } liquid_firfilt_type; +// Design (root-)Nyquist filter from prototype +// _type : filter type (e.g. LIQUID_FIRFILT_RRC) +// _k : samples/symbol, _k > 1 +// _m : symbol delay, _m > 0 +// _beta : excess bandwidth factor, _beta in [0,1) +// _dt : fractional sample delay, _dt in [-1,1] +// _h : output coefficient buffer (length: 2*_k*_m+1) +void liquid_firdes_prototype(liquid_firfilt_type _type, + unsigned int _k, + unsigned int _m, + float _beta, + float _dt, + float * _h); + // returns filter type based on input string int liquid_getopt_str2firfilt(const char * _str); @@ -1244,13 +1510,13 @@ unsigned int estimate_req_filter_len(float _df, // estimate filter stop-band attenuation given // _df : transition bandwidth (0 < _b < 0.5) // _N : filter length -float estimate_req_filter_As(float _df, +float estimate_req_filter_As(float _df, unsigned int _N); // estimate filter transition bandwidth given // _As : stop-band attenuation [dB], _As > 0 // _N : filter length -float estimate_req_filter_df(float _As, +float estimate_req_filter_df(float _As, unsigned int _N); @@ -1260,21 +1526,6 @@ float estimate_req_filter_df(float _As, float kaiser_beta_As(float _As); -// Design Nyquist filter -// _type : filter type (e.g. LIQUID_FIRFILT_RCOS) -// _k : samples/symbol -// _m : symbol delay -// _beta : excess bandwidth factor, _beta in [0,1] -// _dt : fractional sample delay -// _h : output coefficient buffer (length: 2*k*m+1) -void liquid_firdes_nyquist(liquid_firfilt_type _type, - unsigned int _k, - unsigned int _m, - float _beta, - float _dt, - float * _h); - - // Design FIR filter using Parks-McClellan algorithm // band type specifier @@ -1357,10 +1608,10 @@ void liquid_firdes_kaiser(unsigned int _n, // _theta : LoS component angle of arrival // _h : output coefficient buffer void liquid_firdes_doppler(unsigned int _n, - float _fd, - float _K, - float _theta, - float *_h); + float _fd, + float _K, + float _theta, + float * _h); // Design Nyquist raised-cosine filter @@ -1375,20 +1626,6 @@ void liquid_firdes_rcos(unsigned int _k, float _dt, float * _h); -// Design root-Nyquist filter -// _type : filter type (e.g. LIQUID_FIRFILT_RRC) -// _k : samples/symbol, _k > 1 -// _m : symbol delay, _m > 0 -// _beta : excess bandwidth factor, _beta in [0,1) -// _dt : fractional sample delay, _dt in [-1,1] -// _h : output coefficient buffer (length: 2*_k*_m+1) -void liquid_firdes_rnyquist(liquid_firfilt_type _type, - unsigned int _k, - unsigned int _m, - float _beta, - float _dt, - float * _h); - // Design root-Nyquist raised-cosine filter void liquid_firdes_rrcos(unsigned int _k, unsigned int _m, float _beta, float _dt, float * _h); @@ -1445,9 +1682,9 @@ float iir_group_delay(float * _b, // _h : filter coefficients [size: _h_len x 1] // _h_len : filter length // _lag : auto-correlation lag (samples) -float liquid_filter_autocorr(float * _h, +float liquid_filter_autocorr(float * _h, unsigned int _h_len, - int _lag); + int _lag); // liquid_filter_crosscorr() // @@ -1458,11 +1695,11 @@ float liquid_filter_autocorr(float * _h, // _g : filter coefficients [size: _g_len] // _g_len : filter length // _lag : cross-correlation lag (samples) -float liquid_filter_crosscorr(float * _h, +float liquid_filter_crosscorr(float * _h, unsigned int _h_len, - float * _g, + float * _g, unsigned int _g_len, - int _lag); + int _lag); // liquid_filter_isi() // @@ -1474,11 +1711,11 @@ float liquid_filter_crosscorr(float * _h, // _m : filter delay (symbols) // _rms : output root mean-squared ISI // _max : maximum ISI -void liquid_filter_isi(float * _h, +void liquid_filter_isi(float * _h, unsigned int _k, unsigned int _m, - float * _rms, - float * _max); + float * _rms, + float * _max); // Compute relative out-of-band energy // @@ -1486,9 +1723,9 @@ void liquid_filter_isi(float * _h, // _h_len : filter length // _fc : analysis cut-off frequency // _nfft : fft size -float liquid_filter_energy(float * _h, +float liquid_filter_energy(float * _h, unsigned int _h_len, - float _fc, + float _fc, unsigned int _nfft); @@ -1822,6 +2059,9 @@ FIRFILT() FIRFILT(_create_rnyquist)(int _type, \ float _beta, \ float _mu); \ \ +/* create rectangular filter prototype */ \ +FIRFILT() FIRFILT(_create_rect)(unsigned int _n); \ + \ /* re-create filter */ \ /* _q : original filter object */ \ /* _h : pointer to filter coefficients [size: _n x 1] */ \ @@ -1841,7 +2081,7 @@ void FIRFILT(_print)(FIRFILT() _q); \ \ /* set output scaling for filter */ \ void FIRFILT(_set_scale)(FIRFILT() _q, \ - TC _g); \ + TC _scale); \ \ /* push sample into filter object's internal buffer */ \ /* _q : filter object */ \ @@ -1952,6 +2192,17 @@ void FIRHILB(_decim_execute)(FIRHILB() _q, \ T * _x, \ TC * _y); \ \ +/* execute Hilbert transform decimator (real to complex) on */ \ +/* a block of samples */ \ +/* _q : Hilbert transform object */ \ +/* _x : real-valued input array [size: 2*_n x 1] */ \ +/* _n : number of *output* samples */ \ +/* _y : complex-valued output array [size: _n x 1] */ \ +void FIRHILB(_decim_execute_block)(FIRHILB() _q, \ + T * _x, \ + unsigned int _n, \ + TC * _y); \ + \ /* execute Hilbert transform interpolator (real to complex) */ \ /* _q : Hilbert transform object */ \ /* _x : complex-valued input sample */ \ @@ -1959,6 +2210,17 @@ void FIRHILB(_decim_execute)(FIRHILB() _q, \ void FIRHILB(_interp_execute)(FIRHILB() _q, \ TC _x, \ T * _y); \ + \ +/* execute Hilbert transform interpolator (complex to real) */ \ +/* on a block of samples */ \ +/* _q : Hilbert transform object */ \ +/* _x : complex-valued input array [size: _n x 1] */ \ +/* _n : number of *input* samples */ \ +/* _y : real-valued output array [size: 2*_n x 1] */ \ +void FIRHILB(_interp_execute_block)(FIRHILB() _q, \ + TC * _x, \ + unsigned int _n, \ + T * _y); \ LIQUID_FIRHILB_DEFINE_API(FIRHILB_MANGLE_FLOAT, float, liquid_float_complex) //LIQUID_FIRHILB_DEFINE_API(FIRHILB_MANGLE_DOUBLE, double, liquid_double_complex) @@ -1999,7 +2261,7 @@ void FFTFILT(_print)(FFTFILT() _q); \ \ /* set output scaling for filter */ \ void FFTFILT(_set_scale)(FFTFILT() _q, \ - TC _g); \ + TC _scale); \ \ /* execute the filter on internal buffer and coefficients */ \ /* _q : filter object */ \ @@ -2081,6 +2343,13 @@ IIRFILT() IIRFILT(_create_prototype)( \ float _Ap, \ float _As); \ \ +/* create simplified low-pass Butterworth IIR filter */ \ +/* _n : filter order */ \ +/* _fc : low-pass prototype cut-off frequency */ \ +IIRFILT() IIRFILT(_create_lowpass)( \ + unsigned int _order, \ + float _fc); \ + \ /* create 8th-order integrator filter */ \ IIRFILT() IIRFILT(_create_integrator)(); \ \ @@ -2182,6 +2451,16 @@ FIRPFB() FIRPFB(_create)(unsigned int _M, \ TC * _h, \ unsigned int _h_len); \ \ +/* create firpfb from external coefficients */ \ +/* _M : number of filters in the bank */ \ +/* _m : filter semi-length [samples] */ \ +/* _fc : filter cut-off frequency 0 < _fc < 0.5 */ \ +/* _As : filter stop-band suppression [dB] */ \ +FIRPFB() FIRPFB(_create_kaiser)(unsigned int _M, \ + unsigned int _m, \ + float _fc, \ + float _As); \ + \ /* create firpfb from square-root Nyquist prototype */ \ /* _type : filter type (e.g. LIQUID_FIRFILT_RRC) */ \ /* _npfb : number of filters in the bank */ \ @@ -2222,6 +2501,10 @@ void FIRPFB(_destroy)(FIRPFB() _q); \ /* print firpfb object's parameters */ \ void FIRPFB(_print)(FIRPFB() _q); \ \ +/* set output scaling for filter */ \ +void FIRPFB(_set_scale)(FIRPFB() _q, \ + TC _g); \ + \ /* clear/reset firpfb object internal state */ \ void FIRPFB(_reset)(FIRPFB() _q); \ \ @@ -2235,6 +2518,19 @@ void FIRPFB(_push)(FIRPFB() _q, TI _x); \ void FIRPFB(_execute)(FIRPFB() _q, \ unsigned int _i, \ TO * _y); \ + \ +/* execute the filter on a block of input samples; the */ \ +/* input and output buffers may be the same */ \ +/* _q : firpfb object */ \ +/* _i : index of filter to use */ \ +/* _x : pointer to input array [size: _n x 1] */ \ +/* _n : number of input, output samples */ \ +/* _y : pointer to output array [size: _n x 1] */ \ +void FIRPFB(_execute_block)(FIRPFB() _q, \ + unsigned int _i, \ + TI * _x, \ + unsigned int _n, \ + TO * _y); \ LIQUID_FIRPFB_DEFINE_API(FIRPFB_MANGLE_RRRF, float, @@ -2272,37 +2568,25 @@ FIRINTERP() FIRINTERP(_create)(unsigned int _M, \ TC * _h, \ unsigned int _h_len); \ \ -/* create interpolator from prototype */ \ +/* create interpolator from Kaiser prototype */ \ /* _M : interpolation factor */ \ /* _m : filter delay (symbols) */ \ /* _As : stop-band attenuation [dB] */ \ -FIRINTERP() FIRINTERP(_create_prototype)(unsigned int _M, \ - unsigned int _m, \ - float _As); \ +FIRINTERP() FIRINTERP(_create_kaiser)(unsigned int _M, \ + unsigned int _m, \ + float _As); \ \ -/* create Nyquist interpolator */ \ +/* create prorotype (root-)Nyquist interpolator */ \ /* _type : filter type (e.g. LIQUID_FIRFILT_RCOS) */ \ /* _k : samples/symbol, _k > 1 */ \ /* _m : filter delay (symbols), _m > 0 */ \ /* _beta : excess bandwidth factor, _beta < 1 */ \ /* _dt : fractional sample delay, _dt in (-1, 1) */ \ -FIRINTERP() FIRINTERP(_create_nyquist)(int _type, \ - unsigned int _k, \ - unsigned int _m, \ - float _beta, \ - float _dt); \ - \ -/* create square-root Nyquist interpolator */ \ -/* _type : filter type (e.g. LIQUID_FIRFILT_RRC) */ \ -/* _k : samples/symbol, _k > 1 */ \ -/* _m : filter delay (symbols), _m > 0 */ \ -/* _beta : excess bandwidth factor, _beta < 1 */ \ -/* _dt : fractional sample delay, _dt in (-1, 1) */ \ -FIRINTERP() FIRINTERP(_create_rnyquist)(int _type, \ - unsigned int _k, \ - unsigned int _m, \ - float _beta, \ - float _dt); \ +FIRINTERP() FIRINTERP(_create_prototype)(int _type, \ + unsigned int _k, \ + unsigned int _m, \ + float _beta, \ + float _dt); \ \ /* destroy firinterp object, freeing all internal memory */ \ void FIRINTERP(_destroy)(FIRINTERP() _q); \ @@ -2366,6 +2650,12 @@ IIRINTERP() IIRINTERP(_create)(unsigned int _M, \ TC * _a, \ unsigned int _na); \ \ +/* create decimator with default Butterworth prototype */ \ +/* _M : decimation factor */ \ +/* _order : filter order */ \ +IIRINTERP() IIRINTERP(_create_default)(unsigned int _M, \ + unsigned int _order); \ + \ /* create interpolator from prototype */ \ /* _M : interpolation factor */ \ IIRINTERP() IIRINTERP(_create_prototype)( \ @@ -2444,13 +2734,13 @@ FIRDECIM() FIRDECIM(_create)(unsigned int _M, \ TC * _h, \ unsigned int _h_len); \ \ -/* create decimator from prototype */ \ +/* create decimator from Kaiser prototype */ \ /* _M : decimation factor */ \ /* _m : filter delay (symbols) */ \ /* _As : stop-band attenuation [dB] */ \ -FIRDECIM() FIRDECIM(_create_prototype)(unsigned int _M, \ - unsigned int _m, \ - float _As); \ +FIRDECIM() FIRDECIM(_create_kaiser)(unsigned int _M, \ + unsigned int _m, \ + float _As); \ \ /* create square-root Nyquist decimator */ \ /* _type : filter type (e.g. LIQUID_FIRFILT_RRC) */ \ @@ -2458,11 +2748,11 @@ FIRDECIM() FIRDECIM(_create_prototype)(unsigned int _M, \ /* _m : filter delay (symbols) */ \ /* _beta : rolloff factor (0 < beta <= 1) */ \ /* _dt : fractional sample delay */ \ -FIRDECIM() FIRDECIM(_create_rnyquist)(int _type, \ - unsigned int _M, \ - unsigned int _m, \ - float _beta, \ - float _dt); \ +FIRDECIM() FIRDECIM(_create_prototype)(int _type, \ + unsigned int _M, \ + unsigned int _m, \ + float _beta, \ + float _dt); \ \ /* destroy decimator object */ \ void FIRDECIM(_destroy)(FIRDECIM() _q); \ @@ -2471,7 +2761,7 @@ void FIRDECIM(_destroy)(FIRDECIM() _q); \ void FIRDECIM(_print)(FIRDECIM() _q); \ \ /* reset decimator object internal state */ \ -void FIRDECIM(_clear)(FIRDECIM() _q); \ +void FIRDECIM(_reset)(FIRDECIM() _q); \ \ /* execute decimator on _M input samples */ \ /* _q : decimator object */ \ @@ -2485,7 +2775,7 @@ void FIRDECIM(_execute)(FIRDECIM() _q, \ /* _q : decimator object */ \ /* _x : input array [size: _n*_M x 1] */ \ /* _n : number of _output_ samples */ \ -/* _y : output array [_sze: _n x 1] */ \ +/* _y : output array [_size: _n x 1] */ \ void FIRDECIM(_execute_block)(FIRDECIM() _q, \ TI * _x, \ unsigned int _n, \ @@ -2527,18 +2817,32 @@ IIRDECIM() IIRDECIM(_create)(unsigned int _M, \ TC * _a, \ unsigned int _na); \ \ +/* create decimator with default Butterworth prototype */ \ +/* _M : decimation factor */ \ +/* _order : filter order */ \ +IIRDECIM() IIRDECIM(_create_default)(unsigned int _M, \ + unsigned int _order); \ + \ /* create decimator from prototype */ \ /* _M : decimation factor */ \ +/* _ftype : filter type (e.g. LIQUID_IIRDES_BUTTER) */ \ +/* _btype : band type (e.g. LIQUID_IIRDES_BANDPASS) */ \ +/* _format : coefficients format (e.g. LIQUID_IIRDES_SOS) */ \ +/* _n : filter order */ \ +/* _fc : low-pass prototype cut-off frequency */ \ +/* _f0 : center frequency (band-pass, band-stop) */ \ +/* _Ap : pass-band ripple in dB */ \ +/* _As : stop-band ripple in dB */ \ IIRDECIM() IIRDECIM(_create_prototype)( \ - unsigned int _M, \ + unsigned int _M, \ liquid_iirdes_filtertype _ftype, \ liquid_iirdes_bandtype _btype, \ liquid_iirdes_format _format, \ - unsigned int _order, \ - float _fc, \ - float _f0, \ - float _Ap, \ - float _As); \ + unsigned int _order, \ + float _fc, \ + float _f0, \ + float _Ap, \ + float _As); \ \ /* destroy decimator object and free internal memory */ \ void IIRDECIM(_destroy)(IIRDECIM() _q); \ @@ -2622,7 +2926,7 @@ void RESAMP2(_destroy)(RESAMP2() _q); \ void RESAMP2(_print)(RESAMP2() _q); \ \ /* reset internal buffer */ \ -void RESAMP2(_clear)(RESAMP2() _q); \ +void RESAMP2(_reset)(RESAMP2() _q); \ \ /* get resampler filter delay (semi-length m) */ \ unsigned int RESAMP2(_get_delay)(RESAMP2() _q); \ @@ -2707,6 +3011,14 @@ RESAMP() RESAMP(_create)(float _rate, \ float _As, \ unsigned int _npfb); \ \ +/* create arbitrary resampler object with a specified input */ \ +/* resampling rate and default parameters */ \ +/* m (filter semi-length) = 7 */ \ +/* fc (filter cutoff frequency) = 0.25 */ \ +/* As (filter stop-band attenuation) = 60 dB */ \ +/* npfb (number of filters in the bank) = 64 */ \ +RESAMP() RESAMP(_create_default)(float _rate); \ + \ /* destroy arbitrary resampler object */ \ void RESAMP(_destroy)(RESAMP() _q); \ \ @@ -2720,7 +3032,10 @@ void RESAMP(_reset)(RESAMP() _q); \ unsigned int RESAMP(_get_delay)(RESAMP() _q); \ \ /* set rate of arbitrary resampler */ \ -void RESAMP(_setrate)(RESAMP() _q, float _rate); \ +void RESAMP(_set_rate)(RESAMP() _q, float _rate); \ + \ +/* adjust rate of arbitrary resampler */ \ +void RESAMP(_adjust_rate)(RESAMP() _q, float _delta); \ \ /* execute arbitrary resampler */ \ /* _q : resamp object */ \ @@ -3110,6 +3425,22 @@ void framesyncstats_init_default(framesyncstats_s * _stats); // print framesyncstats object void framesyncstats_print(framesyncstats_s * _stats); + +// framedatastats : gather frame data +typedef struct { + unsigned int num_frames_detected; + unsigned int num_headers_valid; + unsigned int num_payloads_valid; + unsigned long int num_bytes_received; +} framedatastats_s; + +// reset framedatastats object +void framedatastats_reset(framedatastats_s * _stats); + +// print framedatastats object +void framedatastats_print(framedatastats_s * _stats); + + // Generic frame synchronizer callback function type // _header : header data [size: 8 bytes] // _header_valid : is header valid? (0:no, 1:yes) @@ -3130,13 +3461,147 @@ typedef int (*framesync_callback)(unsigned char * _header, // _userdata : user-defined data pointer typedef void (*framesync_csma_callback)(void * _userdata); +// +// packet encoder/decoder +// + +typedef struct qpacketmodem_s * qpacketmodem; + +// create packet encoder +qpacketmodem qpacketmodem_create (); +void qpacketmodem_destroy(qpacketmodem _q); +void qpacketmodem_reset (qpacketmodem _q); +void qpacketmodem_print (qpacketmodem _q); + +int qpacketmodem_configure(qpacketmodem _q, + unsigned int _payload_len, + crc_scheme _check, + fec_scheme _fec0, + fec_scheme _fec1, + int _ms); + +// get length of encoded frame in symbols +unsigned int qpacketmodem_get_frame_len(qpacketmodem _q); + +// get unencoded/decoded payload length (bytes) +unsigned int qpacketmodem_get_payload_len(qpacketmodem _q); + +// regular access methods +unsigned int qpacketmodem_get_crc (qpacketmodem _q); +unsigned int qpacketmodem_get_fec0 (qpacketmodem _q); +unsigned int qpacketmodem_get_fec1 (qpacketmodem _q); +unsigned int qpacketmodem_get_modscheme(qpacketmodem _q); + +// encode packet into un-modulated frame symbol indices +// _q : qpacketmodem object +// _payload : unencoded payload bytes +// _syms : encoded but un-modulated payload symbol indices +void qpacketmodem_encode_syms(qpacketmodem _q, + const unsigned char * _payload, + unsigned char * _syms); + +// decode packet from demodulated frame symbol indices (hard-decision decoding) +// _q : qpacketmodem object +// _syms : received hard-decision symbol indices [size: frame_len x 1] +// _payload : recovered decoded payload bytes +int qpacketmodem_decode_syms(qpacketmodem _q, + unsigned char * _syms, + unsigned char * _payload); + +// decode packet from demodulated frame bits (soft-decision decoding) +// _q : qpacketmodem object +// _bits : received soft-decision bits, [size: bps*frame_len x 1] +// _payload : recovered decoded payload bytes +int qpacketmodem_decode_bits(qpacketmodem _q, + unsigned char * _bits, + unsigned char * _payload); + +// encode and modulate packet into modulated frame samples +// _q : qpacketmodem object +// _payload : unencoded payload bytes +// _frame : encoded/modulated payload symbols +void qpacketmodem_encode(qpacketmodem _q, + const unsigned char * _payload, + liquid_float_complex * _frame); + +// decode packet from modulated frame samples, returning flag if CRC passed +// NOTE: hard-decision decoding +// _q : qpacketmodem object +// _frame : encoded/modulated payload symbols +// _payload : recovered decoded payload bytes +int qpacketmodem_decode(qpacketmodem _q, + liquid_float_complex * _frame, + unsigned char * _payload); + +// decode packet from modulated frame samples, returning flag if CRC passed +// NOTE: soft-decision decoding +// _q : qpacketmodem object +// _frame : encoded/modulated payload symbols +// _payload : recovered decoded payload bytes +int qpacketmodem_decode_soft(qpacketmodem _q, + liquid_float_complex * _frame, + unsigned char * _payload); + +// +// pilot generator for streaming applications +// +typedef struct qpilotgen_s * qpilotgen; + +// create packet encoder +qpilotgen qpilotgen_create(unsigned int _payload_len, + unsigned int _pilot_spacing); + +qpilotgen qpilotgen_recreate(qpilotgen _q, + unsigned int _payload_len, + unsigned int _pilot_spacing); + +void qpilotgen_destroy(qpilotgen _q); +void qpilotgen_reset( qpilotgen _q); +void qpilotgen_print( qpilotgen _q); + +unsigned int qpilotgen_get_frame_len(qpilotgen _q); + +// insert pilot symbols +void qpilotgen_execute(qpilotgen _q, + liquid_float_complex * _payload, + liquid_float_complex * _frame); + +// +// pilot synchronizer for streaming applications +// +typedef struct qpilotsync_s * qpilotsync; + +// create packet encoder +qpilotsync qpilotsync_create(unsigned int _payload_len, + unsigned int _pilot_spacing); + +qpilotsync qpilotsync_recreate(qpilotsync _q, + unsigned int _payload_len, + unsigned int _pilot_spacing); + +void qpilotsync_destroy(qpilotsync _q); +void qpilotsync_reset( qpilotsync _q); +void qpilotsync_print( qpilotsync _q); + +unsigned int qpilotsync_get_frame_len(qpilotsync _q); + +// recover frame symbols from received frame +void qpilotsync_execute(qpilotsync _q, + liquid_float_complex * _frame, + liquid_float_complex * _payload); + +// get estimates +float qpilotsync_get_dphi(qpilotsync _q); +float qpilotsync_get_phi (qpilotsync _q); +float qpilotsync_get_gain(qpilotsync _q); + // // Basic frame generator (64 bytes data payload) // // frame length in samples -#define LIQUID_FRAME64_LEN (1340) +#define LIQUID_FRAME64_LEN (1440) typedef struct framegen64_s * framegen64; @@ -3234,7 +3699,7 @@ int flexframegen_is_assembled(flexframegen _q); void flexframegen_getprops(flexframegen _q, flexframegenprops_s * _props); // set frame properties -void flexframegen_setprops(flexframegen _q, flexframegenprops_s * _props); +int flexframegen_setprops(flexframegen _q, flexframegenprops_s * _props); // get length of assembled frame (samples) unsigned int flexframegen_getframelen(flexframegen _q); @@ -3244,17 +3709,20 @@ unsigned int flexframegen_getframelen(flexframegen _q); // _header : frame header // _payload : payload data [size: _payload_len x 1] // _payload_len : payload data length -void flexframegen_assemble(flexframegen _q, - unsigned char * _header, - unsigned char * _payload, - unsigned int _payload_len); +void flexframegen_assemble(flexframegen _q, + const unsigned char * _header, + const unsigned char * _payload, + unsigned int _payload_len); // write samples of assembled frame, two samples at a time, returning -// '1' when frame is complete, '0' otherwise -// _q : frame generator object -// _buffer : output buffer [size: 2 x 1] +// '1' when frame is complete, '0' otherwise. Zeros will be written +// to the buffer if the frame is not assembled +// _q : frame generator object +// _buffer : output buffer [size: _buffer_len x 1] +// _buffer_len : output buffer length int flexframegen_write_samples(flexframegen _q, - liquid_float_complex * _buffer); + liquid_float_complex * _buffer, + unsigned int _buffer_len); // frame synchronizer @@ -3283,19 +3751,15 @@ void flexframesync_execute(flexframesync _q, liquid_float_complex * _x, unsigned int _n); +// frame data statistics +void flexframesync_reset_framedatastats(flexframesync _q); +framedatastats_s flexframesync_get_framedatastats (flexframesync _q); + // enable/disable debugging void flexframesync_debug_enable(flexframesync _q); void flexframesync_debug_disable(flexframesync _q); void flexframesync_debug_print(flexframesync _q, const char * _filename); -#if 0 -// advanced modes -void flexframesync_set_csma_callbacks(flexframesync _fs, - framesync_csma_callback _csma_lock, - framesync_csma_callback _csma_unlock, - void * _csma_userdata); -#endif - // // bpacket : binary packet suitable for data streaming @@ -3396,18 +3860,19 @@ typedef struct gmskframegen_s * gmskframegen; // create GMSK frame generator gmskframegen gmskframegen_create(); -void gmskframegen_destroy(gmskframegen _fg); -void gmskframegen_print(gmskframegen _fg); -void gmskframegen_reset(gmskframegen _fg); -void gmskframegen_assemble(gmskframegen _fg, - unsigned char * _header, - unsigned char * _payload, - unsigned int _payload_len, - crc_scheme _check, - fec_scheme _fec0, - fec_scheme _fec1); +void gmskframegen_destroy (gmskframegen _q); +int gmskframegen_is_assembled (gmskframegen _q); +void gmskframegen_print (gmskframegen _q); +void gmskframegen_reset (gmskframegen _q); +void gmskframegen_assemble (gmskframegen _q, + const unsigned char * _header, + const unsigned char * _payload, + unsigned int _payload_len, + crc_scheme _check, + fec_scheme _fec0, + fec_scheme _fec1); unsigned int gmskframegen_getframelen(gmskframegen _q); -int gmskframegen_write_samples(gmskframegen _fg, +int gmskframegen_write_samples(gmskframegen _q, liquid_float_complex * _y); @@ -3435,6 +3900,7 @@ void gmskframesync_debug_disable(gmskframesync _q); void gmskframesync_debug_print(gmskframesync _q, const char * _filename); + // // OFDM flexframe generator // @@ -3487,21 +3953,23 @@ void ofdmflexframegen_setprops(ofdmflexframegen _q, // _q : OFDM frame generator object unsigned int ofdmflexframegen_getframelen(ofdmflexframegen _q); -// assemble a frame from an array of data +// assemble a frame from an array of data (NULL pointers will use random data) // _q : OFDM frame generator object // _header : frame header [8 bytes] // _payload : payload data [size: _payload_len x 1] // _payload_len : payload data length -void ofdmflexframegen_assemble(ofdmflexframegen _q, - unsigned char * _header, - unsigned char * _payload, - unsigned int _payload_len); +void ofdmflexframegen_assemble(ofdmflexframegen _q, + const unsigned char * _header, + const unsigned char * _payload, + unsigned int _payload_len); -// write symbols of assembled frame +// write samples of assembled frame // _q : OFDM frame generator object -// _buffer : output buffer [size: M+cp_len x 1] -int ofdmflexframegen_writesymbol(ofdmflexframegen _q, - liquid_float_complex * _buffer); +// _buf : output buffer [size: _buf_len x 1] +// _buf_len : output buffer length +int ofdmflexframegen_write(ofdmflexframegen _q, + liquid_float_complex * _buf, + unsigned int _buf_len); // // OFDM flex frame synchronizer @@ -3645,6 +4113,69 @@ LIQUID_PRESYNC_DEFINE_API(BPRESYNC_MANGLE_CCCF, liquid_float_complex, liquid_float_complex) +// +// Frame detector +// + +typedef struct qdetector_cccf_s * qdetector_cccf; + +// create detector with generic sequence +// _s : sample sequence +// _s_len : length of sample sequence +qdetector_cccf qdetector_cccf_create(liquid_float_complex * _s, + unsigned int _s_len); + +// create detector from sequence of symbols using internal linear interpolator +// _sequence : symbol sequence +// _sequence_len : length of symbol sequence +// _ftype : filter prototype (e.g. LIQUID_FIRFILT_RRC) +// _k : samples/symbol +// _m : filter delay +// _beta : excess bandwidth factor +qdetector_cccf qdetector_cccf_create_linear(liquid_float_complex * _sequence, + unsigned int _sequence_len, + int _ftype, + unsigned int _k, + unsigned int _m, + float _beta); + +// create detector from sequence of GMSK symbols +// _sequence : bit sequence +// _sequence_len : length of bit sequence +// _k : samples/symbol +// _m : filter delay +// _beta : excess bandwidth factor +qdetector_cccf qdetector_cccf_create_gmsk(unsigned char * _sequence, + unsigned int _sequence_len, + unsigned int _k, + unsigned int _m, + float _beta); + +void qdetector_cccf_destroy(qdetector_cccf _q); +void qdetector_cccf_print (qdetector_cccf _q); +void qdetector_cccf_reset (qdetector_cccf _q); + +// run detector, looking for sequence; return pointer to aligned, buffered samples +void * qdetector_cccf_execute(qdetector_cccf _q, + liquid_float_complex _x); + +// set detection threshold (should be between 0 and 1, good starting point is 0.5) +void qdetector_cccf_set_threshold(qdetector_cccf _q, + float _threshold); + +// set carrier offset search range +void qdetector_cccf_set_range(qdetector_cccf _q, + float _dphi_max); + +// access methods +unsigned int qdetector_cccf_get_seq_len (qdetector_cccf _q); // sequence length +const void * qdetector_cccf_get_sequence(qdetector_cccf _q); // pointer to sequence +unsigned int qdetector_cccf_get_buf_len (qdetector_cccf _q); // buffer length +float qdetector_cccf_get_tau (qdetector_cccf _q); // fractional timing offset estimate +float qdetector_cccf_get_gamma (qdetector_cccf _q); // channel gain +float qdetector_cccf_get_dphi (qdetector_cccf _q); // carrier frequency offset estimate +float qdetector_cccf_get_phi (qdetector_cccf _q); // carrier phase offset estimate + // // Pre-demodulation detector // @@ -3684,6 +4215,203 @@ int detector_cccf_correlate(detector_cccf _q, float * _gamma_hat); +// +// symbol streaming for testing (no meaningful data, just symbols) +// +#define SYMSTREAM_MANGLE_CFLOAT(name) LIQUID_CONCAT(symstreamcf,name) + +#define LIQUID_SYMSTREAM_DEFINE_API(SYMSTREAM,TO) \ + \ +typedef struct SYMSTREAM(_s) * SYMSTREAM(); \ + \ +/* create default symstream object */ \ +/* (LIQUID_RNYQUIST_ARKAISER, k=2, m=7, beta=0.3, QPSK) */ \ +SYMSTREAM() SYMSTREAM(_create)(void); \ + \ +/* create symstream object with linear modulation */ \ +/* _ftype : filter type (e.g. LIQUID_RNYQUIST_RRC) */ \ +/* _k : samples per symbol */ \ +/* _m : filter delay (symbols) */ \ +/* _beta : filter excess bandwidth */ \ +/* _ms : modulation scheme (e.g. LIQUID_MODEM_QPSK) */ \ +SYMSTREAM() SYMSTREAM(_create_linear)(int _ftype, \ + unsigned int _k, \ + unsigned int _m, \ + float _beta, \ + int _ms); \ + \ +/* destroy symstream object, freeing all internal memory */ \ +void SYMSTREAM(_destroy)(SYMSTREAM() _q); \ + \ +/* print symstream object's parameters */ \ +void SYMSTREAM(_print)(SYMSTREAM() _q); \ + \ +/* reset symstream internal state */ \ +void SYMSTREAM(_reset)(SYMSTREAM() _q); \ + \ +/* write block of samples to output buffer */ \ +/* _q : synchronizer object */ \ +/* _buf : output buffer [size: _buf_len x 1] */ \ +/* _buf_len: output buffer size */ \ +void SYMSTREAM(_write_samples)(SYMSTREAM() _q, \ + TO * _buf, \ + unsigned int _buf_len); \ + +LIQUID_SYMSTREAM_DEFINE_API(SYMSTREAM_MANGLE_CFLOAT, liquid_float_complex) + + + +// +// multi-signal source for testing (no meaningful data, just signals) +// +#define MSOURCE_MANGLE_CFLOAT(name) LIQUID_CONCAT(msourcecf,name) + +#define LIQUID_MSOURCE_DEFINE_API(MSOURCE,TO) \ + \ +typedef struct MSOURCE(_s) * MSOURCE(); \ + \ +/* create default msource object */ \ +MSOURCE() MSOURCE(_create)(void); \ + \ +/* destroy msource object */ \ +void MSOURCE(_destroy)(MSOURCE() _q); \ + \ +/* print msrouce object */ \ +void MSOURCE(_print)(MSOURCE() _q); \ + \ +/* reset msrouce object */ \ +void MSOURCE(_reset)(MSOURCE() _q); \ + \ +/* add signal sources */ \ +int MSOURCE(_add_tone) (MSOURCE() _q); \ +int MSOURCE(_add_noise)(MSOURCE() _q, float _bandwidth); \ +int MSOURCE(_add_modem)(MSOURCE() _q, \ + int _ms, \ + unsigned int _k, \ + unsigned int _m, \ + float _beta); \ + \ +/* remove signal */ \ +void MSOURCE(_remove)(MSOURCE() _q, int _id); \ + \ +/* enable/disable signal */ \ +void MSOURCE(_enable) (MSOURCE() _q, int _id); \ +void MSOURCE(_disable)(MSOURCE() _q, int _id); \ + \ +/* set signal gain */ \ +/* _q : msource object */ \ +/* _id : source id */ \ +/* _gain : signal gain */ \ +void MSOURCE(_set_gain)(MSOURCE() _q, \ + int _id, \ + float _gain_dB); \ + \ +/* set carrier offset to signal */ \ +/* _q : msource object */ \ +/* _id : source id */ \ +/* _fc : carrier offset, fc in [-0.5,0.5] */ \ +void MSOURCE(_set_frequency)(MSOURCE() _q, \ + int _id, \ + float _dphi); \ + \ +/* write block of samples to output buffer */ \ +/* _q : synchronizer object */ \ +/* _buf : output buffer [size: _buf_len x 1] */ \ +/* _buf_len: output buffer size */ \ +void MSOURCE(_write_samples)(MSOURCE() _q, \ + TO * _buf, \ + unsigned int _buf_len); \ + +LIQUID_MSOURCE_DEFINE_API(MSOURCE_MANGLE_CFLOAT, liquid_float_complex) + + + + +// +// Symbol tracking: AGC > symsync > EQ > carrier recovery +// +#define SYMTRACK_MANGLE_RRRF(name) LIQUID_CONCAT(symtrack_rrrf,name) +#define SYMTRACK_MANGLE_CCCF(name) LIQUID_CONCAT(symtrack_cccf,name) + +// large macro +// SYMTRACK : name-mangling macro +// T : data type, primitive +// TO : data type, output +// TC : data type, coefficients +// TI : data type, input +#define LIQUID_SYMTRACK_DEFINE_API(SYMTRACK,T,TO,TC,TI) \ + \ +typedef struct SYMTRACK(_s) * SYMTRACK(); \ + \ +/* create symtrack object with default parameters */ \ +/* _ftype : filter type (e.g. LIQUID_RNYQUIST_RRC) */ \ +/* _k : samples per symbol */ \ +/* _m : filter delay (symbols) */ \ +/* _beta : filter excess bandwidth */ \ +/* _ms : modulation scheme (e.g. LIQUID_MODEM_QPSK) */ \ +SYMTRACK() SYMTRACK(_create)(int _ftype, \ + unsigned int _k, \ + unsigned int _m, \ + float _beta, \ + int _ms); \ + \ +/* create symtrack object using default parameters */ \ +SYMTRACK() SYMTRACK(_create_default)(); \ + \ +/* destroy symtrack object, freeing all internal memory */ \ +void SYMTRACK(_destroy)(SYMTRACK() _q); \ + \ +/* print symtrack object's parameters */ \ +void SYMTRACK(_print)(SYMTRACK() _q); \ + \ +/* reset symtrack internal state */ \ +void SYMTRACK(_reset)(SYMTRACK() _q); \ + \ +/* set symtrack modulation scheme */ \ +void SYMTRACK(_set_modscheme)(SYMTRACK() _q, int _ms); \ + \ +/* set symtrack internal bandwidth */ \ +void SYMTRACK(_set_bandwidth)(SYMTRACK() _q, float _bw); \ + \ +/* adjust internal nco by requested phase */ \ +void SYMTRACK(_adjust_phase)(SYMTRACK() _q, T _dphi); \ + \ +/* execute synchronizer on single input sample */ \ +/* _q : synchronizer object */ \ +/* _x : input data sample */ \ +/* _y : output data array */ \ +/* _ny : number of samples written to output buffer */ \ +void SYMTRACK(_execute)(SYMTRACK() _q, \ + TI _x, \ + TO * _y, \ + unsigned int * _ny); \ + \ +/* execute synchronizer on input data array */ \ +/* _q : synchronizer object */ \ +/* _x : input data array */ \ +/* _nx : number of input samples */ \ +/* _y : output data array */ \ +/* _ny : number of samples written to output buffer */ \ +void SYMTRACK(_execute_block)(SYMTRACK() _q, \ + TI * _x, \ + unsigned int _nx, \ + TO * _y, \ + unsigned int * _ny); \ + +LIQUID_SYMTRACK_DEFINE_API(SYMTRACK_MANGLE_RRRF, + float, + float, + float, + float) + +LIQUID_SYMTRACK_DEFINE_API(SYMTRACK_MANGLE_CCCF, + float, + liquid_float_complex, + liquid_float_complex, + liquid_float_complex) + + + // // MODULE : math // @@ -3752,6 +4480,33 @@ float liquid_nchoosek(unsigned int _n, unsigned int _k); // Windowing functions // +// Modulation schemes available +#define LIQUID_WINDOW_NUM_FUNCTIONS (10) + +// prototypes +typedef enum { + LIQUID_WINDOW_UNKNOWN=0, // unknown/unsupported scheme + + LIQUID_WINDOW_HAMMING, // Hamming + LIQUID_WINDOW_HANN, // Hann + LIQUID_WINDOW_BLACKMANHARRIS, // Blackman-harris (4-term) + LIQUID_WINDOW_BLACKMANHARRIS7, // Blackman-harris (7-term) + LIQUID_WINDOW_KAISER, // Kaiser (beta factor unspecified) + LIQUID_WINDOW_FLATTOP, // flat top (includes negative values) + LIQUID_WINDOW_TRIANGULAR, // triangular + LIQUID_WINDOW_RCOSTAPER, // raised-cosine taper (taper size unspecified) + LIQUID_WINDOW_KBD, // Kaiser-Bessel derived window (beta factor unspecified) +} liquid_window_type; + +// pretty names for window +extern const char * liquid_window_str[LIQUID_WINDOW_NUM_FUNCTIONS][2]; + +// Print compact list of existing and available windowing functions +void liquid_print_windows(); + +// returns modulation_scheme based on input string +liquid_window_type liquid_getopt_str2window(const char * _str); + // Kaiser-Bessel derived window (single sample) // _n : index (0 <= _n < _N) // _N : length of filter (must be even) @@ -3771,23 +4526,54 @@ void liquid_kbd_window(unsigned int _n, float _beta, float * _w); // _dt : fractional sample offset float kaiser(unsigned int _n, unsigned int _N, - float _beta, - float _dt); + float _beta, + float _dt); // Hamming window // _n : window index // _N : full window length -float hamming(unsigned int _n, unsigned int _N); +float hamming(unsigned int _n, + unsigned int _N); // Hann window // _n : window index // _N : full window length -float hann(unsigned int _n, unsigned int _N); +float hann(unsigned int _n, + unsigned int _N); // Blackman-harris window // _n : window index // _N : full window length -float blackmanharris(unsigned int _n, unsigned int _N); +float blackmanharris(unsigned int _n, + unsigned int _N); + +// 7th order Blackman-harris window +// _n : window index +// _N : full window length +float blackmanharris7(unsigned int _n, + unsigned int _N); + +// Flat-top window +// _n : window index +// _N : full window length +float flattop(unsigned int _n, + unsigned int _N); + +// Triangular window +// _n : window index +// _N : full window length +// _L : triangle length, _L in {_N, _N+1, _N-1} +float triangular(unsigned int _n, + unsigned int _N, + unsigned int _L); + +// raised-cosine tapering window +// _n : window index +// _t : taper length +// _N : full window length +float liquid_rcostaper_windowf(unsigned int _n, + unsigned int _t, + unsigned int _N); // polynomials @@ -3988,121 +4774,305 @@ unsigned int liquid_totient(unsigned int _n); // MATRIX : name-mangling macro // T : data type #define LIQUID_MATRIX_DEFINE_API(MATRIX,T) \ -void MATRIX(_print)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx); \ -void MATRIX(_add)(T * _x, \ - T * _y, \ - T * _z, \ + \ +/* print array as matrix */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_print)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* add two matrices _x and _y saving the result in _z */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _y : input matrix [size: _r x _c] */ \ +/* _z : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_add)(T * _x, \ + T * _y, \ + T * _z, \ unsigned int _r, \ unsigned int _c); \ -void MATRIX(_sub)(T * _x, \ - T * _y, \ - T * _z, \ + \ +/* subtract two matrices _x and _y saving the result in _z */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _y : input matrix [size: _r x _c] */ \ +/* _z : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_sub)(T * _x, \ + T * _y, \ + T * _z, \ unsigned int _r, \ unsigned int _c); \ -void MATRIX(_pmul)(T * _x, \ - T * _y, \ - T * _z, \ + \ +/* perform point-wise multiplication of two matrices _x */ \ +/* and _y saving the result in _z */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _y : input matrix [size: _r x _c] */ \ +/* _z : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_pmul)(T * _x, \ + T * _y, \ + T * _z, \ unsigned int _r, \ unsigned int _c); \ -void MATRIX(_pdiv)(T * _x, \ - T * _y, \ - T * _z, \ + \ +/* perform point-wise division of two matrices _x and _y */ \ +/* saving the result in _z */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _y : input matrix [size: _r x _c] */ \ +/* _z : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_pdiv)(T * _x, \ + T * _y, \ + T * _z, \ unsigned int _r, \ unsigned int _c); \ + \ +/* multiply two matrices _x and _y storing the result in _z */ \ +/* NOTE: _rz = _rx, _cz = _cy, and _cx = _ry */ \ +/* _x : input matrix [size: _rx x _cx] */ \ +/* _y : input matrix [size: _ry x _cy] */ \ +/* _z : output matrix [size: _rz x _cz] */ \ void MATRIX(_mul)(T * _x, unsigned int _rx, unsigned int _cx, \ T * _y, unsigned int _ry, unsigned int _cy, \ T * _z, unsigned int _rz, unsigned int _cz); \ -void MATRIX(_div)(T * _x, T * _y, T * _z, unsigned int _n); \ -T MATRIX(_det)(T * _x, unsigned int _r, unsigned int _c); \ -void MATRIX(_trans)(T * _x, unsigned int _rx, unsigned int _cx);\ -void MATRIX(_hermitian)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx); \ + \ +/* solve _x = _y*_z for _z for square matrices of size _n */ \ +/* _x : input matrix [size: _n x _n] */ \ +/* _y : input matrix [size: _n x _n] */ \ +/* _z : output matrix [size: _n x _n] */ \ +void MATRIX(_div)(T * _x, \ + T * _y, \ + T * _z, \ + unsigned int _n); \ + \ +/* compute the determinant of a square matrix _x */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +T MATRIX(_det)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* compute the in-place transpose of the matrix _x */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_trans)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* compute the in-place Hermitian transpose of _x */ \ +/* _x : input matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_hermitian)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ \ /* compute x*x' on [m x n] matrix, result: [m x m] */ \ -void MATRIX(_mul_transpose)(T * _x, \ +/* _x : input matrix [size: _m x _n] */ \ +/* _m : input rows */ \ +/* _n : input columns */ \ +/* _xxT : output matrix [size: _m x _m] */ \ +void MATRIX(_mul_transpose)(T * _x, \ unsigned int _m, \ unsigned int _n, \ - T * _xxT); \ -/* compute x'*x on [m x n] matrix, result: [n x n] */ \ -void MATRIX(_transpose_mul)(T * _x, \ - unsigned int _m, \ - unsigned int _n, \ - T * _xTx); \ -/* compute x*x.' on [m x n] matrix, result: [m x m] */ \ -void MATRIX(_mul_hermitian)(T * _x, \ - unsigned int _m, \ - unsigned int _n, \ - T * _xxH); \ -/* compute x.'*x on [m x n] matrix, result: [n x n] */ \ -void MATRIX(_hermitian_mul)(T * _x, \ - unsigned int _m, \ - unsigned int _n, \ - T * _xHx); \ + T * _xxT); \ \ +/* compute x'*x on [m x n] matrix, result: [n x n] */ \ +/* _x : input matrix [size: _m x _n] */ \ +/* _m : input rows */ \ +/* _n : input columns */ \ +/* _xTx : output matrix [size: _n x _n] */ \ +void MATRIX(_transpose_mul)(T * _x, \ + unsigned int _m, \ + unsigned int _n, \ + T * _xTx); \ + \ +/* compute x*x.' on [m x n] matrix, result: [m x m] */ \ +/* _x : input matrix [size: _m x _n] */ \ +/* _m : input rows */ \ +/* _n : input columns */ \ +/* _xxH : output matrix [size: _m x _m] */ \ +void MATRIX(_mul_hermitian)(T * _x, \ + unsigned int _m, \ + unsigned int _n, \ + T * _xxH); \ + \ +/* compute x.'*x on [m x n] matrix, result: [n x n] */ \ +/* _x : input matrix [size: _m x _n] */ \ +/* _m : input rows */ \ +/* _n : input columns */ \ +/* _xHx : output matrix [size: _n x _n] */ \ +void MATRIX(_hermitian_mul)(T * _x, \ + unsigned int _m, \ + unsigned int _n, \ + T * _xHx); \ + \ + \ +/* augment two matrices _x and _y storing the result in _z */ \ +/* NOTE: _rz = _rx = _ry, _rx = _ry, and _cz = _cx + _cy */ \ +/* _x : input matrix [size: _rx x _cx] */ \ +/* _y : input matrix [size: _ry x _cy] */ \ +/* _z : output matrix [size: _rz x _cz] */ \ void MATRIX(_aug)(T * _x, unsigned int _rx, unsigned int _cx, \ T * _y, unsigned int _ry, unsigned int _cy, \ T * _z, unsigned int _rz, unsigned int _cz); \ -void MATRIX(_inv)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx); \ -void MATRIX(_eye)(T * _x, \ + \ +/* compute the inverse of a square matrix _x */ \ +/* _x : input/output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_inv)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* generate the identity square matrix of size _n */ \ +/* _x : output matrix [size: _n x _n] */ \ +/* _n : dimensions of _x */ \ +void MATRIX(_eye)(T * _x, \ unsigned int _n); \ -void MATRIX(_ones)(T * _x, \ + \ +/* generate the all-ones matrix of size _n */ \ +/* _x : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_ones)(T * _n, \ unsigned int _r, \ unsigned int _c); \ -void MATRIX(_zeros)(T * _x, \ + \ +/* generate the all-zeros matrix of size _n */ \ +/* _x : output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_zeros)(T * _x, \ unsigned int _r, \ unsigned int _c); \ -void MATRIX(_gjelim)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx); \ -void MATRIX(_pivot)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx, \ - unsigned int _r, \ - unsigned int _c); \ -void MATRIX(_swaprows)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx, \ - unsigned int _r1, \ - unsigned int _r2); \ -void MATRIX(_linsolve)(T * _A, \ - unsigned int _r, \ - T * _b, \ - T * _x, \ - void * _opts); \ -void MATRIX(_cgsolve)(T * _A, \ - unsigned int _r, \ - T * _b, \ - T * _x, \ - void * _opts); \ -void MATRIX(_ludecomp_crout)(T * _x, \ + \ +/* perform Gauss-Jordan elimination on matrix _x */ \ +/* _x : input/output matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +void MATRIX(_gjelim)(T * _x, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* pivot on element _x[_r,_c] */ \ +/* _x : output matrix [size: _rx x _cx] */ \ +/* _rx : rows of _x */ \ +/* _cx : columns of _x */ \ +/* _r : pivot row */ \ +/* _c : pivot column */ \ +void MATRIX(_pivot)(T * _x, \ + unsigned int _rx, \ + unsigned int _cx, \ + unsigned int _r, \ + unsigned int _c); \ + \ +/* swap rows _r1 and _r2 of matrix _x */ \ +/* _x : input/output matrix [size: _rx x _cx] */ \ +/* _rx : rows of _x */ \ +/* _cx : columns of _x */ \ +/* _r1 : first row to swap */ \ +/* _r2 : second row to swap */ \ +void MATRIX(_swaprows)(T * _x, \ + unsigned int _rx, \ + unsigned int _cx, \ + unsigned int _r1, \ + unsigned int _r2); \ + \ +/* solve linear system of _n equations: _A*_x = _b */ \ +/* _A : system matrix [size: _n x _n] */ \ +/* _n : system size */ \ +/* _b : equality vector [size: _n x 1] */ \ +/* _x : solution vector [size: _n x 1] */ \ +/* _opts : options (ignored for now) */ \ +void MATRIX(_linsolve)(T * _A, \ + unsigned int _n, \ + T * _b, \ + T * _x, \ + void * _opts); \ + \ +/* solve linear system of equations using conjugate */ \ +/* gradient method */ \ +/* _A : symmetric positive definite square matrix */ \ +/* _n : system dimension */ \ +/* _b : equality [size: _n x 1] */ \ +/* _x : solution estimate [size: _n x 1] */ \ +/* _opts : options (ignored for now) */ \ +void MATRIX(_cgsolve)(T * _A, \ + unsigned int _n, \ + T * _b, \ + T * _x, \ + void * _opts); \ + \ +/* L/U/P decomposition, Crout's method */ \ +/* _x : input/output matrix [size: _rx x _cx] */ \ +/* _rx : rows of _x */ \ +/* _cx : columns of _x */ \ +/* _L : first row to swap */ \ +/* _U : first row to swap */ \ +/* _P : first row to swap */ \ +void MATRIX(_ludecomp_crout)(T * _x, \ unsigned int _rx, \ unsigned int _cx, \ - T * _L, \ - T * _U, \ - T * _P); \ -void MATRIX(_ludecomp_doolittle)(T * _x, \ + T * _L, \ + T * _U, \ + T * _P); \ + \ +/* L/U/P decomposition, Doolittle's method */ \ +/* _x : input/output matrix [size: _rx x _cx] */ \ +/* _rx : rows of _x */ \ +/* _cx : columns of _x */ \ +/* _L : first row to swap */ \ +/* _U : first row to swap */ \ +/* _P : first row to swap */ \ +void MATRIX(_ludecomp_doolittle)(T * _x, \ unsigned int _rx, \ unsigned int _cx, \ - T * _L, \ - T * _U, \ - T * _P); \ -void MATRIX(_gramschmidt)(T * _A, \ - unsigned int _rx, \ - unsigned int _cx, \ - T * _U); \ -void MATRIX(_qrdecomp_gramschmidt)(T * _x, \ - unsigned int _rx, \ - unsigned int _cx, \ - T * _Q, \ - T * _R); \ -void MATRIX(_chol)(T * _A, \ + T * _L, \ + T * _U, \ + T * _P); \ + \ +/* Orthnormalization using the Gram-Schmidt algorithm */ \ +/* _A : input matrix [size: _r x _c] */ \ +/* _r : rows */ \ +/* _c : columns */ \ +/* _v : output matrix */ \ +void MATRIX(_gramschmidt)(T * _A, \ + unsigned int _r, \ + unsigned int _c, \ + T * _v); \ + \ +/* Q/R decomposition using the Gram-Schmidt algorithm such */ \ +/* that _A = _Q*_R and _Q^T * _Q = _In and _R is a diagonal */ \ +/* matrix */ \ +/* NOTE: all matrices are square */ \ +/* _A : input matrix [size: _m x _m] */ \ +/* _m : rows */ \ +/* _n : columns (same as cols) */ \ +/* _Q : output matrix [size: _m x _m] */ \ +/* _R : output matrix [size: _m x _m] */ \ +void MATRIX(_qrdecomp_gramschmidt)(T * _A, \ + unsigned int _m, \ + unsigned int _n, \ + T * _Q, \ + T * _R); \ + \ +/* Compute Cholesky decomposition of a symmetric/Hermitian */ \ +/* positive-definite matrix as A = L * L^T */ \ +/* _A : input square matrix [size: _n x _n] */ \ +/* _n : input matrix dimension */ \ +/* _L : output lower-triangular matrix */ \ +void MATRIX(_chol)(T * _A, \ unsigned int _n, \ - T * _L); \ + T * _L); \ #define matrix_access(X,R,C,r,c) ((X)[(r)*(C)+(c)]) @@ -4360,41 +5330,46 @@ void liquid_unpack_soft_bits(unsigned int _sym_in, /* define struct pointer */ \ typedef struct MODEM(_s) * MODEM(); \ \ -/* create digital modem object, allocating memory as necessary */ \ -MODEM() MODEM(_create)(modulation_scheme _scheme); \ +/* create digital modem object */ \ +MODEM() MODEM(_create)(modulation_scheme _scheme); \ \ -/* create arbitrary digital modem object */ \ -MODEM() MODEM(_create_arbitrary)(TC * _table, unsigned int _M); \ +/* create arbitrary digital modem object */ \ +/* _table : array of complex constellation points */ \ +/* _M : modulation order and table size */ \ +MODEM() MODEM(_create_arbitrary)(TC * _table, \ + unsigned int _M); \ \ -/* recreate modulation scheme, re-allocating memory as necessary */ \ -MODEM() MODEM(_recreate)(MODEM() _q, \ +/* recreate modulation scheme, re-allocating memory as */ \ +/* necessary */ \ +MODEM() MODEM(_recreate)(MODEM() _q, \ modulation_scheme _scheme); \ \ void MODEM(_destroy)(MODEM() _q); \ void MODEM(_print)( MODEM() _q); \ void MODEM(_reset)( MODEM() _q); \ \ -/* generate random symbol */ \ +/* generate random symbol */ \ unsigned int MODEM(_gen_rand_sym)(MODEM() _q); \ \ /* Accessor functions */ \ -unsigned int MODEM(_get_bps)(MODEM() _q); \ +unsigned int MODEM(_get_bps) (MODEM() _q); \ +modulation_scheme MODEM(_get_scheme)(MODEM() _q); \ \ /* generic modulate function; simply queries modem scheme */ \ /* and calls appropriate subroutine */ \ /* _q : modem object */ \ /* _s : input symbol */ \ /* _x : output sample */ \ -void MODEM(_modulate)(MODEM() _q, \ +void MODEM(_modulate)(MODEM() _q, \ unsigned int _s, \ - TC *_y); \ + TC * _y); \ \ /* generic hard-decision demodulation function */ \ /* _q : modem object */ \ /* _x : input sample */ \ /* _s : output symbol */ \ -void MODEM(_demodulate)(MODEM() _q, \ - TC _x, \ +void MODEM(_demodulate)(MODEM() _q, \ + TC _x, \ unsigned int * _s); \ \ /* generic soft-decision demodulation function */ \ @@ -4402,14 +5377,14 @@ void MODEM(_demodulate)(MODEM() _q, \ /* _x : input sample */ \ /* _s : output hard symbol */ \ /* _soft_bits : output soft bits */ \ -void MODEM(_demodulate_soft)(MODEM() _q, \ - TC _x, \ +void MODEM(_demodulate_soft)(MODEM() _q, \ + TC _x, \ unsigned int * _s, \ unsigned char * _soft_bits); \ \ /* get demodulator's estimated transmit sample */ \ void MODEM(_get_demodulator_sample)(MODEM() _q, \ - TC * _x_hat); \ + TC * _x_hat); \ \ /* get demodulator phase error */ \ float MODEM(_get_demodulator_phase_error)(MODEM() _q); \ @@ -4461,6 +5436,176 @@ void gmskdem_demodulate(gmskdem _q, liquid_float_complex * _y, unsigned int * _sym); +// +// continuous phase frequency-shift keying (CP-FSK) modems +// + +// CP-FSK filter prototypes +typedef enum { + LIQUID_CPFSK_SQUARE=0, // square pulse + LIQUID_CPFSK_RCOS_FULL, // raised-cosine (full response) + LIQUID_CPFSK_RCOS_PARTIAL, // raised-cosine (partial response) + LIQUID_CPFSK_GMSK, // Gauss minimum-shift keying pulse +} liquid_cpfsk_filter; + +// CP-FSK modulator +typedef struct cpfskmod_s * cpfskmod; + +// create cpfskmod object (frequency modulator) +// _bps : bits per symbol, _bps > 0 +// _h : modulation index, _h > 0 +// _k : samples/symbol, _k > 1, _k even +// _m : filter delay (symbols), _m > 0 +// _beta : filter bandwidth parameter, _beta > 0 +// _type : filter type (e.g. LIQUID_CPFSK_SQUARE) +cpfskmod cpfskmod_create(unsigned int _bps, + float _h, + unsigned int _k, + unsigned int _m, + float _beta, + int _type); +//cpfskmod cpfskmod_create_msk(unsigned int _k); +//cpfskmod cpfskmod_create_gmsk(unsigned int _k, float _BT); + +// destroy cpfskmod object +void cpfskmod_destroy(cpfskmod _q); + +// print cpfskmod object internals +void cpfskmod_print(cpfskmod _q); + +// reset state +void cpfskmod_reset(cpfskmod _q); + +// get transmit delay [symbols] +unsigned int cpfskmod_get_delay(cpfskmod _q); + +// modulate sample +// _q : frequency modulator object +// _s : input symbol +// _y : output sample array [size: _k x 1] +void cpfskmod_modulate(cpfskmod _q, + unsigned int _s, + liquid_float_complex * _y); + + + +// CP-FSK demodulator +typedef struct cpfskdem_s * cpfskdem; + +// create cpfskdem object (frequency modulator) +// _bps : bits per symbol, _bps > 0 +// _h : modulation index, _h > 0 +// _k : samples/symbol, _k > 1, _k even +// _m : filter delay (symbols), _m > 0 +// _beta : filter bandwidth parameter, _beta > 0 +// _type : filter type (e.g. LIQUID_CPFSK_SQUARE) +cpfskdem cpfskdem_create(unsigned int _bps, + float _h, + unsigned int _k, + unsigned int _m, + float _beta, + int _type); +//cpfskdem cpfskdem_create_msk(unsigned int _k); +//cpfskdem cpfskdem_create_gmsk(unsigned int _k, float _BT); + +// destroy cpfskdem object +void cpfskdem_destroy(cpfskdem _q); + +// print cpfskdem object internals +void cpfskdem_print(cpfskdem _q); + +// reset state +void cpfskdem_reset(cpfskdem _q); + +// get receive delay [symbols] +unsigned int cpfskdem_get_delay(cpfskdem _q); + +#if 0 +// demodulate array of samples +// _q : continuous-phase frequency demodulator object +// _y : input sample array [size: _n x 1] +// _n : input sample array length +// _s : output symbol array +// _nw : number of output symbols written +void cpfskdem_demodulate(cpfskdem _q, + liquid_float_complex * _y, + unsigned int _n, + unsigned int * _s, + unsigned int * _nw); +#else +// demodulate array of samples, assuming perfect timing +// _q : continuous-phase frequency demodulator object +// _y : input sample array [size: _k x 1] +unsigned int cpfskdem_demodulate(cpfskdem _q, + liquid_float_complex * _y); +#endif + + + +// +// M-ary frequency-shift keying (MFSK) modems +// + +// FSK modulator +typedef struct fskmod_s * fskmod; + +// create fskmod object (frequency modulator) +// _m : bits per symbol, _bps > 0 +// _k : samples/symbol, _k >= 2^_m +// _bandwidth : total signal bandwidth, (0,0.5) +fskmod fskmod_create(unsigned int _m, + unsigned int _k, + float _bandwidth); + +// destroy fskmod object +void fskmod_destroy(fskmod _q); + +// print fskmod object internals +void fskmod_print(fskmod _q); + +// reset state +void fskmod_reset(fskmod _q); + +// modulate sample +// _q : frequency modulator object +// _s : input symbol +// _y : output sample array [size: _k x 1] +void fskmod_modulate(fskmod _q, + unsigned int _s, + liquid_float_complex * _y); + + + +// FSK demodulator +typedef struct fskdem_s * fskdem; + +// create fskdem object (frequency demodulator) +// _m : bits per symbol, _bps > 0 +// _k : samples/symbol, _k >= 2^_m +// _bandwidth : total signal bandwidth, (0,0.5) +fskdem fskdem_create(unsigned int _m, + unsigned int _k, + float _bandwidth); + +// destroy fskdem object +void fskdem_destroy(fskdem _q); + +// print fskdem object internals +void fskdem_print(fskdem _q); + +// reset state +void fskdem_reset(fskdem _q); + +// demodulate symbol, assuming perfect symbol timing +// _q : fskdem object +// _y : input sample array [size: _k x 1] +unsigned int fskdem_demodulate(fskdem _q, + liquid_float_complex * _y); + +// get demodulator frequency error +float fskdem_get_frequency_error(fskdem _q); + + // // Analog frequency modulator // @@ -4509,8 +5654,6 @@ void FREQMOD(_modulate_block)(FREQMOD() _q, \ // define freqmod APIs LIQUID_FREQMOD_DEFINE_API(LIQUID_FREQMOD_MANGLE_FLOAT,float,liquid_float_complex) - - // // Analog frequency demodulator // @@ -4595,11 +5738,20 @@ void ampmodem_modulate(ampmodem _fm, float _x, liquid_float_complex *_y); +void ampmodem_modulate_block(ampmodem _q, + float * _m, + unsigned int _n, + liquid_float_complex *_s); + // demodulate sample void ampmodem_demodulate(ampmodem _fm, liquid_float_complex _y, float *_x); +void ampmodem_demodulate_block(ampmodem _q, + liquid_float_complex * _r, + unsigned int _n, + float * _m); // // MODULE : multichannel @@ -4768,9 +5920,19 @@ LIQUID_FIRPFBCH2_DEFINE_API(FIRPFBCH2_MANGLE_CRCF, // initialize default subcarrier allocation // _M : number of subcarriers // _p : output subcarrier allocation array, [size: _M x 1] -void ofdmframe_init_default_sctype(unsigned int _M, +void ofdmframe_init_default_sctype(unsigned int _M, unsigned char * _p); +// initialize default subcarrier allocation +// _M : number of subcarriers +// _f0 : lower frequency band, _f0 in [-0.5,0.5] +// _f1 : upper frequency band, _f1 in [-0.5,0.5] +// _p : output subcarrier allocation array, [size: _M x 1] +void ofdmframe_init_sctype_range(unsigned int _M, + float _f0, + float _f1, + unsigned char * _p); + // validate subcarrier type (count number of null, pilot, and data // subcarriers in the allocation) // _p : subcarrier allocation array, [size: _M x 1] @@ -4918,7 +6080,7 @@ void NCO(_sincos)(NCO() _q, T* _s, T* _c); \ void NCO(_cexpf)(NCO() _q, TC * _y); \ \ /* pll : phase-locked loop */ \ -void NCO(_pll_set_bandwidth)(NCO() _q, T _b); \ +void NCO(_pll_set_bandwidth)(NCO() _q, T _bandwidth); \ void NCO(_pll_step)(NCO() _q, T _dphi); \ \ /* Rotate input sample up by NCO angle (no stepping) */ \ @@ -5104,7 +6266,7 @@ void chromosome_print(chromosome _c); void chromosome_printf(chromosome _c); // clear chromosome (set traits to zero) -void chromosome_clear(chromosome _c); +void chromosome_reset(chromosome _c); // initialize chromosome on integer values void chromosome_init(chromosome _c, @@ -5356,7 +6518,7 @@ bsequence bsequence_create(unsigned int num_bits); void bsequence_destroy(bsequence _bs); // Clear binary sequence (set to 0's) -void bsequence_clear(bsequence _bs); +void bsequence_reset(bsequence _bs); // initialize sequence on external array void bsequence_init(bsequence _bs, @@ -5724,6 +6886,5 @@ void liquid_vectorf_add(float * _a, #pragma warning( pop ) #endif - #endif // __LIQUID_H__ diff --git a/external/liquid-dsp/makefile.mingw32 b/external/liquid-dsp/makefile.mingw32 new file mode 100644 index 0000000..e34061e --- /dev/null +++ b/external/liquid-dsp/makefile.mingw32 @@ -0,0 +1,1687 @@ +# Copyright (c) 2007 - 2016 Joseph Gaeddert +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# +# Makefile for liquid-dsp libraries +# +# Targets: +# all : dynamic shared-library object (e.g. libliquid.so) +# install : install the dynamic shared library object and +# header file(s) +# uninstall : uninstall the library and header file(s) +# clean : clean all targets (bench, check, examples, etc) +# distclean : removes everything except the originally distributed files +# check : build and run autotest program +# bench : build and run benchmarking program +# examples : build all examples +# sandbox : build all sandbox examples +# world : build absolutely everything (but don't install) +# +# clean-modules : clean all modules +# clean-examples : clean examples programs +# clean-sandbox : clean sandbox programs +# clean-check : clean autotest program +# clean-bench : clean benchmark program +# + +# autoconf initialization macros +NAME := liquid-dsp +VERSION := 1.3.0 +BUGREPORT := support@liquidsdr.org + +# paths +srcdir := . +libdir := ${exec_prefix}/lib +prefix := /usr/local +exec_prefix := ${prefix} +include_dirs := . include + +# programs +CC := gcc +MV := mv -f +RM := rm -f +SED := /usr/bin/sed +GREP := /usr/bin/grep +AR := ar +RANLIB := ranlib + +# flags +INCLUDE_CFLAGS = $(addprefix -I ,$(include_dirs)) + +#MINGW: optimizations goes here +CONFIG_CFLAGS = -m32 -O3 -msse3 -ffast-math + +# -g : debugging info +CFLAGS += $(INCLUDE_CFLAGS) -Wall -fPIC $(CONFIG_CFLAGS) + +#LDFLAGS += -lm -lc +#MINGW: +LDFLAGS += -lmsvcrt + +ARFLAGS = r +PATHSEP = / + +# +# liquid headers +# +headers_install := liquid.h +headers := $(headers_install) liquid.internal.h +include_headers := $(addprefix include/,$(headers)) + + +## +## liquid-dsp modules +## + +all: + +# additional targets to clean +extra_clean := + +# additional autotest objects +autotest_extra_obj := + +# additional benchmark objects +benchmark_extra_obj := + +# +# MODULE : agc - automatic gain control +# + +# object files +agc_objects = \ + src/agc/src/agc_crcf.o \ + src/agc/src/agc_rrrf.o \ + +# explicit targets and dependencies +src/agc/src/agc_crcf.o : %.o : %.c src/agc/src/agc.c $(include_headers) +src/agc/src/agc_rrrf.o : %.o : %.c src/agc/src/agc.c $(include_headers) + +# autotests +agc_autotests := \ + src/agc/tests/agc_crcf_autotest.c \ + +# benchmarks +agc_benchmarks := \ + src/agc/bench/agc_crcf_benchmark.c \ + +# +# MODULE : audio +# + +# described below +audio_objects := \ + src/audio/src/cvsd.o \ + +src/cvsd/src/cvsd.o : %.o : %.c $(include_headers) + + +audio_autotests := \ + src/audio/tests/cvsd_autotest.c \ + +audio_benchmarks := \ + src/audio/bench/cvsd_benchmark.c \ + + +# +# MODULE : buffer +# + +buffer_objects := \ + src/buffer/src/bufferf.o \ + src/buffer/src/buffercf.o \ + +buffer_includes := \ + src/buffer/src/cbuffer.c \ + src/buffer/src/wdelay.c \ + src/buffer/src/window.c \ + +src/buffer/src/bufferf.o : %.o : %.c $(include_headers) $(buffer_includes) + +src/buffer/src/buffercf.o : %.o : %.c $(include_headers) $(buffer_includes) + + +buffer_autotests := \ + src/buffer/tests/cbuffer_autotest.c \ + src/buffer/tests/wdelay_autotest.c \ + src/buffer/tests/window_autotest.c \ + +# src/buffer/tests/sbuffer_autotest.c + +buffer_benchmarks := \ + src/buffer/bench/cbuffercf_benchmark.c \ + src/buffer/bench/window_push_benchmark.c \ + src/buffer/bench/window_read_benchmark.c \ + +# +# MODULE : channel +# + +channel_objects := \ + src/channel/src/channel_cccf.o \ + +channel_includes := \ + src/channel/src/channel.c \ + src/channel/src/tvmpch.c \ + +src/channel/src/channel_cccf.o : %.o : %.c $(include_headers) $(channel_includes) + +channel_autotests := \ + +#src/channel/tests/channel_cccf_autotest.c + +channel_benchmarks := \ + +#src/channel/bench/channel_cccf_benchmark.c + +# +# MODULE : dotprod +# +dotprod_objects := \ + src/dotprod/src/dotprod_cccf.mmx.o src/dotprod/src/dotprod_crcf.mmx.o src/dotprod/src/dotprod_rrrf.mmx.o src/dotprod/src/sumsq.mmx.o \ + +src/dotprod/src/dotprod_cccf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/dotprod_crcf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/dotprod_rrrf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/sumsq.o : %.o : %.c $(include_headers) + +# specific machine architectures + +# AltiVec +src/dotprod/src/dotprod_rrrf.av.o : %.o : %.c $(include_headers) + +# MMX/SSE2 +src/dotprod/src/dotprod_rrrf.mmx.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_crcf.mmx.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_cccf.mmx.o : %.o : %.c $(include_headers) + +src/dotprod/src/sumsq.mmx.o : %.o : %.c $(include_headers) + +# SSE4.1/2 +src/dotprod/src/dotprod_rrrf.sse4.o : %.o : %.c $(include_headers) + +# ARM Neon +src/dotprod/src/dotprod_rrrf.neon.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_crcf.neon.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_cccf.neon.o : %.o : %.c $(include_headers) + +dotprod_autotests := \ + src/dotprod/tests/dotprod_rrrf_autotest.c \ + src/dotprod/tests/dotprod_crcf_autotest.c \ + src/dotprod/tests/dotprod_cccf_autotest.c \ + src/dotprod/tests/sumsqf_autotest.c \ + src/dotprod/tests/sumsqcf_autotest.c \ + +dotprod_benchmarks := \ + src/dotprod/bench/dotprod_cccf_benchmark.c \ + src/dotprod/bench/dotprod_crcf_benchmark.c \ + src/dotprod/bench/dotprod_rrrf_benchmark.c \ + src/dotprod/bench/sumsqf_benchmark.c \ + src/dotprod/bench/sumsqcf_benchmark.c \ + +# +# MODULE : equalization +# +equalization_objects := \ + src/equalization/src/equalizer_cccf.o \ + src/equalization/src/equalizer_rrrf.o \ + + +$(equalization_objects) : %.o : %.c $(include_headers) src/equalization/src/eqlms.c src/equalization/src/eqrls.c + + +# autotests +equalization_autotests := \ + src/equalization/tests/eqlms_cccf_autotest.c \ + src/equalization/tests/eqrls_rrrf_autotest.c \ + + +# benchmarks +equalization_benchmarks := \ + src/equalization/bench/eqlms_cccf_benchmark.c \ + src/equalization/bench/eqrls_cccf_benchmark.c \ + +# +# MODULE : fec - forward error-correction +# +fec_objects := \ + src/fec/src/crc.o \ + src/fec/src/fec.o \ + src/fec/src/fec_conv.o \ + src/fec/src/fec_conv_poly.o \ + src/fec/src/fec_conv_pmatrix.o \ + src/fec/src/fec_conv_punctured.o \ + src/fec/src/fec_golay2412.o \ + src/fec/src/fec_hamming74.o \ + src/fec/src/fec_hamming84.o \ + src/fec/src/fec_hamming128.o \ + src/fec/src/fec_hamming1511.o \ + src/fec/src/fec_hamming3126.o \ + src/fec/src/fec_hamming128_gentab.o \ + src/fec/src/fec_pass.o \ + src/fec/src/fec_rep3.o \ + src/fec/src/fec_rep5.o \ + src/fec/src/fec_rs.o \ + src/fec/src/fec_secded2216.o \ + src/fec/src/fec_secded3932.o \ + src/fec/src/fec_secded7264.o \ + src/fec/src/interleaver.o \ + src/fec/src/packetizer.o \ + src/fec/src/sumproduct.o \ + + +# list explicit targets and dependencies here +$(fec_objects) : %.o : %.c $(include_headers) + +# autotests +fec_autotests := \ + src/fec/tests/crc_autotest.c \ + src/fec/tests/fec_autotest.c \ + src/fec/tests/fec_soft_autotest.c \ + src/fec/tests/fec_golay2412_autotest.c \ + src/fec/tests/fec_hamming74_autotest.c \ + src/fec/tests/fec_hamming84_autotest.c \ + src/fec/tests/fec_hamming128_autotest.c \ + src/fec/tests/fec_hamming1511_autotest.c \ + src/fec/tests/fec_hamming3126_autotest.c \ + src/fec/tests/fec_reedsolomon_autotest.c \ + src/fec/tests/fec_rep3_autotest.c \ + src/fec/tests/fec_rep5_autotest.c \ + src/fec/tests/fec_secded2216_autotest.c \ + src/fec/tests/fec_secded3932_autotest.c \ + src/fec/tests/fec_secded7264_autotest.c \ + src/fec/tests/interleaver_autotest.c \ + src/fec/tests/packetizer_autotest.c \ + + +# benchmarks +fec_benchmarks := \ + src/fec/bench/crc_benchmark.c \ + src/fec/bench/fec_encode_benchmark.c \ + src/fec/bench/fec_decode_benchmark.c \ + src/fec/bench/fecsoft_decode_benchmark.c \ + src/fec/bench/sumproduct_benchmark.c \ + src/fec/bench/interleaver_benchmark.c \ + src/fec/bench/packetizer_decode_benchmark.c \ + +# +# MODULE : fft - fast Fourier transforms, discrete sine/cosine transforms, etc. +# + +fft_objects := \ + src/fft/src/fftf.o \ + src/fft/src/spgramcf.o \ + src/fft/src/spgramf.o \ + src/fft/src/fft_utilities.o \ + +# explicit targets and dependencies +fft_includes := \ + src/fft/src/fft_common.c \ + src/fft/src/fft_dft.c \ + src/fft/src/fft_radix2.c \ + src/fft/src/fft_mixed_radix.c \ + src/fft/src/fft_rader.c \ + src/fft/src/fft_rader2.c \ + src/fft/src/fft_r2r_1d.c \ + +src/fft/src/fftf.o : %.o : %.c $(include_headers) $(fft_includes) +src/fft/src/asgram.o : %.o : %.c $(include_headers) +src/fft/src/dct.o : %.o : %.c $(include_headers) +src/fft/src/fftf.o : %.o : %.c $(include_headers) +src/fft/src/fft_utilities.o : %.o : %.c $(include_headers) +src/fft/src/mdct.o : %.o : %.c $(include_headers) +src/fft/src/spgramcf.o : %.o : %.c $(include_headers) src/fft/src/asgram.c src/fft/src/spgram.c +src/fft/src/spgramf.o : %.o : %.c $(include_headers) src/fft/src/asgram.c src/fft/src/spgram.c + +# fft autotest scripts +fft_autotests := \ + src/fft/tests/fft_small_autotest.c \ + src/fft/tests/fft_radix2_autotest.c \ + src/fft/tests/fft_composite_autotest.c \ + src/fft/tests/fft_prime_autotest.c \ + src/fft/tests/fft_r2r_autotest.c \ + src/fft/tests/fft_shift_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/fft/tests/fft_runtest.o \ + src/fft/tests/data/fft_data_2.o \ + src/fft/tests/data/fft_data_3.o \ + src/fft/tests/data/fft_data_4.o \ + src/fft/tests/data/fft_data_5.o \ + src/fft/tests/data/fft_data_6.o \ + src/fft/tests/data/fft_data_7.o \ + src/fft/tests/data/fft_data_8.o \ + src/fft/tests/data/fft_data_9.o \ + src/fft/tests/data/fft_data_10.o \ + src/fft/tests/data/fft_data_16.o \ + src/fft/tests/data/fft_data_17.o \ + src/fft/tests/data/fft_data_20.o \ + src/fft/tests/data/fft_data_21.o \ + src/fft/tests/data/fft_data_22.o \ + src/fft/tests/data/fft_data_24.o \ + src/fft/tests/data/fft_data_26.o \ + src/fft/tests/data/fft_data_30.o \ + src/fft/tests/data/fft_data_32.o \ + src/fft/tests/data/fft_data_35.o \ + src/fft/tests/data/fft_data_36.o \ + src/fft/tests/data/fft_data_43.o \ + src/fft/tests/data/fft_data_48.o \ + src/fft/tests/data/fft_data_63.o \ + src/fft/tests/data/fft_data_64.o \ + src/fft/tests/data/fft_data_79.o \ + src/fft/tests/data/fft_data_92.o \ + src/fft/tests/data/fft_data_96.o \ + src/fft/tests/data/fft_data_120.o \ + src/fft/tests/data/fft_data_130.o \ + src/fft/tests/data/fft_data_157.o \ + src/fft/tests/data/fft_data_192.o \ + src/fft/tests/data/fft_data_317.o \ + src/fft/tests/data/fft_data_509.o \ + src/fft/tests/data/fft_r2rdata_8.o \ + src/fft/tests/data/fft_r2rdata_27.o \ + src/fft/tests/data/fft_r2rdata_32.o \ + +# fft benchmark scripts +fft_benchmarks := \ + src/fft/bench/fft_composite_benchmark.c \ + src/fft/bench/fft_prime_benchmark.c \ + src/fft/bench/fft_radix2_benchmark.c \ + src/fft/bench/fft_r2r_benchmark.c \ + +# additional benchmark objects +benchmark_extra_obj := \ + src/fft/bench/fft_runbench.o \ + +# +# MODULE : filter +# + +filter_objects := \ + src/filter/src/bessel.o \ + src/filter/src/butter.o \ + src/filter/src/cheby1.o \ + src/filter/src/cheby2.o \ + src/filter/src/ellip.o \ + src/filter/src/filter_rrrf.o \ + src/filter/src/filter_crcf.o \ + src/filter/src/filter_cccf.o \ + src/filter/src/firdes.o \ + src/filter/src/firdespm.o \ + src/filter/src/fnyquist.o \ + src/filter/src/gmsk.o \ + src/filter/src/group_delay.o \ + src/filter/src/hM3.o \ + src/filter/src/iirdes.pll.o \ + src/filter/src/iirdes.o \ + src/filter/src/lpc.o \ + src/filter/src/rcos.o \ + src/filter/src/rkaiser.o \ + src/filter/src/rrcos.o \ + + +# list explicit targets and dependencies here +filter_includes := \ + src/filter/src/autocorr.c \ + src/filter/src/fftfilt.c \ + src/filter/src/firdecim.c \ + src/filter/src/firfarrow.c \ + src/filter/src/firfilt.c \ + src/filter/src/firhilb.c \ + src/filter/src/firinterp.c \ + src/filter/src/firpfb.c \ + src/filter/src/iirdecim.c \ + src/filter/src/iirfilt.c \ + src/filter/src/iirfiltsos.c \ + src/filter/src/iirinterp.c \ + src/filter/src/msresamp.c \ + src/filter/src/msresamp2.c \ + src/filter/src/resamp.c \ + src/filter/src/resamp2.c \ + src/filter/src/symsync.c \ + +src/filter/src/bessel.o : %.o : %.c $(include_headers) +src/filter/src/bessel.o : %.o : %.c $(include_headers) +src/filter/src/butter.o : %.o : %.c $(include_headers) +src/filter/src/cheby1.o : %.o : %.c $(include_headers) +src/filter/src/cheby2.o : %.o : %.c $(include_headers) +src/filter/src/ellip.o : %.o : %.c $(include_headers) +src/filter/src/filter_rrrf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/filter_crcf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/filter_cccf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/firdes.o : %.o : %.c $(include_headers) +src/filter/src/firdespm.o : %.o : %.c $(include_headers) +src/filter/src/group_delay.o : %.o : %.c $(include_headers) +src/filter/src/hM3.o : %.o : %.c $(include_headers) +src/filter/src/iirdes.pll.o : %.o : %.c $(include_headers) +src/filter/src/iirdes.o : %.o : %.c $(include_headers) +src/filter/src/lpc.o : %.o : %.c $(include_headers) +src/filter/src/rcos.o : %.o : %.c $(include_headers) +src/filter/src/rkaiser.o : %.o : %.c $(include_headers) +src/filter/src/rrcos.o : %.o : %.c $(include_headers) + + +filter_autotests := \ + src/filter/tests/fftfilt_xxxf_autotest.c \ + src/filter/tests/filter_crosscorr_autotest.c \ + src/filter/tests/firdecim_xxxf_autotest.c \ + src/filter/tests/firdes_autotest.c \ + src/filter/tests/firdespm_autotest.c \ + src/filter/tests/firfilt_xxxf_autotest.c \ + src/filter/tests/firhilb_autotest.c \ + src/filter/tests/firinterp_autotest.c \ + src/filter/tests/firpfb_autotest.c \ + src/filter/tests/groupdelay_autotest.c \ + src/filter/tests/iirdes_autotest.c \ + src/filter/tests/iirfilt_xxxf_autotest.c \ + src/filter/tests/iirfiltsos_rrrf_autotest.c \ + src/filter/tests/msresamp_crcf_autotest.c \ + src/filter/tests/resamp_crcf_autotest.c \ + src/filter/tests/resamp2_crcf_autotest.c \ + src/filter/tests/symsync_crcf_autotest.c \ + src/filter/tests/symsync_rrrf_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/filter/tests/fftfilt_runtest.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h4x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h4x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h4x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h7x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h7x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h7x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h13x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h13x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h13x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h23x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h23x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h23x256.o \ + \ + src/filter/tests/firdecim_runtest.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M2h4x20.o \ + src/filter/tests/data/firdecim_crcf_data_M2h4x20.o \ + src/filter/tests/data/firdecim_cccf_data_M2h4x20.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M3h7x30.o \ + src/filter/tests/data/firdecim_crcf_data_M3h7x30.o \ + src/filter/tests/data/firdecim_cccf_data_M3h7x30.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M4h13x40.o \ + src/filter/tests/data/firdecim_crcf_data_M4h13x40.o \ + src/filter/tests/data/firdecim_cccf_data_M4h13x40.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M5h23x50.o \ + src/filter/tests/data/firdecim_crcf_data_M5h23x50.o \ + src/filter/tests/data/firdecim_cccf_data_M5h23x50.o \ + \ + src/filter/tests/firfilt_runtest.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h4x8.o \ + src/filter/tests/data/firfilt_crcf_data_h4x8.o \ + src/filter/tests/data/firfilt_cccf_data_h4x8.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h7x16.o \ + src/filter/tests/data/firfilt_crcf_data_h7x16.o \ + src/filter/tests/data/firfilt_cccf_data_h7x16.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h13x32.o \ + src/filter/tests/data/firfilt_crcf_data_h13x32.o \ + src/filter/tests/data/firfilt_cccf_data_h13x32.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h23x64.o \ + src/filter/tests/data/firfilt_crcf_data_h23x64.o \ + src/filter/tests/data/firfilt_cccf_data_h23x64.o \ + \ + src/filter/tests/iirfilt_runtest.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h3x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h3x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h3x64.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h5x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h5x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h5x64.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h7x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h7x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h7x64.o \ + +filter_benchmarks := \ + src/filter/bench/fftfilt_crcf_benchmark.c \ + src/filter/bench/firdecim_crcf_benchmark.c \ + src/filter/bench/firhilb_benchmark.c \ + src/filter/bench/firinterp_crcf_benchmark.c \ + src/filter/bench/firfilt_crcf_benchmark.c \ + src/filter/bench/iirdecim_crcf_benchmark.c \ + src/filter/bench/iirfilt_crcf_benchmark.c \ + src/filter/bench/iirinterp_crcf_benchmark.c \ + src/filter/bench/resamp_crcf_benchmark.c \ + src/filter/bench/resamp2_crcf_benchmark.c \ + src/filter/bench/symsync_crcf_benchmark.c \ + +# +# MODULE : framing +# + +framing_objects := \ + src/framing/src/bpacketgen.o \ + src/framing/src/bpacketsync.o \ + src/framing/src/bpresync_cccf.o \ + src/framing/src/bsync_rrrf.o \ + src/framing/src/bsync_crcf.o \ + src/framing/src/bsync_cccf.o \ + src/framing/src/detector_cccf.o \ + src/framing/src/framedatastats.o \ + src/framing/src/framesyncstats.o \ + src/framing/src/framegen64.o \ + src/framing/src/framesync64.o \ + src/framing/src/flexframegen.o \ + src/framing/src/flexframesync.o \ + src/framing/src/gmskframegen.o \ + src/framing/src/gmskframesync.o \ + src/framing/src/msourcecf.o \ + src/framing/src/ofdmflexframegen.o \ + src/framing/src/ofdmflexframesync.o \ + src/framing/src/presync_cccf.o \ + src/framing/src/symstreamcf.o \ + src/framing/src/symtrack_cccf.o \ + src/framing/src/qdetector_cccf.o \ + src/framing/src/qpacketmodem.o \ + src/framing/src/qpilotgen.o \ + src/framing/src/qpilotsync.o \ + + +# list explicit targets and dependencies here + +src/framing/src/bpacketgen.o : %.o : %.c $(include_headers) +src/framing/src/bpacketsync.o : %.o : %.c $(include_headers) +src/framing/src/bpresync_cccf.o : %.o : %.c $(include_headers) src/framing/src/bpresync.c +src/framing/src/bsync_rrrf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/bsync_crcf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/bsync_cccf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/detector_cccf.o : %.o : %.c $(include_headers) +src/framing/src/framedatastats.o : %.o : %.c $(include_headers) +src/framing/src/framesyncstats.o : %.o : %.c $(include_headers) +src/framing/src/framegen64.o : %.o : %.c $(include_headers) +src/framing/src/framesync64.o : %.o : %.c $(include_headers) +src/framing/src/flexframegen.o : %.o : %.c $(include_headers) +src/framing/src/flexframesync.o : %.o : %.c $(include_headers) +src/framing/src/msourcecf.o : %.o : %.c $(include_headers) src/framing/src/msource.c +src/framing/src/ofdmflexframegen.o : %.o : %.c $(include_headers) +src/framing/src/ofdmflexframesync.o : %.o : %.c $(include_headers) +src/framing/src/presync_cccf.o : %.o : %.c $(include_headers) src/framing/src/presync.c +src/framing/src/qpacketmodem.o : %.o : %.c $(include_headers) +src/framing/src/symstreamcf.o : %.o : %.c $(include_headers) src/framing/src/symstream.c +src/framing/src/symtrack_cccf.o : %.o : %.c $(include_headers) src/framing/src/symtrack.c + + +framing_autotests := \ + src/framing/tests/bpacketsync_autotest.c \ + src/framing/tests/bsync_autotest.c \ + src/framing/tests/detector_autotest.c \ + src/framing/tests/flexframesync_autotest.c \ + src/framing/tests/framesync64_autotest.c \ + src/framing/tests/qdetector_cccf_autotest.c \ + src/framing/tests/qpacketmodem_autotest.c \ + src/framing/tests/qpilotsync_autotest.c \ + + +framing_benchmarks := \ + src/framing/bench/presync_benchmark.c \ + src/framing/bench/bpacketsync_benchmark.c \ + src/framing/bench/bpresync_benchmark.c \ + src/framing/bench/bsync_benchmark.c \ + src/framing/bench/detector_benchmark.c \ + src/framing/bench/flexframesync_benchmark.c \ + src/framing/bench/framesync64_benchmark.c \ + src/framing/bench/gmskframesync_benchmark.c \ + + +# +# MODULE : math +# + +math_objects := \ + src/math/src/poly.o \ + src/math/src/polyc.o \ + src/math/src/polyf.o \ + src/math/src/polycf.o \ + src/math/src/math.o \ + src/math/src/math.bessel.o \ + src/math/src/math.gamma.o \ + src/math/src/math.complex.o \ + src/math/src/math.trig.o \ + src/math/src/modular_arithmetic.o \ + src/math/src/windows.o \ + + +poly_includes := \ + src/math/src/poly.common.c \ + src/math/src/poly.expand.c \ + src/math/src/poly.findroots.c \ + src/math/src/poly.lagrange.c \ + +src/math/src/poly.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polyc.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polyf.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polycf.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/math.o : %.o : %.c $(include_headers) +src/math/src/math.bessel.o : %.o : %.c $(include_headers) +src/math/src/math.gamma.o : %.o : %.c $(include_headers) +src/math/src/math.complex.o : %.o : %.c $(include_headers) +src/math/src/math.trig.o : %.o : %.c $(include_headers) +src/math/src/modular_arithmetic.o : %.o : %.c $(include_headers) +src/math/src/windows.o : %.o : %.c $(include_headers) + + +math_autotests := \ + src/math/tests/kbd_autotest.c \ + src/math/tests/math_autotest.c \ + src/math/tests/math_bessel_autotest.c \ + src/math/tests/math_gamma_autotest.c \ + src/math/tests/math_complex_autotest.c \ + src/math/tests/polynomial_autotest.c \ + + +math_benchmarks := \ + src/math/bench/polyfit_benchmark.c \ + + +# +# MODULE : matrix +# + +matrix_objects := \ + src/matrix/src/matrix.o \ + src/matrix/src/matrixf.o \ + src/matrix/src/matrixc.o \ + src/matrix/src/matrixcf.o \ + src/matrix/src/smatrix.common.o \ + src/matrix/src/smatrixb.o \ + src/matrix/src/smatrixf.o \ + src/matrix/src/smatrixi.o \ + + +matrix_includes := \ + src/matrix/src/matrix.base.c \ + src/matrix/src/matrix.cgsolve.c \ + src/matrix/src/matrix.chol.c \ + src/matrix/src/matrix.gramschmidt.c \ + src/matrix/src/matrix.inv.c \ + src/matrix/src/matrix.linsolve.c \ + src/matrix/src/matrix.ludecomp.c \ + src/matrix/src/matrix.qrdecomp.c \ + src/matrix/src/matrix.math.c \ + +src/matrix/src/matrix.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixc.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixf.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixcf.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/smatrixb.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c +src/matrix/src/smatrixf.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c +src/matrix/src/smatrixi.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c + + +# matrix autotest scripts +matrix_autotests := \ + src/matrix/tests/matrixcf_autotest.c \ + src/matrix/tests/matrixf_autotest.c \ + src/matrix/tests/smatrixb_autotest.c \ + src/matrix/tests/smatrixf_autotest.c \ + src/matrix/tests/smatrixi_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/matrix/tests/data/matrixf_data_add.o \ + src/matrix/tests/data/matrixf_data_aug.o \ + src/matrix/tests/data/matrixf_data_cgsolve.o \ + src/matrix/tests/data/matrixf_data_chol.o \ + src/matrix/tests/data/matrixf_data_gramschmidt.o \ + src/matrix/tests/data/matrixf_data_inv.o \ + src/matrix/tests/data/matrixf_data_linsolve.o \ + src/matrix/tests/data/matrixf_data_ludecomp.o \ + src/matrix/tests/data/matrixf_data_mul.o \ + src/matrix/tests/data/matrixf_data_qrdecomp.o \ + src/matrix/tests/data/matrixf_data_transmul.o \ + \ + src/matrix/tests/data/matrixcf_data_add.o \ + src/matrix/tests/data/matrixcf_data_aug.o \ + src/matrix/tests/data/matrixcf_data_chol.o \ + src/matrix/tests/data/matrixcf_data_inv.o \ + src/matrix/tests/data/matrixcf_data_linsolve.o \ + src/matrix/tests/data/matrixcf_data_ludecomp.o \ + src/matrix/tests/data/matrixcf_data_mul.o \ + src/matrix/tests/data/matrixcf_data_qrdecomp.o \ + src/matrix/tests/data/matrixcf_data_transmul.o \ + +matrix_benchmarks := \ + src/matrix/bench/matrixf_inv_benchmark.c \ + src/matrix/bench/matrixf_linsolve_benchmark.c \ + src/matrix/bench/matrixf_mul_benchmark.c \ + src/matrix/bench/smatrixf_mul_benchmark.c \ + + +# +# MODULE : modem +# + +modem_objects := \ + src/modem/src/ampmodem.o \ + src/modem/src/cpfskdem.o \ + src/modem/src/cpfskmod.o \ + src/modem/src/fskdem.o \ + src/modem/src/fskmod.o \ + src/modem/src/gmskdem.o \ + src/modem/src/gmskmod.o \ + src/modem/src/modemf.o \ + src/modem/src/modem_utilities.o \ + src/modem/src/modem_apsk_const.o \ + src/modem/src/modem_arb_const.o \ + +# explicit targets and dependencies +modem_includes := \ + src/modem/src/freqdem.c \ + src/modem/src/freqmod.c \ + src/modem/src/modem_common.c \ + src/modem/src/modem_psk.c \ + src/modem/src/modem_dpsk.c \ + src/modem/src/modem_ask.c \ + src/modem/src/modem_qam.c \ + src/modem/src/modem_apsk.c \ + src/modem/src/modem_bpsk.c \ + src/modem/src/modem_qpsk.c \ + src/modem/src/modem_ook.c \ + src/modem/src/modem_sqam32.c \ + src/modem/src/modem_sqam128.c \ + src/modem/src/modem_arb.c \ + +#src/modem/src/modem_demod_soft_const.c + +src/modem/src/modemf.o : %.o : %.c $(include_headers) $(modem_includes) +src/modem/src/gmskmod.o : %.o : %.c $(include_headers) +src/modem/src/gmskdem.o : %.o : %.c $(include_headers) +src/modem/src/ampmodem.o : %.o : %.c $(include_headers) +src/modem/src/freqmodem.o : %.o : %.c $(include_headers) +src/modem/src/modem_utilities.o : %.o : %.c $(include_headers) +src/modem/src/modem_apsk_const.o : %.o : %.c $(include_headers) +src/modem/src/modem_arb_const.o : %.o : %.c $(include_headers) + + +modem_autotests := \ + src/modem/tests/cpfskmodem_autotest.c \ + src/modem/tests/freqmodem_autotest.c \ + src/modem/tests/fskmodem_autotest.c \ + src/modem/tests/modem_autotest.c \ + src/modem/tests/modem_demodsoft_autotest.c \ + src/modem/tests/modem_demodstats_autotest.c \ + + +modem_benchmarks := \ + src/modem/bench/freqdem_benchmark.c \ + src/modem/bench/freqmod_benchmark.c \ + src/modem/bench/fskdem_benchmark.c \ + src/modem/bench/fskmod_benchmark.c \ + src/modem/bench/gmskmodem_benchmark.c \ + src/modem/bench/modem_modulate_benchmark.c \ + src/modem/bench/modem_demodulate_benchmark.c \ + src/modem/bench/modem_demodsoft_benchmark.c \ + +# +# MODULE : multichannel +# + +multichannel_objects := \ + src/multichannel/src/firpfbch_crcf.o \ + src/multichannel/src/firpfbch_cccf.o \ + src/multichannel/src/ofdmframe.common.o \ + src/multichannel/src/ofdmframegen.o \ + src/multichannel/src/ofdmframesync.o \ + +$(multichannel_objects) : %.o : %.c $(include_headers) + +# list explicit targets and dependencies here +multichannel_includes := \ + src/multichannel/src/firpfbch.c \ + src/multichannel/src/firpfbch2.c \ + +src/multichannel/src/firpfbch_crcf.o : %.o : %.c $(include_headers) $(multichannel_includes) +src/multichannel/src/firpfbch_cccf.o : %.o : %.c $(include_headers) $(multichannel_includes) + +# autotests +multichannel_autotests := \ + src/multichannel/tests/firpfbch2_crcf_autotest.c \ + src/multichannel/tests/firpfbch_crcf_synthesizer_autotest.c \ + src/multichannel/tests/firpfbch_crcf_analyzer_autotest.c \ + src/multichannel/tests/ofdmframesync_autotest.c \ + +# benchmarks +multichannel_benchmarks := \ + src/multichannel/bench/firpfbch_crcf_benchmark.c \ + src/multichannel/bench/firpfbch2_crcf_benchmark.c \ + src/multichannel/bench/ofdmframesync_acquire_benchmark.c \ + src/multichannel/bench/ofdmframesync_rxsymbol_benchmark.c \ + +# +# MODULE : nco - numerically-controlled oscillator +# + +nco_objects := \ + src/nco/src/nco_crcf.o \ + src/nco/src/nco.utilities.o \ + + +src/nco/src/nco_crcf.o : %.o : %.c $(include_headers) src/nco/src/nco.c +src/nco/src/nco.utilities.o : %.o : %.c $(include_headers) + + +# autotests +nco_autotests := \ + src/nco/tests/nco_crcf_frequency_autotest.c \ + src/nco/tests/nco_crcf_phase_autotest.c \ + src/nco/tests/nco_crcf_pll_autotest.c \ + src/nco/tests/unwrap_phase_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/nco/tests/data/nco_sincos_fsqrt1_2.o \ + src/nco/tests/data/nco_sincos_fsqrt1_3.o \ + src/nco/tests/data/nco_sincos_fsqrt1_5.o \ + src/nco/tests/data/nco_sincos_fsqrt1_7.o \ + +# benchmarks +nco_benchmarks := \ + src/nco/bench/nco_benchmark.c \ + src/nco/bench/vco_benchmark.c \ + +# +# MODULE : optim - optimization +# + +optim_objects := \ + src/optim/src/chromosome.o \ + src/optim/src/gasearch.o \ + src/optim/src/gradsearch.o \ + src/optim/src/optim.common.o \ + src/optim/src/qnsearch.o \ + src/optim/src/utilities.o \ + +$(optim_objects) : %.o : %.c $(include_headers) + +# autotests +optim_autotests := \ + src/optim/tests/gradsearch_autotest.c \ + +# benchmarks +optim_benchmarks := + + +# +# MODULE : quantization +# + +quantization_objects := \ + src/quantization/src/compand.o \ + src/quantization/src/quantizercf.o \ + src/quantization/src/quantizerf.o \ + src/quantization/src/quantizer.inline.o \ + + +src/quantization/src/compand.o : %.o : %.c $(include_headers) +src/quantization/src/quantizercf.o : %.o : %.c $(include_headers) src/quantization/src/quantizer.c +src/quantization/src/quantizerf.o : %.o : %.c $(include_headers) src/quantization/src/quantizer.c +src/quantization/src/quantizer.inline.o : %.o : %.c $(include_headers) + + +# autotests +quantization_autotests := \ + src/quantization/tests/compand_autotest.c \ + src/quantization/tests/quantize_autotest.c \ + + +# benchmarks +quantization_benchmarks := \ + src/quantization/bench/quantizer_benchmark.c \ + src/quantization/bench/compander_benchmark.c \ + +# +# MODULE : random +# + +random_objects := \ + src/random/src/rand.o \ + src/random/src/randn.o \ + src/random/src/randexp.o \ + src/random/src/randweib.o \ + src/random/src/randgamma.o \ + src/random/src/randnakm.o \ + src/random/src/randricek.o \ + src/random/src/scramble.o \ + + +$(random_objects) : %.o : %.c $(include_headers) + +# autotests +random_autotests := \ + src/random/tests/scramble_autotest.c \ + +# src/random/tests/random_autotest.c + + +# benchmarks +random_benchmarks := \ + src/random/bench/random_benchmark.c \ + + +# +# MODULE : sequence +# + +sequence_objects := \ + src/sequence/src/bsequence.o \ + src/sequence/src/msequence.o \ + + +$(sequence_objects) : %.o : %.c $(include_headers) + + +# autotests +sequence_autotests := \ + src/sequence/tests/bsequence_autotest.c \ + src/sequence/tests/complementary_codes_autotest.c \ + src/sequence/tests/msequence_autotest.c \ + +# benchmarks +sequence_benchmarks := \ + src/sequence/bench/bsequence_benchmark.c \ + +# +# MODULE : utility +# + +utility_objects := \ + src/utility/src/bshift_array.o \ + src/utility/src/byte_utilities.o \ + src/utility/src/msb_index.o \ + src/utility/src/pack_bytes.o \ + src/utility/src/shift_array.o \ + +$(utility_objects) : %.o : %.c $(include_headers) + +# autotests +utility_autotests := \ + src/utility/tests/bshift_array_autotest.c \ + src/utility/tests/count_bits_autotest.c \ + src/utility/tests/pack_bytes_autotest.c \ + src/utility/tests/shift_array_autotest.c \ + + +# benchmarks +utility_benchmarks := + + +# +# MODULE : vector +# + +# main objects list +vector_objects := \ + src/vector/src/vectorf_add.port.o src/vector/src/vectorf_norm.port.o src/vector/src/vectorf_mul.port.o src/vector/src/vectorf_trig.port.o src/vector/src/vectorcf_add.port.o src/vector/src/vectorcf_norm.port.o src/vector/src/vectorcf_mul.port.o src/vector/src/vectorcf_trig.port.o \ + +# portable builds +src/vector/src/vectorf_add.port.o : %.o : %.c $(include_headers) src/vector/src/vector_add.c +src/vector/src/vectorf_norm.port.o : %.o : %.c $(include_headers) src/vector/src/vector_norm.c +src/vector/src/vectorf_mul.port.o : %.o : %.c $(include_headers) src/vector/src/vector_mul.c +src/vector/src/vectorf_trig.port.o : %.o : %.c $(include_headers) src/vector/src/vector_trig.c +src/vector/src/vectorcf_add.port.o : %.o : %.c $(include_headers) src/vector/src/vector_add.c +src/vector/src/vectorcf_norm.port.o : %.o : %.c $(include_headers) src/vector/src/vector_norm.c +src/vector/src/vectorcf_mul.port.o : %.o : %.c $(include_headers) src/vector/src/vector_mul.c +src/vector/src/vectorcf_trig.port.o : %.o : %.c $(include_headers) src/vector/src/vector_trig.c + +# builds for specific architectures +# ... + +# vector autotest scripts +vector_autotests := + +# additional autotest objects +autotest_extra_obj += + +# vector benchmark scripts +vector_benchmarks := + + + +# Target collection +# +# Information about targets for each module is collected +# in these variables +objects := \ + src/libliquid.o \ + $(agc_objects) \ + $(audio_objects) \ + $(buffer_objects) \ + $(channel_objects) \ + $(dotprod_objects) \ + $(equalization_objects) \ + $(fec_objects) \ + $(fft_objects) \ + $(filter_objects) \ + $(framing_objects) \ + $(math_objects) \ + $(matrix_objects) \ + $(modem_objects) \ + $(multichannel_objects) \ + $(nco_objects) \ + $(optim_objects) \ + $(quantization_objects) \ + $(random_objects) \ + $(sequence_objects) \ + $(utility_objects) \ + $(vector_objects) \ + + +autotest_sources := \ + autotest/null_autotest.c \ + $(agc_autotests) \ + $(audio_autotests) \ + $(buffer_autotests) \ + $(channel_autotests) \ + $(dotprod_autotests) \ + $(equalization_autotests) \ + $(fec_autotests) \ + $(fft_autotests) \ + $(filter_autotests) \ + $(framing_autotests) \ + $(math_autotests) \ + $(matrix_autotests) \ + $(modem_autotests) \ + $(multichannel_autotests) \ + $(nco_autotests) \ + $(optim_autotests) \ + $(quantization_autotests) \ + $(random_autotests) \ + $(sequence_autotests) \ + $(utility_autotests) \ + $(vector_autotests) \ + + +benchmark_sources := \ + bench/null_benchmark.c \ + $(agc_benchmarks) \ + $(audio_benchmarks) \ + $(buffer_benchmarks) \ + $(channel_benchmarks) \ + $(dotprod_benchmarks) \ + $(equalization_benchmarks) \ + $(fec_benchmarks) \ + $(fft_benchmarks) \ + $(filter_benchmarks) \ + $(framing_benchmarks) \ + $(math_benchmarks) \ + $(matrix_benchmarks) \ + $(modem_benchmarks) \ + $(multichannel_benchmarks) \ + $(nco_benchmarks) \ + $(optim_benchmarks) \ + $(quantization_benchmarks) \ + $(random_benchmarks) \ + $(sequence_benchmarks) \ + $(utility_benchmarks) \ + $(vector_benchmarks) \ + + +## +## TARGET : all - build shared library (default) +## +.PHONY: all + +# Shared library +#SHARED_LIB = libliquid.so + +#MINGW: +SHARED_LIB = libliquid.dll + +# liquid library definition +libliquid.a: $(objects) + $(AR) $(ARFLAGS) $@ $^ + $(RANLIB) $@ + +# darwin +# +# gcc -dynamiclib -install_name libliquid.dylib -o libliquid.dylib libmodem.a libutility.a +libliquid.dylib: $(objects) + $(CC) -dynamiclib -install_name $@ -o $@ $^ $(LDFLAGS) + +# linux, et al +libliquid.so: libliquid.a + $(CC) -shared -Xlinker -soname=$@ -o $@ -Wl,-whole-archive $^ -Wl,-no-whole-archive $(LDFLAGS) + +# MINGW* +libliquid.dll: libliquid.a + $(CC) -shared -Xlinker -soname=$@ -o $@ -Wl,-whole-archive $^ -Wl,-no-whole-archive -Wl,--output-def,libliquid.def -Wl,--out-implib,libliquid.lib $(LDFLAGS) + +all: libliquid.a $(SHARED_LIB) + +## +## TARGET : help - print list of targets +## + +# look for all occurences of '## TARGET : ' and print rest of line to screen +help: + @echo "Targets for liquid-dsp makefile:" + @$(GREP) -E "^## TARGET : " [Mm]akefile | $(SED) 's/## TARGET : / /' + +## +## TARGET : install - installs the libraries and header files in the host system +## + +install: all + @echo "installing..." + @echo "" + mkdir -p $(DESTDIR)$(exec_prefix)$(libdir) + mkdir -p $(DESTDIR)$(prefix)/include/liquid + install -m 644 -p $(SHARED_LIB) libliquid.a $(DESTDIR)$(exec_prefix)$(libdir) + install -m 644 -p $(addprefix include/,$(headers_install)) $(DESTDIR)$(prefix)/include/liquid + @echo "" + @echo "---------------------------------------------------------" + @echo " liquid-dsp was successfully installed. " + @echo "" + @echo " On some machines (e.g. Linux) you should rebind your" + @echo " libraries by running 'ldconfig' to make the shared" + @echo " object available. You might also need to modify your" + @echo " LD_LIBRARY_PATH environment variable to include the" + @echo " directory $(DESTDIR)$(exec_prefix)" + @echo "" + @echo " Please report bugs to $(BUGREPORT)" + @echo "---------------------------------------------------------" + @echo "" + +## +## TARGET : uninstall - uninstalls the libraries and header files in the host system +## + +uninstall: + @echo "uninstalling..." + $(RM) $(addprefix $(DESTDIR)$(prefix)/include/liquid/, $(headers_install)) + $(RM) $(DESTDIR)$(exec_prefix)$(libdir)/libliquid.a + $(RM) $(DESTDIR)$(exec_prefix)$(libdir)/$(SHARED_LIB) + @echo "done." + +## +## autoscript +## + +autoscript : scripts/autoscript + +scripts/autoscript.o scripts/main.o : %.o : %.c + $(CC) $(CFLAGS) -c -o $@ $< + +scripts/autoscript : scripts/autoscript.o scripts/main.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +clean-autoscript : + $(RM) scripts/autoscript.o scripts/main.o scripts/autoscript + + +## +## TARGET : check - build and run autotest scripts +## + +# Autotests are used to check the validity and accuracy of the +# DSP libraries. + +.PHONY: autotest +autotest_prog = xautotest + +# run the autotest generator script to create autotest_include.h +autotest_include.h : scripts/autoscript $(autotest_sources) $(include_headers) + ./scripts/autoscript $(PATHSEP) autotest $(autotest_sources) > $@ + +# autotest objects +# NOTE: by default, gcc compiles any file with a '.h' extension as a 'pre-compiled +# header' so we need to explicity tell it to compile as a c source file with +# the '-x c' flag +autotest_obj = $(patsubst %.c,%.o,$(autotest_sources)) +$(autotest_obj) : %.o : %.c $(include_headers) + $(CC) $(CFLAGS) $< -c -o $@ + +# additional autotest objects +$(autotest_extra_obj) : %.o : %.c $(include_headers) + +# compile the autotest internal library functions without linking +autotest/autotestlib.o : autotest/autotestlib.c autotest/autotest.h + $(CC) $(CFLAGS) $< -c -o $@ + +# compile the autotest program without linking +$(autotest_prog).o : autotest/autotest.c autotest/autotest.h autotest_include.h + $(CC) $(CFLAGS) $< -c -o $@ + +# link the autotest program with the objects +# NOTE: linked libraries must come _after_ the target program +$(autotest_prog): $(autotest_prog).o $(autotest_obj) $(autotest_extra_obj) autotest/autotestlib.o libliquid.a + $(CC) $^ -o $@ $(LDFLAGS) + +# run the autotest program +check: $(autotest_prog) + ./$(autotest_prog) -v + +# let 'make test' be an alias for 'make check' +test: check + +# clean the generated files +clean-check: + $(RM) autotest_include.h $(autotest_prog).o $(autotest_prog) + $(RM) autotest/autotestlib.o + $(RM) $(autotest_obj) + $(RM) $(autotest_extra_obj) + + +## +## TARGET : bench - build and run all benchmarks +## + +# Benchmarks measure the relative speed of the DSP algorithms running +# on the target platform. +.PHONY: bench +bench_prog = benchmark +BENCH_CFLAGS = -Wall $(INCLUDE_CFLAGS) $(CONFIG_CFLAGS) +BENCH_LDFLAGS = $(LDFLAGS) + +# run the benchmark generator script to create benchmark_include.h +benchmark_include.h : scripts/autoscript $(benchmark_sources) $(include_headers) + ./scripts/autoscript $(PATHSEP) benchmark $(benchmark_sources) > $@ + +# benchmark objects +# NOTE: by default, gcc compiles any file with a '.h' extension as a 'pre-compiled +# header' so we need to explicity tell it to compile as a c source file with +# the '-x c' flag +benchmark_obj = $(patsubst %.c,%.o,$(benchmark_sources)) +$(benchmark_obj) : %.o : %.c $(include_headers) + $(CC) $(BENCH_CFLAGS) $< -c -o $@ + +# additional benchmark objects +$(benchmark_extra_obj) : %.o : %.c $(include_headers) + +# compile the benchmark program without linking +$(bench_prog).o: bench/bench.c benchmark_include.h bench/bench.c + $(CC) $(BENCH_CFLAGS) $< -c -o $(bench_prog).o + +# link the benchmark program with the library objects +# NOTE: linked libraries must come _after_ the target program +$(bench_prog): $(bench_prog).o $(benchmark_obj) $(benchmark_extra_obj) libliquid.a + $(CC) $^ -o $(bench_prog) $(BENCH_LDFLAGS) + +# run the benchmark program +bench: $(bench_prog) + ./$(bench_prog) + +# benchmark compare script +scripts/benchmark_compare : % : %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + +# fftbench program +bench/fftbench.o : %.o : %.c + $(CC) $(BENCH_CFLAGS) $< -c -o $@ + +bench/fftbench : % : %.o libliquid.a + $(CC) $^ -o $@ $(BENCH_LDFLAGS) + +# clean up the generated files +clean-bench: + $(RM) benchmark_include.h $(bench_prog).o $(bench_prog) + $(RM) scripts/benchmark_compare + $(RM) $(benchmark_obj) + $(RM) $(benchmark_extra_obj) + $(RM) bench/fftbench.o + $(RM) bench/fftbench + + +## +## TARGET : examples - build all examples binaries +## +.PHONY: examples +example_programs := \ + examples/agc_crcf_example \ + examples/agc_crcf_qpsk_example \ + examples/agc_rrrf_example \ + examples/ampmodem_example \ + examples/asgramcf_example \ + examples/asgramf_example \ + examples/autocorr_cccf_example \ + examples/bpacketsync_example \ + examples/bpresync_example \ + examples/bsequence_example \ + examples/cbufferf_example \ + examples/cgsolve_example \ + examples/channel_cccf_example \ + examples/chromosome_example \ + examples/compand_example \ + examples/compand_cf_example \ + examples/complementary_codes_example \ + examples/conversion_example \ + examples/crc_example \ + examples/cpfskmodem_example \ + examples/cpfskmodem_psd_example \ + examples/cvsd_example \ + examples/detector_cccf_example \ + examples/dotprod_rrrf_example \ + examples/dotprod_cccf_example \ + examples/eqlms_cccf_block_example \ + examples/eqlms_cccf_blind_example \ + examples/eqlms_cccf_decisiondirected_example \ + examples/eqlms_cccf_example \ + examples/eqrls_cccf_example \ + examples/fec_example \ + examples/fec_soft_example \ + examples/fft_example \ + examples/fftfilt_crcf_example \ + examples/firdecim_crcf_example \ + examples/firfarrow_rrrf_example \ + examples/firfilt_cccf_example \ + examples/firfilt_crcf_example \ + examples/firfilt_rrrf_example \ + examples/firdes_kaiser_example \ + examples/firdespm_example \ + examples/firhilb_example \ + examples/firhilb_decim_example \ + examples/firhilb_interp_example \ + examples/firpfbch2_crcf_example \ + examples/firinterp_crcf_example \ + examples/firpfbch_crcf_example \ + examples/firpfbch_crcf_analysis_example \ + examples/firpfbch_crcf_synthesis_example \ + examples/flexframesync_example \ + examples/flexframesync_reconfig_example \ + examples/framesync64_example \ + examples/freqmodem_example \ + examples/fskmodem_example \ + examples/gasearch_example \ + examples/gasearch_knapsack_example \ + examples/gmskframesync_example \ + examples/gmskmodem_example \ + examples/gradsearch_datafit_example \ + examples/gradsearch_example \ + examples/interleaver_example \ + examples/interleaver_soft_example \ + examples/interleaver_scatterplot_example \ + examples/iirdes_example \ + examples/iirdes_analog_example \ + examples/iirdes_pll_example \ + examples/iirdecim_crcf_example \ + examples/iirfilt_cccf_example \ + examples/iirfilt_crcf_example \ + examples/iirfilt_crcf_dcblocker_example \ + examples/iirinterp_crcf_example \ + examples/kbd_window_example \ + examples/lpc_example \ + examples/libliquid_example \ + examples/matched_filter_example \ + examples/math_lngamma_example \ + examples/math_primitive_root_example \ + examples/modem_arb_example \ + examples/modem_example \ + examples/modem_soft_example \ + examples/modular_arithmetic_example \ + examples/msequence_example \ + examples/msourcecf_example \ + examples/msresamp_crcf_example \ + examples/msresamp2_crcf_example \ + examples/nco_example \ + examples/nco_pll_example \ + examples/nco_pll_modem_example \ + examples/nyquist_filter_example \ + examples/ofdmflexframesync_example \ + examples/ofdmframesync_example \ + examples/packetizer_example \ + examples/packetizer_soft_example \ + examples/pll_example \ + examples/polyfit_example \ + examples/polyfit_lagrange_example \ + examples/poly_findroots_example \ + examples/qdetector_cccf_example \ + examples/qpacketmodem_performance_example \ + examples/qpacketmodem_example \ + examples/qpilotsync_example \ + examples/qnsearch_example \ + examples/quantize_example \ + examples/random_histogram_example \ + examples/repack_bytes_example \ + examples/resamp_crcf_example \ + examples/resamp2_cccf_example \ + examples/resamp2_crcf_example \ + examples/resamp2_crcf_decim_example \ + examples/resamp2_crcf_filter_example \ + examples/resamp2_crcf_interp_example \ + examples/ricek_channel_example \ + examples/scramble_example \ + examples/smatrix_example \ + examples/spgramcf_example \ + examples/spgramcf_waterfall_example \ + examples/spgramf_example \ + examples/symsync_crcf_example \ + examples/symsync_crcf_full_example \ + examples/symsync_crcf_kaiser_example \ + examples/symstreamcf_example \ + examples/symtrack_cccf_example \ + examples/wdelayf_example \ + examples/windowf_example \ + +# examples/metadata_example +# examples/ofdmframegen_example +# examples/gmskframe_example +# examples/fading_generator_example + +example_objects = $(patsubst %,%.o,$(example_programs)) +examples: $(example_programs) + +EXAMPLES_LDFLAGS = $(LDFLAGS) + +# NOTE: linked libraries must come _after_ the target program +$(example_objects): %.o : %.c + +$(example_programs): % : %.o libliquid.a + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +# clean examples +clean-examples: + $(RM) examples/*.o + $(RM) $(example_programs) + +## +## TARGET : sandbox - build all sandbox binaries +## + +# NOTE: sandbox _requires_ fftw3 to build +.PHONY: sandbox +sandbox_programs = \ + sandbox/bpresync_test \ + sandbox/cpmodem_test \ + sandbox/count_ones_gentab \ + sandbox/crc_gentab \ + sandbox/ellip_func_test \ + sandbox/ellip_test \ + sandbox/eqlms_cccf_test \ + sandbox/fecsoft_ber_test \ + sandbox/fec_g2412product_test \ + sandbox/fec_golay2412_test \ + sandbox/fec_golay_test \ + sandbox/fec_hamming3126_example \ + sandbox/fec_hamming128_test \ + sandbox/fec_hamming128_gentab \ + sandbox/fec_hamming128_example \ + sandbox/fec_hamming74_gentab \ + sandbox/fec_hamming84_gentab \ + sandbox/fec_hamming_test \ + sandbox/fec_ldpc_test \ + sandbox/fec_rep3_test \ + sandbox/fec_rep5_test \ + sandbox/fec_secded2216_test \ + sandbox/fec_secded3932_test \ + sandbox/fec_secded7264_test \ + sandbox/fec_spc2216_test \ + sandbox/fec_secded_punctured_test \ + sandbox/fecsoft_conv_test \ + sandbox/fecsoft_hamming128_gentab \ + sandbox/fecsoft_ldpc_test \ + sandbox/fec_sumproduct_test \ + sandbox/fskmodem_test \ + sandbox/fft_dual_radix_test \ + sandbox/fft_mixed_radix_test \ + sandbox/fft_recursive_plan_test \ + sandbox/fft_recursive_test \ + sandbox/fft_rader_prime_test \ + sandbox/fft_rader_prime_radix2_test \ + sandbox/fft_r2r_test \ + sandbox/firdes_energy_test \ + sandbox/firdes_fexp_test \ + sandbox/firdes_gmskrx_test \ + sandbox/firdes_length_test \ + sandbox/firfarrow_rrrf_test \ + sandbox/firpfbch_analysis_alignment_test \ + sandbox/firpfbch2_analysis_equivalence_test \ + sandbox/firpfbch2_test \ + sandbox/firpfbch_analysis_equivalence_test \ + sandbox/firpfbch_synthesis_equivalence_test \ + sandbox/gmskmodem_test \ + sandbox/gmskmodem_coherent_test \ + sandbox/gmskmodem_equalizer_test \ + sandbox/householder_test \ + sandbox/iirdes_example \ + sandbox/iirfilt_intdiff_test \ + sandbox/levinson_test \ + sandbox/matched_filter_test \ + sandbox/matched_filter_cfo_test \ + sandbox/math_lngamma_test \ + sandbox/math_cacosf_test \ + sandbox/math_casinf_test \ + sandbox/math_catanf_test \ + sandbox/math_cexpf_test \ + sandbox/math_clogf_test \ + sandbox/math_csqrtf_test \ + sandbox/matrix_test \ + sandbox/minsearch_test \ + sandbox/minsearch2_test \ + sandbox/matrix_eig_test \ + sandbox/modem_demodulate_arb_gentab \ + sandbox/modem_demodulate_soft_test \ + sandbox/modem_demodulate_soft_gentab \ + sandbox/mskmodem_test \ + sandbox/msresamp_crcf_test \ + sandbox/ofdmoqam_firpfbch_test \ + sandbox/ofdm_ber_test \ + sandbox/ofdmframe_papr_test \ + sandbox/ofdmframesync_cfo_test \ + sandbox/pll_design_test \ + sandbox/predemod_sync_test \ + sandbox/quasinewton_test \ + sandbox/recursive_qpsk_test \ + sandbox/resamp2_crcf_filterbank_test \ + sandbox/resamp2_crcf_interp_recreate_test \ + sandbox/reverse_byte_gentab \ + sandbox/rkaiser2_test \ + sandbox/shadowing_test \ + sandbox/simplex_test \ + sandbox/symsync_crcf_test \ + sandbox/symsync_eqlms_test \ + sandbox/svd_test \ + sandbox/thiran_allpass_iir_test \ + sandbox/vectorcf_test \ + +# sandbox/packetizer_persistent_ber_test +# firpfbch_analysis_test +# sandbox/ofdmoqam_firpfbch_cfo_test +# sandbox/mdct_test +# sandbox/fct_test + + +sandbox_objects = $(patsubst %,%.o,$(sandbox_programs)) +sandbox: $(sandbox_programs) +SANDBOX_LDFLAGS = $(LDFLAGS) -lfftw3f + +# NOTE: linked libraries must come _after_ the target program +$(sandbox_objects): %.o : %.c + +$(sandbox_programs): % : %.o libliquid.a + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +# clean sandbox +clean-sandbox: + $(RM) sandbox/*.o + $(RM) $(sandbox_programs) + + +## +## TARGET : world - build absolutely everything +## +world : all check bench examples sandbox + +## +## TARGET : clean - clean build (objects, dependencies, libraries, etc.) +## + +.PHONY: clean + +clean-modules: + @echo "cleaning modules..." + $(RM) src/agc/src/*.o src/agc/bench/*.o src/agc/tests/*.o + $(RM) src/audio/src/*.o src/audio/bench/*.o src/audio/tests/*.o + $(RM) src/buffer/src/*.o src/buffer/bench/*.o src/buffer/tests/*.o + $(RM) src/channel/src/*.o src/channel/bench/*.o src/channel/tests/*.o + $(RM) src/dotprod/src/*.o src/dotprod/bench/*.o src/dotprod/tests/*.o + $(RM) src/equalization/src/*.o src/equalization/bench/*.o src/equalization/tests/*.o + $(RM) src/fec/src/*.o src/fec/bench/*.o src/fec/tests/*.o + $(RM) src/fft/src/*.o src/fft/bench/*.o src/fft/tests/*.o + $(RM) src/filter/src/*.o src/filter/bench/*.o src/filter/tests/*.o + $(RM) src/framing/src/*.o src/framing/bench/*.o src/framing/tests/*.o + $(RM) src/math/src/*.o src/math/bench/*.o src/math/tests/*.o + $(RM) src/matrix/src/*.o src/matrix/bench/*.o src/matrix/tests/*.o + $(RM) src/modem/src/*.o src/modem/bench/*.o src/modem/tests/*.o + $(RM) src/multichannel/src/*.o src/multichannel/bench/*.o src/multichannel/tests/*.o + $(RM) src/nco/src/*.o src/nco/bench/*.o src/nco/tests/*.o + $(RM) src/optim/src/*.o src/optim/bench/*.o src/optim/tests/*.o + $(RM) src/quantization/src/*.o src/quantization/bench/*.o src/quantization/tests/*.o + $(RM) src/random/src/*.o src/random/bench/*.o src/random/tests/*.o + $(RM) src/sequence/src/*.o src/sequence/bench/*.o src/sequence/tests/*.o + $(RM) src/utility/src/*.o src/utility/bench/*.o src/utility/tests/*.o + $(RM) src/vector/src/*.o src/vector/bench/*.o src/vector/tests/*.o + $(RM) src/libliquid.o + +clean: clean-modules clean-autoscript clean-check clean-bench clean-examples clean-sandbox + $(RM) $(extra_clean) + $(RM) libliquid.a + $(RM) $(SHARED_LIB) + +## +## TARGET : distclean - removes everything except the originally distributed files +## + +distclean: clean + @echo "cleaning distribution..." + $(RM) octave-core *.m + $(RM) configure config.h config.h.in config.h.in~ config.log config.status + $(RM) -r autom4te.cache + $(RM) aclocal.m4 + $(RM) makefile + diff --git a/external/liquid-dsp/makefile.mingw64 b/external/liquid-dsp/makefile.mingw64 new file mode 100644 index 0000000..b072bf9 --- /dev/null +++ b/external/liquid-dsp/makefile.mingw64 @@ -0,0 +1,1687 @@ +# Copyright (c) 2007 - 2016 Joseph Gaeddert +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# +# Makefile for liquid-dsp libraries +# +# Targets: +# all : dynamic shared-library object (e.g. libliquid.so) +# install : install the dynamic shared library object and +# header file(s) +# uninstall : uninstall the library and header file(s) +# clean : clean all targets (bench, check, examples, etc) +# distclean : removes everything except the originally distributed files +# check : build and run autotest program +# bench : build and run benchmarking program +# examples : build all examples +# sandbox : build all sandbox examples +# world : build absolutely everything (but don't install) +# +# clean-modules : clean all modules +# clean-examples : clean examples programs +# clean-sandbox : clean sandbox programs +# clean-check : clean autotest program +# clean-bench : clean benchmark program +# + +# autoconf initialization macros +NAME := liquid-dsp +VERSION := 1.3.0 +BUGREPORT := support@liquidsdr.org + +# paths +srcdir := . +libdir := ${exec_prefix}/lib +prefix := /usr/local +exec_prefix := ${prefix} +include_dirs := . include + +# programs +CC := gcc +MV := mv -f +RM := rm -f +SED := /usr/bin/sed +GREP := /usr/bin/grep +AR := ar +RANLIB := ranlib + +# flags +INCLUDE_CFLAGS = $(addprefix -I ,$(include_dirs)) + +#MINGW: optimizations goes here +CONFIG_CFLAGS = -O3 -msse3 -ffast-math -static-libgcc -static-libstdc++ + +# -g : debugging info +CFLAGS += $(INCLUDE_CFLAGS) -Wall -fPIC $(CONFIG_CFLAGS) + +#LDFLAGS += -lm -lc +#MINGW: +LDFLAGS += -static-libgcc -static-libstdc++ + +ARFLAGS = r +PATHSEP = / + +# +# liquid headers +# +headers_install := liquid.h +headers := $(headers_install) liquid.internal.h +include_headers := $(addprefix include/,$(headers)) + + +## +## liquid-dsp modules +## + +all: + +# additional targets to clean +extra_clean := + +# additional autotest objects +autotest_extra_obj := + +# additional benchmark objects +benchmark_extra_obj := + +# +# MODULE : agc - automatic gain control +# + +# object files +agc_objects = \ + src/agc/src/agc_crcf.o \ + src/agc/src/agc_rrrf.o \ + +# explicit targets and dependencies +src/agc/src/agc_crcf.o : %.o : %.c src/agc/src/agc.c $(include_headers) +src/agc/src/agc_rrrf.o : %.o : %.c src/agc/src/agc.c $(include_headers) + +# autotests +agc_autotests := \ + src/agc/tests/agc_crcf_autotest.c \ + +# benchmarks +agc_benchmarks := \ + src/agc/bench/agc_crcf_benchmark.c \ + +# +# MODULE : audio +# + +# described below +audio_objects := \ + src/audio/src/cvsd.o \ + +src/cvsd/src/cvsd.o : %.o : %.c $(include_headers) + + +audio_autotests := \ + src/audio/tests/cvsd_autotest.c \ + +audio_benchmarks := \ + src/audio/bench/cvsd_benchmark.c \ + + +# +# MODULE : buffer +# + +buffer_objects := \ + src/buffer/src/bufferf.o \ + src/buffer/src/buffercf.o \ + +buffer_includes := \ + src/buffer/src/cbuffer.c \ + src/buffer/src/wdelay.c \ + src/buffer/src/window.c \ + +src/buffer/src/bufferf.o : %.o : %.c $(include_headers) $(buffer_includes) + +src/buffer/src/buffercf.o : %.o : %.c $(include_headers) $(buffer_includes) + + +buffer_autotests := \ + src/buffer/tests/cbuffer_autotest.c \ + src/buffer/tests/wdelay_autotest.c \ + src/buffer/tests/window_autotest.c \ + +# src/buffer/tests/sbuffer_autotest.c + +buffer_benchmarks := \ + src/buffer/bench/cbuffercf_benchmark.c \ + src/buffer/bench/window_push_benchmark.c \ + src/buffer/bench/window_read_benchmark.c \ + +# +# MODULE : channel +# + +channel_objects := \ + src/channel/src/channel_cccf.o \ + +channel_includes := \ + src/channel/src/channel.c \ + src/channel/src/tvmpch.c \ + +src/channel/src/channel_cccf.o : %.o : %.c $(include_headers) $(channel_includes) + +channel_autotests := \ + +#src/channel/tests/channel_cccf_autotest.c + +channel_benchmarks := \ + +#src/channel/bench/channel_cccf_benchmark.c + +# +# MODULE : dotprod +# +dotprod_objects := \ + src/dotprod/src/dotprod_cccf.mmx.o src/dotprod/src/dotprod_crcf.mmx.o src/dotprod/src/dotprod_rrrf.mmx.o src/dotprod/src/sumsq.mmx.o \ + +src/dotprod/src/dotprod_cccf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/dotprod_crcf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/dotprod_rrrf.o : %.o : %.c $(include_headers) src/dotprod/src/dotprod.c +src/dotprod/src/sumsq.o : %.o : %.c $(include_headers) + +# specific machine architectures + +# AltiVec +src/dotprod/src/dotprod_rrrf.av.o : %.o : %.c $(include_headers) + +# MMX/SSE2 +src/dotprod/src/dotprod_rrrf.mmx.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_crcf.mmx.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_cccf.mmx.o : %.o : %.c $(include_headers) + +src/dotprod/src/sumsq.mmx.o : %.o : %.c $(include_headers) + +# SSE4.1/2 +src/dotprod/src/dotprod_rrrf.sse4.o : %.o : %.c $(include_headers) + +# ARM Neon +src/dotprod/src/dotprod_rrrf.neon.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_crcf.neon.o : %.o : %.c $(include_headers) +src/dotprod/src/dotprod_cccf.neon.o : %.o : %.c $(include_headers) + +dotprod_autotests := \ + src/dotprod/tests/dotprod_rrrf_autotest.c \ + src/dotprod/tests/dotprod_crcf_autotest.c \ + src/dotprod/tests/dotprod_cccf_autotest.c \ + src/dotprod/tests/sumsqf_autotest.c \ + src/dotprod/tests/sumsqcf_autotest.c \ + +dotprod_benchmarks := \ + src/dotprod/bench/dotprod_cccf_benchmark.c \ + src/dotprod/bench/dotprod_crcf_benchmark.c \ + src/dotprod/bench/dotprod_rrrf_benchmark.c \ + src/dotprod/bench/sumsqf_benchmark.c \ + src/dotprod/bench/sumsqcf_benchmark.c \ + +# +# MODULE : equalization +# +equalization_objects := \ + src/equalization/src/equalizer_cccf.o \ + src/equalization/src/equalizer_rrrf.o \ + + +$(equalization_objects) : %.o : %.c $(include_headers) src/equalization/src/eqlms.c src/equalization/src/eqrls.c + + +# autotests +equalization_autotests := \ + src/equalization/tests/eqlms_cccf_autotest.c \ + src/equalization/tests/eqrls_rrrf_autotest.c \ + + +# benchmarks +equalization_benchmarks := \ + src/equalization/bench/eqlms_cccf_benchmark.c \ + src/equalization/bench/eqrls_cccf_benchmark.c \ + +# +# MODULE : fec - forward error-correction +# +fec_objects := \ + src/fec/src/crc.o \ + src/fec/src/fec.o \ + src/fec/src/fec_conv.o \ + src/fec/src/fec_conv_poly.o \ + src/fec/src/fec_conv_pmatrix.o \ + src/fec/src/fec_conv_punctured.o \ + src/fec/src/fec_golay2412.o \ + src/fec/src/fec_hamming74.o \ + src/fec/src/fec_hamming84.o \ + src/fec/src/fec_hamming128.o \ + src/fec/src/fec_hamming1511.o \ + src/fec/src/fec_hamming3126.o \ + src/fec/src/fec_hamming128_gentab.o \ + src/fec/src/fec_pass.o \ + src/fec/src/fec_rep3.o \ + src/fec/src/fec_rep5.o \ + src/fec/src/fec_rs.o \ + src/fec/src/fec_secded2216.o \ + src/fec/src/fec_secded3932.o \ + src/fec/src/fec_secded7264.o \ + src/fec/src/interleaver.o \ + src/fec/src/packetizer.o \ + src/fec/src/sumproduct.o \ + + +# list explicit targets and dependencies here +$(fec_objects) : %.o : %.c $(include_headers) + +# autotests +fec_autotests := \ + src/fec/tests/crc_autotest.c \ + src/fec/tests/fec_autotest.c \ + src/fec/tests/fec_soft_autotest.c \ + src/fec/tests/fec_golay2412_autotest.c \ + src/fec/tests/fec_hamming74_autotest.c \ + src/fec/tests/fec_hamming84_autotest.c \ + src/fec/tests/fec_hamming128_autotest.c \ + src/fec/tests/fec_hamming1511_autotest.c \ + src/fec/tests/fec_hamming3126_autotest.c \ + src/fec/tests/fec_reedsolomon_autotest.c \ + src/fec/tests/fec_rep3_autotest.c \ + src/fec/tests/fec_rep5_autotest.c \ + src/fec/tests/fec_secded2216_autotest.c \ + src/fec/tests/fec_secded3932_autotest.c \ + src/fec/tests/fec_secded7264_autotest.c \ + src/fec/tests/interleaver_autotest.c \ + src/fec/tests/packetizer_autotest.c \ + + +# benchmarks +fec_benchmarks := \ + src/fec/bench/crc_benchmark.c \ + src/fec/bench/fec_encode_benchmark.c \ + src/fec/bench/fec_decode_benchmark.c \ + src/fec/bench/fecsoft_decode_benchmark.c \ + src/fec/bench/sumproduct_benchmark.c \ + src/fec/bench/interleaver_benchmark.c \ + src/fec/bench/packetizer_decode_benchmark.c \ + +# +# MODULE : fft - fast Fourier transforms, discrete sine/cosine transforms, etc. +# + +fft_objects := \ + src/fft/src/fftf.o \ + src/fft/src/spgramcf.o \ + src/fft/src/spgramf.o \ + src/fft/src/fft_utilities.o \ + +# explicit targets and dependencies +fft_includes := \ + src/fft/src/fft_common.c \ + src/fft/src/fft_dft.c \ + src/fft/src/fft_radix2.c \ + src/fft/src/fft_mixed_radix.c \ + src/fft/src/fft_rader.c \ + src/fft/src/fft_rader2.c \ + src/fft/src/fft_r2r_1d.c \ + +src/fft/src/fftf.o : %.o : %.c $(include_headers) $(fft_includes) +src/fft/src/asgram.o : %.o : %.c $(include_headers) +src/fft/src/dct.o : %.o : %.c $(include_headers) +src/fft/src/fftf.o : %.o : %.c $(include_headers) +src/fft/src/fft_utilities.o : %.o : %.c $(include_headers) +src/fft/src/mdct.o : %.o : %.c $(include_headers) +src/fft/src/spgramcf.o : %.o : %.c $(include_headers) src/fft/src/asgram.c src/fft/src/spgram.c +src/fft/src/spgramf.o : %.o : %.c $(include_headers) src/fft/src/asgram.c src/fft/src/spgram.c + +# fft autotest scripts +fft_autotests := \ + src/fft/tests/fft_small_autotest.c \ + src/fft/tests/fft_radix2_autotest.c \ + src/fft/tests/fft_composite_autotest.c \ + src/fft/tests/fft_prime_autotest.c \ + src/fft/tests/fft_r2r_autotest.c \ + src/fft/tests/fft_shift_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/fft/tests/fft_runtest.o \ + src/fft/tests/data/fft_data_2.o \ + src/fft/tests/data/fft_data_3.o \ + src/fft/tests/data/fft_data_4.o \ + src/fft/tests/data/fft_data_5.o \ + src/fft/tests/data/fft_data_6.o \ + src/fft/tests/data/fft_data_7.o \ + src/fft/tests/data/fft_data_8.o \ + src/fft/tests/data/fft_data_9.o \ + src/fft/tests/data/fft_data_10.o \ + src/fft/tests/data/fft_data_16.o \ + src/fft/tests/data/fft_data_17.o \ + src/fft/tests/data/fft_data_20.o \ + src/fft/tests/data/fft_data_21.o \ + src/fft/tests/data/fft_data_22.o \ + src/fft/tests/data/fft_data_24.o \ + src/fft/tests/data/fft_data_26.o \ + src/fft/tests/data/fft_data_30.o \ + src/fft/tests/data/fft_data_32.o \ + src/fft/tests/data/fft_data_35.o \ + src/fft/tests/data/fft_data_36.o \ + src/fft/tests/data/fft_data_43.o \ + src/fft/tests/data/fft_data_48.o \ + src/fft/tests/data/fft_data_63.o \ + src/fft/tests/data/fft_data_64.o \ + src/fft/tests/data/fft_data_79.o \ + src/fft/tests/data/fft_data_92.o \ + src/fft/tests/data/fft_data_96.o \ + src/fft/tests/data/fft_data_120.o \ + src/fft/tests/data/fft_data_130.o \ + src/fft/tests/data/fft_data_157.o \ + src/fft/tests/data/fft_data_192.o \ + src/fft/tests/data/fft_data_317.o \ + src/fft/tests/data/fft_data_509.o \ + src/fft/tests/data/fft_r2rdata_8.o \ + src/fft/tests/data/fft_r2rdata_27.o \ + src/fft/tests/data/fft_r2rdata_32.o \ + +# fft benchmark scripts +fft_benchmarks := \ + src/fft/bench/fft_composite_benchmark.c \ + src/fft/bench/fft_prime_benchmark.c \ + src/fft/bench/fft_radix2_benchmark.c \ + src/fft/bench/fft_r2r_benchmark.c \ + +# additional benchmark objects +benchmark_extra_obj := \ + src/fft/bench/fft_runbench.o \ + +# +# MODULE : filter +# + +filter_objects := \ + src/filter/src/bessel.o \ + src/filter/src/butter.o \ + src/filter/src/cheby1.o \ + src/filter/src/cheby2.o \ + src/filter/src/ellip.o \ + src/filter/src/filter_rrrf.o \ + src/filter/src/filter_crcf.o \ + src/filter/src/filter_cccf.o \ + src/filter/src/firdes.o \ + src/filter/src/firdespm.o \ + src/filter/src/fnyquist.o \ + src/filter/src/gmsk.o \ + src/filter/src/group_delay.o \ + src/filter/src/hM3.o \ + src/filter/src/iirdes.pll.o \ + src/filter/src/iirdes.o \ + src/filter/src/lpc.o \ + src/filter/src/rcos.o \ + src/filter/src/rkaiser.o \ + src/filter/src/rrcos.o \ + + +# list explicit targets and dependencies here +filter_includes := \ + src/filter/src/autocorr.c \ + src/filter/src/fftfilt.c \ + src/filter/src/firdecim.c \ + src/filter/src/firfarrow.c \ + src/filter/src/firfilt.c \ + src/filter/src/firhilb.c \ + src/filter/src/firinterp.c \ + src/filter/src/firpfb.c \ + src/filter/src/iirdecim.c \ + src/filter/src/iirfilt.c \ + src/filter/src/iirfiltsos.c \ + src/filter/src/iirinterp.c \ + src/filter/src/msresamp.c \ + src/filter/src/msresamp2.c \ + src/filter/src/resamp.c \ + src/filter/src/resamp2.c \ + src/filter/src/symsync.c \ + +src/filter/src/bessel.o : %.o : %.c $(include_headers) +src/filter/src/bessel.o : %.o : %.c $(include_headers) +src/filter/src/butter.o : %.o : %.c $(include_headers) +src/filter/src/cheby1.o : %.o : %.c $(include_headers) +src/filter/src/cheby2.o : %.o : %.c $(include_headers) +src/filter/src/ellip.o : %.o : %.c $(include_headers) +src/filter/src/filter_rrrf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/filter_crcf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/filter_cccf.o : %.o : %.c $(include_headers) $(filter_includes) +src/filter/src/firdes.o : %.o : %.c $(include_headers) +src/filter/src/firdespm.o : %.o : %.c $(include_headers) +src/filter/src/group_delay.o : %.o : %.c $(include_headers) +src/filter/src/hM3.o : %.o : %.c $(include_headers) +src/filter/src/iirdes.pll.o : %.o : %.c $(include_headers) +src/filter/src/iirdes.o : %.o : %.c $(include_headers) +src/filter/src/lpc.o : %.o : %.c $(include_headers) +src/filter/src/rcos.o : %.o : %.c $(include_headers) +src/filter/src/rkaiser.o : %.o : %.c $(include_headers) +src/filter/src/rrcos.o : %.o : %.c $(include_headers) + + +filter_autotests := \ + src/filter/tests/fftfilt_xxxf_autotest.c \ + src/filter/tests/filter_crosscorr_autotest.c \ + src/filter/tests/firdecim_xxxf_autotest.c \ + src/filter/tests/firdes_autotest.c \ + src/filter/tests/firdespm_autotest.c \ + src/filter/tests/firfilt_xxxf_autotest.c \ + src/filter/tests/firhilb_autotest.c \ + src/filter/tests/firinterp_autotest.c \ + src/filter/tests/firpfb_autotest.c \ + src/filter/tests/groupdelay_autotest.c \ + src/filter/tests/iirdes_autotest.c \ + src/filter/tests/iirfilt_xxxf_autotest.c \ + src/filter/tests/iirfiltsos_rrrf_autotest.c \ + src/filter/tests/msresamp_crcf_autotest.c \ + src/filter/tests/resamp_crcf_autotest.c \ + src/filter/tests/resamp2_crcf_autotest.c \ + src/filter/tests/symsync_crcf_autotest.c \ + src/filter/tests/symsync_rrrf_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/filter/tests/fftfilt_runtest.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h4x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h4x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h4x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h7x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h7x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h7x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h13x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h13x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h13x256.o \ + \ + src/filter/tests/data/fftfilt_rrrf_data_h23x256.o \ + src/filter/tests/data/fftfilt_crcf_data_h23x256.o \ + src/filter/tests/data/fftfilt_cccf_data_h23x256.o \ + \ + src/filter/tests/firdecim_runtest.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M2h4x20.o \ + src/filter/tests/data/firdecim_crcf_data_M2h4x20.o \ + src/filter/tests/data/firdecim_cccf_data_M2h4x20.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M3h7x30.o \ + src/filter/tests/data/firdecim_crcf_data_M3h7x30.o \ + src/filter/tests/data/firdecim_cccf_data_M3h7x30.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M4h13x40.o \ + src/filter/tests/data/firdecim_crcf_data_M4h13x40.o \ + src/filter/tests/data/firdecim_cccf_data_M4h13x40.o \ + \ + src/filter/tests/data/firdecim_rrrf_data_M5h23x50.o \ + src/filter/tests/data/firdecim_crcf_data_M5h23x50.o \ + src/filter/tests/data/firdecim_cccf_data_M5h23x50.o \ + \ + src/filter/tests/firfilt_runtest.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h4x8.o \ + src/filter/tests/data/firfilt_crcf_data_h4x8.o \ + src/filter/tests/data/firfilt_cccf_data_h4x8.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h7x16.o \ + src/filter/tests/data/firfilt_crcf_data_h7x16.o \ + src/filter/tests/data/firfilt_cccf_data_h7x16.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h13x32.o \ + src/filter/tests/data/firfilt_crcf_data_h13x32.o \ + src/filter/tests/data/firfilt_cccf_data_h13x32.o \ + \ + src/filter/tests/data/firfilt_rrrf_data_h23x64.o \ + src/filter/tests/data/firfilt_crcf_data_h23x64.o \ + src/filter/tests/data/firfilt_cccf_data_h23x64.o \ + \ + src/filter/tests/iirfilt_runtest.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h3x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h3x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h3x64.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h5x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h5x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h5x64.o \ + \ + src/filter/tests/data/iirfilt_rrrf_data_h7x64.o \ + src/filter/tests/data/iirfilt_crcf_data_h7x64.o \ + src/filter/tests/data/iirfilt_cccf_data_h7x64.o \ + +filter_benchmarks := \ + src/filter/bench/fftfilt_crcf_benchmark.c \ + src/filter/bench/firdecim_crcf_benchmark.c \ + src/filter/bench/firhilb_benchmark.c \ + src/filter/bench/firinterp_crcf_benchmark.c \ + src/filter/bench/firfilt_crcf_benchmark.c \ + src/filter/bench/iirdecim_crcf_benchmark.c \ + src/filter/bench/iirfilt_crcf_benchmark.c \ + src/filter/bench/iirinterp_crcf_benchmark.c \ + src/filter/bench/resamp_crcf_benchmark.c \ + src/filter/bench/resamp2_crcf_benchmark.c \ + src/filter/bench/symsync_crcf_benchmark.c \ + +# +# MODULE : framing +# + +framing_objects := \ + src/framing/src/bpacketgen.o \ + src/framing/src/bpacketsync.o \ + src/framing/src/bpresync_cccf.o \ + src/framing/src/bsync_rrrf.o \ + src/framing/src/bsync_crcf.o \ + src/framing/src/bsync_cccf.o \ + src/framing/src/detector_cccf.o \ + src/framing/src/framedatastats.o \ + src/framing/src/framesyncstats.o \ + src/framing/src/framegen64.o \ + src/framing/src/framesync64.o \ + src/framing/src/flexframegen.o \ + src/framing/src/flexframesync.o \ + src/framing/src/gmskframegen.o \ + src/framing/src/gmskframesync.o \ + src/framing/src/msourcecf.o \ + src/framing/src/ofdmflexframegen.o \ + src/framing/src/ofdmflexframesync.o \ + src/framing/src/presync_cccf.o \ + src/framing/src/symstreamcf.o \ + src/framing/src/symtrack_cccf.o \ + src/framing/src/qdetector_cccf.o \ + src/framing/src/qpacketmodem.o \ + src/framing/src/qpilotgen.o \ + src/framing/src/qpilotsync.o \ + + +# list explicit targets and dependencies here + +src/framing/src/bpacketgen.o : %.o : %.c $(include_headers) +src/framing/src/bpacketsync.o : %.o : %.c $(include_headers) +src/framing/src/bpresync_cccf.o : %.o : %.c $(include_headers) src/framing/src/bpresync.c +src/framing/src/bsync_rrrf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/bsync_crcf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/bsync_cccf.o : %.o : %.c $(include_headers) src/framing/src/bsync.c +src/framing/src/detector_cccf.o : %.o : %.c $(include_headers) +src/framing/src/framedatastats.o : %.o : %.c $(include_headers) +src/framing/src/framesyncstats.o : %.o : %.c $(include_headers) +src/framing/src/framegen64.o : %.o : %.c $(include_headers) +src/framing/src/framesync64.o : %.o : %.c $(include_headers) +src/framing/src/flexframegen.o : %.o : %.c $(include_headers) +src/framing/src/flexframesync.o : %.o : %.c $(include_headers) +src/framing/src/msourcecf.o : %.o : %.c $(include_headers) src/framing/src/msource.c +src/framing/src/ofdmflexframegen.o : %.o : %.c $(include_headers) +src/framing/src/ofdmflexframesync.o : %.o : %.c $(include_headers) +src/framing/src/presync_cccf.o : %.o : %.c $(include_headers) src/framing/src/presync.c +src/framing/src/qpacketmodem.o : %.o : %.c $(include_headers) +src/framing/src/symstreamcf.o : %.o : %.c $(include_headers) src/framing/src/symstream.c +src/framing/src/symtrack_cccf.o : %.o : %.c $(include_headers) src/framing/src/symtrack.c + + +framing_autotests := \ + src/framing/tests/bpacketsync_autotest.c \ + src/framing/tests/bsync_autotest.c \ + src/framing/tests/detector_autotest.c \ + src/framing/tests/flexframesync_autotest.c \ + src/framing/tests/framesync64_autotest.c \ + src/framing/tests/qdetector_cccf_autotest.c \ + src/framing/tests/qpacketmodem_autotest.c \ + src/framing/tests/qpilotsync_autotest.c \ + + +framing_benchmarks := \ + src/framing/bench/presync_benchmark.c \ + src/framing/bench/bpacketsync_benchmark.c \ + src/framing/bench/bpresync_benchmark.c \ + src/framing/bench/bsync_benchmark.c \ + src/framing/bench/detector_benchmark.c \ + src/framing/bench/flexframesync_benchmark.c \ + src/framing/bench/framesync64_benchmark.c \ + src/framing/bench/gmskframesync_benchmark.c \ + + +# +# MODULE : math +# + +math_objects := \ + src/math/src/poly.o \ + src/math/src/polyc.o \ + src/math/src/polyf.o \ + src/math/src/polycf.o \ + src/math/src/math.o \ + src/math/src/math.bessel.o \ + src/math/src/math.gamma.o \ + src/math/src/math.complex.o \ + src/math/src/math.trig.o \ + src/math/src/modular_arithmetic.o \ + src/math/src/windows.o \ + + +poly_includes := \ + src/math/src/poly.common.c \ + src/math/src/poly.expand.c \ + src/math/src/poly.findroots.c \ + src/math/src/poly.lagrange.c \ + +src/math/src/poly.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polyc.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polyf.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/polycf.o : %.o : %.c $(include_headers) $(poly_includes) +src/math/src/math.o : %.o : %.c $(include_headers) +src/math/src/math.bessel.o : %.o : %.c $(include_headers) +src/math/src/math.gamma.o : %.o : %.c $(include_headers) +src/math/src/math.complex.o : %.o : %.c $(include_headers) +src/math/src/math.trig.o : %.o : %.c $(include_headers) +src/math/src/modular_arithmetic.o : %.o : %.c $(include_headers) +src/math/src/windows.o : %.o : %.c $(include_headers) + + +math_autotests := \ + src/math/tests/kbd_autotest.c \ + src/math/tests/math_autotest.c \ + src/math/tests/math_bessel_autotest.c \ + src/math/tests/math_gamma_autotest.c \ + src/math/tests/math_complex_autotest.c \ + src/math/tests/polynomial_autotest.c \ + + +math_benchmarks := \ + src/math/bench/polyfit_benchmark.c \ + + +# +# MODULE : matrix +# + +matrix_objects := \ + src/matrix/src/matrix.o \ + src/matrix/src/matrixf.o \ + src/matrix/src/matrixc.o \ + src/matrix/src/matrixcf.o \ + src/matrix/src/smatrix.common.o \ + src/matrix/src/smatrixb.o \ + src/matrix/src/smatrixf.o \ + src/matrix/src/smatrixi.o \ + + +matrix_includes := \ + src/matrix/src/matrix.base.c \ + src/matrix/src/matrix.cgsolve.c \ + src/matrix/src/matrix.chol.c \ + src/matrix/src/matrix.gramschmidt.c \ + src/matrix/src/matrix.inv.c \ + src/matrix/src/matrix.linsolve.c \ + src/matrix/src/matrix.ludecomp.c \ + src/matrix/src/matrix.qrdecomp.c \ + src/matrix/src/matrix.math.c \ + +src/matrix/src/matrix.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixc.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixf.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/matrixcf.o : %.o : %.c $(include_headers) $(matrix_includes) +src/matrix/src/smatrixb.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c +src/matrix/src/smatrixf.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c +src/matrix/src/smatrixi.o : %.o : %.c $(include_headers) src/matrix/src/smatrix.c + + +# matrix autotest scripts +matrix_autotests := \ + src/matrix/tests/matrixcf_autotest.c \ + src/matrix/tests/matrixf_autotest.c \ + src/matrix/tests/smatrixb_autotest.c \ + src/matrix/tests/smatrixf_autotest.c \ + src/matrix/tests/smatrixi_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/matrix/tests/data/matrixf_data_add.o \ + src/matrix/tests/data/matrixf_data_aug.o \ + src/matrix/tests/data/matrixf_data_cgsolve.o \ + src/matrix/tests/data/matrixf_data_chol.o \ + src/matrix/tests/data/matrixf_data_gramschmidt.o \ + src/matrix/tests/data/matrixf_data_inv.o \ + src/matrix/tests/data/matrixf_data_linsolve.o \ + src/matrix/tests/data/matrixf_data_ludecomp.o \ + src/matrix/tests/data/matrixf_data_mul.o \ + src/matrix/tests/data/matrixf_data_qrdecomp.o \ + src/matrix/tests/data/matrixf_data_transmul.o \ + \ + src/matrix/tests/data/matrixcf_data_add.o \ + src/matrix/tests/data/matrixcf_data_aug.o \ + src/matrix/tests/data/matrixcf_data_chol.o \ + src/matrix/tests/data/matrixcf_data_inv.o \ + src/matrix/tests/data/matrixcf_data_linsolve.o \ + src/matrix/tests/data/matrixcf_data_ludecomp.o \ + src/matrix/tests/data/matrixcf_data_mul.o \ + src/matrix/tests/data/matrixcf_data_qrdecomp.o \ + src/matrix/tests/data/matrixcf_data_transmul.o \ + +matrix_benchmarks := \ + src/matrix/bench/matrixf_inv_benchmark.c \ + src/matrix/bench/matrixf_linsolve_benchmark.c \ + src/matrix/bench/matrixf_mul_benchmark.c \ + src/matrix/bench/smatrixf_mul_benchmark.c \ + + +# +# MODULE : modem +# + +modem_objects := \ + src/modem/src/ampmodem.o \ + src/modem/src/cpfskdem.o \ + src/modem/src/cpfskmod.o \ + src/modem/src/fskdem.o \ + src/modem/src/fskmod.o \ + src/modem/src/gmskdem.o \ + src/modem/src/gmskmod.o \ + src/modem/src/modemf.o \ + src/modem/src/modem_utilities.o \ + src/modem/src/modem_apsk_const.o \ + src/modem/src/modem_arb_const.o \ + +# explicit targets and dependencies +modem_includes := \ + src/modem/src/freqdem.c \ + src/modem/src/freqmod.c \ + src/modem/src/modem_common.c \ + src/modem/src/modem_psk.c \ + src/modem/src/modem_dpsk.c \ + src/modem/src/modem_ask.c \ + src/modem/src/modem_qam.c \ + src/modem/src/modem_apsk.c \ + src/modem/src/modem_bpsk.c \ + src/modem/src/modem_qpsk.c \ + src/modem/src/modem_ook.c \ + src/modem/src/modem_sqam32.c \ + src/modem/src/modem_sqam128.c \ + src/modem/src/modem_arb.c \ + +#src/modem/src/modem_demod_soft_const.c + +src/modem/src/modemf.o : %.o : %.c $(include_headers) $(modem_includes) +src/modem/src/gmskmod.o : %.o : %.c $(include_headers) +src/modem/src/gmskdem.o : %.o : %.c $(include_headers) +src/modem/src/ampmodem.o : %.o : %.c $(include_headers) +src/modem/src/freqmodem.o : %.o : %.c $(include_headers) +src/modem/src/modem_utilities.o : %.o : %.c $(include_headers) +src/modem/src/modem_apsk_const.o : %.o : %.c $(include_headers) +src/modem/src/modem_arb_const.o : %.o : %.c $(include_headers) + + +modem_autotests := \ + src/modem/tests/cpfskmodem_autotest.c \ + src/modem/tests/freqmodem_autotest.c \ + src/modem/tests/fskmodem_autotest.c \ + src/modem/tests/modem_autotest.c \ + src/modem/tests/modem_demodsoft_autotest.c \ + src/modem/tests/modem_demodstats_autotest.c \ + + +modem_benchmarks := \ + src/modem/bench/freqdem_benchmark.c \ + src/modem/bench/freqmod_benchmark.c \ + src/modem/bench/fskdem_benchmark.c \ + src/modem/bench/fskmod_benchmark.c \ + src/modem/bench/gmskmodem_benchmark.c \ + src/modem/bench/modem_modulate_benchmark.c \ + src/modem/bench/modem_demodulate_benchmark.c \ + src/modem/bench/modem_demodsoft_benchmark.c \ + +# +# MODULE : multichannel +# + +multichannel_objects := \ + src/multichannel/src/firpfbch_crcf.o \ + src/multichannel/src/firpfbch_cccf.o \ + src/multichannel/src/ofdmframe.common.o \ + src/multichannel/src/ofdmframegen.o \ + src/multichannel/src/ofdmframesync.o \ + +$(multichannel_objects) : %.o : %.c $(include_headers) + +# list explicit targets and dependencies here +multichannel_includes := \ + src/multichannel/src/firpfbch.c \ + src/multichannel/src/firpfbch2.c \ + +src/multichannel/src/firpfbch_crcf.o : %.o : %.c $(include_headers) $(multichannel_includes) +src/multichannel/src/firpfbch_cccf.o : %.o : %.c $(include_headers) $(multichannel_includes) + +# autotests +multichannel_autotests := \ + src/multichannel/tests/firpfbch2_crcf_autotest.c \ + src/multichannel/tests/firpfbch_crcf_synthesizer_autotest.c \ + src/multichannel/tests/firpfbch_crcf_analyzer_autotest.c \ + src/multichannel/tests/ofdmframesync_autotest.c \ + +# benchmarks +multichannel_benchmarks := \ + src/multichannel/bench/firpfbch_crcf_benchmark.c \ + src/multichannel/bench/firpfbch2_crcf_benchmark.c \ + src/multichannel/bench/ofdmframesync_acquire_benchmark.c \ + src/multichannel/bench/ofdmframesync_rxsymbol_benchmark.c \ + +# +# MODULE : nco - numerically-controlled oscillator +# + +nco_objects := \ + src/nco/src/nco_crcf.o \ + src/nco/src/nco.utilities.o \ + + +src/nco/src/nco_crcf.o : %.o : %.c $(include_headers) src/nco/src/nco.c +src/nco/src/nco.utilities.o : %.o : %.c $(include_headers) + + +# autotests +nco_autotests := \ + src/nco/tests/nco_crcf_frequency_autotest.c \ + src/nco/tests/nco_crcf_phase_autotest.c \ + src/nco/tests/nco_crcf_pll_autotest.c \ + src/nco/tests/unwrap_phase_autotest.c \ + +# additional autotest objects +autotest_extra_obj += \ + src/nco/tests/data/nco_sincos_fsqrt1_2.o \ + src/nco/tests/data/nco_sincos_fsqrt1_3.o \ + src/nco/tests/data/nco_sincos_fsqrt1_5.o \ + src/nco/tests/data/nco_sincos_fsqrt1_7.o \ + +# benchmarks +nco_benchmarks := \ + src/nco/bench/nco_benchmark.c \ + src/nco/bench/vco_benchmark.c \ + +# +# MODULE : optim - optimization +# + +optim_objects := \ + src/optim/src/chromosome.o \ + src/optim/src/gasearch.o \ + src/optim/src/gradsearch.o \ + src/optim/src/optim.common.o \ + src/optim/src/qnsearch.o \ + src/optim/src/utilities.o \ + +$(optim_objects) : %.o : %.c $(include_headers) + +# autotests +optim_autotests := \ + src/optim/tests/gradsearch_autotest.c \ + +# benchmarks +optim_benchmarks := + + +# +# MODULE : quantization +# + +quantization_objects := \ + src/quantization/src/compand.o \ + src/quantization/src/quantizercf.o \ + src/quantization/src/quantizerf.o \ + src/quantization/src/quantizer.inline.o \ + + +src/quantization/src/compand.o : %.o : %.c $(include_headers) +src/quantization/src/quantizercf.o : %.o : %.c $(include_headers) src/quantization/src/quantizer.c +src/quantization/src/quantizerf.o : %.o : %.c $(include_headers) src/quantization/src/quantizer.c +src/quantization/src/quantizer.inline.o : %.o : %.c $(include_headers) + + +# autotests +quantization_autotests := \ + src/quantization/tests/compand_autotest.c \ + src/quantization/tests/quantize_autotest.c \ + + +# benchmarks +quantization_benchmarks := \ + src/quantization/bench/quantizer_benchmark.c \ + src/quantization/bench/compander_benchmark.c \ + +# +# MODULE : random +# + +random_objects := \ + src/random/src/rand.o \ + src/random/src/randn.o \ + src/random/src/randexp.o \ + src/random/src/randweib.o \ + src/random/src/randgamma.o \ + src/random/src/randnakm.o \ + src/random/src/randricek.o \ + src/random/src/scramble.o \ + + +$(random_objects) : %.o : %.c $(include_headers) + +# autotests +random_autotests := \ + src/random/tests/scramble_autotest.c \ + +# src/random/tests/random_autotest.c + + +# benchmarks +random_benchmarks := \ + src/random/bench/random_benchmark.c \ + + +# +# MODULE : sequence +# + +sequence_objects := \ + src/sequence/src/bsequence.o \ + src/sequence/src/msequence.o \ + + +$(sequence_objects) : %.o : %.c $(include_headers) + + +# autotests +sequence_autotests := \ + src/sequence/tests/bsequence_autotest.c \ + src/sequence/tests/complementary_codes_autotest.c \ + src/sequence/tests/msequence_autotest.c \ + +# benchmarks +sequence_benchmarks := \ + src/sequence/bench/bsequence_benchmark.c \ + +# +# MODULE : utility +# + +utility_objects := \ + src/utility/src/bshift_array.o \ + src/utility/src/byte_utilities.o \ + src/utility/src/msb_index.o \ + src/utility/src/pack_bytes.o \ + src/utility/src/shift_array.o \ + +$(utility_objects) : %.o : %.c $(include_headers) + +# autotests +utility_autotests := \ + src/utility/tests/bshift_array_autotest.c \ + src/utility/tests/count_bits_autotest.c \ + src/utility/tests/pack_bytes_autotest.c \ + src/utility/tests/shift_array_autotest.c \ + + +# benchmarks +utility_benchmarks := + + +# +# MODULE : vector +# + +# main objects list +vector_objects := \ + src/vector/src/vectorf_add.port.o src/vector/src/vectorf_norm.port.o src/vector/src/vectorf_mul.port.o src/vector/src/vectorf_trig.port.o src/vector/src/vectorcf_add.port.o src/vector/src/vectorcf_norm.port.o src/vector/src/vectorcf_mul.port.o src/vector/src/vectorcf_trig.port.o \ + +# portable builds +src/vector/src/vectorf_add.port.o : %.o : %.c $(include_headers) src/vector/src/vector_add.c +src/vector/src/vectorf_norm.port.o : %.o : %.c $(include_headers) src/vector/src/vector_norm.c +src/vector/src/vectorf_mul.port.o : %.o : %.c $(include_headers) src/vector/src/vector_mul.c +src/vector/src/vectorf_trig.port.o : %.o : %.c $(include_headers) src/vector/src/vector_trig.c +src/vector/src/vectorcf_add.port.o : %.o : %.c $(include_headers) src/vector/src/vector_add.c +src/vector/src/vectorcf_norm.port.o : %.o : %.c $(include_headers) src/vector/src/vector_norm.c +src/vector/src/vectorcf_mul.port.o : %.o : %.c $(include_headers) src/vector/src/vector_mul.c +src/vector/src/vectorcf_trig.port.o : %.o : %.c $(include_headers) src/vector/src/vector_trig.c + +# builds for specific architectures +# ... + +# vector autotest scripts +vector_autotests := + +# additional autotest objects +autotest_extra_obj += + +# vector benchmark scripts +vector_benchmarks := + + + +# Target collection +# +# Information about targets for each module is collected +# in these variables +objects := \ + src/libliquid.o \ + $(agc_objects) \ + $(audio_objects) \ + $(buffer_objects) \ + $(channel_objects) \ + $(dotprod_objects) \ + $(equalization_objects) \ + $(fec_objects) \ + $(fft_objects) \ + $(filter_objects) \ + $(framing_objects) \ + $(math_objects) \ + $(matrix_objects) \ + $(modem_objects) \ + $(multichannel_objects) \ + $(nco_objects) \ + $(optim_objects) \ + $(quantization_objects) \ + $(random_objects) \ + $(sequence_objects) \ + $(utility_objects) \ + $(vector_objects) \ + + +autotest_sources := \ + autotest/null_autotest.c \ + $(agc_autotests) \ + $(audio_autotests) \ + $(buffer_autotests) \ + $(channel_autotests) \ + $(dotprod_autotests) \ + $(equalization_autotests) \ + $(fec_autotests) \ + $(fft_autotests) \ + $(filter_autotests) \ + $(framing_autotests) \ + $(math_autotests) \ + $(matrix_autotests) \ + $(modem_autotests) \ + $(multichannel_autotests) \ + $(nco_autotests) \ + $(optim_autotests) \ + $(quantization_autotests) \ + $(random_autotests) \ + $(sequence_autotests) \ + $(utility_autotests) \ + $(vector_autotests) \ + + +benchmark_sources := \ + bench/null_benchmark.c \ + $(agc_benchmarks) \ + $(audio_benchmarks) \ + $(buffer_benchmarks) \ + $(channel_benchmarks) \ + $(dotprod_benchmarks) \ + $(equalization_benchmarks) \ + $(fec_benchmarks) \ + $(fft_benchmarks) \ + $(filter_benchmarks) \ + $(framing_benchmarks) \ + $(math_benchmarks) \ + $(matrix_benchmarks) \ + $(modem_benchmarks) \ + $(multichannel_benchmarks) \ + $(nco_benchmarks) \ + $(optim_benchmarks) \ + $(quantization_benchmarks) \ + $(random_benchmarks) \ + $(sequence_benchmarks) \ + $(utility_benchmarks) \ + $(vector_benchmarks) \ + + +## +## TARGET : all - build shared library (default) +## +.PHONY: all + +# Shared library +#SHARED_LIB = libliquid.so + +#MINGW: +SHARED_LIB = libliquid.dll + +# liquid library definition +libliquid.a: $(objects) + $(AR) $(ARFLAGS) $@ $^ + $(RANLIB) $@ + +# darwin +# +# gcc -dynamiclib -install_name libliquid.dylib -o libliquid.dylib libmodem.a libutility.a +libliquid.dylib: $(objects) + $(CC) -dynamiclib -install_name $@ -o $@ $^ $(LDFLAGS) + +# linux, et al +libliquid.so: libliquid.a + $(CC) -shared -Xlinker -soname=$@ -o $@ -Wl,-whole-archive $^ -Wl,-no-whole-archive $(LDFLAGS) + +# MINGW* +libliquid.dll: libliquid.a + $(CC) -shared -Xlinker -soname=$@ -o $@ -Wl,-whole-archive $^ -Wl,-no-whole-archive -Wl,--output-def,libliquid.def -Wl,--out-implib,libliquid.lib $(LDFLAGS) + +all: libliquid.a $(SHARED_LIB) + +## +## TARGET : help - print list of targets +## + +# look for all occurences of '## TARGET : ' and print rest of line to screen +help: + @echo "Targets for liquid-dsp makefile:" + @$(GREP) -E "^## TARGET : " [Mm]akefile | $(SED) 's/## TARGET : / /' + +## +## TARGET : install - installs the libraries and header files in the host system +## + +install: all + @echo "installing..." + @echo "" + mkdir -p $(DESTDIR)$(exec_prefix)$(libdir) + mkdir -p $(DESTDIR)$(prefix)/include/liquid + install -m 644 -p $(SHARED_LIB) libliquid.a $(DESTDIR)$(exec_prefix)$(libdir) + install -m 644 -p $(addprefix include/,$(headers_install)) $(DESTDIR)$(prefix)/include/liquid + @echo "" + @echo "---------------------------------------------------------" + @echo " liquid-dsp was successfully installed. " + @echo "" + @echo " On some machines (e.g. Linux) you should rebind your" + @echo " libraries by running 'ldconfig' to make the shared" + @echo " object available. You might also need to modify your" + @echo " LD_LIBRARY_PATH environment variable to include the" + @echo " directory $(DESTDIR)$(exec_prefix)" + @echo "" + @echo " Please report bugs to $(BUGREPORT)" + @echo "---------------------------------------------------------" + @echo "" + +## +## TARGET : uninstall - uninstalls the libraries and header files in the host system +## + +uninstall: + @echo "uninstalling..." + $(RM) $(addprefix $(DESTDIR)$(prefix)/include/liquid/, $(headers_install)) + $(RM) $(DESTDIR)$(exec_prefix)$(libdir)/libliquid.a + $(RM) $(DESTDIR)$(exec_prefix)$(libdir)/$(SHARED_LIB) + @echo "done." + +## +## autoscript +## + +autoscript : scripts/autoscript + +scripts/autoscript.o scripts/main.o : %.o : %.c + $(CC) $(CFLAGS) -c -o $@ $< + +scripts/autoscript : scripts/autoscript.o scripts/main.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +clean-autoscript : + $(RM) scripts/autoscript.o scripts/main.o scripts/autoscript + + +## +## TARGET : check - build and run autotest scripts +## + +# Autotests are used to check the validity and accuracy of the +# DSP libraries. + +.PHONY: autotest +autotest_prog = xautotest + +# run the autotest generator script to create autotest_include.h +autotest_include.h : scripts/autoscript $(autotest_sources) $(include_headers) + ./scripts/autoscript $(PATHSEP) autotest $(autotest_sources) > $@ + +# autotest objects +# NOTE: by default, gcc compiles any file with a '.h' extension as a 'pre-compiled +# header' so we need to explicity tell it to compile as a c source file with +# the '-x c' flag +autotest_obj = $(patsubst %.c,%.o,$(autotest_sources)) +$(autotest_obj) : %.o : %.c $(include_headers) + $(CC) $(CFLAGS) $< -c -o $@ + +# additional autotest objects +$(autotest_extra_obj) : %.o : %.c $(include_headers) + +# compile the autotest internal library functions without linking +autotest/autotestlib.o : autotest/autotestlib.c autotest/autotest.h + $(CC) $(CFLAGS) $< -c -o $@ + +# compile the autotest program without linking +$(autotest_prog).o : autotest/autotest.c autotest/autotest.h autotest_include.h + $(CC) $(CFLAGS) $< -c -o $@ + +# link the autotest program with the objects +# NOTE: linked libraries must come _after_ the target program +$(autotest_prog): $(autotest_prog).o $(autotest_obj) $(autotest_extra_obj) autotest/autotestlib.o libliquid.a + $(CC) $^ -o $@ $(LDFLAGS) + +# run the autotest program +check: $(autotest_prog) + ./$(autotest_prog) -v + +# let 'make test' be an alias for 'make check' +test: check + +# clean the generated files +clean-check: + $(RM) autotest_include.h $(autotest_prog).o $(autotest_prog) + $(RM) autotest/autotestlib.o + $(RM) $(autotest_obj) + $(RM) $(autotest_extra_obj) + + +## +## TARGET : bench - build and run all benchmarks +## + +# Benchmarks measure the relative speed of the DSP algorithms running +# on the target platform. +.PHONY: bench +bench_prog = benchmark +BENCH_CFLAGS = -Wall $(INCLUDE_CFLAGS) $(CONFIG_CFLAGS) +BENCH_LDFLAGS = $(LDFLAGS) + +# run the benchmark generator script to create benchmark_include.h +benchmark_include.h : scripts/autoscript $(benchmark_sources) $(include_headers) + ./scripts/autoscript $(PATHSEP) benchmark $(benchmark_sources) > $@ + +# benchmark objects +# NOTE: by default, gcc compiles any file with a '.h' extension as a 'pre-compiled +# header' so we need to explicity tell it to compile as a c source file with +# the '-x c' flag +benchmark_obj = $(patsubst %.c,%.o,$(benchmark_sources)) +$(benchmark_obj) : %.o : %.c $(include_headers) + $(CC) $(BENCH_CFLAGS) $< -c -o $@ + +# additional benchmark objects +$(benchmark_extra_obj) : %.o : %.c $(include_headers) + +# compile the benchmark program without linking +$(bench_prog).o: bench/bench.c benchmark_include.h bench/bench.c + $(CC) $(BENCH_CFLAGS) $< -c -o $(bench_prog).o + +# link the benchmark program with the library objects +# NOTE: linked libraries must come _after_ the target program +$(bench_prog): $(bench_prog).o $(benchmark_obj) $(benchmark_extra_obj) libliquid.a + $(CC) $^ -o $(bench_prog) $(BENCH_LDFLAGS) + +# run the benchmark program +bench: $(bench_prog) + ./$(bench_prog) + +# benchmark compare script +scripts/benchmark_compare : % : %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + +# fftbench program +bench/fftbench.o : %.o : %.c + $(CC) $(BENCH_CFLAGS) $< -c -o $@ + +bench/fftbench : % : %.o libliquid.a + $(CC) $^ -o $@ $(BENCH_LDFLAGS) + +# clean up the generated files +clean-bench: + $(RM) benchmark_include.h $(bench_prog).o $(bench_prog) + $(RM) scripts/benchmark_compare + $(RM) $(benchmark_obj) + $(RM) $(benchmark_extra_obj) + $(RM) bench/fftbench.o + $(RM) bench/fftbench + + +## +## TARGET : examples - build all examples binaries +## +.PHONY: examples +example_programs := \ + examples/agc_crcf_example \ + examples/agc_crcf_qpsk_example \ + examples/agc_rrrf_example \ + examples/ampmodem_example \ + examples/asgramcf_example \ + examples/asgramf_example \ + examples/autocorr_cccf_example \ + examples/bpacketsync_example \ + examples/bpresync_example \ + examples/bsequence_example \ + examples/cbufferf_example \ + examples/cgsolve_example \ + examples/channel_cccf_example \ + examples/chromosome_example \ + examples/compand_example \ + examples/compand_cf_example \ + examples/complementary_codes_example \ + examples/conversion_example \ + examples/crc_example \ + examples/cpfskmodem_example \ + examples/cpfskmodem_psd_example \ + examples/cvsd_example \ + examples/detector_cccf_example \ + examples/dotprod_rrrf_example \ + examples/dotprod_cccf_example \ + examples/eqlms_cccf_block_example \ + examples/eqlms_cccf_blind_example \ + examples/eqlms_cccf_decisiondirected_example \ + examples/eqlms_cccf_example \ + examples/eqrls_cccf_example \ + examples/fec_example \ + examples/fec_soft_example \ + examples/fft_example \ + examples/fftfilt_crcf_example \ + examples/firdecim_crcf_example \ + examples/firfarrow_rrrf_example \ + examples/firfilt_cccf_example \ + examples/firfilt_crcf_example \ + examples/firfilt_rrrf_example \ + examples/firdes_kaiser_example \ + examples/firdespm_example \ + examples/firhilb_example \ + examples/firhilb_decim_example \ + examples/firhilb_interp_example \ + examples/firpfbch2_crcf_example \ + examples/firinterp_crcf_example \ + examples/firpfbch_crcf_example \ + examples/firpfbch_crcf_analysis_example \ + examples/firpfbch_crcf_synthesis_example \ + examples/flexframesync_example \ + examples/flexframesync_reconfig_example \ + examples/framesync64_example \ + examples/freqmodem_example \ + examples/fskmodem_example \ + examples/gasearch_example \ + examples/gasearch_knapsack_example \ + examples/gmskframesync_example \ + examples/gmskmodem_example \ + examples/gradsearch_datafit_example \ + examples/gradsearch_example \ + examples/interleaver_example \ + examples/interleaver_soft_example \ + examples/interleaver_scatterplot_example \ + examples/iirdes_example \ + examples/iirdes_analog_example \ + examples/iirdes_pll_example \ + examples/iirdecim_crcf_example \ + examples/iirfilt_cccf_example \ + examples/iirfilt_crcf_example \ + examples/iirfilt_crcf_dcblocker_example \ + examples/iirinterp_crcf_example \ + examples/kbd_window_example \ + examples/lpc_example \ + examples/libliquid_example \ + examples/matched_filter_example \ + examples/math_lngamma_example \ + examples/math_primitive_root_example \ + examples/modem_arb_example \ + examples/modem_example \ + examples/modem_soft_example \ + examples/modular_arithmetic_example \ + examples/msequence_example \ + examples/msourcecf_example \ + examples/msresamp_crcf_example \ + examples/msresamp2_crcf_example \ + examples/nco_example \ + examples/nco_pll_example \ + examples/nco_pll_modem_example \ + examples/nyquist_filter_example \ + examples/ofdmflexframesync_example \ + examples/ofdmframesync_example \ + examples/packetizer_example \ + examples/packetizer_soft_example \ + examples/pll_example \ + examples/polyfit_example \ + examples/polyfit_lagrange_example \ + examples/poly_findroots_example \ + examples/qdetector_cccf_example \ + examples/qpacketmodem_performance_example \ + examples/qpacketmodem_example \ + examples/qpilotsync_example \ + examples/qnsearch_example \ + examples/quantize_example \ + examples/random_histogram_example \ + examples/repack_bytes_example \ + examples/resamp_crcf_example \ + examples/resamp2_cccf_example \ + examples/resamp2_crcf_example \ + examples/resamp2_crcf_decim_example \ + examples/resamp2_crcf_filter_example \ + examples/resamp2_crcf_interp_example \ + examples/ricek_channel_example \ + examples/scramble_example \ + examples/smatrix_example \ + examples/spgramcf_example \ + examples/spgramcf_waterfall_example \ + examples/spgramf_example \ + examples/symsync_crcf_example \ + examples/symsync_crcf_full_example \ + examples/symsync_crcf_kaiser_example \ + examples/symstreamcf_example \ + examples/symtrack_cccf_example \ + examples/wdelayf_example \ + examples/windowf_example \ + +# examples/metadata_example +# examples/ofdmframegen_example +# examples/gmskframe_example +# examples/fading_generator_example + +example_objects = $(patsubst %,%.o,$(example_programs)) +examples: $(example_programs) + +EXAMPLES_LDFLAGS = $(LDFLAGS) + +# NOTE: linked libraries must come _after_ the target program +$(example_objects): %.o : %.c + +$(example_programs): % : %.o libliquid.a + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +# clean examples +clean-examples: + $(RM) examples/*.o + $(RM) $(example_programs) + +## +## TARGET : sandbox - build all sandbox binaries +## + +# NOTE: sandbox _requires_ fftw3 to build +.PHONY: sandbox +sandbox_programs = \ + sandbox/bpresync_test \ + sandbox/cpmodem_test \ + sandbox/count_ones_gentab \ + sandbox/crc_gentab \ + sandbox/ellip_func_test \ + sandbox/ellip_test \ + sandbox/eqlms_cccf_test \ + sandbox/fecsoft_ber_test \ + sandbox/fec_g2412product_test \ + sandbox/fec_golay2412_test \ + sandbox/fec_golay_test \ + sandbox/fec_hamming3126_example \ + sandbox/fec_hamming128_test \ + sandbox/fec_hamming128_gentab \ + sandbox/fec_hamming128_example \ + sandbox/fec_hamming74_gentab \ + sandbox/fec_hamming84_gentab \ + sandbox/fec_hamming_test \ + sandbox/fec_ldpc_test \ + sandbox/fec_rep3_test \ + sandbox/fec_rep5_test \ + sandbox/fec_secded2216_test \ + sandbox/fec_secded3932_test \ + sandbox/fec_secded7264_test \ + sandbox/fec_spc2216_test \ + sandbox/fec_secded_punctured_test \ + sandbox/fecsoft_conv_test \ + sandbox/fecsoft_hamming128_gentab \ + sandbox/fecsoft_ldpc_test \ + sandbox/fec_sumproduct_test \ + sandbox/fskmodem_test \ + sandbox/fft_dual_radix_test \ + sandbox/fft_mixed_radix_test \ + sandbox/fft_recursive_plan_test \ + sandbox/fft_recursive_test \ + sandbox/fft_rader_prime_test \ + sandbox/fft_rader_prime_radix2_test \ + sandbox/fft_r2r_test \ + sandbox/firdes_energy_test \ + sandbox/firdes_fexp_test \ + sandbox/firdes_gmskrx_test \ + sandbox/firdes_length_test \ + sandbox/firfarrow_rrrf_test \ + sandbox/firpfbch_analysis_alignment_test \ + sandbox/firpfbch2_analysis_equivalence_test \ + sandbox/firpfbch2_test \ + sandbox/firpfbch_analysis_equivalence_test \ + sandbox/firpfbch_synthesis_equivalence_test \ + sandbox/gmskmodem_test \ + sandbox/gmskmodem_coherent_test \ + sandbox/gmskmodem_equalizer_test \ + sandbox/householder_test \ + sandbox/iirdes_example \ + sandbox/iirfilt_intdiff_test \ + sandbox/levinson_test \ + sandbox/matched_filter_test \ + sandbox/matched_filter_cfo_test \ + sandbox/math_lngamma_test \ + sandbox/math_cacosf_test \ + sandbox/math_casinf_test \ + sandbox/math_catanf_test \ + sandbox/math_cexpf_test \ + sandbox/math_clogf_test \ + sandbox/math_csqrtf_test \ + sandbox/matrix_test \ + sandbox/minsearch_test \ + sandbox/minsearch2_test \ + sandbox/matrix_eig_test \ + sandbox/modem_demodulate_arb_gentab \ + sandbox/modem_demodulate_soft_test \ + sandbox/modem_demodulate_soft_gentab \ + sandbox/mskmodem_test \ + sandbox/msresamp_crcf_test \ + sandbox/ofdmoqam_firpfbch_test \ + sandbox/ofdm_ber_test \ + sandbox/ofdmframe_papr_test \ + sandbox/ofdmframesync_cfo_test \ + sandbox/pll_design_test \ + sandbox/predemod_sync_test \ + sandbox/quasinewton_test \ + sandbox/recursive_qpsk_test \ + sandbox/resamp2_crcf_filterbank_test \ + sandbox/resamp2_crcf_interp_recreate_test \ + sandbox/reverse_byte_gentab \ + sandbox/rkaiser2_test \ + sandbox/shadowing_test \ + sandbox/simplex_test \ + sandbox/symsync_crcf_test \ + sandbox/symsync_eqlms_test \ + sandbox/svd_test \ + sandbox/thiran_allpass_iir_test \ + sandbox/vectorcf_test \ + +# sandbox/packetizer_persistent_ber_test +# firpfbch_analysis_test +# sandbox/ofdmoqam_firpfbch_cfo_test +# sandbox/mdct_test +# sandbox/fct_test + + +sandbox_objects = $(patsubst %,%.o,$(sandbox_programs)) +sandbox: $(sandbox_programs) +SANDBOX_LDFLAGS = $(LDFLAGS) -lfftw3f + +# NOTE: linked libraries must come _after_ the target program +$(sandbox_objects): %.o : %.c + +$(sandbox_programs): % : %.o libliquid.a + $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +# clean sandbox +clean-sandbox: + $(RM) sandbox/*.o + $(RM) $(sandbox_programs) + + +## +## TARGET : world - build absolutely everything +## +world : all check bench examples sandbox + +## +## TARGET : clean - clean build (objects, dependencies, libraries, etc.) +## + +.PHONY: clean + +clean-modules: + @echo "cleaning modules..." + $(RM) src/agc/src/*.o src/agc/bench/*.o src/agc/tests/*.o + $(RM) src/audio/src/*.o src/audio/bench/*.o src/audio/tests/*.o + $(RM) src/buffer/src/*.o src/buffer/bench/*.o src/buffer/tests/*.o + $(RM) src/channel/src/*.o src/channel/bench/*.o src/channel/tests/*.o + $(RM) src/dotprod/src/*.o src/dotprod/bench/*.o src/dotprod/tests/*.o + $(RM) src/equalization/src/*.o src/equalization/bench/*.o src/equalization/tests/*.o + $(RM) src/fec/src/*.o src/fec/bench/*.o src/fec/tests/*.o + $(RM) src/fft/src/*.o src/fft/bench/*.o src/fft/tests/*.o + $(RM) src/filter/src/*.o src/filter/bench/*.o src/filter/tests/*.o + $(RM) src/framing/src/*.o src/framing/bench/*.o src/framing/tests/*.o + $(RM) src/math/src/*.o src/math/bench/*.o src/math/tests/*.o + $(RM) src/matrix/src/*.o src/matrix/bench/*.o src/matrix/tests/*.o + $(RM) src/modem/src/*.o src/modem/bench/*.o src/modem/tests/*.o + $(RM) src/multichannel/src/*.o src/multichannel/bench/*.o src/multichannel/tests/*.o + $(RM) src/nco/src/*.o src/nco/bench/*.o src/nco/tests/*.o + $(RM) src/optim/src/*.o src/optim/bench/*.o src/optim/tests/*.o + $(RM) src/quantization/src/*.o src/quantization/bench/*.o src/quantization/tests/*.o + $(RM) src/random/src/*.o src/random/bench/*.o src/random/tests/*.o + $(RM) src/sequence/src/*.o src/sequence/bench/*.o src/sequence/tests/*.o + $(RM) src/utility/src/*.o src/utility/bench/*.o src/utility/tests/*.o + $(RM) src/vector/src/*.o src/vector/bench/*.o src/vector/tests/*.o + $(RM) src/libliquid.o + +clean: clean-modules clean-autoscript clean-check clean-bench clean-examples clean-sandbox + $(RM) $(extra_clean) + $(RM) libliquid.a + $(RM) $(SHARED_LIB) + +## +## TARGET : distclean - removes everything except the originally distributed files +## + +distclean: clean + @echo "cleaning distribution..." + $(RM) octave-core *.m + $(RM) configure config.h config.h.in config.h.in~ config.log config.status + $(RM) -r autom4te.cache + $(RM) aclocal.m4 + $(RM) makefile + diff --git a/external/liquid-dsp/msvc/32/libliquid.a b/external/liquid-dsp/msvc/32/libliquid.a index 473d57d..a8b3d3f 100644 Binary files a/external/liquid-dsp/msvc/32/libliquid.a and b/external/liquid-dsp/msvc/32/libliquid.a differ diff --git a/external/liquid-dsp/msvc/32/libliquid.def b/external/liquid-dsp/msvc/32/libliquid.def index 6df6363..b3b8a0a 100644 --- a/external/liquid-dsp/msvc/32/libliquid.def +++ b/external/liquid-dsp/msvc/32/libliquid.def @@ -36,1836 +36,2058 @@ EXPORTS ampmodem_create @35 ampmodem_debug_print @36 ampmodem_demodulate @37 - ampmodem_destroy @38 - ampmodem_modulate @39 - ampmodem_print @40 - ampmodem_reset @41 - apsk128_map @42 DATA - apsk128_num_levels @43 DATA - apsk128_p @44 DATA - apsk128_phi @45 DATA - apsk128_r @46 DATA - apsk128_r_slicer @47 DATA - apsk16_map @48 DATA - apsk16_num_levels @49 DATA - apsk16_p @50 DATA - apsk16_phi @51 DATA - apsk16_r @52 DATA - apsk16_r_slicer @53 DATA - apsk256_map @54 DATA - apsk256_num_levels @55 DATA - apsk256_p @56 DATA - apsk256_phi @57 DATA - apsk256_r @58 DATA - apsk256_r_slicer @59 DATA - apsk32_map @60 DATA - apsk32_num_levels @61 DATA - apsk32_p @62 DATA - apsk32_phi @63 DATA - apsk32_r @64 DATA - apsk32_r_slicer @65 DATA - apsk4_map @66 DATA - apsk4_num_levels @67 DATA - apsk4_p @68 DATA - apsk4_phi @69 DATA - apsk4_r @70 DATA - apsk4_r_slicer @71 DATA - apsk64_map @72 DATA - apsk64_num_levels @73 DATA - apsk64_p @74 DATA - apsk64_phi @75 DATA - apsk64_r @76 DATA - apsk64_r_slicer @77 DATA - apsk8_map @78 DATA - apsk8_num_levels @79 DATA - apsk8_p @80 DATA - apsk8_phi @81 DATA - apsk8_r @82 DATA - apsk8_r_slicer @83 DATA - asgram_create @84 - asgram_destroy @85 - asgram_execute @86 - asgram_push @87 - asgram_reset @88 - asgram_set_scale @89 - autocorr_cccf_create @90 - autocorr_cccf_destroy @91 - autocorr_cccf_execute @92 - autocorr_cccf_execute_block @93 - autocorr_cccf_get_energy @94 - autocorr_cccf_print @95 - autocorr_cccf_push @96 - autocorr_cccf_reset @97 - autocorr_rrrf_create @98 - autocorr_rrrf_destroy @99 - autocorr_rrrf_execute @100 - autocorr_rrrf_execute_block @101 - autocorr_rrrf_get_energy @102 - autocorr_rrrf_print @103 - autocorr_rrrf_push @104 - autocorr_rrrf_reset @105 - awgn @106 - bessel_azpkf @107 - bilinear_zpkf @108 - blackmanharris @109 - bpacketgen_assemble_header @110 - bpacketgen_assemble_pnsequence @111 - bpacketgen_compute_packet_len @112 - bpacketgen_create @113 - bpacketgen_destroy @114 - bpacketgen_encode @115 - bpacketgen_get_packet_len @116 - bpacketgen_print @117 - bpacketgen_recreate @118 - bpacketsync_assemble_pnsequence @119 - bpacketsync_create @120 - bpacketsync_decode_header @121 - bpacketsync_decode_payload @122 - bpacketsync_destroy @123 - bpacketsync_execute @124 - bpacketsync_execute_bit @125 - bpacketsync_execute_byte @126 - bpacketsync_execute_rxheader @127 - bpacketsync_execute_rxpayload @128 - bpacketsync_execute_seekpn @129 - bpacketsync_execute_sym @130 - bpacketsync_print @131 - bpacketsync_reconfig @132 - bpacketsync_reset @133 - bpresync_cccf_correlate @134 - bpresync_cccf_correlatex @135 - bpresync_cccf_create @136 - bpresync_cccf_destroy @137 - bpresync_cccf_print @138 - bpresync_cccf_push @139 - bpresync_cccf_reset @140 - bsequence_accumulate @141 - bsequence_add @142 - bsequence_circshift @143 - bsequence_clear @144 - bsequence_correlate @145 - bsequence_create @146 - bsequence_create_ccodes @147 - bsequence_destroy @148 - bsequence_get_length @149 - bsequence_index @150 - bsequence_init @151 - bsequence_init_msequence @152 - bsequence_mul @153 - bsequence_print @154 - bsequence_push @155 - bsync_cccf_correlate @156 - bsync_cccf_create @157 - bsync_cccf_create_msequence @158 - bsync_cccf_destroy @159 - bsync_cccf_print @160 - bsync_crcf_correlate @161 - bsync_crcf_create @162 - bsync_crcf_create_msequence @163 - bsync_crcf_destroy @164 - bsync_crcf_print @165 - bsync_rrrf_correlate @166 - bsync_rrrf_create @167 - bsync_rrrf_create_msequence @168 - bsync_rrrf_destroy @169 - bsync_rrrf_print @170 - butter_azpkf @171 - cawgn @172 - cbuffercf_clear @173 - cbuffercf_create @174 - cbuffercf_create_max @175 - cbuffercf_debug_print @176 - cbuffercf_destroy @177 - cbuffercf_is_full @178 - cbuffercf_linearize @179 - cbuffercf_max_read @180 - cbuffercf_max_size @181 - cbuffercf_pop @182 - cbuffercf_print @183 - cbuffercf_push @184 - cbuffercf_read @185 - cbuffercf_release @186 - cbuffercf_size @187 - cbuffercf_space_available @188 - cbuffercf_write @189 - cbufferf_clear @190 - cbufferf_create @191 - cbufferf_create_max @192 - cbufferf_debug_print @193 - cbufferf_destroy @194 - cbufferf_is_full @195 - cbufferf_linearize @196 - cbufferf_max_read @197 - cbufferf_max_size @198 - cbufferf_pop @199 - cbufferf_print @200 - cbufferf_push @201 - cbufferf_read @202 - cbufferf_release @203 - cbufferf_size @204 - cbufferf_space_available @205 - cbufferf_write @206 - cheby1_azpkf @207 - cheby2_azpkf @208 - checksum_generate_key @209 - chromosome_clear @210 - chromosome_copy @211 - chromosome_create @212 - chromosome_create_basic @213 - chromosome_create_clone @214 - chromosome_crossover @215 - chromosome_destroy @216 - chromosome_get_num_traits @217 - chromosome_init @218 - chromosome_init_random @219 - chromosome_initf @220 - chromosome_mutate @221 - chromosome_print @222 - chromosome_printf @223 - chromosome_value @224 - chromosome_valuef @225 - compress_cf_mulaw @226 - compress_mulaw @227 - count_bit_errors @228 - count_bit_errors_array @229 - crandnf @230 - crc16_generate_key @231 - crc24_generate_key @232 - crc32_generate_key @233 - crc8_generate_key @234 - crc_generate_key @235 - crc_get_length @236 - crc_scheme_str @237 DATA - crc_validate_message @238 - cvsd_create @239 - cvsd_decode @240 - cvsd_decode8 @241 - cvsd_destroy @242 - cvsd_encode @243 - cvsd_encode8 @244 - cvsd_print @245 - detector_cccf_compute_dotprods @246 - detector_cccf_correlate @247 - detector_cccf_create @248 - detector_cccf_debug_print @249 - detector_cccf_destroy @250 - detector_cccf_estimate_offsets @251 - detector_cccf_print @252 - detector_cccf_reset @253 - detector_cccf_update_sumsq @254 - dotprod_cccf_create @255 - dotprod_cccf_destroy @256 - dotprod_cccf_execute @257 - dotprod_cccf_print @258 - dotprod_cccf_recreate @259 - dotprod_cccf_run @260 - dotprod_cccf_run4 @261 - dotprod_crcf_create @262 - dotprod_crcf_destroy @263 - dotprod_crcf_execute @264 - dotprod_crcf_print @265 - dotprod_crcf_recreate @266 - dotprod_crcf_run @267 - dotprod_crcf_run4 @268 - dotprod_rrrf_create @269 - dotprod_rrrf_destroy @270 - dotprod_rrrf_execute @271 - dotprod_rrrf_print @272 - dotprod_rrrf_recreate @273 - dotprod_rrrf_run @274 - dotprod_rrrf_run4 @275 - ellip_acdf @276 - ellip_asnf @277 - ellip_azpkf @278 - ellip_cdf @279 - ellip_snf @280 - ellipdegf @281 - ellipkf @282 - eqlms_cccf_create @283 - eqlms_cccf_create_rnyquist @284 - eqlms_cccf_destroy @285 - eqlms_cccf_execute @286 - eqlms_cccf_get_bw @287 - eqlms_cccf_get_weights @288 - eqlms_cccf_print @289 - eqlms_cccf_push @290 - eqlms_cccf_recreate @291 - eqlms_cccf_reset @292 - eqlms_cccf_set_bw @293 - eqlms_cccf_step @294 - eqlms_cccf_train @295 - eqlms_cccf_update_sumsq @296 - eqlms_rrrf_create @297 - eqlms_rrrf_create_rnyquist @298 - eqlms_rrrf_destroy @299 - eqlms_rrrf_execute @300 - eqlms_rrrf_get_bw @301 - eqlms_rrrf_get_weights @302 - eqlms_rrrf_print @303 - eqlms_rrrf_push @304 - eqlms_rrrf_recreate @305 - eqlms_rrrf_reset @306 - eqlms_rrrf_set_bw @307 - eqlms_rrrf_step @308 - eqlms_rrrf_train @309 - eqlms_rrrf_update_sumsq @310 - eqrls_cccf_create @311 - eqrls_cccf_destroy @312 - eqrls_cccf_execute @313 - eqrls_cccf_get_bw @314 - eqrls_cccf_get_weights @315 - eqrls_cccf_print @316 - eqrls_cccf_push @317 - eqrls_cccf_recreate @318 - eqrls_cccf_reset @319 - eqrls_cccf_set_bw @320 - eqrls_cccf_step @321 - eqrls_cccf_train @322 - eqrls_rrrf_create @323 - eqrls_rrrf_destroy @324 - eqrls_rrrf_execute @325 - eqrls_rrrf_get_bw @326 - eqrls_rrrf_get_weights @327 - eqrls_rrrf_print @328 - eqrls_rrrf_push @329 - eqrls_rrrf_recreate @330 - eqrls_rrrf_reset @331 - eqrls_rrrf_set_bw @332 - eqrls_rrrf_step @333 - eqrls_rrrf_train @334 - estimate_req_filter_As @335 - estimate_req_filter_df @336 - estimate_req_filter_len @337 - estimate_req_filter_len_Herrmann @338 - estimate_req_filter_len_Kaiser @339 - expand_cf_mulaw @340 - expand_mulaw @341 - fec_block_get_enc_msg_len @342 - fec_conv27_poly @343 DATA - fec_conv27p23_matrix @344 DATA - fec_conv27p34_matrix @345 DATA - fec_conv27p45_matrix @346 DATA - fec_conv27p56_matrix @347 DATA - fec_conv27p67_matrix @348 DATA - fec_conv27p78_matrix @349 DATA - fec_conv29_poly @350 DATA - fec_conv29p23_matrix @351 DATA - fec_conv29p34_matrix @352 DATA - fec_conv29p45_matrix @353 DATA - fec_conv29p56_matrix @354 DATA - fec_conv29p67_matrix @355 DATA - fec_conv29p78_matrix @356 DATA - fec_conv39_poly @357 DATA - fec_conv615_poly @358 DATA - fec_conv_create @359 - fec_conv_destroy @360 - fec_conv_get_enc_msg_len @361 - fec_conv_punctured_create @362 - fec_conv_punctured_decode @363 - fec_conv_punctured_destroy @364 - fec_conv_punctured_encode @365 - fec_create @366 - fec_decode @367 - fec_decode_soft @368 - fec_destroy @369 - fec_encode @370 - fec_get_enc_msg_length @371 - fec_get_rate @372 - fec_golay2412_create @373 - fec_golay2412_decode @374 - fec_golay2412_decode_symbol @375 - fec_golay2412_destroy @376 - fec_golay2412_encode @377 - fec_golay2412_encode_symbol @378 - fec_hamming128_create @379 - fec_hamming128_decode @380 - fec_hamming128_decode_soft @381 - fec_hamming128_decode_symbol @382 - fec_hamming128_destroy @383 - fec_hamming128_encode @384 - fec_hamming128_encode_symbol @385 - fec_hamming1511_decode_symbol @386 - fec_hamming1511_encode_symbol @387 - fec_hamming3126_decode_symbol @388 - fec_hamming3126_encode_symbol @389 - fec_hamming74_create @390 - fec_hamming74_decode @391 - fec_hamming74_decode_soft @392 - fec_hamming74_destroy @393 - fec_hamming74_encode @394 - fec_hamming84_create @395 - fec_hamming84_decode @396 - fec_hamming84_decode_soft @397 - fec_hamming84_destroy @398 - fec_hamming84_encode @399 - fec_pass_create @400 - fec_pass_decode @401 - fec_pass_destroy @402 - fec_pass_encode @403 - fec_pass_print @404 - fec_print @405 - fec_recreate @406 - fec_rep3_create @407 - fec_rep3_decode @408 - fec_rep3_decode_soft @409 - fec_rep3_destroy @410 - fec_rep3_encode @411 - fec_rep3_print @412 - fec_rep5_create @413 - fec_rep5_decode @414 - fec_rep5_decode_soft @415 - fec_rep5_destroy @416 - fec_rep5_encode @417 - fec_rep5_print @418 - fec_rs_create @419 - fec_rs_decode @420 - fec_rs_destroy @421 - fec_rs_encode @422 - fec_rs_get_enc_msg_len @423 - fec_scheme_is_convolutional @424 - fec_scheme_is_hamming @425 - fec_scheme_is_punctured @426 - fec_scheme_is_reedsolomon @427 - fec_scheme_is_repeat @428 - fec_scheme_str @429 DATA - fec_secded2216_compute_parity @430 - fec_secded2216_compute_syndrome @431 - fec_secded2216_create @432 - fec_secded2216_decode @433 - fec_secded2216_decode_symbol @434 - fec_secded2216_destroy @435 - fec_secded2216_encode @436 - fec_secded2216_encode_symbol @437 - fec_secded2216_estimate_ehat @438 - fec_secded3932_compute_parity @439 - fec_secded3932_compute_syndrome @440 - fec_secded3932_create @441 - fec_secded3932_decode @442 - fec_secded3932_decode_symbol @443 - fec_secded3932_destroy @444 - fec_secded3932_encode @445 - fec_secded3932_encode_symbol @446 - fec_secded3932_estimate_ehat @447 - fec_secded7264_compute_parity @448 - fec_secded7264_compute_syndrome @449 - fec_secded7264_create @450 - fec_secded7264_decode @451 - fec_secded7264_decode_symbol @452 - fec_secded7264_destroy @453 - fec_secded7264_encode @454 - fec_secded7264_encode_symbol @455 - fec_secded7264_estimate_ehat @456 - fec_sumproduct @457 - fec_sumproduct_step @458 - fecsoft_hamming128_decode @459 - fecsoft_hamming128_decode_n3 @460 - fecsoft_hamming128_n3 @461 DATA - fecsoft_hamming74_decode @462 - fecsoft_hamming84_decode @463 - fft_create_plan @464 - fft_create_plan_dft @465 - fft_create_plan_mixed_radix @466 - fft_create_plan_r2r_1d @467 - fft_create_plan_rader @468 - fft_create_plan_rader2 @469 - fft_create_plan_radix2 @470 - fft_destroy_plan @471 - fft_destroy_plan_dft @472 - fft_destroy_plan_mixed_radix @473 - fft_destroy_plan_r2r_1d @474 - fft_destroy_plan_rader @475 - fft_destroy_plan_rader2 @476 - fft_destroy_plan_radix2 @477 - fft_estimate_mixed_radix @478 - fft_execute @479 - fft_execute_REDFT00 @480 - fft_execute_REDFT01 @481 - fft_execute_REDFT10 @482 - fft_execute_REDFT11 @483 - fft_execute_RODFT00 @484 - fft_execute_RODFT01 @485 - fft_execute_RODFT10 @486 - fft_execute_RODFT11 @487 - fft_execute_dft @488 - fft_execute_dft_16 @489 - fft_execute_dft_2 @490 - fft_execute_dft_3 @491 - fft_execute_dft_4 @492 - fft_execute_dft_5 @493 - fft_execute_dft_6 @494 - fft_execute_dft_7 @495 - fft_execute_dft_8 @496 - fft_execute_mixed_radix @497 - fft_execute_rader @498 - fft_execute_rader2 @499 - fft_execute_radix2 @500 - fft_is_radix2 @501 - fft_print_plan @502 - fft_print_plan_r2r_1d @503 - fft_print_plan_recursive @504 - fft_r2r_1d_run @505 - fft_reverse_index @506 - fft_run @507 - fft_shift @508 - fftfilt_cccf_create @509 - fftfilt_cccf_destroy @510 - fftfilt_cccf_execute @511 - fftfilt_cccf_get_length @512 - fftfilt_cccf_print @513 - fftfilt_cccf_reset @514 - fftfilt_cccf_set_scale @515 - fftfilt_crcf_create @516 - fftfilt_crcf_destroy @517 - fftfilt_crcf_execute @518 - fftfilt_crcf_get_length @519 - fftfilt_crcf_print @520 - fftfilt_crcf_reset @521 - fftfilt_crcf_set_scale @522 - fftfilt_rrrf_create @523 - fftfilt_rrrf_destroy @524 - fftfilt_rrrf_execute @525 - fftfilt_rrrf_get_length @526 - fftfilt_rrrf_print @527 - fftfilt_rrrf_reset @528 - fftfilt_rrrf_set_scale @529 - fir_group_delay @530 - firdecim_cccf_clear @531 - firdecim_cccf_create @532 - firdecim_cccf_create_prototype @533 - firdecim_cccf_create_rnyquist @534 - firdecim_cccf_destroy @535 - firdecim_cccf_execute @536 - firdecim_cccf_execute_block @537 - firdecim_cccf_print @538 - firdecim_crcf_clear @539 - firdecim_crcf_create @540 - firdecim_crcf_create_prototype @541 - firdecim_crcf_create_rnyquist @542 - firdecim_crcf_destroy @543 - firdecim_crcf_execute @544 - firdecim_crcf_execute_block @545 - firdecim_crcf_print @546 - firdecim_rrrf_clear @547 - firdecim_rrrf_create @548 - firdecim_rrrf_create_prototype @549 - firdecim_rrrf_create_rnyquist @550 - firdecim_rrrf_destroy @551 - firdecim_rrrf_execute @552 - firdecim_rrrf_execute_block @553 - firdecim_rrrf_print @554 - firdespm_compute_error @555 - firdespm_compute_interp @556 - firdespm_compute_taps @557 - firdespm_create @558 - firdespm_destroy @559 - firdespm_execute @560 - firdespm_iext_search @561 - firdespm_init_grid @562 - firdespm_is_search_complete @563 - firdespm_print @564 - firdespm_run @565 - firfarrow_crcf_create @566 - firfarrow_crcf_destroy @567 - firfarrow_crcf_execute @568 - firfarrow_crcf_execute_block @569 - firfarrow_crcf_freqresponse @570 - firfarrow_crcf_genpoly @571 - firfarrow_crcf_get_coefficients @572 - firfarrow_crcf_get_length @573 - firfarrow_crcf_groupdelay @574 - firfarrow_crcf_print @575 - firfarrow_crcf_push @576 - firfarrow_crcf_reset @577 - firfarrow_crcf_set_delay @578 - firfarrow_rrrf_create @579 - firfarrow_rrrf_destroy @580 - firfarrow_rrrf_execute @581 - firfarrow_rrrf_execute_block @582 - firfarrow_rrrf_freqresponse @583 - firfarrow_rrrf_genpoly @584 - firfarrow_rrrf_get_coefficients @585 - firfarrow_rrrf_get_length @586 - firfarrow_rrrf_groupdelay @587 - firfarrow_rrrf_print @588 - firfarrow_rrrf_push @589 - firfarrow_rrrf_reset @590 - firfarrow_rrrf_set_delay @591 - firfilt_cccf_create @592 - firfilt_cccf_create_kaiser @593 - firfilt_cccf_create_rnyquist @594 - firfilt_cccf_destroy @595 - firfilt_cccf_execute @596 - firfilt_cccf_execute_block @597 - firfilt_cccf_freqresponse @598 - firfilt_cccf_get_length @599 - firfilt_cccf_groupdelay @600 - firfilt_cccf_print @601 - firfilt_cccf_push @602 - firfilt_cccf_recreate @603 - firfilt_cccf_reset @604 - firfilt_cccf_set_scale @605 - firfilt_crcf_create @606 - firfilt_crcf_create_kaiser @607 - firfilt_crcf_create_rnyquist @608 - firfilt_crcf_destroy @609 - firfilt_crcf_execute @610 - firfilt_crcf_execute_block @611 - firfilt_crcf_freqresponse @612 - firfilt_crcf_get_length @613 - firfilt_crcf_groupdelay @614 - firfilt_crcf_print @615 - firfilt_crcf_push @616 - firfilt_crcf_recreate @617 - firfilt_crcf_reset @618 - firfilt_crcf_set_scale @619 - firfilt_rrrf_create @620 - firfilt_rrrf_create_kaiser @621 - firfilt_rrrf_create_rnyquist @622 - firfilt_rrrf_destroy @623 - firfilt_rrrf_execute @624 - firfilt_rrrf_execute_block @625 - firfilt_rrrf_freqresponse @626 - firfilt_rrrf_get_length @627 - firfilt_rrrf_groupdelay @628 - firfilt_rrrf_print @629 - firfilt_rrrf_push @630 - firfilt_rrrf_recreate @631 - firfilt_rrrf_reset @632 - firfilt_rrrf_set_scale @633 - firhilbf_c2r_execute @634 - firhilbf_create @635 - firhilbf_decim_execute @636 - firhilbf_destroy @637 - firhilbf_interp_execute @638 - firhilbf_print @639 - firhilbf_r2c_execute @640 - firhilbf_reset @641 - firinterp_cccf_create @642 - firinterp_cccf_create_nyquist @643 - firinterp_cccf_create_prototype @644 - firinterp_cccf_create_rnyquist @645 - firinterp_cccf_destroy @646 - firinterp_cccf_execute @647 - firinterp_cccf_execute_block @648 - firinterp_cccf_print @649 - firinterp_cccf_reset @650 - firinterp_crcf_create @651 - firinterp_crcf_create_nyquist @652 - firinterp_crcf_create_prototype @653 - firinterp_crcf_create_rnyquist @654 - firinterp_crcf_destroy @655 - firinterp_crcf_execute @656 - firinterp_crcf_execute_block @657 - firinterp_crcf_print @658 - firinterp_crcf_reset @659 - firinterp_rrrf_create @660 - firinterp_rrrf_create_nyquist @661 - firinterp_rrrf_create_prototype @662 - firinterp_rrrf_create_rnyquist @663 - firinterp_rrrf_destroy @664 - firinterp_rrrf_execute @665 - firinterp_rrrf_execute_block @666 - firinterp_rrrf_print @667 - firinterp_rrrf_reset @668 - firpfb_cccf_create @669 - firpfb_cccf_create_drnyquist @670 - firpfb_cccf_create_rnyquist @671 - firpfb_cccf_destroy @672 - firpfb_cccf_execute @673 - firpfb_cccf_print @674 - firpfb_cccf_push @675 - firpfb_cccf_recreate @676 - firpfb_cccf_reset @677 - firpfb_crcf_create @678 - firpfb_crcf_create_drnyquist @679 - firpfb_crcf_create_rnyquist @680 - firpfb_crcf_destroy @681 - firpfb_crcf_execute @682 - firpfb_crcf_print @683 - firpfb_crcf_push @684 - firpfb_crcf_recreate @685 - firpfb_crcf_reset @686 - firpfb_rrrf_create @687 - firpfb_rrrf_create_drnyquist @688 - firpfb_rrrf_create_rnyquist @689 - firpfb_rrrf_destroy @690 - firpfb_rrrf_execute @691 - firpfb_rrrf_print @692 - firpfb_rrrf_push @693 - firpfb_rrrf_recreate @694 - firpfb_rrrf_reset @695 - firpfbch2_crcf_create @696 - firpfbch2_crcf_create_kaiser @697 - firpfbch2_crcf_destroy @698 - firpfbch2_crcf_execute @699 - firpfbch2_crcf_execute_analyzer @700 - firpfbch2_crcf_execute_synthesizer @701 - firpfbch2_crcf_print @702 - firpfbch2_crcf_reset @703 - firpfbch_cccf_analyzer_execute @704 - firpfbch_cccf_analyzer_push @705 - firpfbch_cccf_analyzer_run @706 - firpfbch_cccf_create @707 - firpfbch_cccf_create_kaiser @708 - firpfbch_cccf_create_rnyquist @709 - firpfbch_cccf_destroy @710 - firpfbch_cccf_print @711 - firpfbch_cccf_reset @712 - firpfbch_cccf_synthesizer_execute @713 - firpfbch_crcf_analyzer_execute @714 - firpfbch_crcf_analyzer_push @715 - firpfbch_crcf_analyzer_run @716 - firpfbch_crcf_create @717 - firpfbch_crcf_create_kaiser @718 - firpfbch_crcf_create_rnyquist @719 - firpfbch_crcf_destroy @720 - firpfbch_crcf_print @721 - firpfbch_crcf_reset @722 - firpfbch_crcf_synthesizer_execute @723 - flexframegen_assemble @724 - flexframegen_create @725 - flexframegen_destroy @726 - flexframegen_encode_header @727 - flexframegen_getframelen @728 - flexframegen_getprops @729 - flexframegen_is_assembled @730 - flexframegen_modulate_header @731 - flexframegen_modulate_payload @732 - flexframegen_print @733 - flexframegen_reconfigure @734 - flexframegen_reset @735 - flexframegen_setprops @736 - flexframegen_write_header @737 - flexframegen_write_payload @738 - flexframegen_write_preamble @739 - flexframegen_write_samples @740 - flexframegen_write_tail @741 - flexframegenprops_init_default @742 - flexframesync_create @743 - flexframesync_debug_disable @744 - flexframesync_debug_enable @745 - flexframesync_debug_print @746 - flexframesync_decode_header @747 - flexframesync_decode_payload @748 - flexframesync_destroy @749 - flexframesync_execute @750 - flexframesync_execute_rxheader @751 - flexframesync_execute_rxpayload @752 - flexframesync_execute_rxpn @753 - flexframesync_execute_seekpn @754 - flexframesync_print @755 - flexframesync_pushpn @756 - flexframesync_reset @757 - flexframesync_syncpn @758 - flexframesync_update_symsync @759 - fpoly_bessel @760 - fpoly_bessel_roots @761 - fpoly_bessel_roots_orchard @762 - fpoly_bessel_roots_orchard_recursion @763 - framegen64_byte_to_syms @764 - framegen64_create @765 - framegen64_destroy @766 - framegen64_execute @767 - framegen64_print @768 - framesync64_create @769 - framesync64_debug_disable @770 - framesync64_debug_enable @771 - framesync64_debug_print @772 - framesync64_decode_payload @773 - framesync64_destroy @774 - framesync64_execute @775 - framesync64_execute_rxpayload @776 - framesync64_execute_rxpreamble @777 - framesync64_execute_seekpn @778 - framesync64_print @779 - framesync64_pushpn @780 - framesync64_reset @781 - framesync64_syncpn @782 - framesync64_update_symsync @783 - framesyncstats_default @784 DATA - framesyncstats_init_default @785 - framesyncstats_print @786 - freqdem_create @787 - freqdem_demodulate @788 - freqdem_demodulate_block @789 - freqdem_destroy @790 - freqdem_print @791 - freqdem_reset @792 - freqmod_create @793 - freqmod_destroy @794 - freqmod_modulate @795 - freqmod_modulate_block @796 - freqmod_print @797 - freqmod_reset @798 - gasearch_create @799 - gasearch_create_advanced @800 - gasearch_crossover @801 - gasearch_destroy @802 - gasearch_evaluate @803 - gasearch_evolve @804 - gasearch_getopt @805 - gasearch_mutate @806 - gasearch_print @807 - gasearch_rank @808 - gasearch_run @809 - gasearch_set_mutation_rate @810 - gasearch_set_population_size @811 - gmskdem_create @812 - gmskdem_debug_print @813 - gmskdem_demodulate @814 - gmskdem_destroy @815 - gmskdem_print @816 - gmskdem_reset @817 - gmskdem_set_eq_bw @818 - gmskframegen_assemble @819 - gmskframegen_create @820 - gmskframegen_destroy @821 - gmskframegen_encode_header @822 - gmskframegen_getframelen @823 - gmskframegen_print @824 - gmskframegen_reset @825 - gmskframegen_write_header @826 - gmskframegen_write_payload @827 - gmskframegen_write_preamble @828 - gmskframegen_write_samples @829 - gmskframegen_write_tail @830 - gmskframesync_create @831 - gmskframesync_debug_disable @832 - gmskframesync_debug_enable @833 - gmskframesync_debug_print @834 - gmskframesync_decode_header @835 - gmskframesync_destroy @836 - gmskframesync_execute @837 - gmskframesync_execute_detectframe @838 - gmskframesync_execute_rxheader @839 - gmskframesync_execute_rxpayload @840 - gmskframesync_execute_rxpreamble @841 - gmskframesync_print @842 - gmskframesync_pushpn @843 - gmskframesync_reset @844 - gmskframesync_syncpn @845 - gmskframesync_update_fi @846 - gmskframesync_update_symsync @847 - gmskmod_create @848 - gmskmod_destroy @849 - gmskmod_modulate @850 - gmskmod_print @851 - gmskmod_reset @852 - golay2412_Gt @853 DATA - golay2412_H @854 DATA - golay2412_P @855 DATA - golay2412_matrix_mul @856 - golay2412_parity_search @857 - gradsearch_create @858 - gradsearch_destroy @859 - gradsearch_execute @860 - gradsearch_gradient @861 - gradsearch_linesearch @862 - gradsearch_norm @863 - gradsearch_print @864 - gradsearch_step @865 - gray_decode @866 - gray_encode @867 - hamming @868 - hamming128_enc_gentab @869 DATA - hamming74_dec_gentab @870 DATA - hamming74_enc_gentab @871 DATA - hamming84_dec_gentab @872 DATA - hamming84_enc_gentab @873 DATA - hann @874 - icrandnf @875 - iir_group_delay @876 - iirdecim_cccf_create @877 - iirdecim_cccf_create_prototype @878 - iirdecim_cccf_destroy @879 - iirdecim_cccf_execute @880 - iirdecim_cccf_execute_block @881 - iirdecim_cccf_groupdelay @882 - iirdecim_cccf_print @883 - iirdecim_cccf_reset @884 - iirdecim_crcf_create @885 - iirdecim_crcf_create_prototype @886 - iirdecim_crcf_destroy @887 - iirdecim_crcf_execute @888 - iirdecim_crcf_execute_block @889 - iirdecim_crcf_groupdelay @890 - iirdecim_crcf_print @891 - iirdecim_crcf_reset @892 - iirdecim_rrrf_create @893 - iirdecim_rrrf_create_prototype @894 - iirdecim_rrrf_destroy @895 - iirdecim_rrrf_execute @896 - iirdecim_rrrf_execute_block @897 - iirdecim_rrrf_groupdelay @898 - iirdecim_rrrf_print @899 - iirdecim_rrrf_reset @900 - iirdes_dzpk2sosf @901 - iirdes_dzpk2tff @902 - iirdes_dzpk_lp2bp @903 - iirdes_dzpk_lp2hp @904 - iirdes_freqprewarp @905 - iirdes_isstable @906 - iirdes_pll_active_PI @907 - iirdes_pll_active_lag @908 - iirfilt_cccf_create @909 - iirfilt_cccf_create_dc_blocker @910 - iirfilt_cccf_create_differentiator @911 - iirfilt_cccf_create_integrator @912 - iirfilt_cccf_create_pll @913 - iirfilt_cccf_create_prototype @914 - iirfilt_cccf_create_sos @915 - iirfilt_cccf_destroy @916 - iirfilt_cccf_execute @917 - iirfilt_cccf_execute_block @918 - iirfilt_cccf_execute_norm @919 - iirfilt_cccf_execute_sos @920 - iirfilt_cccf_freqresponse @921 - iirfilt_cccf_get_length @922 - iirfilt_cccf_groupdelay @923 - iirfilt_cccf_print @924 - iirfilt_cccf_reset @925 - iirfilt_crcf_create @926 - iirfilt_crcf_create_dc_blocker @927 - iirfilt_crcf_create_differentiator @928 - iirfilt_crcf_create_integrator @929 - iirfilt_crcf_create_pll @930 - iirfilt_crcf_create_prototype @931 - iirfilt_crcf_create_sos @932 - iirfilt_crcf_destroy @933 - iirfilt_crcf_execute @934 - iirfilt_crcf_execute_block @935 - iirfilt_crcf_execute_norm @936 - iirfilt_crcf_execute_sos @937 - iirfilt_crcf_freqresponse @938 - iirfilt_crcf_get_length @939 - iirfilt_crcf_groupdelay @940 - iirfilt_crcf_print @941 - iirfilt_crcf_reset @942 - iirfilt_rrrf_create @943 - iirfilt_rrrf_create_dc_blocker @944 - iirfilt_rrrf_create_differentiator @945 - iirfilt_rrrf_create_integrator @946 - iirfilt_rrrf_create_pll @947 - iirfilt_rrrf_create_prototype @948 - iirfilt_rrrf_create_sos @949 - iirfilt_rrrf_destroy @950 - iirfilt_rrrf_execute @951 - iirfilt_rrrf_execute_block @952 - iirfilt_rrrf_execute_norm @953 - iirfilt_rrrf_execute_sos @954 - iirfilt_rrrf_freqresponse @955 - iirfilt_rrrf_get_length @956 - iirfilt_rrrf_groupdelay @957 - iirfilt_rrrf_print @958 - iirfilt_rrrf_reset @959 - iirfiltsos_cccf_create @960 - iirfiltsos_cccf_destroy @961 - iirfiltsos_cccf_execute @962 - iirfiltsos_cccf_execute_df1 @963 - iirfiltsos_cccf_execute_df2 @964 - iirfiltsos_cccf_groupdelay @965 - iirfiltsos_cccf_print @966 - iirfiltsos_cccf_reset @967 - iirfiltsos_cccf_set_coefficients @968 - iirfiltsos_crcf_create @969 - iirfiltsos_crcf_destroy @970 - iirfiltsos_crcf_execute @971 - iirfiltsos_crcf_execute_df1 @972 - iirfiltsos_crcf_execute_df2 @973 - iirfiltsos_crcf_groupdelay @974 - iirfiltsos_crcf_print @975 - iirfiltsos_crcf_reset @976 - iirfiltsos_crcf_set_coefficients @977 - iirfiltsos_rrrf_create @978 - iirfiltsos_rrrf_destroy @979 - iirfiltsos_rrrf_execute @980 - iirfiltsos_rrrf_execute_df1 @981 - iirfiltsos_rrrf_execute_df2 @982 - iirfiltsos_rrrf_groupdelay @983 - iirfiltsos_rrrf_print @984 - iirfiltsos_rrrf_reset @985 - iirfiltsos_rrrf_set_coefficients @986 - iirinterp_cccf_create @987 - iirinterp_cccf_create_prototype @988 - iirinterp_cccf_destroy @989 - iirinterp_cccf_execute @990 - iirinterp_cccf_execute_block @991 - iirinterp_cccf_groupdelay @992 - iirinterp_cccf_print @993 - iirinterp_cccf_reset @994 - iirinterp_crcf_create @995 - iirinterp_crcf_create_prototype @996 - iirinterp_crcf_destroy @997 - iirinterp_crcf_execute @998 - iirinterp_crcf_execute_block @999 - iirinterp_crcf_groupdelay @1000 - iirinterp_crcf_print @1001 - iirinterp_crcf_reset @1002 - iirinterp_rrrf_create @1003 - iirinterp_rrrf_create_prototype @1004 - iirinterp_rrrf_destroy @1005 - iirinterp_rrrf_execute @1006 - iirinterp_rrrf_execute_block @1007 - iirinterp_rrrf_groupdelay @1008 - iirinterp_rrrf_print @1009 - iirinterp_rrrf_reset @1010 - interleaver_create @1011 - interleaver_decode @1012 - interleaver_decode_soft @1013 - interleaver_destroy @1014 - interleaver_encode @1015 - interleaver_encode_soft @1016 - interleaver_permute @1017 - interleaver_permute_mask @1018 - interleaver_permute_mask_soft @1019 - interleaver_permute_soft @1020 - interleaver_print @1021 - interleaver_set_depth @1022 - kaiser @1023 - kaiser_beta_As @1024 - landenf @1025 - liquid_MarcumQ1f @1026 - liquid_MarcumQf @1027 - liquid_Qf @1028 - liquid_apsk128 @1029 DATA - liquid_apsk16 @1030 DATA - liquid_apsk256 @1031 DATA - liquid_apsk32 @1032 DATA - liquid_apsk4 @1033 DATA - liquid_apsk64 @1034 DATA - liquid_apsk8 @1035 DATA - liquid_asechf @1036 - liquid_bdotprod @1037 - liquid_besseli0f @1038 - liquid_besselif @1039 - liquid_besselj0f @1040 - liquid_besseljf @1041 - liquid_c_leading_zeros @1042 DATA - liquid_c_ones @1043 DATA - liquid_c_ones_mod2 @1044 DATA - liquid_cacosf @1045 - liquid_cargf_approx @1046 - liquid_casinf @1047 - liquid_catanf @1048 - liquid_cexpf @1049 - liquid_clogf @1050 - liquid_cosf @1051 - liquid_count_leading_zeros @1052 - liquid_count_ones @1053 - liquid_count_ones_mod2 @1054 - liquid_cplxpair @1055 - liquid_cplxpair_cleanup @1056 - liquid_csqrtf @1057 - liquid_expf @1058 - liquid_factor @1059 - liquid_factorialf @1060 - liquid_fft_estimate_method @1061 - liquid_filter_autocorr @1062 - liquid_filter_crosscorr @1063 - liquid_filter_energy @1064 - liquid_filter_isi @1065 - liquid_firdes_arkaiser @1066 - liquid_firdes_doppler @1067 - liquid_firdes_farcsech @1068 - liquid_firdes_farcsech_freqresponse @1069 - liquid_firdes_fexp @1070 - liquid_firdes_fexp_freqresponse @1071 - liquid_firdes_fnyquist @1072 - liquid_firdes_fsech @1073 - liquid_firdes_fsech_freqresponse @1074 - liquid_firdes_gmskrx @1075 - liquid_firdes_gmsktx @1076 - liquid_firdes_hM3 @1077 - liquid_firdes_kaiser @1078 - liquid_firdes_nyquist @1079 - liquid_firdes_rcos @1080 - liquid_firdes_rfarcsech @1081 - liquid_firdes_rfexp @1082 - liquid_firdes_rfsech @1083 - liquid_firdes_rkaiser @1084 - liquid_firdes_rkaiser_bisection @1085 - liquid_firdes_rkaiser_internal_isi @1086 - liquid_firdes_rkaiser_quadratic @1087 - liquid_firdes_rnyquist @1088 - liquid_firdes_rrcos @1089 - liquid_gammaf @1090 - liquid_getopt_str2crc @1091 - liquid_getopt_str2fec @1092 - liquid_getopt_str2firfilt @1093 - liquid_getopt_str2mod @1094 - liquid_iirdes @1095 - liquid_invgauss @1096 - liquid_is_prime @1097 - liquid_kbd @1098 - liquid_kbd_window @1099 - liquid_lbcircshift @1100 - liquid_lbshift @1101 - liquid_lcircshift @1102 - liquid_levinson @1103 - liquid_libversion @1104 - liquid_libversion_number @1105 - liquid_lnbesselif @1106 - liquid_lngammaf @1107 - liquid_lnlowergammaf @1108 - liquid_lnuppergammaf @1109 - liquid_logf @1110 - liquid_lowergammaf @1111 - liquid_lpc @1112 - liquid_lshift @1113 - liquid_modem_is_apsk @1114 - liquid_modem_is_ask @1115 - liquid_modem_is_dpsk @1116 - liquid_modem_is_psk @1117 - liquid_modem_is_qam @1118 - liquid_modpow @1119 - liquid_msb_index @1120 - liquid_multimodal @1121 - liquid_nchoosek @1122 - liquid_nextpow2 @1123 - liquid_pack_array @1124 - liquid_pack_bytes @1125 - liquid_pack_soft_bits @1126 - liquid_primitive_root @1127 - liquid_primitive_root_prime @1128 - liquid_print_bitstring @1129 - liquid_print_crc_schemes @1130 - liquid_print_fec_schemes @1131 - liquid_print_modulation_schemes @1132 - liquid_rbcircshift @1133 - liquid_rbshift @1134 - liquid_rcircshift @1135 - liquid_repack_bytes @1136 - liquid_reverse_byte @1137 - liquid_reverse_byte_gentab @1138 DATA - liquid_reverse_uint16 @1139 - liquid_reverse_uint24 @1140 - liquid_reverse_uint32 @1141 - liquid_rosenbrock @1142 - liquid_rshift @1143 - liquid_sincosf @1144 - liquid_sinf @1145 - liquid_spiral @1146 - liquid_sumsqcf @1147 - liquid_sumsqf @1148 - liquid_tanf @1149 - liquid_totient @1150 - liquid_unique_factor @1151 - liquid_unpack_array @1152 - liquid_unpack_bytes @1153 - liquid_unpack_soft_bits @1154 - liquid_unwrap_phase @1155 - liquid_unwrap_phase2 @1156 - liquid_uppergammaf @1157 - liquid_vectorcf_abs @1158 - liquid_vectorcf_add @1159 - liquid_vectorcf_addscalar @1160 - liquid_vectorcf_carg @1161 - liquid_vectorcf_cexpj @1162 - liquid_vectorcf_mul @1163 - liquid_vectorcf_mulscalar @1164 - liquid_vectorcf_norm @1165 - liquid_vectorcf_normalize @1166 - liquid_vectorf_abs @1167 - liquid_vectorf_add @1168 - liquid_vectorf_addscalar @1169 - liquid_vectorf_carg @1170 - liquid_vectorf_cexpj @1171 - liquid_vectorf_mul @1172 - liquid_vectorf_mulscalar @1173 - liquid_vectorf_norm @1174 - liquid_vectorf_normalize @1175 - liquid_version @1176 DATA - matrix_add @1177 - matrix_aug @1178 - matrix_cgsolve @1179 - matrix_chol @1180 - matrix_det @1181 - matrix_det2x2 @1182 - matrix_div @1183 - matrix_eye @1184 - matrix_gjelim @1185 - matrix_gramschmidt @1186 - matrix_hermitian @1187 - matrix_hermitian_mul @1188 - matrix_inv @1189 - matrix_linsolve @1190 - matrix_ludecomp_crout @1191 - matrix_ludecomp_doolittle @1192 - matrix_mul @1193 - matrix_mul_hermitian @1194 - matrix_mul_transpose @1195 - matrix_ones @1196 - matrix_pdiv @1197 - matrix_pivot @1198 - matrix_pmul @1199 - matrix_print @1200 - matrix_proj @1201 - matrix_qrdecomp_gramschmidt @1202 - matrix_sub @1203 - matrix_swaprows @1204 - matrix_trans @1205 - matrix_transpose_mul @1206 - matrix_zeros @1207 - matrixc_add @1208 - matrixc_aug @1209 - matrixc_cgsolve @1210 - matrixc_chol @1211 - matrixc_det @1212 - matrixc_det2x2 @1213 - matrixc_div @1214 - matrixc_eye @1215 - matrixc_gjelim @1216 - matrixc_gramschmidt @1217 - matrixc_hermitian @1218 - matrixc_hermitian_mul @1219 - matrixc_inv @1220 - matrixc_linsolve @1221 - matrixc_ludecomp_crout @1222 - matrixc_ludecomp_doolittle @1223 - matrixc_mul @1224 - matrixc_mul_hermitian @1225 - matrixc_mul_transpose @1226 - matrixc_ones @1227 - matrixc_pdiv @1228 - matrixc_pivot @1229 - matrixc_pmul @1230 - matrixc_print @1231 - matrixc_proj @1232 - matrixc_qrdecomp_gramschmidt @1233 - matrixc_sub @1234 - matrixc_swaprows @1235 - matrixc_trans @1236 - matrixc_transpose_mul @1237 - matrixc_zeros @1238 - matrixcf_add @1239 - matrixcf_aug @1240 - matrixcf_cgsolve @1241 - matrixcf_chol @1242 - matrixcf_det @1243 - matrixcf_det2x2 @1244 - matrixcf_div @1245 - matrixcf_eye @1246 - matrixcf_gjelim @1247 - matrixcf_gramschmidt @1248 - matrixcf_hermitian @1249 - matrixcf_hermitian_mul @1250 - matrixcf_inv @1251 - matrixcf_linsolve @1252 - matrixcf_ludecomp_crout @1253 - matrixcf_ludecomp_doolittle @1254 - matrixcf_mul @1255 - matrixcf_mul_hermitian @1256 - matrixcf_mul_transpose @1257 - matrixcf_ones @1258 - matrixcf_pdiv @1259 - matrixcf_pivot @1260 - matrixcf_pmul @1261 - matrixcf_print @1262 - matrixcf_proj @1263 - matrixcf_qrdecomp_gramschmidt @1264 - matrixcf_sub @1265 - matrixcf_swaprows @1266 - matrixcf_trans @1267 - matrixcf_transpose_mul @1268 - matrixcf_zeros @1269 - matrixf_add @1270 - matrixf_aug @1271 - matrixf_cgsolve @1272 - matrixf_chol @1273 - matrixf_det @1274 - matrixf_det2x2 @1275 - matrixf_div @1276 - matrixf_eye @1277 - matrixf_gjelim @1278 - matrixf_gramschmidt @1279 - matrixf_hermitian @1280 - matrixf_hermitian_mul @1281 - matrixf_inv @1282 - matrixf_linsolve @1283 - matrixf_ludecomp_crout @1284 - matrixf_ludecomp_doolittle @1285 - matrixf_mul @1286 - matrixf_mul_hermitian @1287 - matrixf_mul_transpose @1288 - matrixf_ones @1289 - matrixf_pdiv @1290 - matrixf_pivot @1291 - matrixf_pmul @1292 - matrixf_print @1293 - matrixf_proj @1294 - matrixf_qrdecomp_gramschmidt @1295 - matrixf_sub @1296 - matrixf_swaprows @1297 - matrixf_trans @1298 - matrixf_transpose_mul @1299 - matrixf_zeros @1300 - modem_arb128opt @1301 DATA - modem_arb16opt @1302 DATA - modem_arb256opt @1303 DATA - modem_arb32opt @1304 DATA - modem_arb64opt @1305 DATA - modem_arb_V29 @1306 DATA - modem_arb_balance_iq @1307 - modem_arb_init @1308 - modem_arb_init_file @1309 - modem_arb_scale @1310 - modem_arb_sqam128 @1311 DATA - modem_arb_sqam32 @1312 DATA - modem_arb_vt64 @1313 DATA - modem_create @1314 - modem_create_V29 @1315 - modem_create_apsk @1316 - modem_create_arb @1317 - modem_create_arb128opt @1318 - modem_create_arb16opt @1319 - modem_create_arb256opt @1320 - modem_create_arb32opt @1321 - modem_create_arb64opt @1322 - modem_create_arb64vt @1323 - modem_create_arbitrary @1324 - modem_create_ask @1325 - modem_create_bpsk @1326 - modem_create_dpsk @1327 - modem_create_ook @1328 - modem_create_psk @1329 - modem_create_qam @1330 - modem_create_qpsk @1331 - modem_create_sqam128 @1332 - modem_create_sqam32 @1333 - modem_demodsoft_gentab @1334 - modem_demodulate @1335 - modem_demodulate_apsk @1336 - modem_demodulate_arb @1337 - modem_demodulate_ask @1338 - modem_demodulate_bpsk @1339 - modem_demodulate_dpsk @1340 - modem_demodulate_linear_array @1341 - modem_demodulate_linear_array_ref @1342 - modem_demodulate_ook @1343 - modem_demodulate_psk @1344 - modem_demodulate_qam @1345 - modem_demodulate_qpsk @1346 - modem_demodulate_soft @1347 - modem_demodulate_soft_arb @1348 - modem_demodulate_soft_bpsk @1349 - modem_demodulate_soft_qpsk @1350 - modem_demodulate_soft_table @1351 - modem_demodulate_sqam128 @1352 - modem_demodulate_sqam32 @1353 - modem_destroy @1354 - modem_gen_rand_sym @1355 - modem_get_bps @1356 - modem_get_demodulator_evm @1357 - modem_get_demodulator_phase_error @1358 - modem_get_demodulator_sample @1359 - modem_init @1360 - modem_init_map @1361 - modem_modulate @1362 - modem_modulate_apsk @1363 - modem_modulate_arb @1364 - modem_modulate_ask @1365 - modem_modulate_bpsk @1366 - modem_modulate_dpsk @1367 - modem_modulate_map @1368 - modem_modulate_ook @1369 - modem_modulate_psk @1370 - modem_modulate_qam @1371 - modem_modulate_qpsk @1372 - modem_modulate_sqam128 @1373 - modem_modulate_sqam32 @1374 - modem_print @1375 - modem_recreate @1376 - modem_reset @1377 - modulation_types @1378 DATA - msequence_advance @1379 - msequence_create @1380 - msequence_create_default @1381 - msequence_create_genpoly @1382 - msequence_default @1383 DATA - msequence_destroy @1384 - msequence_generate_symbol @1385 - msequence_get_length @1386 - msequence_get_state @1387 - msequence_print @1388 - msequence_reset @1389 - msequence_set_state @1390 - msresamp2_cccf_create @1391 - msresamp2_cccf_decim_execute @1392 - msresamp2_cccf_destroy @1393 - msresamp2_cccf_execute @1394 - msresamp2_cccf_get_delay @1395 - msresamp2_cccf_interp_execute @1396 - msresamp2_cccf_print @1397 - msresamp2_cccf_reset @1398 - msresamp2_crcf_create @1399 - msresamp2_crcf_decim_execute @1400 - msresamp2_crcf_destroy @1401 - msresamp2_crcf_execute @1402 - msresamp2_crcf_get_delay @1403 - msresamp2_crcf_interp_execute @1404 - msresamp2_crcf_print @1405 - msresamp2_crcf_reset @1406 - msresamp2_rrrf_create @1407 - msresamp2_rrrf_decim_execute @1408 - msresamp2_rrrf_destroy @1409 - msresamp2_rrrf_execute @1410 - msresamp2_rrrf_get_delay @1411 - msresamp2_rrrf_interp_execute @1412 - msresamp2_rrrf_print @1413 - msresamp2_rrrf_reset @1414 - msresamp_cccf_create @1415 - msresamp_cccf_decim_execute @1416 - msresamp_cccf_destroy @1417 - msresamp_cccf_execute @1418 - msresamp_cccf_get_delay @1419 - msresamp_cccf_interp_execute @1420 - msresamp_cccf_print @1421 - msresamp_cccf_reset @1422 - msresamp_crcf_create @1423 - msresamp_crcf_decim_execute @1424 - msresamp_crcf_destroy @1425 - msresamp_crcf_execute @1426 - msresamp_crcf_get_delay @1427 - msresamp_crcf_interp_execute @1428 - msresamp_crcf_print @1429 - msresamp_crcf_reset @1430 - msresamp_rrrf_create @1431 - msresamp_rrrf_decim_execute @1432 - msresamp_rrrf_destroy @1433 - msresamp_rrrf_execute @1434 - msresamp_rrrf_get_delay @1435 - msresamp_rrrf_interp_execute @1436 - msresamp_rrrf_print @1437 - msresamp_rrrf_reset @1438 - nco_crcf_adjust_frequency @1439 - nco_crcf_adjust_phase @1440 - nco_crcf_cexpf @1441 - nco_crcf_compute_sincos_nco @1442 - nco_crcf_compute_sincos_vco @1443 - nco_crcf_constrain_frequency @1444 - nco_crcf_constrain_phase @1445 - nco_crcf_cos @1446 - nco_crcf_create @1447 - nco_crcf_destroy @1448 - nco_crcf_get_frequency @1449 - nco_crcf_get_phase @1450 - nco_crcf_mix_block_down @1451 - nco_crcf_mix_block_up @1452 - nco_crcf_mix_down @1453 - nco_crcf_mix_up @1454 - nco_crcf_pll_reset @1455 - nco_crcf_pll_set_bandwidth @1456 - nco_crcf_pll_step @1457 - nco_crcf_reset @1458 - nco_crcf_set_frequency @1459 - nco_crcf_set_phase @1460 - nco_crcf_sin @1461 - nco_crcf_sincos @1462 - nco_crcf_step @1463 - ofdmflexframegen_assemble @1464 - ofdmflexframegen_create @1465 - ofdmflexframegen_destroy @1466 - ofdmflexframegen_encode_header @1467 - ofdmflexframegen_getframelen @1468 - ofdmflexframegen_getprops @1469 - ofdmflexframegen_is_assembled @1470 - ofdmflexframegen_modulate_header @1471 - ofdmflexframegen_print @1472 - ofdmflexframegen_reconfigure @1473 - ofdmflexframegen_reset @1474 - ofdmflexframegen_setprops @1475 - ofdmflexframegen_write_S0a @1476 - ofdmflexframegen_write_S0b @1477 - ofdmflexframegen_write_S1 @1478 - ofdmflexframegen_write_header @1479 - ofdmflexframegen_write_payload @1480 - ofdmflexframegen_writesymbol @1481 - ofdmflexframegenprops_init_default @1482 - ofdmflexframesync_create @1483 - ofdmflexframesync_debug_disable @1484 - ofdmflexframesync_debug_enable @1485 - ofdmflexframesync_debug_print @1486 - ofdmflexframesync_decode_header @1487 - ofdmflexframesync_destroy @1488 - ofdmflexframesync_execute @1489 - ofdmflexframesync_get_cfo @1490 - ofdmflexframesync_get_rssi @1491 - ofdmflexframesync_internal_callback @1492 - ofdmflexframesync_print @1493 - ofdmflexframesync_reset @1494 - ofdmflexframesync_rxheader @1495 - ofdmflexframesync_rxpayload @1496 - ofdmframe_init_S0 @1497 - ofdmframe_init_S1 @1498 - ofdmframe_init_default_sctype @1499 - ofdmframe_print_sctype @1500 - ofdmframe_validate_sctype @1501 - ofdmframegen_create @1502 - ofdmframegen_destroy @1503 - ofdmframegen_gensymbol @1504 - ofdmframegen_print @1505 - ofdmframegen_reset @1506 - ofdmframegen_write_S0a @1507 - ofdmframegen_write_S0b @1508 - ofdmframegen_write_S1 @1509 - ofdmframegen_writesymbol @1510 - ofdmframegen_writetail @1511 - ofdmframesync_S0_metrics @1512 - ofdmframesync_create @1513 - ofdmframesync_debug_disable @1514 - ofdmframesync_debug_enable @1515 - ofdmframesync_debug_print @1516 - ofdmframesync_destroy @1517 - ofdmframesync_estimate_eqgain @1518 - ofdmframesync_estimate_eqgain_poly @1519 - ofdmframesync_estimate_gain_S0 @1520 - ofdmframesync_estimate_gain_S1 @1521 - ofdmframesync_execute @1522 - ofdmframesync_execute_S0a @1523 - ofdmframesync_execute_S0b @1524 - ofdmframesync_execute_S1 @1525 - ofdmframesync_execute_rxsymbols @1526 - ofdmframesync_execute_seekplcp @1527 - ofdmframesync_get_cfo @1528 - ofdmframesync_get_rssi @1529 - ofdmframesync_print @1530 - ofdmframesync_reset @1531 - ofdmframesync_rxsymbol @1532 - optim_sort @1533 - optim_threshold_switch @1534 - packetizer_compute_dec_msg_len @1535 - packetizer_compute_enc_msg_len @1536 - packetizer_create @1537 - packetizer_decode @1538 - packetizer_decode_soft @1539 - packetizer_destroy @1540 - packetizer_encode @1541 - packetizer_get_dec_msg_len @1542 - packetizer_get_enc_msg_len @1543 - packetizer_print @1544 - packetizer_realloc_buffers @1545 - packetizer_recreate @1546 - packetizer_set_scheme @1547 - poly_expandbinomial @1548 - poly_expandbinomial_pm @1549 - poly_expandroots @1550 - poly_expandroots2 @1551 - poly_findroots @1552 - poly_findroots_bairstow @1553 - poly_findroots_bairstow_recursion @1554 - poly_findroots_durandkerner @1555 - poly_fit @1556 - poly_fit_lagrange @1557 - poly_fit_lagrange_barycentric @1558 - poly_interp_lagrange @1559 - poly_mul @1560 - poly_val @1561 - poly_val_lagrange_barycentric @1562 - polyc_expandbinomial @1563 - polyc_expandbinomial_pm @1564 - polyc_expandroots @1565 - polyc_expandroots2 @1566 - polyc_findroots @1567 - polyc_findroots_bairstow @1568 - polyc_findroots_bairstow_recursion @1569 - polyc_findroots_durandkerner @1570 - polyc_fit @1571 - polyc_fit_lagrange @1572 - polyc_fit_lagrange_barycentric @1573 - polyc_interp_lagrange @1574 - polyc_mul @1575 - polyc_val @1576 - polyc_val_lagrange_barycentric @1577 - polycf_expandbinomial @1578 - polycf_expandbinomial_pm @1579 - polycf_expandroots @1580 - polycf_expandroots2 @1581 - polycf_findroots @1582 - polycf_findroots_bairstow @1583 - polycf_findroots_bairstow_recursion @1584 - polycf_findroots_durandkerner @1585 - polycf_fit @1586 - polycf_fit_lagrange @1587 - polycf_fit_lagrange_barycentric @1588 - polycf_interp_lagrange @1589 - polycf_mul @1590 - polycf_val @1591 - polycf_val_lagrange_barycentric @1592 - polyf_expandbinomial @1593 - polyf_expandbinomial_pm @1594 - polyf_expandroots @1595 - polyf_expandroots2 @1596 - polyf_findroots @1597 - polyf_findroots_bairstow @1598 - polyf_findroots_bairstow_recursion @1599 - polyf_findroots_durandkerner @1600 - polyf_fit @1601 - polyf_fit_lagrange @1602 - polyf_fit_lagrange_barycentric @1603 - polyf_interp_lagrange @1604 - polyf_mul @1605 - polyf_val @1606 - polyf_val_lagrange_barycentric @1607 - presync_cccf_correlate @1608 - presync_cccf_correlatex @1609 - presync_cccf_create @1610 - presync_cccf_destroy @1611 - presync_cccf_print @1612 - presync_cccf_push @1613 - presync_cccf_reset @1614 - qnsearch_compute_Hessian @1615 - qnsearch_compute_gradient @1616 - qnsearch_create @1617 - qnsearch_destroy @1618 - qnsearch_normalize_gradient @1619 - qnsearch_print @1620 - qnsearch_reset @1621 - qnsearch_run @1622 - qnsearch_step @1623 - quantize_adc @1624 - quantize_dac @1625 - quantizercf_create @1626 - quantizercf_destroy @1627 - quantizercf_execute_adc @1628 - quantizercf_execute_dac @1629 - quantizercf_print @1630 - quantizerf_create @1631 - quantizerf_destroy @1632 - quantizerf_execute_adc @1633 - quantizerf_execute_dac @1634 - quantizerf_print @1635 - randexpf @1636 - randexpf_cdf @1637 - randexpf_pdf @1638 - randf @1639 - randf_cdf @1640 - randf_pdf @1641 - randgammaf @1642 - randgammaf_cdf @1643 - randgammaf_delta @1644 - randgammaf_pdf @1645 - randnakmf @1646 - randnakmf_cdf @1647 - randnakmf_pdf @1648 - randnf @1649 - randnf_cdf @1650 - randnf_pdf @1651 - randricekf @1652 - randricekf_cdf @1653 - randricekf_pdf @1654 - randweibf @1655 - randweibf_cdf @1656 - randweibf_pdf @1657 - resamp2_cccf_analyzer_execute @1658 - resamp2_cccf_clear @1659 - resamp2_cccf_create @1660 - resamp2_cccf_decim_execute @1661 - resamp2_cccf_destroy @1662 - resamp2_cccf_filter_execute @1663 - resamp2_cccf_get_delay @1664 - resamp2_cccf_interp_execute @1665 - resamp2_cccf_print @1666 - resamp2_cccf_recreate @1667 - resamp2_cccf_synthesizer_execute @1668 - resamp2_crcf_analyzer_execute @1669 - resamp2_crcf_clear @1670 - resamp2_crcf_create @1671 - resamp2_crcf_decim_execute @1672 - resamp2_crcf_destroy @1673 - resamp2_crcf_filter_execute @1674 - resamp2_crcf_get_delay @1675 - resamp2_crcf_interp_execute @1676 - resamp2_crcf_print @1677 - resamp2_crcf_recreate @1678 - resamp2_crcf_synthesizer_execute @1679 - resamp2_rrrf_analyzer_execute @1680 - resamp2_rrrf_clear @1681 - resamp2_rrrf_create @1682 - resamp2_rrrf_decim_execute @1683 - resamp2_rrrf_destroy @1684 - resamp2_rrrf_filter_execute @1685 - resamp2_rrrf_get_delay @1686 - resamp2_rrrf_interp_execute @1687 - resamp2_rrrf_print @1688 - resamp2_rrrf_recreate @1689 - resamp2_rrrf_synthesizer_execute @1690 - resamp_cccf_create @1691 - resamp_cccf_destroy @1692 - resamp_cccf_execute @1693 - resamp_cccf_execute_block @1694 - resamp_cccf_get_delay @1695 - resamp_cccf_print @1696 - resamp_cccf_reset @1697 - resamp_cccf_setrate @1698 - resamp_cccf_update_timing_state @1699 - resamp_crcf_create @1700 - resamp_crcf_destroy @1701 - resamp_crcf_execute @1702 - resamp_crcf_execute_block @1703 - resamp_crcf_get_delay @1704 - resamp_crcf_print @1705 - resamp_crcf_reset @1706 - resamp_crcf_setrate @1707 - resamp_crcf_update_timing_state @1708 - resamp_rrrf_create @1709 - resamp_rrrf_destroy @1710 - resamp_rrrf_execute @1711 - resamp_rrrf_execute_block @1712 - resamp_rrrf_get_delay @1713 - resamp_rrrf_print @1714 - resamp_rrrf_reset @1715 - resamp_rrrf_setrate @1716 - resamp_rrrf_update_timing_state @1717 - rkaiser_approximate_rho @1718 - scramble_data @1719 - secded2216_P @1720 DATA - secded2216_syndrome_w1 @1721 DATA - secded3932_P @1722 DATA - secded3932_syndrome_w1 @1723 DATA - secded7264_P @1724 DATA - secded7264_syndrome_w1 @1725 DATA - sincf @1726 - smatrix_indexsearch @1727 - smatrixb_clear @1728 - smatrixb_create @1729 - smatrixb_create_array @1730 - smatrixb_delete @1731 - smatrixb_destroy @1732 - smatrixb_eye @1733 - smatrixb_get @1734 - smatrixb_insert @1735 - smatrixb_isset @1736 - smatrixb_mul @1737 - smatrixb_mulf @1738 - smatrixb_print @1739 - smatrixb_print_expanded @1740 - smatrixb_reset @1741 - smatrixb_reset_max_mlist @1742 - smatrixb_reset_max_nlist @1743 - smatrixb_set @1744 - smatrixb_size @1745 - smatrixb_vmul @1746 - smatrixb_vmulf @1747 - smatrixf_clear @1748 - smatrixf_create @1749 - smatrixf_create_array @1750 - smatrixf_delete @1751 - smatrixf_destroy @1752 - smatrixf_eye @1753 - smatrixf_get @1754 - smatrixf_insert @1755 - smatrixf_isset @1756 - smatrixf_mul @1757 - smatrixf_print @1758 - smatrixf_print_expanded @1759 - smatrixf_reset @1760 - smatrixf_reset_max_mlist @1761 - smatrixf_reset_max_nlist @1762 - smatrixf_set @1763 - smatrixf_size @1764 - smatrixf_vmul @1765 - smatrixi_clear @1766 - smatrixi_create @1767 - smatrixi_create_array @1768 - smatrixi_delete @1769 - smatrixi_destroy @1770 - smatrixi_eye @1771 - smatrixi_get @1772 - smatrixi_insert @1773 - smatrixi_isset @1774 - smatrixi_mul @1775 - smatrixi_print @1776 - smatrixi_print_expanded @1777 - smatrixi_reset @1778 - smatrixi_reset_max_mlist @1779 - smatrixi_reset_max_nlist @1780 - smatrixi_set @1781 - smatrixi_size @1782 - smatrixi_vmul @1783 - spgramcf_accumulate_psd @1784 - spgramcf_create @1785 - spgramcf_create_kaiser @1786 - spgramcf_destroy @1787 - spgramcf_estimate_psd @1788 - spgramcf_execute @1789 - spgramcf_push @1790 - spgramcf_reset @1791 - spgramcf_write_accumulation @1792 - spgramf_accumulate_psd @1793 - spgramf_create @1794 - spgramf_create_kaiser @1795 - spgramf_destroy @1796 - spgramf_estimate_psd @1797 - spgramf_execute @1798 - spgramf_push @1799 - spgramf_reset @1800 - spgramf_write_accumulation @1801 - sumproduct_phi @1802 - symsync_crcf_advance_internal_loop @1803 - symsync_crcf_create @1804 - symsync_crcf_create_kaiser @1805 - symsync_crcf_create_rnyquist @1806 - symsync_crcf_destroy @1807 - symsync_crcf_execute @1808 - symsync_crcf_get_tau @1809 - symsync_crcf_lock @1810 - symsync_crcf_output_debug_file @1811 - symsync_crcf_print @1812 - symsync_crcf_reset @1813 - symsync_crcf_set_lf_bw @1814 - symsync_crcf_set_output_rate @1815 - symsync_crcf_setrate @1816 - symsync_crcf_step @1817 - symsync_crcf_unlock @1818 - symsync_rrrf_advance_internal_loop @1819 - symsync_rrrf_create @1820 - symsync_rrrf_create_kaiser @1821 - symsync_rrrf_create_rnyquist @1822 - symsync_rrrf_destroy @1823 - symsync_rrrf_execute @1824 - symsync_rrrf_get_tau @1825 - symsync_rrrf_lock @1826 - symsync_rrrf_output_debug_file @1827 - symsync_rrrf_print @1828 - symsync_rrrf_reset @1829 - symsync_rrrf_set_lf_bw @1830 - symsync_rrrf_set_output_rate @1831 - symsync_rrrf_setrate @1832 - symsync_rrrf_step @1833 - symsync_rrrf_unlock @1834 - unscramble_data @1835 - unscramble_data_soft @1836 - wdelaycf_clear @1837 - wdelaycf_create @1838 - wdelaycf_destroy @1839 - wdelaycf_print @1840 - wdelaycf_push @1841 - wdelaycf_read @1842 - wdelaycf_recreate @1843 - wdelayf_clear @1844 - wdelayf_create @1845 - wdelayf_destroy @1846 - wdelayf_print @1847 - wdelayf_push @1848 - wdelayf_read @1849 - wdelayf_recreate @1850 - windowcf_clear @1851 - windowcf_create @1852 - windowcf_debug_print @1853 - windowcf_destroy @1854 - windowcf_index @1855 - windowcf_print @1856 - windowcf_push @1857 - windowcf_read @1858 - windowcf_recreate @1859 - windowcf_write @1860 - windowf_clear @1861 - windowf_create @1862 - windowf_debug_print @1863 - windowf_destroy @1864 - windowf_index @1865 - windowf_print @1866 - windowf_push @1867 - windowf_read @1868 - windowf_recreate @1869 - windowf_write @1870 + ampmodem_demodulate_block @38 + ampmodem_destroy @39 + ampmodem_modulate @40 + ampmodem_modulate_block @41 + ampmodem_print @42 + ampmodem_reset @43 + apsk128_map @44 DATA + apsk128_num_levels @45 DATA + apsk128_p @46 DATA + apsk128_phi @47 DATA + apsk128_r @48 DATA + apsk128_r_slicer @49 DATA + apsk16_map @50 DATA + apsk16_num_levels @51 DATA + apsk16_p @52 DATA + apsk16_phi @53 DATA + apsk16_r @54 DATA + apsk16_r_slicer @55 DATA + apsk256_map @56 DATA + apsk256_num_levels @57 DATA + apsk256_p @58 DATA + apsk256_phi @59 DATA + apsk256_r @60 DATA + apsk256_r_slicer @61 DATA + apsk32_map @62 DATA + apsk32_num_levels @63 DATA + apsk32_p @64 DATA + apsk32_phi @65 DATA + apsk32_r @66 DATA + apsk32_r_slicer @67 DATA + apsk4_map @68 DATA + apsk4_num_levels @69 DATA + apsk4_p @70 DATA + apsk4_phi @71 DATA + apsk4_r @72 DATA + apsk4_r_slicer @73 DATA + apsk64_map @74 DATA + apsk64_num_levels @75 DATA + apsk64_p @76 DATA + apsk64_phi @77 DATA + apsk64_r @78 DATA + apsk64_r_slicer @79 DATA + apsk8_map @80 DATA + apsk8_num_levels @81 DATA + apsk8_p @82 DATA + apsk8_phi @83 DATA + apsk8_r @84 DATA + apsk8_r_slicer @85 DATA + asgramcf_create @86 + asgramcf_destroy @87 + asgramcf_execute @88 + asgramcf_print @89 + asgramcf_push @90 + asgramcf_reset @91 + asgramcf_set_scale @92 + asgramcf_write @93 + asgramf_create @94 + asgramf_destroy @95 + asgramf_execute @96 + asgramf_print @97 + asgramf_push @98 + asgramf_reset @99 + asgramf_set_scale @100 + asgramf_write @101 + autocorr_cccf_create @102 + autocorr_cccf_destroy @103 + autocorr_cccf_execute @104 + autocorr_cccf_execute_block @105 + autocorr_cccf_get_energy @106 + autocorr_cccf_print @107 + autocorr_cccf_push @108 + autocorr_cccf_reset @109 + autocorr_rrrf_create @110 + autocorr_rrrf_destroy @111 + autocorr_rrrf_execute @112 + autocorr_rrrf_execute_block @113 + autocorr_rrrf_get_energy @114 + autocorr_rrrf_print @115 + autocorr_rrrf_push @116 + autocorr_rrrf_reset @117 + awgn @118 + bessel_azpkf @119 + bilinear_zpkf @120 + blackmanharris @121 + blackmanharris7 @122 + bpacketgen_assemble_header @123 + bpacketgen_assemble_pnsequence @124 + bpacketgen_compute_packet_len @125 + bpacketgen_create @126 + bpacketgen_destroy @127 + bpacketgen_encode @128 + bpacketgen_get_packet_len @129 + bpacketgen_print @130 + bpacketgen_recreate @131 + bpacketsync_assemble_pnsequence @132 + bpacketsync_create @133 + bpacketsync_decode_header @134 + bpacketsync_decode_payload @135 + bpacketsync_destroy @136 + bpacketsync_execute @137 + bpacketsync_execute_bit @138 + bpacketsync_execute_byte @139 + bpacketsync_execute_rxheader @140 + bpacketsync_execute_rxpayload @141 + bpacketsync_execute_seekpn @142 + bpacketsync_execute_sym @143 + bpacketsync_print @144 + bpacketsync_reconfig @145 + bpacketsync_reset @146 + bpresync_cccf_correlate @147 + bpresync_cccf_correlatex @148 + bpresync_cccf_create @149 + bpresync_cccf_destroy @150 + bpresync_cccf_print @151 + bpresync_cccf_push @152 + bpresync_cccf_reset @153 + bsequence_accumulate @154 + bsequence_add @155 + bsequence_circshift @156 + bsequence_correlate @157 + bsequence_create @158 + bsequence_create_ccodes @159 + bsequence_destroy @160 + bsequence_get_length @161 + bsequence_index @162 + bsequence_init @163 + bsequence_init_msequence @164 + bsequence_mul @165 + bsequence_print @166 + bsequence_push @167 + bsequence_reset @168 + bsync_cccf_correlate @169 + bsync_cccf_create @170 + bsync_cccf_create_msequence @171 + bsync_cccf_destroy @172 + bsync_cccf_print @173 + bsync_crcf_correlate @174 + bsync_crcf_create @175 + bsync_crcf_create_msequence @176 + bsync_crcf_destroy @177 + bsync_crcf_print @178 + bsync_rrrf_correlate @179 + bsync_rrrf_create @180 + bsync_rrrf_create_msequence @181 + bsync_rrrf_destroy @182 + bsync_rrrf_print @183 + butter_azpkf @184 + cawgn @185 + cbuffercf_create @186 + cbuffercf_create_max @187 + cbuffercf_debug_print @188 + cbuffercf_destroy @189 + cbuffercf_is_full @190 + cbuffercf_linearize @191 + cbuffercf_max_read @192 + cbuffercf_max_size @193 + cbuffercf_pop @194 + cbuffercf_print @195 + cbuffercf_push @196 + cbuffercf_read @197 + cbuffercf_release @198 + cbuffercf_reset @199 + cbuffercf_size @200 + cbuffercf_space_available @201 + cbuffercf_write @202 + cbufferf_create @203 + cbufferf_create_max @204 + cbufferf_debug_print @205 + cbufferf_destroy @206 + cbufferf_is_full @207 + cbufferf_linearize @208 + cbufferf_max_read @209 + cbufferf_max_size @210 + cbufferf_pop @211 + cbufferf_print @212 + cbufferf_push @213 + cbufferf_read @214 + cbufferf_release @215 + cbufferf_reset @216 + cbufferf_size @217 + cbufferf_space_available @218 + cbufferf_write @219 + channel_cccf_add_awgn @220 + channel_cccf_add_carrier_offset @221 + channel_cccf_add_multipath @222 + channel_cccf_add_shadowing @223 + channel_cccf_create @224 + channel_cccf_destroy @225 + channel_cccf_execute @226 + channel_cccf_execute_block @227 + channel_cccf_print @228 + cheby1_azpkf @229 + cheby2_azpkf @230 + checksum_generate_key @231 + chromosome_copy @232 + chromosome_create @233 + chromosome_create_basic @234 + chromosome_create_clone @235 + chromosome_crossover @236 + chromosome_destroy @237 + chromosome_get_num_traits @238 + chromosome_init @239 + chromosome_init_random @240 + chromosome_initf @241 + chromosome_mutate @242 + chromosome_print @243 + chromosome_printf @244 + chromosome_reset @245 + chromosome_value @246 + chromosome_valuef @247 + compress_cf_mulaw @248 + compress_mulaw @249 + count_bit_errors @250 + count_bit_errors_array @251 + cpfskdem_create @252 + cpfskdem_demodulate @253 + cpfskdem_demodulate_coherent @254 + cpfskdem_demodulate_noncoherent @255 + cpfskdem_destroy @256 + cpfskdem_get_delay @257 + cpfskdem_init_coherent @258 + cpfskdem_init_noncoherent @259 + cpfskdem_print @260 + cpfskdem_reset @261 + cpfskmod_create @262 + cpfskmod_destroy @263 + cpfskmod_firdes @264 + cpfskmod_get_delay @265 + cpfskmod_modulate @266 + cpfskmod_print @267 + cpfskmod_reset @268 + crandnf @269 + crc16_generate_key @270 + crc24_generate_key @271 + crc32_generate_key @272 + crc8_generate_key @273 + crc_append_key @274 + crc_check_key @275 + crc_generate_key @276 + crc_get_length @277 + crc_scheme_str @278 DATA + crc_sizeof_key @279 + crc_validate_message @280 + cvsd_create @281 + cvsd_decode @282 + cvsd_decode8 @283 + cvsd_destroy @284 + cvsd_encode @285 + cvsd_encode8 @286 + cvsd_print @287 + detector_cccf_compute_dotprods @288 + detector_cccf_correlate @289 + detector_cccf_create @290 + detector_cccf_debug_print @291 + detector_cccf_destroy @292 + detector_cccf_estimate_offsets @293 + detector_cccf_print @294 + detector_cccf_reset @295 + detector_cccf_update_sumsq @296 + dotprod_cccf_create @297 + dotprod_cccf_destroy @298 + dotprod_cccf_execute @299 + dotprod_cccf_execute_mmx @300 + dotprod_cccf_execute_mmx4 @301 + dotprod_cccf_print @302 + dotprod_cccf_recreate @303 + dotprod_cccf_run @304 + dotprod_cccf_run4 @305 + dotprod_crcf_create @306 + dotprod_crcf_destroy @307 + dotprod_crcf_execute @308 + dotprod_crcf_execute_mmx @309 + dotprod_crcf_execute_mmx4 @310 + dotprod_crcf_print @311 + dotprod_crcf_recreate @312 + dotprod_crcf_run @313 + dotprod_crcf_run4 @314 + dotprod_rrrf_create @315 + dotprod_rrrf_destroy @316 + dotprod_rrrf_execute @317 + dotprod_rrrf_execute_mmx @318 + dotprod_rrrf_execute_mmx4 @319 + dotprod_rrrf_print @320 + dotprod_rrrf_recreate @321 + dotprod_rrrf_run @322 + dotprod_rrrf_run4 @323 + ellip_acdf @324 + ellip_asnf @325 + ellip_azpkf @326 + ellip_cdf @327 + ellip_snf @328 + ellipdegf @329 + ellipkf @330 + eqlms_cccf_create @331 + eqlms_cccf_create_lowpass @332 + eqlms_cccf_create_rnyquist @333 + eqlms_cccf_destroy @334 + eqlms_cccf_execute @335 + eqlms_cccf_execute_block @336 + eqlms_cccf_get_bw @337 + eqlms_cccf_get_weights @338 + eqlms_cccf_print @339 + eqlms_cccf_push @340 + eqlms_cccf_push_block @341 + eqlms_cccf_recreate @342 + eqlms_cccf_reset @343 + eqlms_cccf_set_bw @344 + eqlms_cccf_step @345 + eqlms_cccf_step_blind @346 + eqlms_cccf_train @347 + eqlms_cccf_update_sumsq @348 + eqlms_rrrf_create @349 + eqlms_rrrf_create_lowpass @350 + eqlms_rrrf_create_rnyquist @351 + eqlms_rrrf_destroy @352 + eqlms_rrrf_execute @353 + eqlms_rrrf_execute_block @354 + eqlms_rrrf_get_bw @355 + eqlms_rrrf_get_weights @356 + eqlms_rrrf_print @357 + eqlms_rrrf_push @358 + eqlms_rrrf_push_block @359 + eqlms_rrrf_recreate @360 + eqlms_rrrf_reset @361 + eqlms_rrrf_set_bw @362 + eqlms_rrrf_step @363 + eqlms_rrrf_step_blind @364 + eqlms_rrrf_train @365 + eqlms_rrrf_update_sumsq @366 + eqrls_cccf_create @367 + eqrls_cccf_destroy @368 + eqrls_cccf_execute @369 + eqrls_cccf_get_bw @370 + eqrls_cccf_get_weights @371 + eqrls_cccf_print @372 + eqrls_cccf_push @373 + eqrls_cccf_recreate @374 + eqrls_cccf_reset @375 + eqrls_cccf_set_bw @376 + eqrls_cccf_step @377 + eqrls_cccf_train @378 + eqrls_rrrf_create @379 + eqrls_rrrf_destroy @380 + eqrls_rrrf_execute @381 + eqrls_rrrf_get_bw @382 + eqrls_rrrf_get_weights @383 + eqrls_rrrf_print @384 + eqrls_rrrf_push @385 + eqrls_rrrf_recreate @386 + eqrls_rrrf_reset @387 + eqrls_rrrf_set_bw @388 + eqrls_rrrf_step @389 + eqrls_rrrf_train @390 + estimate_req_filter_As @391 + estimate_req_filter_df @392 + estimate_req_filter_len @393 + estimate_req_filter_len_Herrmann @394 + estimate_req_filter_len_Kaiser @395 + expand_cf_mulaw @396 + expand_mulaw @397 + fec_block_get_enc_msg_len @398 + fec_conv27_poly @399 DATA + fec_conv27p23_matrix @400 DATA + fec_conv27p34_matrix @401 DATA + fec_conv27p45_matrix @402 DATA + fec_conv27p56_matrix @403 DATA + fec_conv27p67_matrix @404 DATA + fec_conv27p78_matrix @405 DATA + fec_conv29_poly @406 DATA + fec_conv29p23_matrix @407 DATA + fec_conv29p34_matrix @408 DATA + fec_conv29p45_matrix @409 DATA + fec_conv29p56_matrix @410 DATA + fec_conv29p67_matrix @411 DATA + fec_conv29p78_matrix @412 DATA + fec_conv39_poly @413 DATA + fec_conv615_poly @414 DATA + fec_conv_create @415 + fec_conv_destroy @416 + fec_conv_get_enc_msg_len @417 + fec_conv_punctured_create @418 + fec_conv_punctured_decode @419 + fec_conv_punctured_destroy @420 + fec_conv_punctured_encode @421 + fec_create @422 + fec_decode @423 + fec_decode_soft @424 + fec_destroy @425 + fec_encode @426 + fec_get_enc_msg_length @427 + fec_get_rate @428 + fec_golay2412_create @429 + fec_golay2412_decode @430 + fec_golay2412_decode_symbol @431 + fec_golay2412_destroy @432 + fec_golay2412_encode @433 + fec_golay2412_encode_symbol @434 + fec_hamming128_create @435 + fec_hamming128_decode @436 + fec_hamming128_decode_soft @437 + fec_hamming128_decode_symbol @438 + fec_hamming128_destroy @439 + fec_hamming128_encode @440 + fec_hamming128_encode_symbol @441 + fec_hamming1511_decode_symbol @442 + fec_hamming1511_encode_symbol @443 + fec_hamming3126_decode_symbol @444 + fec_hamming3126_encode_symbol @445 + fec_hamming74_create @446 + fec_hamming74_decode @447 + fec_hamming74_decode_soft @448 + fec_hamming74_destroy @449 + fec_hamming74_encode @450 + fec_hamming84_create @451 + fec_hamming84_decode @452 + fec_hamming84_decode_soft @453 + fec_hamming84_destroy @454 + fec_hamming84_encode @455 + fec_pass_create @456 + fec_pass_decode @457 + fec_pass_destroy @458 + fec_pass_encode @459 + fec_pass_print @460 + fec_print @461 + fec_recreate @462 + fec_rep3_create @463 + fec_rep3_decode @464 + fec_rep3_decode_soft @465 + fec_rep3_destroy @466 + fec_rep3_encode @467 + fec_rep3_print @468 + fec_rep5_create @469 + fec_rep5_decode @470 + fec_rep5_decode_soft @471 + fec_rep5_destroy @472 + fec_rep5_encode @473 + fec_rep5_print @474 + fec_rs_create @475 + fec_rs_decode @476 + fec_rs_destroy @477 + fec_rs_encode @478 + fec_rs_get_enc_msg_len @479 + fec_scheme_is_convolutional @480 + fec_scheme_is_hamming @481 + fec_scheme_is_punctured @482 + fec_scheme_is_reedsolomon @483 + fec_scheme_is_repeat @484 + fec_scheme_str @485 DATA + fec_secded2216_compute_parity @486 + fec_secded2216_compute_syndrome @487 + fec_secded2216_create @488 + fec_secded2216_decode @489 + fec_secded2216_decode_symbol @490 + fec_secded2216_destroy @491 + fec_secded2216_encode @492 + fec_secded2216_encode_symbol @493 + fec_secded2216_estimate_ehat @494 + fec_secded3932_compute_parity @495 + fec_secded3932_compute_syndrome @496 + fec_secded3932_create @497 + fec_secded3932_decode @498 + fec_secded3932_decode_symbol @499 + fec_secded3932_destroy @500 + fec_secded3932_encode @501 + fec_secded3932_encode_symbol @502 + fec_secded3932_estimate_ehat @503 + fec_secded7264_compute_parity @504 + fec_secded7264_compute_syndrome @505 + fec_secded7264_create @506 + fec_secded7264_decode @507 + fec_secded7264_decode_symbol @508 + fec_secded7264_destroy @509 + fec_secded7264_encode @510 + fec_secded7264_encode_symbol @511 + fec_secded7264_estimate_ehat @512 + fec_sumproduct @513 + fec_sumproduct_step @514 + fecsoft_hamming128_decode @515 + fecsoft_hamming128_decode_n3 @516 + fecsoft_hamming128_n3 @517 DATA + fecsoft_hamming74_decode @518 + fecsoft_hamming84_decode @519 + fft_create_plan @520 + fft_create_plan_dft @521 + fft_create_plan_mixed_radix @522 + fft_create_plan_r2r_1d @523 + fft_create_plan_rader @524 + fft_create_plan_rader2 @525 + fft_create_plan_radix2 @526 + fft_destroy_plan @527 + fft_destroy_plan_dft @528 + fft_destroy_plan_mixed_radix @529 + fft_destroy_plan_r2r_1d @530 + fft_destroy_plan_rader @531 + fft_destroy_plan_rader2 @532 + fft_destroy_plan_radix2 @533 + fft_estimate_mixed_radix @534 + fft_execute @535 + fft_execute_REDFT00 @536 + fft_execute_REDFT01 @537 + fft_execute_REDFT10 @538 + fft_execute_REDFT11 @539 + fft_execute_RODFT00 @540 + fft_execute_RODFT01 @541 + fft_execute_RODFT10 @542 + fft_execute_RODFT11 @543 + fft_execute_dft @544 + fft_execute_dft_16 @545 + fft_execute_dft_2 @546 + fft_execute_dft_3 @547 + fft_execute_dft_4 @548 + fft_execute_dft_5 @549 + fft_execute_dft_6 @550 + fft_execute_dft_7 @551 + fft_execute_dft_8 @552 + fft_execute_mixed_radix @553 + fft_execute_rader @554 + fft_execute_rader2 @555 + fft_execute_radix2 @556 + fft_is_radix2 @557 + fft_print_plan @558 + fft_print_plan_r2r_1d @559 + fft_print_plan_recursive @560 + fft_r2r_1d_run @561 + fft_reverse_index @562 + fft_run @563 + fft_shift @564 + fftfilt_cccf_create @565 + fftfilt_cccf_destroy @566 + fftfilt_cccf_execute @567 + fftfilt_cccf_get_length @568 + fftfilt_cccf_print @569 + fftfilt_cccf_reset @570 + fftfilt_cccf_set_scale @571 + fftfilt_crcf_create @572 + fftfilt_crcf_destroy @573 + fftfilt_crcf_execute @574 + fftfilt_crcf_get_length @575 + fftfilt_crcf_print @576 + fftfilt_crcf_reset @577 + fftfilt_crcf_set_scale @578 + fftfilt_rrrf_create @579 + fftfilt_rrrf_destroy @580 + fftfilt_rrrf_execute @581 + fftfilt_rrrf_get_length @582 + fftfilt_rrrf_print @583 + fftfilt_rrrf_reset @584 + fftfilt_rrrf_set_scale @585 + fir_group_delay @586 + firdecim_cccf_create @587 + firdecim_cccf_create_kaiser @588 + firdecim_cccf_create_prototype @589 + firdecim_cccf_destroy @590 + firdecim_cccf_execute @591 + firdecim_cccf_execute_block @592 + firdecim_cccf_print @593 + firdecim_cccf_reset @594 + firdecim_crcf_create @595 + firdecim_crcf_create_kaiser @596 + firdecim_crcf_create_prototype @597 + firdecim_crcf_destroy @598 + firdecim_crcf_execute @599 + firdecim_crcf_execute_block @600 + firdecim_crcf_print @601 + firdecim_crcf_reset @602 + firdecim_rrrf_create @603 + firdecim_rrrf_create_kaiser @604 + firdecim_rrrf_create_prototype @605 + firdecim_rrrf_destroy @606 + firdecim_rrrf_execute @607 + firdecim_rrrf_execute_block @608 + firdecim_rrrf_print @609 + firdecim_rrrf_reset @610 + firdespm_compute_error @611 + firdespm_compute_interp @612 + firdespm_compute_taps @613 + firdespm_create @614 + firdespm_destroy @615 + firdespm_execute @616 + firdespm_iext_search @617 + firdespm_init_grid @618 + firdespm_is_search_complete @619 + firdespm_print @620 + firdespm_run @621 + firfarrow_crcf_create @622 + firfarrow_crcf_destroy @623 + firfarrow_crcf_execute @624 + firfarrow_crcf_execute_block @625 + firfarrow_crcf_freqresponse @626 + firfarrow_crcf_genpoly @627 + firfarrow_crcf_get_coefficients @628 + firfarrow_crcf_get_length @629 + firfarrow_crcf_groupdelay @630 + firfarrow_crcf_print @631 + firfarrow_crcf_push @632 + firfarrow_crcf_reset @633 + firfarrow_crcf_set_delay @634 + firfarrow_rrrf_create @635 + firfarrow_rrrf_destroy @636 + firfarrow_rrrf_execute @637 + firfarrow_rrrf_execute_block @638 + firfarrow_rrrf_freqresponse @639 + firfarrow_rrrf_genpoly @640 + firfarrow_rrrf_get_coefficients @641 + firfarrow_rrrf_get_length @642 + firfarrow_rrrf_groupdelay @643 + firfarrow_rrrf_print @644 + firfarrow_rrrf_push @645 + firfarrow_rrrf_reset @646 + firfarrow_rrrf_set_delay @647 + firfilt_cccf_create @648 + firfilt_cccf_create_kaiser @649 + firfilt_cccf_create_rect @650 + firfilt_cccf_create_rnyquist @651 + firfilt_cccf_destroy @652 + firfilt_cccf_execute @653 + firfilt_cccf_execute_block @654 + firfilt_cccf_freqresponse @655 + firfilt_cccf_get_length @656 + firfilt_cccf_groupdelay @657 + firfilt_cccf_print @658 + firfilt_cccf_push @659 + firfilt_cccf_recreate @660 + firfilt_cccf_reset @661 + firfilt_cccf_set_scale @662 + firfilt_crcf_create @663 + firfilt_crcf_create_kaiser @664 + firfilt_crcf_create_rect @665 + firfilt_crcf_create_rnyquist @666 + firfilt_crcf_destroy @667 + firfilt_crcf_execute @668 + firfilt_crcf_execute_block @669 + firfilt_crcf_freqresponse @670 + firfilt_crcf_get_length @671 + firfilt_crcf_groupdelay @672 + firfilt_crcf_print @673 + firfilt_crcf_push @674 + firfilt_crcf_recreate @675 + firfilt_crcf_reset @676 + firfilt_crcf_set_scale @677 + firfilt_rrrf_create @678 + firfilt_rrrf_create_kaiser @679 + firfilt_rrrf_create_rect @680 + firfilt_rrrf_create_rnyquist @681 + firfilt_rrrf_destroy @682 + firfilt_rrrf_execute @683 + firfilt_rrrf_execute_block @684 + firfilt_rrrf_freqresponse @685 + firfilt_rrrf_get_length @686 + firfilt_rrrf_groupdelay @687 + firfilt_rrrf_print @688 + firfilt_rrrf_push @689 + firfilt_rrrf_recreate @690 + firfilt_rrrf_reset @691 + firfilt_rrrf_set_scale @692 + firhilbf_c2r_execute @693 + firhilbf_create @694 + firhilbf_decim_execute @695 + firhilbf_decim_execute_block @696 + firhilbf_destroy @697 + firhilbf_interp_execute @698 + firhilbf_interp_execute_block @699 + firhilbf_print @700 + firhilbf_r2c_execute @701 + firhilbf_reset @702 + firinterp_cccf_create @703 + firinterp_cccf_create_kaiser @704 + firinterp_cccf_create_prototype @705 + firinterp_cccf_destroy @706 + firinterp_cccf_execute @707 + firinterp_cccf_execute_block @708 + firinterp_cccf_print @709 + firinterp_cccf_reset @710 + firinterp_crcf_create @711 + firinterp_crcf_create_kaiser @712 + firinterp_crcf_create_prototype @713 + firinterp_crcf_destroy @714 + firinterp_crcf_execute @715 + firinterp_crcf_execute_block @716 + firinterp_crcf_print @717 + firinterp_crcf_reset @718 + firinterp_rrrf_create @719 + firinterp_rrrf_create_kaiser @720 + firinterp_rrrf_create_prototype @721 + firinterp_rrrf_destroy @722 + firinterp_rrrf_execute @723 + firinterp_rrrf_execute_block @724 + firinterp_rrrf_print @725 + firinterp_rrrf_reset @726 + firpfb_cccf_create @727 + firpfb_cccf_create_drnyquist @728 + firpfb_cccf_create_kaiser @729 + firpfb_cccf_create_rnyquist @730 + firpfb_cccf_destroy @731 + firpfb_cccf_execute @732 + firpfb_cccf_execute_block @733 + firpfb_cccf_print @734 + firpfb_cccf_push @735 + firpfb_cccf_recreate @736 + firpfb_cccf_reset @737 + firpfb_cccf_set_scale @738 + firpfb_crcf_create @739 + firpfb_crcf_create_drnyquist @740 + firpfb_crcf_create_kaiser @741 + firpfb_crcf_create_rnyquist @742 + firpfb_crcf_destroy @743 + firpfb_crcf_execute @744 + firpfb_crcf_execute_block @745 + firpfb_crcf_print @746 + firpfb_crcf_push @747 + firpfb_crcf_recreate @748 + firpfb_crcf_reset @749 + firpfb_crcf_set_scale @750 + firpfb_rrrf_create @751 + firpfb_rrrf_create_drnyquist @752 + firpfb_rrrf_create_kaiser @753 + firpfb_rrrf_create_rnyquist @754 + firpfb_rrrf_destroy @755 + firpfb_rrrf_execute @756 + firpfb_rrrf_execute_block @757 + firpfb_rrrf_print @758 + firpfb_rrrf_push @759 + firpfb_rrrf_recreate @760 + firpfb_rrrf_reset @761 + firpfb_rrrf_set_scale @762 + firpfbch2_crcf_create @763 + firpfbch2_crcf_create_kaiser @764 + firpfbch2_crcf_destroy @765 + firpfbch2_crcf_execute @766 + firpfbch2_crcf_execute_analyzer @767 + firpfbch2_crcf_execute_synthesizer @768 + firpfbch2_crcf_print @769 + firpfbch2_crcf_reset @770 + firpfbch_cccf_analyzer_execute @771 + firpfbch_cccf_analyzer_push @772 + firpfbch_cccf_analyzer_run @773 + firpfbch_cccf_create @774 + firpfbch_cccf_create_kaiser @775 + firpfbch_cccf_create_rnyquist @776 + firpfbch_cccf_destroy @777 + firpfbch_cccf_print @778 + firpfbch_cccf_reset @779 + firpfbch_cccf_synthesizer_execute @780 + firpfbch_crcf_analyzer_execute @781 + firpfbch_crcf_analyzer_push @782 + firpfbch_crcf_analyzer_run @783 + firpfbch_crcf_create @784 + firpfbch_crcf_create_kaiser @785 + firpfbch_crcf_create_rnyquist @786 + firpfbch_crcf_destroy @787 + firpfbch_crcf_print @788 + firpfbch_crcf_reset @789 + firpfbch_crcf_synthesizer_execute @790 + flattop @791 + flexframegen_assemble @792 + flexframegen_create @793 + flexframegen_destroy @794 + flexframegen_generate_header @795 + flexframegen_generate_payload @796 + flexframegen_generate_preamble @797 + flexframegen_generate_symbol @798 + flexframegen_generate_tail @799 + flexframegen_getframelen @800 + flexframegen_getprops @801 + flexframegen_is_assembled @802 + flexframegen_print @803 + flexframegen_reconfigure @804 + flexframegen_reset @805 + flexframegen_setprops @806 + flexframegen_write_samples @807 + flexframegenprops_init_default @808 + flexframesync_create @809 + flexframesync_debug_disable @810 + flexframesync_debug_enable @811 + flexframesync_debug_print @812 + flexframesync_decode_header @813 + flexframesync_destroy @814 + flexframesync_execute @815 + flexframesync_execute_rxheader @816 + flexframesync_execute_rxpayload @817 + flexframesync_execute_rxpreamble @818 + flexframesync_execute_seekpn @819 + flexframesync_get_framedatastats @820 + flexframesync_print @821 + flexframesync_reset @822 + flexframesync_reset_framedatastats @823 + flexframesync_step @824 + fpoly_bessel @825 + fpoly_bessel_roots @826 + fpoly_bessel_roots_orchard @827 + fpoly_bessel_roots_orchard_recursion @828 + framedatastats_print @829 + framedatastats_reset @830 + framegen64_create @831 + framegen64_destroy @832 + framegen64_execute @833 + framegen64_print @834 + framesync64_create @835 + framesync64_debug_disable @836 + framesync64_debug_enable @837 + framesync64_debug_print @838 + framesync64_destroy @839 + framesync64_execute @840 + framesync64_execute_rxpayload @841 + framesync64_execute_rxpreamble @842 + framesync64_execute_seekpn @843 + framesync64_print @844 + framesync64_reset @845 + framesync64_step @846 + framesyncstats_default @847 DATA + framesyncstats_init_default @848 + framesyncstats_print @849 + freqdem_create @850 + freqdem_demodulate @851 + freqdem_demodulate_block @852 + freqdem_destroy @853 + freqdem_print @854 + freqdem_reset @855 + freqmod_create @856 + freqmod_destroy @857 + freqmod_modulate @858 + freqmod_modulate_block @859 + freqmod_print @860 + freqmod_reset @861 + fskdem_create @862 + fskdem_demodulate @863 + fskdem_destroy @864 + fskdem_get_frequency_error @865 + fskdem_print @866 + fskdem_reset @867 + fskmod_create @868 + fskmod_destroy @869 + fskmod_modulate @870 + fskmod_print @871 + fskmod_reset @872 + gasearch_create @873 + gasearch_create_advanced @874 + gasearch_crossover @875 + gasearch_destroy @876 + gasearch_evaluate @877 + gasearch_evolve @878 + gasearch_getopt @879 + gasearch_mutate @880 + gasearch_print @881 + gasearch_rank @882 + gasearch_run @883 + gasearch_set_mutation_rate @884 + gasearch_set_population_size @885 + gmskdem_create @886 + gmskdem_debug_print @887 + gmskdem_demodulate @888 + gmskdem_destroy @889 + gmskdem_print @890 + gmskdem_reset @891 + gmskdem_set_eq_bw @892 + gmskframegen_assemble @893 + gmskframegen_create @894 + gmskframegen_destroy @895 + gmskframegen_encode_header @896 + gmskframegen_getframelen @897 + gmskframegen_is_assembled @898 + gmskframegen_print @899 + gmskframegen_reset @900 + gmskframegen_write_header @901 + gmskframegen_write_payload @902 + gmskframegen_write_preamble @903 + gmskframegen_write_samples @904 + gmskframegen_write_tail @905 + gmskframesync_create @906 + gmskframesync_debug_disable @907 + gmskframesync_debug_enable @908 + gmskframesync_debug_print @909 + gmskframesync_decode_header @910 + gmskframesync_destroy @911 + gmskframesync_execute @912 + gmskframesync_execute_detectframe @913 + gmskframesync_execute_rxheader @914 + gmskframesync_execute_rxpayload @915 + gmskframesync_execute_rxpreamble @916 + gmskframesync_print @917 + gmskframesync_pushpn @918 + gmskframesync_reset @919 + gmskframesync_syncpn @920 + gmskframesync_update_fi @921 + gmskframesync_update_symsync @922 + gmskmod_create @923 + gmskmod_destroy @924 + gmskmod_modulate @925 + gmskmod_print @926 + gmskmod_reset @927 + golay2412_Gt @928 DATA + golay2412_H @929 DATA + golay2412_P @930 DATA + golay2412_matrix_mul @931 + golay2412_parity_search @932 + gradsearch_create @933 + gradsearch_destroy @934 + gradsearch_execute @935 + gradsearch_gradient @936 + gradsearch_linesearch @937 + gradsearch_norm @938 + gradsearch_print @939 + gradsearch_step @940 + gray_decode @941 + gray_encode @942 + hamming @943 + hamming128_enc_gentab @944 DATA + hamming74_dec_gentab @945 DATA + hamming74_enc_gentab @946 DATA + hamming84_dec_gentab @947 DATA + hamming84_enc_gentab @948 DATA + hann @949 + icrandnf @950 + iir_group_delay @951 + iirdecim_cccf_create @952 + iirdecim_cccf_create_default @953 + iirdecim_cccf_create_prototype @954 + iirdecim_cccf_destroy @955 + iirdecim_cccf_execute @956 + iirdecim_cccf_execute_block @957 + iirdecim_cccf_groupdelay @958 + iirdecim_cccf_print @959 + iirdecim_cccf_reset @960 + iirdecim_crcf_create @961 + iirdecim_crcf_create_default @962 + iirdecim_crcf_create_prototype @963 + iirdecim_crcf_destroy @964 + iirdecim_crcf_execute @965 + iirdecim_crcf_execute_block @966 + iirdecim_crcf_groupdelay @967 + iirdecim_crcf_print @968 + iirdecim_crcf_reset @969 + iirdecim_rrrf_create @970 + iirdecim_rrrf_create_default @971 + iirdecim_rrrf_create_prototype @972 + iirdecim_rrrf_destroy @973 + iirdecim_rrrf_execute @974 + iirdecim_rrrf_execute_block @975 + iirdecim_rrrf_groupdelay @976 + iirdecim_rrrf_print @977 + iirdecim_rrrf_reset @978 + iirdes_dzpk2sosf @979 + iirdes_dzpk2tff @980 + iirdes_dzpk_lp2bp @981 + iirdes_dzpk_lp2hp @982 + iirdes_freqprewarp @983 + iirdes_isstable @984 + iirdes_pll_active_PI @985 + iirdes_pll_active_lag @986 + iirfilt_cccf_create @987 + iirfilt_cccf_create_dc_blocker @988 + iirfilt_cccf_create_differentiator @989 + iirfilt_cccf_create_integrator @990 + iirfilt_cccf_create_lowpass @991 + iirfilt_cccf_create_pll @992 + iirfilt_cccf_create_prototype @993 + iirfilt_cccf_create_sos @994 + iirfilt_cccf_destroy @995 + iirfilt_cccf_execute @996 + iirfilt_cccf_execute_block @997 + iirfilt_cccf_execute_norm @998 + iirfilt_cccf_execute_sos @999 + iirfilt_cccf_freqresponse @1000 + iirfilt_cccf_get_length @1001 + iirfilt_cccf_groupdelay @1002 + iirfilt_cccf_print @1003 + iirfilt_cccf_reset @1004 + iirfilt_crcf_create @1005 + iirfilt_crcf_create_dc_blocker @1006 + iirfilt_crcf_create_differentiator @1007 + iirfilt_crcf_create_integrator @1008 + iirfilt_crcf_create_lowpass @1009 + iirfilt_crcf_create_pll @1010 + iirfilt_crcf_create_prototype @1011 + iirfilt_crcf_create_sos @1012 + iirfilt_crcf_destroy @1013 + iirfilt_crcf_execute @1014 + iirfilt_crcf_execute_block @1015 + iirfilt_crcf_execute_norm @1016 + iirfilt_crcf_execute_sos @1017 + iirfilt_crcf_freqresponse @1018 + iirfilt_crcf_get_length @1019 + iirfilt_crcf_groupdelay @1020 + iirfilt_crcf_print @1021 + iirfilt_crcf_reset @1022 + iirfilt_rrrf_create @1023 + iirfilt_rrrf_create_dc_blocker @1024 + iirfilt_rrrf_create_differentiator @1025 + iirfilt_rrrf_create_integrator @1026 + iirfilt_rrrf_create_lowpass @1027 + iirfilt_rrrf_create_pll @1028 + iirfilt_rrrf_create_prototype @1029 + iirfilt_rrrf_create_sos @1030 + iirfilt_rrrf_destroy @1031 + iirfilt_rrrf_execute @1032 + iirfilt_rrrf_execute_block @1033 + iirfilt_rrrf_execute_norm @1034 + iirfilt_rrrf_execute_sos @1035 + iirfilt_rrrf_freqresponse @1036 + iirfilt_rrrf_get_length @1037 + iirfilt_rrrf_groupdelay @1038 + iirfilt_rrrf_print @1039 + iirfilt_rrrf_reset @1040 + iirfiltsos_cccf_create @1041 + iirfiltsos_cccf_destroy @1042 + iirfiltsos_cccf_execute @1043 + iirfiltsos_cccf_execute_df1 @1044 + iirfiltsos_cccf_execute_df2 @1045 + iirfiltsos_cccf_groupdelay @1046 + iirfiltsos_cccf_print @1047 + iirfiltsos_cccf_reset @1048 + iirfiltsos_cccf_set_coefficients @1049 + iirfiltsos_crcf_create @1050 + iirfiltsos_crcf_destroy @1051 + iirfiltsos_crcf_execute @1052 + iirfiltsos_crcf_execute_df1 @1053 + iirfiltsos_crcf_execute_df2 @1054 + iirfiltsos_crcf_groupdelay @1055 + iirfiltsos_crcf_print @1056 + iirfiltsos_crcf_reset @1057 + iirfiltsos_crcf_set_coefficients @1058 + iirfiltsos_rrrf_create @1059 + iirfiltsos_rrrf_destroy @1060 + iirfiltsos_rrrf_execute @1061 + iirfiltsos_rrrf_execute_df1 @1062 + iirfiltsos_rrrf_execute_df2 @1063 + iirfiltsos_rrrf_groupdelay @1064 + iirfiltsos_rrrf_print @1065 + iirfiltsos_rrrf_reset @1066 + iirfiltsos_rrrf_set_coefficients @1067 + iirinterp_cccf_create @1068 + iirinterp_cccf_create_default @1069 + iirinterp_cccf_create_prototype @1070 + iirinterp_cccf_destroy @1071 + iirinterp_cccf_execute @1072 + iirinterp_cccf_execute_block @1073 + iirinterp_cccf_groupdelay @1074 + iirinterp_cccf_print @1075 + iirinterp_cccf_reset @1076 + iirinterp_crcf_create @1077 + iirinterp_crcf_create_default @1078 + iirinterp_crcf_create_prototype @1079 + iirinterp_crcf_destroy @1080 + iirinterp_crcf_execute @1081 + iirinterp_crcf_execute_block @1082 + iirinterp_crcf_groupdelay @1083 + iirinterp_crcf_print @1084 + iirinterp_crcf_reset @1085 + iirinterp_rrrf_create @1086 + iirinterp_rrrf_create_default @1087 + iirinterp_rrrf_create_prototype @1088 + iirinterp_rrrf_destroy @1089 + iirinterp_rrrf_execute @1090 + iirinterp_rrrf_execute_block @1091 + iirinterp_rrrf_groupdelay @1092 + iirinterp_rrrf_print @1093 + iirinterp_rrrf_reset @1094 + interleaver_create @1095 + interleaver_decode @1096 + interleaver_decode_soft @1097 + interleaver_destroy @1098 + interleaver_encode @1099 + interleaver_encode_soft @1100 + interleaver_permute @1101 + interleaver_permute_mask @1102 + interleaver_permute_mask_soft @1103 + interleaver_permute_soft @1104 + interleaver_print @1105 + interleaver_set_depth @1106 + kaiser @1107 + kaiser_beta_As @1108 + landenf @1109 + liquid_MarcumQ1f @1110 + liquid_MarcumQf @1111 + liquid_Qf @1112 + liquid_apsk128 @1113 DATA + liquid_apsk16 @1114 DATA + liquid_apsk256 @1115 DATA + liquid_apsk32 @1116 DATA + liquid_apsk4 @1117 DATA + liquid_apsk64 @1118 DATA + liquid_apsk8 @1119 DATA + liquid_asechf @1120 + liquid_bdotprod @1121 + liquid_besseli0f @1122 + liquid_besselif @1123 + liquid_besselj0f @1124 + liquid_besseljf @1125 + liquid_c_leading_zeros @1126 DATA + liquid_c_ones @1127 DATA + liquid_c_ones_mod2 @1128 DATA + liquid_cacosf @1129 + liquid_cargf_approx @1130 + liquid_casinf @1131 + liquid_catanf @1132 + liquid_cexpf @1133 + liquid_clogf @1134 + liquid_cosf @1135 + liquid_count_leading_zeros @1136 + liquid_count_ones @1137 + liquid_count_ones_mod2 @1138 + liquid_cplxpair @1139 + liquid_cplxpair_cleanup @1140 + liquid_csqrtf @1141 + liquid_expf @1142 + liquid_factor @1143 + liquid_factorialf @1144 + liquid_fft_estimate_method @1145 + liquid_filter_autocorr @1146 + liquid_filter_crosscorr @1147 + liquid_filter_energy @1148 + liquid_filter_isi @1149 + liquid_firdes_arkaiser @1150 + liquid_firdes_doppler @1151 + liquid_firdes_farcsech @1152 + liquid_firdes_farcsech_freqresponse @1153 + liquid_firdes_fexp @1154 + liquid_firdes_fexp_freqresponse @1155 + liquid_firdes_fnyquist @1156 + liquid_firdes_fsech @1157 + liquid_firdes_fsech_freqresponse @1158 + liquid_firdes_gmskrx @1159 + liquid_firdes_gmsktx @1160 + liquid_firdes_hM3 @1161 + liquid_firdes_kaiser @1162 + liquid_firdes_prototype @1163 + liquid_firdes_rcos @1164 + liquid_firdes_rfarcsech @1165 + liquid_firdes_rfexp @1166 + liquid_firdes_rfsech @1167 + liquid_firdes_rkaiser @1168 + liquid_firdes_rkaiser_bisection @1169 + liquid_firdes_rkaiser_internal_isi @1170 + liquid_firdes_rkaiser_quadratic @1171 + liquid_firdes_rrcos @1172 + liquid_gammaf @1173 + liquid_getopt_str2crc @1174 + liquid_getopt_str2fec @1175 + liquid_getopt_str2firfilt @1176 + liquid_getopt_str2mod @1177 + liquid_getopt_str2window @1178 + liquid_iirdes @1179 + liquid_invgauss @1180 + liquid_is_prime @1181 + liquid_kbd @1182 + liquid_kbd_window @1183 + liquid_lbcircshift @1184 + liquid_lbshift @1185 + liquid_lcircshift @1186 + liquid_levinson @1187 + liquid_libversion @1188 + liquid_libversion_number @1189 + liquid_lnbesselif @1190 + liquid_lngammaf @1191 + liquid_lnlowergammaf @1192 + liquid_lnuppergammaf @1193 + liquid_logf @1194 + liquid_lowergammaf @1195 + liquid_lpc @1196 + liquid_lshift @1197 + liquid_modem_is_apsk @1198 + liquid_modem_is_ask @1199 + liquid_modem_is_dpsk @1200 + liquid_modem_is_psk @1201 + liquid_modem_is_qam @1202 + liquid_modpow @1203 + liquid_msb_index @1204 + liquid_multimodal @1205 + liquid_nchoosek @1206 + liquid_nextpow2 @1207 + liquid_pack_array @1208 + liquid_pack_bytes @1209 + liquid_pack_soft_bits @1210 + liquid_primitive_root @1211 + liquid_primitive_root_prime @1212 + liquid_print_bitstring @1213 + liquid_print_crc_schemes @1214 + liquid_print_fec_schemes @1215 + liquid_print_modulation_schemes @1216 + liquid_print_windows @1217 + liquid_rbcircshift @1218 + liquid_rbshift @1219 + liquid_rcircshift @1220 + liquid_rcostaper_windowf @1221 + liquid_repack_bytes @1222 + liquid_reverse_byte @1223 + liquid_reverse_byte_gentab @1224 DATA + liquid_reverse_uint16 @1225 + liquid_reverse_uint24 @1226 + liquid_reverse_uint32 @1227 + liquid_rosenbrock @1228 + liquid_rshift @1229 + liquid_sincosf @1230 + liquid_sinf @1231 + liquid_spiral @1232 + liquid_sumsqcf @1233 + liquid_sumsqf @1234 + liquid_tanf @1235 + liquid_totient @1236 + liquid_unique_factor @1237 + liquid_unpack_array @1238 + liquid_unpack_bytes @1239 + liquid_unpack_soft_bits @1240 + liquid_unwrap_phase @1241 + liquid_unwrap_phase2 @1242 + liquid_uppergammaf @1243 + liquid_vectorcf_abs @1244 + liquid_vectorcf_add @1245 + liquid_vectorcf_addscalar @1246 + liquid_vectorcf_carg @1247 + liquid_vectorcf_cexpj @1248 + liquid_vectorcf_mul @1249 + liquid_vectorcf_mulscalar @1250 + liquid_vectorcf_norm @1251 + liquid_vectorcf_normalize @1252 + liquid_vectorf_abs @1253 + liquid_vectorf_add @1254 + liquid_vectorf_addscalar @1255 + liquid_vectorf_carg @1256 + liquid_vectorf_cexpj @1257 + liquid_vectorf_mul @1258 + liquid_vectorf_mulscalar @1259 + liquid_vectorf_norm @1260 + liquid_vectorf_normalize @1261 + liquid_version @1262 DATA + liquid_window_str @1263 DATA + matrix_add @1264 + matrix_aug @1265 + matrix_cgsolve @1266 + matrix_chol @1267 + matrix_det @1268 + matrix_det2x2 @1269 + matrix_div @1270 + matrix_eye @1271 + matrix_gjelim @1272 + matrix_gramschmidt @1273 + matrix_hermitian @1274 + matrix_hermitian_mul @1275 + matrix_inv @1276 + matrix_linsolve @1277 + matrix_ludecomp_crout @1278 + matrix_ludecomp_doolittle @1279 + matrix_mul @1280 + matrix_mul_hermitian @1281 + matrix_mul_transpose @1282 + matrix_ones @1283 + matrix_pdiv @1284 + matrix_pivot @1285 + matrix_pmul @1286 + matrix_print @1287 + matrix_proj @1288 + matrix_qrdecomp_gramschmidt @1289 + matrix_sub @1290 + matrix_swaprows @1291 + matrix_trans @1292 + matrix_transpose_mul @1293 + matrix_zeros @1294 + matrixc_add @1295 + matrixc_aug @1296 + matrixc_cgsolve @1297 + matrixc_chol @1298 + matrixc_det @1299 + matrixc_det2x2 @1300 + matrixc_div @1301 + matrixc_eye @1302 + matrixc_gjelim @1303 + matrixc_gramschmidt @1304 + matrixc_hermitian @1305 + matrixc_hermitian_mul @1306 + matrixc_inv @1307 + matrixc_linsolve @1308 + matrixc_ludecomp_crout @1309 + matrixc_ludecomp_doolittle @1310 + matrixc_mul @1311 + matrixc_mul_hermitian @1312 + matrixc_mul_transpose @1313 + matrixc_ones @1314 + matrixc_pdiv @1315 + matrixc_pivot @1316 + matrixc_pmul @1317 + matrixc_print @1318 + matrixc_proj @1319 + matrixc_qrdecomp_gramschmidt @1320 + matrixc_sub @1321 + matrixc_swaprows @1322 + matrixc_trans @1323 + matrixc_transpose_mul @1324 + matrixc_zeros @1325 + matrixcf_add @1326 + matrixcf_aug @1327 + matrixcf_cgsolve @1328 + matrixcf_chol @1329 + matrixcf_det @1330 + matrixcf_det2x2 @1331 + matrixcf_div @1332 + matrixcf_eye @1333 + matrixcf_gjelim @1334 + matrixcf_gramschmidt @1335 + matrixcf_hermitian @1336 + matrixcf_hermitian_mul @1337 + matrixcf_inv @1338 + matrixcf_linsolve @1339 + matrixcf_ludecomp_crout @1340 + matrixcf_ludecomp_doolittle @1341 + matrixcf_mul @1342 + matrixcf_mul_hermitian @1343 + matrixcf_mul_transpose @1344 + matrixcf_ones @1345 + matrixcf_pdiv @1346 + matrixcf_pivot @1347 + matrixcf_pmul @1348 + matrixcf_print @1349 + matrixcf_proj @1350 + matrixcf_qrdecomp_gramschmidt @1351 + matrixcf_sub @1352 + matrixcf_swaprows @1353 + matrixcf_trans @1354 + matrixcf_transpose_mul @1355 + matrixcf_zeros @1356 + matrixf_add @1357 + matrixf_aug @1358 + matrixf_cgsolve @1359 + matrixf_chol @1360 + matrixf_det @1361 + matrixf_det2x2 @1362 + matrixf_div @1363 + matrixf_eye @1364 + matrixf_gjelim @1365 + matrixf_gramschmidt @1366 + matrixf_hermitian @1367 + matrixf_hermitian_mul @1368 + matrixf_inv @1369 + matrixf_linsolve @1370 + matrixf_ludecomp_crout @1371 + matrixf_ludecomp_doolittle @1372 + matrixf_mul @1373 + matrixf_mul_hermitian @1374 + matrixf_mul_transpose @1375 + matrixf_ones @1376 + matrixf_pdiv @1377 + matrixf_pivot @1378 + matrixf_pmul @1379 + matrixf_print @1380 + matrixf_proj @1381 + matrixf_qrdecomp_gramschmidt @1382 + matrixf_sub @1383 + matrixf_swaprows @1384 + matrixf_trans @1385 + matrixf_transpose_mul @1386 + matrixf_zeros @1387 + modem_arb128opt @1388 DATA + modem_arb16opt @1389 DATA + modem_arb256opt @1390 DATA + modem_arb32opt @1391 DATA + modem_arb64opt @1392 DATA + modem_arb_V29 @1393 DATA + modem_arb_balance_iq @1394 + modem_arb_init @1395 + modem_arb_init_file @1396 + modem_arb_scale @1397 + modem_arb_sqam128 @1398 DATA + modem_arb_sqam32 @1399 DATA + modem_arb_vt64 @1400 DATA + modem_create @1401 + modem_create_V29 @1402 + modem_create_apsk @1403 + modem_create_arb @1404 + modem_create_arb128opt @1405 + modem_create_arb16opt @1406 + modem_create_arb256opt @1407 + modem_create_arb32opt @1408 + modem_create_arb64opt @1409 + modem_create_arb64vt @1410 + modem_create_arbitrary @1411 + modem_create_ask @1412 + modem_create_bpsk @1413 + modem_create_dpsk @1414 + modem_create_ook @1415 + modem_create_psk @1416 + modem_create_qam @1417 + modem_create_qpsk @1418 + modem_create_sqam128 @1419 + modem_create_sqam32 @1420 + modem_demodsoft_gentab @1421 + modem_demodulate @1422 + modem_demodulate_apsk @1423 + modem_demodulate_arb @1424 + modem_demodulate_ask @1425 + modem_demodulate_bpsk @1426 + modem_demodulate_dpsk @1427 + modem_demodulate_linear_array @1428 + modem_demodulate_linear_array_ref @1429 + modem_demodulate_ook @1430 + modem_demodulate_psk @1431 + modem_demodulate_qam @1432 + modem_demodulate_qpsk @1433 + modem_demodulate_soft @1434 + modem_demodulate_soft_arb @1435 + modem_demodulate_soft_bpsk @1436 + modem_demodulate_soft_qpsk @1437 + modem_demodulate_soft_table @1438 + modem_demodulate_sqam128 @1439 + modem_demodulate_sqam32 @1440 + modem_destroy @1441 + modem_gen_rand_sym @1442 + modem_get_bps @1443 + modem_get_demodulator_evm @1444 + modem_get_demodulator_phase_error @1445 + modem_get_demodulator_sample @1446 + modem_get_scheme @1447 + modem_init @1448 + modem_init_map @1449 + modem_modulate @1450 + modem_modulate_apsk @1451 + modem_modulate_arb @1452 + modem_modulate_ask @1453 + modem_modulate_bpsk @1454 + modem_modulate_dpsk @1455 + modem_modulate_map @1456 + modem_modulate_ook @1457 + modem_modulate_psk @1458 + modem_modulate_qam @1459 + modem_modulate_qpsk @1460 + modem_modulate_sqam128 @1461 + modem_modulate_sqam32 @1462 + modem_print @1463 + modem_recreate @1464 + modem_reset @1465 + modulation_types @1466 DATA + msequence_advance @1467 + msequence_create @1468 + msequence_create_default @1469 + msequence_create_genpoly @1470 + msequence_default @1471 DATA + msequence_destroy @1472 + msequence_generate_symbol @1473 + msequence_get_length @1474 + msequence_get_state @1475 + msequence_print @1476 + msequence_reset @1477 + msequence_set_state @1478 + msourcecf_add_modem @1479 + msourcecf_add_noise @1480 + msourcecf_add_source @1481 + msourcecf_add_tone @1482 + msourcecf_create @1483 + msourcecf_destroy @1484 + msourcecf_disable @1485 + msourcecf_enable @1486 + msourcecf_get_source @1487 + msourcecf_print @1488 + msourcecf_remove @1489 + msourcecf_reset @1490 + msourcecf_set_frequency @1491 + msourcecf_set_gain @1492 + msourcecf_write_samples @1493 + msresamp2_cccf_create @1494 + msresamp2_cccf_decim_execute @1495 + msresamp2_cccf_destroy @1496 + msresamp2_cccf_execute @1497 + msresamp2_cccf_get_delay @1498 + msresamp2_cccf_interp_execute @1499 + msresamp2_cccf_print @1500 + msresamp2_cccf_reset @1501 + msresamp2_crcf_create @1502 + msresamp2_crcf_decim_execute @1503 + msresamp2_crcf_destroy @1504 + msresamp2_crcf_execute @1505 + msresamp2_crcf_get_delay @1506 + msresamp2_crcf_interp_execute @1507 + msresamp2_crcf_print @1508 + msresamp2_crcf_reset @1509 + msresamp2_rrrf_create @1510 + msresamp2_rrrf_decim_execute @1511 + msresamp2_rrrf_destroy @1512 + msresamp2_rrrf_execute @1513 + msresamp2_rrrf_get_delay @1514 + msresamp2_rrrf_interp_execute @1515 + msresamp2_rrrf_print @1516 + msresamp2_rrrf_reset @1517 + msresamp_cccf_create @1518 + msresamp_cccf_decim_execute @1519 + msresamp_cccf_destroy @1520 + msresamp_cccf_execute @1521 + msresamp_cccf_get_delay @1522 + msresamp_cccf_interp_execute @1523 + msresamp_cccf_print @1524 + msresamp_cccf_reset @1525 + msresamp_crcf_create @1526 + msresamp_crcf_decim_execute @1527 + msresamp_crcf_destroy @1528 + msresamp_crcf_execute @1529 + msresamp_crcf_get_delay @1530 + msresamp_crcf_interp_execute @1531 + msresamp_crcf_print @1532 + msresamp_crcf_reset @1533 + msresamp_rrrf_create @1534 + msresamp_rrrf_decim_execute @1535 + msresamp_rrrf_destroy @1536 + msresamp_rrrf_execute @1537 + msresamp_rrrf_get_delay @1538 + msresamp_rrrf_interp_execute @1539 + msresamp_rrrf_print @1540 + msresamp_rrrf_reset @1541 + nco_crcf_adjust_frequency @1542 + nco_crcf_adjust_phase @1543 + nco_crcf_cexpf @1544 + nco_crcf_compute_sincos_nco @1545 + nco_crcf_compute_sincos_vco @1546 + nco_crcf_constrain_frequency @1547 + nco_crcf_constrain_phase @1548 + nco_crcf_cos @1549 + nco_crcf_create @1550 + nco_crcf_destroy @1551 + nco_crcf_get_frequency @1552 + nco_crcf_get_phase @1553 + nco_crcf_mix_block_down @1554 + nco_crcf_mix_block_up @1555 + nco_crcf_mix_down @1556 + nco_crcf_mix_up @1557 + nco_crcf_pll_reset @1558 + nco_crcf_pll_set_bandwidth @1559 + nco_crcf_pll_step @1560 + nco_crcf_reset @1561 + nco_crcf_set_frequency @1562 + nco_crcf_set_phase @1563 + nco_crcf_sin @1564 + nco_crcf_sincos @1565 + nco_crcf_step @1566 + ofdmflexframegen_assemble @1567 + ofdmflexframegen_create @1568 + ofdmflexframegen_destroy @1569 + ofdmflexframegen_encode_header @1570 + ofdmflexframegen_gen_S0a @1571 + ofdmflexframegen_gen_S0b @1572 + ofdmflexframegen_gen_S1 @1573 + ofdmflexframegen_gen_header @1574 + ofdmflexframegen_gen_payload @1575 + ofdmflexframegen_gen_symbol @1576 + ofdmflexframegen_gen_tail @1577 + ofdmflexframegen_gen_zeros @1578 + ofdmflexframegen_getframelen @1579 + ofdmflexframegen_getprops @1580 + ofdmflexframegen_is_assembled @1581 + ofdmflexframegen_modulate_header @1582 + ofdmflexframegen_print @1583 + ofdmflexframegen_reconfigure @1584 + ofdmflexframegen_reset @1585 + ofdmflexframegen_setprops @1586 + ofdmflexframegen_write @1587 + ofdmflexframegenprops_init_default @1588 + ofdmflexframesync_create @1589 + ofdmflexframesync_debug_disable @1590 + ofdmflexframesync_debug_enable @1591 + ofdmflexframesync_debug_print @1592 + ofdmflexframesync_decode_header @1593 + ofdmflexframesync_destroy @1594 + ofdmflexframesync_execute @1595 + ofdmflexframesync_get_cfo @1596 + ofdmflexframesync_get_rssi @1597 + ofdmflexframesync_internal_callback @1598 + ofdmflexframesync_print @1599 + ofdmflexframesync_reset @1600 + ofdmflexframesync_rxheader @1601 + ofdmflexframesync_rxpayload @1602 + ofdmframe_init_S0 @1603 + ofdmframe_init_S1 @1604 + ofdmframe_init_default_sctype @1605 + ofdmframe_init_sctype_range @1606 + ofdmframe_print_sctype @1607 + ofdmframe_validate_sctype @1608 + ofdmframegen_create @1609 + ofdmframegen_destroy @1610 + ofdmframegen_gensymbol @1611 + ofdmframegen_print @1612 + ofdmframegen_reset @1613 + ofdmframegen_write_S0a @1614 + ofdmframegen_write_S0b @1615 + ofdmframegen_write_S1 @1616 + ofdmframegen_writesymbol @1617 + ofdmframegen_writetail @1618 + ofdmframesync_S0_metrics @1619 + ofdmframesync_create @1620 + ofdmframesync_debug_disable @1621 + ofdmframesync_debug_enable @1622 + ofdmframesync_debug_print @1623 + ofdmframesync_destroy @1624 + ofdmframesync_estimate_eqgain @1625 + ofdmframesync_estimate_eqgain_poly @1626 + ofdmframesync_estimate_gain_S0 @1627 + ofdmframesync_estimate_gain_S1 @1628 + ofdmframesync_execute @1629 + ofdmframesync_execute_S0a @1630 + ofdmframesync_execute_S0b @1631 + ofdmframesync_execute_S1 @1632 + ofdmframesync_execute_rxsymbols @1633 + ofdmframesync_execute_seekplcp @1634 + ofdmframesync_get_cfo @1635 + ofdmframesync_get_rssi @1636 + ofdmframesync_print @1637 + ofdmframesync_reset @1638 + ofdmframesync_rxsymbol @1639 + optim_sort @1640 + optim_threshold_switch @1641 + packetizer_compute_dec_msg_len @1642 + packetizer_compute_enc_msg_len @1643 + packetizer_create @1644 + packetizer_decode @1645 + packetizer_decode_soft @1646 + packetizer_destroy @1647 + packetizer_encode @1648 + packetizer_get_crc @1649 + packetizer_get_dec_msg_len @1650 + packetizer_get_enc_msg_len @1651 + packetizer_get_fec0 @1652 + packetizer_get_fec1 @1653 + packetizer_print @1654 + packetizer_realloc_buffers @1655 + packetizer_recreate @1656 + packetizer_set_scheme @1657 + poly_expandbinomial @1658 + poly_expandbinomial_pm @1659 + poly_expandroots @1660 + poly_expandroots2 @1661 + poly_findroots @1662 + poly_findroots_bairstow @1663 + poly_findroots_bairstow_recursion @1664 + poly_findroots_durandkerner @1665 + poly_fit @1666 + poly_fit_lagrange @1667 + poly_fit_lagrange_barycentric @1668 + poly_interp_lagrange @1669 + poly_mul @1670 + poly_val @1671 + poly_val_lagrange_barycentric @1672 + polyc_expandbinomial @1673 + polyc_expandbinomial_pm @1674 + polyc_expandroots @1675 + polyc_expandroots2 @1676 + polyc_findroots @1677 + polyc_findroots_bairstow @1678 + polyc_findroots_bairstow_recursion @1679 + polyc_findroots_durandkerner @1680 + polyc_fit @1681 + polyc_fit_lagrange @1682 + polyc_fit_lagrange_barycentric @1683 + polyc_interp_lagrange @1684 + polyc_mul @1685 + polyc_val @1686 + polyc_val_lagrange_barycentric @1687 + polycf_expandbinomial @1688 + polycf_expandbinomial_pm @1689 + polycf_expandroots @1690 + polycf_expandroots2 @1691 + polycf_findroots @1692 + polycf_findroots_bairstow @1693 + polycf_findroots_bairstow_recursion @1694 + polycf_findroots_durandkerner @1695 + polycf_fit @1696 + polycf_fit_lagrange @1697 + polycf_fit_lagrange_barycentric @1698 + polycf_interp_lagrange @1699 + polycf_mul @1700 + polycf_val @1701 + polycf_val_lagrange_barycentric @1702 + polyf_expandbinomial @1703 + polyf_expandbinomial_pm @1704 + polyf_expandroots @1705 + polyf_expandroots2 @1706 + polyf_findroots @1707 + polyf_findroots_bairstow @1708 + polyf_findroots_bairstow_recursion @1709 + polyf_findroots_durandkerner @1710 + polyf_fit @1711 + polyf_fit_lagrange @1712 + polyf_fit_lagrange_barycentric @1713 + polyf_interp_lagrange @1714 + polyf_mul @1715 + polyf_val @1716 + polyf_val_lagrange_barycentric @1717 + presync_cccf_correlate @1718 + presync_cccf_correlatex @1719 + presync_cccf_create @1720 + presync_cccf_destroy @1721 + presync_cccf_print @1722 + presync_cccf_push @1723 + presync_cccf_reset @1724 + qdetector_cccf_create @1725 + qdetector_cccf_create_gmsk @1726 + qdetector_cccf_create_linear @1727 + qdetector_cccf_destroy @1728 + qdetector_cccf_execute @1729 + qdetector_cccf_execute_align @1730 + qdetector_cccf_execute_seek @1731 + qdetector_cccf_get_buf_len @1732 + qdetector_cccf_get_dphi @1733 + qdetector_cccf_get_gamma @1734 + qdetector_cccf_get_phi @1735 + qdetector_cccf_get_seq_len @1736 + qdetector_cccf_get_sequence @1737 + qdetector_cccf_get_tau @1738 + qdetector_cccf_print @1739 + qdetector_cccf_reset @1740 + qdetector_cccf_set_range @1741 + qdetector_cccf_set_threshold @1742 + qnsearch_compute_Hessian @1743 + qnsearch_compute_gradient @1744 + qnsearch_create @1745 + qnsearch_destroy @1746 + qnsearch_normalize_gradient @1747 + qnsearch_print @1748 + qnsearch_reset @1749 + qnsearch_run @1750 + qnsearch_step @1751 + qpacketmodem_configure @1752 + qpacketmodem_create @1753 + qpacketmodem_decode @1754 + qpacketmodem_decode_bits @1755 + qpacketmodem_decode_soft @1756 + qpacketmodem_decode_syms @1757 + qpacketmodem_destroy @1758 + qpacketmodem_encode @1759 + qpacketmodem_encode_syms @1760 + qpacketmodem_get_crc @1761 + qpacketmodem_get_fec0 @1762 + qpacketmodem_get_fec1 @1763 + qpacketmodem_get_frame_len @1764 + qpacketmodem_get_modscheme @1765 + qpacketmodem_get_payload_len @1766 + qpacketmodem_print @1767 + qpacketmodem_reset @1768 + qpilotgen_create @1769 + qpilotgen_destroy @1770 + qpilotgen_execute @1771 + qpilotgen_get_frame_len @1772 + qpilotgen_print @1773 + qpilotgen_recreate @1774 + qpilotgen_reset @1775 + qpilotsync_create @1776 + qpilotsync_destroy @1777 + qpilotsync_execute @1778 + qpilotsync_get_dphi @1779 + qpilotsync_get_frame_len @1780 + qpilotsync_get_gain @1781 + qpilotsync_get_phi @1782 + qpilotsync_print @1783 + qpilotsync_recreate @1784 + qpilotsync_reset @1785 + qsourcecf_create_modem @1786 + qsourcecf_create_noise @1787 + qsourcecf_create_tone @1788 + qsourcecf_destroy @1789 + qsourcecf_disable @1790 + qsourcecf_enable @1791 + qsourcecf_gen_sample @1792 + qsourcecf_print @1793 + qsourcecf_reset @1794 + qsourcecf_set_frequency @1795 + qsourcecf_set_gain @1796 + quantize_adc @1797 + quantize_dac @1798 + quantizercf_create @1799 + quantizercf_destroy @1800 + quantizercf_execute_adc @1801 + quantizercf_execute_dac @1802 + quantizercf_print @1803 + quantizerf_create @1804 + quantizerf_destroy @1805 + quantizerf_execute_adc @1806 + quantizerf_execute_dac @1807 + quantizerf_print @1808 + randexpf @1809 + randexpf_cdf @1810 + randexpf_pdf @1811 + randf @1812 + randf_cdf @1813 + randf_pdf @1814 + randgammaf @1815 + randgammaf_cdf @1816 + randgammaf_delta @1817 + randgammaf_pdf @1818 + randnakmf @1819 + randnakmf_cdf @1820 + randnakmf_pdf @1821 + randnf @1822 + randnf_cdf @1823 + randnf_pdf @1824 + randricekf @1825 + randricekf_cdf @1826 + randricekf_pdf @1827 + randweibf @1828 + randweibf_cdf @1829 + randweibf_pdf @1830 + resamp2_cccf_analyzer_execute @1831 + resamp2_cccf_create @1832 + resamp2_cccf_decim_execute @1833 + resamp2_cccf_destroy @1834 + resamp2_cccf_filter_execute @1835 + resamp2_cccf_get_delay @1836 + resamp2_cccf_interp_execute @1837 + resamp2_cccf_print @1838 + resamp2_cccf_recreate @1839 + resamp2_cccf_reset @1840 + resamp2_cccf_synthesizer_execute @1841 + resamp2_crcf_analyzer_execute @1842 + resamp2_crcf_create @1843 + resamp2_crcf_decim_execute @1844 + resamp2_crcf_destroy @1845 + resamp2_crcf_filter_execute @1846 + resamp2_crcf_get_delay @1847 + resamp2_crcf_interp_execute @1848 + resamp2_crcf_print @1849 + resamp2_crcf_recreate @1850 + resamp2_crcf_reset @1851 + resamp2_crcf_synthesizer_execute @1852 + resamp2_rrrf_analyzer_execute @1853 + resamp2_rrrf_create @1854 + resamp2_rrrf_decim_execute @1855 + resamp2_rrrf_destroy @1856 + resamp2_rrrf_filter_execute @1857 + resamp2_rrrf_get_delay @1858 + resamp2_rrrf_interp_execute @1859 + resamp2_rrrf_print @1860 + resamp2_rrrf_recreate @1861 + resamp2_rrrf_reset @1862 + resamp2_rrrf_synthesizer_execute @1863 + resamp_cccf_adjust_rate @1864 + resamp_cccf_create @1865 + resamp_cccf_create_default @1866 + resamp_cccf_destroy @1867 + resamp_cccf_execute @1868 + resamp_cccf_execute_block @1869 + resamp_cccf_get_delay @1870 + resamp_cccf_print @1871 + resamp_cccf_reset @1872 + resamp_cccf_set_rate @1873 + resamp_cccf_update_timing_state @1874 + resamp_crcf_adjust_rate @1875 + resamp_crcf_create @1876 + resamp_crcf_create_default @1877 + resamp_crcf_destroy @1878 + resamp_crcf_execute @1879 + resamp_crcf_execute_block @1880 + resamp_crcf_get_delay @1881 + resamp_crcf_print @1882 + resamp_crcf_reset @1883 + resamp_crcf_set_rate @1884 + resamp_crcf_update_timing_state @1885 + resamp_rrrf_adjust_rate @1886 + resamp_rrrf_create @1887 + resamp_rrrf_create_default @1888 + resamp_rrrf_destroy @1889 + resamp_rrrf_execute @1890 + resamp_rrrf_execute_block @1891 + resamp_rrrf_get_delay @1892 + resamp_rrrf_print @1893 + resamp_rrrf_reset @1894 + resamp_rrrf_set_rate @1895 + resamp_rrrf_update_timing_state @1896 + rkaiser_approximate_rho @1897 + scramble_data @1898 + secded2216_P @1899 DATA + secded2216_syndrome_w1 @1900 DATA + secded3932_P @1901 DATA + secded3932_syndrome_w1 @1902 DATA + secded7264_P @1903 DATA + secded7264_syndrome_w1 @1904 DATA + sincf @1905 + smatrix_indexsearch @1906 + smatrixb_clear @1907 + smatrixb_create @1908 + smatrixb_create_array @1909 + smatrixb_delete @1910 + smatrixb_destroy @1911 + smatrixb_eye @1912 + smatrixb_get @1913 + smatrixb_insert @1914 + smatrixb_isset @1915 + smatrixb_mul @1916 + smatrixb_mulf @1917 + smatrixb_print @1918 + smatrixb_print_expanded @1919 + smatrixb_reset @1920 + smatrixb_reset_max_mlist @1921 + smatrixb_reset_max_nlist @1922 + smatrixb_set @1923 + smatrixb_size @1924 + smatrixb_vmul @1925 + smatrixb_vmulf @1926 + smatrixf_clear @1927 + smatrixf_create @1928 + smatrixf_create_array @1929 + smatrixf_delete @1930 + smatrixf_destroy @1931 + smatrixf_eye @1932 + smatrixf_get @1933 + smatrixf_insert @1934 + smatrixf_isset @1935 + smatrixf_mul @1936 + smatrixf_print @1937 + smatrixf_print_expanded @1938 + smatrixf_reset @1939 + smatrixf_reset_max_mlist @1940 + smatrixf_reset_max_nlist @1941 + smatrixf_set @1942 + smatrixf_size @1943 + smatrixf_vmul @1944 + smatrixi_clear @1945 + smatrixi_create @1946 + smatrixi_create_array @1947 + smatrixi_delete @1948 + smatrixi_destroy @1949 + smatrixi_eye @1950 + smatrixi_get @1951 + smatrixi_insert @1952 + smatrixi_isset @1953 + smatrixi_mul @1954 + smatrixi_print @1955 + smatrixi_print_expanded @1956 + smatrixi_reset @1957 + smatrixi_reset_max_mlist @1958 + smatrixi_reset_max_nlist @1959 + smatrixi_set @1960 + smatrixi_size @1961 + smatrixi_vmul @1962 + spgramcf_create @1963 + spgramcf_create_default @1964 + spgramcf_destroy @1965 + spgramcf_estimate_psd @1966 + spgramcf_export_gnuplot @1967 + spgramcf_get_delay @1968 + spgramcf_get_nfft @1969 + spgramcf_get_num_samples @1970 + spgramcf_get_num_samples_total @1971 + spgramcf_get_num_transforms @1972 + spgramcf_get_num_transforms_total @1973 + spgramcf_get_psd @1974 + spgramcf_get_window_len @1975 + spgramcf_print @1976 + spgramcf_push @1977 + spgramcf_reset @1978 + spgramcf_set_alpha @1979 + spgramcf_step @1980 + spgramcf_write @1981 + spgramf_create @1982 + spgramf_create_default @1983 + spgramf_destroy @1984 + spgramf_estimate_psd @1985 + spgramf_export_gnuplot @1986 + spgramf_get_delay @1987 + spgramf_get_nfft @1988 + spgramf_get_num_samples @1989 + spgramf_get_num_samples_total @1990 + spgramf_get_num_transforms @1991 + spgramf_get_num_transforms_total @1992 + spgramf_get_psd @1993 + spgramf_get_window_len @1994 + spgramf_print @1995 + spgramf_push @1996 + spgramf_reset @1997 + spgramf_set_alpha @1998 + spgramf_step @1999 + spgramf_write @2000 + sumproduct_phi @2001 + symstreamcf_create @2002 + symstreamcf_create_linear @2003 + symstreamcf_destroy @2004 + symstreamcf_fill_buffer @2005 + symstreamcf_print @2006 + symstreamcf_reset @2007 + symstreamcf_write_samples @2008 + symsync_crcf_advance_internal_loop @2009 + symsync_crcf_create @2010 + symsync_crcf_create_kaiser @2011 + symsync_crcf_create_rnyquist @2012 + symsync_crcf_destroy @2013 + symsync_crcf_execute @2014 + symsync_crcf_get_tau @2015 + symsync_crcf_lock @2016 + symsync_crcf_output_debug_file @2017 + symsync_crcf_print @2018 + symsync_crcf_reset @2019 + symsync_crcf_set_lf_bw @2020 + symsync_crcf_set_output_rate @2021 + symsync_crcf_step @2022 + symsync_crcf_unlock @2023 + symsync_rrrf_advance_internal_loop @2024 + symsync_rrrf_create @2025 + symsync_rrrf_create_kaiser @2026 + symsync_rrrf_create_rnyquist @2027 + symsync_rrrf_destroy @2028 + symsync_rrrf_execute @2029 + symsync_rrrf_get_tau @2030 + symsync_rrrf_lock @2031 + symsync_rrrf_output_debug_file @2032 + symsync_rrrf_print @2033 + symsync_rrrf_reset @2034 + symsync_rrrf_set_lf_bw @2035 + symsync_rrrf_set_output_rate @2036 + symsync_rrrf_step @2037 + symsync_rrrf_unlock @2038 + symtrack_cccf_adjust_phase @2039 + symtrack_cccf_create @2040 + symtrack_cccf_create_default @2041 + symtrack_cccf_destroy @2042 + symtrack_cccf_execute @2043 + symtrack_cccf_execute_block @2044 + symtrack_cccf_print @2045 + symtrack_cccf_reset @2046 + symtrack_cccf_set_bandwidth @2047 + symtrack_cccf_set_modscheme @2048 + triangular @2049 + tvmpch_cccf_create @2050 + tvmpch_cccf_destroy @2051 + tvmpch_cccf_execute @2052 + tvmpch_cccf_execute_block @2053 + tvmpch_cccf_print @2054 + tvmpch_cccf_push @2055 + tvmpch_cccf_reset @2056 + unscramble_data @2057 + unscramble_data_soft @2058 + wdelaycf_create @2059 + wdelaycf_destroy @2060 + wdelaycf_print @2061 + wdelaycf_push @2062 + wdelaycf_read @2063 + wdelaycf_recreate @2064 + wdelaycf_reset @2065 + wdelayf_create @2066 + wdelayf_destroy @2067 + wdelayf_print @2068 + wdelayf_push @2069 + wdelayf_read @2070 + wdelayf_recreate @2071 + wdelayf_reset @2072 + windowcf_create @2073 + windowcf_debug_print @2074 + windowcf_destroy @2075 + windowcf_index @2076 + windowcf_print @2077 + windowcf_push @2078 + windowcf_read @2079 + windowcf_recreate @2080 + windowcf_reset @2081 + windowcf_write @2082 + windowf_create @2083 + windowf_debug_print @2084 + windowf_destroy @2085 + windowf_index @2086 + windowf_print @2087 + windowf_push @2088 + windowf_read @2089 + windowf_recreate @2090 + windowf_reset @2091 + windowf_write @2092 diff --git a/external/liquid-dsp/msvc/32/libliquid.dll b/external/liquid-dsp/msvc/32/libliquid.dll index 84dbf2d..108d0b4 100644 Binary files a/external/liquid-dsp/msvc/32/libliquid.dll and b/external/liquid-dsp/msvc/32/libliquid.dll differ diff --git a/external/liquid-dsp/msvc/32/libliquid.exp b/external/liquid-dsp/msvc/32/libliquid.exp deleted file mode 100644 index eceb3d5..0000000 Binary files a/external/liquid-dsp/msvc/32/libliquid.exp and /dev/null differ diff --git a/external/liquid-dsp/msvc/32/libliquid.lib b/external/liquid-dsp/msvc/32/libliquid.lib index 300cba0..84d41aa 100644 Binary files a/external/liquid-dsp/msvc/32/libliquid.lib and b/external/liquid-dsp/msvc/32/libliquid.lib differ diff --git a/external/liquid-dsp/msvc/64/libliquid.a b/external/liquid-dsp/msvc/64/libliquid.a index c030465..63fcc1c 100644 Binary files a/external/liquid-dsp/msvc/64/libliquid.a and b/external/liquid-dsp/msvc/64/libliquid.a differ diff --git a/external/liquid-dsp/msvc/64/libliquid.def b/external/liquid-dsp/msvc/64/libliquid.def index 6df6363..b3b8a0a 100644 --- a/external/liquid-dsp/msvc/64/libliquid.def +++ b/external/liquid-dsp/msvc/64/libliquid.def @@ -36,1836 +36,2058 @@ EXPORTS ampmodem_create @35 ampmodem_debug_print @36 ampmodem_demodulate @37 - ampmodem_destroy @38 - ampmodem_modulate @39 - ampmodem_print @40 - ampmodem_reset @41 - apsk128_map @42 DATA - apsk128_num_levels @43 DATA - apsk128_p @44 DATA - apsk128_phi @45 DATA - apsk128_r @46 DATA - apsk128_r_slicer @47 DATA - apsk16_map @48 DATA - apsk16_num_levels @49 DATA - apsk16_p @50 DATA - apsk16_phi @51 DATA - apsk16_r @52 DATA - apsk16_r_slicer @53 DATA - apsk256_map @54 DATA - apsk256_num_levels @55 DATA - apsk256_p @56 DATA - apsk256_phi @57 DATA - apsk256_r @58 DATA - apsk256_r_slicer @59 DATA - apsk32_map @60 DATA - apsk32_num_levels @61 DATA - apsk32_p @62 DATA - apsk32_phi @63 DATA - apsk32_r @64 DATA - apsk32_r_slicer @65 DATA - apsk4_map @66 DATA - apsk4_num_levels @67 DATA - apsk4_p @68 DATA - apsk4_phi @69 DATA - apsk4_r @70 DATA - apsk4_r_slicer @71 DATA - apsk64_map @72 DATA - apsk64_num_levels @73 DATA - apsk64_p @74 DATA - apsk64_phi @75 DATA - apsk64_r @76 DATA - apsk64_r_slicer @77 DATA - apsk8_map @78 DATA - apsk8_num_levels @79 DATA - apsk8_p @80 DATA - apsk8_phi @81 DATA - apsk8_r @82 DATA - apsk8_r_slicer @83 DATA - asgram_create @84 - asgram_destroy @85 - asgram_execute @86 - asgram_push @87 - asgram_reset @88 - asgram_set_scale @89 - autocorr_cccf_create @90 - autocorr_cccf_destroy @91 - autocorr_cccf_execute @92 - autocorr_cccf_execute_block @93 - autocorr_cccf_get_energy @94 - autocorr_cccf_print @95 - autocorr_cccf_push @96 - autocorr_cccf_reset @97 - autocorr_rrrf_create @98 - autocorr_rrrf_destroy @99 - autocorr_rrrf_execute @100 - autocorr_rrrf_execute_block @101 - autocorr_rrrf_get_energy @102 - autocorr_rrrf_print @103 - autocorr_rrrf_push @104 - autocorr_rrrf_reset @105 - awgn @106 - bessel_azpkf @107 - bilinear_zpkf @108 - blackmanharris @109 - bpacketgen_assemble_header @110 - bpacketgen_assemble_pnsequence @111 - bpacketgen_compute_packet_len @112 - bpacketgen_create @113 - bpacketgen_destroy @114 - bpacketgen_encode @115 - bpacketgen_get_packet_len @116 - bpacketgen_print @117 - bpacketgen_recreate @118 - bpacketsync_assemble_pnsequence @119 - bpacketsync_create @120 - bpacketsync_decode_header @121 - bpacketsync_decode_payload @122 - bpacketsync_destroy @123 - bpacketsync_execute @124 - bpacketsync_execute_bit @125 - bpacketsync_execute_byte @126 - bpacketsync_execute_rxheader @127 - bpacketsync_execute_rxpayload @128 - bpacketsync_execute_seekpn @129 - bpacketsync_execute_sym @130 - bpacketsync_print @131 - bpacketsync_reconfig @132 - bpacketsync_reset @133 - bpresync_cccf_correlate @134 - bpresync_cccf_correlatex @135 - bpresync_cccf_create @136 - bpresync_cccf_destroy @137 - bpresync_cccf_print @138 - bpresync_cccf_push @139 - bpresync_cccf_reset @140 - bsequence_accumulate @141 - bsequence_add @142 - bsequence_circshift @143 - bsequence_clear @144 - bsequence_correlate @145 - bsequence_create @146 - bsequence_create_ccodes @147 - bsequence_destroy @148 - bsequence_get_length @149 - bsequence_index @150 - bsequence_init @151 - bsequence_init_msequence @152 - bsequence_mul @153 - bsequence_print @154 - bsequence_push @155 - bsync_cccf_correlate @156 - bsync_cccf_create @157 - bsync_cccf_create_msequence @158 - bsync_cccf_destroy @159 - bsync_cccf_print @160 - bsync_crcf_correlate @161 - bsync_crcf_create @162 - bsync_crcf_create_msequence @163 - bsync_crcf_destroy @164 - bsync_crcf_print @165 - bsync_rrrf_correlate @166 - bsync_rrrf_create @167 - bsync_rrrf_create_msequence @168 - bsync_rrrf_destroy @169 - bsync_rrrf_print @170 - butter_azpkf @171 - cawgn @172 - cbuffercf_clear @173 - cbuffercf_create @174 - cbuffercf_create_max @175 - cbuffercf_debug_print @176 - cbuffercf_destroy @177 - cbuffercf_is_full @178 - cbuffercf_linearize @179 - cbuffercf_max_read @180 - cbuffercf_max_size @181 - cbuffercf_pop @182 - cbuffercf_print @183 - cbuffercf_push @184 - cbuffercf_read @185 - cbuffercf_release @186 - cbuffercf_size @187 - cbuffercf_space_available @188 - cbuffercf_write @189 - cbufferf_clear @190 - cbufferf_create @191 - cbufferf_create_max @192 - cbufferf_debug_print @193 - cbufferf_destroy @194 - cbufferf_is_full @195 - cbufferf_linearize @196 - cbufferf_max_read @197 - cbufferf_max_size @198 - cbufferf_pop @199 - cbufferf_print @200 - cbufferf_push @201 - cbufferf_read @202 - cbufferf_release @203 - cbufferf_size @204 - cbufferf_space_available @205 - cbufferf_write @206 - cheby1_azpkf @207 - cheby2_azpkf @208 - checksum_generate_key @209 - chromosome_clear @210 - chromosome_copy @211 - chromosome_create @212 - chromosome_create_basic @213 - chromosome_create_clone @214 - chromosome_crossover @215 - chromosome_destroy @216 - chromosome_get_num_traits @217 - chromosome_init @218 - chromosome_init_random @219 - chromosome_initf @220 - chromosome_mutate @221 - chromosome_print @222 - chromosome_printf @223 - chromosome_value @224 - chromosome_valuef @225 - compress_cf_mulaw @226 - compress_mulaw @227 - count_bit_errors @228 - count_bit_errors_array @229 - crandnf @230 - crc16_generate_key @231 - crc24_generate_key @232 - crc32_generate_key @233 - crc8_generate_key @234 - crc_generate_key @235 - crc_get_length @236 - crc_scheme_str @237 DATA - crc_validate_message @238 - cvsd_create @239 - cvsd_decode @240 - cvsd_decode8 @241 - cvsd_destroy @242 - cvsd_encode @243 - cvsd_encode8 @244 - cvsd_print @245 - detector_cccf_compute_dotprods @246 - detector_cccf_correlate @247 - detector_cccf_create @248 - detector_cccf_debug_print @249 - detector_cccf_destroy @250 - detector_cccf_estimate_offsets @251 - detector_cccf_print @252 - detector_cccf_reset @253 - detector_cccf_update_sumsq @254 - dotprod_cccf_create @255 - dotprod_cccf_destroy @256 - dotprod_cccf_execute @257 - dotprod_cccf_print @258 - dotprod_cccf_recreate @259 - dotprod_cccf_run @260 - dotprod_cccf_run4 @261 - dotprod_crcf_create @262 - dotprod_crcf_destroy @263 - dotprod_crcf_execute @264 - dotprod_crcf_print @265 - dotprod_crcf_recreate @266 - dotprod_crcf_run @267 - dotprod_crcf_run4 @268 - dotprod_rrrf_create @269 - dotprod_rrrf_destroy @270 - dotprod_rrrf_execute @271 - dotprod_rrrf_print @272 - dotprod_rrrf_recreate @273 - dotprod_rrrf_run @274 - dotprod_rrrf_run4 @275 - ellip_acdf @276 - ellip_asnf @277 - ellip_azpkf @278 - ellip_cdf @279 - ellip_snf @280 - ellipdegf @281 - ellipkf @282 - eqlms_cccf_create @283 - eqlms_cccf_create_rnyquist @284 - eqlms_cccf_destroy @285 - eqlms_cccf_execute @286 - eqlms_cccf_get_bw @287 - eqlms_cccf_get_weights @288 - eqlms_cccf_print @289 - eqlms_cccf_push @290 - eqlms_cccf_recreate @291 - eqlms_cccf_reset @292 - eqlms_cccf_set_bw @293 - eqlms_cccf_step @294 - eqlms_cccf_train @295 - eqlms_cccf_update_sumsq @296 - eqlms_rrrf_create @297 - eqlms_rrrf_create_rnyquist @298 - eqlms_rrrf_destroy @299 - eqlms_rrrf_execute @300 - eqlms_rrrf_get_bw @301 - eqlms_rrrf_get_weights @302 - eqlms_rrrf_print @303 - eqlms_rrrf_push @304 - eqlms_rrrf_recreate @305 - eqlms_rrrf_reset @306 - eqlms_rrrf_set_bw @307 - eqlms_rrrf_step @308 - eqlms_rrrf_train @309 - eqlms_rrrf_update_sumsq @310 - eqrls_cccf_create @311 - eqrls_cccf_destroy @312 - eqrls_cccf_execute @313 - eqrls_cccf_get_bw @314 - eqrls_cccf_get_weights @315 - eqrls_cccf_print @316 - eqrls_cccf_push @317 - eqrls_cccf_recreate @318 - eqrls_cccf_reset @319 - eqrls_cccf_set_bw @320 - eqrls_cccf_step @321 - eqrls_cccf_train @322 - eqrls_rrrf_create @323 - eqrls_rrrf_destroy @324 - eqrls_rrrf_execute @325 - eqrls_rrrf_get_bw @326 - eqrls_rrrf_get_weights @327 - eqrls_rrrf_print @328 - eqrls_rrrf_push @329 - eqrls_rrrf_recreate @330 - eqrls_rrrf_reset @331 - eqrls_rrrf_set_bw @332 - eqrls_rrrf_step @333 - eqrls_rrrf_train @334 - estimate_req_filter_As @335 - estimate_req_filter_df @336 - estimate_req_filter_len @337 - estimate_req_filter_len_Herrmann @338 - estimate_req_filter_len_Kaiser @339 - expand_cf_mulaw @340 - expand_mulaw @341 - fec_block_get_enc_msg_len @342 - fec_conv27_poly @343 DATA - fec_conv27p23_matrix @344 DATA - fec_conv27p34_matrix @345 DATA - fec_conv27p45_matrix @346 DATA - fec_conv27p56_matrix @347 DATA - fec_conv27p67_matrix @348 DATA - fec_conv27p78_matrix @349 DATA - fec_conv29_poly @350 DATA - fec_conv29p23_matrix @351 DATA - fec_conv29p34_matrix @352 DATA - fec_conv29p45_matrix @353 DATA - fec_conv29p56_matrix @354 DATA - fec_conv29p67_matrix @355 DATA - fec_conv29p78_matrix @356 DATA - fec_conv39_poly @357 DATA - fec_conv615_poly @358 DATA - fec_conv_create @359 - fec_conv_destroy @360 - fec_conv_get_enc_msg_len @361 - fec_conv_punctured_create @362 - fec_conv_punctured_decode @363 - fec_conv_punctured_destroy @364 - fec_conv_punctured_encode @365 - fec_create @366 - fec_decode @367 - fec_decode_soft @368 - fec_destroy @369 - fec_encode @370 - fec_get_enc_msg_length @371 - fec_get_rate @372 - fec_golay2412_create @373 - fec_golay2412_decode @374 - fec_golay2412_decode_symbol @375 - fec_golay2412_destroy @376 - fec_golay2412_encode @377 - fec_golay2412_encode_symbol @378 - fec_hamming128_create @379 - fec_hamming128_decode @380 - fec_hamming128_decode_soft @381 - fec_hamming128_decode_symbol @382 - fec_hamming128_destroy @383 - fec_hamming128_encode @384 - fec_hamming128_encode_symbol @385 - fec_hamming1511_decode_symbol @386 - fec_hamming1511_encode_symbol @387 - fec_hamming3126_decode_symbol @388 - fec_hamming3126_encode_symbol @389 - fec_hamming74_create @390 - fec_hamming74_decode @391 - fec_hamming74_decode_soft @392 - fec_hamming74_destroy @393 - fec_hamming74_encode @394 - fec_hamming84_create @395 - fec_hamming84_decode @396 - fec_hamming84_decode_soft @397 - fec_hamming84_destroy @398 - fec_hamming84_encode @399 - fec_pass_create @400 - fec_pass_decode @401 - fec_pass_destroy @402 - fec_pass_encode @403 - fec_pass_print @404 - fec_print @405 - fec_recreate @406 - fec_rep3_create @407 - fec_rep3_decode @408 - fec_rep3_decode_soft @409 - fec_rep3_destroy @410 - fec_rep3_encode @411 - fec_rep3_print @412 - fec_rep5_create @413 - fec_rep5_decode @414 - fec_rep5_decode_soft @415 - fec_rep5_destroy @416 - fec_rep5_encode @417 - fec_rep5_print @418 - fec_rs_create @419 - fec_rs_decode @420 - fec_rs_destroy @421 - fec_rs_encode @422 - fec_rs_get_enc_msg_len @423 - fec_scheme_is_convolutional @424 - fec_scheme_is_hamming @425 - fec_scheme_is_punctured @426 - fec_scheme_is_reedsolomon @427 - fec_scheme_is_repeat @428 - fec_scheme_str @429 DATA - fec_secded2216_compute_parity @430 - fec_secded2216_compute_syndrome @431 - fec_secded2216_create @432 - fec_secded2216_decode @433 - fec_secded2216_decode_symbol @434 - fec_secded2216_destroy @435 - fec_secded2216_encode @436 - fec_secded2216_encode_symbol @437 - fec_secded2216_estimate_ehat @438 - fec_secded3932_compute_parity @439 - fec_secded3932_compute_syndrome @440 - fec_secded3932_create @441 - fec_secded3932_decode @442 - fec_secded3932_decode_symbol @443 - fec_secded3932_destroy @444 - fec_secded3932_encode @445 - fec_secded3932_encode_symbol @446 - fec_secded3932_estimate_ehat @447 - fec_secded7264_compute_parity @448 - fec_secded7264_compute_syndrome @449 - fec_secded7264_create @450 - fec_secded7264_decode @451 - fec_secded7264_decode_symbol @452 - fec_secded7264_destroy @453 - fec_secded7264_encode @454 - fec_secded7264_encode_symbol @455 - fec_secded7264_estimate_ehat @456 - fec_sumproduct @457 - fec_sumproduct_step @458 - fecsoft_hamming128_decode @459 - fecsoft_hamming128_decode_n3 @460 - fecsoft_hamming128_n3 @461 DATA - fecsoft_hamming74_decode @462 - fecsoft_hamming84_decode @463 - fft_create_plan @464 - fft_create_plan_dft @465 - fft_create_plan_mixed_radix @466 - fft_create_plan_r2r_1d @467 - fft_create_plan_rader @468 - fft_create_plan_rader2 @469 - fft_create_plan_radix2 @470 - fft_destroy_plan @471 - fft_destroy_plan_dft @472 - fft_destroy_plan_mixed_radix @473 - fft_destroy_plan_r2r_1d @474 - fft_destroy_plan_rader @475 - fft_destroy_plan_rader2 @476 - fft_destroy_plan_radix2 @477 - fft_estimate_mixed_radix @478 - fft_execute @479 - fft_execute_REDFT00 @480 - fft_execute_REDFT01 @481 - fft_execute_REDFT10 @482 - fft_execute_REDFT11 @483 - fft_execute_RODFT00 @484 - fft_execute_RODFT01 @485 - fft_execute_RODFT10 @486 - fft_execute_RODFT11 @487 - fft_execute_dft @488 - fft_execute_dft_16 @489 - fft_execute_dft_2 @490 - fft_execute_dft_3 @491 - fft_execute_dft_4 @492 - fft_execute_dft_5 @493 - fft_execute_dft_6 @494 - fft_execute_dft_7 @495 - fft_execute_dft_8 @496 - fft_execute_mixed_radix @497 - fft_execute_rader @498 - fft_execute_rader2 @499 - fft_execute_radix2 @500 - fft_is_radix2 @501 - fft_print_plan @502 - fft_print_plan_r2r_1d @503 - fft_print_plan_recursive @504 - fft_r2r_1d_run @505 - fft_reverse_index @506 - fft_run @507 - fft_shift @508 - fftfilt_cccf_create @509 - fftfilt_cccf_destroy @510 - fftfilt_cccf_execute @511 - fftfilt_cccf_get_length @512 - fftfilt_cccf_print @513 - fftfilt_cccf_reset @514 - fftfilt_cccf_set_scale @515 - fftfilt_crcf_create @516 - fftfilt_crcf_destroy @517 - fftfilt_crcf_execute @518 - fftfilt_crcf_get_length @519 - fftfilt_crcf_print @520 - fftfilt_crcf_reset @521 - fftfilt_crcf_set_scale @522 - fftfilt_rrrf_create @523 - fftfilt_rrrf_destroy @524 - fftfilt_rrrf_execute @525 - fftfilt_rrrf_get_length @526 - fftfilt_rrrf_print @527 - fftfilt_rrrf_reset @528 - fftfilt_rrrf_set_scale @529 - fir_group_delay @530 - firdecim_cccf_clear @531 - firdecim_cccf_create @532 - firdecim_cccf_create_prototype @533 - firdecim_cccf_create_rnyquist @534 - firdecim_cccf_destroy @535 - firdecim_cccf_execute @536 - firdecim_cccf_execute_block @537 - firdecim_cccf_print @538 - firdecim_crcf_clear @539 - firdecim_crcf_create @540 - firdecim_crcf_create_prototype @541 - firdecim_crcf_create_rnyquist @542 - firdecim_crcf_destroy @543 - firdecim_crcf_execute @544 - firdecim_crcf_execute_block @545 - firdecim_crcf_print @546 - firdecim_rrrf_clear @547 - firdecim_rrrf_create @548 - firdecim_rrrf_create_prototype @549 - firdecim_rrrf_create_rnyquist @550 - firdecim_rrrf_destroy @551 - firdecim_rrrf_execute @552 - firdecim_rrrf_execute_block @553 - firdecim_rrrf_print @554 - firdespm_compute_error @555 - firdespm_compute_interp @556 - firdespm_compute_taps @557 - firdespm_create @558 - firdespm_destroy @559 - firdespm_execute @560 - firdespm_iext_search @561 - firdespm_init_grid @562 - firdespm_is_search_complete @563 - firdespm_print @564 - firdespm_run @565 - firfarrow_crcf_create @566 - firfarrow_crcf_destroy @567 - firfarrow_crcf_execute @568 - firfarrow_crcf_execute_block @569 - firfarrow_crcf_freqresponse @570 - firfarrow_crcf_genpoly @571 - firfarrow_crcf_get_coefficients @572 - firfarrow_crcf_get_length @573 - firfarrow_crcf_groupdelay @574 - firfarrow_crcf_print @575 - firfarrow_crcf_push @576 - firfarrow_crcf_reset @577 - firfarrow_crcf_set_delay @578 - firfarrow_rrrf_create @579 - firfarrow_rrrf_destroy @580 - firfarrow_rrrf_execute @581 - firfarrow_rrrf_execute_block @582 - firfarrow_rrrf_freqresponse @583 - firfarrow_rrrf_genpoly @584 - firfarrow_rrrf_get_coefficients @585 - firfarrow_rrrf_get_length @586 - firfarrow_rrrf_groupdelay @587 - firfarrow_rrrf_print @588 - firfarrow_rrrf_push @589 - firfarrow_rrrf_reset @590 - firfarrow_rrrf_set_delay @591 - firfilt_cccf_create @592 - firfilt_cccf_create_kaiser @593 - firfilt_cccf_create_rnyquist @594 - firfilt_cccf_destroy @595 - firfilt_cccf_execute @596 - firfilt_cccf_execute_block @597 - firfilt_cccf_freqresponse @598 - firfilt_cccf_get_length @599 - firfilt_cccf_groupdelay @600 - firfilt_cccf_print @601 - firfilt_cccf_push @602 - firfilt_cccf_recreate @603 - firfilt_cccf_reset @604 - firfilt_cccf_set_scale @605 - firfilt_crcf_create @606 - firfilt_crcf_create_kaiser @607 - firfilt_crcf_create_rnyquist @608 - firfilt_crcf_destroy @609 - firfilt_crcf_execute @610 - firfilt_crcf_execute_block @611 - firfilt_crcf_freqresponse @612 - firfilt_crcf_get_length @613 - firfilt_crcf_groupdelay @614 - firfilt_crcf_print @615 - firfilt_crcf_push @616 - firfilt_crcf_recreate @617 - firfilt_crcf_reset @618 - firfilt_crcf_set_scale @619 - firfilt_rrrf_create @620 - firfilt_rrrf_create_kaiser @621 - firfilt_rrrf_create_rnyquist @622 - firfilt_rrrf_destroy @623 - firfilt_rrrf_execute @624 - firfilt_rrrf_execute_block @625 - firfilt_rrrf_freqresponse @626 - firfilt_rrrf_get_length @627 - firfilt_rrrf_groupdelay @628 - firfilt_rrrf_print @629 - firfilt_rrrf_push @630 - firfilt_rrrf_recreate @631 - firfilt_rrrf_reset @632 - firfilt_rrrf_set_scale @633 - firhilbf_c2r_execute @634 - firhilbf_create @635 - firhilbf_decim_execute @636 - firhilbf_destroy @637 - firhilbf_interp_execute @638 - firhilbf_print @639 - firhilbf_r2c_execute @640 - firhilbf_reset @641 - firinterp_cccf_create @642 - firinterp_cccf_create_nyquist @643 - firinterp_cccf_create_prototype @644 - firinterp_cccf_create_rnyquist @645 - firinterp_cccf_destroy @646 - firinterp_cccf_execute @647 - firinterp_cccf_execute_block @648 - firinterp_cccf_print @649 - firinterp_cccf_reset @650 - firinterp_crcf_create @651 - firinterp_crcf_create_nyquist @652 - firinterp_crcf_create_prototype @653 - firinterp_crcf_create_rnyquist @654 - firinterp_crcf_destroy @655 - firinterp_crcf_execute @656 - firinterp_crcf_execute_block @657 - firinterp_crcf_print @658 - firinterp_crcf_reset @659 - firinterp_rrrf_create @660 - firinterp_rrrf_create_nyquist @661 - firinterp_rrrf_create_prototype @662 - firinterp_rrrf_create_rnyquist @663 - firinterp_rrrf_destroy @664 - firinterp_rrrf_execute @665 - firinterp_rrrf_execute_block @666 - firinterp_rrrf_print @667 - firinterp_rrrf_reset @668 - firpfb_cccf_create @669 - firpfb_cccf_create_drnyquist @670 - firpfb_cccf_create_rnyquist @671 - firpfb_cccf_destroy @672 - firpfb_cccf_execute @673 - firpfb_cccf_print @674 - firpfb_cccf_push @675 - firpfb_cccf_recreate @676 - firpfb_cccf_reset @677 - firpfb_crcf_create @678 - firpfb_crcf_create_drnyquist @679 - firpfb_crcf_create_rnyquist @680 - firpfb_crcf_destroy @681 - firpfb_crcf_execute @682 - firpfb_crcf_print @683 - firpfb_crcf_push @684 - firpfb_crcf_recreate @685 - firpfb_crcf_reset @686 - firpfb_rrrf_create @687 - firpfb_rrrf_create_drnyquist @688 - firpfb_rrrf_create_rnyquist @689 - firpfb_rrrf_destroy @690 - firpfb_rrrf_execute @691 - firpfb_rrrf_print @692 - firpfb_rrrf_push @693 - firpfb_rrrf_recreate @694 - firpfb_rrrf_reset @695 - firpfbch2_crcf_create @696 - firpfbch2_crcf_create_kaiser @697 - firpfbch2_crcf_destroy @698 - firpfbch2_crcf_execute @699 - firpfbch2_crcf_execute_analyzer @700 - firpfbch2_crcf_execute_synthesizer @701 - firpfbch2_crcf_print @702 - firpfbch2_crcf_reset @703 - firpfbch_cccf_analyzer_execute @704 - firpfbch_cccf_analyzer_push @705 - firpfbch_cccf_analyzer_run @706 - firpfbch_cccf_create @707 - firpfbch_cccf_create_kaiser @708 - firpfbch_cccf_create_rnyquist @709 - firpfbch_cccf_destroy @710 - firpfbch_cccf_print @711 - firpfbch_cccf_reset @712 - firpfbch_cccf_synthesizer_execute @713 - firpfbch_crcf_analyzer_execute @714 - firpfbch_crcf_analyzer_push @715 - firpfbch_crcf_analyzer_run @716 - firpfbch_crcf_create @717 - firpfbch_crcf_create_kaiser @718 - firpfbch_crcf_create_rnyquist @719 - firpfbch_crcf_destroy @720 - firpfbch_crcf_print @721 - firpfbch_crcf_reset @722 - firpfbch_crcf_synthesizer_execute @723 - flexframegen_assemble @724 - flexframegen_create @725 - flexframegen_destroy @726 - flexframegen_encode_header @727 - flexframegen_getframelen @728 - flexframegen_getprops @729 - flexframegen_is_assembled @730 - flexframegen_modulate_header @731 - flexframegen_modulate_payload @732 - flexframegen_print @733 - flexframegen_reconfigure @734 - flexframegen_reset @735 - flexframegen_setprops @736 - flexframegen_write_header @737 - flexframegen_write_payload @738 - flexframegen_write_preamble @739 - flexframegen_write_samples @740 - flexframegen_write_tail @741 - flexframegenprops_init_default @742 - flexframesync_create @743 - flexframesync_debug_disable @744 - flexframesync_debug_enable @745 - flexframesync_debug_print @746 - flexframesync_decode_header @747 - flexframesync_decode_payload @748 - flexframesync_destroy @749 - flexframesync_execute @750 - flexframesync_execute_rxheader @751 - flexframesync_execute_rxpayload @752 - flexframesync_execute_rxpn @753 - flexframesync_execute_seekpn @754 - flexframesync_print @755 - flexframesync_pushpn @756 - flexframesync_reset @757 - flexframesync_syncpn @758 - flexframesync_update_symsync @759 - fpoly_bessel @760 - fpoly_bessel_roots @761 - fpoly_bessel_roots_orchard @762 - fpoly_bessel_roots_orchard_recursion @763 - framegen64_byte_to_syms @764 - framegen64_create @765 - framegen64_destroy @766 - framegen64_execute @767 - framegen64_print @768 - framesync64_create @769 - framesync64_debug_disable @770 - framesync64_debug_enable @771 - framesync64_debug_print @772 - framesync64_decode_payload @773 - framesync64_destroy @774 - framesync64_execute @775 - framesync64_execute_rxpayload @776 - framesync64_execute_rxpreamble @777 - framesync64_execute_seekpn @778 - framesync64_print @779 - framesync64_pushpn @780 - framesync64_reset @781 - framesync64_syncpn @782 - framesync64_update_symsync @783 - framesyncstats_default @784 DATA - framesyncstats_init_default @785 - framesyncstats_print @786 - freqdem_create @787 - freqdem_demodulate @788 - freqdem_demodulate_block @789 - freqdem_destroy @790 - freqdem_print @791 - freqdem_reset @792 - freqmod_create @793 - freqmod_destroy @794 - freqmod_modulate @795 - freqmod_modulate_block @796 - freqmod_print @797 - freqmod_reset @798 - gasearch_create @799 - gasearch_create_advanced @800 - gasearch_crossover @801 - gasearch_destroy @802 - gasearch_evaluate @803 - gasearch_evolve @804 - gasearch_getopt @805 - gasearch_mutate @806 - gasearch_print @807 - gasearch_rank @808 - gasearch_run @809 - gasearch_set_mutation_rate @810 - gasearch_set_population_size @811 - gmskdem_create @812 - gmskdem_debug_print @813 - gmskdem_demodulate @814 - gmskdem_destroy @815 - gmskdem_print @816 - gmskdem_reset @817 - gmskdem_set_eq_bw @818 - gmskframegen_assemble @819 - gmskframegen_create @820 - gmskframegen_destroy @821 - gmskframegen_encode_header @822 - gmskframegen_getframelen @823 - gmskframegen_print @824 - gmskframegen_reset @825 - gmskframegen_write_header @826 - gmskframegen_write_payload @827 - gmskframegen_write_preamble @828 - gmskframegen_write_samples @829 - gmskframegen_write_tail @830 - gmskframesync_create @831 - gmskframesync_debug_disable @832 - gmskframesync_debug_enable @833 - gmskframesync_debug_print @834 - gmskframesync_decode_header @835 - gmskframesync_destroy @836 - gmskframesync_execute @837 - gmskframesync_execute_detectframe @838 - gmskframesync_execute_rxheader @839 - gmskframesync_execute_rxpayload @840 - gmskframesync_execute_rxpreamble @841 - gmskframesync_print @842 - gmskframesync_pushpn @843 - gmskframesync_reset @844 - gmskframesync_syncpn @845 - gmskframesync_update_fi @846 - gmskframesync_update_symsync @847 - gmskmod_create @848 - gmskmod_destroy @849 - gmskmod_modulate @850 - gmskmod_print @851 - gmskmod_reset @852 - golay2412_Gt @853 DATA - golay2412_H @854 DATA - golay2412_P @855 DATA - golay2412_matrix_mul @856 - golay2412_parity_search @857 - gradsearch_create @858 - gradsearch_destroy @859 - gradsearch_execute @860 - gradsearch_gradient @861 - gradsearch_linesearch @862 - gradsearch_norm @863 - gradsearch_print @864 - gradsearch_step @865 - gray_decode @866 - gray_encode @867 - hamming @868 - hamming128_enc_gentab @869 DATA - hamming74_dec_gentab @870 DATA - hamming74_enc_gentab @871 DATA - hamming84_dec_gentab @872 DATA - hamming84_enc_gentab @873 DATA - hann @874 - icrandnf @875 - iir_group_delay @876 - iirdecim_cccf_create @877 - iirdecim_cccf_create_prototype @878 - iirdecim_cccf_destroy @879 - iirdecim_cccf_execute @880 - iirdecim_cccf_execute_block @881 - iirdecim_cccf_groupdelay @882 - iirdecim_cccf_print @883 - iirdecim_cccf_reset @884 - iirdecim_crcf_create @885 - iirdecim_crcf_create_prototype @886 - iirdecim_crcf_destroy @887 - iirdecim_crcf_execute @888 - iirdecim_crcf_execute_block @889 - iirdecim_crcf_groupdelay @890 - iirdecim_crcf_print @891 - iirdecim_crcf_reset @892 - iirdecim_rrrf_create @893 - iirdecim_rrrf_create_prototype @894 - iirdecim_rrrf_destroy @895 - iirdecim_rrrf_execute @896 - iirdecim_rrrf_execute_block @897 - iirdecim_rrrf_groupdelay @898 - iirdecim_rrrf_print @899 - iirdecim_rrrf_reset @900 - iirdes_dzpk2sosf @901 - iirdes_dzpk2tff @902 - iirdes_dzpk_lp2bp @903 - iirdes_dzpk_lp2hp @904 - iirdes_freqprewarp @905 - iirdes_isstable @906 - iirdes_pll_active_PI @907 - iirdes_pll_active_lag @908 - iirfilt_cccf_create @909 - iirfilt_cccf_create_dc_blocker @910 - iirfilt_cccf_create_differentiator @911 - iirfilt_cccf_create_integrator @912 - iirfilt_cccf_create_pll @913 - iirfilt_cccf_create_prototype @914 - iirfilt_cccf_create_sos @915 - iirfilt_cccf_destroy @916 - iirfilt_cccf_execute @917 - iirfilt_cccf_execute_block @918 - iirfilt_cccf_execute_norm @919 - iirfilt_cccf_execute_sos @920 - iirfilt_cccf_freqresponse @921 - iirfilt_cccf_get_length @922 - iirfilt_cccf_groupdelay @923 - iirfilt_cccf_print @924 - iirfilt_cccf_reset @925 - iirfilt_crcf_create @926 - iirfilt_crcf_create_dc_blocker @927 - iirfilt_crcf_create_differentiator @928 - iirfilt_crcf_create_integrator @929 - iirfilt_crcf_create_pll @930 - iirfilt_crcf_create_prototype @931 - iirfilt_crcf_create_sos @932 - iirfilt_crcf_destroy @933 - iirfilt_crcf_execute @934 - iirfilt_crcf_execute_block @935 - iirfilt_crcf_execute_norm @936 - iirfilt_crcf_execute_sos @937 - iirfilt_crcf_freqresponse @938 - iirfilt_crcf_get_length @939 - iirfilt_crcf_groupdelay @940 - iirfilt_crcf_print @941 - iirfilt_crcf_reset @942 - iirfilt_rrrf_create @943 - iirfilt_rrrf_create_dc_blocker @944 - iirfilt_rrrf_create_differentiator @945 - iirfilt_rrrf_create_integrator @946 - iirfilt_rrrf_create_pll @947 - iirfilt_rrrf_create_prototype @948 - iirfilt_rrrf_create_sos @949 - iirfilt_rrrf_destroy @950 - iirfilt_rrrf_execute @951 - iirfilt_rrrf_execute_block @952 - iirfilt_rrrf_execute_norm @953 - iirfilt_rrrf_execute_sos @954 - iirfilt_rrrf_freqresponse @955 - iirfilt_rrrf_get_length @956 - iirfilt_rrrf_groupdelay @957 - iirfilt_rrrf_print @958 - iirfilt_rrrf_reset @959 - iirfiltsos_cccf_create @960 - iirfiltsos_cccf_destroy @961 - iirfiltsos_cccf_execute @962 - iirfiltsos_cccf_execute_df1 @963 - iirfiltsos_cccf_execute_df2 @964 - iirfiltsos_cccf_groupdelay @965 - iirfiltsos_cccf_print @966 - iirfiltsos_cccf_reset @967 - iirfiltsos_cccf_set_coefficients @968 - iirfiltsos_crcf_create @969 - iirfiltsos_crcf_destroy @970 - iirfiltsos_crcf_execute @971 - iirfiltsos_crcf_execute_df1 @972 - iirfiltsos_crcf_execute_df2 @973 - iirfiltsos_crcf_groupdelay @974 - iirfiltsos_crcf_print @975 - iirfiltsos_crcf_reset @976 - iirfiltsos_crcf_set_coefficients @977 - iirfiltsos_rrrf_create @978 - iirfiltsos_rrrf_destroy @979 - iirfiltsos_rrrf_execute @980 - iirfiltsos_rrrf_execute_df1 @981 - iirfiltsos_rrrf_execute_df2 @982 - iirfiltsos_rrrf_groupdelay @983 - iirfiltsos_rrrf_print @984 - iirfiltsos_rrrf_reset @985 - iirfiltsos_rrrf_set_coefficients @986 - iirinterp_cccf_create @987 - iirinterp_cccf_create_prototype @988 - iirinterp_cccf_destroy @989 - iirinterp_cccf_execute @990 - iirinterp_cccf_execute_block @991 - iirinterp_cccf_groupdelay @992 - iirinterp_cccf_print @993 - iirinterp_cccf_reset @994 - iirinterp_crcf_create @995 - iirinterp_crcf_create_prototype @996 - iirinterp_crcf_destroy @997 - iirinterp_crcf_execute @998 - iirinterp_crcf_execute_block @999 - iirinterp_crcf_groupdelay @1000 - iirinterp_crcf_print @1001 - iirinterp_crcf_reset @1002 - iirinterp_rrrf_create @1003 - iirinterp_rrrf_create_prototype @1004 - iirinterp_rrrf_destroy @1005 - iirinterp_rrrf_execute @1006 - iirinterp_rrrf_execute_block @1007 - iirinterp_rrrf_groupdelay @1008 - iirinterp_rrrf_print @1009 - iirinterp_rrrf_reset @1010 - interleaver_create @1011 - interleaver_decode @1012 - interleaver_decode_soft @1013 - interleaver_destroy @1014 - interleaver_encode @1015 - interleaver_encode_soft @1016 - interleaver_permute @1017 - interleaver_permute_mask @1018 - interleaver_permute_mask_soft @1019 - interleaver_permute_soft @1020 - interleaver_print @1021 - interleaver_set_depth @1022 - kaiser @1023 - kaiser_beta_As @1024 - landenf @1025 - liquid_MarcumQ1f @1026 - liquid_MarcumQf @1027 - liquid_Qf @1028 - liquid_apsk128 @1029 DATA - liquid_apsk16 @1030 DATA - liquid_apsk256 @1031 DATA - liquid_apsk32 @1032 DATA - liquid_apsk4 @1033 DATA - liquid_apsk64 @1034 DATA - liquid_apsk8 @1035 DATA - liquid_asechf @1036 - liquid_bdotprod @1037 - liquid_besseli0f @1038 - liquid_besselif @1039 - liquid_besselj0f @1040 - liquid_besseljf @1041 - liquid_c_leading_zeros @1042 DATA - liquid_c_ones @1043 DATA - liquid_c_ones_mod2 @1044 DATA - liquid_cacosf @1045 - liquid_cargf_approx @1046 - liquid_casinf @1047 - liquid_catanf @1048 - liquid_cexpf @1049 - liquid_clogf @1050 - liquid_cosf @1051 - liquid_count_leading_zeros @1052 - liquid_count_ones @1053 - liquid_count_ones_mod2 @1054 - liquid_cplxpair @1055 - liquid_cplxpair_cleanup @1056 - liquid_csqrtf @1057 - liquid_expf @1058 - liquid_factor @1059 - liquid_factorialf @1060 - liquid_fft_estimate_method @1061 - liquid_filter_autocorr @1062 - liquid_filter_crosscorr @1063 - liquid_filter_energy @1064 - liquid_filter_isi @1065 - liquid_firdes_arkaiser @1066 - liquid_firdes_doppler @1067 - liquid_firdes_farcsech @1068 - liquid_firdes_farcsech_freqresponse @1069 - liquid_firdes_fexp @1070 - liquid_firdes_fexp_freqresponse @1071 - liquid_firdes_fnyquist @1072 - liquid_firdes_fsech @1073 - liquid_firdes_fsech_freqresponse @1074 - liquid_firdes_gmskrx @1075 - liquid_firdes_gmsktx @1076 - liquid_firdes_hM3 @1077 - liquid_firdes_kaiser @1078 - liquid_firdes_nyquist @1079 - liquid_firdes_rcos @1080 - liquid_firdes_rfarcsech @1081 - liquid_firdes_rfexp @1082 - liquid_firdes_rfsech @1083 - liquid_firdes_rkaiser @1084 - liquid_firdes_rkaiser_bisection @1085 - liquid_firdes_rkaiser_internal_isi @1086 - liquid_firdes_rkaiser_quadratic @1087 - liquid_firdes_rnyquist @1088 - liquid_firdes_rrcos @1089 - liquid_gammaf @1090 - liquid_getopt_str2crc @1091 - liquid_getopt_str2fec @1092 - liquid_getopt_str2firfilt @1093 - liquid_getopt_str2mod @1094 - liquid_iirdes @1095 - liquid_invgauss @1096 - liquid_is_prime @1097 - liquid_kbd @1098 - liquid_kbd_window @1099 - liquid_lbcircshift @1100 - liquid_lbshift @1101 - liquid_lcircshift @1102 - liquid_levinson @1103 - liquid_libversion @1104 - liquid_libversion_number @1105 - liquid_lnbesselif @1106 - liquid_lngammaf @1107 - liquid_lnlowergammaf @1108 - liquid_lnuppergammaf @1109 - liquid_logf @1110 - liquid_lowergammaf @1111 - liquid_lpc @1112 - liquid_lshift @1113 - liquid_modem_is_apsk @1114 - liquid_modem_is_ask @1115 - liquid_modem_is_dpsk @1116 - liquid_modem_is_psk @1117 - liquid_modem_is_qam @1118 - liquid_modpow @1119 - liquid_msb_index @1120 - liquid_multimodal @1121 - liquid_nchoosek @1122 - liquid_nextpow2 @1123 - liquid_pack_array @1124 - liquid_pack_bytes @1125 - liquid_pack_soft_bits @1126 - liquid_primitive_root @1127 - liquid_primitive_root_prime @1128 - liquid_print_bitstring @1129 - liquid_print_crc_schemes @1130 - liquid_print_fec_schemes @1131 - liquid_print_modulation_schemes @1132 - liquid_rbcircshift @1133 - liquid_rbshift @1134 - liquid_rcircshift @1135 - liquid_repack_bytes @1136 - liquid_reverse_byte @1137 - liquid_reverse_byte_gentab @1138 DATA - liquid_reverse_uint16 @1139 - liquid_reverse_uint24 @1140 - liquid_reverse_uint32 @1141 - liquid_rosenbrock @1142 - liquid_rshift @1143 - liquid_sincosf @1144 - liquid_sinf @1145 - liquid_spiral @1146 - liquid_sumsqcf @1147 - liquid_sumsqf @1148 - liquid_tanf @1149 - liquid_totient @1150 - liquid_unique_factor @1151 - liquid_unpack_array @1152 - liquid_unpack_bytes @1153 - liquid_unpack_soft_bits @1154 - liquid_unwrap_phase @1155 - liquid_unwrap_phase2 @1156 - liquid_uppergammaf @1157 - liquid_vectorcf_abs @1158 - liquid_vectorcf_add @1159 - liquid_vectorcf_addscalar @1160 - liquid_vectorcf_carg @1161 - liquid_vectorcf_cexpj @1162 - liquid_vectorcf_mul @1163 - liquid_vectorcf_mulscalar @1164 - liquid_vectorcf_norm @1165 - liquid_vectorcf_normalize @1166 - liquid_vectorf_abs @1167 - liquid_vectorf_add @1168 - liquid_vectorf_addscalar @1169 - liquid_vectorf_carg @1170 - liquid_vectorf_cexpj @1171 - liquid_vectorf_mul @1172 - liquid_vectorf_mulscalar @1173 - liquid_vectorf_norm @1174 - liquid_vectorf_normalize @1175 - liquid_version @1176 DATA - matrix_add @1177 - matrix_aug @1178 - matrix_cgsolve @1179 - matrix_chol @1180 - matrix_det @1181 - matrix_det2x2 @1182 - matrix_div @1183 - matrix_eye @1184 - matrix_gjelim @1185 - matrix_gramschmidt @1186 - matrix_hermitian @1187 - matrix_hermitian_mul @1188 - matrix_inv @1189 - matrix_linsolve @1190 - matrix_ludecomp_crout @1191 - matrix_ludecomp_doolittle @1192 - matrix_mul @1193 - matrix_mul_hermitian @1194 - matrix_mul_transpose @1195 - matrix_ones @1196 - matrix_pdiv @1197 - matrix_pivot @1198 - matrix_pmul @1199 - matrix_print @1200 - matrix_proj @1201 - matrix_qrdecomp_gramschmidt @1202 - matrix_sub @1203 - matrix_swaprows @1204 - matrix_trans @1205 - matrix_transpose_mul @1206 - matrix_zeros @1207 - matrixc_add @1208 - matrixc_aug @1209 - matrixc_cgsolve @1210 - matrixc_chol @1211 - matrixc_det @1212 - matrixc_det2x2 @1213 - matrixc_div @1214 - matrixc_eye @1215 - matrixc_gjelim @1216 - matrixc_gramschmidt @1217 - matrixc_hermitian @1218 - matrixc_hermitian_mul @1219 - matrixc_inv @1220 - matrixc_linsolve @1221 - matrixc_ludecomp_crout @1222 - matrixc_ludecomp_doolittle @1223 - matrixc_mul @1224 - matrixc_mul_hermitian @1225 - matrixc_mul_transpose @1226 - matrixc_ones @1227 - matrixc_pdiv @1228 - matrixc_pivot @1229 - matrixc_pmul @1230 - matrixc_print @1231 - matrixc_proj @1232 - matrixc_qrdecomp_gramschmidt @1233 - matrixc_sub @1234 - matrixc_swaprows @1235 - matrixc_trans @1236 - matrixc_transpose_mul @1237 - matrixc_zeros @1238 - matrixcf_add @1239 - matrixcf_aug @1240 - matrixcf_cgsolve @1241 - matrixcf_chol @1242 - matrixcf_det @1243 - matrixcf_det2x2 @1244 - matrixcf_div @1245 - matrixcf_eye @1246 - matrixcf_gjelim @1247 - matrixcf_gramschmidt @1248 - matrixcf_hermitian @1249 - matrixcf_hermitian_mul @1250 - matrixcf_inv @1251 - matrixcf_linsolve @1252 - matrixcf_ludecomp_crout @1253 - matrixcf_ludecomp_doolittle @1254 - matrixcf_mul @1255 - matrixcf_mul_hermitian @1256 - matrixcf_mul_transpose @1257 - matrixcf_ones @1258 - matrixcf_pdiv @1259 - matrixcf_pivot @1260 - matrixcf_pmul @1261 - matrixcf_print @1262 - matrixcf_proj @1263 - matrixcf_qrdecomp_gramschmidt @1264 - matrixcf_sub @1265 - matrixcf_swaprows @1266 - matrixcf_trans @1267 - matrixcf_transpose_mul @1268 - matrixcf_zeros @1269 - matrixf_add @1270 - matrixf_aug @1271 - matrixf_cgsolve @1272 - matrixf_chol @1273 - matrixf_det @1274 - matrixf_det2x2 @1275 - matrixf_div @1276 - matrixf_eye @1277 - matrixf_gjelim @1278 - matrixf_gramschmidt @1279 - matrixf_hermitian @1280 - matrixf_hermitian_mul @1281 - matrixf_inv @1282 - matrixf_linsolve @1283 - matrixf_ludecomp_crout @1284 - matrixf_ludecomp_doolittle @1285 - matrixf_mul @1286 - matrixf_mul_hermitian @1287 - matrixf_mul_transpose @1288 - matrixf_ones @1289 - matrixf_pdiv @1290 - matrixf_pivot @1291 - matrixf_pmul @1292 - matrixf_print @1293 - matrixf_proj @1294 - matrixf_qrdecomp_gramschmidt @1295 - matrixf_sub @1296 - matrixf_swaprows @1297 - matrixf_trans @1298 - matrixf_transpose_mul @1299 - matrixf_zeros @1300 - modem_arb128opt @1301 DATA - modem_arb16opt @1302 DATA - modem_arb256opt @1303 DATA - modem_arb32opt @1304 DATA - modem_arb64opt @1305 DATA - modem_arb_V29 @1306 DATA - modem_arb_balance_iq @1307 - modem_arb_init @1308 - modem_arb_init_file @1309 - modem_arb_scale @1310 - modem_arb_sqam128 @1311 DATA - modem_arb_sqam32 @1312 DATA - modem_arb_vt64 @1313 DATA - modem_create @1314 - modem_create_V29 @1315 - modem_create_apsk @1316 - modem_create_arb @1317 - modem_create_arb128opt @1318 - modem_create_arb16opt @1319 - modem_create_arb256opt @1320 - modem_create_arb32opt @1321 - modem_create_arb64opt @1322 - modem_create_arb64vt @1323 - modem_create_arbitrary @1324 - modem_create_ask @1325 - modem_create_bpsk @1326 - modem_create_dpsk @1327 - modem_create_ook @1328 - modem_create_psk @1329 - modem_create_qam @1330 - modem_create_qpsk @1331 - modem_create_sqam128 @1332 - modem_create_sqam32 @1333 - modem_demodsoft_gentab @1334 - modem_demodulate @1335 - modem_demodulate_apsk @1336 - modem_demodulate_arb @1337 - modem_demodulate_ask @1338 - modem_demodulate_bpsk @1339 - modem_demodulate_dpsk @1340 - modem_demodulate_linear_array @1341 - modem_demodulate_linear_array_ref @1342 - modem_demodulate_ook @1343 - modem_demodulate_psk @1344 - modem_demodulate_qam @1345 - modem_demodulate_qpsk @1346 - modem_demodulate_soft @1347 - modem_demodulate_soft_arb @1348 - modem_demodulate_soft_bpsk @1349 - modem_demodulate_soft_qpsk @1350 - modem_demodulate_soft_table @1351 - modem_demodulate_sqam128 @1352 - modem_demodulate_sqam32 @1353 - modem_destroy @1354 - modem_gen_rand_sym @1355 - modem_get_bps @1356 - modem_get_demodulator_evm @1357 - modem_get_demodulator_phase_error @1358 - modem_get_demodulator_sample @1359 - modem_init @1360 - modem_init_map @1361 - modem_modulate @1362 - modem_modulate_apsk @1363 - modem_modulate_arb @1364 - modem_modulate_ask @1365 - modem_modulate_bpsk @1366 - modem_modulate_dpsk @1367 - modem_modulate_map @1368 - modem_modulate_ook @1369 - modem_modulate_psk @1370 - modem_modulate_qam @1371 - modem_modulate_qpsk @1372 - modem_modulate_sqam128 @1373 - modem_modulate_sqam32 @1374 - modem_print @1375 - modem_recreate @1376 - modem_reset @1377 - modulation_types @1378 DATA - msequence_advance @1379 - msequence_create @1380 - msequence_create_default @1381 - msequence_create_genpoly @1382 - msequence_default @1383 DATA - msequence_destroy @1384 - msequence_generate_symbol @1385 - msequence_get_length @1386 - msequence_get_state @1387 - msequence_print @1388 - msequence_reset @1389 - msequence_set_state @1390 - msresamp2_cccf_create @1391 - msresamp2_cccf_decim_execute @1392 - msresamp2_cccf_destroy @1393 - msresamp2_cccf_execute @1394 - msresamp2_cccf_get_delay @1395 - msresamp2_cccf_interp_execute @1396 - msresamp2_cccf_print @1397 - msresamp2_cccf_reset @1398 - msresamp2_crcf_create @1399 - msresamp2_crcf_decim_execute @1400 - msresamp2_crcf_destroy @1401 - msresamp2_crcf_execute @1402 - msresamp2_crcf_get_delay @1403 - msresamp2_crcf_interp_execute @1404 - msresamp2_crcf_print @1405 - msresamp2_crcf_reset @1406 - msresamp2_rrrf_create @1407 - msresamp2_rrrf_decim_execute @1408 - msresamp2_rrrf_destroy @1409 - msresamp2_rrrf_execute @1410 - msresamp2_rrrf_get_delay @1411 - msresamp2_rrrf_interp_execute @1412 - msresamp2_rrrf_print @1413 - msresamp2_rrrf_reset @1414 - msresamp_cccf_create @1415 - msresamp_cccf_decim_execute @1416 - msresamp_cccf_destroy @1417 - msresamp_cccf_execute @1418 - msresamp_cccf_get_delay @1419 - msresamp_cccf_interp_execute @1420 - msresamp_cccf_print @1421 - msresamp_cccf_reset @1422 - msresamp_crcf_create @1423 - msresamp_crcf_decim_execute @1424 - msresamp_crcf_destroy @1425 - msresamp_crcf_execute @1426 - msresamp_crcf_get_delay @1427 - msresamp_crcf_interp_execute @1428 - msresamp_crcf_print @1429 - msresamp_crcf_reset @1430 - msresamp_rrrf_create @1431 - msresamp_rrrf_decim_execute @1432 - msresamp_rrrf_destroy @1433 - msresamp_rrrf_execute @1434 - msresamp_rrrf_get_delay @1435 - msresamp_rrrf_interp_execute @1436 - msresamp_rrrf_print @1437 - msresamp_rrrf_reset @1438 - nco_crcf_adjust_frequency @1439 - nco_crcf_adjust_phase @1440 - nco_crcf_cexpf @1441 - nco_crcf_compute_sincos_nco @1442 - nco_crcf_compute_sincos_vco @1443 - nco_crcf_constrain_frequency @1444 - nco_crcf_constrain_phase @1445 - nco_crcf_cos @1446 - nco_crcf_create @1447 - nco_crcf_destroy @1448 - nco_crcf_get_frequency @1449 - nco_crcf_get_phase @1450 - nco_crcf_mix_block_down @1451 - nco_crcf_mix_block_up @1452 - nco_crcf_mix_down @1453 - nco_crcf_mix_up @1454 - nco_crcf_pll_reset @1455 - nco_crcf_pll_set_bandwidth @1456 - nco_crcf_pll_step @1457 - nco_crcf_reset @1458 - nco_crcf_set_frequency @1459 - nco_crcf_set_phase @1460 - nco_crcf_sin @1461 - nco_crcf_sincos @1462 - nco_crcf_step @1463 - ofdmflexframegen_assemble @1464 - ofdmflexframegen_create @1465 - ofdmflexframegen_destroy @1466 - ofdmflexframegen_encode_header @1467 - ofdmflexframegen_getframelen @1468 - ofdmflexframegen_getprops @1469 - ofdmflexframegen_is_assembled @1470 - ofdmflexframegen_modulate_header @1471 - ofdmflexframegen_print @1472 - ofdmflexframegen_reconfigure @1473 - ofdmflexframegen_reset @1474 - ofdmflexframegen_setprops @1475 - ofdmflexframegen_write_S0a @1476 - ofdmflexframegen_write_S0b @1477 - ofdmflexframegen_write_S1 @1478 - ofdmflexframegen_write_header @1479 - ofdmflexframegen_write_payload @1480 - ofdmflexframegen_writesymbol @1481 - ofdmflexframegenprops_init_default @1482 - ofdmflexframesync_create @1483 - ofdmflexframesync_debug_disable @1484 - ofdmflexframesync_debug_enable @1485 - ofdmflexframesync_debug_print @1486 - ofdmflexframesync_decode_header @1487 - ofdmflexframesync_destroy @1488 - ofdmflexframesync_execute @1489 - ofdmflexframesync_get_cfo @1490 - ofdmflexframesync_get_rssi @1491 - ofdmflexframesync_internal_callback @1492 - ofdmflexframesync_print @1493 - ofdmflexframesync_reset @1494 - ofdmflexframesync_rxheader @1495 - ofdmflexframesync_rxpayload @1496 - ofdmframe_init_S0 @1497 - ofdmframe_init_S1 @1498 - ofdmframe_init_default_sctype @1499 - ofdmframe_print_sctype @1500 - ofdmframe_validate_sctype @1501 - ofdmframegen_create @1502 - ofdmframegen_destroy @1503 - ofdmframegen_gensymbol @1504 - ofdmframegen_print @1505 - ofdmframegen_reset @1506 - ofdmframegen_write_S0a @1507 - ofdmframegen_write_S0b @1508 - ofdmframegen_write_S1 @1509 - ofdmframegen_writesymbol @1510 - ofdmframegen_writetail @1511 - ofdmframesync_S0_metrics @1512 - ofdmframesync_create @1513 - ofdmframesync_debug_disable @1514 - ofdmframesync_debug_enable @1515 - ofdmframesync_debug_print @1516 - ofdmframesync_destroy @1517 - ofdmframesync_estimate_eqgain @1518 - ofdmframesync_estimate_eqgain_poly @1519 - ofdmframesync_estimate_gain_S0 @1520 - ofdmframesync_estimate_gain_S1 @1521 - ofdmframesync_execute @1522 - ofdmframesync_execute_S0a @1523 - ofdmframesync_execute_S0b @1524 - ofdmframesync_execute_S1 @1525 - ofdmframesync_execute_rxsymbols @1526 - ofdmframesync_execute_seekplcp @1527 - ofdmframesync_get_cfo @1528 - ofdmframesync_get_rssi @1529 - ofdmframesync_print @1530 - ofdmframesync_reset @1531 - ofdmframesync_rxsymbol @1532 - optim_sort @1533 - optim_threshold_switch @1534 - packetizer_compute_dec_msg_len @1535 - packetizer_compute_enc_msg_len @1536 - packetizer_create @1537 - packetizer_decode @1538 - packetizer_decode_soft @1539 - packetizer_destroy @1540 - packetizer_encode @1541 - packetizer_get_dec_msg_len @1542 - packetizer_get_enc_msg_len @1543 - packetizer_print @1544 - packetizer_realloc_buffers @1545 - packetizer_recreate @1546 - packetizer_set_scheme @1547 - poly_expandbinomial @1548 - poly_expandbinomial_pm @1549 - poly_expandroots @1550 - poly_expandroots2 @1551 - poly_findroots @1552 - poly_findroots_bairstow @1553 - poly_findroots_bairstow_recursion @1554 - poly_findroots_durandkerner @1555 - poly_fit @1556 - poly_fit_lagrange @1557 - poly_fit_lagrange_barycentric @1558 - poly_interp_lagrange @1559 - poly_mul @1560 - poly_val @1561 - poly_val_lagrange_barycentric @1562 - polyc_expandbinomial @1563 - polyc_expandbinomial_pm @1564 - polyc_expandroots @1565 - polyc_expandroots2 @1566 - polyc_findroots @1567 - polyc_findroots_bairstow @1568 - polyc_findroots_bairstow_recursion @1569 - polyc_findroots_durandkerner @1570 - polyc_fit @1571 - polyc_fit_lagrange @1572 - polyc_fit_lagrange_barycentric @1573 - polyc_interp_lagrange @1574 - polyc_mul @1575 - polyc_val @1576 - polyc_val_lagrange_barycentric @1577 - polycf_expandbinomial @1578 - polycf_expandbinomial_pm @1579 - polycf_expandroots @1580 - polycf_expandroots2 @1581 - polycf_findroots @1582 - polycf_findroots_bairstow @1583 - polycf_findroots_bairstow_recursion @1584 - polycf_findroots_durandkerner @1585 - polycf_fit @1586 - polycf_fit_lagrange @1587 - polycf_fit_lagrange_barycentric @1588 - polycf_interp_lagrange @1589 - polycf_mul @1590 - polycf_val @1591 - polycf_val_lagrange_barycentric @1592 - polyf_expandbinomial @1593 - polyf_expandbinomial_pm @1594 - polyf_expandroots @1595 - polyf_expandroots2 @1596 - polyf_findroots @1597 - polyf_findroots_bairstow @1598 - polyf_findroots_bairstow_recursion @1599 - polyf_findroots_durandkerner @1600 - polyf_fit @1601 - polyf_fit_lagrange @1602 - polyf_fit_lagrange_barycentric @1603 - polyf_interp_lagrange @1604 - polyf_mul @1605 - polyf_val @1606 - polyf_val_lagrange_barycentric @1607 - presync_cccf_correlate @1608 - presync_cccf_correlatex @1609 - presync_cccf_create @1610 - presync_cccf_destroy @1611 - presync_cccf_print @1612 - presync_cccf_push @1613 - presync_cccf_reset @1614 - qnsearch_compute_Hessian @1615 - qnsearch_compute_gradient @1616 - qnsearch_create @1617 - qnsearch_destroy @1618 - qnsearch_normalize_gradient @1619 - qnsearch_print @1620 - qnsearch_reset @1621 - qnsearch_run @1622 - qnsearch_step @1623 - quantize_adc @1624 - quantize_dac @1625 - quantizercf_create @1626 - quantizercf_destroy @1627 - quantizercf_execute_adc @1628 - quantizercf_execute_dac @1629 - quantizercf_print @1630 - quantizerf_create @1631 - quantizerf_destroy @1632 - quantizerf_execute_adc @1633 - quantizerf_execute_dac @1634 - quantizerf_print @1635 - randexpf @1636 - randexpf_cdf @1637 - randexpf_pdf @1638 - randf @1639 - randf_cdf @1640 - randf_pdf @1641 - randgammaf @1642 - randgammaf_cdf @1643 - randgammaf_delta @1644 - randgammaf_pdf @1645 - randnakmf @1646 - randnakmf_cdf @1647 - randnakmf_pdf @1648 - randnf @1649 - randnf_cdf @1650 - randnf_pdf @1651 - randricekf @1652 - randricekf_cdf @1653 - randricekf_pdf @1654 - randweibf @1655 - randweibf_cdf @1656 - randweibf_pdf @1657 - resamp2_cccf_analyzer_execute @1658 - resamp2_cccf_clear @1659 - resamp2_cccf_create @1660 - resamp2_cccf_decim_execute @1661 - resamp2_cccf_destroy @1662 - resamp2_cccf_filter_execute @1663 - resamp2_cccf_get_delay @1664 - resamp2_cccf_interp_execute @1665 - resamp2_cccf_print @1666 - resamp2_cccf_recreate @1667 - resamp2_cccf_synthesizer_execute @1668 - resamp2_crcf_analyzer_execute @1669 - resamp2_crcf_clear @1670 - resamp2_crcf_create @1671 - resamp2_crcf_decim_execute @1672 - resamp2_crcf_destroy @1673 - resamp2_crcf_filter_execute @1674 - resamp2_crcf_get_delay @1675 - resamp2_crcf_interp_execute @1676 - resamp2_crcf_print @1677 - resamp2_crcf_recreate @1678 - resamp2_crcf_synthesizer_execute @1679 - resamp2_rrrf_analyzer_execute @1680 - resamp2_rrrf_clear @1681 - resamp2_rrrf_create @1682 - resamp2_rrrf_decim_execute @1683 - resamp2_rrrf_destroy @1684 - resamp2_rrrf_filter_execute @1685 - resamp2_rrrf_get_delay @1686 - resamp2_rrrf_interp_execute @1687 - resamp2_rrrf_print @1688 - resamp2_rrrf_recreate @1689 - resamp2_rrrf_synthesizer_execute @1690 - resamp_cccf_create @1691 - resamp_cccf_destroy @1692 - resamp_cccf_execute @1693 - resamp_cccf_execute_block @1694 - resamp_cccf_get_delay @1695 - resamp_cccf_print @1696 - resamp_cccf_reset @1697 - resamp_cccf_setrate @1698 - resamp_cccf_update_timing_state @1699 - resamp_crcf_create @1700 - resamp_crcf_destroy @1701 - resamp_crcf_execute @1702 - resamp_crcf_execute_block @1703 - resamp_crcf_get_delay @1704 - resamp_crcf_print @1705 - resamp_crcf_reset @1706 - resamp_crcf_setrate @1707 - resamp_crcf_update_timing_state @1708 - resamp_rrrf_create @1709 - resamp_rrrf_destroy @1710 - resamp_rrrf_execute @1711 - resamp_rrrf_execute_block @1712 - resamp_rrrf_get_delay @1713 - resamp_rrrf_print @1714 - resamp_rrrf_reset @1715 - resamp_rrrf_setrate @1716 - resamp_rrrf_update_timing_state @1717 - rkaiser_approximate_rho @1718 - scramble_data @1719 - secded2216_P @1720 DATA - secded2216_syndrome_w1 @1721 DATA - secded3932_P @1722 DATA - secded3932_syndrome_w1 @1723 DATA - secded7264_P @1724 DATA - secded7264_syndrome_w1 @1725 DATA - sincf @1726 - smatrix_indexsearch @1727 - smatrixb_clear @1728 - smatrixb_create @1729 - smatrixb_create_array @1730 - smatrixb_delete @1731 - smatrixb_destroy @1732 - smatrixb_eye @1733 - smatrixb_get @1734 - smatrixb_insert @1735 - smatrixb_isset @1736 - smatrixb_mul @1737 - smatrixb_mulf @1738 - smatrixb_print @1739 - smatrixb_print_expanded @1740 - smatrixb_reset @1741 - smatrixb_reset_max_mlist @1742 - smatrixb_reset_max_nlist @1743 - smatrixb_set @1744 - smatrixb_size @1745 - smatrixb_vmul @1746 - smatrixb_vmulf @1747 - smatrixf_clear @1748 - smatrixf_create @1749 - smatrixf_create_array @1750 - smatrixf_delete @1751 - smatrixf_destroy @1752 - smatrixf_eye @1753 - smatrixf_get @1754 - smatrixf_insert @1755 - smatrixf_isset @1756 - smatrixf_mul @1757 - smatrixf_print @1758 - smatrixf_print_expanded @1759 - smatrixf_reset @1760 - smatrixf_reset_max_mlist @1761 - smatrixf_reset_max_nlist @1762 - smatrixf_set @1763 - smatrixf_size @1764 - smatrixf_vmul @1765 - smatrixi_clear @1766 - smatrixi_create @1767 - smatrixi_create_array @1768 - smatrixi_delete @1769 - smatrixi_destroy @1770 - smatrixi_eye @1771 - smatrixi_get @1772 - smatrixi_insert @1773 - smatrixi_isset @1774 - smatrixi_mul @1775 - smatrixi_print @1776 - smatrixi_print_expanded @1777 - smatrixi_reset @1778 - smatrixi_reset_max_mlist @1779 - smatrixi_reset_max_nlist @1780 - smatrixi_set @1781 - smatrixi_size @1782 - smatrixi_vmul @1783 - spgramcf_accumulate_psd @1784 - spgramcf_create @1785 - spgramcf_create_kaiser @1786 - spgramcf_destroy @1787 - spgramcf_estimate_psd @1788 - spgramcf_execute @1789 - spgramcf_push @1790 - spgramcf_reset @1791 - spgramcf_write_accumulation @1792 - spgramf_accumulate_psd @1793 - spgramf_create @1794 - spgramf_create_kaiser @1795 - spgramf_destroy @1796 - spgramf_estimate_psd @1797 - spgramf_execute @1798 - spgramf_push @1799 - spgramf_reset @1800 - spgramf_write_accumulation @1801 - sumproduct_phi @1802 - symsync_crcf_advance_internal_loop @1803 - symsync_crcf_create @1804 - symsync_crcf_create_kaiser @1805 - symsync_crcf_create_rnyquist @1806 - symsync_crcf_destroy @1807 - symsync_crcf_execute @1808 - symsync_crcf_get_tau @1809 - symsync_crcf_lock @1810 - symsync_crcf_output_debug_file @1811 - symsync_crcf_print @1812 - symsync_crcf_reset @1813 - symsync_crcf_set_lf_bw @1814 - symsync_crcf_set_output_rate @1815 - symsync_crcf_setrate @1816 - symsync_crcf_step @1817 - symsync_crcf_unlock @1818 - symsync_rrrf_advance_internal_loop @1819 - symsync_rrrf_create @1820 - symsync_rrrf_create_kaiser @1821 - symsync_rrrf_create_rnyquist @1822 - symsync_rrrf_destroy @1823 - symsync_rrrf_execute @1824 - symsync_rrrf_get_tau @1825 - symsync_rrrf_lock @1826 - symsync_rrrf_output_debug_file @1827 - symsync_rrrf_print @1828 - symsync_rrrf_reset @1829 - symsync_rrrf_set_lf_bw @1830 - symsync_rrrf_set_output_rate @1831 - symsync_rrrf_setrate @1832 - symsync_rrrf_step @1833 - symsync_rrrf_unlock @1834 - unscramble_data @1835 - unscramble_data_soft @1836 - wdelaycf_clear @1837 - wdelaycf_create @1838 - wdelaycf_destroy @1839 - wdelaycf_print @1840 - wdelaycf_push @1841 - wdelaycf_read @1842 - wdelaycf_recreate @1843 - wdelayf_clear @1844 - wdelayf_create @1845 - wdelayf_destroy @1846 - wdelayf_print @1847 - wdelayf_push @1848 - wdelayf_read @1849 - wdelayf_recreate @1850 - windowcf_clear @1851 - windowcf_create @1852 - windowcf_debug_print @1853 - windowcf_destroy @1854 - windowcf_index @1855 - windowcf_print @1856 - windowcf_push @1857 - windowcf_read @1858 - windowcf_recreate @1859 - windowcf_write @1860 - windowf_clear @1861 - windowf_create @1862 - windowf_debug_print @1863 - windowf_destroy @1864 - windowf_index @1865 - windowf_print @1866 - windowf_push @1867 - windowf_read @1868 - windowf_recreate @1869 - windowf_write @1870 + ampmodem_demodulate_block @38 + ampmodem_destroy @39 + ampmodem_modulate @40 + ampmodem_modulate_block @41 + ampmodem_print @42 + ampmodem_reset @43 + apsk128_map @44 DATA + apsk128_num_levels @45 DATA + apsk128_p @46 DATA + apsk128_phi @47 DATA + apsk128_r @48 DATA + apsk128_r_slicer @49 DATA + apsk16_map @50 DATA + apsk16_num_levels @51 DATA + apsk16_p @52 DATA + apsk16_phi @53 DATA + apsk16_r @54 DATA + apsk16_r_slicer @55 DATA + apsk256_map @56 DATA + apsk256_num_levels @57 DATA + apsk256_p @58 DATA + apsk256_phi @59 DATA + apsk256_r @60 DATA + apsk256_r_slicer @61 DATA + apsk32_map @62 DATA + apsk32_num_levels @63 DATA + apsk32_p @64 DATA + apsk32_phi @65 DATA + apsk32_r @66 DATA + apsk32_r_slicer @67 DATA + apsk4_map @68 DATA + apsk4_num_levels @69 DATA + apsk4_p @70 DATA + apsk4_phi @71 DATA + apsk4_r @72 DATA + apsk4_r_slicer @73 DATA + apsk64_map @74 DATA + apsk64_num_levels @75 DATA + apsk64_p @76 DATA + apsk64_phi @77 DATA + apsk64_r @78 DATA + apsk64_r_slicer @79 DATA + apsk8_map @80 DATA + apsk8_num_levels @81 DATA + apsk8_p @82 DATA + apsk8_phi @83 DATA + apsk8_r @84 DATA + apsk8_r_slicer @85 DATA + asgramcf_create @86 + asgramcf_destroy @87 + asgramcf_execute @88 + asgramcf_print @89 + asgramcf_push @90 + asgramcf_reset @91 + asgramcf_set_scale @92 + asgramcf_write @93 + asgramf_create @94 + asgramf_destroy @95 + asgramf_execute @96 + asgramf_print @97 + asgramf_push @98 + asgramf_reset @99 + asgramf_set_scale @100 + asgramf_write @101 + autocorr_cccf_create @102 + autocorr_cccf_destroy @103 + autocorr_cccf_execute @104 + autocorr_cccf_execute_block @105 + autocorr_cccf_get_energy @106 + autocorr_cccf_print @107 + autocorr_cccf_push @108 + autocorr_cccf_reset @109 + autocorr_rrrf_create @110 + autocorr_rrrf_destroy @111 + autocorr_rrrf_execute @112 + autocorr_rrrf_execute_block @113 + autocorr_rrrf_get_energy @114 + autocorr_rrrf_print @115 + autocorr_rrrf_push @116 + autocorr_rrrf_reset @117 + awgn @118 + bessel_azpkf @119 + bilinear_zpkf @120 + blackmanharris @121 + blackmanharris7 @122 + bpacketgen_assemble_header @123 + bpacketgen_assemble_pnsequence @124 + bpacketgen_compute_packet_len @125 + bpacketgen_create @126 + bpacketgen_destroy @127 + bpacketgen_encode @128 + bpacketgen_get_packet_len @129 + bpacketgen_print @130 + bpacketgen_recreate @131 + bpacketsync_assemble_pnsequence @132 + bpacketsync_create @133 + bpacketsync_decode_header @134 + bpacketsync_decode_payload @135 + bpacketsync_destroy @136 + bpacketsync_execute @137 + bpacketsync_execute_bit @138 + bpacketsync_execute_byte @139 + bpacketsync_execute_rxheader @140 + bpacketsync_execute_rxpayload @141 + bpacketsync_execute_seekpn @142 + bpacketsync_execute_sym @143 + bpacketsync_print @144 + bpacketsync_reconfig @145 + bpacketsync_reset @146 + bpresync_cccf_correlate @147 + bpresync_cccf_correlatex @148 + bpresync_cccf_create @149 + bpresync_cccf_destroy @150 + bpresync_cccf_print @151 + bpresync_cccf_push @152 + bpresync_cccf_reset @153 + bsequence_accumulate @154 + bsequence_add @155 + bsequence_circshift @156 + bsequence_correlate @157 + bsequence_create @158 + bsequence_create_ccodes @159 + bsequence_destroy @160 + bsequence_get_length @161 + bsequence_index @162 + bsequence_init @163 + bsequence_init_msequence @164 + bsequence_mul @165 + bsequence_print @166 + bsequence_push @167 + bsequence_reset @168 + bsync_cccf_correlate @169 + bsync_cccf_create @170 + bsync_cccf_create_msequence @171 + bsync_cccf_destroy @172 + bsync_cccf_print @173 + bsync_crcf_correlate @174 + bsync_crcf_create @175 + bsync_crcf_create_msequence @176 + bsync_crcf_destroy @177 + bsync_crcf_print @178 + bsync_rrrf_correlate @179 + bsync_rrrf_create @180 + bsync_rrrf_create_msequence @181 + bsync_rrrf_destroy @182 + bsync_rrrf_print @183 + butter_azpkf @184 + cawgn @185 + cbuffercf_create @186 + cbuffercf_create_max @187 + cbuffercf_debug_print @188 + cbuffercf_destroy @189 + cbuffercf_is_full @190 + cbuffercf_linearize @191 + cbuffercf_max_read @192 + cbuffercf_max_size @193 + cbuffercf_pop @194 + cbuffercf_print @195 + cbuffercf_push @196 + cbuffercf_read @197 + cbuffercf_release @198 + cbuffercf_reset @199 + cbuffercf_size @200 + cbuffercf_space_available @201 + cbuffercf_write @202 + cbufferf_create @203 + cbufferf_create_max @204 + cbufferf_debug_print @205 + cbufferf_destroy @206 + cbufferf_is_full @207 + cbufferf_linearize @208 + cbufferf_max_read @209 + cbufferf_max_size @210 + cbufferf_pop @211 + cbufferf_print @212 + cbufferf_push @213 + cbufferf_read @214 + cbufferf_release @215 + cbufferf_reset @216 + cbufferf_size @217 + cbufferf_space_available @218 + cbufferf_write @219 + channel_cccf_add_awgn @220 + channel_cccf_add_carrier_offset @221 + channel_cccf_add_multipath @222 + channel_cccf_add_shadowing @223 + channel_cccf_create @224 + channel_cccf_destroy @225 + channel_cccf_execute @226 + channel_cccf_execute_block @227 + channel_cccf_print @228 + cheby1_azpkf @229 + cheby2_azpkf @230 + checksum_generate_key @231 + chromosome_copy @232 + chromosome_create @233 + chromosome_create_basic @234 + chromosome_create_clone @235 + chromosome_crossover @236 + chromosome_destroy @237 + chromosome_get_num_traits @238 + chromosome_init @239 + chromosome_init_random @240 + chromosome_initf @241 + chromosome_mutate @242 + chromosome_print @243 + chromosome_printf @244 + chromosome_reset @245 + chromosome_value @246 + chromosome_valuef @247 + compress_cf_mulaw @248 + compress_mulaw @249 + count_bit_errors @250 + count_bit_errors_array @251 + cpfskdem_create @252 + cpfskdem_demodulate @253 + cpfskdem_demodulate_coherent @254 + cpfskdem_demodulate_noncoherent @255 + cpfskdem_destroy @256 + cpfskdem_get_delay @257 + cpfskdem_init_coherent @258 + cpfskdem_init_noncoherent @259 + cpfskdem_print @260 + cpfskdem_reset @261 + cpfskmod_create @262 + cpfskmod_destroy @263 + cpfskmod_firdes @264 + cpfskmod_get_delay @265 + cpfskmod_modulate @266 + cpfskmod_print @267 + cpfskmod_reset @268 + crandnf @269 + crc16_generate_key @270 + crc24_generate_key @271 + crc32_generate_key @272 + crc8_generate_key @273 + crc_append_key @274 + crc_check_key @275 + crc_generate_key @276 + crc_get_length @277 + crc_scheme_str @278 DATA + crc_sizeof_key @279 + crc_validate_message @280 + cvsd_create @281 + cvsd_decode @282 + cvsd_decode8 @283 + cvsd_destroy @284 + cvsd_encode @285 + cvsd_encode8 @286 + cvsd_print @287 + detector_cccf_compute_dotprods @288 + detector_cccf_correlate @289 + detector_cccf_create @290 + detector_cccf_debug_print @291 + detector_cccf_destroy @292 + detector_cccf_estimate_offsets @293 + detector_cccf_print @294 + detector_cccf_reset @295 + detector_cccf_update_sumsq @296 + dotprod_cccf_create @297 + dotprod_cccf_destroy @298 + dotprod_cccf_execute @299 + dotprod_cccf_execute_mmx @300 + dotprod_cccf_execute_mmx4 @301 + dotprod_cccf_print @302 + dotprod_cccf_recreate @303 + dotprod_cccf_run @304 + dotprod_cccf_run4 @305 + dotprod_crcf_create @306 + dotprod_crcf_destroy @307 + dotprod_crcf_execute @308 + dotprod_crcf_execute_mmx @309 + dotprod_crcf_execute_mmx4 @310 + dotprod_crcf_print @311 + dotprod_crcf_recreate @312 + dotprod_crcf_run @313 + dotprod_crcf_run4 @314 + dotprod_rrrf_create @315 + dotprod_rrrf_destroy @316 + dotprod_rrrf_execute @317 + dotprod_rrrf_execute_mmx @318 + dotprod_rrrf_execute_mmx4 @319 + dotprod_rrrf_print @320 + dotprod_rrrf_recreate @321 + dotprod_rrrf_run @322 + dotprod_rrrf_run4 @323 + ellip_acdf @324 + ellip_asnf @325 + ellip_azpkf @326 + ellip_cdf @327 + ellip_snf @328 + ellipdegf @329 + ellipkf @330 + eqlms_cccf_create @331 + eqlms_cccf_create_lowpass @332 + eqlms_cccf_create_rnyquist @333 + eqlms_cccf_destroy @334 + eqlms_cccf_execute @335 + eqlms_cccf_execute_block @336 + eqlms_cccf_get_bw @337 + eqlms_cccf_get_weights @338 + eqlms_cccf_print @339 + eqlms_cccf_push @340 + eqlms_cccf_push_block @341 + eqlms_cccf_recreate @342 + eqlms_cccf_reset @343 + eqlms_cccf_set_bw @344 + eqlms_cccf_step @345 + eqlms_cccf_step_blind @346 + eqlms_cccf_train @347 + eqlms_cccf_update_sumsq @348 + eqlms_rrrf_create @349 + eqlms_rrrf_create_lowpass @350 + eqlms_rrrf_create_rnyquist @351 + eqlms_rrrf_destroy @352 + eqlms_rrrf_execute @353 + eqlms_rrrf_execute_block @354 + eqlms_rrrf_get_bw @355 + eqlms_rrrf_get_weights @356 + eqlms_rrrf_print @357 + eqlms_rrrf_push @358 + eqlms_rrrf_push_block @359 + eqlms_rrrf_recreate @360 + eqlms_rrrf_reset @361 + eqlms_rrrf_set_bw @362 + eqlms_rrrf_step @363 + eqlms_rrrf_step_blind @364 + eqlms_rrrf_train @365 + eqlms_rrrf_update_sumsq @366 + eqrls_cccf_create @367 + eqrls_cccf_destroy @368 + eqrls_cccf_execute @369 + eqrls_cccf_get_bw @370 + eqrls_cccf_get_weights @371 + eqrls_cccf_print @372 + eqrls_cccf_push @373 + eqrls_cccf_recreate @374 + eqrls_cccf_reset @375 + eqrls_cccf_set_bw @376 + eqrls_cccf_step @377 + eqrls_cccf_train @378 + eqrls_rrrf_create @379 + eqrls_rrrf_destroy @380 + eqrls_rrrf_execute @381 + eqrls_rrrf_get_bw @382 + eqrls_rrrf_get_weights @383 + eqrls_rrrf_print @384 + eqrls_rrrf_push @385 + eqrls_rrrf_recreate @386 + eqrls_rrrf_reset @387 + eqrls_rrrf_set_bw @388 + eqrls_rrrf_step @389 + eqrls_rrrf_train @390 + estimate_req_filter_As @391 + estimate_req_filter_df @392 + estimate_req_filter_len @393 + estimate_req_filter_len_Herrmann @394 + estimate_req_filter_len_Kaiser @395 + expand_cf_mulaw @396 + expand_mulaw @397 + fec_block_get_enc_msg_len @398 + fec_conv27_poly @399 DATA + fec_conv27p23_matrix @400 DATA + fec_conv27p34_matrix @401 DATA + fec_conv27p45_matrix @402 DATA + fec_conv27p56_matrix @403 DATA + fec_conv27p67_matrix @404 DATA + fec_conv27p78_matrix @405 DATA + fec_conv29_poly @406 DATA + fec_conv29p23_matrix @407 DATA + fec_conv29p34_matrix @408 DATA + fec_conv29p45_matrix @409 DATA + fec_conv29p56_matrix @410 DATA + fec_conv29p67_matrix @411 DATA + fec_conv29p78_matrix @412 DATA + fec_conv39_poly @413 DATA + fec_conv615_poly @414 DATA + fec_conv_create @415 + fec_conv_destroy @416 + fec_conv_get_enc_msg_len @417 + fec_conv_punctured_create @418 + fec_conv_punctured_decode @419 + fec_conv_punctured_destroy @420 + fec_conv_punctured_encode @421 + fec_create @422 + fec_decode @423 + fec_decode_soft @424 + fec_destroy @425 + fec_encode @426 + fec_get_enc_msg_length @427 + fec_get_rate @428 + fec_golay2412_create @429 + fec_golay2412_decode @430 + fec_golay2412_decode_symbol @431 + fec_golay2412_destroy @432 + fec_golay2412_encode @433 + fec_golay2412_encode_symbol @434 + fec_hamming128_create @435 + fec_hamming128_decode @436 + fec_hamming128_decode_soft @437 + fec_hamming128_decode_symbol @438 + fec_hamming128_destroy @439 + fec_hamming128_encode @440 + fec_hamming128_encode_symbol @441 + fec_hamming1511_decode_symbol @442 + fec_hamming1511_encode_symbol @443 + fec_hamming3126_decode_symbol @444 + fec_hamming3126_encode_symbol @445 + fec_hamming74_create @446 + fec_hamming74_decode @447 + fec_hamming74_decode_soft @448 + fec_hamming74_destroy @449 + fec_hamming74_encode @450 + fec_hamming84_create @451 + fec_hamming84_decode @452 + fec_hamming84_decode_soft @453 + fec_hamming84_destroy @454 + fec_hamming84_encode @455 + fec_pass_create @456 + fec_pass_decode @457 + fec_pass_destroy @458 + fec_pass_encode @459 + fec_pass_print @460 + fec_print @461 + fec_recreate @462 + fec_rep3_create @463 + fec_rep3_decode @464 + fec_rep3_decode_soft @465 + fec_rep3_destroy @466 + fec_rep3_encode @467 + fec_rep3_print @468 + fec_rep5_create @469 + fec_rep5_decode @470 + fec_rep5_decode_soft @471 + fec_rep5_destroy @472 + fec_rep5_encode @473 + fec_rep5_print @474 + fec_rs_create @475 + fec_rs_decode @476 + fec_rs_destroy @477 + fec_rs_encode @478 + fec_rs_get_enc_msg_len @479 + fec_scheme_is_convolutional @480 + fec_scheme_is_hamming @481 + fec_scheme_is_punctured @482 + fec_scheme_is_reedsolomon @483 + fec_scheme_is_repeat @484 + fec_scheme_str @485 DATA + fec_secded2216_compute_parity @486 + fec_secded2216_compute_syndrome @487 + fec_secded2216_create @488 + fec_secded2216_decode @489 + fec_secded2216_decode_symbol @490 + fec_secded2216_destroy @491 + fec_secded2216_encode @492 + fec_secded2216_encode_symbol @493 + fec_secded2216_estimate_ehat @494 + fec_secded3932_compute_parity @495 + fec_secded3932_compute_syndrome @496 + fec_secded3932_create @497 + fec_secded3932_decode @498 + fec_secded3932_decode_symbol @499 + fec_secded3932_destroy @500 + fec_secded3932_encode @501 + fec_secded3932_encode_symbol @502 + fec_secded3932_estimate_ehat @503 + fec_secded7264_compute_parity @504 + fec_secded7264_compute_syndrome @505 + fec_secded7264_create @506 + fec_secded7264_decode @507 + fec_secded7264_decode_symbol @508 + fec_secded7264_destroy @509 + fec_secded7264_encode @510 + fec_secded7264_encode_symbol @511 + fec_secded7264_estimate_ehat @512 + fec_sumproduct @513 + fec_sumproduct_step @514 + fecsoft_hamming128_decode @515 + fecsoft_hamming128_decode_n3 @516 + fecsoft_hamming128_n3 @517 DATA + fecsoft_hamming74_decode @518 + fecsoft_hamming84_decode @519 + fft_create_plan @520 + fft_create_plan_dft @521 + fft_create_plan_mixed_radix @522 + fft_create_plan_r2r_1d @523 + fft_create_plan_rader @524 + fft_create_plan_rader2 @525 + fft_create_plan_radix2 @526 + fft_destroy_plan @527 + fft_destroy_plan_dft @528 + fft_destroy_plan_mixed_radix @529 + fft_destroy_plan_r2r_1d @530 + fft_destroy_plan_rader @531 + fft_destroy_plan_rader2 @532 + fft_destroy_plan_radix2 @533 + fft_estimate_mixed_radix @534 + fft_execute @535 + fft_execute_REDFT00 @536 + fft_execute_REDFT01 @537 + fft_execute_REDFT10 @538 + fft_execute_REDFT11 @539 + fft_execute_RODFT00 @540 + fft_execute_RODFT01 @541 + fft_execute_RODFT10 @542 + fft_execute_RODFT11 @543 + fft_execute_dft @544 + fft_execute_dft_16 @545 + fft_execute_dft_2 @546 + fft_execute_dft_3 @547 + fft_execute_dft_4 @548 + fft_execute_dft_5 @549 + fft_execute_dft_6 @550 + fft_execute_dft_7 @551 + fft_execute_dft_8 @552 + fft_execute_mixed_radix @553 + fft_execute_rader @554 + fft_execute_rader2 @555 + fft_execute_radix2 @556 + fft_is_radix2 @557 + fft_print_plan @558 + fft_print_plan_r2r_1d @559 + fft_print_plan_recursive @560 + fft_r2r_1d_run @561 + fft_reverse_index @562 + fft_run @563 + fft_shift @564 + fftfilt_cccf_create @565 + fftfilt_cccf_destroy @566 + fftfilt_cccf_execute @567 + fftfilt_cccf_get_length @568 + fftfilt_cccf_print @569 + fftfilt_cccf_reset @570 + fftfilt_cccf_set_scale @571 + fftfilt_crcf_create @572 + fftfilt_crcf_destroy @573 + fftfilt_crcf_execute @574 + fftfilt_crcf_get_length @575 + fftfilt_crcf_print @576 + fftfilt_crcf_reset @577 + fftfilt_crcf_set_scale @578 + fftfilt_rrrf_create @579 + fftfilt_rrrf_destroy @580 + fftfilt_rrrf_execute @581 + fftfilt_rrrf_get_length @582 + fftfilt_rrrf_print @583 + fftfilt_rrrf_reset @584 + fftfilt_rrrf_set_scale @585 + fir_group_delay @586 + firdecim_cccf_create @587 + firdecim_cccf_create_kaiser @588 + firdecim_cccf_create_prototype @589 + firdecim_cccf_destroy @590 + firdecim_cccf_execute @591 + firdecim_cccf_execute_block @592 + firdecim_cccf_print @593 + firdecim_cccf_reset @594 + firdecim_crcf_create @595 + firdecim_crcf_create_kaiser @596 + firdecim_crcf_create_prototype @597 + firdecim_crcf_destroy @598 + firdecim_crcf_execute @599 + firdecim_crcf_execute_block @600 + firdecim_crcf_print @601 + firdecim_crcf_reset @602 + firdecim_rrrf_create @603 + firdecim_rrrf_create_kaiser @604 + firdecim_rrrf_create_prototype @605 + firdecim_rrrf_destroy @606 + firdecim_rrrf_execute @607 + firdecim_rrrf_execute_block @608 + firdecim_rrrf_print @609 + firdecim_rrrf_reset @610 + firdespm_compute_error @611 + firdespm_compute_interp @612 + firdespm_compute_taps @613 + firdespm_create @614 + firdespm_destroy @615 + firdespm_execute @616 + firdespm_iext_search @617 + firdespm_init_grid @618 + firdespm_is_search_complete @619 + firdespm_print @620 + firdespm_run @621 + firfarrow_crcf_create @622 + firfarrow_crcf_destroy @623 + firfarrow_crcf_execute @624 + firfarrow_crcf_execute_block @625 + firfarrow_crcf_freqresponse @626 + firfarrow_crcf_genpoly @627 + firfarrow_crcf_get_coefficients @628 + firfarrow_crcf_get_length @629 + firfarrow_crcf_groupdelay @630 + firfarrow_crcf_print @631 + firfarrow_crcf_push @632 + firfarrow_crcf_reset @633 + firfarrow_crcf_set_delay @634 + firfarrow_rrrf_create @635 + firfarrow_rrrf_destroy @636 + firfarrow_rrrf_execute @637 + firfarrow_rrrf_execute_block @638 + firfarrow_rrrf_freqresponse @639 + firfarrow_rrrf_genpoly @640 + firfarrow_rrrf_get_coefficients @641 + firfarrow_rrrf_get_length @642 + firfarrow_rrrf_groupdelay @643 + firfarrow_rrrf_print @644 + firfarrow_rrrf_push @645 + firfarrow_rrrf_reset @646 + firfarrow_rrrf_set_delay @647 + firfilt_cccf_create @648 + firfilt_cccf_create_kaiser @649 + firfilt_cccf_create_rect @650 + firfilt_cccf_create_rnyquist @651 + firfilt_cccf_destroy @652 + firfilt_cccf_execute @653 + firfilt_cccf_execute_block @654 + firfilt_cccf_freqresponse @655 + firfilt_cccf_get_length @656 + firfilt_cccf_groupdelay @657 + firfilt_cccf_print @658 + firfilt_cccf_push @659 + firfilt_cccf_recreate @660 + firfilt_cccf_reset @661 + firfilt_cccf_set_scale @662 + firfilt_crcf_create @663 + firfilt_crcf_create_kaiser @664 + firfilt_crcf_create_rect @665 + firfilt_crcf_create_rnyquist @666 + firfilt_crcf_destroy @667 + firfilt_crcf_execute @668 + firfilt_crcf_execute_block @669 + firfilt_crcf_freqresponse @670 + firfilt_crcf_get_length @671 + firfilt_crcf_groupdelay @672 + firfilt_crcf_print @673 + firfilt_crcf_push @674 + firfilt_crcf_recreate @675 + firfilt_crcf_reset @676 + firfilt_crcf_set_scale @677 + firfilt_rrrf_create @678 + firfilt_rrrf_create_kaiser @679 + firfilt_rrrf_create_rect @680 + firfilt_rrrf_create_rnyquist @681 + firfilt_rrrf_destroy @682 + firfilt_rrrf_execute @683 + firfilt_rrrf_execute_block @684 + firfilt_rrrf_freqresponse @685 + firfilt_rrrf_get_length @686 + firfilt_rrrf_groupdelay @687 + firfilt_rrrf_print @688 + firfilt_rrrf_push @689 + firfilt_rrrf_recreate @690 + firfilt_rrrf_reset @691 + firfilt_rrrf_set_scale @692 + firhilbf_c2r_execute @693 + firhilbf_create @694 + firhilbf_decim_execute @695 + firhilbf_decim_execute_block @696 + firhilbf_destroy @697 + firhilbf_interp_execute @698 + firhilbf_interp_execute_block @699 + firhilbf_print @700 + firhilbf_r2c_execute @701 + firhilbf_reset @702 + firinterp_cccf_create @703 + firinterp_cccf_create_kaiser @704 + firinterp_cccf_create_prototype @705 + firinterp_cccf_destroy @706 + firinterp_cccf_execute @707 + firinterp_cccf_execute_block @708 + firinterp_cccf_print @709 + firinterp_cccf_reset @710 + firinterp_crcf_create @711 + firinterp_crcf_create_kaiser @712 + firinterp_crcf_create_prototype @713 + firinterp_crcf_destroy @714 + firinterp_crcf_execute @715 + firinterp_crcf_execute_block @716 + firinterp_crcf_print @717 + firinterp_crcf_reset @718 + firinterp_rrrf_create @719 + firinterp_rrrf_create_kaiser @720 + firinterp_rrrf_create_prototype @721 + firinterp_rrrf_destroy @722 + firinterp_rrrf_execute @723 + firinterp_rrrf_execute_block @724 + firinterp_rrrf_print @725 + firinterp_rrrf_reset @726 + firpfb_cccf_create @727 + firpfb_cccf_create_drnyquist @728 + firpfb_cccf_create_kaiser @729 + firpfb_cccf_create_rnyquist @730 + firpfb_cccf_destroy @731 + firpfb_cccf_execute @732 + firpfb_cccf_execute_block @733 + firpfb_cccf_print @734 + firpfb_cccf_push @735 + firpfb_cccf_recreate @736 + firpfb_cccf_reset @737 + firpfb_cccf_set_scale @738 + firpfb_crcf_create @739 + firpfb_crcf_create_drnyquist @740 + firpfb_crcf_create_kaiser @741 + firpfb_crcf_create_rnyquist @742 + firpfb_crcf_destroy @743 + firpfb_crcf_execute @744 + firpfb_crcf_execute_block @745 + firpfb_crcf_print @746 + firpfb_crcf_push @747 + firpfb_crcf_recreate @748 + firpfb_crcf_reset @749 + firpfb_crcf_set_scale @750 + firpfb_rrrf_create @751 + firpfb_rrrf_create_drnyquist @752 + firpfb_rrrf_create_kaiser @753 + firpfb_rrrf_create_rnyquist @754 + firpfb_rrrf_destroy @755 + firpfb_rrrf_execute @756 + firpfb_rrrf_execute_block @757 + firpfb_rrrf_print @758 + firpfb_rrrf_push @759 + firpfb_rrrf_recreate @760 + firpfb_rrrf_reset @761 + firpfb_rrrf_set_scale @762 + firpfbch2_crcf_create @763 + firpfbch2_crcf_create_kaiser @764 + firpfbch2_crcf_destroy @765 + firpfbch2_crcf_execute @766 + firpfbch2_crcf_execute_analyzer @767 + firpfbch2_crcf_execute_synthesizer @768 + firpfbch2_crcf_print @769 + firpfbch2_crcf_reset @770 + firpfbch_cccf_analyzer_execute @771 + firpfbch_cccf_analyzer_push @772 + firpfbch_cccf_analyzer_run @773 + firpfbch_cccf_create @774 + firpfbch_cccf_create_kaiser @775 + firpfbch_cccf_create_rnyquist @776 + firpfbch_cccf_destroy @777 + firpfbch_cccf_print @778 + firpfbch_cccf_reset @779 + firpfbch_cccf_synthesizer_execute @780 + firpfbch_crcf_analyzer_execute @781 + firpfbch_crcf_analyzer_push @782 + firpfbch_crcf_analyzer_run @783 + firpfbch_crcf_create @784 + firpfbch_crcf_create_kaiser @785 + firpfbch_crcf_create_rnyquist @786 + firpfbch_crcf_destroy @787 + firpfbch_crcf_print @788 + firpfbch_crcf_reset @789 + firpfbch_crcf_synthesizer_execute @790 + flattop @791 + flexframegen_assemble @792 + flexframegen_create @793 + flexframegen_destroy @794 + flexframegen_generate_header @795 + flexframegen_generate_payload @796 + flexframegen_generate_preamble @797 + flexframegen_generate_symbol @798 + flexframegen_generate_tail @799 + flexframegen_getframelen @800 + flexframegen_getprops @801 + flexframegen_is_assembled @802 + flexframegen_print @803 + flexframegen_reconfigure @804 + flexframegen_reset @805 + flexframegen_setprops @806 + flexframegen_write_samples @807 + flexframegenprops_init_default @808 + flexframesync_create @809 + flexframesync_debug_disable @810 + flexframesync_debug_enable @811 + flexframesync_debug_print @812 + flexframesync_decode_header @813 + flexframesync_destroy @814 + flexframesync_execute @815 + flexframesync_execute_rxheader @816 + flexframesync_execute_rxpayload @817 + flexframesync_execute_rxpreamble @818 + flexframesync_execute_seekpn @819 + flexframesync_get_framedatastats @820 + flexframesync_print @821 + flexframesync_reset @822 + flexframesync_reset_framedatastats @823 + flexframesync_step @824 + fpoly_bessel @825 + fpoly_bessel_roots @826 + fpoly_bessel_roots_orchard @827 + fpoly_bessel_roots_orchard_recursion @828 + framedatastats_print @829 + framedatastats_reset @830 + framegen64_create @831 + framegen64_destroy @832 + framegen64_execute @833 + framegen64_print @834 + framesync64_create @835 + framesync64_debug_disable @836 + framesync64_debug_enable @837 + framesync64_debug_print @838 + framesync64_destroy @839 + framesync64_execute @840 + framesync64_execute_rxpayload @841 + framesync64_execute_rxpreamble @842 + framesync64_execute_seekpn @843 + framesync64_print @844 + framesync64_reset @845 + framesync64_step @846 + framesyncstats_default @847 DATA + framesyncstats_init_default @848 + framesyncstats_print @849 + freqdem_create @850 + freqdem_demodulate @851 + freqdem_demodulate_block @852 + freqdem_destroy @853 + freqdem_print @854 + freqdem_reset @855 + freqmod_create @856 + freqmod_destroy @857 + freqmod_modulate @858 + freqmod_modulate_block @859 + freqmod_print @860 + freqmod_reset @861 + fskdem_create @862 + fskdem_demodulate @863 + fskdem_destroy @864 + fskdem_get_frequency_error @865 + fskdem_print @866 + fskdem_reset @867 + fskmod_create @868 + fskmod_destroy @869 + fskmod_modulate @870 + fskmod_print @871 + fskmod_reset @872 + gasearch_create @873 + gasearch_create_advanced @874 + gasearch_crossover @875 + gasearch_destroy @876 + gasearch_evaluate @877 + gasearch_evolve @878 + gasearch_getopt @879 + gasearch_mutate @880 + gasearch_print @881 + gasearch_rank @882 + gasearch_run @883 + gasearch_set_mutation_rate @884 + gasearch_set_population_size @885 + gmskdem_create @886 + gmskdem_debug_print @887 + gmskdem_demodulate @888 + gmskdem_destroy @889 + gmskdem_print @890 + gmskdem_reset @891 + gmskdem_set_eq_bw @892 + gmskframegen_assemble @893 + gmskframegen_create @894 + gmskframegen_destroy @895 + gmskframegen_encode_header @896 + gmskframegen_getframelen @897 + gmskframegen_is_assembled @898 + gmskframegen_print @899 + gmskframegen_reset @900 + gmskframegen_write_header @901 + gmskframegen_write_payload @902 + gmskframegen_write_preamble @903 + gmskframegen_write_samples @904 + gmskframegen_write_tail @905 + gmskframesync_create @906 + gmskframesync_debug_disable @907 + gmskframesync_debug_enable @908 + gmskframesync_debug_print @909 + gmskframesync_decode_header @910 + gmskframesync_destroy @911 + gmskframesync_execute @912 + gmskframesync_execute_detectframe @913 + gmskframesync_execute_rxheader @914 + gmskframesync_execute_rxpayload @915 + gmskframesync_execute_rxpreamble @916 + gmskframesync_print @917 + gmskframesync_pushpn @918 + gmskframesync_reset @919 + gmskframesync_syncpn @920 + gmskframesync_update_fi @921 + gmskframesync_update_symsync @922 + gmskmod_create @923 + gmskmod_destroy @924 + gmskmod_modulate @925 + gmskmod_print @926 + gmskmod_reset @927 + golay2412_Gt @928 DATA + golay2412_H @929 DATA + golay2412_P @930 DATA + golay2412_matrix_mul @931 + golay2412_parity_search @932 + gradsearch_create @933 + gradsearch_destroy @934 + gradsearch_execute @935 + gradsearch_gradient @936 + gradsearch_linesearch @937 + gradsearch_norm @938 + gradsearch_print @939 + gradsearch_step @940 + gray_decode @941 + gray_encode @942 + hamming @943 + hamming128_enc_gentab @944 DATA + hamming74_dec_gentab @945 DATA + hamming74_enc_gentab @946 DATA + hamming84_dec_gentab @947 DATA + hamming84_enc_gentab @948 DATA + hann @949 + icrandnf @950 + iir_group_delay @951 + iirdecim_cccf_create @952 + iirdecim_cccf_create_default @953 + iirdecim_cccf_create_prototype @954 + iirdecim_cccf_destroy @955 + iirdecim_cccf_execute @956 + iirdecim_cccf_execute_block @957 + iirdecim_cccf_groupdelay @958 + iirdecim_cccf_print @959 + iirdecim_cccf_reset @960 + iirdecim_crcf_create @961 + iirdecim_crcf_create_default @962 + iirdecim_crcf_create_prototype @963 + iirdecim_crcf_destroy @964 + iirdecim_crcf_execute @965 + iirdecim_crcf_execute_block @966 + iirdecim_crcf_groupdelay @967 + iirdecim_crcf_print @968 + iirdecim_crcf_reset @969 + iirdecim_rrrf_create @970 + iirdecim_rrrf_create_default @971 + iirdecim_rrrf_create_prototype @972 + iirdecim_rrrf_destroy @973 + iirdecim_rrrf_execute @974 + iirdecim_rrrf_execute_block @975 + iirdecim_rrrf_groupdelay @976 + iirdecim_rrrf_print @977 + iirdecim_rrrf_reset @978 + iirdes_dzpk2sosf @979 + iirdes_dzpk2tff @980 + iirdes_dzpk_lp2bp @981 + iirdes_dzpk_lp2hp @982 + iirdes_freqprewarp @983 + iirdes_isstable @984 + iirdes_pll_active_PI @985 + iirdes_pll_active_lag @986 + iirfilt_cccf_create @987 + iirfilt_cccf_create_dc_blocker @988 + iirfilt_cccf_create_differentiator @989 + iirfilt_cccf_create_integrator @990 + iirfilt_cccf_create_lowpass @991 + iirfilt_cccf_create_pll @992 + iirfilt_cccf_create_prototype @993 + iirfilt_cccf_create_sos @994 + iirfilt_cccf_destroy @995 + iirfilt_cccf_execute @996 + iirfilt_cccf_execute_block @997 + iirfilt_cccf_execute_norm @998 + iirfilt_cccf_execute_sos @999 + iirfilt_cccf_freqresponse @1000 + iirfilt_cccf_get_length @1001 + iirfilt_cccf_groupdelay @1002 + iirfilt_cccf_print @1003 + iirfilt_cccf_reset @1004 + iirfilt_crcf_create @1005 + iirfilt_crcf_create_dc_blocker @1006 + iirfilt_crcf_create_differentiator @1007 + iirfilt_crcf_create_integrator @1008 + iirfilt_crcf_create_lowpass @1009 + iirfilt_crcf_create_pll @1010 + iirfilt_crcf_create_prototype @1011 + iirfilt_crcf_create_sos @1012 + iirfilt_crcf_destroy @1013 + iirfilt_crcf_execute @1014 + iirfilt_crcf_execute_block @1015 + iirfilt_crcf_execute_norm @1016 + iirfilt_crcf_execute_sos @1017 + iirfilt_crcf_freqresponse @1018 + iirfilt_crcf_get_length @1019 + iirfilt_crcf_groupdelay @1020 + iirfilt_crcf_print @1021 + iirfilt_crcf_reset @1022 + iirfilt_rrrf_create @1023 + iirfilt_rrrf_create_dc_blocker @1024 + iirfilt_rrrf_create_differentiator @1025 + iirfilt_rrrf_create_integrator @1026 + iirfilt_rrrf_create_lowpass @1027 + iirfilt_rrrf_create_pll @1028 + iirfilt_rrrf_create_prototype @1029 + iirfilt_rrrf_create_sos @1030 + iirfilt_rrrf_destroy @1031 + iirfilt_rrrf_execute @1032 + iirfilt_rrrf_execute_block @1033 + iirfilt_rrrf_execute_norm @1034 + iirfilt_rrrf_execute_sos @1035 + iirfilt_rrrf_freqresponse @1036 + iirfilt_rrrf_get_length @1037 + iirfilt_rrrf_groupdelay @1038 + iirfilt_rrrf_print @1039 + iirfilt_rrrf_reset @1040 + iirfiltsos_cccf_create @1041 + iirfiltsos_cccf_destroy @1042 + iirfiltsos_cccf_execute @1043 + iirfiltsos_cccf_execute_df1 @1044 + iirfiltsos_cccf_execute_df2 @1045 + iirfiltsos_cccf_groupdelay @1046 + iirfiltsos_cccf_print @1047 + iirfiltsos_cccf_reset @1048 + iirfiltsos_cccf_set_coefficients @1049 + iirfiltsos_crcf_create @1050 + iirfiltsos_crcf_destroy @1051 + iirfiltsos_crcf_execute @1052 + iirfiltsos_crcf_execute_df1 @1053 + iirfiltsos_crcf_execute_df2 @1054 + iirfiltsos_crcf_groupdelay @1055 + iirfiltsos_crcf_print @1056 + iirfiltsos_crcf_reset @1057 + iirfiltsos_crcf_set_coefficients @1058 + iirfiltsos_rrrf_create @1059 + iirfiltsos_rrrf_destroy @1060 + iirfiltsos_rrrf_execute @1061 + iirfiltsos_rrrf_execute_df1 @1062 + iirfiltsos_rrrf_execute_df2 @1063 + iirfiltsos_rrrf_groupdelay @1064 + iirfiltsos_rrrf_print @1065 + iirfiltsos_rrrf_reset @1066 + iirfiltsos_rrrf_set_coefficients @1067 + iirinterp_cccf_create @1068 + iirinterp_cccf_create_default @1069 + iirinterp_cccf_create_prototype @1070 + iirinterp_cccf_destroy @1071 + iirinterp_cccf_execute @1072 + iirinterp_cccf_execute_block @1073 + iirinterp_cccf_groupdelay @1074 + iirinterp_cccf_print @1075 + iirinterp_cccf_reset @1076 + iirinterp_crcf_create @1077 + iirinterp_crcf_create_default @1078 + iirinterp_crcf_create_prototype @1079 + iirinterp_crcf_destroy @1080 + iirinterp_crcf_execute @1081 + iirinterp_crcf_execute_block @1082 + iirinterp_crcf_groupdelay @1083 + iirinterp_crcf_print @1084 + iirinterp_crcf_reset @1085 + iirinterp_rrrf_create @1086 + iirinterp_rrrf_create_default @1087 + iirinterp_rrrf_create_prototype @1088 + iirinterp_rrrf_destroy @1089 + iirinterp_rrrf_execute @1090 + iirinterp_rrrf_execute_block @1091 + iirinterp_rrrf_groupdelay @1092 + iirinterp_rrrf_print @1093 + iirinterp_rrrf_reset @1094 + interleaver_create @1095 + interleaver_decode @1096 + interleaver_decode_soft @1097 + interleaver_destroy @1098 + interleaver_encode @1099 + interleaver_encode_soft @1100 + interleaver_permute @1101 + interleaver_permute_mask @1102 + interleaver_permute_mask_soft @1103 + interleaver_permute_soft @1104 + interleaver_print @1105 + interleaver_set_depth @1106 + kaiser @1107 + kaiser_beta_As @1108 + landenf @1109 + liquid_MarcumQ1f @1110 + liquid_MarcumQf @1111 + liquid_Qf @1112 + liquid_apsk128 @1113 DATA + liquid_apsk16 @1114 DATA + liquid_apsk256 @1115 DATA + liquid_apsk32 @1116 DATA + liquid_apsk4 @1117 DATA + liquid_apsk64 @1118 DATA + liquid_apsk8 @1119 DATA + liquid_asechf @1120 + liquid_bdotprod @1121 + liquid_besseli0f @1122 + liquid_besselif @1123 + liquid_besselj0f @1124 + liquid_besseljf @1125 + liquid_c_leading_zeros @1126 DATA + liquid_c_ones @1127 DATA + liquid_c_ones_mod2 @1128 DATA + liquid_cacosf @1129 + liquid_cargf_approx @1130 + liquid_casinf @1131 + liquid_catanf @1132 + liquid_cexpf @1133 + liquid_clogf @1134 + liquid_cosf @1135 + liquid_count_leading_zeros @1136 + liquid_count_ones @1137 + liquid_count_ones_mod2 @1138 + liquid_cplxpair @1139 + liquid_cplxpair_cleanup @1140 + liquid_csqrtf @1141 + liquid_expf @1142 + liquid_factor @1143 + liquid_factorialf @1144 + liquid_fft_estimate_method @1145 + liquid_filter_autocorr @1146 + liquid_filter_crosscorr @1147 + liquid_filter_energy @1148 + liquid_filter_isi @1149 + liquid_firdes_arkaiser @1150 + liquid_firdes_doppler @1151 + liquid_firdes_farcsech @1152 + liquid_firdes_farcsech_freqresponse @1153 + liquid_firdes_fexp @1154 + liquid_firdes_fexp_freqresponse @1155 + liquid_firdes_fnyquist @1156 + liquid_firdes_fsech @1157 + liquid_firdes_fsech_freqresponse @1158 + liquid_firdes_gmskrx @1159 + liquid_firdes_gmsktx @1160 + liquid_firdes_hM3 @1161 + liquid_firdes_kaiser @1162 + liquid_firdes_prototype @1163 + liquid_firdes_rcos @1164 + liquid_firdes_rfarcsech @1165 + liquid_firdes_rfexp @1166 + liquid_firdes_rfsech @1167 + liquid_firdes_rkaiser @1168 + liquid_firdes_rkaiser_bisection @1169 + liquid_firdes_rkaiser_internal_isi @1170 + liquid_firdes_rkaiser_quadratic @1171 + liquid_firdes_rrcos @1172 + liquid_gammaf @1173 + liquid_getopt_str2crc @1174 + liquid_getopt_str2fec @1175 + liquid_getopt_str2firfilt @1176 + liquid_getopt_str2mod @1177 + liquid_getopt_str2window @1178 + liquid_iirdes @1179 + liquid_invgauss @1180 + liquid_is_prime @1181 + liquid_kbd @1182 + liquid_kbd_window @1183 + liquid_lbcircshift @1184 + liquid_lbshift @1185 + liquid_lcircshift @1186 + liquid_levinson @1187 + liquid_libversion @1188 + liquid_libversion_number @1189 + liquid_lnbesselif @1190 + liquid_lngammaf @1191 + liquid_lnlowergammaf @1192 + liquid_lnuppergammaf @1193 + liquid_logf @1194 + liquid_lowergammaf @1195 + liquid_lpc @1196 + liquid_lshift @1197 + liquid_modem_is_apsk @1198 + liquid_modem_is_ask @1199 + liquid_modem_is_dpsk @1200 + liquid_modem_is_psk @1201 + liquid_modem_is_qam @1202 + liquid_modpow @1203 + liquid_msb_index @1204 + liquid_multimodal @1205 + liquid_nchoosek @1206 + liquid_nextpow2 @1207 + liquid_pack_array @1208 + liquid_pack_bytes @1209 + liquid_pack_soft_bits @1210 + liquid_primitive_root @1211 + liquid_primitive_root_prime @1212 + liquid_print_bitstring @1213 + liquid_print_crc_schemes @1214 + liquid_print_fec_schemes @1215 + liquid_print_modulation_schemes @1216 + liquid_print_windows @1217 + liquid_rbcircshift @1218 + liquid_rbshift @1219 + liquid_rcircshift @1220 + liquid_rcostaper_windowf @1221 + liquid_repack_bytes @1222 + liquid_reverse_byte @1223 + liquid_reverse_byte_gentab @1224 DATA + liquid_reverse_uint16 @1225 + liquid_reverse_uint24 @1226 + liquid_reverse_uint32 @1227 + liquid_rosenbrock @1228 + liquid_rshift @1229 + liquid_sincosf @1230 + liquid_sinf @1231 + liquid_spiral @1232 + liquid_sumsqcf @1233 + liquid_sumsqf @1234 + liquid_tanf @1235 + liquid_totient @1236 + liquid_unique_factor @1237 + liquid_unpack_array @1238 + liquid_unpack_bytes @1239 + liquid_unpack_soft_bits @1240 + liquid_unwrap_phase @1241 + liquid_unwrap_phase2 @1242 + liquid_uppergammaf @1243 + liquid_vectorcf_abs @1244 + liquid_vectorcf_add @1245 + liquid_vectorcf_addscalar @1246 + liquid_vectorcf_carg @1247 + liquid_vectorcf_cexpj @1248 + liquid_vectorcf_mul @1249 + liquid_vectorcf_mulscalar @1250 + liquid_vectorcf_norm @1251 + liquid_vectorcf_normalize @1252 + liquid_vectorf_abs @1253 + liquid_vectorf_add @1254 + liquid_vectorf_addscalar @1255 + liquid_vectorf_carg @1256 + liquid_vectorf_cexpj @1257 + liquid_vectorf_mul @1258 + liquid_vectorf_mulscalar @1259 + liquid_vectorf_norm @1260 + liquid_vectorf_normalize @1261 + liquid_version @1262 DATA + liquid_window_str @1263 DATA + matrix_add @1264 + matrix_aug @1265 + matrix_cgsolve @1266 + matrix_chol @1267 + matrix_det @1268 + matrix_det2x2 @1269 + matrix_div @1270 + matrix_eye @1271 + matrix_gjelim @1272 + matrix_gramschmidt @1273 + matrix_hermitian @1274 + matrix_hermitian_mul @1275 + matrix_inv @1276 + matrix_linsolve @1277 + matrix_ludecomp_crout @1278 + matrix_ludecomp_doolittle @1279 + matrix_mul @1280 + matrix_mul_hermitian @1281 + matrix_mul_transpose @1282 + matrix_ones @1283 + matrix_pdiv @1284 + matrix_pivot @1285 + matrix_pmul @1286 + matrix_print @1287 + matrix_proj @1288 + matrix_qrdecomp_gramschmidt @1289 + matrix_sub @1290 + matrix_swaprows @1291 + matrix_trans @1292 + matrix_transpose_mul @1293 + matrix_zeros @1294 + matrixc_add @1295 + matrixc_aug @1296 + matrixc_cgsolve @1297 + matrixc_chol @1298 + matrixc_det @1299 + matrixc_det2x2 @1300 + matrixc_div @1301 + matrixc_eye @1302 + matrixc_gjelim @1303 + matrixc_gramschmidt @1304 + matrixc_hermitian @1305 + matrixc_hermitian_mul @1306 + matrixc_inv @1307 + matrixc_linsolve @1308 + matrixc_ludecomp_crout @1309 + matrixc_ludecomp_doolittle @1310 + matrixc_mul @1311 + matrixc_mul_hermitian @1312 + matrixc_mul_transpose @1313 + matrixc_ones @1314 + matrixc_pdiv @1315 + matrixc_pivot @1316 + matrixc_pmul @1317 + matrixc_print @1318 + matrixc_proj @1319 + matrixc_qrdecomp_gramschmidt @1320 + matrixc_sub @1321 + matrixc_swaprows @1322 + matrixc_trans @1323 + matrixc_transpose_mul @1324 + matrixc_zeros @1325 + matrixcf_add @1326 + matrixcf_aug @1327 + matrixcf_cgsolve @1328 + matrixcf_chol @1329 + matrixcf_det @1330 + matrixcf_det2x2 @1331 + matrixcf_div @1332 + matrixcf_eye @1333 + matrixcf_gjelim @1334 + matrixcf_gramschmidt @1335 + matrixcf_hermitian @1336 + matrixcf_hermitian_mul @1337 + matrixcf_inv @1338 + matrixcf_linsolve @1339 + matrixcf_ludecomp_crout @1340 + matrixcf_ludecomp_doolittle @1341 + matrixcf_mul @1342 + matrixcf_mul_hermitian @1343 + matrixcf_mul_transpose @1344 + matrixcf_ones @1345 + matrixcf_pdiv @1346 + matrixcf_pivot @1347 + matrixcf_pmul @1348 + matrixcf_print @1349 + matrixcf_proj @1350 + matrixcf_qrdecomp_gramschmidt @1351 + matrixcf_sub @1352 + matrixcf_swaprows @1353 + matrixcf_trans @1354 + matrixcf_transpose_mul @1355 + matrixcf_zeros @1356 + matrixf_add @1357 + matrixf_aug @1358 + matrixf_cgsolve @1359 + matrixf_chol @1360 + matrixf_det @1361 + matrixf_det2x2 @1362 + matrixf_div @1363 + matrixf_eye @1364 + matrixf_gjelim @1365 + matrixf_gramschmidt @1366 + matrixf_hermitian @1367 + matrixf_hermitian_mul @1368 + matrixf_inv @1369 + matrixf_linsolve @1370 + matrixf_ludecomp_crout @1371 + matrixf_ludecomp_doolittle @1372 + matrixf_mul @1373 + matrixf_mul_hermitian @1374 + matrixf_mul_transpose @1375 + matrixf_ones @1376 + matrixf_pdiv @1377 + matrixf_pivot @1378 + matrixf_pmul @1379 + matrixf_print @1380 + matrixf_proj @1381 + matrixf_qrdecomp_gramschmidt @1382 + matrixf_sub @1383 + matrixf_swaprows @1384 + matrixf_trans @1385 + matrixf_transpose_mul @1386 + matrixf_zeros @1387 + modem_arb128opt @1388 DATA + modem_arb16opt @1389 DATA + modem_arb256opt @1390 DATA + modem_arb32opt @1391 DATA + modem_arb64opt @1392 DATA + modem_arb_V29 @1393 DATA + modem_arb_balance_iq @1394 + modem_arb_init @1395 + modem_arb_init_file @1396 + modem_arb_scale @1397 + modem_arb_sqam128 @1398 DATA + modem_arb_sqam32 @1399 DATA + modem_arb_vt64 @1400 DATA + modem_create @1401 + modem_create_V29 @1402 + modem_create_apsk @1403 + modem_create_arb @1404 + modem_create_arb128opt @1405 + modem_create_arb16opt @1406 + modem_create_arb256opt @1407 + modem_create_arb32opt @1408 + modem_create_arb64opt @1409 + modem_create_arb64vt @1410 + modem_create_arbitrary @1411 + modem_create_ask @1412 + modem_create_bpsk @1413 + modem_create_dpsk @1414 + modem_create_ook @1415 + modem_create_psk @1416 + modem_create_qam @1417 + modem_create_qpsk @1418 + modem_create_sqam128 @1419 + modem_create_sqam32 @1420 + modem_demodsoft_gentab @1421 + modem_demodulate @1422 + modem_demodulate_apsk @1423 + modem_demodulate_arb @1424 + modem_demodulate_ask @1425 + modem_demodulate_bpsk @1426 + modem_demodulate_dpsk @1427 + modem_demodulate_linear_array @1428 + modem_demodulate_linear_array_ref @1429 + modem_demodulate_ook @1430 + modem_demodulate_psk @1431 + modem_demodulate_qam @1432 + modem_demodulate_qpsk @1433 + modem_demodulate_soft @1434 + modem_demodulate_soft_arb @1435 + modem_demodulate_soft_bpsk @1436 + modem_demodulate_soft_qpsk @1437 + modem_demodulate_soft_table @1438 + modem_demodulate_sqam128 @1439 + modem_demodulate_sqam32 @1440 + modem_destroy @1441 + modem_gen_rand_sym @1442 + modem_get_bps @1443 + modem_get_demodulator_evm @1444 + modem_get_demodulator_phase_error @1445 + modem_get_demodulator_sample @1446 + modem_get_scheme @1447 + modem_init @1448 + modem_init_map @1449 + modem_modulate @1450 + modem_modulate_apsk @1451 + modem_modulate_arb @1452 + modem_modulate_ask @1453 + modem_modulate_bpsk @1454 + modem_modulate_dpsk @1455 + modem_modulate_map @1456 + modem_modulate_ook @1457 + modem_modulate_psk @1458 + modem_modulate_qam @1459 + modem_modulate_qpsk @1460 + modem_modulate_sqam128 @1461 + modem_modulate_sqam32 @1462 + modem_print @1463 + modem_recreate @1464 + modem_reset @1465 + modulation_types @1466 DATA + msequence_advance @1467 + msequence_create @1468 + msequence_create_default @1469 + msequence_create_genpoly @1470 + msequence_default @1471 DATA + msequence_destroy @1472 + msequence_generate_symbol @1473 + msequence_get_length @1474 + msequence_get_state @1475 + msequence_print @1476 + msequence_reset @1477 + msequence_set_state @1478 + msourcecf_add_modem @1479 + msourcecf_add_noise @1480 + msourcecf_add_source @1481 + msourcecf_add_tone @1482 + msourcecf_create @1483 + msourcecf_destroy @1484 + msourcecf_disable @1485 + msourcecf_enable @1486 + msourcecf_get_source @1487 + msourcecf_print @1488 + msourcecf_remove @1489 + msourcecf_reset @1490 + msourcecf_set_frequency @1491 + msourcecf_set_gain @1492 + msourcecf_write_samples @1493 + msresamp2_cccf_create @1494 + msresamp2_cccf_decim_execute @1495 + msresamp2_cccf_destroy @1496 + msresamp2_cccf_execute @1497 + msresamp2_cccf_get_delay @1498 + msresamp2_cccf_interp_execute @1499 + msresamp2_cccf_print @1500 + msresamp2_cccf_reset @1501 + msresamp2_crcf_create @1502 + msresamp2_crcf_decim_execute @1503 + msresamp2_crcf_destroy @1504 + msresamp2_crcf_execute @1505 + msresamp2_crcf_get_delay @1506 + msresamp2_crcf_interp_execute @1507 + msresamp2_crcf_print @1508 + msresamp2_crcf_reset @1509 + msresamp2_rrrf_create @1510 + msresamp2_rrrf_decim_execute @1511 + msresamp2_rrrf_destroy @1512 + msresamp2_rrrf_execute @1513 + msresamp2_rrrf_get_delay @1514 + msresamp2_rrrf_interp_execute @1515 + msresamp2_rrrf_print @1516 + msresamp2_rrrf_reset @1517 + msresamp_cccf_create @1518 + msresamp_cccf_decim_execute @1519 + msresamp_cccf_destroy @1520 + msresamp_cccf_execute @1521 + msresamp_cccf_get_delay @1522 + msresamp_cccf_interp_execute @1523 + msresamp_cccf_print @1524 + msresamp_cccf_reset @1525 + msresamp_crcf_create @1526 + msresamp_crcf_decim_execute @1527 + msresamp_crcf_destroy @1528 + msresamp_crcf_execute @1529 + msresamp_crcf_get_delay @1530 + msresamp_crcf_interp_execute @1531 + msresamp_crcf_print @1532 + msresamp_crcf_reset @1533 + msresamp_rrrf_create @1534 + msresamp_rrrf_decim_execute @1535 + msresamp_rrrf_destroy @1536 + msresamp_rrrf_execute @1537 + msresamp_rrrf_get_delay @1538 + msresamp_rrrf_interp_execute @1539 + msresamp_rrrf_print @1540 + msresamp_rrrf_reset @1541 + nco_crcf_adjust_frequency @1542 + nco_crcf_adjust_phase @1543 + nco_crcf_cexpf @1544 + nco_crcf_compute_sincos_nco @1545 + nco_crcf_compute_sincos_vco @1546 + nco_crcf_constrain_frequency @1547 + nco_crcf_constrain_phase @1548 + nco_crcf_cos @1549 + nco_crcf_create @1550 + nco_crcf_destroy @1551 + nco_crcf_get_frequency @1552 + nco_crcf_get_phase @1553 + nco_crcf_mix_block_down @1554 + nco_crcf_mix_block_up @1555 + nco_crcf_mix_down @1556 + nco_crcf_mix_up @1557 + nco_crcf_pll_reset @1558 + nco_crcf_pll_set_bandwidth @1559 + nco_crcf_pll_step @1560 + nco_crcf_reset @1561 + nco_crcf_set_frequency @1562 + nco_crcf_set_phase @1563 + nco_crcf_sin @1564 + nco_crcf_sincos @1565 + nco_crcf_step @1566 + ofdmflexframegen_assemble @1567 + ofdmflexframegen_create @1568 + ofdmflexframegen_destroy @1569 + ofdmflexframegen_encode_header @1570 + ofdmflexframegen_gen_S0a @1571 + ofdmflexframegen_gen_S0b @1572 + ofdmflexframegen_gen_S1 @1573 + ofdmflexframegen_gen_header @1574 + ofdmflexframegen_gen_payload @1575 + ofdmflexframegen_gen_symbol @1576 + ofdmflexframegen_gen_tail @1577 + ofdmflexframegen_gen_zeros @1578 + ofdmflexframegen_getframelen @1579 + ofdmflexframegen_getprops @1580 + ofdmflexframegen_is_assembled @1581 + ofdmflexframegen_modulate_header @1582 + ofdmflexframegen_print @1583 + ofdmflexframegen_reconfigure @1584 + ofdmflexframegen_reset @1585 + ofdmflexframegen_setprops @1586 + ofdmflexframegen_write @1587 + ofdmflexframegenprops_init_default @1588 + ofdmflexframesync_create @1589 + ofdmflexframesync_debug_disable @1590 + ofdmflexframesync_debug_enable @1591 + ofdmflexframesync_debug_print @1592 + ofdmflexframesync_decode_header @1593 + ofdmflexframesync_destroy @1594 + ofdmflexframesync_execute @1595 + ofdmflexframesync_get_cfo @1596 + ofdmflexframesync_get_rssi @1597 + ofdmflexframesync_internal_callback @1598 + ofdmflexframesync_print @1599 + ofdmflexframesync_reset @1600 + ofdmflexframesync_rxheader @1601 + ofdmflexframesync_rxpayload @1602 + ofdmframe_init_S0 @1603 + ofdmframe_init_S1 @1604 + ofdmframe_init_default_sctype @1605 + ofdmframe_init_sctype_range @1606 + ofdmframe_print_sctype @1607 + ofdmframe_validate_sctype @1608 + ofdmframegen_create @1609 + ofdmframegen_destroy @1610 + ofdmframegen_gensymbol @1611 + ofdmframegen_print @1612 + ofdmframegen_reset @1613 + ofdmframegen_write_S0a @1614 + ofdmframegen_write_S0b @1615 + ofdmframegen_write_S1 @1616 + ofdmframegen_writesymbol @1617 + ofdmframegen_writetail @1618 + ofdmframesync_S0_metrics @1619 + ofdmframesync_create @1620 + ofdmframesync_debug_disable @1621 + ofdmframesync_debug_enable @1622 + ofdmframesync_debug_print @1623 + ofdmframesync_destroy @1624 + ofdmframesync_estimate_eqgain @1625 + ofdmframesync_estimate_eqgain_poly @1626 + ofdmframesync_estimate_gain_S0 @1627 + ofdmframesync_estimate_gain_S1 @1628 + ofdmframesync_execute @1629 + ofdmframesync_execute_S0a @1630 + ofdmframesync_execute_S0b @1631 + ofdmframesync_execute_S1 @1632 + ofdmframesync_execute_rxsymbols @1633 + ofdmframesync_execute_seekplcp @1634 + ofdmframesync_get_cfo @1635 + ofdmframesync_get_rssi @1636 + ofdmframesync_print @1637 + ofdmframesync_reset @1638 + ofdmframesync_rxsymbol @1639 + optim_sort @1640 + optim_threshold_switch @1641 + packetizer_compute_dec_msg_len @1642 + packetizer_compute_enc_msg_len @1643 + packetizer_create @1644 + packetizer_decode @1645 + packetizer_decode_soft @1646 + packetizer_destroy @1647 + packetizer_encode @1648 + packetizer_get_crc @1649 + packetizer_get_dec_msg_len @1650 + packetizer_get_enc_msg_len @1651 + packetizer_get_fec0 @1652 + packetizer_get_fec1 @1653 + packetizer_print @1654 + packetizer_realloc_buffers @1655 + packetizer_recreate @1656 + packetizer_set_scheme @1657 + poly_expandbinomial @1658 + poly_expandbinomial_pm @1659 + poly_expandroots @1660 + poly_expandroots2 @1661 + poly_findroots @1662 + poly_findroots_bairstow @1663 + poly_findroots_bairstow_recursion @1664 + poly_findroots_durandkerner @1665 + poly_fit @1666 + poly_fit_lagrange @1667 + poly_fit_lagrange_barycentric @1668 + poly_interp_lagrange @1669 + poly_mul @1670 + poly_val @1671 + poly_val_lagrange_barycentric @1672 + polyc_expandbinomial @1673 + polyc_expandbinomial_pm @1674 + polyc_expandroots @1675 + polyc_expandroots2 @1676 + polyc_findroots @1677 + polyc_findroots_bairstow @1678 + polyc_findroots_bairstow_recursion @1679 + polyc_findroots_durandkerner @1680 + polyc_fit @1681 + polyc_fit_lagrange @1682 + polyc_fit_lagrange_barycentric @1683 + polyc_interp_lagrange @1684 + polyc_mul @1685 + polyc_val @1686 + polyc_val_lagrange_barycentric @1687 + polycf_expandbinomial @1688 + polycf_expandbinomial_pm @1689 + polycf_expandroots @1690 + polycf_expandroots2 @1691 + polycf_findroots @1692 + polycf_findroots_bairstow @1693 + polycf_findroots_bairstow_recursion @1694 + polycf_findroots_durandkerner @1695 + polycf_fit @1696 + polycf_fit_lagrange @1697 + polycf_fit_lagrange_barycentric @1698 + polycf_interp_lagrange @1699 + polycf_mul @1700 + polycf_val @1701 + polycf_val_lagrange_barycentric @1702 + polyf_expandbinomial @1703 + polyf_expandbinomial_pm @1704 + polyf_expandroots @1705 + polyf_expandroots2 @1706 + polyf_findroots @1707 + polyf_findroots_bairstow @1708 + polyf_findroots_bairstow_recursion @1709 + polyf_findroots_durandkerner @1710 + polyf_fit @1711 + polyf_fit_lagrange @1712 + polyf_fit_lagrange_barycentric @1713 + polyf_interp_lagrange @1714 + polyf_mul @1715 + polyf_val @1716 + polyf_val_lagrange_barycentric @1717 + presync_cccf_correlate @1718 + presync_cccf_correlatex @1719 + presync_cccf_create @1720 + presync_cccf_destroy @1721 + presync_cccf_print @1722 + presync_cccf_push @1723 + presync_cccf_reset @1724 + qdetector_cccf_create @1725 + qdetector_cccf_create_gmsk @1726 + qdetector_cccf_create_linear @1727 + qdetector_cccf_destroy @1728 + qdetector_cccf_execute @1729 + qdetector_cccf_execute_align @1730 + qdetector_cccf_execute_seek @1731 + qdetector_cccf_get_buf_len @1732 + qdetector_cccf_get_dphi @1733 + qdetector_cccf_get_gamma @1734 + qdetector_cccf_get_phi @1735 + qdetector_cccf_get_seq_len @1736 + qdetector_cccf_get_sequence @1737 + qdetector_cccf_get_tau @1738 + qdetector_cccf_print @1739 + qdetector_cccf_reset @1740 + qdetector_cccf_set_range @1741 + qdetector_cccf_set_threshold @1742 + qnsearch_compute_Hessian @1743 + qnsearch_compute_gradient @1744 + qnsearch_create @1745 + qnsearch_destroy @1746 + qnsearch_normalize_gradient @1747 + qnsearch_print @1748 + qnsearch_reset @1749 + qnsearch_run @1750 + qnsearch_step @1751 + qpacketmodem_configure @1752 + qpacketmodem_create @1753 + qpacketmodem_decode @1754 + qpacketmodem_decode_bits @1755 + qpacketmodem_decode_soft @1756 + qpacketmodem_decode_syms @1757 + qpacketmodem_destroy @1758 + qpacketmodem_encode @1759 + qpacketmodem_encode_syms @1760 + qpacketmodem_get_crc @1761 + qpacketmodem_get_fec0 @1762 + qpacketmodem_get_fec1 @1763 + qpacketmodem_get_frame_len @1764 + qpacketmodem_get_modscheme @1765 + qpacketmodem_get_payload_len @1766 + qpacketmodem_print @1767 + qpacketmodem_reset @1768 + qpilotgen_create @1769 + qpilotgen_destroy @1770 + qpilotgen_execute @1771 + qpilotgen_get_frame_len @1772 + qpilotgen_print @1773 + qpilotgen_recreate @1774 + qpilotgen_reset @1775 + qpilotsync_create @1776 + qpilotsync_destroy @1777 + qpilotsync_execute @1778 + qpilotsync_get_dphi @1779 + qpilotsync_get_frame_len @1780 + qpilotsync_get_gain @1781 + qpilotsync_get_phi @1782 + qpilotsync_print @1783 + qpilotsync_recreate @1784 + qpilotsync_reset @1785 + qsourcecf_create_modem @1786 + qsourcecf_create_noise @1787 + qsourcecf_create_tone @1788 + qsourcecf_destroy @1789 + qsourcecf_disable @1790 + qsourcecf_enable @1791 + qsourcecf_gen_sample @1792 + qsourcecf_print @1793 + qsourcecf_reset @1794 + qsourcecf_set_frequency @1795 + qsourcecf_set_gain @1796 + quantize_adc @1797 + quantize_dac @1798 + quantizercf_create @1799 + quantizercf_destroy @1800 + quantizercf_execute_adc @1801 + quantizercf_execute_dac @1802 + quantizercf_print @1803 + quantizerf_create @1804 + quantizerf_destroy @1805 + quantizerf_execute_adc @1806 + quantizerf_execute_dac @1807 + quantizerf_print @1808 + randexpf @1809 + randexpf_cdf @1810 + randexpf_pdf @1811 + randf @1812 + randf_cdf @1813 + randf_pdf @1814 + randgammaf @1815 + randgammaf_cdf @1816 + randgammaf_delta @1817 + randgammaf_pdf @1818 + randnakmf @1819 + randnakmf_cdf @1820 + randnakmf_pdf @1821 + randnf @1822 + randnf_cdf @1823 + randnf_pdf @1824 + randricekf @1825 + randricekf_cdf @1826 + randricekf_pdf @1827 + randweibf @1828 + randweibf_cdf @1829 + randweibf_pdf @1830 + resamp2_cccf_analyzer_execute @1831 + resamp2_cccf_create @1832 + resamp2_cccf_decim_execute @1833 + resamp2_cccf_destroy @1834 + resamp2_cccf_filter_execute @1835 + resamp2_cccf_get_delay @1836 + resamp2_cccf_interp_execute @1837 + resamp2_cccf_print @1838 + resamp2_cccf_recreate @1839 + resamp2_cccf_reset @1840 + resamp2_cccf_synthesizer_execute @1841 + resamp2_crcf_analyzer_execute @1842 + resamp2_crcf_create @1843 + resamp2_crcf_decim_execute @1844 + resamp2_crcf_destroy @1845 + resamp2_crcf_filter_execute @1846 + resamp2_crcf_get_delay @1847 + resamp2_crcf_interp_execute @1848 + resamp2_crcf_print @1849 + resamp2_crcf_recreate @1850 + resamp2_crcf_reset @1851 + resamp2_crcf_synthesizer_execute @1852 + resamp2_rrrf_analyzer_execute @1853 + resamp2_rrrf_create @1854 + resamp2_rrrf_decim_execute @1855 + resamp2_rrrf_destroy @1856 + resamp2_rrrf_filter_execute @1857 + resamp2_rrrf_get_delay @1858 + resamp2_rrrf_interp_execute @1859 + resamp2_rrrf_print @1860 + resamp2_rrrf_recreate @1861 + resamp2_rrrf_reset @1862 + resamp2_rrrf_synthesizer_execute @1863 + resamp_cccf_adjust_rate @1864 + resamp_cccf_create @1865 + resamp_cccf_create_default @1866 + resamp_cccf_destroy @1867 + resamp_cccf_execute @1868 + resamp_cccf_execute_block @1869 + resamp_cccf_get_delay @1870 + resamp_cccf_print @1871 + resamp_cccf_reset @1872 + resamp_cccf_set_rate @1873 + resamp_cccf_update_timing_state @1874 + resamp_crcf_adjust_rate @1875 + resamp_crcf_create @1876 + resamp_crcf_create_default @1877 + resamp_crcf_destroy @1878 + resamp_crcf_execute @1879 + resamp_crcf_execute_block @1880 + resamp_crcf_get_delay @1881 + resamp_crcf_print @1882 + resamp_crcf_reset @1883 + resamp_crcf_set_rate @1884 + resamp_crcf_update_timing_state @1885 + resamp_rrrf_adjust_rate @1886 + resamp_rrrf_create @1887 + resamp_rrrf_create_default @1888 + resamp_rrrf_destroy @1889 + resamp_rrrf_execute @1890 + resamp_rrrf_execute_block @1891 + resamp_rrrf_get_delay @1892 + resamp_rrrf_print @1893 + resamp_rrrf_reset @1894 + resamp_rrrf_set_rate @1895 + resamp_rrrf_update_timing_state @1896 + rkaiser_approximate_rho @1897 + scramble_data @1898 + secded2216_P @1899 DATA + secded2216_syndrome_w1 @1900 DATA + secded3932_P @1901 DATA + secded3932_syndrome_w1 @1902 DATA + secded7264_P @1903 DATA + secded7264_syndrome_w1 @1904 DATA + sincf @1905 + smatrix_indexsearch @1906 + smatrixb_clear @1907 + smatrixb_create @1908 + smatrixb_create_array @1909 + smatrixb_delete @1910 + smatrixb_destroy @1911 + smatrixb_eye @1912 + smatrixb_get @1913 + smatrixb_insert @1914 + smatrixb_isset @1915 + smatrixb_mul @1916 + smatrixb_mulf @1917 + smatrixb_print @1918 + smatrixb_print_expanded @1919 + smatrixb_reset @1920 + smatrixb_reset_max_mlist @1921 + smatrixb_reset_max_nlist @1922 + smatrixb_set @1923 + smatrixb_size @1924 + smatrixb_vmul @1925 + smatrixb_vmulf @1926 + smatrixf_clear @1927 + smatrixf_create @1928 + smatrixf_create_array @1929 + smatrixf_delete @1930 + smatrixf_destroy @1931 + smatrixf_eye @1932 + smatrixf_get @1933 + smatrixf_insert @1934 + smatrixf_isset @1935 + smatrixf_mul @1936 + smatrixf_print @1937 + smatrixf_print_expanded @1938 + smatrixf_reset @1939 + smatrixf_reset_max_mlist @1940 + smatrixf_reset_max_nlist @1941 + smatrixf_set @1942 + smatrixf_size @1943 + smatrixf_vmul @1944 + smatrixi_clear @1945 + smatrixi_create @1946 + smatrixi_create_array @1947 + smatrixi_delete @1948 + smatrixi_destroy @1949 + smatrixi_eye @1950 + smatrixi_get @1951 + smatrixi_insert @1952 + smatrixi_isset @1953 + smatrixi_mul @1954 + smatrixi_print @1955 + smatrixi_print_expanded @1956 + smatrixi_reset @1957 + smatrixi_reset_max_mlist @1958 + smatrixi_reset_max_nlist @1959 + smatrixi_set @1960 + smatrixi_size @1961 + smatrixi_vmul @1962 + spgramcf_create @1963 + spgramcf_create_default @1964 + spgramcf_destroy @1965 + spgramcf_estimate_psd @1966 + spgramcf_export_gnuplot @1967 + spgramcf_get_delay @1968 + spgramcf_get_nfft @1969 + spgramcf_get_num_samples @1970 + spgramcf_get_num_samples_total @1971 + spgramcf_get_num_transforms @1972 + spgramcf_get_num_transforms_total @1973 + spgramcf_get_psd @1974 + spgramcf_get_window_len @1975 + spgramcf_print @1976 + spgramcf_push @1977 + spgramcf_reset @1978 + spgramcf_set_alpha @1979 + spgramcf_step @1980 + spgramcf_write @1981 + spgramf_create @1982 + spgramf_create_default @1983 + spgramf_destroy @1984 + spgramf_estimate_psd @1985 + spgramf_export_gnuplot @1986 + spgramf_get_delay @1987 + spgramf_get_nfft @1988 + spgramf_get_num_samples @1989 + spgramf_get_num_samples_total @1990 + spgramf_get_num_transforms @1991 + spgramf_get_num_transforms_total @1992 + spgramf_get_psd @1993 + spgramf_get_window_len @1994 + spgramf_print @1995 + spgramf_push @1996 + spgramf_reset @1997 + spgramf_set_alpha @1998 + spgramf_step @1999 + spgramf_write @2000 + sumproduct_phi @2001 + symstreamcf_create @2002 + symstreamcf_create_linear @2003 + symstreamcf_destroy @2004 + symstreamcf_fill_buffer @2005 + symstreamcf_print @2006 + symstreamcf_reset @2007 + symstreamcf_write_samples @2008 + symsync_crcf_advance_internal_loop @2009 + symsync_crcf_create @2010 + symsync_crcf_create_kaiser @2011 + symsync_crcf_create_rnyquist @2012 + symsync_crcf_destroy @2013 + symsync_crcf_execute @2014 + symsync_crcf_get_tau @2015 + symsync_crcf_lock @2016 + symsync_crcf_output_debug_file @2017 + symsync_crcf_print @2018 + symsync_crcf_reset @2019 + symsync_crcf_set_lf_bw @2020 + symsync_crcf_set_output_rate @2021 + symsync_crcf_step @2022 + symsync_crcf_unlock @2023 + symsync_rrrf_advance_internal_loop @2024 + symsync_rrrf_create @2025 + symsync_rrrf_create_kaiser @2026 + symsync_rrrf_create_rnyquist @2027 + symsync_rrrf_destroy @2028 + symsync_rrrf_execute @2029 + symsync_rrrf_get_tau @2030 + symsync_rrrf_lock @2031 + symsync_rrrf_output_debug_file @2032 + symsync_rrrf_print @2033 + symsync_rrrf_reset @2034 + symsync_rrrf_set_lf_bw @2035 + symsync_rrrf_set_output_rate @2036 + symsync_rrrf_step @2037 + symsync_rrrf_unlock @2038 + symtrack_cccf_adjust_phase @2039 + symtrack_cccf_create @2040 + symtrack_cccf_create_default @2041 + symtrack_cccf_destroy @2042 + symtrack_cccf_execute @2043 + symtrack_cccf_execute_block @2044 + symtrack_cccf_print @2045 + symtrack_cccf_reset @2046 + symtrack_cccf_set_bandwidth @2047 + symtrack_cccf_set_modscheme @2048 + triangular @2049 + tvmpch_cccf_create @2050 + tvmpch_cccf_destroy @2051 + tvmpch_cccf_execute @2052 + tvmpch_cccf_execute_block @2053 + tvmpch_cccf_print @2054 + tvmpch_cccf_push @2055 + tvmpch_cccf_reset @2056 + unscramble_data @2057 + unscramble_data_soft @2058 + wdelaycf_create @2059 + wdelaycf_destroy @2060 + wdelaycf_print @2061 + wdelaycf_push @2062 + wdelaycf_read @2063 + wdelaycf_recreate @2064 + wdelaycf_reset @2065 + wdelayf_create @2066 + wdelayf_destroy @2067 + wdelayf_print @2068 + wdelayf_push @2069 + wdelayf_read @2070 + wdelayf_recreate @2071 + wdelayf_reset @2072 + windowcf_create @2073 + windowcf_debug_print @2074 + windowcf_destroy @2075 + windowcf_index @2076 + windowcf_print @2077 + windowcf_push @2078 + windowcf_read @2079 + windowcf_recreate @2080 + windowcf_reset @2081 + windowcf_write @2082 + windowf_create @2083 + windowf_debug_print @2084 + windowf_destroy @2085 + windowf_index @2086 + windowf_print @2087 + windowf_push @2088 + windowf_read @2089 + windowf_recreate @2090 + windowf_reset @2091 + windowf_write @2092 diff --git a/external/liquid-dsp/msvc/64/libliquid.dll b/external/liquid-dsp/msvc/64/libliquid.dll index deffbce..1e488f4 100644 Binary files a/external/liquid-dsp/msvc/64/libliquid.dll and b/external/liquid-dsp/msvc/64/libliquid.dll differ diff --git a/external/liquid-dsp/msvc/64/libliquid.exp b/external/liquid-dsp/msvc/64/libliquid.exp deleted file mode 100644 index 7e9f89b..0000000 Binary files a/external/liquid-dsp/msvc/64/libliquid.exp and /dev/null differ diff --git a/external/liquid-dsp/msvc/64/libliquid.lib b/external/liquid-dsp/msvc/64/libliquid.lib index 0d4a1f9..2cef2fe 100644 Binary files a/external/liquid-dsp/msvc/64/libliquid.lib and b/external/liquid-dsp/msvc/64/libliquid.lib differ diff --git a/external/msvc/x64/vc_redist.x64.exe b/external/msvc/x64/vc_redist.x64.exe index 048fda2..02bda21 100644 Binary files a/external/msvc/x64/vc_redist.x64.exe and b/external/msvc/x64/vc_redist.x64.exe differ diff --git a/external/msvc/x86/libgcc_s_dw2-1.dll b/external/msvc/x86/libgcc_s_dw2-1.dll index 99a76cf..06af097 100644 Binary files a/external/msvc/x86/libgcc_s_dw2-1.dll and b/external/msvc/x86/libgcc_s_dw2-1.dll differ diff --git a/external/msvc/x86/libwinpthread-1.dll b/external/msvc/x86/libwinpthread-1.dll new file mode 100644 index 0000000..8805dd7 Binary files /dev/null and b/external/msvc/x86/libwinpthread-1.dll differ diff --git a/external/msvc/x86/vc_redist.x86.exe b/external/msvc/x86/vc_redist.x86.exe index caea04a..2b89c83 100644 Binary files a/external/msvc/x86/vc_redist.x86.exe and b/external/msvc/x86/vc_redist.x86.exe differ diff --git a/src/AppConfig.cpp b/src/AppConfig.cpp index 39d2f4d..eea6539 100644 --- a/src/AppConfig.cpp +++ b/src/AppConfig.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "AppConfig.h" #include "CubicSDR.h" @@ -28,7 +31,6 @@ long long DeviceConfig::getOffset() { return offset.load(); } - void DeviceConfig::setSampleRate(long srate) { sampleRate.store(srate); } @@ -82,7 +84,7 @@ void DeviceConfig::save(DataNode *node) { std::lock_guard < std::mutex > lock(busy_lock); *node->newChild("id") = deviceId; *node->newChild("name") = deviceName; - *node->newChild("ppm") = (int)ppm.load(); + *node->newChild("ppm") = ppm.load(); *node->newChild("offset") = offset.load(); *node->newChild("sample_rate") = sampleRate.load(); *node->newChild("agc_mode") = agcMode.load()?1:0; @@ -289,7 +291,13 @@ AppConfig::AppConfig() : configName("") { centerFreq.store(100000000); waterfallLinesPerSec.store(DEFAULT_WATERFALL_LPS); spectrumAvgSpeed.store(0.65f); + dbOffset.store(0); modemPropsCollapsed.store(false); + mainSplit = -1; + visSplit = -1; + bookmarkSplit = 200; + bookmarksVisible.store(true); + #ifdef USE_HAMLIB rigEnabled.store(false); rigModel.store(1); @@ -425,6 +433,14 @@ float AppConfig::getSpectrumAvgSpeed() { return spectrumAvgSpeed.load(); } +void AppConfig::setDBOffset(int offset) { + this->dbOffset.store(offset); +} + +int AppConfig::getDBOffset() { + return dbOffset.load(); +} + void AppConfig::setManualDevices(std::vector manuals) { manualDevices = manuals; } @@ -433,6 +449,39 @@ std::vector AppConfig::getManualDevices() { return manualDevices; } +void AppConfig::setMainSplit(float value) { + mainSplit.store(value); +} + +float AppConfig::getMainSplit() { + return mainSplit.load(); +} + +void AppConfig::setVisSplit(float value) { + visSplit.store(value); +} + +float AppConfig::getVisSplit() { + return visSplit.load(); +} + +void AppConfig::setBookmarkSplit(float value) { + bookmarkSplit.store(value); +} + +float AppConfig::getBookmarkSplit() { + return bookmarkSplit.load(); +} + +void AppConfig::setBookmarksVisible(bool state) { + bookmarksVisible.store(state); +} + +bool AppConfig::getBookmarksVisible() { + return bookmarksVisible.load(); +} + + void AppConfig::setConfigName(std::string configName) { this->configName = configName; } @@ -478,6 +527,12 @@ bool AppConfig::save() { *window_node->newChild("waterfall_lps") = waterfallLinesPerSec.load(); *window_node->newChild("spectrum_avg") = spectrumAvgSpeed.load(); *window_node->newChild("modemprops_collapsed") = modemPropsCollapsed.load();; + *window_node->newChild("db_offset") = dbOffset.load(); + + *window_node->newChild("main_split") = mainSplit.load(); + *window_node->newChild("vis_split") = visSplit.load(); + *window_node->newChild("bookmark_split") = bookmarkSplit.load(); + *window_node->newChild("bookmark_visible") = bookmarksVisible.load(); } DataNode *devices_node = cfg.rootNode()->newChild("devices"); @@ -556,12 +611,13 @@ bool AppConfig::load() { } if (cfg.rootNode()->hasAnother("window")) { - int x,y,w,h; - int max,tips,lpm,mpc; + int x = 0 ,y = 0 ,w = 0 ,h = 0; + int max = 0 ,tips = 0 ,lpm = 0 ,mpc = 0; DataNode *win_node = cfg.rootNode()->getNext("window"); if (win_node->hasAnother("w") && win_node->hasAnother("h") && win_node->hasAnother("x") && win_node->hasAnother("y")) { + win_node->getNext("x")->element()->get(x); win_node->getNext("y")->element()->get(y); win_node->getNext("w")->element()->get(w); @@ -628,6 +684,37 @@ bool AppConfig::load() { win_node->getNext("modemprops_collapsed")->element()->get(mpc); modemPropsCollapsed.store(mpc?true:false); } + + if (win_node->hasAnother("db_offset")) { + DataNode *offset_node = win_node->getNext("db_offset"); + int offsetValue = 0; + offset_node->element()->get(offsetValue); + setDBOffset(offsetValue); + } + + if (win_node->hasAnother("main_split")) { + float gVal; + win_node->getNext("main_split")->element()->get(gVal); + mainSplit.store(gVal); + } + + if (win_node->hasAnother("vis_split")) { + float gVal; + win_node->getNext("vis_split")->element()->get(gVal); + visSplit.store(gVal); + } + + if (win_node->hasAnother("bookmark_split")) { + float gVal; + win_node->getNext("bookmark_split")->element()->get(gVal); + bookmarkSplit.store(gVal); + } + + if (win_node->hasAnother("bookmark_visible")) { + int bVal; + win_node->getNext("bookmark_visible")->element()->get(bVal); + bookmarksVisible.store(bVal); + } } if (cfg.rootNode()->hasAnother("devices")) { diff --git a/src/AppConfig.h b/src/AppConfig.h index 96570aa..5d78e78 100644 --- a/src/AppConfig.h +++ b/src/AppConfig.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -112,9 +115,25 @@ public: void setSpectrumAvgSpeed(float avgSpeed); float getSpectrumAvgSpeed(); + void setDBOffset(int offset); + int getDBOffset(); + void setManualDevices(std::vector manuals); std::vector getManualDevices(); + void setMainSplit(float value); + float getMainSplit(); + + void setVisSplit(float value); + float getVisSplit(); + + void setBookmarkSplit(float value); + float getBookmarkSplit(); + + void setBookmarksVisible(bool state); + bool getBookmarksVisible(); + + #if USE_HAMLIB int getRigModel(); void setRigModel(int rigModel); @@ -157,8 +176,10 @@ private: std::atomic_llong snap; std::atomic_llong centerFreq; std::atomic_int waterfallLinesPerSec; - std::atomic spectrumAvgSpeed; + std::atomic spectrumAvgSpeed, mainSplit, visSplit, bookmarkSplit; + std::atomic_int dbOffset; std::vector manualDevices; + std::atomic_bool bookmarksVisible; #if USE_HAMLIB std::atomic_int rigModel, rigRate; std::string rigPort; diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index dff457b..599384a 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "AppFrame.h" #include "wx/wxprec.h" @@ -20,6 +23,7 @@ #include "DataTree.h" #include "ColorTheme.h" #include "DemodulatorMgr.h" +#include "ImagePanel.h" #include @@ -43,6 +47,10 @@ wxEND_EVENT_TABLE() #include "RigThread.h" #endif + +/* split a string by 'seperator' into a vector of string */ +std::vector str_explode(const std::string &seperator, const std::string &in_str); + #define APPFRAME_MODEMPROPS_MINSIZE 20 #define APPFRAME_MODEMPROPS_MAXSIZE 240 @@ -54,21 +62,40 @@ AppFrame::AppFrame() : #endif wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); - wxBoxSizer *demodVisuals = new wxBoxSizer(wxVERTICAL); demodTray = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *demodScopeTray = new wxBoxSizer(wxVERTICAL); wxBoxSizer *demodTunerTray = new wxBoxSizer(wxHORIZONTAL); - int attribList[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; + std::vector attribList = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; //wxGLAttributes attribList; //attribList.PlatformDefaults().RGBA().DoubleBuffer().EndList(); //attribList.PlatformDefaults().MinRGBA(8, 8, 8, 8).DoubleBuffer().Depth(16).EndList(); mainSplitter = new wxSplitterWindow( this, wxID_MAIN_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); - mainSplitter->SetSashGravity(10.0/37.0); + mainSplitter->SetSashGravity(10.0f / 37.0f); mainSplitter->SetMinimumPaneSize(1); + wxPanel *demodPanel = new wxPanel(mainSplitter, wxID_ANY); + +#ifdef CUBICSDR_HEADER_IMAGE + wxFileName exePath = wxFileName(wxStandardPaths::Get().GetExecutablePath()); + std::string headerPath = exePath.GetPath().ToStdString(); + headerPath += filePathSeparator + std::string("" CUBICSDR_HEADER_IMAGE); + wxInitAllImageHandlers(); + + ImagePanel *imgPanel = new ImagePanel(demodPanel, headerPath, wxBITMAP_TYPE_ANY); + + std::string headerBgColor = "" CUBICSDR_HEADER_BG; + if (headerBgColor != "") { + imgPanel->SetBackgroundColour(wxColour(headerBgColor)); + } + + imgPanel->SetBestFittingSize(wxSize(200, 0)); + + demodTray->Add(imgPanel, 0, wxEXPAND | wxALL, 0); + demodTray->AddSpacer(1); +#endif gainCanvas = new GainCanvas(demodPanel, attribList); @@ -77,16 +104,23 @@ AppFrame::AppFrame() : gainSpacerItem = demodTray->AddSpacer(1); gainSpacerItem->Show(false); + std::vector modemList = { "FM", "FMS", "NBFM", "AM", "LSB", "USB", "DSB", "I/Q" }; + +#ifdef CUBICSDR_MODEM_EXCLUDE + std::string excludeListStr = "" CUBICSDR_MODEM_EXCLUDE; + std::vector excludeList = str_explode(",",excludeListStr); + for (auto ex_i : excludeList) { + std::vector::iterator found_i = std::find(modemList.begin(),modemList.end(),ex_i); + if (found_i != modemList.end()) { + modemList.erase(found_i); + } + } +#endif + demodModeSelector = new ModeSelectorCanvas(demodPanel, attribList); - demodModeSelector->addChoice("FM"); - demodModeSelector->addChoice("FMS"); - demodModeSelector->addChoice("NBFM"); - demodModeSelector->addChoice("AM"); - demodModeSelector->addChoice("LSB"); - demodModeSelector->addChoice("USB"); - demodModeSelector->addChoice("DSB"); - demodModeSelector->addChoice("I/Q"); - demodModeSelector->setSelection("FM"); + for (auto mt_i : modemList) { + demodModeSelector->addChoice(mt_i); + } demodModeSelector->setHelpTip("Choose modulation type: Frequency Modulation (Hotkey F), Amplitude Modulation (A) and Lower (L), Upper (U), Double Side-Band and more."); demodModeSelector->SetMinSize(wxSize(50,-1)); demodModeSelector->SetMaxSize(wxSize(50,-1)); @@ -117,14 +151,20 @@ AppFrame::AppFrame() : modemProps->SetMinSize(wxSize(APPFRAME_MODEMPROPS_MAXSIZE,-1)); modemProps->SetMaxSize(wxSize(APPFRAME_MODEMPROPS_MAXSIZE,-1)); - modemProps->Hide(); + ModemArgInfoList dummyInfo; + modemProps->initProperties(dummyInfo, nullptr); + modemProps->updateTheme(); + demodTray->Add(modemProps, 15, wxEXPAND | wxALL, 0); #ifndef __APPLE__ demodTray->AddSpacer(1); #endif - - wxGetApp().getDemodSpectrumProcessor()->setup(1024); + +#if CUBICSDR_ENABLE_VIEW_DEMOD + wxBoxSizer *demodVisuals = new wxBoxSizer(wxVERTICAL); + + wxGetApp().getDemodSpectrumProcessor()->setup(DEFAULT_DMOD_FFT_SIZE); demodSpectrumCanvas = new SpectrumCanvas(demodPanel, attribList); demodSpectrumCanvas->setView(wxGetApp().getConfig()->getCenterFreq(), 300000); demodVisuals->Add(demodSpectrumCanvas, 3, wxEXPAND | wxALL, 0); @@ -133,7 +173,7 @@ AppFrame::AppFrame() : demodVisuals->AddSpacer(1); demodWaterfallCanvas = new WaterfallCanvas(demodPanel, attribList); - demodWaterfallCanvas->setup(1024, 128); + demodWaterfallCanvas->setup(DEFAULT_DMOD_FFT_SIZE, DEFAULT_DEMOD_WATERFALL_LINES_NB); demodWaterfallCanvas->setView(wxGetApp().getConfig()->getCenterFreq(), 300000); demodWaterfallCanvas->attachSpectrumCanvas(demodSpectrumCanvas); demodWaterfallCanvas->setMinBandwidth(8000); @@ -141,13 +181,19 @@ AppFrame::AppFrame() : demodVisuals->Add(demodWaterfallCanvas, 6, wxEXPAND | wxALL, 0); wxGetApp().getDemodSpectrumProcessor()->attachOutput(demodWaterfallCanvas->getVisualDataQueue()); demodWaterfallCanvas->getVisualDataQueue()->set_max_num_items(3); + demodWaterfallCanvas->setLinesPerSecond((int)(DEFAULT_DEMOD_WATERFALL_LINES_NB / DEMOD_WATERFALL_DURATION_IN_SECONDS)); + demodVisuals->SetMinSize(wxSize(128,-1)); demodTray->Add(demodVisuals, 30, wxEXPAND | wxALL, 0); demodTray->AddSpacer(1); - +#else + demodSpectrumCanvas = nullptr; + demodWaterfallCanvas = nullptr; +#endif + demodSignalMeter = new MeterCanvas(demodPanel, attribList); demodSignalMeter->setMax(DEMOD_SIGNAL_MAX); demodSignalMeter->setMin(DEMOD_SIGNAL_MIN); @@ -160,15 +206,19 @@ AppFrame::AppFrame() : demodTray->AddSpacer(1); +#if CUBICSDR_ENABLE_VIEW_SCOPE scopeCanvas = new ScopeCanvas(demodPanel, attribList); - scopeCanvas->setHelpTip("Audio Visuals, drag left/right to toggle Scope or Spectrum."); + scopeCanvas->setHelpTip("Audio Visuals, drag left/right to toggle Scope or Spectrum, 'B' to toggle decibels display."); scopeCanvas->SetMinSize(wxSize(128,-1)); demodScopeTray->Add(scopeCanvas, 8, wxEXPAND | wxALL, 0); - wxGetApp().getScopeProcessor()->setup(1024); + wxGetApp().getScopeProcessor()->setup(DEFAULT_SCOPE_FFT_SIZE); wxGetApp().getScopeProcessor()->attachOutput(scopeCanvas->getInputQueue()); demodScopeTray->AddSpacer(1); - +#else + scopeCanvas = nullptr; +#endif + deltaLockButton = new ModeSelectorCanvas(demodPanel, attribList); deltaLockButton->addChoice(1, "V"); deltaLockButton->setPadding(-1,-1); @@ -232,19 +282,23 @@ AppFrame::AppFrame() : // vbox->Add(demodTray, 12, wxEXPAND | wxALL, 0); // vbox->AddSpacer(1); - - mainVisSplitter = new wxSplitterWindow( mainSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); - mainVisSplitter->SetSashGravity(6.0/25.0); + bookmarkSplitter = new wxSplitterWindow(mainSplitter, wxID_BM_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); + bookmarkSplitter->SetMinimumPaneSize(1); + bookmarkSplitter->SetSashGravity(1.0f / 20.0f); + + mainVisSplitter = new wxSplitterWindow( bookmarkSplitter, wxID_VIS_SPLITTER, wxDefaultPosition, wxDefaultSize, wxSP_3DSASH | wxSP_LIVE_UPDATE ); mainVisSplitter->SetMinimumPaneSize(1); + mainVisSplitter->SetSashGravity(6.0f / 25.0f); // mainVisSplitter->Connect( wxEVT_IDLE, wxIdleEventHandler( AppFrame::mainVisSplitterIdle ), NULL, this ); wxPanel *spectrumPanel = new wxPanel(mainVisSplitter, wxID_ANY); wxBoxSizer *spectrumSizer = new wxBoxSizer(wxHORIZONTAL); - wxGetApp().getSpectrumProcessor()->setup(2048); + wxGetApp().getSpectrumProcessor()->setup(DEFAULT_FFT_SIZE); spectrumCanvas = new SpectrumCanvas(spectrumPanel, attribList); spectrumCanvas->setShowDb(true); + spectrumCanvas->setUseDBOfs(true); spectrumCanvas->setScaleFactorEnabled(true); wxGetApp().getSpectrumProcessor()->attachOutput(spectrumCanvas->getVisualDataQueue()); @@ -284,7 +338,7 @@ AppFrame::AppFrame() : wxBoxSizer *wfSizer = new wxBoxSizer(wxHORIZONTAL); waterfallCanvas = new WaterfallCanvas(waterfallPanel, attribList); - waterfallCanvas->setup(2048, 512); + waterfallCanvas->setup(DEFAULT_FFT_SIZE, DEFAULT_MAIN_WATERFALL_LINES_NB); waterfallDataThread = new FFTVisualDataThread(); @@ -309,10 +363,19 @@ AppFrame::AppFrame() : // vbox->Add(wfSizer, 20, wxEXPAND | wxALL, 0); mainVisSplitter->SplitHorizontally( spectrumPanel, waterfallPanel, 0 ); - mainSplitter->SplitHorizontally( demodPanel, mainVisSplitter ); + + bookmarkView = new BookmarkView(bookmarkSplitter, wxID_ANY, wxDefaultPosition, wxSize(120,-1)); + + bookmarkSplitter->SplitVertically( bookmarkView, mainVisSplitter ); + mainSplitter->SplitHorizontally( demodPanel, bookmarkSplitter ); + + if (!wxGetApp().getConfig()->getBookmarksVisible()) { + bookmarkSplitter->Unsplit(bookmarkView); + bookmarkSplitter->Layout(); + } vbox->Add(mainSplitter, 1, wxEXPAND | wxALL, 0); - + // TODO: refactor these.. waterfallCanvas->attachSpectrumCanvas(spectrumCanvas); spectrumCanvas->attachWaterfallCanvas(waterfallCanvas); @@ -375,6 +438,8 @@ AppFrame::AppFrame() : } i++; } + + wxGetApp().getDemodMgr().setOutputDevices(outputDevices); // // for (mdevices_i = outputDevices.begin(); mdevices_i != outputDevices.end(); mdevices_i++) { // wxMenuItem *itm = menu->AppendRadioItem(wxID_RT_AUDIO_DEVICE + mdevices_i->first, mdevices_i->second.name, wxT("Description?")); @@ -467,6 +532,9 @@ AppFrame::AppFrame() : themeMenu->AppendRadioItem(wxID_THEME_HD, "HD")->Check(themeId==COLOR_THEME_HD); displayMenu->AppendSubMenu(themeMenu, wxT("&Color Scheme")); + + hideBookmarksItem = displayMenu->AppendCheckItem(wxID_DISPLAY_BOOKMARKS, wxT("Hide Bookmarks")); + hideBookmarksItem->Check(!wxGetApp().getConfig()->getBookmarksVisible()); GLFont::setScale((GLFont::GLFontScale)fontScale); @@ -585,13 +653,27 @@ AppFrame::AppFrame() : waterfallCanvas->setLinesPerSecond(wflps); ThemeMgr::mgr.setTheme(wxGetApp().getConfig()->getTheme()); + bookmarkView->updateTheme(); int mpc =wxGetApp().getConfig()->getModemPropsCollapsed(); if (mpc) { modemProps->setCollapsed(true); } - + + int msPos = wxGetApp().getConfig()->getMainSplit(); + if (msPos != -1) { + mainSplitter->SetSashPosition(msPos); + } + int bsPos = wxGetApp().getConfig()->getBookmarkSplit(); + if (bsPos != -1) { + bookmarkSplitter->SetSashPosition(bsPos); + } + int vsPos = wxGetApp().getConfig()->getVisSplit(); + if (vsPos != -1) { + mainVisSplitter->SetSashPosition(vsPos); + } + Show(); #ifdef _WIN32 @@ -608,6 +690,7 @@ AppFrame::AppFrame() : deviceChanged.store(false); devInfo = NULL; wxGetApp().deviceSelector(); + saveDisabled = false; // static const int attribs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; // wxLogStatus("Double-buffered display %s supported", wxGLCanvas::IsDisplaySupported(attribs) ? "is" : "not"); @@ -627,9 +710,13 @@ void AppFrame::initDeviceParams(SDRDeviceInfo *devInfo) { deviceChanged.store(true); } +void AppFrame::notifyDeviceChanged() { + deviceChanged.store(true); +} + void AppFrame::updateDeviceParams() { - if (!deviceChanged.load()) { + if (!deviceChanged.load() || devInfo == nullptr) { return; } @@ -649,6 +736,7 @@ void AppFrame::updateDeviceParams() { newSettingsMenu->AppendSeparator(); + newSettingsMenu->Append(wxID_SET_DB_OFFSET, "Power Level Offset"); newSettingsMenu->Append(wxID_SET_FREQ_OFFSET, "Frequency Offset"); if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) { @@ -717,16 +805,35 @@ void AppFrame::updateDeviceParams() { menuBar->Replace(1, newSettingsMenu, wxT("&Settings")); settingsMenu = newSettingsMenu; - // Build sample rate menu + // Build/Rebuild the sample rate menu : sampleRates = devInfo->getSampleRates(SOAPY_SDR_RX, 0); - sampleRateMenuItems.erase(sampleRateMenuItems.begin(),sampleRateMenuItems.end()); + sampleRateMenuItems.clear(); wxMenu *newSampleRateMenu = new wxMenu; int ofs = 0; + + //Current sample rate, try to keep it as is. long sampleRate = wxGetApp().getSampleRate(); + + long minRate = sampleRates.front(); + long maxRate = sampleRates.back(); + + //If it is beyond limits, make device choose a reasonable value + if (sampleRate < minRate || sampleRate > maxRate) { + sampleRate = devInfo->getSampleRateNear(SOAPY_SDR_RX, 0, sampleRate); + } + + //Check if a manual entry was previously set: if so, check its value is still within the limits of the device. If not so, reset it. + if (manualSampleRate > 0 && + (manualSampleRate < minRate || manualSampleRate > maxRate)) { + manualSampleRate = -1; + } + bool checked = false; for (vector::iterator i = sampleRates.begin(); i != sampleRates.end(); i++) { + sampleRateMenuItems[wxID_BANDWIDTH_BASE+ofs] = newSampleRateMenu->AppendRadioItem(wxID_BANDWIDTH_BASE+ofs, frequencyToStr(*i)); + if (sampleRate == (*i)) { sampleRateMenuItems[wxID_BANDWIDTH_BASE+ofs]->Check(true); checked = true; @@ -734,10 +841,26 @@ void AppFrame::updateDeviceParams() { ofs++; } - sampleRateMenuItems[wxID_BANDWIDTH_MANUAL] = newSampleRateMenu->AppendRadioItem(wxID_BANDWIDTH_MANUAL, wxT("Manual Entry")); + //Add a manual sample value radio button, but disabled by default in case the user + //never ever uses manual entry. + if (manualSampleRate <= 0) { + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL] = newSampleRateMenu->AppendRadioItem(wxID_BANDWIDTH_MANUAL, wxT("Manual : N/A")); + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Enable(false); + } + else { + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL] = newSampleRateMenu->AppendRadioItem(wxID_BANDWIDTH_MANUAL, wxT("Manual : ") + frequencyToStr(manualSampleRate)); + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Enable(true); + } + + //We apply the current sample rate after all if (!checked) { sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Check(true); } + + //Append a normal button (NOT a radio-button) for manual entry dialog at the end + newSampleRateMenu->AppendSeparator(); + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL_DIALOG] = newSampleRateMenu->Append(wxID_BANDWIDTH_MANUAL_DIALOG, wxT("Manual Entry...")); + menuBar->Replace(2, newSampleRateMenu, wxT("Sample &Rate")); sampleRateMenu = newSampleRateMenu; @@ -807,6 +930,71 @@ void AppFrame::disableRig() { } #endif +bool AppFrame::actionOnMenuDisplay(wxCommandEvent& event) { + + //by default, is managed. + bool bManaged = true; + + if (event.GetId() == wxID_THEME_DEFAULT) { + ThemeMgr::mgr.setTheme(COLOR_THEME_DEFAULT); + } + else if (event.GetId() == wxID_THEME_SHARP) { + ThemeMgr::mgr.setTheme(COLOR_THEME_SHARP); + } + else if (event.GetId() == wxID_THEME_BW) { + ThemeMgr::mgr.setTheme(COLOR_THEME_BW); + } + else if (event.GetId() == wxID_THEME_RAD) { + ThemeMgr::mgr.setTheme(COLOR_THEME_RAD); + } + else if (event.GetId() == wxID_THEME_TOUCH) { + ThemeMgr::mgr.setTheme(COLOR_THEME_TOUCH); + } + else if (event.GetId() == wxID_THEME_HD) { + ThemeMgr::mgr.setTheme(COLOR_THEME_HD); + } + else if (event.GetId() == wxID_THEME_RADAR) { + ThemeMgr::mgr.setTheme(COLOR_THEME_RADAR); + } + //Display : font sizes + else if (event.GetId() == wxID_DISPLAY_BASE) { + GLFont::setScale(GLFont::GLFONT_SCALE_NORMAL); + } + else if (event.GetId() == wxID_DISPLAY_BASE + 1) { + GLFont::setScale(GLFont::GLFONT_SCALE_MEDIUM); + } + else if (event.GetId() == wxID_DISPLAY_BASE + 2) { + GLFont::setScale(GLFont::GLFONT_SCALE_LARGE); + } + else if (event.GetId() == wxID_DISPLAY_BOOKMARKS) { + if (hideBookmarksItem->IsChecked()) { + bookmarkSplitter->Unsplit(bookmarkView); + bookmarkSplitter->Layout(); + } + else { + bookmarkSplitter->SplitVertically(bookmarkView, mainVisSplitter, wxGetApp().getConfig()->getBookmarkSplit()); + bookmarkSplitter->Layout(); + } + } + else { + bManaged = false; + } + + //update theme choice in children elements: + if (event.GetId() >= wxID_THEME_DEFAULT && event.GetId() <= wxID_THEME_RADAR) { + + gainCanvas->setThemeColors(); + modemProps->updateTheme(); + bookmarkView->updateTheme(); + } + + //force all windows refresh + if (bManaged) { + Refresh(); + } + + return bManaged; +} void AppFrame::OnMenu(wxCommandEvent& event) { @@ -839,17 +1027,6 @@ void AppFrame::OnMenu(wxCommandEvent& event) { lowPerfMode = lowPerfMenuItem->IsChecked(); wxGetApp().getConfig()->setLowPerfMode(lowPerfMode); -// long srate = wxGetApp().getSampleRate(); -// if (srate > CHANNELIZER_RATE_MAX && lowPerfMode) { -// if (wxGetApp().getSpectrumProcessor()->getFFTSize() != 1024) { -// setMainWaterfallFFTSize(1024); -// } -// } else if (srate > CHANNELIZER_RATE_MAX) { -// if (wxGetApp().getSpectrumProcessor()->getFFTSize() != 2048) { -// setMainWaterfallFFTSize(2048); -// } -// } - } else if (event.GetId() == wxID_SET_TIPS ) { if (wxGetApp().getConfig()->getShowTips()) { wxGetApp().getConfig()->setShowTips(false); @@ -864,6 +1041,12 @@ void AppFrame::OnMenu(wxCommandEvent& event) { if (ofs != -1) { wxGetApp().setOffset(ofs); } + } else if (event.GetId() == wxID_SET_DB_OFFSET) { + long ofs = wxGetNumberFromUser("Shift the displayed RF power level by this amount.\ni.e. -30 for -30 dB", "Decibels (dB)", + "Power Level Offset", wxGetApp().getConfig()->getDBOffset(), -1000, 1000, this); + if (ofs != -1) { + wxGetApp().getConfig()->setDBOffset(ofs); + } } else if (event.GetId() == wxID_AGC_CONTROL) { if (wxGetApp().getDevice() == NULL) { agcMenuItem->Check(true); @@ -930,45 +1113,23 @@ void AppFrame::OnMenu(wxCommandEvent& event) { waterfallSpeedMeter->setLevel(sqrt(DEFAULT_WATERFALL_LPS)); wxGetApp().getSpectrumProcessor()->setFFTAverageRate(0.65f); spectrumAvgMeter->setLevel(0.65f); - demodModeSelector->Refresh(); - demodTuner->Refresh(); + SetTitle(CUBICSDR_TITLE); currentSessionFile = ""; + bookmarkSplitter->Unsplit(bookmarkView); + bookmarkSplitter->SplitVertically( bookmarkView, mainVisSplitter, wxGetApp().getConfig()->getBookmarkSplit() ); + hideBookmarksItem->Check(false); + //force all windows refresh + Refresh(); + } else if (event.GetId() == wxID_CLOSE || event.GetId() == wxID_EXIT) { Close(false); - } else if (event.GetId() == wxID_THEME_DEFAULT) { - ThemeMgr::mgr.setTheme(COLOR_THEME_DEFAULT); - } else if (event.GetId() == wxID_THEME_SHARP) { - ThemeMgr::mgr.setTheme(COLOR_THEME_SHARP); - } else if (event.GetId() == wxID_THEME_BW) { - ThemeMgr::mgr.setTheme(COLOR_THEME_BW); - } else if (event.GetId() == wxID_THEME_RAD) { - ThemeMgr::mgr.setTheme(COLOR_THEME_RAD); - } else if (event.GetId() == wxID_THEME_TOUCH) { - ThemeMgr::mgr.setTheme(COLOR_THEME_TOUCH); - } else if (event.GetId() == wxID_THEME_HD) { - ThemeMgr::mgr.setTheme(COLOR_THEME_HD); - } else if (event.GetId() == wxID_THEME_RADAR) { - ThemeMgr::mgr.setTheme(COLOR_THEME_RADAR); } - //Display : font sizes - else if (event.GetId() == wxID_DISPLAY_BASE) { - GLFont::setScale(GLFont::GLFONT_SCALE_NORMAL); - //force all windows refresh - Refresh(); + else if (actionOnMenuDisplay(event)) { + //done in actionOnMenuDisplay + return; } - else if (event.GetId() == wxID_DISPLAY_BASE + 1) { - GLFont::setScale(GLFont::GLFONT_SCALE_MEDIUM); - //force all windows refresh - Refresh(); - } - else if (event.GetId() == wxID_DISPLAY_BASE + 2) { - GLFont::setScale(GLFont::GLFONT_SCALE_LARGE); - //force all windows refresh - Refresh(); - } - - if (event.GetId() >= wxID_SETTINGS_BASE && event.GetId() < settingsIdMax) { + else if (event.GetId() >= wxID_SETTINGS_BASE && event.GetId() < settingsIdMax) { int setIdx = event.GetId()-wxID_SETTINGS_BASE; int menuIdx = 0; for (std::vector::iterator arg_i = settingArgs.begin(); arg_i != settingArgs.end(); arg_i++) { @@ -1019,50 +1180,53 @@ void AppFrame::OnMenu(wxCommandEvent& event) { } } - if (event.GetId() >= wxID_THEME_DEFAULT && event.GetId() <= wxID_THEME_RADAR) { - demodTuner->Refresh(); - demodModeSelector->Refresh(); - waterfallSpeedMeter->Refresh(); - spectrumAvgMeter->Refresh(); - gainCanvas->setThemeColors(); - modemProps->updateTheme(); - } + + + if (event.GetId() == wxID_BANDWIDTH_MANUAL) { + wxGetApp().setSampleRate(manualSampleRate); + } + else if (event.GetId() == wxID_BANDWIDTH_MANUAL_DIALOG) { + + int rateHigh = 0, rateLow = 0; + + SDRDeviceInfo *dev = wxGetApp().getDevice(); + if (dev != nullptr) { - switch (event.GetId()) { - case wxID_BANDWIDTH_MANUAL: - int rateHigh, rateLow; - - SDRDeviceInfo *dev = wxGetApp().getDevice(); - if (dev == NULL) { - break; - } - std::vector sampleRates = dev->getSampleRates(SOAPY_SDR_RX, 0); - - rateLow = 2000000; - rateHigh = 30000000; - + + //default + rateLow = MANUAL_SAMPLE_RATE_MIN; + rateHigh = MANUAL_SAMPLE_RATE_MAX; + if (sampleRates.size()) { - rateLow = sampleRates[0]; - rateHigh = sampleRates[sampleRates.size()-1]; + rateLow = sampleRates.front(); + rateHigh = sampleRates.back(); } long bw = wxGetNumberFromUser("\n" + dev->getName() + "\n\n " - + "min: " + std::to_string(rateLow) + " Hz" - + ", max: " + std::to_string(rateHigh) + " Hz\n", - "Sample Rate in Hz", - "Manual Sample Rate Entry", - wxGetApp().getSampleRate(), - rateLow, - rateHigh, - this); + + "min: " + std::to_string(rateLow) + " Hz" + + ", max: " + std::to_string(rateHigh) + " Hz\n", + "Sample Rate in Hz", + "Manual Sample Rate Entry", + //If a manual sample rate has already been input, recall this one. + manualSampleRate > 0? manualSampleRate :wxGetApp().getSampleRate(), + rateLow, + rateHigh, + this); + if (bw != -1) { - wxGetApp().setSampleRate(bw); + + manualSampleRate = bw; + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Enable(true); + + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->SetItemLabel(wxT("Manual : ") + frequencyToStr(manualSampleRate)); + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Check(true); + wxGetApp().setSampleRate(manualSampleRate); } - break; + } } - - if (event.GetId() >= wxID_BANDWIDTH_BASE && event.GetId() < wxID_BANDWIDTH_BASE + (int)sampleRates.size()) { + else if (event.GetId() >= wxID_BANDWIDTH_BASE && event.GetId() < wxID_BANDWIDTH_BASE + (int)sampleRates.size()) { + wxGetApp().setSampleRate(sampleRates[event.GetId()-wxID_BANDWIDTH_BASE]); } @@ -1209,12 +1373,26 @@ void AppFrame::OnMenu(wxCommandEvent& event) { void AppFrame::OnClose(wxCloseEvent& event) { wxGetApp().closeDeviceSelector(); - wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodSpectrumCanvas->getVisualDataQueue()); - wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodWaterfallCanvas->getVisualDataQueue()); + if (wxGetApp().getDemodSpectrumProcessor()) { + wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodSpectrumCanvas->getVisualDataQueue()); + wxGetApp().getDemodSpectrumProcessor()->removeOutput(demodWaterfallCanvas->getVisualDataQueue()); + } wxGetApp().getSpectrumProcessor()->removeOutput(spectrumCanvas->getVisualDataQueue()); + if (saveDisabled) { + event.Skip(); + return; + } + +#ifdef __APPLE__ + if (this->GetPosition().y > 0) { + wxGetApp().getConfig()->setWindow(this->GetPosition(), this->GetClientSize()); + wxGetApp().getConfig()->setWindowMaximized(this->IsMaximized()); + } +#else wxGetApp().getConfig()->setWindow(this->GetPosition(), this->GetClientSize()); wxGetApp().getConfig()->setWindowMaximized(this->IsMaximized()); +#endif wxGetApp().getConfig()->setTheme(ThemeMgr::mgr.getTheme()); wxGetApp().getConfig()->setFontScale(GLFont::getScale()); wxGetApp().getConfig()->setSnap(wxGetApp().getFrequencySnap()); @@ -1223,6 +1401,10 @@ void AppFrame::OnClose(wxCloseEvent& event) { wxGetApp().getConfig()->setWaterfallLinesPerSec(waterfallDataThread->getLinesPerSecond()); wxGetApp().getConfig()->setManualDevices(SDREnumerator::getManuals()); wxGetApp().getConfig()->setModemPropsCollapsed(modemProps->isCollapsed()); + wxGetApp().getConfig()->setMainSplit(mainSplitter->GetSashPosition()); + wxGetApp().getConfig()->setVisSplit(mainVisSplitter->GetSashPosition()); + if (!hideBookmarksItem->IsChecked()) wxGetApp().getConfig()->setBookmarkSplit(bookmarkSplitter->GetSashPosition()); + wxGetApp().getConfig()->setBookmarksVisible(!hideBookmarksItem->IsChecked()); #ifdef USE_HAMLIB wxGetApp().getConfig()->setRigEnabled(rigEnableMenuItem->IsChecked()); wxGetApp().getConfig()->setRigModel(rigModel); @@ -1234,6 +1416,7 @@ void AppFrame::OnClose(wxCloseEvent& event) { wxGetApp().getConfig()->setRigFollowModem(rigFollowModemMenuItem->IsChecked()); #endif wxGetApp().getConfig()->save(); + wxGetApp().getBookmarkMgr().saveToFile("bookmarks.xml"); event.Skip(); } @@ -1241,6 +1424,7 @@ void AppFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event)) { new AppFrame(); } + void AppFrame::OnThread(wxCommandEvent& event) { event.Skip(); } @@ -1281,7 +1465,9 @@ void AppFrame::OnIdle(wxIdleEvent& event) { demodGainMeter->setInputValue(demod->getGain()); wxGetApp().getDemodMgr().setLastGain(demod->getGain()); int outputDevice = demod->getOutputDevice(); - scopeCanvas->setDeviceName(outputDevices[outputDevice].name); + if (scopeCanvas) { + scopeCanvas->setDeviceName(outputDevices[outputDevice].name); + } // outputDeviceMenuItems[outputDevice]->Check(true); std::string dType = demod->getDemodulatorType(); demodModeSelector->setSelection(dType); @@ -1293,7 +1479,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) { modemPropertiesUpdated.store(true); demodTuner->setHalfBand(dType=="USB" || dType=="LSB"); } - if (demodWaterfallCanvas->getDragState() == WaterfallCanvas::WF_DRAG_NONE) { + if (!demodWaterfallCanvas || demodWaterfallCanvas->getDragState() == WaterfallCanvas::WF_DRAG_NONE) { long long centerFreq = demod->getFrequency(); unsigned int demodBw = (unsigned int) ceil((float) demod->getBandwidth() * 2.25); @@ -1314,7 +1500,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) { demodBw = 20000; } - if (centerFreq != demodWaterfallCanvas->getCenterFrequency()) { + if (demodWaterfallCanvas && centerFreq != demodWaterfallCanvas->getCenterFrequency()) { demodWaterfallCanvas->setCenterFrequency(centerFreq); demodSpectrumCanvas->setCenterFrequency(centerFreq); } @@ -1400,8 +1586,10 @@ void AppFrame::OnIdle(wxIdleEvent& event) { } } - demodWaterfallCanvas->setBandwidth(demodBw); - demodSpectrumCanvas->setBandwidth(demodBw); + if (demodWaterfallCanvas) { + demodWaterfallCanvas->setBandwidth(demodBw); + demodSpectrumCanvas->setBandwidth(demodBw); + } } demodSignalMeter->setLevel(demod->getSignalLevel()); @@ -1457,14 +1645,18 @@ void AppFrame::OnIdle(wxIdleEvent& event) { demodGainMeter->setLevel(demodGainMeter->getInputValue()); } - if (wxGetApp().getFrequency() != demodWaterfallCanvas->getCenterFrequency()) { + if (demodWaterfallCanvas && wxGetApp().getFrequency() != demodWaterfallCanvas->getCenterFrequency()) { demodWaterfallCanvas->setCenterFrequency(wxGetApp().getFrequency()); - demodSpectrumCanvas->setCenterFrequency(wxGetApp().getFrequency()); + if (demodSpectrumCanvas) { + demodSpectrumCanvas->setCenterFrequency(wxGetApp().getFrequency()); + } } + if (spectrumCanvas->getViewState() && abs(wxGetApp().getFrequency()-spectrumCanvas->getCenterFrequency()) > (wxGetApp().getSampleRate()/2)) { spectrumCanvas->setCenterFrequency(wxGetApp().getFrequency()); waterfallCanvas->setCenterFrequency(wxGetApp().getFrequency()); } + if (demodMuteButton->modeChanged()) { int muteMode = demodMuteButton->getSelection(); if (muteMode == -1) { @@ -1476,15 +1668,16 @@ void AppFrame::OnIdle(wxIdleEvent& event) { } } - scopeCanvas->setPPMMode(demodTuner->isAltDown()); + if (scopeCanvas) { + scopeCanvas->setPPMMode(demodTuner->isAltDown()); + + wxGetApp().getScopeProcessor()->setScopeEnabled(scopeCanvas->scopeVisible()); + wxGetApp().getScopeProcessor()->setSpectrumEnabled(scopeCanvas->spectrumVisible()); + wxGetApp().getAudioVisualQueue()->set_max_num_items((scopeCanvas->scopeVisible()?1:0) + (scopeCanvas->spectrumVisible()?1:0)); + + wxGetApp().getScopeProcessor()->run(); + } - scopeCanvas->setShowDb(spectrumCanvas->getShowDb()); - wxGetApp().getScopeProcessor()->setScopeEnabled(scopeCanvas->scopeVisible()); - wxGetApp().getScopeProcessor()->setSpectrumEnabled(scopeCanvas->spectrumVisible()); - wxGetApp().getAudioVisualQueue()->set_max_num_items((scopeCanvas->scopeVisible()?1:0) + (scopeCanvas->spectrumVisible()?1:0)); - - wxGetApp().getScopeProcessor()->run(); - SpectrumVisualProcessor *proc = wxGetApp().getSpectrumProcessor(); if (spectrumAvgMeter->inputChanged()) { @@ -1502,9 +1695,11 @@ void AppFrame::OnIdle(wxIdleEvent& event) { } SpectrumVisualProcessor *dproc = wxGetApp().getDemodSpectrumProcessor(); - - dproc->setView(demodWaterfallCanvas->getViewState(), demodWaterfallCanvas->getCenterFrequency(),demodWaterfallCanvas->getBandwidth()); + if (dproc) { + dproc->setView(demodWaterfallCanvas->getViewState(), demodWaterfallCanvas->getCenterFrequency(),demodWaterfallCanvas->getBandwidth()); + } + SpectrumVisualProcessor *wproc = waterfallDataThread->getProcessor(); if (waterfallSpeedMeter->inputChanged()) { @@ -1536,13 +1731,15 @@ void AppFrame::OnIdle(wxIdleEvent& event) { ModemDigitalOutputConsole *outp = (ModemDigitalOutputConsole *)demod->getOutput(); if (!outp->getDialog()) { outp->setTitle(demod->getDemodulatorType() + ": " + frequencyToStr(demod->getFrequency())); - outp->setDialog(new DigitalConsole(this, outp)); + outp->setDialog(new DigitalConsole(this, outp)) ; } demod->showOutput(); } #endif - } else if (!demod) { - modemProps->Hide(); + } else if (!demod && modemPropertiesUpdated.load()) { + ModemArgInfoList dummyInfo; + modemProps->initProperties(dummyInfo, nullptr); + modemProps->updateTheme(); demodTray->Layout(); } @@ -1563,7 +1760,9 @@ void AppFrame::OnIdle(wxIdleEvent& event) { wxGetApp().getSpectrumProcessor()->setPeakHold(peakHoldMode == 1); //make the peak hold act on the current dmod also, like a zoomed-in version. - wxGetApp().getDemodSpectrumProcessor()->setPeakHold(peakHoldMode == 1); + if (wxGetApp().getDemodSpectrumProcessor()) { + wxGetApp().getDemodSpectrumProcessor()->setPeakHold(peakHoldMode == 1); + } peakHoldButton->clearModeChanged(); } @@ -1577,7 +1776,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) { #endif #ifdef _WIN32 - if (scopeCanvas->HasFocus()) { + if (scopeCanvas && scopeCanvas->HasFocus()) { waterfallCanvas->SetFocus(); } #endif @@ -1633,7 +1832,9 @@ void AppFrame::OnUnSplit(wxSplitterEvent& event) void AppFrame::saveSession(std::string fileName) { DataTree s("cubicsdr_session"); DataNode *header = s.rootNode()->newChild("header"); - *header->newChild("version") = std::string(CUBICSDR_VERSION); + //save as wstring to prevent problems + header->newChild("version")->element()->set(wxString(CUBICSDR_VERSION).ToStdWstring()); + *header->newChild("center_freq") = wxGetApp().getFrequency(); *header->newChild("sample_rate") = wxGetApp().getSampleRate(); @@ -1647,35 +1848,10 @@ void AppFrame::saveSession(std::string fileName) { DataNode *demods = s.rootNode()->newChild("demodulators"); std::vector &instances = wxGetApp().getDemodMgr().getDemodulators(); - std::vector::iterator instance_i; - for (instance_i = instances.begin(); instance_i != instances.end(); instance_i++) { + + for (auto instance_i : instances) { DataNode *demod = demods->newChild("demodulator"); - *demod->newChild("bandwidth") = (*instance_i)->getBandwidth(); - *demod->newChild("frequency") = (*instance_i)->getFrequency(); - *demod->newChild("type") = (*instance_i)->getDemodulatorType(); - - demod->newChild("user_label")->element()->set((*instance_i)->getDemodulatorUserLabel()); - - *demod->newChild("squelch_level") = (*instance_i)->getSquelchLevel(); - *demod->newChild("squelch_enabled") = (*instance_i)->isSquelchEnabled() ? 1 : 0; - *demod->newChild("output_device") = outputDevices[(*instance_i)->getOutputDevice()].name; - *demod->newChild("gain") = (*instance_i)->getGain(); - *demod->newChild("muted") = (*instance_i)->isMuted() ? 1 : 0; - if ((*instance_i)->isDeltaLock()) { - *demod->newChild("delta_lock") = (*instance_i)->isDeltaLock() ? 1 : 0; - *demod->newChild("delta_ofs") = (*instance_i)->getDeltaLockOfs(); - } - if ((*instance_i) == wxGetApp().getDemodMgr().getLastActiveDemodulator()) { - *demod->newChild("active") = 1; - } - - ModemSettings saveSettings = (*instance_i)->readModemSettings(); - if (saveSettings.size()) { - DataNode *settingsNode = demod->newChild("settings"); - for (ModemSettings::const_iterator msi = saveSettings.begin(); msi != saveSettings.end(); msi++) { - *settingsNode->newChild(msi->first.c_str()) = msi->second; - } - } + wxGetApp().getDemodMgr().saveInstance(demod, instance_i); } //end for demodulators // Make sure the file name actually ends in .xml @@ -1711,23 +1887,71 @@ bool AppFrame::loadSession(std::string fileName) { DataNode *header = l.rootNode()->getNext("header"); if (header->hasAnother("version")) { - std::string version(*header->getNext("version")); -// std::cout << "Loading " << version << " session file" << std::endl; + //"Force" the retreiving of the value as string, even if its look like a number internally ! (ex: "0.2.0") + DataNode *versionNode = header->getNext("version"); + std::wstring version; + try { + versionNode->element()->get(version); + + std::cout << "Loading session file version: '" << version << "'..." << std::endl; + } + catch (DataTypeMismatchException* e) { + //this is for managing the old session format NOT encoded as std:wstring, + //force current version + std::cout << "Warning while Loading session file version, probably old format :'" << e->what() << "' please consider re-saving the current session..." << std::endl; + version = wxString(CUBICSDR_VERSION).ToStdWstring(); + } } if (header->hasAnother("sample_rate")) { - int sample_rate = *header->getNext("sample_rate"); - + + long sample_rate = *header->getNext("sample_rate"); + SDRDeviceInfo *dev = wxGetApp().getSDRThread()->getDevice(); if (dev) { - // Try for a reasonable default sample rate. - sample_rate = dev->getSampleRateNear(SOAPY_SDR_RX, 0, sample_rate); + //retreive the available sample rates. A valid previously chosen manual + //value is constrained within these limits. If it doesn't behave, lets the device choose + //for us. + long minRate = MANUAL_SAMPLE_RATE_MIN; + long maxRate = MANUAL_SAMPLE_RATE_MAX; + + std::vector sampleRates = dev->getSampleRates(SOAPY_SDR_RX, 0); + + if (sampleRates.size()) { + minRate = sampleRates.front(); + maxRate = sampleRates.back(); + } + + //If it is beyond limits, make device choose a reasonable value + if (sample_rate < minRate || sample_rate > maxRate) { + sample_rate = dev->getSampleRateNear(SOAPY_SDR_RX, 0, sample_rate); + } + + //scan the available sample rates and see if it matches a predifined one + int menuIndex = -1; + for (auto discreteRate : sampleRates) { + if (discreteRate == sample_rate) { + menuIndex++; + //activate Bandwidth Menu entry matching this predefined sample_rate. + sampleRateMenuItems[wxID_BANDWIDTH_BASE + menuIndex]->Check(true); + break; + } + } //end for + //this is a manual entry + if (menuIndex == -1) { + manualSampleRate = sample_rate; + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Enable(true); + // Apply the manual value, activate the menu entry + + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->SetItemLabel(wxString("Manual Entry : ") + frequencyToStr(sample_rate)); + sampleRateMenuItems[wxID_BANDWIDTH_MANUAL]->Check(true); + } + //update applied value wxGetApp().setSampleRate(sample_rate); deviceChanged.store(true); } else { wxGetApp().setSampleRate(sample_rate); } - } DemodulatorInstance *loadedActiveDemod = nullptr; @@ -1737,7 +1961,6 @@ bool AppFrame::loadSession(std::string fileName) { DataNode *demodulators = l.rootNode()->getNext("demodulators"); - int numDemodulators = 0; std::vector demodsLoaded; while (demodulators->hasAnother("demodulator")) { @@ -1747,122 +1970,15 @@ bool AppFrame::loadSession(std::string fileName) { continue; } - long bandwidth = *demod->getNext("bandwidth"); - long long freq = *demod->getNext("frequency"); - float squelch_level = demod->hasAnother("squelch_level") ? (float) *demod->getNext("squelch_level") : 0; - int squelch_enabled = demod->hasAnother("squelch_enabled") ? (int) *demod->getNext("squelch_enabled") : 0; - int muted = demod->hasAnother("muted") ? (int) *demod->getNext("muted") : 0; - int delta_locked = demod->hasAnother("delta_lock") ? (int) *demod->getNext("delta_lock") : 0; - int delta_ofs = demod->hasAnother("delta_ofs") ? (int) *demod->getNext("delta_ofs") : 0; - std::string output_device = demod->hasAnother("output_device") ? string(*(demod->getNext("output_device"))) : ""; - float gain = demod->hasAnother("gain") ? (float) *demod->getNext("gain") : 1.0; + newDemod = wxGetApp().getDemodMgr().loadInstance(demod); - std::string type = "FM"; - - - DataNode *demodTypeNode = demod->hasAnother("type")?demod->getNext("type"):nullptr; - - if (demodTypeNode && demodTypeNode->element()->getDataType() == DATA_INT) { - int legacyType = *demodTypeNode; - int legacyStereo = demod->hasAnother("stereo") ? (int) *demod->getNext("stereo") : 0; - switch (legacyType) { // legacy demod ID - case 1: type = legacyStereo?"FMS":"FM"; break; - case 2: type = "AM"; break; - case 3: type = "LSB"; break; - case 4: type = "USB"; break; - case 5: type = "DSB"; break; - case 6: type = "ASK"; break; - case 7: type = "APSK"; break; - case 8: type = "BPSK"; break; - case 9: type = "DPSK"; break; - case 10: type = "PSK"; break; - case 11: type = "OOK"; break; - case 12: type = "ST"; break; - case 13: type = "SQAM"; break; - case 14: type = "QAM"; break; - case 15: type = "QPSK"; break; - case 16: type = "I/Q"; break; - default: type = "FM"; break; - } - } else if (demodTypeNode && demodTypeNode->element()->getDataType() == DATA_STRING) { - demodTypeNode->element()->get(type); - } - - //read the user label associated with the demodulator - std::wstring user_label = L""; - - DataNode *demodUserLabel = demod->hasAnother("user_label") ? demod->getNext("user_label") : nullptr; - - if (demodUserLabel) { - - demodUserLabel->element()->get(user_label); - } - - - ModemSettings mSettings; - - if (demod->hasAnother("settings")) { - DataNode *modemSettings = demod->getNext("settings"); - for (int msi = 0, numSettings = modemSettings->numChildren(); msi < numSettings; msi++) { - DataNode *settingNode = modemSettings->child(msi); - std::string keyName = settingNode->getName(); - std::string strSettingValue = settingNode->element()->toString(); - - if (keyName != "" && strSettingValue != "") { - mSettings[keyName] = strSettingValue; - } - } - } - - - - newDemod = wxGetApp().getDemodMgr().newThread(); - if (demod->hasAnother("active")) { loadedActiveDemod = newDemod; } - numDemodulators++; - newDemod->setDemodulatorType(type); - newDemod->setDemodulatorUserLabel(user_label); - newDemod->writeModemSettings(mSettings); - newDemod->setBandwidth(bandwidth); - newDemod->setFrequency(freq); - newDemod->setGain(gain); - newDemod->updateLabel(freq); - newDemod->setMuted(muted?true:false); - if (delta_locked) { - newDemod->setDeltaLock(true); - newDemod->setDeltaLockOfs(delta_ofs); - } - if (squelch_enabled) { - newDemod->setSquelchEnabled(true); - newDemod->setSquelchLevel(squelch_level); - } - - bool found_device = false; - std::map::iterator i; - for (i = outputDevices.begin(); i != outputDevices.end(); i++) { - if (i->second.name == output_device) { - newDemod->setOutputDevice(i->first); - found_device = true; - } - } - -// if (!found_device) { -// std::cout << "\tWarning: named output device '" << output_device << "' was not found. Using default output."; -// } - newDemod->run(); newDemod->setActive(true); demodsLoaded.push_back(newDemod); -// wxGetApp().bindDemodulator(newDemod); - - std::cout << "\tAdded demodulator at frequency " << newDemod->getFrequency() << " type " << type << std::endl; -// std::cout << "\t\tBandwidth: " << bandwidth << std::endl; -// std::cout << "\t\tSquelch Level: " << squelch_level << std::endl; -// std::cout << "\t\tSquelch Enabled: " << (squelch_enabled ? "true" : "false") << std::endl; -// std::cout << "\t\tOutput Device: " << output_device << std::endl; } if (demodsLoaded.size()) { @@ -1908,6 +2024,8 @@ bool AppFrame::loadSession(std::string fileName) { GetStatusBar()->SetStatusText(wxString::Format(wxT("Loaded session file: %s"), currentSessionFile.c_str())); SetTitle(wxString::Format(wxT("%s: %s"), CUBICSDR_TITLE, filePart.c_str())); + wxGetApp().getBookmarkMgr().updateActiveList(); + return true; } @@ -1928,7 +2046,9 @@ void AppFrame::setMainWaterfallFFTSize(int fftSize) { } void AppFrame::setScopeDeviceName(std::string deviceName) { - scopeCanvas->setDeviceName(deviceName); + if (scopeCanvas) { + scopeCanvas->setDeviceName(deviceName); + } } @@ -1940,12 +2060,20 @@ void AppFrame::refreshGainUI() { bool AppFrame::isUserDemodBusy() { return (modemProps && modemProps->isMouseInView()) || (waterfallCanvas->isMouseInView() && waterfallCanvas->isMouseDown()) - || (demodWaterfallCanvas->isMouseInView() && demodWaterfallCanvas->isMouseDown()) + || (demodWaterfallCanvas && demodWaterfallCanvas->isMouseInView() && demodWaterfallCanvas->isMouseDown()) || (wxGetApp().getDemodMgr().getLastActiveDemodulator() && wxGetApp().getDemodMgr().getActiveDemodulator() && wxGetApp().getDemodMgr().getLastActiveDemodulator() != wxGetApp().getDemodMgr().getActiveDemodulator()); } +BookmarkView *AppFrame::getBookmarkView() { + return bookmarkView; +} + +void AppFrame::disableSave(bool state) { + saveDisabled = state; +} + #ifdef _WIN32 bool AppFrame::canFocus() { @@ -2005,6 +2133,10 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { return -1; } + if (bookmarkView && bookmarkView->isMouseInView()) { + return -1; + } + DemodulatorInstance *demod = nullptr, *lastDemod = wxGetApp().getDemodMgr().getLastActiveDemodulator(); int snap = wxGetApp().getFrequencySnap(); @@ -2089,12 +2221,21 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { break; } + //Re-dispatch the key events if the mouse cursor is within a given + //widget region, effectively activating its specific key shortcuts, + //which else are overriden by this global key handler. if (demodTuner->getMouseTracker()->mouseInView()) { demodTuner->OnKeyDown(event); } else if (waterfallCanvas->getMouseTracker()->mouseInView()) { waterfallCanvas->OnKeyDown(event); } - + else if (spectrumCanvas->getMouseTracker()->mouseInView()) { + spectrumCanvas->OnKeyDown(event); + } + else if (scopeCanvas->getMouseTracker()->mouseInView()) { + scopeCanvas->OnKeyDown(event); + } + return 1; } @@ -2106,6 +2247,10 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) { return -1; } + if (bookmarkView && bookmarkView->isMouseInView()) { + return -1; + } + if (event.ControlDown()) { return 1; } @@ -2178,7 +2323,9 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) { break; case 'P': wxGetApp().getSpectrumProcessor()->setPeakHold(!wxGetApp().getSpectrumProcessor()->getPeakHold()); - wxGetApp().getDemodSpectrumProcessor()->setPeakHold(wxGetApp().getSpectrumProcessor()->getPeakHold()); + if (wxGetApp().getDemodSpectrumProcessor()) { + wxGetApp().getDemodSpectrumProcessor()->setPeakHold(wxGetApp().getSpectrumProcessor()->getPeakHold()); + } peakHoldButton->setSelection(wxGetApp().getSpectrumProcessor()->getPeakHold()?1:0); peakHoldButton->clearModeChanged(); break; @@ -2196,13 +2343,22 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) { default: break; } - + + //Re-dispatch the key events if the mouse cursor is within a given + //widget region, effectively activating its specific key shortcuts, + //which else are overriden by this global key handler. if (demodTuner->getMouseTracker()->mouseInView()) { demodTuner->OnKeyUp(event); - } else if (waterfallCanvas->getMouseTracker()->mouseInView()) { + } + else if (waterfallCanvas->getMouseTracker()->mouseInView()) { waterfallCanvas->OnKeyUp(event); } - + else if (spectrumCanvas->getMouseTracker()->mouseInView()) { + spectrumCanvas->OnKeyUp(event); + } + else if (scopeCanvas->getMouseTracker()->mouseInView()) { + scopeCanvas->OnKeyUp(event); + } // TODO: Catch key-ups outside of original target @@ -2229,3 +2385,42 @@ void AppFrame::setViewState(long long center_freq) { spectrumCanvas->disableView(); waterfallCanvas->disableView(); } + + +long long AppFrame::getViewCenterFreq() { + return waterfallCanvas->getCenterFrequency(); + +} + + +int AppFrame::getViewBandwidth() { + return waterfallCanvas->getBandwidth(); +} + + +/* split a string by 'seperator' into a vector of string */ +std::vector str_explode(const std::string &seperator, const std::string &in_str) +{ + std::vector vect_out; + + int i = 0, j = 0; + int seperator_len = seperator.length(); + int str_len = in_str.length(); + + while(i < str_len) + { + j = in_str.find_first_of(seperator,i); + + if (j == std::string::npos && i < str_len) j = str_len; + + if (j == std::string::npos) break; + + vect_out.push_back(in_str.substr(i,j-i)); + + i = j; + + i+=seperator_len; + } + + return vect_out; +} diff --git a/src/AppFrame.h b/src/AppFrame.h index 4c2acee..a790810 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -1,9 +1,14 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include #include #include #include +#include +#include #include "PrimaryGLContext.h" @@ -19,6 +24,7 @@ #include "ModemProperties.h" //#include "UITestCanvas.h" #include "FrequencyDialog.h" +#include "BookmarkView.h" #include @@ -32,9 +38,11 @@ #define wxID_AGC_CONTROL 2009 #define wxID_SDR_START_STOP 2010 #define wxID_LOW_PERF 2011 +#define wxID_SET_DB_OFFSET 2012 #define wxID_MAIN_SPLITTER 2050 #define wxID_VIS_SPLITTER 2051 +#define wxID_BM_SPLITTER 2052 #define wxID_THEME_DEFAULT 2100 #define wxID_THEME_SHARP 2101 @@ -44,7 +52,10 @@ #define wxID_THEME_HD 2105 #define wxID_THEME_RADAR 2106 +#define wxID_DISPLAY_BOOKMARKS 2107 + #define wxID_BANDWIDTH_BASE 2150 +#define wxID_BANDWIDTH_MANUAL_DIALOG 2199 #define wxID_BANDWIDTH_MANUAL 2200 #define wxID_DISPLAY_BASE 2250 @@ -73,6 +84,7 @@ class AppFrame: public wxFrame { public: AppFrame(); ~AppFrame(); + void OnThread(wxCommandEvent& event); void OnEventInput(wxThreadEvent& event); void initDeviceParams(SDRDeviceInfo *devInfo); @@ -100,9 +112,20 @@ public: void refreshGainUI(); void setViewState(long long center_freq, int bandwidth); void setViewState(long long center_freq); - + + long long getViewCenterFreq(); + int getViewBandwidth(); bool isUserDemodBusy(); - + + BookmarkView *getBookmarkView(); + void disableSave(bool state); + + //call this in case the main UI is not + //the origin of device changes / sample rate by operator, + //and must be notified back to update its UI elements + //(ex: SDR Devices dialog changing the configuration) + void notifyDeviceChanged(); + #ifdef _WIN32 bool canFocus(); #endif @@ -115,6 +138,10 @@ private: void OnDoubleClickSash(wxSplitterEvent& event); void OnUnSplit(wxSplitterEvent& event); + //manage Display menu actions, return true if the event has been + //treated. + bool actionOnMenuDisplay(wxCommandEvent& event); + ScopeCanvas *scopeCanvas; SpectrumCanvas *spectrumCanvas; WaterfallCanvas *waterfallCanvas; @@ -133,8 +160,9 @@ private: ModeSelectorCanvas *demodMuteButton, *peakHoldButton, *soloModeButton, *deltaLockButton; GainCanvas *gainCanvas; wxSizerItem *gainSizerItem, *gainSpacerItem; - wxSplitterWindow *mainVisSplitter, *mainSplitter; + wxSplitterWindow *mainVisSplitter, *mainSplitter, *bookmarkSplitter; wxBoxSizer *demodTray; + BookmarkView *bookmarkView; DemodulatorInstance *activeDemodulator; @@ -147,16 +175,17 @@ private: std::map directSamplingMenuItems; wxMenuBar *menuBar; - wxMenu *sampleRateMenu; - wxMenu *displayMenu; - wxMenuItem *agcMenuItem; - wxMenuItem *iqSwapMenuItem; - wxMenuItem *lowPerfMenuItem; - wxMenu *settingsMenu; + wxMenu *sampleRateMenu = nullptr; + wxMenu *displayMenu = nullptr; + wxMenuItem *agcMenuItem = nullptr; + wxMenuItem *iqSwapMenuItem = nullptr; + wxMenuItem *lowPerfMenuItem = nullptr; + wxMenu *settingsMenu = nullptr; SoapySDR::ArgInfoList settingArgs; int settingsIdMax; std::vector sampleRates; + long manualSampleRate = -1; std::string currentSessionFile; @@ -171,7 +200,10 @@ private: wxMenuItem *showTipMenuItem; bool lowPerfMode; - + + wxMenuItem *hideBookmarksItem; + bool saveDisabled; + #ifdef USE_HAMLIB void enableRig(); void disableRig(); @@ -184,6 +216,7 @@ private: wxMenuItem *rigCenterLockMenuItem; wxMenuItem *rigFollowModemMenuItem; wxMenuItem *sdrIFMenuItem; + std::map rigSerialMenuItems; std::map rigModelMenuItems; int rigModel; diff --git a/src/BookmarkMgr.cpp b/src/BookmarkMgr.cpp new file mode 100644 index 0000000..ae2034c --- /dev/null +++ b/src/BookmarkMgr.cpp @@ -0,0 +1,524 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + +#include "BookmarkMgr.h" +#include "CubicSDR.h" +#include "DataTree.h" + +#define BOOKMARK_RECENTS_MAX 25 + +BookmarkMgr::BookmarkMgr() { + rangesSorted = false; +} + +void BookmarkMgr::saveToFile(std::string bookmarkFn, bool backup) { + DataTree s("cubicsdr_bookmarks"); + DataNode *header = s.rootNode()->newChild("header"); + header->newChild("version")->element()->set(wxString(CUBICSDR_VERSION).ToStdWstring()); + + DataNode *branches = s.rootNode()->newChild("branches"); + + *branches->newChild("active") = wxGetApp().getAppFrame()->getBookmarkView()->getExpandState("active")?1:0; + *branches->newChild("range") = wxGetApp().getAppFrame()->getBookmarkView()->getExpandState("range")?1:0; + *branches->newChild("bookmark") = wxGetApp().getAppFrame()->getBookmarkView()->getExpandState("bookmark")?1:0; + *branches->newChild("recent") = wxGetApp().getAppFrame()->getBookmarkView()->getExpandState("recent")?1:0; + + DataNode *view_ranges = s.rootNode()->newChild("ranges"); + + for (auto re_i : ranges) { + DataNode *range = view_ranges->newChild("range"); + *range->newChild("label") = re_i->label; + *range->newChild("freq") = re_i->freq; + *range->newChild("start") = re_i->startFreq; + *range->newChild("end") = re_i->endFreq; + } + + DataNode *modems = s.rootNode()->newChild("modems"); + + for (auto &bmd_i : bmData) { + DataNode *group = modems->newChild("group"); + *group->newChild("@name") = bmd_i.first; + *group->newChild("@expanded") = (getExpandState(bmd_i.first)?std::string("true"):std::string("false")); + + for (auto &bm_i : bmd_i.second ) { + group->newChildCloneFrom("modem", bm_i->node); + } + } + + DataNode *recent_modems = s.rootNode()->newChild("recent_modems"); + + for (auto demod : wxGetApp().getDemodMgr().getDemodulators()) { + wxGetApp().getDemodMgr().saveInstance(recent_modems->newChild("modem"),demod); + } + + for (auto &r_i : this->recents) { + recent_modems->newChildCloneFrom("modem", r_i->node); + } + + wxFileName saveFile(wxGetApp().getConfig()->getConfigDir(), bookmarkFn); + wxFileName saveFileBackup(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".backup"); + + if (saveFile.IsDirWritable()) { + // Hopefully leave at least a readable backup in case of failure.. + if (backup && saveFile.FileExists() && (!saveFileBackup.FileExists() || saveFileBackup.IsFileWritable())) { + wxCopyFile(saveFile.GetFullPath(wxPATH_NATIVE).ToStdString(), saveFileBackup.GetFullPath(wxPATH_NATIVE).ToStdString()); + } + s.SaveToFileXML(saveFile.GetFullPath(wxPATH_NATIVE).ToStdString()); + } +} + + +bool BookmarkMgr::loadFromFile(std::string bookmarkFn, bool backup) { + wxFileName loadFile(wxGetApp().getConfig()->getConfigDir(), bookmarkFn); + wxFileName failFile(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".failedload"); + wxFileName lastLoaded(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".lastloaded"); + wxFileName backupFile(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".backup"); + + DataTree s; + bool loadStatusOk = true; + + // Clear any active data + bmData.erase(bmData.begin(),bmData.end()); + recents.erase(recents.begin(),recents.end()); + ranges.erase(ranges.begin(),ranges.end()); + bmDataSorted.erase(bmDataSorted.begin(),bmDataSorted.end()); + + // File exists but is not readable + if (loadFile.FileExists() && !loadFile.IsFileReadable()) { + return false; + } + + // New instance of bookmark savefiles + if (backup && !loadFile.FileExists() && !lastLoaded.FileExists() && !backupFile.FileExists()) { + wxGetApp().getAppFrame()->getBookmarkView()->loadDefaultRanges(); + return true; + } + + // Attempt to load file + if (!s.LoadFromFileXML(loadFile.GetFullPath(wxPATH_NATIVE).ToStdString())) { + return false; + } + + if (s.rootNode()->hasAnother("branches")) { + DataNode *branches = s.rootNode()->getNext("branches"); + int bActive = 1, bRange = 0, bBookmark = 1, bRecent = 1; + if (branches->hasAnother("active")) branches->getNext("active")->element()->get(bActive); + if (branches->hasAnother("range")) branches->getNext("range")->element()->get(bRange); + if (branches->hasAnother("bookmark")) branches->getNext("bookmark")->element()->get(bBookmark); + if (branches->hasAnother("recent")) branches->getNext("recent")->element()->get(bRecent); + wxGetApp().getAppFrame()->getBookmarkView()->setExpandState("active", bActive?true:false); + wxGetApp().getAppFrame()->getBookmarkView()->setExpandState("range", bRange?true:false); + wxGetApp().getAppFrame()->getBookmarkView()->setExpandState("bookmark", bBookmark?true:false); + wxGetApp().getAppFrame()->getBookmarkView()->setExpandState("recent", bRecent?true:false); + } + + if (s.rootNode()->hasAnother("ranges")) { + DataNode *view_ranges = s.rootNode()->getNext("ranges"); + while (view_ranges->hasAnother("range")) { + DataNode *range = view_ranges->getNext("range"); + + BookmarkRangeEntry *re = new BookmarkRangeEntry; + + if (range->hasAnother("label")) range->getNext("label")->element()->get(re->label); + if (range->hasAnother("freq")) range->getNext("freq")->element()->get(re->freq); + if (range->hasAnother("start")) range->getNext("start")->element()->get(re->startFreq); + if (range->hasAnother("end")) range->getNext("end")->element()->get(re->endFreq); + + addRange(re); + } + } + + if (s.rootNode()->hasAnother("modems")) { + DataNode *modems = s.rootNode()->getNext("modems"); + while (modems->hasAnother("group")) { + DataNode *group = modems->getNext("group"); + std::string expandState = "true"; + std::string groupName = "Unnamed"; + if (group->hasAnother("@name")) { + groupName = group->getNext("@name")->element()->toString(); + } + if (group->hasAnother("@expanded")) { + expandState = group->getNext("@expanded")->element()->toString(); + } + setExpandState(groupName, (expandState == "true")); + while (group->hasAnother("modem")) { + DataNode *modem = group->getNext("modem"); + BookmarkEntry *be = nodeToBookmark("modem", modem); + if (be) { + addBookmark(groupName.c_str(), be); + } else { + std::cout << "error loading bookmarked modem.." << std::endl; + loadStatusOk = false; + } + } + } + } + + if (s.rootNode()->hasAnother("recent_modems")) { + DataNode *recent_modems = s.rootNode()->getNext("recent_modems"); + + while (recent_modems->hasAnother("modem")) { + DataNode *modem = recent_modems->getNext("modem"); + BookmarkEntry *be = nodeToBookmark("modem", modem); + if (be) { + addRecent(be); + } else { + std::cout << "error loading recent modem.." << std::endl; + loadStatusOk = false; + } + } + } + + if (backup) { + if (loadStatusOk) { // Loaded OK; keep a copy + if (loadFile.IsDirWritable()) { + if (loadFile.FileExists() && (!lastLoaded.FileExists() || lastLoaded.IsFileWritable())) { + wxCopyFile(loadFile.GetFullPath(wxPATH_NATIVE).ToStdString(), lastLoaded.GetFullPath(wxPATH_NATIVE).ToStdString()); + } + } + } else if (!loadStatusOk) { + if (loadFile.IsDirWritable()) { // Load failed; keep a copy of the failed bookmark file for analysis? + if (loadFile.FileExists() && (!failFile.FileExists() || failFile.IsFileWritable())) { + wxCopyFile(loadFile.GetFullPath(wxPATH_NATIVE).ToStdString(), failFile.GetFullPath(wxPATH_NATIVE).ToStdString()); + } + } + } + } + + return loadStatusOk; +} + + +bool BookmarkMgr::hasLastLoad(std::string bookmarkFn) { + wxFileName lastLoaded(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".lastloaded"); + return lastLoaded.FileExists() && lastLoaded.IsFileReadable(); +} + +bool BookmarkMgr::hasBackup(std::string bookmarkFn) { + wxFileName backupFile(wxGetApp().getConfig()->getConfigDir(), bookmarkFn + ".backup"); + return backupFile.FileExists() && backupFile.IsFileReadable(); +} + +void BookmarkMgr::addBookmark(std::string group, DemodulatorInstance *demod) { + std::lock_guard < std::mutex > lock(busy_lock); + + BookmarkEntry *be = demodToBookmarkEntry(demod); + + wxGetApp().getDemodMgr().saveInstance(be->node, demod); + + bmData[group].push_back(be); + bmDataSorted[group] = false; +} + +void BookmarkMgr::addBookmark(std::string group, BookmarkEntry *be) { + std::lock_guard < std::mutex > lock(busy_lock); + + bmData[group].push_back(be); + bmDataSorted[group] = false; +} + + +void BookmarkMgr::removeBookmark(std::string group, BookmarkEntry *be) { + std::lock_guard < std::mutex > lockData(busy_lock); + std::lock_guard < std::mutex > lockEnt(be->busy_lock); + + if (bmData.find(group) == bmData.end()) { + return; + } + + BookmarkList::iterator i = std::find(bmData[group].begin(), bmData[group].end(), be); + + if (i != bmData[group].end()) { + delete *i; + bmData[group].erase(i); + } +} + +void BookmarkMgr::removeBookmark(BookmarkEntry *be) { + std::lock_guard < std::mutex > lockData(busy_lock); + std::lock_guard < std::mutex > lockEnt(be->busy_lock); + + for (auto &bmd_i : bmData) { + BookmarkList::iterator i = std::find(bmd_i.second.begin(), bmd_i.second.end(), be); + if (i != bmd_i.second.end()) { + bmd_i.second.erase(i); + } + } +} + +void BookmarkMgr::moveBookmark(BookmarkEntry *be, std::string group) { + std::lock_guard < std::mutex > lockData(busy_lock); + std::lock_guard < std::mutex > lockEnt(be->busy_lock); + + for (auto &bmd_i : bmData) { + BookmarkList::iterator i = std::find(bmd_i.second.begin(), bmd_i.second.end(), be); + if (i != bmd_i.second.end()) { + if (bmd_i.first == group) { + return; + } + bmData[group].push_back(*i); + bmd_i.second.erase(i); + bmDataSorted[group] = false; + bmDataSorted[bmd_i.first] = false; + return; + } + } +} + + +void BookmarkMgr::addGroup(std::string group) { + std::lock_guard < std::mutex > lock(busy_lock); + + if (bmData.find(group) == bmData.end()) { + BookmarkList dummy = bmData[group]; + } +} + +void BookmarkMgr::removeGroup(std::string group) { + std::lock_guard < std::mutex > lock(busy_lock); + + BookmarkMap::iterator i = bmData.find(group); + + if (i != bmData.end()) { + for (auto ii : bmData[group]) { + delete ii; + } + bmData.erase(group); + } +} + +void BookmarkMgr::renameGroup(std::string group, std::string ngroup) { + if (group == ngroup) { + return; + } + + std::lock_guard < std::mutex > lock(busy_lock); + + BookmarkMap::iterator i = bmData.find(group); + BookmarkMap::iterator it = bmData.find(ngroup); + + if (i != bmData.end() && it != bmData.end()) { + for (auto ii : bmData[group]) { + bmData[ngroup].push_back(ii); + } + bmData.erase(group); + } else if (i != bmData.end()) { + bmData[ngroup] = bmData[group]; + bmData.erase(group); + } +} + +BookmarkList BookmarkMgr::getBookmarks(std::string group) { + std::lock_guard < std::mutex > lock(busy_lock); + + if (bmData.find(group) == bmData.end()) { + BookmarkList results; + return results; + } + + if (!bmDataSorted[group]) { + std::sort(bmData[group].begin(), bmData[group].end(), BookmarkEntryCompare()); + bmDataSorted[group] = true; + } + + return bmData[group]; +} + + +void BookmarkMgr::getGroups(BookmarkNames &arr) { + for (BookmarkMap::iterator i = bmData.begin(); i!= bmData.end(); ++i) { + arr.push_back(i->first); + } +} + +void BookmarkMgr::getGroups(wxArrayString &arr) { + for (BookmarkMap::iterator i = bmData.begin(); i!= bmData.end(); ++i) { + arr.push_back(i->first); + } +} + + +void BookmarkMgr::setExpandState(std::string groupName, bool state) { + expandState[groupName] = state; +} + + +bool BookmarkMgr::getExpandState(std::string groupName) { + if (expandState.find(groupName) == expandState.end()) { + return true; + } + return expandState[groupName]; +} + + +void BookmarkMgr::updateActiveList() { + BookmarkView *bmv = wxGetApp().getAppFrame()->getBookmarkView(); + + if (bmv) { + bmv->updateActiveList(); + } +} + +void BookmarkMgr::updateBookmarks() { + BookmarkView *bmv = wxGetApp().getAppFrame()->getBookmarkView(); + + if (bmv) { + bmv->updateBookmarks(); + } +} + +void BookmarkMgr::updateBookmarks(std::string group) { + BookmarkView *bmv = wxGetApp().getAppFrame()->getBookmarkView(); + + if (bmv) { + bmv->updateBookmarks(group); + } +} + + +void BookmarkMgr::addRecent(DemodulatorInstance *demod) { + std::lock_guard < std::mutex > lock(busy_lock); + recents.push_back(demodToBookmarkEntry(demod)); + + trimRecents(); +} + +void BookmarkMgr::addRecent(BookmarkEntry *be) { + std::lock_guard < std::mutex > lock(busy_lock); + + recents.push_back(be); + + trimRecents(); +} + + + +void BookmarkMgr::removeRecent(BookmarkEntry *be) { + std::lock_guard < std::mutex > lock(busy_lock); + + BookmarkList::iterator bm_i = std::find(recents.begin(),recents.end(), be); + + if (bm_i != recents.end()) { + recents.erase(bm_i); + } +} + + +BookmarkList BookmarkMgr::getRecents() { + + return BookmarkList(recents.rbegin(), recents.rend()); +} + + +void BookmarkMgr::clearRecents() { + std::lock_guard < std::mutex > lock(busy_lock); + + recents.erase(recents.begin(),recents.end()); +} + + +void BookmarkMgr::trimRecents() { + if (recents.size() > BOOKMARK_RECENTS_MAX) { + delete *(recents.begin()); + recents.erase(recents.begin(), recents.begin()+1); + } +} + + +void BookmarkMgr::addRange(BookmarkRangeEntry *re) { + std::lock_guard < std::mutex > lock(busy_lock); + + ranges.push_back(re); + rangesSorted = false; +} + + + +void BookmarkMgr::removeRange(BookmarkRangeEntry *re) { + std::lock_guard < std::mutex > lock(busy_lock); + + BookmarkRangeList::iterator re_i = std::find(ranges.begin(), ranges.end(), re); + + if (re_i != ranges.end()) { + ranges.erase(re_i); + } +} + + +BookmarkRangeList BookmarkMgr::getRanges() { + std::lock_guard < std::mutex > lock(busy_lock); + + if (!rangesSorted) { + std::sort(ranges.begin(), ranges.end(), BookmarkRangeEntryCompare()); + rangesSorted = true; + } + + return ranges; +} + + +void BookmarkMgr::clearRanges() { + std::lock_guard < std::mutex > lock(busy_lock); + + ranges.erase(ranges.begin(),ranges.end()); +} + + +BookmarkEntry *BookmarkMgr::demodToBookmarkEntry(DemodulatorInstance *demod) { + BookmarkEntry *be = new BookmarkEntry; + + be->bandwidth = demod->getBandwidth(); + be->type = demod->getDemodulatorType(); + be->label = demod->getDemodulatorUserLabel(); + be->frequency = demod->getFrequency(); + + be->node = new DataNode; + wxGetApp().getDemodMgr().saveInstance(be->node, demod); + + return be; +} + +BookmarkEntry *BookmarkMgr::nodeToBookmark(const char *name_in, DataNode *node) { + if (!node->hasAnother("frequency") || !node->hasAnother("type") || !node->hasAnother("bandwidth")) { + return nullptr; + } + + BookmarkEntry *be = new BookmarkEntry(); + node->getNext("frequency")->element()->get(be->frequency); + node->getNext("type")->element()->get(be->type); + node->getNext("bandwidth")->element()->get(be->bandwidth); + + if (node->hasAnother("user_label")) { + node->getNext("user_label")->element()->get(be->label); + } + + node->rewindAll(); + + be->node = new DataNode("node",*node); + + return be; +} + + +std::wstring BookmarkMgr::getBookmarkEntryDisplayName(BookmarkEntry *bmEnt) { + std::wstring dispName = bmEnt->label; + + if (dispName == "") { + std::string freqStr = frequencyToStr(bmEnt->frequency) + " " + bmEnt->type; + dispName = wstring(freqStr.begin(),freqStr.end()); + } + + return dispName; +} + +std::wstring BookmarkMgr::getActiveDisplayName(DemodulatorInstance *demod) { + std::wstring activeName = demod->getDemodulatorUserLabel(); + + if (activeName == "") { + std::string wstr = frequencyToStr(demod->getFrequency()) + " " + demod->getDemodulatorType(); + activeName = std::wstring(wstr.begin(),wstr.end()); + } + + return activeName; +} + diff --git a/src/BookmarkMgr.h b/src/BookmarkMgr.h new file mode 100644 index 0000000..c230b4b --- /dev/null +++ b/src/BookmarkMgr.h @@ -0,0 +1,132 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + +#pragma once + +#include + +#include +#include + +#include "DemodulatorInstance.h" + +class DataNode; + +class BookmarkEntry { +public: + std::mutex busy_lock; + + std::string type; + std::wstring label; + std::wstring userLabel; + + long long frequency; + int bandwidth; + + DataNode *node; +}; + + +class BookmarkRangeEntry { +public: + BookmarkRangeEntry() : label(L""), freq(0), startFreq(0), endFreq(0) { + + } + BookmarkRangeEntry(std::wstring label, long long freq, long long startFreq, long long endFreq) : label(label), freq(freq), startFreq(startFreq), endFreq(endFreq) { + } + + std::mutex busy_lock; + + std::wstring label; + + long long freq; + long long startFreq; + long long endFreq; +}; + + +struct BookmarkEntryCompare : public std::binary_function +{ + bool operator()(const BookmarkEntry *a, BookmarkEntry *b) const + { + return a->frequency < b->frequency; + } +}; + + +struct BookmarkRangeEntryCompare : public std::binary_function +{ + bool operator()(const BookmarkRangeEntry *a, BookmarkRangeEntry *b) const + { + return a->freq < b->freq; + } +}; + +typedef std::vector BookmarkList; +typedef std::vector BookmarkRangeList; +typedef std::map BookmarkMap; +typedef std::map BookmarkMapSorted; +typedef std::vector BookmarkNames; +typedef std::map BookmarkExpandState; + +class BookmarkMgr { +public: + BookmarkMgr(); + + void saveToFile(std::string bookmarkFn, bool backup = true); + bool loadFromFile(std::string bookmarkFn, bool backup = true); + + bool hasLastLoad(std::string bookmarkFn); + bool hasBackup(std::string bookmarkFn); + + void addBookmark(std::string group, DemodulatorInstance *demod); + void addBookmark(std::string group, BookmarkEntry *be); + void removeBookmark(std::string group, BookmarkEntry *be); + void removeBookmark(BookmarkEntry *be); + void moveBookmark(BookmarkEntry *be, std::string group); + + void addGroup(std::string group); + void removeGroup(std::string group); + void renameGroup(std::string group, std::string ngroup); + BookmarkList getBookmarks(std::string group); + void getGroups(BookmarkNames &arr); + void getGroups(wxArrayString &arr); + + void setExpandState(std::string groupName, bool state); + bool getExpandState(std::string groupName); + + void updateActiveList(); + void updateBookmarks(); + void updateBookmarks(std::string group); + + void addRecent(DemodulatorInstance *demod); + void addRecent(BookmarkEntry *be); + void removeRecent(BookmarkEntry *be); + BookmarkList getRecents(); + void clearRecents(); + + void addRange(BookmarkRangeEntry *re); + void removeRange(BookmarkRangeEntry *re); + BookmarkRangeList getRanges(); + void clearRanges(); + + + static std::wstring getBookmarkEntryDisplayName(BookmarkEntry *bmEnt); + static std::wstring getActiveDisplayName(DemodulatorInstance *demod); + +protected: + + void trimRecents(); + + BookmarkEntry *demodToBookmarkEntry(DemodulatorInstance *demod); + BookmarkEntry *nodeToBookmark(const char *name_in, DataNode *node); + + BookmarkMap bmData; + BookmarkMapSorted bmDataSorted; + BookmarkList recents; + BookmarkRangeList ranges; + bool rangesSorted; + std::mutex busy_lock; + + BookmarkExpandState expandState; +}; diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index 11195f9..a2aa0e8 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #define OPENGL #include "CubicSDRDefs.h" @@ -27,6 +30,9 @@ IMPLEMENT_APP(CubicSDR) #include #include +#include "ActionDialog.h" + + //#ifdef ENABLE_DIGITAL_LAB //// console output buffer for windows //#ifdef _WINDOWS @@ -133,8 +139,65 @@ long long strToFrequency(std::string freqStr) { } -CubicSDR::CubicSDR() : frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFAULT_SAMPLE_RATE),agcMode(false) - { + +class ActionDialogBookmarkCatastophe : public ActionDialog { +public: + ActionDialogBookmarkCatastophe() : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Bookmark Last-Loaded Backup Failure :( :( :(")) { + m_questionText->SetLabelText(wxT("All attempts to recover bookmarks have failed. \nWould you like to exit without touching any more save files?\nClick OK to exit without saving; or Cancel to continue anyways.")); + } + + void doClickOK() { + wxGetApp().getAppFrame()->disableSave(true); + wxGetApp().getAppFrame()->Close(false); + } +}; + + + +class ActionDialogBookmarkBackupLoadFailed : public ActionDialog { +public: + ActionDialogBookmarkBackupLoadFailed() : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Bookmark Backup Load Failure :( :(")) { + m_questionText->SetLabelText(wxT("Sorry; unable to load your bookmarks backup file. \nWould you like to attempt to load the last succssfully loaded bookmarks file?")); + } + + void doClickOK() { + if (wxGetApp().getBookmarkMgr().hasLastLoad("bookmarks.xml")) { + if (wxGetApp().getBookmarkMgr().loadFromFile("bookmarks.xml.lastloaded",false)) { + wxGetApp().getBookmarkMgr().updateBookmarks(); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else { + ActionDialog::showDialog(new ActionDialogBookmarkCatastophe()); + } + } + } +}; + + +class ActionDialogBookmarkLoadFailed : public ActionDialog { +public: + ActionDialogBookmarkLoadFailed() : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Bookmark Load Failure :(")) { + m_questionText->SetLabelText(wxT("Sorry; unable to load your bookmarks file. \nWould you like to attempt to load the backup file?")); + } + + void doClickOK() { + bool loadOk = false; + if (wxGetApp().getBookmarkMgr().hasBackup("bookmarks.xml")) { + loadOk = wxGetApp().getBookmarkMgr().loadFromFile("bookmarks.xml.backup",false); + } + if (loadOk) { + wxGetApp().getBookmarkMgr().updateBookmarks(); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (wxGetApp().getBookmarkMgr().hasLastLoad("bookmarks.xml")) { + ActionDialog::showDialog(new ActionDialogBookmarkBackupLoadFailed()); + } else { + ActionDialog::showDialog(new ActionDialogBookmarkCatastophe()); + } + } +}; + + +CubicSDR::CubicSDR() : frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFAULT_SAMPLE_RATE), agcMode(false) +{ sampleRateInitialized.store(false); agcMode.store(true); soloMode.store(false); @@ -207,9 +270,7 @@ bool CubicSDR::OnInit() { Modem::addModemFactory(ModemASK::factory, "ASK", 200000); Modem::addModemFactory(ModemBPSK::factory, "BPSK", 200000); Modem::addModemFactory(ModemDPSK::factory, "DPSK", 200000); -#if ENABLE_LIQUID_EXPERIMENTAL Modem::addModemFactory(ModemFSK::factory, "FSK", 19200); -#endif Modem::addModemFactory(ModemGMSK::factory, "GMSK", 19200); Modem::addModemFactory(ModemOOK::factory, "OOK", 200000); Modem::addModemFactory(ModemPSK::factory, "PSK", 200000); @@ -228,26 +289,16 @@ bool CubicSDR::OnInit() { // Visual Data spectrumVisualThread = new SpectrumVisualDataThread(); - demodVisualThread = new SpectrumVisualDataThread(); pipeIQVisualData = new DemodulatorThreadInputQueue(); pipeIQVisualData->set_max_num_items(1); - - pipeDemodIQVisualData = new DemodulatorThreadInputQueue(); - pipeDemodIQVisualData->set_max_num_items(1); pipeWaterfallIQVisualData = new DemodulatorThreadInputQueue(); pipeWaterfallIQVisualData->set_max_num_items(128); - getDemodSpectrumProcessor()->setInput(pipeDemodIQVisualData); getSpectrumProcessor()->setInput(pipeIQVisualData); getSpectrumProcessor()->setHideDC(true); - pipeAudioVisualData = new DemodulatorThreadOutputQueue(); - pipeAudioVisualData->set_max_num_items(1); - - scopeProcessor.setInput(pipeAudioVisualData); - // I/Q Data pipeSDRIQData = new SDRThreadIQDataQueue(); pipeSDRIQData->set_max_num_items(100); @@ -260,11 +311,42 @@ bool CubicSDR::OnInit() { sdrPostThread->setOutputQueue("IQVisualDataOutput", pipeIQVisualData); sdrPostThread->setOutputQueue("IQDataOutput", pipeWaterfallIQVisualData); - sdrPostThread->setOutputQueue("IQActiveDemodVisualDataOutput", pipeDemodIQVisualData); + +#if CUBICSDR_ENABLE_VIEW_SCOPE + pipeAudioVisualData = new DemodulatorThreadOutputQueue(); + pipeAudioVisualData->set_max_num_items(1); - t_PostSDR = new std::thread(&SDRPostThread::threadMain, sdrPostThread); + scopeProcessor.setInput(pipeAudioVisualData); +#else + pipeAudioVisualData = nullptr; +#endif + +#if CUBICSDR_ENABLE_VIEW_DEMOD + demodVisualThread = new SpectrumVisualDataThread(); + pipeDemodIQVisualData = new DemodulatorThreadInputQueue(); + pipeDemodIQVisualData->set_max_num_items(1); + + if (getDemodSpectrumProcessor()) { + getDemodSpectrumProcessor()->setInput(pipeDemodIQVisualData); + } + sdrPostThread->setOutputQueue("IQActiveDemodVisualDataOutput", pipeDemodIQVisualData); +#else + demodVisualThread = nullptr; + pipeDemodIQVisualData = nullptr; + t_DemodVisual = nullptr; +#endif + + // Now that input/output queue plumbing is completely done, we can + //safely starts all the threads: t_SpectrumVisual = new std::thread(&SpectrumVisualDataThread::threadMain, spectrumVisualThread); - t_DemodVisual = new std::thread(&SpectrumVisualDataThread::threadMain, demodVisualThread); + + if (demodVisualThread != nullptr) { + t_DemodVisual = new std::thread(&SpectrumVisualDataThread::threadMain, demodVisualThread); + } + + //Start SDRPostThread last. + t_PostSDR = new std::thread(&SDRPostThread::threadMain, sdrPostThread); + sdrEnum = new SDREnumerator(); @@ -283,6 +365,19 @@ bool CubicSDR::OnInit() { // pthread_setschedparam(pthread_self(), main_policy, &main_param); //#endif + if (!wxGetApp().getBookmarkMgr().loadFromFile("bookmarks.xml")) { + if (wxGetApp().getBookmarkMgr().hasBackup("bookmarks.xml")) { + ActionDialog::showDialog(new ActionDialogBookmarkLoadFailed()); + } else if (wxGetApp().getBookmarkMgr().hasLastLoad("bookmarks.xml")) { + ActionDialog::showDialog(new ActionDialogBookmarkBackupLoadFailed()); + } else { + ActionDialog::showDialog(new ActionDialogBookmarkCatastophe()); + } + } else { + getBookmarkMgr().updateActiveList(); + getBookmarkMgr().updateBookmarks(); + } + return true; } @@ -313,16 +408,20 @@ int CubicSDR::OnExit() { std::cout << "Terminating Visual Processor threads.." << std::endl; spectrumVisualThread->terminate(); - demodVisualThread->terminate(); - + if (demodVisualThread) { + demodVisualThread->terminate(); + } + //Wait nicely sdrPostThread->isTerminated(1000); spectrumVisualThread->isTerminated(1000); - demodVisualThread->isTerminated(1000); + if (demodVisualThread) { + demodVisualThread->isTerminated(1000); + } //Then join the thread themselves t_PostSDR->join(); - t_DemodVisual->join(); + if (t_DemodVisual) t_DemodVisual->join(); t_SpectrumVisual->join(); //Now only we can delete @@ -491,7 +590,9 @@ void CubicSDR::setFrequency(long long freq) { getSpectrumProcessor()->setPeakHold(getSpectrumProcessor()->getPeakHold()); //make the peak hold act on the current dmod also, like a zoomed-in version. - getDemodSpectrumProcessor()->setPeakHold(getSpectrumProcessor()->getPeakHold()); + if (getDemodSpectrumProcessor()) { + getDemodSpectrumProcessor()->setPeakHold(getSpectrumProcessor()->getPeakHold()); + } } long long CubicSDR::getOffset() { @@ -534,15 +635,15 @@ void CubicSDR::setSampleRate(long long rate_in) { setFrequency(frequency); if (rate_in <= CHANNELIZER_RATE_MAX / 8) { - appframe->setMainWaterfallFFTSize(512); + appframe->setMainWaterfallFFTSize(DEFAULT_FFT_SIZE / 4); appframe->getWaterfallDataThread()->getProcessor()->setHideDC(false); spectrumVisualThread->getProcessor()->setHideDC(false); } else if (rate_in <= CHANNELIZER_RATE_MAX) { - appframe->setMainWaterfallFFTSize(1024); + appframe->setMainWaterfallFFTSize(DEFAULT_FFT_SIZE / 2); appframe->getWaterfallDataThread()->getProcessor()->setHideDC(false); spectrumVisualThread->getProcessor()->setHideDC(false); } else if (rate_in > CHANNELIZER_RATE_MAX) { - appframe->setMainWaterfallFFTSize(2048); + appframe->setMainWaterfallFFTSize(DEFAULT_FFT_SIZE); appframe->getWaterfallDataThread()->getProcessor()->setHideDC(true); spectrumVisualThread->getProcessor()->setHideDC(true); } @@ -652,7 +753,11 @@ SpectrumVisualProcessor *CubicSDR::getSpectrumProcessor() { } SpectrumVisualProcessor *CubicSDR::getDemodSpectrumProcessor() { - return demodVisualThread->getProcessor(); + if (demodVisualThread) { + return demodVisualThread->getProcessor(); + } else { + return nullptr; + } } DemodulatorThreadOutputQueue* CubicSDR::getAudioVisualQueue() { @@ -671,6 +776,10 @@ DemodulatorMgr &CubicSDR::getDemodMgr() { return demodMgr; } +BookmarkMgr &CubicSDR::getBookmarkMgr() { + return bookmarkMgr; +} + SDRPostThread *CubicSDR::getSDRPostThread() { return sdrPostThread; } @@ -704,6 +813,7 @@ void CubicSDR::removeDemodulator(DemodulatorInstance *demod) { } demod->setActive(false); sdrPostThread->removeDemodulator(demod); + wxGetApp().getAppFrame()->notifyUpdateModemProperties(); } std::vector* CubicSDR::getDevices() { @@ -749,6 +859,7 @@ void CubicSDR::showFrequencyInput(FrequencyDialog::FrequencyDialogTarget targetM switch (targetMode) { case FrequencyDialog::FDIALOG_TARGET_DEFAULT: + case FrequencyDialog::FDIALOG_TARGET_FREQ: title = demodMgr.getActiveDemodulator()?demodTitle:freqTitle; break; case FrequencyDialog::FDIALOG_TARGET_BANDWIDTH: @@ -806,6 +917,10 @@ bool CubicSDR::areDevicesReady() { return devicesReady.load(); } +void CubicSDR::notifyMainUIOfDeviceChange() { + appframe->notifyDeviceChanged(); +} + bool CubicSDR::areDevicesEnumerating() { return !sdrEnum->isTerminated(); } diff --git a/src/CubicSDR.h b/src/CubicSDR.h index 07b28cb..33bfa31 100644 --- a/src/CubicSDR.h +++ b/src/CubicSDR.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once //WX_GL_CORE_PROFILE 1 @@ -10,12 +13,8 @@ #include "PrimaryGLContext.h" #include "ThreadQueue.h" -#ifdef USE_RTL_SDR - #include "SDRThread.h" -#else - #include "SoapySDRThread.h" - #include "SDREnumerator.h" -#endif +#include "SoapySDRThread.h" +#include "SDREnumerator.h" #include "SDRPostThread.h" #include "AudioThread.h" #include "DemodulatorMgr.h" @@ -23,6 +22,7 @@ #include "AppFrame.h" #include "FrequencyDialog.h" #include "DemodLabelDialog.h" +#include "BookmarkMgr.h" #include "ScopeVisualProcessor.h" #include "SpectrumVisualProcessor.h" @@ -44,9 +44,7 @@ #include "ModemASK.h" #include "ModemBPSK.h" #include "ModemDPSK.h" -#if ENABLE_LIQUID_EXPERIMENTAL #include "ModemFSK.h" -#endif #include "ModemGMSK.h" #include "ModemOOK.h" #include "ModemPSK.h" @@ -93,6 +91,9 @@ public: void setOffset(long long ofs); long long getOffset(); + + void setDBOffset(int ofs); + int getDBOffset(); void setSampleRate(long long rate_in); long long getSampleRate(); @@ -111,6 +112,7 @@ public: DemodulatorThreadInputQueue* getWaterfallVisualQueue(); DemodulatorThreadInputQueue* getActiveDemodVisualQueue(); DemodulatorMgr &getDemodMgr(); + BookmarkMgr &getBookmarkMgr(); SDRPostThread *getSDRPostThread(); SDRThread *getSDRThread(); @@ -136,6 +138,8 @@ public: bool areDevicesEnumerating(); bool areModulesMissing(); std::string getNotification(); + + void notifyMainUIOfDeviceChange(); void addRemote(std::string remoteAddr); void removeRemote(std::string remoteAddr); @@ -179,6 +183,7 @@ private: std::vector *devs = nullptr; DemodulatorMgr demodMgr; + BookmarkMgr bookmarkMgr; std::atomic_llong frequency; std::atomic_llong offset; diff --git a/src/CubicSDRDefs.h b/src/CubicSDRDefs.h index 210126c..e5cc4ca 100644 --- a/src/CubicSDRDefs.h +++ b/src/CubicSDRDefs.h @@ -1,6 +1,9 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once -#define CUBICSDR_TITLE "CubicSDR v" CUBICSDR_VERSION " by Charles J. Cliffe (@ccliffe) :: www.cubicsdr.com" +#define CUBICSDR_TITLE "" CUBICSDR_BUILD_TITLE #ifndef __BYTE_ORDER #ifdef _WIN32 @@ -28,13 +31,31 @@ const char filePathSeparator = #define BUF_SIZE (16384*6) #define DEFAULT_SAMPLE_RATE 2500000 + +// #define DEFAULT_FFT_SIZE 2048 +#define DEFAULT_DMOD_FFT_SIZE (DEFAULT_FFT_SIZE / 2) +#define DEFAULT_SCOPE_FFT_SIZE (DEFAULT_FFT_SIZE / 2) + +//Both must be a power of 2 to prevent terrible OpenGL performance. +//TODO: Make the waterfall resolutions an option. +#define DEFAULT_MAIN_WATERFALL_LINES_NB 512 // 1024 +#define DEFAULT_DEMOD_WATERFALL_LINES_NB 256 #define DEFAULT_DEMOD_TYPE "FM" #define DEFAULT_DEMOD_BW 200000 #define DEFAULT_WATERFALL_LPS 30 +//Dmod waterfall lines per second is adjusted +//so that the whole demod waterfall show DEMOD_WATERFALL_DURATION_IN_SECONDS +//seconds. +#define DEMOD_WATERFALL_DURATION_IN_SECONDS 4.0 + #define CHANNELIZER_RATE_MAX 500000 +#define MANUAL_SAMPLE_RATE_MIN 2000000 // 2MHz +#define MANUAL_SAMPLE_RATE_MAX 200000000 // 200MHz (We are 2017+ after all) +//Represents the amount of time to process in the FFT distributor. +#define FFT_DISTRIBUTOR_BUFFER_IN_SECONDS 0.250 diff --git a/src/DemodLabelDialog.cpp b/src/DemodLabelDialog.cpp index d5a7e50..251c356 100644 --- a/src/DemodLabelDialog.cpp +++ b/src/DemodLabelDialog.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "DemodLabelDialog.h" #include "wx/clipbrd.h" @@ -57,7 +60,7 @@ void DemodLabelDialog::OnChar(wxKeyEvent& event) { else { activeDemod->setDemodulatorUserLabel(L""); } - + wxGetApp().getBookmarkMgr().updateActiveList(); Close(); break; case WXK_ESCAPE: diff --git a/src/DemodLabelDialog.h b/src/DemodLabelDialog.h index a10d34b..cee9cff 100644 --- a/src/DemodLabelDialog.h +++ b/src/DemodLabelDialog.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/dialog.h" diff --git a/src/FrequencyDialog.cpp b/src/FrequencyDialog.cpp index 3882455..f16ad3b 100644 --- a/src/FrequencyDialog.cpp +++ b/src/FrequencyDialog.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "FrequencyDialog.h" #include "wx/clipbrd.h" diff --git a/src/FrequencyDialog.h b/src/FrequencyDialog.h index 6353c39..259de20 100644 --- a/src/FrequencyDialog.h +++ b/src/FrequencyDialog.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/dialog.h" diff --git a/src/IOThread.cpp b/src/IOThread.cpp index a27c71c..029fe73 100644 --- a/src/IOThread.cpp +++ b/src/IOThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "IOThread.h" #include @@ -69,7 +72,7 @@ void IOThread::terminate() { }; void IOThread::onBindOutput(std::string /* name */, ThreadQueueBase* /* threadQueue */) { - + }; void IOThread::onBindInput(std::string /* name */, ThreadQueueBase* /* threadQueue */) { @@ -77,20 +80,24 @@ void IOThread::onBindInput(std::string /* name */, ThreadQueueBase* /* threadQue }; void IOThread::setInputQueue(std::string qname, ThreadQueueBase *threadQueue) { + std::lock_guard < std::mutex > lock(m_queue_bindings_mutex); input_queues[qname] = threadQueue; this->onBindInput(qname, threadQueue); }; ThreadQueueBase *IOThread::getInputQueue(std::string qname) { + std::lock_guard < std::mutex > lock(m_queue_bindings_mutex); return input_queues[qname]; }; void IOThread::setOutputQueue(std::string qname, ThreadQueueBase *threadQueue) { + std::lock_guard < std::mutex > lock(m_queue_bindings_mutex); output_queues[qname] = threadQueue; this->onBindOutput(qname, threadQueue); }; ThreadQueueBase *IOThread::getOutputQueue(std::string qname) { + std::lock_guard < std::mutex > lock(m_queue_bindings_mutex); return output_queues[qname]; }; diff --git a/src/IOThread.h b/src/IOThread.h index 2fe8504..9750366 100644 --- a/src/IOThread.h +++ b/src/IOThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -218,7 +221,10 @@ public: protected: std::map input_queues; std::map output_queues; - + + //this protects against concurrent changes in input/output bindings: get/set/Input/OutPutQueue + mutable std::mutex m_queue_bindings_mutex; + //true when a termination is ordered std::atomic_bool stopping; Timer gTimer; @@ -227,4 +233,5 @@ private: //true when the thread has really ended, i.e run() from threadMain() has returned. std::atomic_bool terminated; + }; diff --git a/src/ModemProperties.cpp b/src/ModemProperties.cpp index be3e6ba..9984bdc 100644 --- a/src/ModemProperties.cpp +++ b/src/ModemProperties.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemProperties.h" #include "CubicSDR.h" @@ -30,26 +33,10 @@ void ModemProperties::OnShow(wxShowEvent & /* event */) { } void ModemProperties::updateTheme() { - wxColour bgColor( - (unsigned char) (ThemeMgr::mgr.currentTheme->generalBackground.r * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->generalBackground.g * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->generalBackground.b * 255.0)); - - wxColour textColor( - (unsigned char) (ThemeMgr::mgr.currentTheme->text.r * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->text.g * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->text.b * 255.0)); - - wxColour btn( - (unsigned char) (ThemeMgr::mgr.currentTheme->button.r * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->button.g * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->button.b * 255.0)); - - wxColour btnHl( - (unsigned char) (ThemeMgr::mgr.currentTheme->buttonHighlight.r * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->buttonHighlight.g * 255.0), - (unsigned char) (ThemeMgr::mgr.currentTheme->buttonHighlight.b * 255.0)); - + wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground); + wxColour textColor(ThemeMgr::mgr.currentTheme->text); + wxColour btn(ThemeMgr::mgr.currentTheme->button); + wxColour btnHl(ThemeMgr::mgr.currentTheme->buttonHighlight); m_propertyGrid->SetEmptySpaceColour(bgColor); m_propertyGrid->SetCellBackgroundColour(bgColor); @@ -122,10 +109,8 @@ void ModemProperties::initProperties(ModemArgInfoList newArgs, DemodulatorInstan m_propertyGrid->Clear(); if (!demodInstance) { - Hide(); + m_propertyGrid->Append(new wxPropertyCategory("Modem Settings")); return; - } else { - Show(); } m_propertyGrid->Append(new wxPropertyCategory(demodInstance->getDemodulatorType() + " Settings")); diff --git a/src/ModemProperties.h b/src/ModemProperties.h index bfebcde..268e366 100644 --- a/src/ModemProperties.h +++ b/src/ModemProperties.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/audio/AudioThread.cpp b/src/audio/AudioThread.cpp index f1c2038..bb8b6d0 100644 --- a/src/audio/AudioThread.cpp +++ b/src/audio/AudioThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "AudioThread.h" #include "CubicSDRDefs.h" #include @@ -257,7 +260,7 @@ void AudioThread::enumerateDevices(std::vector &devs) { std::cout << "\t\t32-bit float normalized between plus/minus 1.0." << std::endl; } if (nFormats & RTAUDIO_FLOAT64) { - std::cout << "\t\t32-bit float normalized between plus/minus 1.0." << std::endl; + std::cout << "\t\t64-bit float normalized between plus/minus 1.0." << std::endl; } std::vector::iterator srate; diff --git a/src/audio/AudioThread.h b/src/audio/AudioThread.h index 65388c7..8eff8be 100644 --- a/src/audio/AudioThread.h +++ b/src/audio/AudioThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/demod/DemodDefs.h b/src/demod/DemodDefs.h index dab36b3..043ad41 100644 --- a/src/demod/DemodDefs.h +++ b/src/demod/DemodDefs.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ThreadQueue.h" @@ -56,6 +59,7 @@ class ModemKit; class DemodulatorThreadPostIQData: public ReferenceCounter { public: std::vector data; + long long sampleRate; std::string modemName; std::string modemType; diff --git a/src/demod/DemodulatorInstance.cpp b/src/demod/DemodulatorInstance.cpp index bf3d788..61f4432 100644 --- a/src/demod/DemodulatorInstance.cpp +++ b/src/demod/DemodulatorInstance.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "DemodulatorInstance.h" #include "CubicSDR.h" @@ -80,6 +83,8 @@ DemodulatorInstance::~DemodulatorInstance() { delete pipeIQDemodData; delete threadQueueControl; delete pipeAudioData; + + wxGetApp().getBookmarkMgr().updateActiveList(); } void DemodulatorInstance::setVisualOutputQueue(DemodulatorThreadOutputQueue *tQueue) { @@ -118,6 +123,7 @@ void DemodulatorInstance::run() { active = true; + wxGetApp().getBookmarkMgr().updateActiveList(); } void DemodulatorInstance::updateLabel(long long freq) { @@ -125,6 +131,7 @@ void DemodulatorInstance::updateLabel(long long freq) { newLabel.precision(3); newLabel << std::fixed << ((long double) freq / 1000000.0); setLabel(newLabel.str()); + wxGetApp().getBookmarkMgr().updateActiveList(); } void DemodulatorInstance::terminate() { @@ -227,6 +234,8 @@ void DemodulatorInstance::setActive(bool state) { tracking = false; } active = state; + + wxGetApp().getBookmarkMgr().updateActiveList(); } void DemodulatorInstance::squelchAuto() { @@ -331,7 +340,9 @@ void DemodulatorInstance::setDemodulatorType(std::string demod_type_in) { outp->setTitle(getDemodulatorType() + ": " + frequencyToStr(getFrequency())); } #endif -} + } + + wxGetApp().getBookmarkMgr().updateActiveList(); } std::string DemodulatorInstance::getDemodulatorType() { @@ -391,6 +402,10 @@ void DemodulatorInstance::setFrequency(long long freq) { wxGetApp().getRigThread()->setFrequency(freq,true); } #endif + + if (this->isActive()) { + wxGetApp().getBookmarkMgr().updateActiveList(); + } } long long DemodulatorInstance::getFrequency() { diff --git a/src/demod/DemodulatorInstance.h b/src/demod/DemodulatorInstance.h index 554ed48..749c6ec 100644 --- a/src/demod/DemodulatorInstance.h +++ b/src/demod/DemodulatorInstance.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/demod/DemodulatorMgr.cpp b/src/demod/DemodulatorMgr.cpp index 61be65c..2a75d34 100644 --- a/src/demod/DemodulatorMgr.cpp +++ b/src/demod/DemodulatorMgr.cpp @@ -1,15 +1,22 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include #include #include -#include "CubicSDR.h" #include #include #include +#include "DemodulatorMgr.h" +#include "CubicSDR.h" + #if USE_HAMLIB #include "RigThread.h" #endif +#include "DataTree.h" + bool demodFreqCompare (DemodulatorInstance *i, DemodulatorInstance *j) { return (i->getFrequency()getFrequency()); } bool inactiveCompare (DemodulatorInstance *i, DemodulatorInstance *j) { return (i->isActive()isActive()); } @@ -130,6 +137,8 @@ DemodulatorInstance *DemodulatorMgr::getFirstDemodulator() { void DemodulatorMgr::deleteThread(DemodulatorInstance *demod) { std::lock_guard < std::recursive_mutex > lock(demods_busy); + + wxGetApp().getBookmarkMgr().addRecent(demod); std::vector::iterator i; @@ -215,6 +224,7 @@ void DemodulatorMgr::setActiveDemodulator(DemodulatorInstance *demod, bool tempo wxGetApp().getRigThread()->setFrequency(lastActiveDemodulator.load()->getFrequency(),true); } #endif + wxGetApp().getBookmarkMgr().updateActiveList(); } else { std::lock_guard < std::recursive_mutex > lock(demods_busy); garbageCollect(); @@ -368,3 +378,138 @@ ModemSettings DemodulatorMgr::getLastModemSettings(std::string modemType) { void DemodulatorMgr::setLastModemSettings(std::string modemType, ModemSettings settings) { lastModemSettings[modemType] = settings; } + +void DemodulatorMgr::setOutputDevices(std::map devs) { + outputDevices = devs; +} + +void DemodulatorMgr::saveInstance(DataNode *node, DemodulatorInstance *inst) { + *node->newChild("bandwidth") = inst->getBandwidth(); + *node->newChild("frequency") = inst->getFrequency(); + *node->newChild("type") = inst->getDemodulatorType(); + + node->newChild("user_label")->element()->set(inst->getDemodulatorUserLabel()); + + *node->newChild("squelch_level") = inst->getSquelchLevel(); + *node->newChild("squelch_enabled") = inst->isSquelchEnabled() ? 1 : 0; + *node->newChild("output_device") = outputDevices[inst->getOutputDevice()].name; + *node->newChild("gain") = inst->getGain(); + *node->newChild("muted") = inst->isMuted() ? 1 : 0; + if (inst->isDeltaLock()) { + *node->newChild("delta_lock") = inst->isDeltaLock() ? 1 : 0; + *node->newChild("delta_ofs") = inst->getDeltaLockOfs(); + } + if (inst == getLastActiveDemodulator()) { + *node->newChild("active") = 1; + } + + ModemSettings saveSettings = inst->readModemSettings(); + if (saveSettings.size()) { + DataNode *settingsNode = node->newChild("settings"); + for (ModemSettings::const_iterator msi = saveSettings.begin(); msi != saveSettings.end(); msi++) { + *settingsNode->newChild(msi->first.c_str()) = msi->second; + } + } + +} + +DemodulatorInstance *DemodulatorMgr::loadInstance(DataNode *node) { + DemodulatorInstance *newDemod = nullptr; + + node->rewindAll(); + + long bandwidth = *node->getNext("bandwidth"); + long long freq = *node->getNext("frequency"); + float squelch_level = node->hasAnother("squelch_level") ? (float) *node->getNext("squelch_level") : 0; + int squelch_enabled = node->hasAnother("squelch_enabled") ? (int) *node->getNext("squelch_enabled") : 0; + int muted = node->hasAnother("muted") ? (int) *node->getNext("muted") : 0; + int delta_locked = node->hasAnother("delta_lock") ? (int) *node->getNext("delta_lock") : 0; + int delta_ofs = node->hasAnother("delta_ofs") ? (int) *node->getNext("delta_ofs") : 0; + std::string output_device = node->hasAnother("output_device") ? string(*(node->getNext("output_device"))) : ""; + float gain = node->hasAnother("gain") ? (float) *node->getNext("gain") : 1.0; + + std::string type = "FM"; + + DataNode *demodTypeNode = node->hasAnother("type")?node->getNext("type"):nullptr; + + if (demodTypeNode && demodTypeNode->element()->getDataType() == DATA_INT) { + int legacyType = *demodTypeNode; + int legacyStereo = node->hasAnother("stereo") ? (int) *node->getNext("stereo") : 0; + switch (legacyType) { // legacy demod ID + case 1: type = legacyStereo?"FMS":"FM"; break; + case 2: type = "AM"; break; + case 3: type = "LSB"; break; + case 4: type = "USB"; break; + case 5: type = "DSB"; break; + case 6: type = "ASK"; break; + case 7: type = "APSK"; break; + case 8: type = "BPSK"; break; + case 9: type = "DPSK"; break; + case 10: type = "PSK"; break; + case 11: type = "OOK"; break; + case 12: type = "ST"; break; + case 13: type = "SQAM"; break; + case 14: type = "QAM"; break; + case 15: type = "QPSK"; break; + case 16: type = "I/Q"; break; + default: type = "FM"; break; + } + } else if (demodTypeNode && demodTypeNode->element()->getDataType() == DATA_STRING) { + demodTypeNode->element()->get(type); + } + + //read the user label associated with the demodulator + std::wstring user_label = L""; + + DataNode *demodUserLabel = node->hasAnother("user_label") ? node->getNext("user_label") : nullptr; + + if (demodUserLabel) { + demodUserLabel->element()->get(user_label); + } + + ModemSettings mSettings; + + if (node->hasAnother("settings")) { + DataNode *modemSettings = node->getNext("settings"); + for (int msi = 0, numSettings = modemSettings->numChildren(); msi < numSettings; msi++) { + DataNode *settingNode = modemSettings->child(msi); + std::string keyName = settingNode->getName(); + std::string strSettingValue = settingNode->element()->toString(); + + if (keyName != "" && strSettingValue != "") { + mSettings[keyName] = strSettingValue; + } + } + } + + newDemod = wxGetApp().getDemodMgr().newThread(); + + newDemod->setDemodulatorType(type); + newDemod->setDemodulatorUserLabel(user_label); + newDemod->writeModemSettings(mSettings); + newDemod->setBandwidth(bandwidth); + newDemod->setFrequency(freq); + newDemod->setGain(gain); + newDemod->updateLabel(freq); + newDemod->setMuted(muted?true:false); + if (delta_locked) { + newDemod->setDeltaLock(true); + newDemod->setDeltaLockOfs(delta_ofs); + } + if (squelch_enabled) { + newDemod->setSquelchEnabled(true); + newDemod->setSquelchLevel(squelch_level); + } + + bool found_device = false; + std::map::iterator i; + for (i = outputDevices.begin(); i != outputDevices.end(); i++) { + if (i->second.name == output_device) { + newDemod->setOutputDevice(i->first); + found_device = true; + } + } + + return newDemod; +} + diff --git a/src/demod/DemodulatorMgr.h b/src/demod/DemodulatorMgr.h index a993f84..41b0945 100644 --- a/src/demod/DemodulatorMgr.h +++ b/src/demod/DemodulatorMgr.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -6,6 +9,8 @@ #include "DemodulatorInstance.h" +class DataNode; + class DemodulatorMgr { public: DemodulatorMgr(); @@ -54,6 +59,10 @@ public: void updateLastState(); + void setOutputDevices(std::map devs); + void saveInstance(DataNode *node, DemodulatorInstance *inst); + DemodulatorInstance *loadInstance(DataNode *node); + private: void garbageCollect(); @@ -79,4 +88,5 @@ private: std::recursive_mutex demods_busy; std::map lastModemSettings; + std::map outputDevices; }; diff --git a/src/demod/DemodulatorPreThread.cpp b/src/demod/DemodulatorPreThread.cpp index e4286fe..e4319a4 100644 --- a/src/demod/DemodulatorPreThread.cpp +++ b/src/demod/DemodulatorPreThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "CubicSDRDefs.h" #include diff --git a/src/demod/DemodulatorPreThread.h b/src/demod/DemodulatorPreThread.h index e20bf68..31e496a 100644 --- a/src/demod/DemodulatorPreThread.h +++ b/src/demod/DemodulatorPreThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/demod/DemodulatorThread.cpp b/src/demod/DemodulatorThread.cpp index 259c128..16fa619 100644 --- a/src/demod/DemodulatorThread.cpp +++ b/src/demod/DemodulatorThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "CubicSDRDefs.h" #include "DemodulatorThread.h" #include "DemodulatorInstance.h" diff --git a/src/demod/DemodulatorThread.h b/src/demod/DemodulatorThread.h index 10124a4..5709bb9 100644 --- a/src/demod/DemodulatorThread.h +++ b/src/demod/DemodulatorThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/demod/DemodulatorWorkerThread.cpp b/src/demod/DemodulatorWorkerThread.cpp index 35efd62..2c5c896 100644 --- a/src/demod/DemodulatorWorkerThread.cpp +++ b/src/demod/DemodulatorWorkerThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "DemodulatorWorkerThread.h" #include "CubicSDRDefs.h" #include "CubicSDR.h" diff --git a/src/demod/DemodulatorWorkerThread.h b/src/demod/DemodulatorWorkerThread.h index 140046a..e0b4065 100644 --- a/src/demod/DemodulatorWorkerThread.h +++ b/src/demod/DemodulatorWorkerThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp new file mode 100644 index 0000000..8e0d6f1 --- /dev/null +++ b/src/forms/Bookmark/BookmarkPanel.cpp @@ -0,0 +1,136 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 23 2015) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "BookmarkPanel.h" + +/////////////////////////////////////////////////////////////////////////// + +BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +{ + wxBoxSizer* bSizer1; + bSizer1 = new wxBoxSizer( wxVERTICAL ); + + m_searchText = new wxTextCtrl( this, wxID_ANY, wxT("Search.."), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); + bSizer1->Add( m_searchText, 0, wxALL|wxEXPAND, 5 ); + + m_clearSearchButton = new wxButton( this, wxID_ANY, wxT("Clear Search"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer1->Add( m_clearSearchButton, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 ); + + m_treeView = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT|wxTR_HIDE_ROOT|wxTR_SINGLE ); + bSizer1->Add( m_treeView, 1, wxEXPAND, 5 ); + + m_propPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxFlexGridSizer* fgPropSizer; + fgPropSizer = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgPropSizer->AddGrowableCol( 1 ); + fgPropSizer->SetFlexibleDirection( wxBOTH ); + fgPropSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_labelLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("Label"), wxDefaultPosition, wxDefaultSize, 0 ); + m_labelLabel->Wrap( -1 ); + fgPropSizer->Add( m_labelLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_labelText = new wxTextCtrl( m_propPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); + fgPropSizer->Add( m_labelText, 0, wxALL|wxEXPAND, 5 ); + + m_frequencyLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("Freq"), wxDefaultPosition, wxDefaultSize, 0 ); + m_frequencyLabel->Wrap( -1 ); + fgPropSizer->Add( m_frequencyLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_frequencyVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("FrequencyVal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_frequencyVal->Wrap( -1 ); + fgPropSizer->Add( m_frequencyVal, 0, wxALL, 5 ); + + m_bandwidthLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("BW"), wxDefaultPosition, wxDefaultSize, 0 ); + m_bandwidthLabel->Wrap( -1 ); + fgPropSizer->Add( m_bandwidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_bandwidthVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("BandwidthVal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_bandwidthVal->Wrap( -1 ); + fgPropSizer->Add( m_bandwidthVal, 0, wxALL, 5 ); + + m_modulationLabel = new wxStaticText( m_propPanel, wxID_ANY, wxT("Type"), wxDefaultPosition, wxDefaultSize, 0 ); + m_modulationLabel->Wrap( -1 ); + fgPropSizer->Add( m_modulationLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_modulationVal = new wxStaticText( m_propPanel, wxID_ANY, wxT("TypeVal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_modulationVal->Wrap( -1 ); + fgPropSizer->Add( m_modulationVal, 0, wxALL, 5 ); + + + m_propPanel->SetSizer( fgPropSizer ); + m_propPanel->Layout(); + fgPropSizer->Fit( m_propPanel ); + bSizer1->Add( m_propPanel, 0, wxALL|wxBOTTOM|wxEXPAND|wxTOP, 5 ); + + m_buttonPanel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* m_buttonPanelSizer; + m_buttonPanelSizer = new wxBoxSizer( wxVERTICAL ); + + + m_buttonPanel->SetSizer( m_buttonPanelSizer ); + m_buttonPanel->Layout(); + m_buttonPanelSizer->Fit( m_buttonPanel ); + bSizer1->Add( m_buttonPanel, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizer1 ); + this->Layout(); + m_updateTimer.SetOwner( this, wxID_ANY ); + + // Connect Events + this->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) ); + this->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) ); + this->Connect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ) ); + m_searchText->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( BookmarkPanel::onSearchTextFocus ), NULL, this ); + m_searchText->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BookmarkPanel::onSearchText ), NULL, this ); + m_clearSearchButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BookmarkPanel::onClearSearch ), NULL, this ); + m_treeView->Connect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeBeginLabelEdit ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_END_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeEndDrag ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_END_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeEndLabelEdit ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( BookmarkPanel::onTreeActivate ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_COLLAPSED, wxTreeEventHandler( BookmarkPanel::onTreeCollapse ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDED, wxTreeEventHandler( BookmarkPanel::onTreeExpanded ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, wxTreeEventHandler( BookmarkPanel::onTreeItemGetTooltip ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_ITEM_MENU, wxTreeEventHandler( BookmarkPanel::onTreeItemMenu ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( BookmarkPanel::onTreeSelect ), NULL, this ); + m_treeView->Connect( wxEVT_COMMAND_TREE_SEL_CHANGING, wxTreeEventHandler( BookmarkPanel::onTreeSelectChanging ), NULL, this ); + m_labelText->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( BookmarkPanel::onLabelText ), NULL, this ); + m_frequencyVal->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( BookmarkPanel::onDoubleClickFreq ), NULL, this ); + m_bandwidthVal->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( BookmarkPanel::onDoubleClickBandwidth ), NULL, this ); + this->Connect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( BookmarkPanel::onUpdateTimer ) ); +} + +BookmarkPanel::~BookmarkPanel() +{ + // Disconnect Events + this->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ) ); + this->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ) ); + this->Disconnect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ) ); + m_searchText->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( BookmarkPanel::onSearchTextFocus ), NULL, this ); + m_searchText->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BookmarkPanel::onSearchText ), NULL, this ); + m_clearSearchButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BookmarkPanel::onClearSearch ), NULL, this ); + m_treeView->Disconnect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeBeginLabelEdit ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_END_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeEndDrag ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_END_LABEL_EDIT, wxTreeEventHandler( BookmarkPanel::onTreeEndLabelEdit ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( BookmarkPanel::onTreeActivate ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_COLLAPSED, wxTreeEventHandler( BookmarkPanel::onTreeCollapse ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_EXPANDED, wxTreeEventHandler( BookmarkPanel::onTreeExpanded ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, wxTreeEventHandler( BookmarkPanel::onTreeItemGetTooltip ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_ITEM_MENU, wxTreeEventHandler( BookmarkPanel::onTreeItemMenu ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( BookmarkPanel::onTreeSelect ), NULL, this ); + m_treeView->Disconnect( wxEVT_COMMAND_TREE_SEL_CHANGING, wxTreeEventHandler( BookmarkPanel::onTreeSelectChanging ), NULL, this ); + m_labelText->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( BookmarkPanel::onLabelText ), NULL, this ); + m_frequencyVal->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( BookmarkPanel::onDoubleClickFreq ), NULL, this ); + m_bandwidthVal->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( BookmarkPanel::onDoubleClickBandwidth ), NULL, this ); + this->Disconnect( wxID_ANY, wxEVT_TIMER, wxTimerEventHandler( BookmarkPanel::onUpdateTimer ) ); + +} diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp new file mode 100644 index 0000000..8214f9d --- /dev/null +++ b/src/forms/Bookmark/BookmarkPanel.fbp @@ -0,0 +1,1230 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + BookmarkPanel + 1000 + none + 0 + BookmarkPanel + + . + + 1 + 1 + 1 + 1 + UI + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + + 1 + 1 + impl_virtual + + + 0 + wxID_ANY + + + BookmarkPanel + + 169,471 + + + + + wxTAB_TRAVERSAL + + + + + + + + onEnterWindow + + + + + + onLeaveWindow + + + + + + + onMotion + + + + + + + + + + + + bSizer1 + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_searchText + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_PROCESS_ENTER + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + Search.. + + + + + + + + + + + + onSearchTextFocus + + + + + + + + + + + + + + onSearchText + + + + + + + + 5 + wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Clear Search + + 0 + + + 0 + + 1 + m_clearSearchButton + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onClearSearch + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_treeView + 1 + + + protected + 1 + + Resizable + 1 + + wxTR_DEFAULT_STYLE|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT|wxTR_HIDE_ROOT|wxTR_SINGLE + + 0 + + + + + + + + + + + + + + + + + + onMotion + + + + + + + + + onTreeBeginDrag + onTreeBeginLabelEdit + + + onTreeEndDrag + onTreeEndLabelEdit + + onTreeActivate + onTreeCollapse + + onTreeExpanded + + onTreeItemGetTooltip + onTreeItemMenu + + + + onTreeSelect + onTreeSelectChanging + + + + + + + 5 + wxALL|wxBOTTOM|wxEXPAND|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_propPanel + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxBOTH + 1 + + 0 + + fgPropSizer + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Label + + 0 + + + 0 + + 1 + m_labelLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_labelText + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_PROCESS_ENTER + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + onLabelText + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Freq + + 0 + + + 0 + + 1 + m_frequencyLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + FrequencyVal + + 0 + + + 0 + + 1 + m_frequencyVal + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + onDoubleClickFreq + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + BW + + 0 + + + 0 + + 1 + m_bandwidthLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + BandwidthVal + + 0 + + + 0 + + 1 + m_bandwidthVal + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + onDoubleClickBandwidth + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Type + + 0 + + + 0 + + 1 + m_modulationLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + TypeVal + + 0 + + + 0 + + 1 + m_modulationVal + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_buttonPanel + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + m_buttonPanelSizer + wxVERTICAL + none + + + + + + 0 + wxID_ANY + m_updateTimer + 0 + 500 + protected + onUpdateTimer + + + + diff --git a/src/forms/Bookmark/BookmarkPanel.h b/src/forms/Bookmark/BookmarkPanel.h new file mode 100644 index 0000000..ecb09cb --- /dev/null +++ b/src/forms/Bookmark/BookmarkPanel.h @@ -0,0 +1,83 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 23 2015) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __BOOKMARKPANEL_H__ +#define __BOOKMARKPANEL_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class BookmarkPanel +/////////////////////////////////////////////////////////////////////////////// +class BookmarkPanel : public wxPanel +{ + private: + + protected: + wxTextCtrl* m_searchText; + wxButton* m_clearSearchButton; + wxTreeCtrl* m_treeView; + wxPanel* m_propPanel; + wxStaticText* m_labelLabel; + wxTextCtrl* m_labelText; + wxStaticText* m_frequencyLabel; + wxStaticText* m_frequencyVal; + wxStaticText* m_bandwidthLabel; + wxStaticText* m_bandwidthVal; + wxStaticText* m_modulationLabel; + wxStaticText* m_modulationVal; + wxPanel* m_buttonPanel; + wxTimer m_updateTimer; + + // Virtual event handlers, overide them in your derived class + virtual void onEnterWindow( wxMouseEvent& event ) { event.Skip(); } + virtual void onLeaveWindow( wxMouseEvent& event ) { event.Skip(); } + virtual void onMotion( wxMouseEvent& event ) { event.Skip(); } + virtual void onSearchTextFocus( wxMouseEvent& event ) { event.Skip(); } + virtual void onSearchText( wxCommandEvent& event ) { event.Skip(); } + virtual void onClearSearch( wxCommandEvent& event ) { event.Skip(); } + virtual void onTreeBeginDrag( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeBeginLabelEdit( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeEndDrag( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeEndLabelEdit( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeActivate( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeCollapse( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeExpanded( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeItemGetTooltip( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeItemMenu( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeSelect( wxTreeEvent& event ) { event.Skip(); } + virtual void onTreeSelectChanging( wxTreeEvent& event ) { event.Skip(); } + virtual void onLabelText( wxCommandEvent& event ) { event.Skip(); } + virtual void onDoubleClickFreq( wxMouseEvent& event ) { event.Skip(); } + virtual void onDoubleClickBandwidth( wxMouseEvent& event ) { event.Skip(); } + virtual void onUpdateTimer( wxTimerEvent& event ) { event.Skip(); } + + + public: + + BookmarkPanel( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 169,471 ), long style = wxTAB_TRAVERSAL ); + ~BookmarkPanel(); + +}; + +#endif //__BOOKMARKPANEL_H__ diff --git a/src/forms/Bookmark/BookmarkView.cpp b/src/forms/Bookmark/BookmarkView.cpp new file mode 100644 index 0000000..5347f06 --- /dev/null +++ b/src/forms/Bookmark/BookmarkView.cpp @@ -0,0 +1,1533 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + +#include +#include + +#include +#include + +#include "BookmarkView.h" +#include "CubicSDR.h" +#include "ActionDialog.h" + + +#define wxCONTEXT_ADD_GROUP_ID 1000 + +#define BOOKMARK_VIEW_CHOICE_DEFAULT "Bookmark.." +#define BOOKMARK_VIEW_CHOICE_MOVE "Move to.." +#define BOOKMARK_VIEW_CHOICE_NEW "(New Group..)" + +#define BOOKMARK_VIEW_STR_ADD_GROUP "Add Group" +#define BOOKMARK_VIEW_STR_ADD_GROUP_DESC "Enter Group Name" +#define BOOKMARK_VIEW_STR_UNNAMED "Unnamed" +#define BOOKMARK_VIEW_STR_CLEAR_RECENT "Clear Recents" +#define BOOKMARK_VIEW_STR_RENAME_GROUP "Rename Group" + + +BookmarkViewVisualDragItem::BookmarkViewVisualDragItem(wxString labelValue) : wxDialog(NULL, wxID_ANY, L"", wxPoint(20,20), wxSize(-1,-1), wxSTAY_ON_TOP | wxALL ) { + + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + wxStaticText *label = new wxStaticText( this, wxID_ANY, labelValue, wxDefaultPosition, wxDefaultSize, wxEXPAND ); + + sizer->Add(label, 1, wxALL | wxEXPAND, 5); + + SetSizerAndFit(sizer); + Show(); +} + +class ActionDialogRemoveBookmark : public ActionDialog { +public: + ActionDialogRemoveBookmark( BookmarkEntry *be ) : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Remove Bookmark?")) { + subject = be; + m_questionText->SetLabelText(wxT("Are you sure you want to remove the bookmark\n '" + BookmarkMgr::getBookmarkEntryDisplayName(subject) + "'?")); + } + + void doClickOK() { + wxGetApp().getBookmarkMgr().removeBookmark(subject); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } + +private: + BookmarkEntry *subject; +}; + +class ActionDialogRemoveGroup : public ActionDialog { +public: + ActionDialogRemoveGroup( std::string groupName ) : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Remove Group?")) { + subject = groupName; + m_questionText->SetLabelText(wxT("Warning: Are you sure you want to remove the group\n '" + subject + "' AND ALL BOOKMARKS WITHIN IT?")); + } + + void doClickOK() { + wxGetApp().getBookmarkMgr().removeGroup(subject); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } + +private: + std::string subject; +}; + + +class ActionDialogRemoveRange : public ActionDialog { +public: + ActionDialogRemoveRange( BookmarkRangeEntry *rangeEnt ) : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Remove Range?")) { + subject = rangeEnt; + + std::wstring name = rangeEnt->label; + + if (name.length() == 0) { + std::string wstr = frequencyToStr(rangeEnt->startFreq) + " - " + frequencyToStr(rangeEnt->endFreq); + name = std::wstring(wstr.begin(),wstr.end()); + } + + m_questionText->SetLabelText(L"Are you sure you want to remove the range\n '" + name + L"'?"); + } + + void doClickOK() { + wxGetApp().getBookmarkMgr().removeRange(subject); + wxGetApp().getBookmarkMgr().updateActiveList(); + } + +private: + BookmarkRangeEntry *subject; +}; + + +class ActionDialogUpdateRange : public ActionDialog { +public: + ActionDialogUpdateRange( BookmarkRangeEntry *rangeEnt ) : ActionDialog(wxGetApp().getAppFrame(), wxID_ANY, wxT("Update Range?")) { + subject = rangeEnt; + + std::wstring name = rangeEnt->label; + + if (name.length() == 0) { + std::string wstr = frequencyToStr(rangeEnt->startFreq) + " - " + frequencyToStr(rangeEnt->endFreq); + name = std::wstring(wstr.begin(),wstr.end()); + } + + m_questionText->SetLabelText(L"Are you sure you want to update the range\n '" + name + L"' to the active range?"); + } + + void doClickOK() { + BookmarkRangeEntry *ue = BookmarkView::makeActiveRangeEntry(); + + subject->freq = ue->freq; + subject->startFreq = ue->startFreq; + subject->endFreq = ue->endFreq; + + delete ue; + + wxGetApp().getBookmarkMgr().updateActiveList(); + } + +private: + BookmarkRangeEntry *subject; +}; + + + + +BookmarkView::BookmarkView( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : BookmarkPanel(parent, id, pos, size, style) { + + rootBranch = m_treeView->AddRoot("Root"); + activeBranch = m_treeView->AppendItem(rootBranch, "Active"); + rangeBranch = m_treeView->AppendItem(rootBranch, "View Ranges"); + bookmarkBranch = m_treeView->AppendItem(rootBranch, "Bookmarks"); + recentBranch = m_treeView->AppendItem(rootBranch, "Recents"); + + expandState["active"] = true; + expandState["range"] = false; + expandState["bookmark"] = true; + expandState["recent"] = true; + + doUpdateActive.store(true); + doUpdateBookmarks.store(true); + bookmarkChoice = nullptr; + dragItem = nullptr; + dragItemId = nullptr; + editingLabel = false; + + m_clearSearchButton->Hide(); + hideProps(); + + m_updateTimer.Start(500); + mouseInView.store(false); + + visualDragItem = nullptr; + nextEnt = nullptr; + nextDemod = nullptr; +} + + +void BookmarkView::onUpdateTimer( wxTimerEvent& /* event */ ) { + if (!this->IsShown()) { + return; + } + if (doUpdateActive.load()) { + doUpdateActiveList(); + + doUpdateActive.store(false); + } + if (doUpdateBookmarks.load()) { + wxTreeItemId bmSel = refreshBookmarks(); + if (bmSel) { + m_treeView->SelectItem(bmSel); + } + doUpdateBookmarks.store(false); + } +} + + +void BookmarkView::updateTheme() { + wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground); + wxColour textColor(ThemeMgr::mgr.currentTheme->text); + wxColour btn(ThemeMgr::mgr.currentTheme->button); + wxColour btnHl(ThemeMgr::mgr.currentTheme->buttonHighlight); + + SetBackgroundColour(bgColor); + + m_treeView->SetBackgroundColour(bgColor); + m_treeView->SetForegroundColour(textColor); + + m_propPanel->SetBackgroundColour(bgColor); + m_propPanel->SetForegroundColour(textColor); + + m_buttonPanel->SetBackgroundColour(bgColor); + m_buttonPanel->SetForegroundColour(textColor); + + m_labelLabel->SetForegroundColour(textColor); + m_frequencyVal->SetForegroundColour(textColor); + m_frequencyLabel->SetForegroundColour(textColor); + m_bandwidthVal->SetForegroundColour(textColor); + m_bandwidthLabel->SetForegroundColour(textColor); + m_modulationVal->SetForegroundColour(textColor); + m_modulationLabel->SetForegroundColour(textColor); + + + refreshLayout(); +} + + +void BookmarkView::updateActiveList() { + doUpdateActive.store(true); +} + + +void BookmarkView::updateBookmarks() { + doUpdateBookmarks.store(true); +} + + +void BookmarkView::updateBookmarks(std::string group) { + doUpdateBookmarkGroup.insert(group); + doUpdateBookmarks.store(true); +} + +bool BookmarkView::isKeywordMatch(std::wstring search_str, std::vector &keywords) { + wstring str = search_str; + std::transform(str.begin(), str.end(), str.begin(), towlower); + + for (auto k : keywords) { + if (str.find(k) == wstring::npos) { + return false; + } + } + + return true; +} + +wxTreeItemId BookmarkView::refreshBookmarks() { + + TreeViewItem *prevSel = itemToTVI(m_treeView->GetSelection()); + + BookmarkNames groupNames; + wxGetApp().getBookmarkMgr().getGroups(groupNames); + + if (doUpdateBookmarkGroup.size()) { // Nothing for the moment.. + doUpdateBookmarkGroup.erase(doUpdateBookmarkGroup.begin(), doUpdateBookmarkGroup.end()); + } + + wxTreeItemId bmSelFound = nullptr; + + std::map groupExpandState; + bool searchState = (searchKeywords.size() != 0); + + groups.erase(groups.begin(),groups.end()); + m_treeView->DeleteChildren(bookmarkBranch); + + bool bmExpandState = expandState["bookmark"]; + + for (auto gn_i : groupNames) { + TreeViewItem* tvi = new TreeViewItem(); + tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP; + tvi->groupName = gn_i; + wxTreeItemId group_itm = m_treeView->AppendItem(bookmarkBranch, gn_i); + m_treeView->SetItemData(group_itm, tvi); + groups[gn_i] = group_itm; + if (prevSel != nullptr && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP && gn_i == prevSel->groupName) { + bmSelFound = group_itm; + } + } + + if (searchState || bmExpandState) { + m_treeView->Expand(bookmarkBranch); + } else { + m_treeView->Collapse(bookmarkBranch); + } + + for (auto gn_i : groupNames) { + wxTreeItemId groupItem = groups[gn_i]; + + bool groupExpanded = searchState || wxGetApp().getBookmarkMgr().getExpandState(gn_i); + + BookmarkList bmList = wxGetApp().getBookmarkMgr().getBookmarks(gn_i); + for (auto &bmEnt : bmList) { + std::wstring labelVal = BookmarkMgr::getBookmarkEntryDisplayName(bmEnt); + + if (searchState) { + std::string freqStr = frequencyToStr(bmEnt->frequency); + std::string bwStr = frequencyToStr(bmEnt->bandwidth); + + std::wstring fullText = labelVal + + L" " + bmEnt->userLabel + + L" " + std::to_wstring(bmEnt->frequency) + + L" " + std::wstring(freqStr.begin(),freqStr.end()) + + L" " + std::wstring(bwStr.begin(),bwStr.end()) + + L" " + std::wstring(bmEnt->type.begin(),bmEnt->type.end()); + + if (!isKeywordMatch(fullText, searchKeywords)) { + continue; + } + } + + TreeViewItem* tvi = new TreeViewItem(); + tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK; + tvi->bookmarkEnt = bmEnt; + tvi->groupName = gn_i; + + wxTreeItemId itm = m_treeView->AppendItem(groupItem, labelVal); + m_treeView->SetItemData(itm, tvi); + if (prevSel != nullptr && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK && prevSel->bookmarkEnt == bmEnt && groupExpanded) { + bmSelFound = itm; + } + if (nextEnt == bmEnt) { + bmSelFound = itm; + nextEnt = nullptr; + } + } + + if (groupExpanded) { + m_treeView->Expand(groupItem); + } + } + + + return bmSelFound; +} + + +void BookmarkView::doUpdateActiveList() { + std::vector &demods = wxGetApp().getDemodMgr().getDemodulators(); + +// DemodulatorInstance *activeDemodulator = wxGetApp().getDemodMgr().getActiveDemodulator(); + DemodulatorInstance *lastActiveDemodulator = wxGetApp().getDemodMgr().getLastActiveDemodulator(); + + TreeViewItem *prevSel = itemToTVI(m_treeView->GetSelection()); + + // Actives + m_treeView->DeleteChildren(activeBranch); + + bool activeExpandState = expandState["active"]; + bool searchState = (searchKeywords.size() != 0); + + wxTreeItemId selItem = nullptr; + for (auto demod_i : demods) { + wxString activeLabel = BookmarkMgr::getActiveDisplayName(demod_i); + + if (searchState) { + std::string freqStr = frequencyToStr(demod_i->getFrequency()); + std::string bwStr = frequencyToStr(demod_i->getBandwidth()); + std::string mtype = demod_i->getDemodulatorType(); + + std::wstring fullText = activeLabel.ToStdWstring() + + L" " + demod_i->getDemodulatorUserLabel() + + L" " + std::to_wstring(demod_i->getFrequency()) + + L" " + std::wstring(freqStr.begin(),freqStr.end()) + + L" " + std::wstring(bwStr.begin(),bwStr.end()) + + L" " + std::wstring(mtype.begin(),mtype.end()); + + if (!isKeywordMatch(fullText, searchKeywords)) { + continue; + } + } + + TreeViewItem* tvi = new TreeViewItem(); + tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE; + tvi->demod = demod_i; + + wxTreeItemId itm = m_treeView->AppendItem(activeBranch,activeLabel); + m_treeView->SetItemData(itm, tvi); + + if (nextDemod != nullptr && nextDemod == demod_i) { + selItem = itm; + nextDemod = nullptr; + } else if (!selItem && activeExpandState && lastActiveDemodulator && lastActiveDemodulator == demod_i) { + selItem = itm; + } + } + + bool rangeExpandState = searchState?false:expandState["range"]; + + BookmarkRangeList bmRanges = wxGetApp().getBookmarkMgr().getRanges(); + m_treeView->DeleteChildren(rangeBranch); + + for (auto &re_i: bmRanges) { + TreeViewItem* tvi = new TreeViewItem(); + tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE; + tvi->rangeEnt = re_i; + + std::wstring labelVal = re_i->label; + + if (labelVal == "") { + std::string wstr = frequencyToStr(re_i->startFreq) + " - " + frequencyToStr(re_i->endFreq); + labelVal = std::wstring(wstr.begin(),wstr.end()); + } + + wxTreeItemId itm = m_treeView->AppendItem(rangeBranch, labelVal); + m_treeView->SetItemData(itm, tvi); + + if (nextRange == re_i) { + selItem = itm; + nextRange = nullptr; + } else if (!selItem && rangeExpandState && prevSel && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE && prevSel->rangeEnt == re_i) { + selItem = itm; + } + } + + + bool recentExpandState = searchState || expandState["recent"]; + + // Recents + BookmarkList bmRecents = wxGetApp().getBookmarkMgr().getRecents(); + m_treeView->DeleteChildren(recentBranch); + + for (auto &bmr_i: bmRecents) { + TreeViewItem* tvi = new TreeViewItem(); + tvi->type = TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT; + tvi->bookmarkEnt = bmr_i; + + std::wstring labelVal; + bmr_i->node->child("user_label")->element()->get(labelVal); + + if (labelVal == "") { + std::string wstr = frequencyToStr(bmr_i->frequency) + " " + bmr_i->type; + labelVal = std::wstring(wstr.begin(),wstr.end()); + } + + if (searchKeywords.size()) { + + std::string freqStr = frequencyToStr(bmr_i->frequency); + std::string bwStr = frequencyToStr(bmr_i->bandwidth); + + std::wstring fullText = labelVal + + L" " + bmr_i->userLabel + + L" " + std::to_wstring(bmr_i->frequency) + + L" " + std::wstring(freqStr.begin(),freqStr.end()) + + L" " + std::wstring(bwStr.begin(),bwStr.end()) + + L" " + std::wstring(bmr_i->type.begin(),tvi->bookmarkEnt->type.end()); + + if (!isKeywordMatch(fullText, searchKeywords)) { + continue; + } + } + + wxTreeItemId itm = m_treeView->AppendItem(recentBranch, labelVal); + m_treeView->SetItemData(itm, tvi); + + if (nextEnt == bmr_i) { + selItem = itm; + nextEnt = nullptr; + } else if (!selItem && recentExpandState && prevSel && prevSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT && prevSel->bookmarkEnt == bmr_i) { + selItem = itm; + } + } + + if (activeExpandState) { + m_treeView->Expand(activeBranch); + } else { + m_treeView->Collapse(activeBranch); + } + if (recentExpandState) { + m_treeView->Expand(recentBranch); + } else { + m_treeView->Collapse(recentBranch); + } + if (rangeExpandState) { + m_treeView->Expand(rangeBranch); + } else { + m_treeView->Collapse(rangeBranch); + } + + if (selItem != nullptr) { + m_treeView->SelectItem(selItem); + } +} + + +void BookmarkView::onTreeBeginLabelEdit( wxTreeEvent& event ) { + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem())); + + if (!tvi) { + event.Veto(); + return; + } + + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE || + tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT || + tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK || + tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP || + tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) + { + event.Allow(); + editingLabel = true; + } else { + event.Veto(); + } +} + + +void BookmarkView::onTreeEndLabelEdit( wxTreeEvent& event ) { + wxTreeItemId itm = event.GetItem(); + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(itm)); + + std::wstring newText = m_treeView->GetEditControl()->GetValue().ToStdWstring(); + + editingLabel = false; + + if (!tvi) { + return; + } + + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + tvi->demod->setDemodulatorUserLabel(newText); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + tvi->bookmarkEnt->label = newText; + tvi->bookmarkEnt->node->child("user_label")->element()->set(newText); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + tvi->bookmarkEnt->label = newText; + tvi->bookmarkEnt->node->child("user_label")->element()->set(newText); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + std::string newGroup = m_treeView->GetEditControl()->GetValue().ToStdString(); + wxGetApp().getBookmarkMgr().renameGroup(tvi->groupName, newGroup); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + std::wstring newName = m_treeView->GetEditControl()->GetValue().ToStdWstring(); + if (newName.length() != 0) { + tvi->rangeEnt->label = newName; + wxGetApp().getBookmarkMgr().updateActiveList(); + } + } +} + + +void BookmarkView::onTreeActivate( wxTreeEvent& event ) { + wxTreeItemId itm = event.GetItem(); + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(itm)); + + if (tvi) { + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + if (!tvi->demod->isActive()) { + + wxGetApp().getDemodMgr().setActiveDemodulator(tvi->demod,true); + wxGetApp().getDemodMgr().setActiveDemodulator(tvi->demod,false); + wxGetApp().setFrequency(tvi->demod->getFrequency()); + nextDemod = tvi->demod; + } + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + wxGetApp().getBookmarkMgr().removeRecent(tvi->bookmarkEnt); + activateBookmark(tvi->bookmarkEnt); + nextEnt = tvi->bookmarkEnt; + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + activateBookmark(tvi->bookmarkEnt); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + activateRange(tvi->rangeEnt); + } + } +} + + +void BookmarkView::onTreeCollapse( wxTreeEvent& event ) { + bool searchState = (searchKeywords.size() != 0); + + if (searchState) { + event.Skip(); + return; + } + + if (event.GetItem() == activeBranch) { + expandState["active"] = false; + } else if (event.GetItem() == bookmarkBranch) { + expandState["bookmark"] = false; + } else if (event.GetItem() == recentBranch) { + expandState["recent"] = false; + } else if (event.GetItem() == rangeBranch) { + expandState["range"] = false; + } else { + TreeViewItem *tvi = itemToTVI(event.GetItem()); + + if (tvi != nullptr) { + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + wxGetApp().getBookmarkMgr().setExpandState(tvi->groupName,false); + } + } + + } +} + + +void BookmarkView::onTreeExpanded( wxTreeEvent& event ) { + bool searchState = (searchKeywords.size() != 0); + + if (searchState) { + event.Skip(); + return; + } + + if (event.GetItem() == activeBranch) { + expandState["active"] = true; + } else if (event.GetItem() == bookmarkBranch) { + expandState["bookmark"] = true; + } else if (event.GetItem() == recentBranch) { + expandState["recent"] = true; + } else if (event.GetItem() == rangeBranch) { + expandState["range"] = true; + } else { + TreeViewItem *tvi = itemToTVI(event.GetItem()); + + if (tvi != nullptr) { + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + wxGetApp().getBookmarkMgr().setExpandState(tvi->groupName,true); + } + } + + } +} + + +void BookmarkView::onTreeItemMenu( wxTreeEvent& /* event */ ) { + if (m_treeView->GetSelection() == bookmarkBranch) { + wxMenu menu; + menu.Append(wxCONTEXT_ADD_GROUP_ID, BOOKMARK_VIEW_STR_ADD_GROUP); + menu.Connect(wxCONTEXT_ADD_GROUP_ID, wxEVT_MENU, (wxObjectEventFunction)&BookmarkView::onMenuItem, nullptr, this); + PopupMenu(&menu); + } +} + + +void BookmarkView::onMenuItem(wxCommandEvent& event) { + if (event.GetId() == wxCONTEXT_ADD_GROUP_ID) { + onAddGroup(event); + } +} + + +bool BookmarkView::isMouseInView() { + if (editingLabel) { + return true; + } + if (m_labelText->HasFocus()) { + return true; + } + return mouseInView.load(); +} + + +bool BookmarkView::getExpandState(std::string branchName) { + return expandState[branchName]; +} + + +void BookmarkView::setExpandState(std::string branchName, bool state) { + expandState[branchName] = state; +} + + +void BookmarkView::hideProps() { + m_frequencyLabel->Hide(); + m_frequencyVal->Hide(); + + m_bandwidthLabel->Hide(); + m_bandwidthVal->Hide(); + + m_modulationVal->Hide(); + m_modulationLabel->Hide(); + + m_labelText->Hide(); + m_labelLabel->Hide(); + + m_propPanel->Hide(); + m_buttonPanel->Hide(); +} + + +void BookmarkView::showProps() { + m_propPanel->Show(); + m_propPanel->GetSizer()->Layout(); +} + + +void BookmarkView::clearButtons() { + m_buttonPanel->Hide(); + m_buttonPanel->DestroyChildren(); + bookmarkChoice = nullptr; +} + +void BookmarkView::showButtons() { + m_buttonPanel->Show(); + m_buttonPanel->GetSizer()->Layout(); +} + +void BookmarkView::refreshLayout() { + GetSizer()->Layout(); + Update(); + Refresh(); +} + + +wxButton *BookmarkView::makeButton(wxWindow *parent, std::string labelVal, wxObjectEventFunction handler) { + wxButton *nButton = new wxButton( m_buttonPanel, wxID_ANY, labelVal); + nButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, handler, nullptr, this); + + wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground); + wxColour textColor(ThemeMgr::mgr.currentTheme->text); + + nButton->SetBackgroundColour(bgColor); + nButton->SetForegroundColour(textColor); + return nButton; +} + + +wxButton *BookmarkView::addButton(wxWindow *parent, std::string labelVal, wxObjectEventFunction handler) { + wxButton *nButton = makeButton(parent, labelVal, handler); + parent->GetSizer()->Add( nButton, 0, wxEXPAND); + return nButton; +} + + +void BookmarkView::doBookmarkActive(std::string group, DemodulatorInstance *demod) { + wxGetApp().getBookmarkMgr().addBookmark(group, demod); + wxGetApp().getBookmarkMgr().updateBookmarks(); +} + + +void BookmarkView::doBookmarkRecent(std::string group, BookmarkEntry *be) { + wxGetApp().getBookmarkMgr().removeRecent(be); + wxGetApp().getBookmarkMgr().addBookmark(group, be); + nextEnt = be; + wxGetApp().getBookmarkMgr().updateBookmarks(); + bookmarkSelection(be); +} + + +void BookmarkView::doMoveBookmark(BookmarkEntry *be, std::string group) { + wxGetApp().getBookmarkMgr().moveBookmark(be, group); + nextEnt = be; + wxGetApp().getBookmarkMgr().updateBookmarks(); + bookmarkSelection(be); +} + + +void BookmarkView::doRemoveActive(DemodulatorInstance *demod) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, false); + wxGetApp().removeDemodulator(demod); + wxGetApp().getDemodMgr().deleteThread(demod); +} + + +void BookmarkView::doRemoveRecent(BookmarkEntry *be) { + wxGetApp().getBookmarkMgr().removeRecent(be); + wxGetApp().getBookmarkMgr().updateActiveList(); +} + +void BookmarkView::doClearRecents() { + wxGetApp().getBookmarkMgr().clearRecents(); + wxGetApp().getBookmarkMgr().updateActiveList(); +} + + +void BookmarkView::updateBookmarkChoices() { + if (!bookmarkChoices.empty()) { + bookmarkChoices.erase(bookmarkChoices.begin(),bookmarkChoices.end()); + } + TreeViewItem *activeSel = itemToTVI(m_treeView->GetSelection()); + + bookmarkChoices.push_back(((activeSel != nullptr && activeSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK))?BOOKMARK_VIEW_CHOICE_MOVE:BOOKMARK_VIEW_CHOICE_DEFAULT); + wxGetApp().getBookmarkMgr().getGroups(bookmarkChoices); + bookmarkChoices.push_back(BOOKMARK_VIEW_CHOICE_NEW); +} + +void BookmarkView::addBookmarkChoice(wxWindow *parent) { + updateBookmarkChoices(); + bookmarkChoice = new wxChoice(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, bookmarkChoices, wxALL|wxEXPAND, wxDefaultValidator, "Bookmark"); + bookmarkChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, (wxObjectEventFunction)&BookmarkView::onBookmarkChoice, nullptr, this); + parent->GetSizer()->Add(bookmarkChoice, 0, wxALL | wxEXPAND); +} + + +void BookmarkView::onBookmarkChoice( wxCommandEvent & /* event */ ) { + + TreeViewItem *tvi = itemToTVI(m_treeView->GetSelection()); + + int numSel = bookmarkChoice->GetCount(); + int sel = bookmarkChoice->GetSelection(); + + if (sel == 0) { + return; + } + + wxString stringVal = ""; + + if (sel == (numSel-1)) { + stringVal = wxGetTextFromUser(BOOKMARK_VIEW_STR_ADD_GROUP_DESC, BOOKMARK_VIEW_STR_ADD_GROUP, ""); + } else { + stringVal = bookmarkChoices[sel]; + } + + if (stringVal == "") { + return; + } + + if (tvi != nullptr) { + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + doBookmarkActive(stringVal.ToStdString(), tvi->demod); + } + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + doBookmarkRecent(stringVal.ToStdString(), tvi->bookmarkEnt); + } + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + doMoveBookmark(tvi->bookmarkEnt, stringVal.ToStdString()); + } + } +} + + +void BookmarkView::activeSelection(DemodulatorInstance *dsel) { + + m_frequencyVal->SetLabelText(frequencyToStr(dsel->getFrequency())); + m_bandwidthVal->SetLabelText(frequencyToStr(dsel->getBandwidth())); + m_modulationVal->SetLabelText(dsel->getDemodulatorType()); + m_labelText->SetValue(dsel->getDemodulatorUserLabel()); + + hideProps(); + + m_frequencyVal->Show(); + m_frequencyLabel->Show(); + + m_bandwidthVal->Show(); + m_bandwidthLabel->Show(); + + m_modulationVal->Show(); + m_modulationLabel->Show(); + + m_labelText->Show(); + m_labelLabel->Show(); + + clearButtons(); + + addBookmarkChoice(m_buttonPanel); + addButton(m_buttonPanel, "Remove Active", wxCommandEventHandler( BookmarkView::onRemoveActive )); + + showProps(); + showButtons(); + refreshLayout(); +} + + +void BookmarkView::activateBookmark(BookmarkEntry *bmEnt) { + DemodulatorInstance *newDemod = wxGetApp().getDemodMgr().loadInstance(bmEnt->node); + + nextDemod = newDemod; + + wxTreeItemId selItem = m_treeView->GetSelection(); + if (selItem) { + m_treeView->SelectItem(selItem, false); + } + + long long freq = newDemod->getFrequency(); + long long currentFreq = wxGetApp().getFrequency(); + long long currentRate = wxGetApp().getSampleRate(); + + if ( ( abs(freq - currentFreq) > currentRate / 2 ) || ( abs( currentFreq - freq) > currentRate / 2 ) ) { + wxGetApp().setFrequency(freq); + } + + newDemod->run(); + newDemod->setActive(true); + wxGetApp().bindDemodulator(newDemod); + + doUpdateActiveList(); +} + + +void BookmarkView::activateRange(BookmarkRangeEntry *rangeEnt) { + wxGetApp().setFrequency(rangeEnt->freq); + wxGetApp().getAppFrame()->setViewState(rangeEnt->startFreq + (rangeEnt->endFreq - rangeEnt->startFreq) / 2, rangeEnt->endFreq - rangeEnt->startFreq); +} + + +void BookmarkView::bookmarkSelection(BookmarkEntry *bmSel) { + + m_frequencyVal->SetLabelText(frequencyToStr(bmSel->frequency)); + m_bandwidthVal->SetLabelText(frequencyToStr(bmSel->bandwidth)); + m_modulationVal->SetLabelText(bmSel->type); + m_labelText->SetValue(bmSel->label); + + hideProps(); + + m_frequencyVal->Show(); + m_frequencyLabel->Show(); + + m_bandwidthVal->Show(); + m_bandwidthLabel->Show(); + + m_modulationVal->Show(); + m_modulationLabel->Show(); + + m_labelText->Show(); + m_labelLabel->Show(); + + clearButtons(); + + addBookmarkChoice(m_buttonPanel); + addButton(m_buttonPanel, "Activate Bookmark", wxCommandEventHandler( BookmarkView::onActivateBookmark )); + addButton(m_buttonPanel, "Remove Bookmark", wxCommandEventHandler( BookmarkView::onRemoveBookmark )); + + showProps(); + showButtons(); + refreshLayout(); +} + + +void BookmarkView::recentSelection(BookmarkEntry *bmSel) { + + m_frequencyVal->SetLabelText(frequencyToStr(bmSel->frequency)); + m_bandwidthVal->SetLabelText(frequencyToStr(bmSel->bandwidth)); + m_modulationVal->SetLabelText(bmSel->type); + m_labelText->SetValue(bmSel->label); + + hideProps(); + + m_frequencyVal->Show(); + m_frequencyLabel->Show(); + + m_bandwidthVal->Show(); + m_bandwidthLabel->Show(); + + m_modulationVal->Show(); + m_modulationLabel->Show(); + + m_labelText->Show(); + m_labelLabel->Show(); + + clearButtons(); + + addBookmarkChoice(m_buttonPanel); + addButton(m_buttonPanel, "Activate Recent", wxCommandEventHandler( BookmarkView::onActivateRecent )); + addButton(m_buttonPanel, "Remove Recent", wxCommandEventHandler( BookmarkView::onRemoveRecent )); + + showProps(); + showButtons(); + refreshLayout(); +} + +void BookmarkView::groupSelection(std::string groupName) { + + clearButtons(); + + hideProps(); + + // m_labelText->SetValue(groupSel); + + // m_labelText->Show(); + // m_labelLabel->Show(); + + addButton(m_buttonPanel, "Remove Group", wxCommandEventHandler( BookmarkView::onRemoveGroup )); + addButton(m_buttonPanel, BOOKMARK_VIEW_STR_RENAME_GROUP, wxCommandEventHandler( BookmarkView::onRenameGroup )); + + // showProps(); + + showButtons(); + refreshLayout(); +} + + +void BookmarkView::rangeSelection(BookmarkRangeEntry *re) { + + clearButtons(); + + hideProps(); + + m_labelText->SetValue(re->label); + + m_labelText->Show(); + m_labelLabel->Show(); + + m_frequencyVal->Show(); + m_frequencyLabel->Show(); + + std::string strFreq = frequencyToStr(re->startFreq) + "-" + frequencyToStr(re->endFreq); + + m_frequencyVal->SetLabelText(std::wstring(strFreq.begin(),strFreq.end())); + + showProps(); + + addButton(m_buttonPanel, "Go to Range", wxCommandEventHandler( BookmarkView::onActivateRange )); + addButton(m_buttonPanel, "Update Range", wxCommandEventHandler( BookmarkView::onUpdateRange ))->SetToolTip("Update range by setting it to the active range."); + addButton(m_buttonPanel, "Remove Range", wxCommandEventHandler( BookmarkView::onRemoveRange )); + + showButtons(); + refreshLayout(); +} + + +void BookmarkView::bookmarkBranchSelection() { + + clearButtons(); + hideProps(); + + addButton(m_buttonPanel, BOOKMARK_VIEW_STR_ADD_GROUP, wxCommandEventHandler( BookmarkView::onAddGroup )); + + showButtons(); + refreshLayout(); +} + + +void BookmarkView::recentBranchSelection() { + clearButtons(); + hideProps(); + + addButton(m_buttonPanel, BOOKMARK_VIEW_STR_CLEAR_RECENT, wxCommandEventHandler( BookmarkView::onClearRecents )); + + showButtons(); + refreshLayout(); + + this->Layout(); +} + + +void BookmarkView::rangeBranchSelection() { + clearButtons(); + hideProps(); + + m_labelText->SetValue(wxT("")); + m_labelText->Show(); + m_labelLabel->Show(); + + showProps(); + + addButton(m_buttonPanel, "Add Active Range", wxCommandEventHandler( BookmarkView::onAddRange )); + + showButtons(); + refreshLayout(); + + this->Layout(); +} + + +void BookmarkView::activeBranchSelection() { + hideProps(); + this->Layout(); +} + + +void BookmarkView::onTreeSelect( wxTreeEvent& event ) { + wxTreeItemId itm = event.GetItem(); + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(itm)); + + if (!tvi) { + + if (itm == bookmarkBranch) { + bookmarkBranchSelection(); + } else if (itm == activeBranch) { + activeBranchSelection(); + } else if (itm == recentBranch) { + recentBranchSelection(); + } else if (itm == rangeBranch) { + rangeBranchSelection(); + } else { + hideProps(); + this->Layout(); + } + + return; + } + + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + activeSelection(tvi->demod); + if (tvi->demod->isActive()) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); + wxGetApp().getDemodMgr().setActiveDemodulator(tvi->demod, false); + } + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + recentSelection(tvi->bookmarkEnt); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + bookmarkSelection(tvi->bookmarkEnt); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + groupSelection(tvi->groupName); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + rangeSelection(tvi->rangeEnt); + } else { + hideProps(); + this->Layout(); + } +} + + +void BookmarkView::onTreeSelectChanging( wxTreeEvent& event ) { + event.Skip(); +} + + +void BookmarkView::onLabelText( wxCommandEvent& /* event */ ) { + std::wstring newLabel = m_labelText->GetValue().ToStdWstring(); + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel != nullptr) { + if (curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + curSel->demod->setDemodulatorUserLabel(newLabel); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + curSel->bookmarkEnt->label = m_labelText->GetValue().ToStdWstring(); + curSel->bookmarkEnt->node->child("user_label")->element()->set(newLabel); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } else if (curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + curSel->bookmarkEnt->label = m_labelText->GetValue().ToStdWstring(); + curSel->bookmarkEnt->node->child("user_label")->element()->set(newLabel); + wxGetApp().getBookmarkMgr().updateActiveList(); + } else if (curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + curSel->rangeEnt->label = m_labelText->GetValue().ToStdWstring(); + wxGetApp().getBookmarkMgr().updateActiveList(); + } + } + + // else if (groupSel != "") { +// std::string newGroupName = m_labelText->GetValue().ToStdString(); +// wxGetApp().getBookmarkMgr().renameGroup(groupSel, newGroupName); +// groupSel = newGroupName; +// wxGetApp().getBookmarkMgr().updateBookmarks(); +// } +} + + +void BookmarkView::onDoubleClickFreq( wxMouseEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); + wxGetApp().getDemodMgr().setActiveDemodulator(curSel->demod, false); + wxGetApp().showFrequencyInput(FrequencyDialog::FrequencyDialogTarget::FDIALOG_TARGET_DEFAULT); + } +} + + +void BookmarkView::onDoubleClickBandwidth( wxMouseEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + wxGetApp().getDemodMgr().setActiveDemodulator(nullptr, true); + wxGetApp().getDemodMgr().setActiveDemodulator(curSel->demod, false); + wxGetApp().showFrequencyInput(FrequencyDialog::FrequencyDialogTarget::FDIALOG_TARGET_BANDWIDTH); + } +} + + +void BookmarkView::onRemoveActive( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + if (editingLabel) { + return; + } + doRemoveActive(curSel->demod); + m_treeView->Delete(m_treeView->GetSelection()); + } +} + + +void BookmarkView::onRemoveBookmark( wxCommandEvent& /* event */ ) { + if (editingLabel) { + return; + } + + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + ActionDialog::showDialog(new ActionDialogRemoveBookmark(curSel->bookmarkEnt)); + } +} + + +void BookmarkView::onActivateBookmark( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + activateBookmark(curSel->bookmarkEnt); + } +} + + +void BookmarkView::onActivateRecent( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + wxGetApp().getBookmarkMgr().removeRecent(curSel->bookmarkEnt); + activateBookmark(curSel->bookmarkEnt); + m_treeView->Delete(m_treeView->GetSelection()); + wxGetApp().getBookmarkMgr().updateActiveList(); + } +} + + +void BookmarkView::onRemoveRecent ( wxCommandEvent& /* event */ ) { + if (editingLabel) { + return; + } + + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + wxGetApp().getBookmarkMgr().removeRecent(curSel->bookmarkEnt); + m_treeView->Delete(m_treeView->GetSelection()); + wxGetApp().getBookmarkMgr().updateActiveList(); + } +} + +void BookmarkView::onClearRecents ( wxCommandEvent& /* event */ ) { + if (editingLabel) { + return; + } + doClearRecents(); +} + + +void BookmarkView::onAddGroup( wxCommandEvent& /* event */ ) { + wxString stringVal = wxGetTextFromUser(BOOKMARK_VIEW_STR_ADD_GROUP_DESC, BOOKMARK_VIEW_STR_ADD_GROUP, ""); + if (stringVal.ToStdString() != "") { + wxGetApp().getBookmarkMgr().addGroup(stringVal.ToStdString()); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } +} + + +void BookmarkView::onRemoveGroup( wxCommandEvent& /* event */ ) { + if (editingLabel) { + return; + } + + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + ActionDialog::showDialog(new ActionDialogRemoveGroup(curSel->groupName)); + } +} + + +void BookmarkView::onRenameGroup( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (!curSel || curSel->type != TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + return; + } + + wxString stringVal = ""; + stringVal = wxGetTextFromUser(BOOKMARK_VIEW_STR_RENAME_GROUP, "New Group Name", curSel->groupName); + + std::string newGroupName = stringVal.Trim().ToStdString(); + + if (newGroupName != "") { + wxGetApp().getBookmarkMgr().renameGroup(curSel->groupName, newGroupName); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } +} + + +void BookmarkView::onAddRange( wxCommandEvent& /* event */ ) { + + BookmarkRangeEntry *re = BookmarkView::makeActiveRangeEntry(); + + re->label = m_labelText->GetValue(); + + wxGetApp().getBookmarkMgr().addRange(re); + wxGetApp().getBookmarkMgr().updateActiveList(); +} + + +void BookmarkView::onRemoveRange( wxCommandEvent& /* event */ ) { + if (editingLabel) { + return; + } + + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + ActionDialog::showDialog(new ActionDialogRemoveRange(curSel->rangeEnt)); + } +} + + +void BookmarkView::onRenameRange( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (!curSel || curSel->type != TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + return; + } + + wxString stringVal = ""; + stringVal = wxGetTextFromUser(BOOKMARK_VIEW_STR_RENAME_GROUP, "New Group Name", curSel->groupName); + + std::string newGroupName = stringVal.Trim().ToStdString(); + + if (newGroupName != "") { + wxGetApp().getBookmarkMgr().renameGroup(curSel->groupName, newGroupName); + wxGetApp().getBookmarkMgr().updateBookmarks(); + } +} + +void BookmarkView::onActivateRange( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + activateRange(curSel->rangeEnt); + } +} + +void BookmarkView::onUpdateRange( wxCommandEvent& /* event */ ) { + TreeViewItem *curSel = itemToTVI(m_treeView->GetSelection()); + + if (curSel && curSel->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RANGE) { + ActionDialog::showDialog(new ActionDialogUpdateRange(curSel->rangeEnt)); + } +} + +void BookmarkView::onTreeBeginDrag( wxTreeEvent& event ) { + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem())); + + dragItem = nullptr; + dragItemId = nullptr; + + SetCursor(wxCURSOR_CROSS); + + if (!tvi) { + event.Veto(); + return; + } + + bool bAllow = false; + std::wstring dragItemName; + + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + bAllow = true; + dragItemName = BookmarkMgr::getActiveDisplayName(tvi->demod); + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT || tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + bAllow = true; + dragItemName = BookmarkMgr::getBookmarkEntryDisplayName(tvi->bookmarkEnt); + } + + if (bAllow) { + wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground); + wxColour textColor(ThemeMgr::mgr.currentTheme->text); + + m_treeView->SetBackgroundColour(textColor); + m_treeView->SetForegroundColour(bgColor); +// m_treeView->SetToolTip("Dragging " + dragItemName); + + dragItem = tvi; + dragItemId = event.GetItem(); + + visualDragItem = new BookmarkViewVisualDragItem(dragItemName); + + event.Allow(); + } else { + event.Veto(); + } +} + + +void BookmarkView::onTreeEndDrag( wxTreeEvent& event ) { + + wxColour bgColor(ThemeMgr::mgr.currentTheme->generalBackground); + wxColour textColor(ThemeMgr::mgr.currentTheme->text); + + m_treeView->SetBackgroundColour(bgColor); + m_treeView->SetForegroundColour(textColor); + m_treeView->UnsetToolTip(); + + SetCursor(wxCURSOR_ARROW); + + if (visualDragItem != nullptr) { + visualDragItem->Destroy(); + delete visualDragItem; + visualDragItem = nullptr; + } + + if (!event.GetItem()) { + event.Veto(); + return; + } + + TreeViewItem* tvi = dynamic_cast(m_treeView->GetItemData(event.GetItem())); + + if (!tvi) { + if (event.GetItem() == bookmarkBranch) { + if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { + doBookmarkActive(BOOKMARK_VIEW_STR_UNNAMED, dragItem->demod); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { + doBookmarkRecent(BOOKMARK_VIEW_STR_UNNAMED, dragItem->bookmarkEnt); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + doMoveBookmark(dragItem->bookmarkEnt, BOOKMARK_VIEW_STR_UNNAMED); + } + } + return; + } + + if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_GROUP) { + if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { // Active -> Group Item + doBookmarkActive(tvi->groupName, dragItem->demod); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { // Recent -> Group Item + doBookmarkRecent(tvi->groupName, dragItem->bookmarkEnt); + m_treeView->Delete(dragItemId); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { // Bookmark -> Group Item + doMoveBookmark(dragItem->bookmarkEnt, tvi->groupName); + } + } else if (tvi->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { + if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_ACTIVE) { // Active -> Same Group + doBookmarkActive(tvi->groupName, dragItem->demod); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_RECENT) { // Recent -> Same Group + doBookmarkRecent(tvi->groupName, dragItem->bookmarkEnt); + m_treeView->Delete(dragItemId); + } else if (dragItem && dragItem->type == TreeViewItem::TREEVIEW_ITEM_TYPE_BOOKMARK) { // Bookmark -> Same Group + doMoveBookmark(dragItem->bookmarkEnt, tvi->groupName); + } + } +} + + +void BookmarkView::onTreeItemGetTooltip( wxTreeEvent& event ) { + + event.Skip(); +} + + +void BookmarkView::onEnterWindow( wxMouseEvent& /* event */ ) { + mouseInView.store(true); +} + + +void BookmarkView::onLeaveWindow( wxMouseEvent& /* event */ ) { + mouseInView.store(false); +} + +void BookmarkView::onMotion( wxMouseEvent& event ) { + wxPoint pos = ClientToScreen(event.GetPosition()); + + pos += wxPoint(30,-10); + + if (visualDragItem != nullptr) { + visualDragItem->SetPosition(pos); + } + + event.Skip(); +} + +TreeViewItem *BookmarkView::itemToTVI(wxTreeItemId item) { + TreeViewItem* tvi = nullptr; + + if (item != nullptr) { + tvi = dynamic_cast(m_treeView->GetItemData(item)); + } + + return tvi; +} + +void BookmarkView::onSearchTextFocus( wxMouseEvent& /* event */ ) { + if (!m_searchText->IsEmpty()) { + if (m_searchText->GetValue() == L"Search..") { + m_searchText->SetValue(L""); + } + } +} + + +void BookmarkView::onSearchText( wxCommandEvent& event ) { + wstring searchText = m_searchText->GetValue().Trim().Lower().ToStdWstring(); + + if (!searchKeywords.empty()) { + searchKeywords.erase(searchKeywords.begin(),searchKeywords.end()); + } + + if (searchText.length() != 0) { + std::wstringstream searchTextLo(searchText); + wstring tmp; + + while(std::getline(searchTextLo, tmp, L' ')) { + if (tmp.length() != 0 && tmp.find(L"search.") == wstring::npos) { + searchKeywords.push_back(tmp); +// std::wcout << L"Keyword: " << tmp << '\n'; + } + + } + } + + if (searchKeywords.size() != 0 && !m_clearSearchButton->IsShown()) { + m_clearSearchButton->Show(); + refreshLayout(); + } else if (searchKeywords.size() == 0 && m_clearSearchButton->IsShown()) { + m_clearSearchButton->Hide(); + refreshLayout(); + } + + wxGetApp().getBookmarkMgr().updateActiveList(); + wxGetApp().getBookmarkMgr().updateBookmarks(); +} + + +void BookmarkView::onClearSearch( wxCommandEvent& /* event */ ) { + m_clearSearchButton->Hide(); + m_searchText->SetValue(L"Search.."); + m_treeView->SetFocus(); + if (!searchKeywords.empty()) { + searchKeywords.erase(searchKeywords.begin(),searchKeywords.end()); + } + wxGetApp().getBookmarkMgr().updateActiveList(); + wxGetApp().getBookmarkMgr().updateBookmarks(); + refreshLayout(); +} + +void BookmarkView::loadDefaultRanges() { + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"160 Meters",1900000,1800000,2000000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"80 Meters",3750000,3500000,4000000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"60 Meters",5368500,5332000,5405000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"40 Meters",7150000,7000000,7300000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"30 Meters",10125000,10100000,10150000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"20 Meters",14175000,14000000,14350000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"17 Meters",18068180,17044180,19092180)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"15 Meters",21225000,21000000,21450000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"12 Meters",24940000,24890000,24990000)); + wxGetApp().getBookmarkMgr().addRange(new BookmarkRangeEntry(L"10 Meters",28850000,28000000,29700000)); +} + + +BookmarkRangeEntry *BookmarkView::makeActiveRangeEntry() { + BookmarkRangeEntry *re = new BookmarkRangeEntry; + re->freq = wxGetApp().getFrequency(); + re->startFreq = wxGetApp().getAppFrame()->getViewCenterFreq() - (wxGetApp().getAppFrame()->getViewBandwidth()/2); + re->endFreq = wxGetApp().getAppFrame()->getViewCenterFreq() + (wxGetApp().getAppFrame()->getViewBandwidth()/2); + + return re; +} diff --git a/src/forms/Bookmark/BookmarkView.h b/src/forms/Bookmark/BookmarkView.h new file mode 100644 index 0000000..9e7e261 --- /dev/null +++ b/src/forms/Bookmark/BookmarkView.h @@ -0,0 +1,175 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + +#pragma once + +#include "wx/choice.h" +#include "wx/dialog.h" + +#include "BookmarkPanel.h" +#include "BookmarkMgr.h" + + +class TreeViewItem : public wxTreeItemData { +public: + enum TreeViewItemType { + TREEVIEW_ITEM_TYPE_GROUP, + TREEVIEW_ITEM_TYPE_ACTIVE, + TREEVIEW_ITEM_TYPE_RECENT, + TREEVIEW_ITEM_TYPE_BOOKMARK, + TREEVIEW_ITEM_TYPE_RANGE + }; + + TreeViewItem() { + bookmarkEnt = nullptr; + demod = nullptr; + rangeEnt = nullptr; + }; + + TreeViewItemType type; + BookmarkEntry *bookmarkEnt; + BookmarkRangeEntry *rangeEnt; + DemodulatorInstance *demod; + std::string groupName; +}; + + +class BookmarkViewVisualDragItem : public wxDialog { +public: + BookmarkViewVisualDragItem(wxString labelValue = L"Popup"); +}; + + + +class BookmarkView : public BookmarkPanel { +public: + BookmarkView( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxTAB_TRAVERSAL ); + + void updateActiveList(); + void updateBookmarks(); + bool isKeywordMatch(std::wstring str, std::vector &keywords); + void updateBookmarks(std::string group); + + wxTreeItemId refreshBookmarks(); + void updateTheme(); + void onMenuItem(wxCommandEvent& event); + bool isMouseInView(); + + bool getExpandState(std::string branchName); + void setExpandState(std::string branchName, bool state); + + void loadDefaultRanges(); + static BookmarkRangeEntry *makeActiveRangeEntry(); + +protected: + void activeSelection(DemodulatorInstance *dsel); + void bookmarkSelection(BookmarkEntry *bmSel); + void rangeSelection(BookmarkRangeEntry *re); + void activateBookmark(BookmarkEntry *bmEnt); + void activateRange(BookmarkRangeEntry *rangeEnt); + void recentSelection(BookmarkEntry *bmSel); + void groupSelection(std::string groupName); + void bookmarkBranchSelection(); + void recentBranchSelection(); + void rangeBranchSelection(); + void activeBranchSelection(); + + void hideProps(); + void showProps(); + + void onUpdateTimer( wxTimerEvent& event ); + + void doUpdateActiveList(); + + void onTreeBeginLabelEdit( wxTreeEvent& event ); + void onTreeEndLabelEdit( wxTreeEvent& event ); + void onTreeActivate( wxTreeEvent& event ); + void onTreeCollapse( wxTreeEvent& event ); + void onTreeExpanded( wxTreeEvent& event ); + void onTreeItemMenu( wxTreeEvent& event ); + void onTreeSelect( wxTreeEvent& event ); + void onTreeSelectChanging( wxTreeEvent& event ); + void onLabelText( wxCommandEvent& event ); + void onDoubleClickFreq( wxMouseEvent& event ); + void onDoubleClickBandwidth( wxMouseEvent& event ); + void onTreeBeginDrag( wxTreeEvent& event ); + void onTreeEndDrag( wxTreeEvent& event ); + void onTreeItemGetTooltip( wxTreeEvent& event ); + void onEnterWindow( wxMouseEvent& event ); + void onLeaveWindow( wxMouseEvent& event ); + void onMotion( wxMouseEvent& event ); + + void onSearchTextFocus( wxMouseEvent& event ); + void onSearchText( wxCommandEvent& event ); + void onClearSearch( wxCommandEvent& event ); + + void clearButtons(); + void showButtons(); + void refreshLayout(); + + wxButton *makeButton(wxWindow *parent, std::string labelVal, wxObjectEventFunction handler); + wxButton *addButton(wxWindow *parent, std::string labelVal, wxObjectEventFunction handler); + + void doBookmarkActive(std::string group, DemodulatorInstance *demod); + void doBookmarkRecent(std::string group, BookmarkEntry *be); + void doMoveBookmark(BookmarkEntry *be, std::string group); + void doRemoveActive(DemodulatorInstance *demod); + void doRemoveRecent(BookmarkEntry *be); + void doClearRecents(); + + void updateBookmarkChoices(); + void addBookmarkChoice(wxWindow *parent); + void onBookmarkChoice( wxCommandEvent &event ); + + void onRemoveActive( wxCommandEvent& event ); + void onRemoveBookmark( wxCommandEvent& event ); + + void onActivateBookmark( wxCommandEvent& event ); + void onActivateRecent( wxCommandEvent& event ); + void onRemoveRecent ( wxCommandEvent& event ); + void onClearRecents ( wxCommandEvent& event ); + + void onAddGroup( wxCommandEvent& event ); + void onRemoveGroup( wxCommandEvent& event ); + void onRenameGroup( wxCommandEvent& event ); + + void onAddRange( wxCommandEvent& event ); + void onRemoveRange( wxCommandEvent& event ); + void onRenameRange( wxCommandEvent& event ); + void onActivateRange( wxCommandEvent& event ); + void onUpdateRange( wxCommandEvent& event ); + + + TreeViewItem *itemToTVI(wxTreeItemId item); + + std::atomic_bool mouseInView; + + wxTreeItemId rootBranch, activeBranch, bookmarkBranch, recentBranch, rangeBranch; + + std::map expandState; + + TreeViewItem *dragItem; + wxTreeItemId dragItemId; + BookmarkViewVisualDragItem *visualDragItem; + + bool editingLabel; + + // Bookmarks + std::atomic_bool doUpdateBookmarks; + std::set< std::string > doUpdateBookmarkGroup; + BookmarkNames groupNames; + std::map groups; + wxArrayString bookmarkChoices; + wxChoice *bookmarkChoice; + + // Active + std::atomic_bool doUpdateActive; + + // Focus + BookmarkEntry *nextEnt; + BookmarkRangeEntry *nextRange; + DemodulatorInstance *nextDemod; + + // Search + std::vector searchKeywords; +}; diff --git a/src/forms/Dialog/ActionDialog.cpp b/src/forms/Dialog/ActionDialog.cpp new file mode 100644 index 0000000..acb4b43 --- /dev/null +++ b/src/forms/Dialog/ActionDialog.cpp @@ -0,0 +1,61 @@ +#include "ActionDialog.h" + + +ActionDialog *ActionDialog::activeDialog = nullptr; + +ActionDialog::ActionDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + : ActionDialogBase(parent, id, title, pos, size, style) { +} + + +ActionDialog::~ActionDialog() { + +} + +void ActionDialog::showDialog(ActionDialog *dlg) { + if (activeDialog) { // rejected + delete dlg; + return; + } + activeDialog = dlg; + dlg->Layout(); + dlg->Fit(); + dlg->ShowModal(); +} + +ActionDialog *ActionDialog::getActiveDialog() { + return activeDialog; +} + + +void ActionDialog::setActiveDialog(ActionDialog *dlg) { + activeDialog = dlg; +} + + +void ActionDialog::onClickCancel( wxCommandEvent& event ) { + ActionDialog *dlg = activeDialog; + ActionDialog::setActiveDialog(nullptr); + dlg->EndModal(0); + doClickCancel(); + delete dlg; +} + + +void ActionDialog::onClickOK( wxCommandEvent& event ) { + ActionDialog *dlg = activeDialog; + ActionDialog::setActiveDialog(nullptr); + dlg->EndModal(0); + doClickOK(); + delete dlg; +} + + +void ActionDialog::doClickCancel() { + +} + + +void ActionDialog::doClickOK() { + +} diff --git a/src/forms/Dialog/ActionDialog.h b/src/forms/Dialog/ActionDialog.h new file mode 100644 index 0000000..698479f --- /dev/null +++ b/src/forms/Dialog/ActionDialog.h @@ -0,0 +1,21 @@ +#include "ActionDialogBase.h" +#include + +class ActionDialog : public ActionDialogBase { +public: + ActionDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("QuestionTitle"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~ActionDialog(); + + void onClickCancel( wxCommandEvent& event ); + void onClickOK( wxCommandEvent& event ); + + virtual void doClickCancel(); + virtual void doClickOK(); + + static ActionDialog *getActiveDialog(); + static void setActiveDialog(ActionDialog *dlg); + static void showDialog(ActionDialog *dlg); + +private: + static ActionDialog *activeDialog; +}; diff --git a/src/forms/Dialog/ActionDialogBase.cpp b/src/forms/Dialog/ActionDialogBase.cpp new file mode 100644 index 0000000..aaf21d3 --- /dev/null +++ b/src/forms/Dialog/ActionDialogBase.cpp @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 23 2015) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "ActionDialogBase.h" + +/////////////////////////////////////////////////////////////////////////// + +ActionDialogBase::ActionDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* mainSizer; + mainSizer = new wxBoxSizer( wxVERTICAL ); + + m_questionText = new wxStaticText( this, wxID_ANY, wxT("Question"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); + m_questionText->Wrap( -1 ); + mainSizer->Add( m_questionText, 1, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* buttonSizer; + buttonSizer = new wxBoxSizer( wxHORIZONTAL ); + + m_cancelButton = new wxButton( this, wxID_ANY, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + buttonSizer->Add( m_cancelButton, 1, wxALL|wxEXPAND, 5 ); + + m_okButton = new wxButton( this, wxID_ANY, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 ); + buttonSizer->Add( m_okButton, 1, wxALL|wxEXPAND, 5 ); + + + mainSizer->Add( buttonSizer, 1, wxEXPAND, 5 ); + + + this->SetSizer( mainSizer ); + this->Layout(); + mainSizer->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + m_cancelButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActionDialogBase::onClickCancel ), NULL, this ); + m_okButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActionDialogBase::onClickOK ), NULL, this ); +} + +ActionDialogBase::~ActionDialogBase() +{ + // Disconnect Events + m_cancelButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActionDialogBase::onClickCancel ), NULL, this ); + m_okButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActionDialogBase::onClickOK ), NULL, this ); + +} diff --git a/src/forms/Dialog/ActionDialogBase.fbp b/src/forms/Dialog/ActionDialogBase.fbp new file mode 100644 index 0000000..8dc234d --- /dev/null +++ b/src/forms/Dialog/ActionDialogBase.fbp @@ -0,0 +1,369 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + ActionDialogBase + 1000 + none + 0 + ActionDialogBase + + . + + 1 + 1 + 1 + 1 + UI + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + ActionDialogBase + + + wxDEFAULT_DIALOG_STYLE + + QuestionTitle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainSizer + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Question + + 0 + + + 0 + + 1 + m_questionText + 1 + + + protected + 1 + + Resizable + 1 + + wxALIGN_CENTRE + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + buttonSizer + wxHORIZONTAL + none + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Cancel + + 0 + + + 0 + + 1 + m_cancelButton + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onClickCancel + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + OK + + 0 + + + 0 + + 1 + m_okButton + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onClickOK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/forms/Dialog/ActionDialogBase.h b/src/forms/Dialog/ActionDialogBase.h new file mode 100644 index 0000000..72b0b85 --- /dev/null +++ b/src/forms/Dialog/ActionDialogBase.h @@ -0,0 +1,50 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 23 2015) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __ACTIONDIALOGBASE_H__ +#define __ACTIONDIALOGBASE_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class ActionDialogBase +/////////////////////////////////////////////////////////////////////////////// +class ActionDialogBase : public wxDialog +{ + private: + + protected: + wxStaticText* m_questionText; + wxButton* m_cancelButton; + wxButton* m_okButton; + + // Virtual event handlers, overide them in your derived class + virtual void onClickCancel( wxCommandEvent& event ) { event.Skip(); } + virtual void onClickOK( wxCommandEvent& event ) { event.Skip(); } + + + public: + + ActionDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("QuestionTitle"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~ActionDialogBase(); + +}; + +#endif //__ACTIONDIALOGBASE_H__ diff --git a/src/forms/DigitalConsole/DigitalConsole.cpp b/src/forms/DigitalConsole/DigitalConsole.cpp index f472ca1..8238335 100644 --- a/src/forms/DigitalConsole/DigitalConsole.cpp +++ b/src/forms/DigitalConsole/DigitalConsole.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "DigitalConsole.h" #include "CubicSDR.h" #include diff --git a/src/forms/DigitalConsole/DigitalConsole.h b/src/forms/DigitalConsole/DigitalConsole.h index 5d5321d..a7ba9d6 100644 --- a/src/forms/DigitalConsole/DigitalConsole.h +++ b/src/forms/DigitalConsole/DigitalConsole.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/forms/SDRDevices/SDRDeviceAdd.cpp b/src/forms/SDRDevices/SDRDeviceAdd.cpp index e7bcd39..00b2ce2 100644 --- a/src/forms/SDRDevices/SDRDeviceAdd.cpp +++ b/src/forms/SDRDevices/SDRDeviceAdd.cpp @@ -1,5 +1,7 @@ -#include "SDRDeviceAdd.h" +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ +#include "SDRDeviceAdd.h" #include "SDREnumerator.h" SDRDeviceAddDialog::SDRDeviceAddDialog( wxWindow* parent ): SDRDeviceAddForm( parent ) { diff --git a/src/forms/SDRDevices/SDRDeviceAdd.h b/src/forms/SDRDevices/SDRDeviceAdd.h index 649d130..36fe0e7 100644 --- a/src/forms/SDRDevices/SDRDeviceAdd.h +++ b/src/forms/SDRDevices/SDRDeviceAdd.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "SDRDeviceAddForm.h" diff --git a/src/forms/SDRDevices/SDRDevices.cpp b/src/forms/SDRDevices/SDRDevices.cpp index df81fb8..e0bd51e 100644 --- a/src/forms/SDRDevices/SDRDevices.cpp +++ b/src/forms/SDRDevices/SDRDevices.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SDRDevices.h" #include @@ -5,7 +8,11 @@ #include "CubicSDR.h" -SDRDevicesDialog::SDRDevicesDialog( wxWindow* parent ): devFrame( parent ) { +#ifdef __linux__ +#include "CubicSDR.xpm" +#endif + +SDRDevicesDialog::SDRDevicesDialog( wxWindow* parent ): devFrame( parent, wxID_ANY, wxT(CUBICSDR_INSTALL_NAME " :: SDR Devices")) { refresh = true; failed = false; m_refreshButton->Disable(); @@ -17,6 +24,13 @@ SDRDevicesDialog::SDRDevicesDialog( wxWindow* parent ): devFrame( parent ) { removeId = nullptr; devAddDialog = nullptr; dev = nullptr; + +#ifdef __linux__ + SetIcon(wxICON(cubicsdr)); +#elif _WIN32 + SetIcon(wxICON(frame_icon)); +#endif + } void SDRDevicesDialog::OnClose( wxCloseEvent& /* event */) { @@ -113,8 +127,8 @@ void SDRDevicesDialog::refreshDeviceProperties() { devSettings["name"] = m_propertyGrid->Append( new wxStringProperty("Name", wxPG_LABEL, devConfig->getDeviceName()) ); devSettings["offset"] = m_propertyGrid->Append( new wxIntProperty("Offset (Hz)", wxPG_LABEL, devConfig->getOffset()) ); - int currentSampleRate = wxGetApp().getSampleRate(); - int deviceSampleRate = devConfig->getSampleRate(); + long currentSampleRate = wxGetApp().getSampleRate(); + long deviceSampleRate = devConfig->getSampleRate(); if (!deviceSampleRate) { deviceSampleRate = selDev->getSampleRateNear(SOAPY_SDR_RX, 0, currentSampleRate); @@ -315,7 +329,7 @@ void SDRDevicesDialog::OnUseSelected( wxMouseEvent& event) { wxGetApp().setDeviceArgs(settingArgs); wxGetApp().setStreamArgs(streamArgs); wxGetApp().setDevice(dev,0); - + wxGetApp().notifyMainUIOfDeviceChange(); Close(); } event.Skip(); @@ -435,13 +449,14 @@ void SDRDevicesDialog::OnPropGridChanged( wxPropertyGridEvent& event ) { DeviceConfig *devConfig = wxGetApp().getConfig()->getDevice(dev->getDeviceId()); std::string strRate = deviceArgs["sample_rate"].options[event.GetPropertyValue().GetInteger()]; - int srate = 0; + long srate = 0; try { - srate = std::stoi(strRate); + srate = std::stol(strRate); devConfig->setSampleRate(srate); if (dev->isActive() || !wxGetApp().getDevice()) { wxGetApp().setSampleRate(srate); + wxGetApp().notifyMainUIOfDeviceChange(); } } catch (std::invalid_argument e) { // nop diff --git a/src/forms/SDRDevices/SDRDevices.h b/src/forms/SDRDevices/SDRDevices.h index 199abbe..cbf2e18 100644 --- a/src/forms/SDRDevices/SDRDevices.h +++ b/src/forms/SDRDevices/SDRDevices.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/modules/modem/Modem.cpp b/src/modules/modem/Modem.cpp index da782ee..daaf00f 100644 --- a/src/modules/modem/Modem.cpp +++ b/src/modules/modem/Modem.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "Modem.h" #include "CubicSDR.h" diff --git a/src/modules/modem/Modem.h b/src/modules/modem/Modem.h index 423c65b..a22166d 100644 --- a/src/modules/modem/Modem.h +++ b/src/modules/modem/Modem.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "liquid/liquid.h" diff --git a/src/modules/modem/ModemAnalog.cpp b/src/modules/modem/ModemAnalog.cpp index 14f0b3c..02d65c8 100644 --- a/src/modules/modem/ModemAnalog.cpp +++ b/src/modules/modem/ModemAnalog.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemAnalog.h" ModemAnalog::ModemAnalog() : Modem(), aOutputCeil(1), aOutputCeilMA(1), aOutputCeilMAA(1) { @@ -12,7 +15,7 @@ int ModemAnalog::checkSampleRate(long long sampleRate, int /* audioSampleRate */ if (sampleRate < MIN_BANDWIDTH) { return MIN_BANDWIDTH; } - return sampleRate; + return (int)sampleRate; } ModemKit *ModemAnalog::buildKit(long long sampleRate, int audioSampleRate) { @@ -24,7 +27,7 @@ ModemKit *ModemAnalog::buildKit(long long sampleRate, int audioSampleRate) { akit->sampleRate = sampleRate; akit->audioSampleRate = audioSampleRate; akit->audioResampleRatio = double(audioSampleRate) / double(sampleRate); - akit->audioResampler = msresamp_rrrf_create(akit->audioResampleRatio, As); + akit->audioResampler = msresamp_rrrf_create((float)akit->audioResampleRatio, As); return akit; } @@ -82,7 +85,7 @@ void ModemAnalog::buildAudioOutput(ModemKitAnalog *akit, AudioThreadInput *audio } } - msresamp_rrrf_execute(akit->audioResampler, &demodOutputData[0], demodOutputData.size(), &resampledOutputData[0], &numAudioWritten); + msresamp_rrrf_execute(akit->audioResampler, &demodOutputData[0], (int)demodOutputData.size(), &resampledOutputData[0], &numAudioWritten); audioOut->channels = 1; audioOut->sampleRate = akit->audioSampleRate; diff --git a/src/modules/modem/ModemAnalog.h b/src/modules/modem/ModemAnalog.h index be19159..153c3c9 100644 --- a/src/modules/modem/ModemAnalog.h +++ b/src/modules/modem/ModemAnalog.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" diff --git a/src/modules/modem/ModemDigital.cpp b/src/modules/modem/ModemDigital.cpp index 3723d15..401d97f 100644 --- a/src/modules/modem/ModemDigital.cpp +++ b/src/modules/modem/ModemDigital.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemDigital.h" @@ -23,7 +26,7 @@ int ModemDigital::checkSampleRate(long long sampleRate, int /* audioSampleRate * if (sampleRate < MIN_BANDWIDTH) { return MIN_BANDWIDTH; } - return sampleRate; + return (int)sampleRate; } ModemKit *ModemDigital::buildKit(long long sampleRate, int audioSampleRate) { diff --git a/src/modules/modem/ModemDigital.h b/src/modules/modem/ModemDigital.h index e1991c1..05722e8 100644 --- a/src/modules/modem/ModemDigital.h +++ b/src/modules/modem/ModemDigital.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" #include diff --git a/src/modules/modem/analog/ModemAM.cpp b/src/modules/modem/analog/ModemAM.cpp index ab0aac0..03da7e8 100644 --- a/src/modules/modem/analog/ModemAM.cpp +++ b/src/modules/modem/analog/ModemAM.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemAM.h" ModemAM::ModemAM() : ModemAnalog() { diff --git a/src/modules/modem/analog/ModemAM.h b/src/modules/modem/analog/ModemAM.h index 9da1ca2..af165b9 100644 --- a/src/modules/modem/analog/ModemAM.h +++ b/src/modules/modem/analog/ModemAM.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" #include "ModemAnalog.h" diff --git a/src/modules/modem/analog/ModemDSB.cpp b/src/modules/modem/analog/ModemDSB.cpp index 2cfe35c..37f5b26 100644 --- a/src/modules/modem/analog/ModemDSB.cpp +++ b/src/modules/modem/analog/ModemDSB.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemDSB.h" ModemDSB::ModemDSB() : ModemAnalog() { diff --git a/src/modules/modem/analog/ModemDSB.h b/src/modules/modem/analog/ModemDSB.h index 4a80784..2645d13 100644 --- a/src/modules/modem/analog/ModemDSB.h +++ b/src/modules/modem/analog/ModemDSB.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" #include "ModemAnalog.h" diff --git a/src/modules/modem/analog/ModemFM.cpp b/src/modules/modem/analog/ModemFM.cpp index 933e6cf..da969b8 100644 --- a/src/modules/modem/analog/ModemFM.cpp +++ b/src/modules/modem/analog/ModemFM.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemFM.h" ModemFM::ModemFM() : ModemAnalog() { @@ -30,7 +33,7 @@ void ModemFM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *au return; } - freqdem_demodulate_block(demodFM, &input->data[0], bufSize, &demodOutputData[0]); + freqdem_demodulate_block(demodFM, &input->data[0], (int)bufSize, &demodOutputData[0]); buildAudioOutput(fmkit, audioOut, false); } diff --git a/src/modules/modem/analog/ModemFM.h b/src/modules/modem/analog/ModemFM.h index a62e729..2e08a1a 100644 --- a/src/modules/modem/analog/ModemFM.h +++ b/src/modules/modem/analog/ModemFM.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" #include "ModemAnalog.h" diff --git a/src/modules/modem/analog/ModemFMStereo.cpp b/src/modules/modem/analog/ModemFMStereo.cpp index f98fa21..e84c49b 100644 --- a/src/modules/modem/analog/ModemFMStereo.cpp +++ b/src/modules/modem/analog/ModemFMStereo.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemFMStereo.h" ModemFMStereo::ModemFMStereo() { @@ -27,7 +30,7 @@ int ModemFMStereo::checkSampleRate(long long sampleRate, int /* audioSampleRate } else if (sampleRate < 1500) { return 1500; } else { - return sampleRate; + return (int)sampleRate; } } @@ -92,13 +95,13 @@ ModemKit *ModemFMStereo::buildKit(long long sampleRate, int audioSampleRate) { float As = 60.0f; // stop-band attenuation [dB] - kit->audioResampler = msresamp_rrrf_create(kit->audioResampleRatio, As); - kit->stereoResampler = msresamp_rrrf_create(kit->audioResampleRatio, As); + kit->audioResampler = msresamp_rrrf_create((float)kit->audioResampleRatio, As); + kit->stereoResampler = msresamp_rrrf_create((float)kit->audioResampleRatio, As); // Stereo filters / shifters - double firStereoCutoff = 16000.0 / double(audioSampleRate); + float firStereoCutoff = 16000.0f / float(audioSampleRate); // filter transition - float ft = 1000.0f / double(audioSampleRate); + float ft = 1000.0f / float(audioSampleRate); // fractional timing offset float mu = 0.0f; @@ -139,13 +142,13 @@ ModemKit *ModemFMStereo::buildKit(long long sampleRate, int audioSampleRate) { kit->demph = _demph; if (_demph) { - float f = (1.0f / (2.0f * M_PI * double(_demph) * 1e-6)); - float t = 1.0f / (2.0f * M_PI * f); - t = 1.0f / (2.0f * float(audioSampleRate) * tan(1.0f / (2.0f * float(audioSampleRate) * t))); + double f = (1.0 / (2.0 * M_PI * double(_demph) * 1e-6)); + double t = 1.0 / (2.0 * M_PI * f); + t = 1.0 / (2.0 * double(audioSampleRate) * tan(1.0 / (2.0 * double(audioSampleRate) * t))); - float tb = (1.0f + 2.0f * t * float(audioSampleRate)); - float b_demph[2] = { 1.0f / tb, 1.0f / tb }; - float a_demph[2] = { 1.0f, (1.0f - 2.0f * t * float(audioSampleRate)) / tb }; + double tb = (1.0 + 2.0 * t * double(audioSampleRate)); + float b_demph[2] = { (float)(1.0 / tb), (float)(1.0 / tb) }; + float a_demph[2] = { 1.0, (float)((1.0 - 2.0 * t * double(audioSampleRate)) / tb) }; kit->iirDemphL = iirfilt_rrrf_create(b_demph, 2, a_demph, 2); kit->iirDemphR = iirfilt_rrrf_create(b_demph, 2, a_demph, 2); @@ -188,7 +191,7 @@ void ModemFMStereo::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInp size_t audio_out_size = (size_t)ceil((double) (bufSize) * audio_resample_ratio) + 512; - freqdem_demodulate_block(demodFM, &input->data[0], bufSize, &demodOutputData[0]); + freqdem_demodulate_block(demodFM, &input->data[0], (int)bufSize, &demodOutputData[0]); if (resampledOutputData.size() != audio_out_size) { if (resampledOutputData.capacity() < audio_out_size) { @@ -199,7 +202,7 @@ void ModemFMStereo::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInp unsigned int numAudioWritten; - msresamp_rrrf_execute(fmkit->audioResampler, &demodOutputData[0], bufSize, &resampledOutputData[0], &numAudioWritten); + msresamp_rrrf_execute(fmkit->audioResampler, &demodOutputData[0], (int)bufSize, &resampledOutputData[0], &numAudioWritten); if (demodStereoData.size() != bufSize) { if (demodStereoData.capacity() < bufSize) { @@ -249,7 +252,7 @@ void ModemFMStereo::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInp resampledStereoData.resize(audio_out_size); } - msresamp_rrrf_execute(fmkit->stereoResampler, &demodStereoData[0], bufSize, &resampledStereoData[0], &numAudioWritten); + msresamp_rrrf_execute(fmkit->stereoResampler, &demodStereoData[0], (int)bufSize, &resampledStereoData[0], &numAudioWritten); audioOut->channels = 2; if (audioOut->data.capacity() < (numAudioWritten * 2)) { diff --git a/src/modules/modem/analog/ModemFMStereo.h b/src/modules/modem/analog/ModemFMStereo.h index ccba7dd..1c8bd85 100644 --- a/src/modules/modem/analog/ModemFMStereo.h +++ b/src/modules/modem/analog/ModemFMStereo.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" diff --git a/src/modules/modem/analog/ModemIQ.cpp b/src/modules/modem/analog/ModemIQ.cpp index 78bfddd..9fa3ec7 100644 --- a/src/modules/modem/analog/ModemIQ.cpp +++ b/src/modules/modem/analog/ModemIQ.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemIQ.h" ModemIQ::ModemIQ() { diff --git a/src/modules/modem/analog/ModemIQ.h b/src/modules/modem/analog/ModemIQ.h index e3d8901..30a551b 100644 --- a/src/modules/modem/analog/ModemIQ.h +++ b/src/modules/modem/analog/ModemIQ.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" diff --git a/src/modules/modem/analog/ModemLSB.cpp b/src/modules/modem/analog/ModemLSB.cpp index 2d704cf..140a90a 100644 --- a/src/modules/modem/analog/ModemLSB.cpp +++ b/src/modules/modem/analog/ModemLSB.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemLSB.h" ModemLSB::ModemLSB() : ModemAnalog() { @@ -9,7 +12,7 @@ ModemLSB::ModemLSB() : ModemAnalog() { ssbFilt = iirfilt_crcf_create_lowpass(6, 0.25); #endif ssbShift = nco_crcf_create(LIQUID_NCO); - nco_crcf_set_frequency(ssbShift, (2.0 * M_PI) * 0.25); + nco_crcf_set_frequency(ssbShift, (float)((2.0 * M_PI) * 0.25)); c2rFilt = firhilbf_create(5, 90.0); useSignalOutput(true); } @@ -38,9 +41,9 @@ int ModemLSB::checkSampleRate(long long sampleRate, int /* audioSampleRate */) { return MIN_BANDWIDTH; } if (sampleRate % 2 == 0) { - return sampleRate; + return (int)sampleRate; } - return sampleRate+1; + return (int)(sampleRate+1); } int ModemLSB::getDefaultSampleRate() { diff --git a/src/modules/modem/analog/ModemLSB.h b/src/modules/modem/analog/ModemLSB.h index e787dda..8834313 100644 --- a/src/modules/modem/analog/ModemLSB.h +++ b/src/modules/modem/analog/ModemLSB.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemAnalog.h" diff --git a/src/modules/modem/analog/ModemNBFM.cpp b/src/modules/modem/analog/ModemNBFM.cpp index 5dc77a6..fd1b255 100644 --- a/src/modules/modem/analog/ModemNBFM.cpp +++ b/src/modules/modem/analog/ModemNBFM.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemNBFM.h" ModemNBFM::ModemNBFM() : ModemAnalog() { @@ -30,7 +33,7 @@ void ModemNBFM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput * return; } - freqdem_demodulate_block(demodFM, &input->data[0], bufSize, &demodOutputData[0]); + freqdem_demodulate_block(demodFM, &input->data[0], (unsigned int)bufSize, &demodOutputData[0]); buildAudioOutput(fmkit, audioOut, false); } diff --git a/src/modules/modem/analog/ModemNBFM.h b/src/modules/modem/analog/ModemNBFM.h index 7d15cdb..52d34ad 100644 --- a/src/modules/modem/analog/ModemNBFM.h +++ b/src/modules/modem/analog/ModemNBFM.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Modem.h" #include "ModemAnalog.h" diff --git a/src/modules/modem/analog/ModemUSB.cpp b/src/modules/modem/analog/ModemUSB.cpp index 534974e..f221f2c 100644 --- a/src/modules/modem/analog/ModemUSB.cpp +++ b/src/modules/modem/analog/ModemUSB.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemUSB.h" ModemUSB::ModemUSB() : ModemAnalog() { @@ -9,7 +12,7 @@ ModemUSB::ModemUSB() : ModemAnalog() { ssbFilt = iirfilt_crcf_create_lowpass(6, 0.25); #endif ssbShift = nco_crcf_create(LIQUID_NCO); - nco_crcf_set_frequency(ssbShift, (2.0f * M_PI) * 0.25f); + nco_crcf_set_frequency(ssbShift, (float)((2.0 * M_PI) * 0.25)); c2rFilt = firhilbf_create(5, 90.0); useSignalOutput(true); } @@ -38,9 +41,9 @@ int ModemUSB::checkSampleRate(long long sampleRate, int /* audioSampleRate */) { return MIN_BANDWIDTH; } if (sampleRate % 2 == 0) { - return sampleRate; + return (int)sampleRate; } - return sampleRate+1; + return (int)(sampleRate+1); } int ModemUSB::getDefaultSampleRate() { diff --git a/src/modules/modem/analog/ModemUSB.h b/src/modules/modem/analog/ModemUSB.h index f9dec65..e7ae61d 100644 --- a/src/modules/modem/analog/ModemUSB.h +++ b/src/modules/modem/analog/ModemUSB.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemAnalog.h" diff --git a/src/modules/modem/digital/ModemAPSK.cpp b/src/modules/modem/digital/ModemAPSK.cpp index d67bd3a..2533e91 100644 --- a/src/modules/modem/digital/ModemAPSK.cpp +++ b/src/modules/modem/digital/ModemAPSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemAPSK.h" ModemAPSK::ModemAPSK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemAPSK.h b/src/modules/modem/digital/ModemAPSK.h index e3dabb5..4ebf379 100644 --- a/src/modules/modem/digital/ModemAPSK.h +++ b/src/modules/modem/digital/ModemAPSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemASK.cpp b/src/modules/modem/digital/ModemASK.cpp index b1e87c6..766eec9 100644 --- a/src/modules/modem/digital/ModemASK.cpp +++ b/src/modules/modem/digital/ModemASK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemASK.h" ModemASK::ModemASK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemASK.h b/src/modules/modem/digital/ModemASK.h index a672d14..af9f1d1 100644 --- a/src/modules/modem/digital/ModemASK.h +++ b/src/modules/modem/digital/ModemASK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemBPSK.cpp b/src/modules/modem/digital/ModemBPSK.cpp index 59cb4f1..eef810c 100644 --- a/src/modules/modem/digital/ModemBPSK.cpp +++ b/src/modules/modem/digital/ModemBPSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemBPSK.h" ModemBPSK::ModemBPSK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemBPSK.h b/src/modules/modem/digital/ModemBPSK.h index f986ca4..70719c3 100644 --- a/src/modules/modem/digital/ModemBPSK.h +++ b/src/modules/modem/digital/ModemBPSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemDPSK.cpp b/src/modules/modem/digital/ModemDPSK.cpp index 4927183..f8dbbaa 100644 --- a/src/modules/modem/digital/ModemDPSK.cpp +++ b/src/modules/modem/digital/ModemDPSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemDPSK.h" ModemDPSK::ModemDPSK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemDPSK.h b/src/modules/modem/digital/ModemDPSK.h index ffeb5e3..dbb24a0 100644 --- a/src/modules/modem/digital/ModemDPSK.h +++ b/src/modules/modem/digital/ModemDPSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemFSK.cpp b/src/modules/modem/digital/ModemFSK.cpp index 8db47f8..d152a8e 100644 --- a/src/modules/modem/digital/ModemFSK.cpp +++ b/src/modules/modem/digital/ModemFSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemFSK.h" #include @@ -5,7 +8,7 @@ ModemFSK::ModemFSK() : ModemDigital() { // DMR defaults? bps = 1; sps = 9600; - bw = 0.45; + bw = 0.45f; outStream << std::hex; } @@ -14,12 +17,12 @@ ModemBase *ModemFSK::factory() { } int ModemFSK::checkSampleRate(long long sampleRate, int audioSampleRate) { - float minSps = pow(2.0,bps); - float nextSps = (float(sampleRate) / float(sps)); + double minSps = pow(2.0,bps); + double nextSps = (double(sampleRate) / double(sps)); if (nextSps < minSps) { return 2 * bps * sps; } else { - return sampleRate; + return (int)sampleRate; } } @@ -98,7 +101,7 @@ std::string ModemFSK::readSetting(std::string setting) { ModemKit *ModemFSK::buildKit(long long sampleRate, int audioSampleRate) { ModemKitFSK *dkit = new ModemKitFSK; dkit->m = bps; - dkit->k = sampleRate / sps; + dkit->k = (unsigned int)(sampleRate / sps); dkit->bw = bw; dkit->demodFSK = fskdem_create(dkit->m, dkit->k, dkit->bw); diff --git a/src/modules/modem/digital/ModemFSK.h b/src/modules/modem/digital/ModemFSK.h index e8cbcce..6f8846e 100644 --- a/src/modules/modem/digital/ModemFSK.h +++ b/src/modules/modem/digital/ModemFSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" #include diff --git a/src/modules/modem/digital/ModemGMSK.cpp b/src/modules/modem/digital/ModemGMSK.cpp index e7ec132..c1a79fb 100644 --- a/src/modules/modem/digital/ModemGMSK.cpp +++ b/src/modules/modem/digital/ModemGMSK.cpp @@ -1,10 +1,13 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemGMSK.h" #include ModemGMSK::ModemGMSK() : ModemDigital() { _sps = 4; _fdelay = 3; - _ebf = 0.3; + _ebf = 0.3f; outStream << std::hex; } @@ -24,7 +27,7 @@ int ModemGMSK::checkSampleRate(long long sampleRate, int audioSampleRate) { if (sampleRate < MIN_BANDWIDTH) { return MIN_BANDWIDTH; } - return sampleRate; + return (int)sampleRate; } int ModemGMSK::getDefaultSampleRate() { diff --git a/src/modules/modem/digital/ModemGMSK.h b/src/modules/modem/digital/ModemGMSK.h index 714670b..6b82c0d 100644 --- a/src/modules/modem/digital/ModemGMSK.h +++ b/src/modules/modem/digital/ModemGMSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" #include diff --git a/src/modules/modem/digital/ModemOOK.cpp b/src/modules/modem/digital/ModemOOK.cpp index 36f90ed..fce95a6 100644 --- a/src/modules/modem/digital/ModemOOK.cpp +++ b/src/modules/modem/digital/ModemOOK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemOOK.h" ModemOOK::ModemOOK() : ModemDigital() { @@ -20,7 +23,7 @@ int ModemOOK::checkSampleRate(long long sampleRate, int audioSampleRate) { if (sampleRate < 100) { return 100; } - return sampleRate; + return (int)sampleRate; } void ModemOOK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { diff --git a/src/modules/modem/digital/ModemOOK.h b/src/modules/modem/digital/ModemOOK.h index d4396e3..03b5a4b 100644 --- a/src/modules/modem/digital/ModemOOK.h +++ b/src/modules/modem/digital/ModemOOK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemPSK.cpp b/src/modules/modem/digital/ModemPSK.cpp index c1e66bc..05ac291 100644 --- a/src/modules/modem/digital/ModemPSK.cpp +++ b/src/modules/modem/digital/ModemPSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemPSK.h" ModemPSK::ModemPSK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemPSK.h b/src/modules/modem/digital/ModemPSK.h index 7732342..5f9880a 100644 --- a/src/modules/modem/digital/ModemPSK.h +++ b/src/modules/modem/digital/ModemPSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemQAM.cpp b/src/modules/modem/digital/ModemQAM.cpp index 84bd203..e2c500d 100644 --- a/src/modules/modem/digital/ModemQAM.cpp +++ b/src/modules/modem/digital/ModemQAM.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemQAM.h" ModemQAM::ModemQAM() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemQAM.h b/src/modules/modem/digital/ModemQAM.h index 21da247..4260596 100644 --- a/src/modules/modem/digital/ModemQAM.h +++ b/src/modules/modem/digital/ModemQAM.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemQPSK.cpp b/src/modules/modem/digital/ModemQPSK.cpp index 6164af5..2b35994 100644 --- a/src/modules/modem/digital/ModemQPSK.cpp +++ b/src/modules/modem/digital/ModemQPSK.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemQPSK.h" ModemQPSK::ModemQPSK() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemQPSK.h b/src/modules/modem/digital/ModemQPSK.h index b532e38..c510a54 100644 --- a/src/modules/modem/digital/ModemQPSK.h +++ b/src/modules/modem/digital/ModemQPSK.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemSQAM.cpp b/src/modules/modem/digital/ModemSQAM.cpp index fee4b2f..20dc445 100644 --- a/src/modules/modem/digital/ModemSQAM.cpp +++ b/src/modules/modem/digital/ModemSQAM.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemSQAM.h" ModemSQAM::ModemSQAM() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemSQAM.h b/src/modules/modem/digital/ModemSQAM.h index 46db613..fcd2b92 100644 --- a/src/modules/modem/digital/ModemSQAM.h +++ b/src/modules/modem/digital/ModemSQAM.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/modules/modem/digital/ModemST.cpp b/src/modules/modem/digital/ModemST.cpp index 993cd03..409a1a7 100644 --- a/src/modules/modem/digital/ModemST.cpp +++ b/src/modules/modem/digital/ModemST.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModemST.h" ModemST::ModemST() : ModemDigital() { diff --git a/src/modules/modem/digital/ModemST.h b/src/modules/modem/digital/ModemST.h index 76b62ea..cf74e69 100644 --- a/src/modules/modem/digital/ModemST.h +++ b/src/modules/modem/digital/ModemST.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "ModemDigital.h" diff --git a/src/panel/MeterPanel.cpp b/src/panel/MeterPanel.cpp index 54cbe12..c3d191f 100644 --- a/src/panel/MeterPanel.cpp +++ b/src/panel/MeterPanel.cpp @@ -1,3 +1,5 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ #include "MeterPanel.h" #include "ColorTheme.h" @@ -40,14 +42,14 @@ MeterPanel::MeterPanel(std::string name, float low, float high, float current) { addChild(&bgPanel); - labelPanel.setSize(1.0, 0.1); + labelPanel.setSize(1.0f, 0.1f); labelPanel.setPosition(0.0, 1.0); labelPanel.setText(name,GLFont::GLFONT_ALIGN_CENTER, GLFont::GLFONT_ALIGN_CENTER, true); labelPanel.setFill(GLPanel::GLPANEL_FILL_NONE); addChild(&labelPanel); - valuePanel.setSize(1.0, 0.1); + valuePanel.setSize(1.0f, 0.1f); valuePanel.setPosition(0.0, -1.0); setValueLabel(std::to_string(int(current))); diff --git a/src/panel/MeterPanel.h b/src/panel/MeterPanel.h index 75781d7..21b4c58 100644 --- a/src/panel/MeterPanel.h +++ b/src/panel/MeterPanel.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "GLPanel.h" diff --git a/src/panel/ScopePanel.cpp b/src/panel/ScopePanel.cpp index f83e00c..bde35cd 100644 --- a/src/panel/ScopePanel.cpp +++ b/src/panel/ScopePanel.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ScopePanel.h" #include "ColorTheme.h" diff --git a/src/panel/ScopePanel.h b/src/panel/ScopePanel.h index 2ce9224..1829203 100644 --- a/src/panel/ScopePanel.h +++ b/src/panel/ScopePanel.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "GLPanel.h" diff --git a/src/panel/SpectrumPanel.cpp b/src/panel/SpectrumPanel.cpp index 60dfcd3..780f442 100644 --- a/src/panel/SpectrumPanel.cpp +++ b/src/panel/SpectrumPanel.cpp @@ -1,15 +1,20 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SpectrumPanel.h" #include #include #include +#include "CubicSDR.h" #include "ColorTheme.h" #include "CubicSDRDefs.h" SpectrumPanel::SpectrumPanel() { floorValue = 0; ceilValue = 1; - showDb = false; + showDb = true; + useDbOfs = true; fftSize = DEFAULT_FFT_SIZE; bandwidth = DEFAULT_DEMOD_BW; freq = 0; @@ -83,6 +88,14 @@ bool SpectrumPanel::getShowDb() { return showDb; } +void SpectrumPanel::setUseDBOffset(bool useOfs) { + this->useDbOfs = useOfs; +} + +bool SpectrumPanel::getUseDBOffset() { + return useDbOfs; +} + void SpectrumPanel::setPoints(std::vector &points) { this->points.assign(points.begin(), points.end()); @@ -269,11 +282,11 @@ void SpectrumPanel::drawPanelContents() { if (showDb) { float dbPanelWidth = (1.0 / viewWidth)*88.0 * GLFont::getScaleFactor(); float dbPanelHeight = (1.0/viewHeight)*14.0 * GLFont::getScaleFactor(); - + float dbOfs = useDbOfs?wxGetApp().getConfig()->getDBOffset():0; std::stringstream ssLabel(""); if (getCeilValue() != getFloorValue() && fftSize) { - ssLabel << std::fixed << std::setprecision(1) << (20.0 * log10(2.0*(getCeilValue())/(double)fftSize)) << "dB"; + ssLabel << std::fixed << std::setprecision(1) << (dbOfs + 20.0 * log10(2.0*(getCeilValue())/(double)fftSize)) << "dB"; } dbPanelCeil.setText(ssLabel.str(), GLFont::GLFONT_ALIGN_RIGHT); dbPanelCeil.setSize(dbPanelWidth, dbPanelHeight); @@ -282,7 +295,7 @@ void SpectrumPanel::drawPanelContents() { ssLabel.str(""); if (getCeilValue() != getFloorValue() && fftSize) { - ssLabel << (20.0 * log10(2.0*(getFloorValue())/(double)fftSize)) << "dB"; + ssLabel << (dbOfs + 20.0 * log10(2.0*(getFloorValue())/(double)fftSize)) << "dB"; } dbPanelFloor.setText(ssLabel.str(), GLFont::GLFONT_ALIGN_RIGHT); diff --git a/src/panel/SpectrumPanel.h b/src/panel/SpectrumPanel.h index 39aa3fe..3885adf 100644 --- a/src/panel/SpectrumPanel.h +++ b/src/panel/SpectrumPanel.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "GLPanel.h" @@ -26,7 +29,10 @@ public: void setShowDb(bool showDb); bool getShowDb(); - + + void setUseDBOffset(bool useOfs); + bool getUseDBOffset(); + protected: void drawPanelContents(); @@ -40,5 +46,5 @@ private: GLTextPanel dbPanelCeil; GLTextPanel dbPanelFloor; - bool showDb; -}; \ No newline at end of file + bool showDb, useDbOfs; +}; diff --git a/src/panel/WaterfallPanel.cpp b/src/panel/WaterfallPanel.cpp index eab8a7b..20b6fa1 100644 --- a/src/panel/WaterfallPanel.cpp +++ b/src/panel/WaterfallPanel.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "WaterfallPanel.h" WaterfallPanel::WaterfallPanel() : GLPanel(), fft_size(0), waterfall_lines(0), waterfall_slice(NULL), activeTheme(NULL) { @@ -36,6 +39,7 @@ void WaterfallPanel::refreshTheme() { void WaterfallPanel::setPoints(std::vector &points) { size_t halfPts = points.size()/2; if (halfPts == fft_size) { + for (unsigned int i = 0; i < fft_size; i++) { this->points[i] = points[i*2+1]; } @@ -99,6 +103,10 @@ void WaterfallPanel::update() { unsigned char *waterfall_tex; + //Creates 2x 2D textures into card memory. + //of size half_fft_size * waterfall_lines, which can be BIG. + //The limit of the size of Waterfall is the size of the maximum supported 2D texture + //by the graphic card. (half_fft_size * waterfall_lines, i.e DEFAULT_DEMOD_WATERFALL_LINES_NB * DEFAULT_FFT_SIZE/2) waterfall_tex = new unsigned char[half_fft_size * waterfall_lines]; memset(waterfall_tex, 0, half_fft_size * waterfall_lines); diff --git a/src/panel/WaterfallPanel.h b/src/panel/WaterfallPanel.h index 451358a..32170d0 100644 --- a/src/panel/WaterfallPanel.h +++ b/src/panel/WaterfallPanel.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "GLPanel.h" diff --git a/src/process/FFTDataDistributor.cpp b/src/process/FFTDataDistributor.cpp index 140a50f..7a3c66d 100644 --- a/src/process/FFTDataDistributor.cpp +++ b/src/process/FFTDataDistributor.cpp @@ -1,11 +1,16 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "FFTDataDistributor.h" +#include FFTDataDistributor::FFTDataDistributor() : outputBuffers("FFTDataDistributorBuffers"), fftSize(DEFAULT_FFT_SIZE), linesPerSecond(DEFAULT_WATERFALL_LPS), lineRateAccum(0.0) { - bufferedItems = 0; + } -void FFTDataDistributor::setFFTSize(unsigned int fftSize) { - this->fftSize = fftSize; +void FFTDataDistributor::setFFTSize(unsigned int size) { + + fftSize.store(size); } void FFTDataDistributor::setLinesPerSecond(unsigned int lines) { @@ -26,25 +31,50 @@ void FFTDataDistributor::process() { input->pop(inp); if (inp) { + //Settings have changed, set new values and dump all previous samples stored in inputBuffer: if (inputBuffer.sampleRate != inp->sampleRate || inputBuffer.frequency != inp->frequency) { - - bufferMax = inp->sampleRate / 4; + + //bufferMax must be at least fftSize (+ margin), else the waterfall get frozen, because no longer updated. + bufferMax = std::max((size_t)(inp->sampleRate * FFT_DISTRIBUTOR_BUFFER_IN_SECONDS), (size_t)(1.2 * fftSize.load())); + // std::cout << "Buffer Max: " << bufferMax << std::endl; bufferOffset = 0; - + bufferedItems = 0; inputBuffer.sampleRate = inp->sampleRate; inputBuffer.frequency = inp->frequency; inputBuffer.data.resize(bufferMax); } + + //adjust (bufferMax ; inputBuffer.data) in case of FFT size change only. + if (bufferMax < (size_t)(1.2 * fftSize.load())) { + bufferMax = (size_t)(1.2 * fftSize.load()); + inputBuffer.data.resize(bufferMax); + } + + size_t nbSamplesToAdd = inp->data.size(); + + //No room left in inputBuffer.data to accept inp->data.size() more samples. + //so make room by sliding left of bufferOffset, which is fine because + //those samples has already been processed. if ((bufferOffset + bufferedItems + inp->data.size()) > bufferMax) { memmove(&inputBuffer.data[0], &inputBuffer.data[bufferOffset], bufferedItems*sizeof(liquid_float_complex)); bufferOffset = 0; - } else { - memcpy(&inputBuffer.data[bufferOffset+bufferedItems],&inp->data[0],inp->data.size()*sizeof(liquid_float_complex)); - bufferedItems += inp->data.size(); + //if there are too much samples, we may even overflow ! + //as a fallback strategy, drop the last incomming new samples not fitting in inputBuffer.data. + if (bufferedItems + inp->data.size() > bufferMax) { + //clamp nbSamplesToAdd + nbSamplesToAdd = bufferMax - bufferedItems; + std::cout << "FFTDataDistributor::process() incoming samples overflow, dropping the last " << (inp->data.size() - nbSamplesToAdd) << " input samples..." << std::endl; + } } + + //store nbSamplesToAdd incoming samples. + memcpy(&inputBuffer.data[bufferOffset+bufferedItems],&inp->data[0], nbSamplesToAdd *sizeof(liquid_float_complex)); + bufferedItems += nbSamplesToAdd; + // inp->decRefCount(); } else { + //empty inp, wait for another. continue; } @@ -53,28 +83,32 @@ void FFTDataDistributor::process() { // number of lines in input double inputLines = (double)bufferedItems / (double)fftSize; - // ratio required to achieve the desired rate + // ratio required to achieve the desired rate: + // it means we can achieive 'lineRateStep' times the target linesPerSecond. + // < 1 means we cannot reach it by lack of samples. double lineRateStep = ((double)linesPerSecond * inputTime)/(double)inputLines; + //we have enough samples to FFT at least one 'line' of 'fftSize' frequencies for display: if (bufferedItems >= fftSize) { - int numProcessed = 0; - + size_t numProcessed = 0; if (lineRateAccum + (lineRateStep * ((double)bufferedItems/(double)fftSize)) < 1.0) { // move along, nothing to see here.. lineRateAccum += (lineRateStep * ((double)bufferedItems/(double)fftSize)); numProcessed = bufferedItems; } else { - for (unsigned int i = 0, iMax = bufferedItems; i < iMax; i += fftSize) { + for (size_t i = 0, iMax = bufferedItems; i < iMax; i += fftSize) { if ((i + fftSize) > iMax) { break; } lineRateAccum += lineRateStep; if (lineRateAccum >= 1.0) { + //each i represents a FFT computation DemodulatorThreadIQData *outp = outputBuffers.getBuffer(); outp->frequency = inputBuffer.frequency; outp->sampleRate = inputBuffer.sampleRate; - outp->data.assign(inputBuffer.data.begin()+bufferOffset+i,inputBuffer.data.begin()+bufferOffset+i+fftSize); + outp->data.assign(inputBuffer.data.begin()+bufferOffset+i, + inputBuffer.data.begin()+bufferOffset+i+ fftSize); distribute(outp); while (lineRateAccum >= 1.0) { @@ -83,16 +117,19 @@ void FFTDataDistributor::process() { } numProcessed += fftSize; - } + } //end for } + //advance bufferOffset read pointer, + //reduce size of bufferedItems. if (numProcessed) { bufferedItems -= numProcessed; bufferOffset += numProcessed; } + //clamp to zero the number of remaining items. if (bufferedItems <= 0) { bufferedItems = 0; bufferOffset = 0; } - } - } + } //end if bufferedItems >= fftSize + } //en while } diff --git a/src/process/FFTDataDistributor.h b/src/process/FFTDataDistributor.h index da58828..9f60288 100644 --- a/src/process/FFTDataDistributor.h +++ b/src/process/FFTDataDistributor.h @@ -1,24 +1,31 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "VisualProcessor.h" #include "DemodDefs.h" #include #include +#include class FFTDataDistributor : public VisualProcessor { public: FFTDataDistributor(); - void setFFTSize(unsigned int fftSize); + void setFFTSize(unsigned int size); void setLinesPerSecond(unsigned int lines); unsigned int getLinesPerSecond(); protected: - void process(); + virtual void process(); DemodulatorThreadIQData inputBuffer, tempBuffer; ReBuffer outputBuffers; - unsigned int fftSize; + std::atomic fftSize; + unsigned int linesPerSecond; double lineRateAccum; - size_t bufferMax, bufferOffset, bufferedItems; + size_t bufferMax = 0; + size_t bufferOffset = 0; + size_t bufferedItems = 0; }; diff --git a/src/process/FFTVisualDataThread.cpp b/src/process/FFTVisualDataThread.cpp index 8eb9186..44e303d 100644 --- a/src/process/FFTVisualDataThread.cpp +++ b/src/process/FFTVisualDataThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "FFTVisualDataThread.h" #include "CubicSDR.h" @@ -27,10 +30,18 @@ void FFTVisualDataThread::run() { DemodulatorThreadInputQueue *pipeIQDataIn = static_cast(getInputQueue("IQDataInput")); SpectrumVisualDataQueue *pipeFFTDataOut = static_cast(getOutputQueue("FFTDataOutput")); - fftQueue.set_max_num_items(100); + + fftQueue.set_max_num_items(100); pipeFFTDataOut->set_max_num_items(100); + + //FFT distributor plumbing: + // IQDataInput push samples to process to FFT Data distributor. fftDistrib.setInput(pipeIQDataIn); + + //The FFT distributor has actually 1 output only, so it doesn't distribute at all :) fftDistrib.attachOutput(&fftQueue); + + //FFT Distributor output is ==> SpectrumVisualProcessor input. wproc.setInput(&fftQueue); wproc.attachOutput(pipeFFTDataOut); wproc.setup(DEFAULT_FFT_SIZE); @@ -39,7 +50,9 @@ void FFTVisualDataThread::run() { while(!stopping) { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + //this if fed by FFTDataDistributor which has a buffer of FFT_DISTRIBUTOR_BUFFER_IN_SECONDS + //so sleep for << FFT_DISTRIBUTOR_BUFFER_IN_SECONDS not to be overflown + std::this_thread::sleep_for(std::chrono::milliseconds((int)(FFT_DISTRIBUTOR_BUFFER_IN_SECONDS * 1000.0 / 25.0))); // std::this_thread::yield(); int fftSize = wproc.getDesiredInputSize(); @@ -56,8 +69,11 @@ void FFTVisualDataThread::run() { lpsChanged.store(false); } + //Make FFT Distributor process IQ samples + //and package them into ready-to-FFT sample sets (representing 1 line) by wproc fftDistrib.run(); - + + // Make wproc do a FFT of each of the sample sets provided by fftDistrib: while (!wproc.isInputEmpty()) { wproc.run(); } diff --git a/src/process/FFTVisualDataThread.h b/src/process/FFTVisualDataThread.h index bb16be4..55ff408 100644 --- a/src/process/FFTVisualDataThread.h +++ b/src/process/FFTVisualDataThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "IOThread.h" diff --git a/src/process/ScopeVisualProcessor.cpp b/src/process/ScopeVisualProcessor.cpp index e5d57fc..5b83b07 100644 --- a/src/process/ScopeVisualProcessor.cpp +++ b/src/process/ScopeVisualProcessor.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ScopeVisualProcessor.h" #include #include @@ -8,7 +11,7 @@ ScopeVisualProcessor::ScopeVisualProcessor(): outputBuffers("ScopeVisualProcesso fft_average_rate = 0.65f; fft_ceil_ma = fft_ceil_maa = 0; fft_floor_ma = fft_floor_maa = 0; - maxScopeSamples = 1024; + maxScopeSamples = DEFAULT_DMOD_FFT_SIZE; fftPlan = nullptr; } diff --git a/src/process/ScopeVisualProcessor.h b/src/process/ScopeVisualProcessor.h index ed85354..de0732c 100644 --- a/src/process/ScopeVisualProcessor.h +++ b/src/process/ScopeVisualProcessor.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "VisualProcessor.h" @@ -7,7 +10,7 @@ class ScopeRenderData: public ReferenceCounter { public: std::vector waveform_points; - ScopePanel::ScopeMode mode; + ScopePanel::ScopeMode mode = ScopePanel::SCOPE_MODE_Y; int inputRate; int sampleRate; int channels; @@ -26,7 +29,7 @@ public: void setScopeEnabled(bool scopeEnable); void setSpectrumEnabled(bool spectrumEnable); protected: - void process(); + virtual void process(); ReBuffer outputBuffers; std::atomic_bool scopeEnabled; @@ -36,7 +39,7 @@ protected: std::vector fftOutput; fftplan fftPlan; - unsigned int fftSize; + unsigned int fftSize = 0; int desiredInputSize; unsigned int maxScopeSamples; diff --git a/src/process/SpectrumVisualDataThread.cpp b/src/process/SpectrumVisualDataThread.cpp index 0c8981a..d29796f 100644 --- a/src/process/SpectrumVisualDataThread.cpp +++ b/src/process/SpectrumVisualDataThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SpectrumVisualDataThread.h" #include "CubicSDR.h" @@ -13,11 +16,12 @@ SpectrumVisualProcessor *SpectrumVisualDataThread::getProcessor() { } void SpectrumVisualDataThread::run() { -// std::cout << "Spectrum visual data thread started." << std::endl; while(!stopping) { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); -// std::this_thread::yield(); + //this if fed by FFTDataDistributor which has a buffer of FFT_DISTRIBUTOR_BUFFER_IN_SECONDS + //so sleep for << FFT_DISTRIBUTOR_BUFFER_IN_SECONDS not to be overflown + std::this_thread::sleep_for(std::chrono::milliseconds((int)(FFT_DISTRIBUTOR_BUFFER_IN_SECONDS * 1000.0 / 25.0))); + sproc.run(); } diff --git a/src/process/SpectrumVisualDataThread.h b/src/process/SpectrumVisualDataThread.h index 0987193..c6efc6c 100644 --- a/src/process/SpectrumVisualDataThread.h +++ b/src/process/SpectrumVisualDataThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "IOThread.h" diff --git a/src/process/SpectrumVisualProcessor.cpp b/src/process/SpectrumVisualProcessor.cpp index ad80374..7b02892 100644 --- a/src/process/SpectrumVisualProcessor.cpp +++ b/src/process/SpectrumVisualProcessor.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SpectrumVisualProcessor.h" #include "CubicSDR.h" @@ -26,6 +29,7 @@ SpectrumVisualProcessor::SpectrumVisualProcessor() : outputBuffers("SpectrumVisu fft_ceil_ma = fft_ceil_maa = 100.0; fft_floor_ma = fft_floor_maa = 0.0; + fft_floor_peak = 0.0; desiredInputSize.store(0); fft_average_rate = 0.65f; scaleFactor.store(1.0); diff --git a/src/process/SpectrumVisualProcessor.h b/src/process/SpectrumVisualProcessor.h index 80a5d05..44467c2 100644 --- a/src/process/SpectrumVisualProcessor.h +++ b/src/process/SpectrumVisualProcessor.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "VisualProcessor.h" @@ -50,7 +53,7 @@ public: float getScaleFactor(); protected: - void process(); + virtual void process(); ReBuffer outputBuffers; std::atomic_bool is_view; diff --git a/src/process/VisualProcessor.cpp b/src/process/VisualProcessor.cpp index c19fe88..34c1b37 100644 --- a/src/process/VisualProcessor.cpp +++ b/src/process/VisualProcessor.cpp @@ -1 +1,4 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "VisualProcessor.h" diff --git a/src/process/VisualProcessor.h b/src/process/VisualProcessor.h index 2b3bf2c..bd41d40 100644 --- a/src/process/VisualProcessor.h +++ b/src/process/VisualProcessor.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "CubicSDRDefs.h" @@ -40,19 +43,22 @@ public: return false; } + //Set a (new) 'input' queue for incoming data. void setInput(ThreadQueue *vis_in) { std::lock_guard < std::recursive_mutex > busy_lock(busy_update); input = vis_in; } + //Add a vis_out queue where to consumed 'input' data will be + //dispatched by distribute(). void attachOutput(ThreadQueue *vis_out) { // attach an output queue std::lock_guard < std::recursive_mutex > busy_lock(busy_update); outputs.push_back(vis_out); - } + //reverse of attachOutput(), removed an existing attached vis_out. void removeOutput(ThreadQueue *vis_out) { // remove an output queue std::lock_guard < std::recursive_mutex > busy_lock(busy_update); @@ -61,9 +67,9 @@ public: if (i != outputs.end()) { outputs.erase(i); } - } + //Call process() repeateadly until all available 'input' data is consumed. void run() { std::lock_guard < std::recursive_mutex > busy_lock(busy_update); @@ -75,37 +81,51 @@ public: } protected: - virtual void process() { - // process inputs to output - // distribute(output); - } + // derived class must implement a process() interface + //where typically 'input' data is consummed, procerssed, and then dispatched + //with distribute() to all 'outputs'. + virtual void process() = 0; - void distribute(OutputDataType *output) { - // distribute outputs + //To be used by derived classes implementing + //process() : will dispatch 'item' into as many + //available outputs, previously set by attachOutput(). + void distribute(OutputDataType *item) { + std::lock_guard < std::recursive_mutex > busy_lock(busy_update); - - output->setRefCount(outputs.size()); + //We will try to distribute 'output' among all 'outputs', + //so 'output' will a-priori be shared among all 'outputs' so set its ref count to this + //amount. + item->setRefCount((int)outputs.size()); for (outputs_i = outputs.begin(); outputs_i != outputs.end(); outputs_i++) { - - if (!(*outputs_i)->push(output)) { - output->decRefCount(); + //if 'output' failed to be given to an outputs_i, dec its ref count accordingly. + if (!(*outputs_i)->push(item)) { + item->decRefCount(); } } + + // Now 'item' refcount matches the times 'item' has been successfully distributed, + //i.e shared among the outputs. } - ThreadQueue *input; + //the incoming data queue + ThreadQueue *input = nullptr; + + //the n-outputs where to process()-ed data is distribute()-ed. std::vector *> outputs; - typename std::vector *>::iterator outputs_i; + + typename std::vector *>::iterator outputs_i; - //protects input and outputs, must be recursive because ao reentrance + //protects input and outputs, must be recursive because of re-entrance std::recursive_mutex busy_update; }; - +//Specialization much like VisualDataReDistributor, except +//the input (pointer) is directly re-dispatched +//to outputs, so that all output indeed SHARE the same instance. template class VisualDataDistributor : public VisualProcessor { protected: - void process() { + virtual void process() { OutputDataType *inp; while (VisualProcessor::input->try_pop(inp)) { @@ -123,11 +143,12 @@ protected: } }; - +//specialization class which process() take an input item and re-dispatch +//A COPY to every outputs, without further processing. This is a 1-to-n dispatcher. template class VisualDataReDistributor : public VisualProcessor { protected: - void process() { + virtual void process() { OutputDataType *inp; while (VisualProcessor::input->try_pop(inp)) { diff --git a/src/rig/RigThread.cpp b/src/rig/RigThread.cpp index e14d86d..7bdcf4b 100644 --- a/src/rig/RigThread.cpp +++ b/src/rig/RigThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "RigThread.h" std::vector RigThread::rigCaps; diff --git a/src/rig/RigThread.h b/src/rig/RigThread.h index 53b521f..c60b070 100644 --- a/src/rig/RigThread.h +++ b/src/rig/RigThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "IOThread.h" diff --git a/src/sdr/SDRDeviceInfo.cpp b/src/sdr/SDRDeviceInfo.cpp index 1e326ed..e79b77d 100644 --- a/src/sdr/SDRDeviceInfo.cpp +++ b/src/sdr/SDRDeviceInfo.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SDRDeviceInfo.h" #include #include diff --git a/src/sdr/SDRDeviceInfo.h b/src/sdr/SDRDeviceInfo.h index 77714de..cc903c1 100644 --- a/src/sdr/SDRDeviceInfo.h +++ b/src/sdr/SDRDeviceInfo.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -86,7 +89,7 @@ public: SDRRangeMap getGains(int direction, size_t channel); private: - int index; + int index = 0; std::string name, serial, product, manufacturer, tuner; std::string driver, hardware, manual_params; bool timestamps, available, remote, manual; diff --git a/src/sdr/SDREnumerator.cpp b/src/sdr/SDREnumerator.cpp index 116234b..a7680c0 100644 --- a/src/sdr/SDREnumerator.cpp +++ b/src/sdr/SDREnumerator.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SDREnumerator.h" #include "CubicSDRDefs.h" #include diff --git a/src/sdr/SDREnumerator.h b/src/sdr/SDREnumerator.h index 6511243..4bdd09f 100644 --- a/src/sdr/SDREnumerator.h +++ b/src/sdr/SDREnumerator.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/sdr/SDRPostThread.cpp b/src/sdr/SDRPostThread.cpp index 052969e..f7b1c18 100644 --- a/src/sdr/SDRPostThread.cpp +++ b/src/sdr/SDRPostThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SDRPostThread.h" #include "CubicSDRDefs.h" #include "CubicSDR.h" diff --git a/src/sdr/SDRPostThread.h b/src/sdr/SDRPostThread.h index c27fba1..2f7ad3e 100644 --- a/src/sdr/SDRPostThread.h +++ b/src/sdr/SDRPostThread.h @@ -1,10 +1,9 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once -#if USE_RTL_SDR -#include "SDRThread.h" -#else #include "SoapySDRThread.h" -#endif #include class SDRPostThread : public IOThread { @@ -46,7 +45,7 @@ private: std::vector fpData; std::vector dataOut; std::vector chanCenters; - long long chanBw; + long long chanBw = 0; size_t nRunDemods; std::vector runDemods; diff --git a/src/sdr/SDRThread.cpp b/src/sdr/SDRThread.cpp deleted file mode 100644 index 5ee8080..0000000 --- a/src/sdr/SDRThread.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include "SDRThread.h" -#include "CubicSDRDefs.h" -#include -#include "CubicSDR.h" - -SDRThread::SDRThread() : IOThread() { - offset.store(0); - deviceId.store(-1); - dev = NULL; - sampleRate.store(DEFAULT_SAMPLE_RATE); -} - -SDRThread::~SDRThread() { - rtlsdr_close(dev); -} - -int SDRThread::enumerate_rtl(std::vector *devs) { - - int first_available = -1; - - char manufact[256], product[256], serial[256]; - - unsigned int rtl_count = rtlsdr_get_device_count(); - - std::cout << "RTL Devices: " << rtl_count << std::endl; - - for (int i = 0; i < rtl_count; i++) { - std::string deviceName(rtlsdr_get_device_name(i)); - std::string deviceManufacturer; - std::string deviceProduct; - std::string deviceTuner; - std::string deviceSerial; - - bool deviceAvailable = false; - std::cout << "Device #" << i << ": " << deviceName << std::endl; - if (rtlsdr_get_device_usb_strings(i, manufact, product, serial) == 0) { - std::cout << "\tManufacturer: " << manufact << ", Product Name: " << product << ", Serial: " << serial << std::endl; - - deviceSerial = serial; - deviceAvailable = true; - deviceProduct = product; - deviceManufacturer = manufact; - - rtlsdr_dev_t *devTest = nullptr; - if(rtlsdr_open(&devTest, i) < 0) - { - std::cout << "\tFailed to open device " << i << std::endl; - continue; - } - - std::cout << "\t Tuner type: "; - switch (rtlsdr_get_tuner_type(devTest)) { - case RTLSDR_TUNER_UNKNOWN: - deviceTuner = "Unknown"; - break; - case RTLSDR_TUNER_E4000: - deviceTuner = "Elonics E4000"; - break; - case RTLSDR_TUNER_FC0012: - deviceTuner = "Fitipower FC0012"; - break; - case RTLSDR_TUNER_FC0013: - deviceTuner = "Fitipower FC0013"; - break; - case RTLSDR_TUNER_FC2580: - deviceTuner = "Fitipower FC2580"; - break; - case RTLSDR_TUNER_R820T: - deviceTuner = "Rafael Micro R820T"; - break; - case RTLSDR_TUNER_R828D: - deviceTuner = "Rafael Micro R828D"; - break; - } - - std::cout << deviceTuner << std::endl; - /* - int num_gains = rtlsdr_get_tuner_gains(dev, NULL); - - int *gains = (int *)malloc(sizeof(int) * num_gains); - rtlsdr_get_tuner_gains(dev, gains); - - std::cout << "\t Valid gains: "; - for (int g = 0; g < num_gains; g++) { - if (g > 0) { - std::cout << ", "; - } - std::cout << ((float)gains[g]/10.0f); - } - std::cout << std::endl; - - free(gains); - */ - - rtlsdr_close(devTest); - if (first_available == -1) { - first_available = i; - } - - } else { - std::cout << "\tUnable to access device #" << i << " (in use?)" << std::endl; - } - - if (devs != NULL) { - SDRDeviceInfo *devInfo = new SDRDeviceInfo(); - devInfo->setName(deviceName); - devInfo->setAvailable(deviceAvailable); - devInfo->setProduct(deviceProduct); - devInfo->setSerial(deviceSerial); - devInfo->setManufacturer(deviceManufacturer); - devs->push_back(devInfo); - } - } - - return first_available; - -} - -void SDRThread::run() { -#ifdef __APPLE__ - pthread_t tID = pthread_self(); // ID of this thread - int priority = sched_get_priority_max( SCHED_FIFO) - 1; - sched_param prio = { priority }; // scheduling priority of thread - pthread_setschedparam(tID, SCHED_FIFO, &prio); -#endif - - std::cout << "SDR thread initializing.." << std::endl; - - std::vector devs; - if (deviceId == -1) { - deviceId = enumerate_rtl(&devs); - } else { - enumerate_rtl(&devs); - } - - if (deviceId == -1) { - std::cout << "No devices found.. SDR Thread exiting.." << std::endl; - return; - } else { - std::cout << "Using device #" << deviceId << std::endl; - } - - DeviceConfig *devConfig = wxGetApp().getConfig()->getDevice(devs[deviceId]->getDeviceId()); - - signed char buf[BUF_SIZE]; - - long long frequency = wxGetApp().getConfig()->getCenterFreq(); - int ppm = devConfig->getPPM(); - int direct_sampling_mode = devConfig->getDirectSampling();; - int buf_size = BUF_SIZE; - offset.store(devConfig->getOffset()); - wxGetApp().setSwapIQ(devConfig->getIQSwap()); - - rtlsdr_open(&dev, deviceId); - rtlsdr_set_sample_rate(dev, sampleRate.load()); - rtlsdr_set_center_freq(dev, frequency - offset.load()); - rtlsdr_set_freq_correction(dev, ppm); - rtlsdr_set_agc_mode(dev, 1); - rtlsdr_set_offset_tuning(dev, 0); - rtlsdr_reset_buffer(dev); - -// sampleRate = rtlsdr_get_sample_rate(dev); - - std::cout << "Sample Rate is: " << sampleRate.load() << std::endl; - - int n_read; - double seconds = 0.0; - - std::cout << "SDR thread started.." << std::endl; - - ReBuffer buffers; - - SDRThreadIQDataQueue* iqDataOutQueue = (SDRThreadIQDataQueue*) getOutputQueue("IQDataOutput"); - SDRThreadCommandQueue* cmdQueue = (SDRThreadCommandQueue*) getInputQueue("SDRCommandQueue"); - - while (!terminated) { - if (!cmdQueue->empty()) { - bool freq_changed = false; - bool offset_changed = false; - bool rate_changed = false; - bool device_changed = false; - bool ppm_changed = false; - bool direct_sampling_changed = false; - long long new_freq = frequency; - long long new_offset = offset.load(); - long long new_rate = sampleRate.load(); - int new_device = deviceId; - int new_ppm = ppm; - - while (!cmdQueue->empty()) { - SDRThreadCommand command; - cmdQueue->pop(command); - - switch (command.cmd) { - case SDRThreadCommand::SDR_THREAD_CMD_TUNE: - freq_changed = true; - new_freq = command.llong_value; - if (new_freq < sampleRate.load() / 2) { - new_freq = sampleRate.load() / 2; - } -// std::cout << "Set frequency: " << new_freq << std::endl; - break; - case SDRThreadCommand::SDR_THREAD_CMD_SET_OFFSET: - offset_changed = true; - new_offset = command.llong_value; - std::cout << "Set offset: " << new_offset << std::endl; - break; - case SDRThreadCommand::SDR_THREAD_CMD_SET_SAMPLERATE: - rate_changed = true; - new_rate = command.llong_value; - if (new_rate <= 250000) { - buf_size = BUF_SIZE/4; - } else if (new_rate < 1500000) { - buf_size = BUF_SIZE/2; - } else { - buf_size = BUF_SIZE; - } - std::cout << "Set sample rate: " << new_rate << std::endl; - break; - case SDRThreadCommand::SDR_THREAD_CMD_SET_DEVICE: - device_changed = true; - new_device = (int) command.llong_value; - std::cout << "Set device: " << new_device << std::endl; - break; - case SDRThreadCommand::SDR_THREAD_CMD_SET_PPM: - ppm_changed = true; - new_ppm = (int) command.llong_value; - //std::cout << "Set PPM: " << new_ppm << std::endl; - break; - case SDRThreadCommand::SDR_THREAD_CMD_SET_DIRECT_SAMPLING: - direct_sampling_mode = (int)command.llong_value; - direct_sampling_changed = true; - break; - default: - break; - } - } - - if (device_changed) { - rtlsdr_close(dev); - rtlsdr_open(&dev, new_device); - rtlsdr_set_sample_rate(dev, sampleRate.load()); - rtlsdr_set_center_freq(dev, frequency - offset.load()); - rtlsdr_set_freq_correction(dev, ppm); - rtlsdr_set_agc_mode(dev, 1); - rtlsdr_set_offset_tuning(dev, 0); - rtlsdr_set_direct_sampling(dev, direct_sampling_mode); - rtlsdr_reset_buffer(dev); - } - if (offset_changed) { - if (!freq_changed) { - new_freq = frequency; - freq_changed = true; - } - offset.store(new_offset); - } - if (rate_changed) { - rtlsdr_set_sample_rate(dev, new_rate); - rtlsdr_reset_buffer(dev); - sampleRate.store(rtlsdr_get_sample_rate(dev)); - } - if (freq_changed) { - frequency = new_freq; - rtlsdr_set_center_freq(dev, frequency - offset.load()); - } - if (ppm_changed) { - ppm = new_ppm; - rtlsdr_set_freq_correction(dev, ppm); - } - if (direct_sampling_changed) { - rtlsdr_set_direct_sampling(dev, direct_sampling_mode); - } - } - - rtlsdr_read_sync(dev, buf, buf_size, &n_read); - - SDRThreadIQData *dataOut = buffers.getBuffer(); - -// std::lock_guard < std::mutex > lock(dataOut->m_mutex); - dataOut->setRefCount(1); - dataOut->frequency = frequency; - dataOut->sampleRate = sampleRate.load(); - - if (dataOut->data.capacity() < n_read) { - dataOut->data.reserve(n_read); - } - - if (dataOut->data.size() != n_read) { - dataOut->data.resize(n_read); - } - - memcpy(&dataOut->data[0], buf, n_read); - - double time_slice = (double) n_read / (double) sampleRate.load(); - seconds += time_slice; - - if (iqDataOutQueue != NULL) { - iqDataOutQueue->push(dataOut); - } - } - -// buffers.purge(); - - std::cout << "SDR thread done." << std::endl; -} - - -int SDRThread::getDeviceId() const { - return deviceId.load(); -} - -void SDRThread::setDeviceId(int deviceId) { - this->deviceId.store(deviceId); -} diff --git a/src/sdr/SDRThread.h b/src/sdr/SDRThread.h deleted file mode 100644 index 4b3a8ac..0000000 --- a/src/sdr/SDRThread.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once - -#include - -#include "rtl-sdr.h" - -#include "ThreadQueue.h" -#include "DemodulatorMgr.h" -#include "SDRDeviceInfo.h" - -class SDRThreadCommand { -public: - enum SDRThreadCommandEnum { - SDR_THREAD_CMD_NULL, SDR_THREAD_CMD_TUNE, SDR_THREAD_CMD_SET_OFFSET, SDR_THREAD_CMD_SET_SAMPLERATE, SDR_THREAD_CMD_SET_PPM, SDR_THREAD_CMD_SET_DEVICE, SDR_THREAD_CMD_SET_DIRECT_SAMPLING - }; - - SDRThreadCommand() : - cmd(SDR_THREAD_CMD_NULL), llong_value(0) { - - } - - SDRThreadCommand(SDRThreadCommandEnum cmd) : - cmd(cmd), llong_value(0) { - - } - - SDRThreadCommandEnum cmd; - long long llong_value; -}; - -class SDRThreadIQData: public ReferenceCounter { -public: - long long frequency; - long long sampleRate; - std::vector data; - - SDRThreadIQData() : - frequency(0), sampleRate(DEFAULT_SAMPLE_RATE) { - - } - - SDRThreadIQData(long long bandwidth, long long frequency, std::vector *data) : - frequency(frequency), sampleRate(bandwidth) { - - } - - ~SDRThreadIQData() { - - } -}; - -typedef ThreadQueue SDRThreadCommandQueue; -typedef ThreadQueue SDRThreadIQDataQueue; - -class SDRThread : public IOThread { -public: - rtlsdr_dev_t *dev; - - SDRThread(); - ~SDRThread(); - - static int enumerate_rtl(std::vector *devs); - - void run(); - - int getDeviceId() const; - void setDeviceId(int deviceId); - -protected: - std::atomic sampleRate; - std::atomic_llong offset; - std::atomic_int deviceId; -}; diff --git a/src/sdr/SoapySDRThread.cpp b/src/sdr/SoapySDRThread.cpp index 7a6b645..0c1e36f 100644 --- a/src/sdr/SoapySDRThread.cpp +++ b/src/sdr/SoapySDRThread.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SoapySDRThread.h" #include "CubicSDRDefs.h" #include @@ -205,7 +208,12 @@ void SDRThread::readStream(SDRThreadIQDataQueue* iqDataOutQueue) { int n_stream_read = device->readStream(stream, buffs, mtElems, flags, timeNs); //if the n_stream_read <= 0, bail out from reading. - if (n_stream_read <= 0) { + if (n_stream_read == 0) { + std::cout << "SDRThread::readStream(): read blocking..." << std::endl; + break; + } + else if (n_stream_read < 0) { + std::cout << "SDRThread::readStream(): read failed with code: " << n_stream_read << std::endl; break; } @@ -223,7 +231,7 @@ void SDRThread::readStream(SDRThreadIQDataQueue* iqDataOutQueue) { } else { break; } - } + } //end while if (n_read > 0 && !stopping && !iqDataOutQueue->full()) { SDRThreadIQData *dataOut = buffers.getBuffer(); @@ -512,7 +520,7 @@ long long SDRThread::getOffset() { return offset.load(); } -void SDRThread::setSampleRate(int rate) { +void SDRThread::setSampleRate(long rate) { sampleRate.store(rate); rate_changed = true; DeviceConfig *devConfig = deviceConfig.load(); @@ -521,7 +529,7 @@ void SDRThread::setSampleRate(int rate) { } // std::cout << "Set sample rate: " << sampleRate.load() << std::endl; } -int SDRThread::getSampleRate() { +long SDRThread::getSampleRate() { return sampleRate.load(); } diff --git a/src/sdr/SoapySDRThread.h b/src/sdr/SoapySDRThread.h index 1c79103..794b837 100644 --- a/src/sdr/SoapySDRThread.h +++ b/src/sdr/SoapySDRThread.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -67,8 +70,8 @@ public: void setOffset(long long ofs); long long getOffset(); - void setSampleRate(int rate); - int getSampleRate(); + void setSampleRate(long rate); + long getSampleRate(); void setPPM(int ppm); int getPPM(); @@ -106,7 +109,7 @@ protected: std::map settings; std::map settingChanged; - std::atomic sampleRate; + std::atomic_llong sampleRate; std::atomic_llong frequency, offset, lock_freq; std::atomic_int ppm, numElems, mtuElems, numChannels; std::atomic_bool hasPPM, hasHardwareDC; diff --git a/src/ui/GLPanel.cpp b/src/ui/GLPanel.cpp index bf8af6d..4963d0b 100644 --- a/src/ui/GLPanel.cpp +++ b/src/ui/GLPanel.cpp @@ -1,4 +1,7 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "GLPanel.h" #include "cubic_math.h" #include diff --git a/src/ui/GLPanel.h b/src/ui/GLPanel.h index ebdb646..94cd7a6 100644 --- a/src/ui/GLPanel.h +++ b/src/ui/GLPanel.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -35,10 +38,10 @@ private: public: typedef enum GLPanelFillType { GLPANEL_FILL_NONE, GLPANEL_FILL_SOLID, GLPANEL_FILL_GRAD_X, GLPANEL_FILL_GRAD_Y, GLPANEL_FILL_GRAD_BAR_X, GLPANEL_FILL_GRAD_BAR_Y } GLPanelFillType; typedef enum GLPanelCoordinateSystem { GLPANEL_Y_DOWN_ZERO_ONE, GLPANEL_Y_UP_ZERO_ONE, GLPANEL_Y_UP, GLPANEL_Y_DOWN } GLPanelCoordinateSystem; - float pos[2]; - float rot[3]; - float size[2]; - float view[2]; + float pos[2] = {0.0f,0.0f}; + float rot[3] = { 0.0f,0.0f,0.0f }; + float size[2] = { 0.0f,0.0f }; + float view[2] = { 0.0f,0.0f }; GLPanelFillType fillType; GLPanelCoordinateSystem coord; float marginPx; diff --git a/src/ui/UITestCanvas.cpp b/src/ui/UITestCanvas.cpp index ba14f4a..9abe7df 100644 --- a/src/ui/UITestCanvas.cpp +++ b/src/ui/UITestCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "UITestCanvas.h" #include "wx/wxprec.h" @@ -24,7 +27,7 @@ EVT_LEAVE_WINDOW(UITestCanvas::OnMouseLeftWindow) EVT_ENTER_WINDOW(UITestCanvas::OnMouseEnterWindow) wxEND_EVENT_TABLE() -UITestCanvas::UITestCanvas(wxWindow *parent, int *dispAttrs) : +UITestCanvas::UITestCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs) { glContext = new UITestContext(this, &wxGetApp().GetContext(this)); diff --git a/src/ui/UITestCanvas.h b/src/ui/UITestCanvas.h index a75481f..631366a 100644 --- a/src/ui/UITestCanvas.h +++ b/src/ui/UITestCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -14,7 +17,7 @@ class UITestCanvas: public InteractiveCanvas { public: - UITestCanvas(wxWindow *parent, int *dispAttrs); + UITestCanvas(wxWindow *parent, std::vector dispAttrs); ~UITestCanvas(); private: diff --git a/src/ui/UITestContext.cpp b/src/ui/UITestContext.cpp index 1f5696a..e8cdd17 100644 --- a/src/ui/UITestContext.cpp +++ b/src/ui/UITestContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "UITestContext.h" #include "UITestCanvas.h" #include "ColorTheme.h" @@ -42,7 +45,7 @@ PrimaryGLContext(canvas, sharedContext), testMeter("TEST",0,100,50) { // testPanel.addChild(&testChildPanel); // testPanel.addChild(&testChildPanel2); // testPanel.addChild(&testChildPanel3); - testMeter.setSize(0.1,0.9); + testMeter.setSize(0.1f,0.9f); testPanel.addChild(&testMeter); } diff --git a/src/ui/UITestContext.h b/src/ui/UITestContext.h index 45dd3e3..62ce4fa 100644 --- a/src/ui/UITestContext.h +++ b/src/ui/UITestContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "PrimaryGLContext.h" diff --git a/src/util/DataTree.cpp b/src/util/DataTree.cpp index 3c1d1ce..850e257 100755 --- a/src/util/DataTree.cpp +++ b/src/util/DataTree.cpp @@ -41,6 +41,14 @@ using namespace std; DataElement::DataElement() : data_type(DATA_NULL), data_size(0), unit_size(0), data_val(NULL) { } +DataElement::DataElement(DataElement &cloneFrom) : data_type(cloneFrom.getDataType()), unit_size(cloneFrom.getUnitSize()) { + data_val = NULL; + data_init(cloneFrom.getDataSize()); + if (data_size) { + memcpy(data_val, cloneFrom.getDataPointer(), data_size); + } +} + DataElement::~DataElement() { if (data_val) { delete[] data_val; @@ -427,7 +435,12 @@ std::string DataElement::toString() { strValue = std::to_string(floatSettingValue); } else if (dataType == DATA_NULL) { strValue = ""; - } else { + } else if (dataType == DATA_WSTRING) { + std::wstring wstr; + get(wstr); + strValue = *wstr.c_str(); + } + else { std::cout << "Unhandled DataElement toString for type: " << dataType << std::endl; } } catch (DataTypeMismatchException e) { @@ -482,6 +495,22 @@ DataNode::DataNode(const char *name_in): parentNode(NULL), ptr(0) { data_elem = new DataElement(); } +DataNode::DataNode(const char *name_in, DataNode &cloneFrom): parentNode(NULL), ptr(0) { + node_name = name_in; + data_elem = new DataElement(*cloneFrom.element()); + + // TODO: stack recursion optimization + while (cloneFrom.hasAnother()) { + DataNode *cNode = cloneFrom.getNext(); + newChildCloneFrom(cNode->getName().c_str(), cNode); + } +} + +DataNode::DataNode(const char *name_in, DataElement &cloneFrom): parentNode(NULL), ptr(0) { + node_name = name_in; + data_elem = new DataElement(cloneFrom); +} + DataNode::~DataNode() { while (children.size()) { DataNode *del = children.back(); @@ -510,6 +539,34 @@ DataNode *DataNode::newChild(const char *name_in) { return children.back(); } +DataNode *DataNode::newChild(const char *name_in, DataNode *otherNode) { + children.push_back(otherNode); + childmap[name_in].push_back(children.back()); + + children.back()->setParentNode(*this); + + return children.back(); +} + +DataNode *DataNode::newChildCloneFrom(const char *name_in, DataNode *cloneFrom) { + DataNode *cloneNode = new DataNode(name_in, *cloneFrom->element()); + + children.push_back(cloneNode); + childmap[name_in].push_back(children.back()); + children.back()->setParentNode(*this); + + // TODO: stack recursion optimization + while (cloneFrom->hasAnother()) { + DataNode *cNode = cloneFrom->getNext(); + cloneNode->newChildCloneFrom(cNode->getName().c_str(), cNode); + } + + cloneFrom->rewind(); + + return children.back(); +} + + DataNode *DataNode::child(const char *name_in, int index) { DataNode *child_ret; @@ -565,6 +622,7 @@ DataNode *DataNode::getNext(const char *name_in) { void DataNode::rewind() { ptr = 0; + childmap_ptr.erase(childmap_ptr.begin(),childmap_ptr.end()); } void DataNode::rewind(const char *name_in) { @@ -1342,6 +1400,38 @@ long DataTree::getSerializedSize(DataElement &de_node_names, bool debug) /* get return total_size; } +void DataNode::rewindAll() { + stack dn_stack; + + /* start at the root */ + dn_stack.push(this); + + while (!dn_stack.empty()) { + dn_stack.top()->rewind(); + + /* if it has children, traverse into them */ + if (dn_stack.top()->hasAnother()) { + dn_stack.push(dn_stack.top()->getNext()); + dn_stack.top()->rewind(); + } else { + /* no more children, back out until we have children, then add next child to the top */ + while (!dn_stack.empty()) { + if (!dn_stack.top()->hasAnother()) { + dn_stack.top()->rewind(); + dn_stack.pop(); + } else + break; + } + + if (!dn_stack.empty()) { + dn_stack.push(dn_stack.top()->getNext()); + dn_stack.top()->rewind(); + } + } + } + +} + void DataNode::findAll(const char *name_in, vector &node_list_out) { stack dn_stack; diff --git a/src/util/DataTree.h b/src/util/DataTree.h index 5baa6e5..f2f3d28 100755 --- a/src/util/DataTree.h +++ b/src/util/DataTree.h @@ -128,6 +128,7 @@ private: public: DataElement(); + DataElement(DataElement &cloneFrom); ~DataElement(); int getDataType(); @@ -235,8 +236,10 @@ private: public: DataNode(); DataNode(const char *name_in); - - ~DataNode(); + DataNode(const char *name_in, DataElement &cloneFrom); + DataNode(const char *name_in, DataNode &cloneFrom); + + ~DataNode(); void setName(const char *name_in); string &getName() { return node_name; } @@ -250,6 +253,8 @@ public: DataElement *element(); /* DataElement at this node */ DataNode *newChild(const char *name_in); + DataNode *newChild(const char *name_in, DataNode *otherNode); + DataNode *newChildCloneFrom(const char *name_in, DataNode *cloneFrom); DataNode *child(const char *name_in, int index = 0); DataNode *child(int index); @@ -260,7 +265,8 @@ public: DataNode *getNext(); /* get next child */ void rewind(const char *name_in); /* rewind specific */ void rewind(); /* rewind generic */ - + void rewindAll(); + void findAll(const char *name_in, vector &node_list_out); // operator string () { string s; element()->get(s); return s; } @@ -287,6 +293,7 @@ public: operator vector () { vector v; element()->get(v); return v; } const string &operator= (const string &s) { element()->set(s); return s; } + const wstring &operator= (const wstring &s) { element()->set(s); return s; } char operator= (char i) { element()->set(i); return i; } unsigned char operator= (unsigned char i) { element()->set(i); return i; } @@ -316,7 +323,6 @@ public: bool operator() () { return hasAnother(); } DataNode *operator ^(const char *name_in) { return newChild(name_in); } - }; diff --git a/src/util/GLExt.cpp b/src/util/GLExt.cpp index efab5f0..191fbdb 100644 --- a/src/util/GLExt.cpp +++ b/src/util/GLExt.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "GLExt.h" #include #include diff --git a/src/util/GLExt.h b/src/util/GLExt.h index 619a337..34a655d 100644 --- a/src/util/GLExt.h +++ b/src/util/GLExt.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" diff --git a/src/util/GLFont.cpp b/src/util/GLFont.cpp index ee20ef9..e3e7e5f 100644 --- a/src/util/GLFont.cpp +++ b/src/util/GLFont.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "GLFont.h" #include diff --git a/src/util/GLFont.h b/src/util/GLFont.h index 3feac86..ff2f50a 100644 --- a/src/util/GLFont.h +++ b/src/util/GLFont.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -15,8 +18,8 @@ public: GLFontStringCache(); int drawlen; int vpx, vpy; - int pxHeight; - float msgWidth; + int pxHeight = 0; + float msgWidth = 0.0f; std::atomic_int gc; std::vector gl_vertices; std::vector gl_uv; diff --git a/src/util/Gradient.cpp b/src/util/Gradient.cpp index 7279296..906b8b8 100644 --- a/src/util/Gradient.cpp +++ b/src/util/Gradient.cpp @@ -1,4 +1,8 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "Gradient.h" +#include Gradient::Gradient() { @@ -21,19 +25,19 @@ std::vector &Gradient::getBlue() { } void Gradient::generate(unsigned int len) { - unsigned int chunk_size = len / (colors.size() - 1); + size_t chunk_size = len / (colors.size() - 1); - unsigned int p = 0; + size_t p = 0; r_val.resize(len); g_val.resize(len); b_val.resize(len); - for (unsigned int j = 0, jMax = colors.size() - 1; j < jMax; j++) { + for (size_t j = 0, jMax = colors.size() - 1; j < jMax; j++) { if ((chunk_size * (jMax)) < len && (j == jMax - 1)) { chunk_size += len - chunk_size * (jMax); } - for (unsigned int i = 0; i < chunk_size; i++) { + for (size_t i = 0; i < chunk_size; i++) { float idx = (float) (i) / (float) chunk_size; float r1 = colors[j].r; diff --git a/src/util/Gradient.h b/src/util/Gradient.h index 650daf3..1dac203 100644 --- a/src/util/Gradient.h +++ b/src/util/Gradient.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include diff --git a/src/util/MouseTracker.cpp b/src/util/MouseTracker.cpp index 00fb878..b0572f5 100644 --- a/src/util/MouseTracker.cpp +++ b/src/util/MouseTracker.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "MouseTracker.h" #include diff --git a/src/util/MouseTracker.h b/src/util/MouseTracker.h index e23455a..dfb4623 100644 --- a/src/util/MouseTracker.h +++ b/src/util/MouseTracker.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/window.h" diff --git a/src/util/ThreadQueue.cpp b/src/util/ThreadQueue.cpp index bf390c9..3597da5 100644 --- a/src/util/ThreadQueue.cpp +++ b/src/util/ThreadQueue.cpp @@ -1 +1,4 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include \ No newline at end of file diff --git a/src/util/ThreadQueue.h b/src/util/ThreadQueue.h index 5d0c52f..8545e82 100644 --- a/src/util/ThreadQueue.h +++ b/src/util/ThreadQueue.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once /* Credit to Alfredo Pons / https://plus.google.com/109903449837592676231 diff --git a/src/util/Timer.cpp b/src/util/Timer.cpp index aa449e7..d9d0b37 100644 --- a/src/util/Timer.cpp +++ b/src/util/Timer.cpp @@ -1,3 +1,5 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ #include "Timer.h" @@ -54,7 +56,7 @@ void Timer::unlock() update(); - last_update = system_milliseconds-lock_rate; + last_update = system_milliseconds-(unsigned long)lock_rate; offset += msec_tmp-system_milliseconds; diff --git a/src/util/Timer.h b/src/util/Timer.h index 18ab841..95d3d15 100644 --- a/src/util/Timer.h +++ b/src/util/Timer.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #ifndef TIMER_H #define TIMER_H diff --git a/src/visual/ColorTheme.cpp b/src/visual/ColorTheme.cpp index 6180778..853b680 100644 --- a/src/visual/ColorTheme.cpp +++ b/src/visual/ColorTheme.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ColorTheme.h" #include "CubicSDR.h" #include "CubicSDRDefs.h" diff --git a/src/visual/ColorTheme.h b/src/visual/ColorTheme.h index 6f35324..aac98a8 100644 --- a/src/visual/ColorTheme.h +++ b/src/visual/ColorTheme.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "Gradient.h" @@ -5,6 +8,7 @@ #include #include #include +#include #define COLOR_THEME_DEFAULT 0 #define COLOR_THEME_BW 1 @@ -38,6 +42,14 @@ public: } RGBA4f operator*(float v) { return RGBA4f(r*v, g*v, b*v); } + + operator wxColour() { + return wxColour( + (unsigned char) std::min((r * 255.0), 255.0), + (unsigned char) std::min((g * 255.0), 255.0), + (unsigned char) std::min((b * 255.0), 255.0)); + + } }; diff --git a/src/visual/GainCanvas.cpp b/src/visual/GainCanvas.cpp index 6f64193..56661de 100644 --- a/src/visual/GainCanvas.cpp +++ b/src/visual/GainCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "GainCanvas.h" #include "wx/wxprec.h" @@ -25,7 +28,7 @@ EVT_ENTER_WINDOW(GainCanvas::OnMouseEnterWindow) EVT_MOUSEWHEEL(GainCanvas::OnMouseWheelMoved) wxEND_EVENT_TABLE() -GainCanvas::GainCanvas(wxWindow *parent, int *dispAttrs) : +GainCanvas::GainCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs) { glContext = new PrimaryGLContext(this, &wxGetApp().GetContext(this)); @@ -167,6 +170,13 @@ void GainCanvas::setHelpTip(std::string tip) { void GainCanvas::updateGainUI() { SDRDeviceInfo *devInfo = wxGetApp().getDevice(); + + //possible if we 'Refresh Devices' then devInfo becomes null + //until a new device is selected. + if (devInfo == nullptr) { + return; + } + DeviceConfig *devConfig = wxGetApp().getConfig()->getDevice(devInfo->getDeviceId()); gains = devInfo->getGains(SOAPY_SDR_RX, 0); diff --git a/src/visual/GainCanvas.h b/src/visual/GainCanvas.h index 469dafc..2e7a552 100644 --- a/src/visual/GainCanvas.h +++ b/src/visual/GainCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -17,7 +20,7 @@ class GainCanvas: public InteractiveCanvas { public: - GainCanvas(wxWindow *parent, int *dispAttrs); + GainCanvas(wxWindow *parent, std::vector dispAttrs); ~GainCanvas(); void setHelpTip(std::string tip); diff --git a/src/visual/ImagePanel.cpp b/src/visual/ImagePanel.cpp new file mode 100644 index 0000000..b67e62e --- /dev/null +++ b/src/visual/ImagePanel.cpp @@ -0,0 +1,50 @@ +#include "ImagePanel.h" + +BEGIN_EVENT_TABLE(ImagePanel, wxPanel) +EVT_PAINT(ImagePanel::paintEvent) +END_EVENT_TABLE() + + +ImagePanel::ImagePanel(wxPanel * parent, wxString file, wxBitmapType format) : + wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE) { + image.LoadFile(file, format); +} + +void ImagePanel::paintEvent(wxPaintEvent & evt) { + wxPaintDC dc(this); + render(dc); +} + + +void ImagePanel::paintNow() { + wxClientDC dc(this); + render(dc); +} + + +void ImagePanel::render(wxDC& dc) { + + double imagew = image.GetWidth(); + double imageh = image.GetHeight(); + + wxSize destSize = dc.GetSize(); + + double destw = destSize.GetWidth(); + double desth = destSize.GetHeight(); + + double sf = 1.0, wf, hf; + + wf = destw / imagew; + hf = desth / imageh; + + sf = (wf < hf)?wf:hf; + + double resulth = imageh * sf; + double resultw = imagew * sf; + + dc.SetUserScale(sf, sf); + dc.DrawBitmap( image, (destw/2 - resultw/2)/sf, (desth/2 - resulth/2)/sf, false ); +} + + + \ No newline at end of file diff --git a/src/visual/ImagePanel.h b/src/visual/ImagePanel.h new file mode 100644 index 0000000..681e0d7 --- /dev/null +++ b/src/visual/ImagePanel.h @@ -0,0 +1,16 @@ +#include +#include + +class ImagePanel : public wxPanel { + wxBitmap image; + +public: + ImagePanel(wxPanel* parent, wxString file, wxBitmapType format); + + void paintEvent(wxPaintEvent & evt); + void paintNow(); + + void render(wxDC& dc); + + DECLARE_EVENT_TABLE() +}; diff --git a/src/visual/InteractiveCanvas.cpp b/src/visual/InteractiveCanvas.cpp index e91464a..b18a3ec 100644 --- a/src/visual/InteractiveCanvas.cpp +++ b/src/visual/InteractiveCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "InteractiveCanvas.h" #include "wx/wxprec.h" @@ -17,8 +20,8 @@ #include -InteractiveCanvas::InteractiveCanvas(wxWindow *parent, int *dispAttrs) : - wxGLCanvas(parent, wxID_ANY, dispAttrs, wxDefaultPosition, wxDefaultSize, +InteractiveCanvas::InteractiveCanvas(wxWindow *parent, std::vector dispAttrs) : + wxGLCanvas(parent, wxID_ANY, dispAttrs.data(), wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE), parent(parent), shiftDown(false), altDown(false), ctrlDown(false), centerFreq(0), bandwidth(0), lastBandwidth(0), isView( false) { mouseTracker.setTarget(this); @@ -27,7 +30,7 @@ InteractiveCanvas::InteractiveCanvas(wxWindow *parent, int *dispAttrs) : InteractiveCanvas::~InteractiveCanvas() { } -void InteractiveCanvas::setView(long long center_freq_in, int bandwidth_in) { +void InteractiveCanvas::setView(long long center_freq_in, long long bandwidth_in) { isView = true; centerFreq = center_freq_in; bandwidth = bandwidth_in; @@ -71,11 +74,11 @@ long long InteractiveCanvas::getCenterFrequency() { } } -void InteractiveCanvas::setBandwidth(unsigned int bandwidth_in) { +void InteractiveCanvas::setBandwidth(long long bandwidth_in) { bandwidth = bandwidth_in; } -unsigned int InteractiveCanvas::getBandwidth() { +long long InteractiveCanvas::getBandwidth() { if (isView) { return bandwidth; } else { diff --git a/src/visual/InteractiveCanvas.h b/src/visual/InteractiveCanvas.h index 1877e43..c255720 100644 --- a/src/visual/InteractiveCanvas.h +++ b/src/visual/InteractiveCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -5,24 +8,25 @@ #include "MouseTracker.h" #include +#include class InteractiveCanvas: public wxGLCanvas { public: - InteractiveCanvas(wxWindow *parent, int *dispAttrs); + InteractiveCanvas(wxWindow *parent, std::vector dispAttrs); ~InteractiveCanvas(); long long getFrequencyAt(float x); long long getFrequencyAt(float x, long long iqCenterFreq, long long iqBandwidth); - virtual void setView(long long center_freq_in, int bandwidth_in); + virtual void setView(long long center_freq_in, long long bandwidth_in); virtual void disableView(); bool getViewState(); void setCenterFrequency(long long center_freq_in); long long getCenterFrequency(); - void setBandwidth(unsigned int bandwidth_in); - unsigned int getBandwidth(); + void setBandwidth(long long bandwidth_in); + long long getBandwidth(); MouseTracker *getMouseTracker(); bool isMouseInView(); @@ -56,8 +60,8 @@ protected: bool ctrlDown; long long centerFreq; - unsigned int bandwidth; - unsigned int lastBandwidth; + long long bandwidth; + long long lastBandwidth; bool isView; std::string lastToolTip; diff --git a/src/visual/MeterCanvas.cpp b/src/visual/MeterCanvas.cpp index c1bb2ad..d80b432 100644 --- a/src/visual/MeterCanvas.cpp +++ b/src/visual/MeterCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "MeterCanvas.h" #include "wx/wxprec.h" @@ -27,7 +30,7 @@ EVT_LEAVE_WINDOW(MeterCanvas::OnMouseLeftWindow) EVT_ENTER_WINDOW(MeterCanvas::OnMouseEnterWindow) wxEND_EVENT_TABLE() -MeterCanvas::MeterCanvas(wxWindow *parent, int *dispAttrs) : +MeterCanvas::MeterCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), level(0), level_min(0), level_max(1), inputValue(0), userInputValue(0), showUserInput(true) { glContext = new MeterContext(this, &wxGetApp().GetContext(this)); diff --git a/src/visual/MeterCanvas.h b/src/visual/MeterCanvas.h index 4b955ba..9134d6e 100644 --- a/src/visual/MeterCanvas.h +++ b/src/visual/MeterCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -14,7 +17,7 @@ class MeterCanvas: public InteractiveCanvas { public: - MeterCanvas(wxWindow *parent, int *dispAttrs); + MeterCanvas(wxWindow *parent, std::vector dispAttrs); ~MeterCanvas(); void setLevel(float level_in); diff --git a/src/visual/MeterContext.cpp b/src/visual/MeterContext.cpp index 8387e64..4c33332 100644 --- a/src/visual/MeterContext.cpp +++ b/src/visual/MeterContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "MeterContext.h" #include "MeterCanvas.h" #include "ColorTheme.h" diff --git a/src/visual/MeterContext.h b/src/visual/MeterContext.h index 3fac2f2..789ebcd 100644 --- a/src/visual/MeterContext.h +++ b/src/visual/MeterContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "PrimaryGLContext.h" diff --git a/src/visual/ModeSelectorCanvas.cpp b/src/visual/ModeSelectorCanvas.cpp index dcfdaa4..31c53ed 100644 --- a/src/visual/ModeSelectorCanvas.cpp +++ b/src/visual/ModeSelectorCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModeSelectorCanvas.h" #include "wx/wxprec.h" @@ -24,7 +27,7 @@ EVT_LEAVE_WINDOW(ModeSelectorCanvas::OnMouseLeftWindow) EVT_ENTER_WINDOW(ModeSelectorCanvas::OnMouseEnterWindow) wxEND_EVENT_TABLE() -ModeSelectorCanvas::ModeSelectorCanvas(wxWindow *parent, int *dispAttrs) : +ModeSelectorCanvas::ModeSelectorCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), numChoices(0), currentSelection(-1), toggleMode(false), inputChanged(false), padX(4.0), padY(4.0), highlightOverride(false) { glContext = new ModeSelectorContext(this, &wxGetApp().GetContext(this)); diff --git a/src/visual/ModeSelectorCanvas.h b/src/visual/ModeSelectorCanvas.h index 004dd4c..3a0d588 100644 --- a/src/visual/ModeSelectorCanvas.h +++ b/src/visual/ModeSelectorCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -24,7 +27,7 @@ public: class ModeSelectorCanvas: public InteractiveCanvas { public: - ModeSelectorCanvas(wxWindow *parent, int *dispAttrs); + ModeSelectorCanvas(wxWindow *parent, std::vector dispAttrs); ~ModeSelectorCanvas(); int getHoveredSelection(); diff --git a/src/visual/ModeSelectorContext.cpp b/src/visual/ModeSelectorContext.cpp index 44c793c..5ce3b08 100644 --- a/src/visual/ModeSelectorContext.cpp +++ b/src/visual/ModeSelectorContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ModeSelectorContext.h" #include "ModeSelectorCanvas.h" #include "ColorTheme.h" diff --git a/src/visual/ModeSelectorContext.h b/src/visual/ModeSelectorContext.h index 2d84fa3..8daecc0 100644 --- a/src/visual/ModeSelectorContext.h +++ b/src/visual/ModeSelectorContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "PrimaryGLContext.h" diff --git a/src/visual/PrimaryGLContext.cpp b/src/visual/PrimaryGLContext.cpp index 64c8963..cc58c77 100644 --- a/src/visual/PrimaryGLContext.cpp +++ b/src/visual/PrimaryGLContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "PrimaryGLContext.h" #include "wx/wxprec.h" diff --git a/src/visual/PrimaryGLContext.h b/src/visual/PrimaryGLContext.h index 2f19460..f421def 100644 --- a/src/visual/PrimaryGLContext.h +++ b/src/visual/PrimaryGLContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" diff --git a/src/visual/ScopeCanvas.cpp b/src/visual/ScopeCanvas.cpp index 83e04e7..5371513 100644 --- a/src/visual/ScopeCanvas.cpp +++ b/src/visual/ScopeCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ScopeCanvas.h" #include "wx/wxprec.h" @@ -28,7 +31,7 @@ EVT_LEAVE_WINDOW(ScopeCanvas::OnMouseLeftWindow) EVT_ENTER_WINDOW(ScopeCanvas::OnMouseEnterWindow) wxEND_EVENT_TABLE() -ScopeCanvas::ScopeCanvas(wxWindow *parent, int *dispAttrs) : InteractiveCanvas(parent, dispAttrs), ppmMode(false), ctr(0), ctrTarget(0), dragAccel(0), helpTip("") { +ScopeCanvas::ScopeCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), ppmMode(false), ctr(0), ctrTarget(0), dragAccel(0), helpTip("") { glContext = new ScopeContext(this, &wxGetApp().GetContext(this)); inputData.set_max_num_items(2); @@ -42,7 +45,10 @@ ScopeCanvas::ScopeCanvas(wxWindow *parent, int *dispAttrs) : InteractiveCanvas(p parentPanel.setFill(GLPanel::GLPANEL_FILL_NONE); scopePanel.setSize(1.0,-1.0); spectrumPanel.setSize(1.0,-1.0); - spectrumPanel.setShowDb(true); + showDb = true; + spectrumPanel.setShowDb(showDb); + //dB offset is a RF value, has no meaning in audio, disable it. + spectrumPanel.setUseDBOffset(false); } ScopeCanvas::~ScopeCanvas() { @@ -86,8 +92,8 @@ bool ScopeCanvas::getPPMMode() { return ppmMode; } -void ScopeCanvas::setShowDb(bool showDb) { - this->showDb = showDb; +void ScopeCanvas::setShowDb(bool show) { + this->showDb = show; } bool ScopeCanvas::getShowDb() { @@ -272,3 +278,20 @@ void ScopeCanvas::setHelpTip(std::string tip) { helpTip = tip; } +void ScopeCanvas::OnKeyDown(wxKeyEvent& event) { + InteractiveCanvas::OnKeyDown(event); + + switch (event.GetKeyCode()) { + + case 'B': + setShowDb(!getShowDb()); + break; + default: + event.Skip(); + } +} + +void ScopeCanvas::OnKeyUp(wxKeyEvent& event) { + InteractiveCanvas::OnKeyUp(event); +} + diff --git a/src/visual/ScopeCanvas.h b/src/visual/ScopeCanvas.h index 006f7f4..7511437 100644 --- a/src/visual/ScopeCanvas.h +++ b/src/visual/ScopeCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -14,9 +17,19 @@ class ScopeCanvas: public InteractiveCanvas { public: - ScopeCanvas(wxWindow *parent, int *dispAttrs); + ScopeCanvas(wxWindow *parent, std::vector dispAttrs); ~ScopeCanvas(); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. + void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. + void OnKeyUp(wxKeyEvent& event); + void setDeviceName(std::string device_name); void setPPMMode(bool ppmMode); bool getPPMMode(); diff --git a/src/visual/ScopeContext.cpp b/src/visual/ScopeContext.cpp index a71f74f..0e86d9b 100644 --- a/src/visual/ScopeContext.cpp +++ b/src/visual/ScopeContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "ScopeContext.h" #include "ScopeCanvas.h" diff --git a/src/visual/ScopeContext.h b/src/visual/ScopeContext.h index 873bde0..b4860d9 100644 --- a/src/visual/ScopeContext.h +++ b/src/visual/ScopeContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "PrimaryGLContext.h" diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index 8a31c85..742bb2c 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "SpectrumCanvas.h" #include "wx/wxprec.h" @@ -29,7 +32,7 @@ EVT_RIGHT_DOWN(SpectrumCanvas::OnMouseRightDown) EVT_RIGHT_UP(SpectrumCanvas::OnMouseRightReleased) wxEND_EVENT_TABLE() -SpectrumCanvas::SpectrumCanvas(wxWindow *parent, int *dispAttrs) : +SpectrumCanvas::SpectrumCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), waterfallCanvas(NULL) { glContext = new PrimaryGLContext(this, &wxGetApp().GetContext(this)); @@ -174,6 +177,14 @@ bool SpectrumCanvas::getShowDb() { return spectrumPanel.getShowDb(); } +void SpectrumCanvas::setUseDBOfs(bool showDb) { + spectrumPanel.setUseDBOffset(showDb); +} + +bool SpectrumCanvas::getUseDBOfs() { + return spectrumPanel.getUseDBOffset(); +} + void SpectrumCanvas::setView(long long center_freq_in, int bandwidth_in) { bwChange += bandwidth_in-bandwidth; #define BW_RESET_TH 400000 @@ -293,7 +304,26 @@ void SpectrumCanvas::OnMouseRightReleased(wxMouseEvent& event) { wxGetApp().getSpectrumProcessor()->setPeakHold(wxGetApp().getSpectrumProcessor()->getPeakHold()); //make the peak hold act on the current dmod also, like a zoomed-in version. - wxGetApp().getDemodSpectrumProcessor()->setPeakHold(wxGetApp().getSpectrumProcessor()->getPeakHold()); + if (wxGetApp().getDemodSpectrumProcessor()) { + wxGetApp().getDemodSpectrumProcessor()->setPeakHold(wxGetApp().getSpectrumProcessor()->getPeakHold()); + } } mouseTracker.OnMouseRightReleased(event); } + +void SpectrumCanvas::OnKeyDown(wxKeyEvent& event) { + InteractiveCanvas::OnKeyDown(event); + + switch (event.GetKeyCode()) { + + case 'B': + setShowDb(!getShowDb()); + break; + default: + event.Skip(); + } +} + +void SpectrumCanvas::OnKeyUp(wxKeyEvent& event) { + InteractiveCanvas::OnKeyUp(event); +} diff --git a/src/visual/SpectrumCanvas.h b/src/visual/SpectrumCanvas.h index 85af252..68374aa 100644 --- a/src/visual/SpectrumCanvas.h +++ b/src/visual/SpectrumCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include @@ -13,15 +16,28 @@ class WaterfallCanvas; class SpectrumCanvas: public InteractiveCanvas { public: - SpectrumCanvas(wxWindow *parent, int *dispAttrs); + SpectrumCanvas(wxWindow *parent, std::vector dispAttrs); ~SpectrumCanvas(); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. + void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. + void OnKeyUp(wxKeyEvent& event); + void attachWaterfallCanvas(WaterfallCanvas *canvas_in); void moveCenterFrequency(long long freqChange); void setShowDb(bool showDb); bool getShowDb(); + void setUseDBOfs(bool showDb); + bool getUseDBOfs(); + void setView(long long center_freq_in, int bandwidth_in); void disableView(); @@ -44,6 +60,7 @@ private: void OnMouseRightDown(wxMouseEvent& event); void OnMouseRightReleased(wxMouseEvent& event); + void updateScaleFactor(float factor); PrimaryGLContext *glContext; diff --git a/src/visual/TuningCanvas.cpp b/src/visual/TuningCanvas.cpp index 6d58520..9ee6b3e 100644 --- a/src/visual/TuningCanvas.cpp +++ b/src/visual/TuningCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "TuningCanvas.h" #include "wx/wxprec.h" @@ -30,7 +33,7 @@ EVT_MOUSEWHEEL(TuningCanvas::OnMouseWheelMoved) //EVT_KEY_UP(TuningCanvas::OnKeyUp) wxEND_EVENT_TABLE() -TuningCanvas::TuningCanvas(wxWindow *parent, int *dispAttrs) : +TuningCanvas::TuningCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), dragAccum(0), uxDown(0), top(false), bottom(false), freq(-1), bw(-1), center(-1), halfBand(false) { glContext = new TuningContext(this, &wxGetApp().GetContext(this)); diff --git a/src/visual/TuningCanvas.h b/src/visual/TuningCanvas.h index eae7083..708ddcf 100644 --- a/src/visual/TuningCanvas.h +++ b/src/visual/TuningCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -17,7 +20,7 @@ public: enum ActiveState { TUNING_HOVER_NONE, TUNING_HOVER_FREQ, TUNING_HOVER_BW, TUNING_HOVER_PPM, TUNING_HOVER_CENTER }; - TuningCanvas(wxWindow *parent, int *dispAttrs); + TuningCanvas(wxWindow *parent, std::vector dispAttrs); ~TuningCanvas(); void setHelpTip(std::string tip); diff --git a/src/visual/TuningContext.cpp b/src/visual/TuningContext.cpp index 58f49de..3c06161 100644 --- a/src/visual/TuningContext.cpp +++ b/src/visual/TuningContext.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "TuningContext.h" #include "TuningCanvas.h" diff --git a/src/visual/TuningContext.h b/src/visual/TuningContext.h index 3bbec2f..5f37e50 100644 --- a/src/visual/TuningContext.h +++ b/src/visual/TuningContext.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "PrimaryGLContext.h" diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index 69fe127..b75ca92 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #include "WaterfallCanvas.h" #include "wx/wxprec.h" @@ -34,12 +37,12 @@ EVT_ENTER_WINDOW(WaterfallCanvas::OnMouseEnterWindow) EVT_MOUSEWHEEL(WaterfallCanvas::OnMouseWheelMoved) wxEND_EVENT_TABLE() -WaterfallCanvas::WaterfallCanvas(wxWindow *parent, int *dispAttrs) : +WaterfallCanvas::WaterfallCanvas(wxWindow *parent, std::vector dispAttrs) : InteractiveCanvas(parent, dispAttrs), dragState(WF_DRAG_NONE), nextDragState(WF_DRAG_NONE), fft_size(0), new_fft_size(0), waterfall_lines(0), dragOfs(0), mouseZoom(1), zoom(1), freqMoving(false), freqMove(0.0), hoverAlpha(1.0) { glContext = new PrimaryGLContext(this, &wxGetApp().GetContext(this)); - linesPerSecond = 30; + linesPerSecond = DEFAULT_WATERFALL_LPS; lpsIndex = 0; preBuf = false; SetCursor(wxCURSOR_CROSS); @@ -437,11 +440,6 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) { wxGetApp().removeDemodulator(activeDemod); wxGetApp().getDemodMgr().deleteThread(activeDemod); break; - case 'B': - if (spectrumCanvas) { - spectrumCanvas->setShowDb(!spectrumCanvas->getShowDb()); - } - break; case WXK_SPACE: wxGetApp().showFrequencyInput(); break; diff --git a/src/visual/WaterfallCanvas.h b/src/visual/WaterfallCanvas.h index aa53448..4f3ed31 100644 --- a/src/visual/WaterfallCanvas.h +++ b/src/visual/WaterfallCanvas.h @@ -1,3 +1,6 @@ +// Copyright (c) Charles J. Cliffe +// SPDX-License-Identifier: GPL-2.0+ + #pragma once #include "wx/glcanvas.h" @@ -18,7 +21,7 @@ public: WF_DRAG_NONE, WF_DRAG_BANDWIDTH_LEFT, WF_DRAG_BANDWIDTH_RIGHT, WF_DRAG_FREQUENCY, WF_DRAG_RANGE }; - WaterfallCanvas(wxWindow *parent, int *dispAttrs); + WaterfallCanvas(wxWindow *parent, std::vector dispAttrs); void setup(unsigned int fft_size_in, int waterfall_lines_in); void setFFTSize(unsigned int fft_size_in); ~WaterfallCanvas(); @@ -33,10 +36,21 @@ public: void setLinesPerSecond(int lps); void setMinBandwidth(int min); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. void OnKeyUp(wxKeyEvent& event); + + //public because called by SpectrumCanvas. void OnMouseWheelMoved(wxMouseEvent& event); + + private: void OnPaint(wxPaintEvent& event); void OnIdle(wxIdleEvent &event); @@ -55,8 +69,8 @@ private: std::vector spectrum_points; - SpectrumCanvas *spectrumCanvas; - PrimaryGLContext *glContext; + SpectrumCanvas *spectrumCanvas = nullptr; + PrimaryGLContext *glContext = nullptr; WaterfallPanel waterfallPanel; DragState dragState;