From 8ebce2f074d1bb5c5fcb4f326999454caa0bb5ef Mon Sep 17 00:00:00 2001 From: spectrum6000 Date: Tue, 23 Jul 2024 13:03:11 +0300 Subject: [PATCH] v.2.3.1 --- CMakeLists.txt | 516 +++++++++--------- README.md | 15 +- eval/fobos_devinfo_main.c | 4 +- eval/fobos_recorder_main.c | 7 +- fobos/fobos.c | 1059 +++++++++++++++++++----------------- fobos/fobos.h | 13 +- libfobos.pc.in | 4 +- showimg/Screenshot002.png | Bin 78864 -> 58190 bytes showimg/Screenshot003.png | Bin 30573 -> 22880 bytes versions.txt | 6 + wav/wav_file.c | 15 +- wav/wav_file.h | 8 +- 12 files changed, 862 insertions(+), 785 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df7adc0..d4f5c67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,260 +1,256 @@ -######################################################################## -# -# Fobos SDR project -# V.T. -# LGPL -# -######################################################################## -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -######################################################################## -# Project setup -######################################################################## -cmake_minimum_required(VERSION 3.10) - -if(${CMAKE_VERSION} VERSION_LESS "3.12.0") - project(fobos) -else() - project(fobos C) -endif() - -set(CMAKE_C_FLAGS, "${CMAKE_C_FLAGS} -std=c99") -set(CMAKE_GENERATOR_PLATFORM x64) -#set(CMAKE_GENERATOR_PLATFORM Win32) -######################################################################## - -######################################################################## -# Select the release build type by default to get optimization flags -######################################################################## -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release") - message(STATUS "Build type not specified: defaulting to release.") -endif(NOT CMAKE_BUILD_TYPE) -######################################################################## - -######################################################################## -# Compiler specific setup -######################################################################## -if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) - ADD_DEFINITIONS(-Wall) - ADD_DEFINITIONS(-Wextra) - ADD_DEFINITIONS(-Wno-unused-parameter) - ADD_DEFINITIONS(-Wno-unused) - ADD_DEFINITIONS(-Wsign-compare) - ADD_DEFINITIONS(-ansi) -elseif(MSVC14 OR MSVC14) - ADD_DEFINITIONS(-D_TIMESPEC_DEFINED) -endif() -######################################################################## - -######################################################################## -# Find build dependencies -######################################################################## -find_package(PkgConfig) -if(PKG_CONFIG_FOUND) - pkg_check_modules(LIBUSB libusb-1.0 IMPORTED_TARGET) - if(LIBUSB_LINK_LIBRARIES) - set(LIBUSB_LIBRARIES "${LIBUSB_LINK_LIBRARIES}") - endif() -else() -if (CMAKE_GENERATOR_PLATFORM STREQUAL Win32) - set(LIBUSB_LIBRARIES ${CMAKE_SOURCE_DIR}/libusb/MS32/dll) -endif() -if (CMAKE_GENERATOR_PLATFORM STREQUAL x64) - set(LIBUSB_LIBRARIES ${CMAKE_SOURCE_DIR}/libusb/MS64/dll) -endif() - set(LIBUSB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libusb/include) -endif() -if(PKG_CONFIG_FOUND AND NOT LIBUSB_FOUND) - message(FATAL_ERROR "LibUSB 1.0 required") -endif() -######################################################################## - -######################################################################## -# Install udev rules -######################################################################## -install( - FILES fobos-sdr.rules - DESTINATION "/etc/udev/rules.d" - COMPONENT "udev" - ) -######################################################################## - -######################################################################## -# Print Summary -######################################################################## -message(>>> "Build: " ${CMAKE_BUILD_TYPE}) -message(>>> "OS: " ${CMAKE_SYSTEM_NAME}) -message(>>> "VS Platform: " ${CMAKE_VS_PLATFORM_NAME}) -message(>>> "LIBUSB_LIBRARIES: " ${LIBUSB_LIBRARIES}) -message(>>> "LIBUSB_INCLUDE_DIRS: " ${LIBUSB_INCLUDE_DIRS}) -message(>>> "PROJECT_BINARY_DIR: " ${PROJECT_BINARY_DIR}) - -######################################################################## -# Fobos SDR library -######################################################################## -add_library(libfobos SHARED fobos/fobos.c) - -target_compile_options(libfobos PUBLIC -std=c99) - -if(MSVC) -target_compile_options(libfobos PUBLIC "/MT") -ADD_CUSTOM_COMMAND(TARGET libfobos - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Debug - COMMAND ${CMAKE_COMMAND} -E copy ${LIBUSB_LIBRARIES}/libusb-1.0.dll ${PROJECT_BINARY_DIR}/Debug -) -ADD_CUSTOM_COMMAND(TARGET libfobos - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Release - COMMAND ${CMAKE_COMMAND} -E copy ${LIBUSB_LIBRARIES}/libusb-1.0.dll ${PROJECT_BINARY_DIR}/Release -) -else() -endif() - -#target_link_libraries(libfobos ${LIBUSB_LIBRARIES}) - -if(${CMAKE_VERSION} VERSION_LESS "3.13.0") - project(fobos) -else() - target_link_directories(libfobos PRIVATE ${LIBUSB_LIBRARIES}) -endif() - - -target_include_directories(libfobos PUBLIC - $ - $ - $/fobos - ${LIBUSB_INCLUDE_DIRS} - ) - -set_target_properties(libfobos PROPERTIES PUBLIC_HEADER fobos/fobos.h) -set_target_properties(libfobos PROPERTIES DEFINE_SYMBOL "FOBOS_EXPORTS") -set_target_properties(libfobos PROPERTIES OUTPUT_NAME fobos) -######################################################################## - -######################################################################## -# Install public header files -######################################################################## -INSTALL( - FILES fobos/fobos.h - DESTINATION include -) -######################################################################## - -######################################################################## -# Install built library files & utilities -######################################################################## -INSTALL( - TARGETS libfobos - LIBRARY DESTINATION ${LIB_INSTALL_DIR} -) -######################################################################## - -######################################################################## -# Create Pkg Config File -######################################################################## -FOREACH(inc ${LIBUSB_INCLUDEDIR}) - LIST(APPEND LIBFOBOS_PC_CFLAGS "-I${inc}") -ENDFOREACH(inc) - -FOREACH(lib ${LIBUSB_LIBRARY_DIRS}) - LIST(APPEND LIBFOBOS_PC_LIBS "-L${lib}") -ENDFOREACH(lib) - -# use space-separation format for the pc file -STRING(REPLACE ";" " " LIBFOBOS_PC_CFLAGS "${LIBFOBOS_PC_CFLAGS}") -STRING(REPLACE ";" " " LIBFOBOS_PC_LIBS "${LIBFOBOS_PC_LIBS}") - -set(prefix "${CMAKE_INSTALL_PREFIX}") -set(exec_prefix \${prefix}) -set(includedir \${prefix}/include) -set(libdir \${exec_prefix}/lib) - -CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/libfobos.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libfobos.pc -@ONLY) - -INSTALL( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libfobos.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig -) -######################################################################## - -######################################################################## -# Create uninstall target -######################################################################## -configure_file( - ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake -@ONLY) - -add_custom_target(uninstall - ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake -) -######################################################################## - -######################################################################## -# Create executable -######################################################################## -add_executable(fobos_devinfo - eval/fobos_devinfo_main.c) - -target_compile_options(fobos_devinfo PUBLIC -std=c99) - -target_link_libraries(fobos_devinfo PRIVATE libfobos) - -if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) - target_link_libraries(fobos_devinfo PRIVATE ${LIBUSB_LIBRARIES}) -else() - target_link_directories(fobos_devinfo PRIVATE ${LIBUSB_LIBRARIES}) -endif() - -target_include_directories(fobos_devinfo PRIVATE ${CMAKE_SOURCE_DIR}) - -target_include_directories(fobos_devinfo PRIVATE ${CMAKE_SOURCE_DIR}/fobos) -######################################################################## - -######################################################################## -# Create executable -######################################################################## -add_executable(fobos_recorder - eval/fobos_recorder_main.c - wav/wav_file.c) - -target_compile_options(fobos_recorder PUBLIC -std=c99) - -target_link_libraries(fobos_recorder PRIVATE libfobos) - -if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) - target_link_libraries(fobos_recorder PRIVATE ${LIBUSB_LIBRARIES}) -else() - target_link_directories(fobos_recorder PRIVATE ${LIBUSB_LIBRARIES}) -endif() - -target_include_directories(fobos_recorder PRIVATE ${CMAKE_SOURCE_DIR}) - -target_include_directories(fobos_recorder PRIVATE ${CMAKE_SOURCE_DIR}/fobos) -######################################################################## - -######################################################################## -# Directories -######################################################################## -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -#set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE) -######################################################################## \ No newline at end of file +######################################################################## +# +# Fobos SDR project +# V.T. +# LGPL +# +######################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## +# Project setup +######################################################################## +cmake_minimum_required(VERSION 3.7.2) + +if(${CMAKE_VERSION} VERSION_LESS "3.12.0") + project(fobos) +else() + project(fobos C) +endif() + +include(GNUInstallDirs) +message(>>> "CMAKE_INSTALL_LIBDIR: " ${CMAKE_INSTALL_LIBDIR}) +set(CMAKE_C_FLAGS, "${CMAKE_C_FLAGS} -std=c99") +######################################################################## + +######################################################################## +# Select the release build type by default to get optimization flags +######################################################################## +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") + message(STATUS "Build type not specified: defaulting to release.") +endif(NOT CMAKE_BUILD_TYPE) +######################################################################## + +######################################################################## +# Compiler specific setup +######################################################################## +if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) + ADD_DEFINITIONS(-Wall) + ADD_DEFINITIONS(-Wextra) + ADD_DEFINITIONS(-Wno-unused-parameter) + ADD_DEFINITIONS(-Wno-unused) + ADD_DEFINITIONS(-Wsign-compare) + ADD_DEFINITIONS(-ansi) +elseif(MSVC14 OR MSVC14) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) + ADD_DEFINITIONS(-D_TIMESPEC_DEFINED) +endif() +######################################################################## + +######################################################################## +# Find build dependencies +######################################################################## +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + pkg_check_modules(LIBUSB libusb-1.0 IMPORTED_TARGET) + if(LIBUSB_LINK_LIBRARIES) + set(LIBUSB_LIBRARIES "${LIBUSB_LINK_LIBRARIES}") + endif() +else() +if (CMAKE_VS_PLATFORM_NAME STREQUAL Win32) + set(LIBUSB_LIBRARIES ${CMAKE_SOURCE_DIR}/libusb/MS32/dll) +endif() +if (CMAKE_VS_PLATFORM_NAME STREQUAL x64) + set(LIBUSB_LIBRARIES ${CMAKE_SOURCE_DIR}/libusb/MS64/dll) +endif() + set(LIBUSB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libusb/include) +endif() +if(PKG_CONFIG_FOUND AND NOT LIBUSB_FOUND) + message(FATAL_ERROR "LibUSB 1.0 required") +endif() +######################################################################## + +######################################################################## +# Install udev rules +######################################################################## +install( + FILES fobos-sdr.rules + DESTINATION "/etc/udev/rules.d" + COMPONENT "udev" + ) +######################################################################## + +######################################################################## +# Print Summary +######################################################################## +message(>>> "Build: " ${CMAKE_BUILD_TYPE}) +message(>>> "OS: " ${CMAKE_SYSTEM_NAME}) +message(>>> "VS Platform: " ${CMAKE_VS_PLATFORM_NAME}) +message(>>> "LIBUSB_LIBRARIES: " ${LIBUSB_LIBRARIES}) +message(>>> "LIBUSB_INCLUDE_DIRS: " ${LIBUSB_INCLUDE_DIRS}) +message(>>> "PROJECT_BINARY_DIR: " ${PROJECT_BINARY_DIR}) + +######################################################################## +# Fobos SDR library +######################################################################## +add_library(libfobos SHARED fobos/fobos.c) + +target_compile_options(libfobos PUBLIC -std=c99) + +if(MSVC) +target_compile_options(libfobos PUBLIC "/MT") +ADD_CUSTOM_COMMAND(TARGET libfobos + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Debug + COMMAND ${CMAKE_COMMAND} -E copy ${LIBUSB_LIBRARIES}/libusb-1.0.dll ${PROJECT_BINARY_DIR}/Debug +) +ADD_CUSTOM_COMMAND(TARGET libfobos + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Release + COMMAND ${CMAKE_COMMAND} -E copy ${LIBUSB_LIBRARIES}/libusb-1.0.dll ${PROJECT_BINARY_DIR}/Release +) +else() +endif() + +if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) + target_link_libraries(libfobos PRIVATE ${LIBUSB_LIBRARIES}) +else() + target_link_directories(libfobos PRIVATE ${LIBUSB_LIBRARIES}) +endif() + +target_include_directories(libfobos PUBLIC + $ + $ + $/fobos + ${LIBUSB_INCLUDE_DIRS} + ) + +set_target_properties(libfobos PROPERTIES DEFINE_SYMBOL "FOBOS_EXPORTS") +set_target_properties(libfobos PROPERTIES OUTPUT_NAME fobos) +######################################################################## + +######################################################################## +# Install public header files +######################################################################## +INSTALL( + FILES fobos/fobos.h + DESTINATION include +) +######################################################################## + +######################################################################## +# Install built library files & utilities +######################################################################## +INSTALL( + TARGETS libfobos + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) +######################################################################## + +######################################################################## +# Create Pkg Config File +######################################################################## +FOREACH(inc ${LIBUSB_INCLUDEDIR}) + LIST(APPEND LIBFOBOS_PC_CFLAGS "-I${inc}") +ENDFOREACH(inc) + +FOREACH(lib ${LIBUSB_LIBRARY_DIRS}) + LIST(APPEND LIBFOBOS_PC_LIBS "-L${lib}") +ENDFOREACH(lib) + +# use space-separation format for the pc file +STRING(REPLACE ";" " " LIBFOBOS_PC_CFLAGS "${LIBFOBOS_PC_CFLAGS}") +STRING(REPLACE ";" " " LIBFOBOS_PC_LIBS "${LIBFOBOS_PC_LIBS}") + +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix \${prefix}) +set(includedir \${prefix}/include) +set(libdir \${exec_prefix}/lib) + +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/libfobos.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/libfobos.pc +@ONLY) + +INSTALL( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libfobos.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) +######################################################################## + +######################################################################## +# Create uninstall target +######################################################################## +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake +@ONLY) + +add_custom_target(uninstall + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake +) +######################################################################## + +######################################################################## +# Create executable fobos_devinfo +######################################################################## +add_executable(fobos_devinfo + eval/fobos_devinfo_main.c) + +target_compile_options(fobos_devinfo PUBLIC -std=c99) + +target_link_libraries(fobos_devinfo PRIVATE libfobos) + +if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) + target_link_libraries(fobos_devinfo PRIVATE ${LIBUSB_LIBRARIES}) +else() + target_link_directories(fobos_devinfo PRIVATE ${LIBUSB_LIBRARIES}) +endif() + +target_include_directories(fobos_devinfo PRIVATE ${CMAKE_SOURCE_DIR}) + +target_include_directories(fobos_devinfo PRIVATE ${CMAKE_SOURCE_DIR}/fobos) +######################################################################## + +######################################################################## +# Create executable fobos_recorder +######################################################################## +add_executable(fobos_recorder + eval/fobos_recorder_main.c + wav/wav_file.c) + +target_compile_options(fobos_recorder PUBLIC -std=c99) + +target_link_libraries(fobos_recorder PRIVATE libfobos) + +if(CMAKE_COMPILER_IS_GNUCC AND NOT WIN32) + target_link_libraries(fobos_recorder PRIVATE ${LIBUSB_LIBRARIES}) +else() + target_link_directories(fobos_recorder PRIVATE ${LIBUSB_LIBRARIES}) +endif() + +target_include_directories(fobos_recorder PRIVATE ${CMAKE_SOURCE_DIR}) + +target_include_directories(fobos_recorder PRIVATE ${CMAKE_SOURCE_DIR}/fobos) +######################################################################## + +######################################################################## +# Directories +######################################################################## +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +######################################################################## diff --git a/README.md b/README.md index d79c168..1db3e02 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ See [versions.txt](versions.txt) ## How to build and evaluate ### Linux - +``` git clone [this repo]
cd libfobos
mkdir build
@@ -33,20 +33,27 @@ make
subo make install
sudo udevadm control --reload-rules
sudo udevadm trigger
- +``` ### Windows - +``` git clone [this repo]
cd libfobos
mkdir build
cd build
cmake ..
+``` +to build Win32 binaries (legasy software) use + +``` +cmake .. -A Win32
+``` Visit https://github.com/libusb/libusb/releases
Download any libusb release 7z pack, for example libusb-1.0.27.7z
Unpack content of **libusb-1.0.27.7z** to **libusb** directory
- +``` cmake --build . --config Release
+``` or
open **fobos.sln** in your favorite **MS VisualStudio IDE**,
build, debug, trace, evaluate.
diff --git a/eval/fobos_devinfo_main.c b/eval/fobos_devinfo_main.c index b33979f..0d52552 100644 --- a/eval/fobos_devinfo_main.c +++ b/eval/fobos_devinfo_main.c @@ -1,7 +1,7 @@ //============================================================================== // Fobos SDR API library test application // V.T. -// LGPL +// LGPL-2.1+ // 2024.03.21 // 2024.04.08 // 2024.05.01 @@ -16,7 +16,7 @@ void get_devinfo() int result = 0; char lib_version[32]; char drv_version[32]; - char serials[256]; + char serials[256] = {0}; int index = 0; diff --git a/eval/fobos_recorder_main.c b/eval/fobos_recorder_main.c index 91fa917..4bb6d0b 100644 --- a/eval/fobos_recorder_main.c +++ b/eval/fobos_recorder_main.c @@ -1,7 +1,7 @@ //============================================================================== // Fobos SDR API library test application // V.T. -// LGPL +// LGPL-2.1+ // 2024.03.21 // 2024.04.08 // 2024.05.01 @@ -30,7 +30,8 @@ void read_samples_callback(float *buf, uint32_t buf_length, void *ctx) rx_ctx->buff_count++; printf("+"); - + fflush(stdout); + if (rx_ctx->buff_count >= rx_ctx->max_buff_count) { printf("canceling..."); @@ -51,7 +52,7 @@ void test_recorder(void) int result = 0; char lib_version[32]; char drv_version[32]; - char serials[256]; + char serials[256] = {0}; int index = 0; // the device index to open diff --git a/fobos/fobos.c b/fobos/fobos.c index a97f257..4874df1 100644 --- a/fobos/fobos.c +++ b/fobos/fobos.c @@ -10,8 +10,10 @@ // 2024.03.21 // 2024.04.08 // 2024.05.29 - sync mode (fobos_rx_start_sync, fobos_rx_read_sync, fobos_rx_stop_sync) +// 2024.06.21 - update fow hw rev.3.0.0 +// 2024.07.08 - new band plan +// 2024.07.20 - IQ calibration on the fly //============================================================================== -#define _CRT_SECURE_NO_WARNINGS #include #include #include @@ -33,9 +35,7 @@ //============================================================================== //#define FOBOS_PRINT_DEBUG //============================================================================== -#define FOBOS_HW_REVISION "2.0.1" -#define FOBOS_FV_VERSION "1.1.0" -#define LIB_VERSION "2.2.2" +#define LIB_VERSION "2.3.1" #define DRV_VERSION "libusb" //============================================================================== #define FOBOS_VENDOR_ID 0x16d0 @@ -45,8 +45,9 @@ #define FOBOS_DEV_PRESEL_V2 1 #define FOBOS_DEV_LNA_LP_SHD 2 #define FOBOS_DEV_LNA_HP_SHD 3 -#define FOBOS_DEV_IF_V1 4 -#define FOBOS_DEV_IF_V2 5 +#define FOBOS_DEV_IF_V1 4 +#define FOBOS_DEV_IF_V2 5 +#define FOBOS_DEV_OQMUX 6 #define FOBOS_DEV_LPF_A0 6 #define FOBOS_DEV_LPF_A1 7 #define FOBOS_DEV_NENBL_HF 8 @@ -91,6 +92,9 @@ struct fobos_dev_t //=== common =============================================================== uint16_t user_gpo; uint16_t dev_gpo; + char hw_revision[32]; + char fw_version[32]; + char fw_build[32]; char manufacturer[LIBUSB_DDESCRIPTOR_LEN]; char product[LIBUSB_DDESCRIPTOR_LEN]; char serial[LIBUSB_DDESCRIPTOR_LEN]; @@ -99,11 +103,12 @@ struct fobos_dev_t uint32_t rx_frequency_band; double rx_samplerate; double rx_bandwidth; - uint8_t rx_lpf_idx; - uint8_t rx_lna_gain; - uint8_t rx_vga_gain; - uint8_t rx_bw_idx; - uint8_t rx_direct_sampling; + uint32_t rx_lpf_idx; + uint32_t rx_lna_gain; + uint32_t rx_vga_gain; + uint32_t rx_bw_idx; + uint32_t rx_bw_adj; + uint32_t rx_direct_sampling; fobos_rx_cb_t rx_cb; void *rx_cb_ctx; enum fobos_async_status rx_async_status; @@ -111,13 +116,15 @@ struct fobos_dev_t uint32_t rx_failures; uint32_t rx_buff_counter; int rx_swap_iq; - int rx_calibration_state; - int rx_calibration_pos; float rx_dc_re; float rx_dc_im; + float rx_avg_re; + float rx_avg_im; float rx_scale_re; float rx_scale_im; float * rx_buff; + double max2830_clock; + uint64_t rffc507x_clock; uint16_t rffc507x_registers_local[31]; uint16_t rffc500x_registers_remote[31]; int rx_sync_started; @@ -162,7 +169,7 @@ int fobos_rx_get_api_info(char * lib_version, char * drv_version) { if (lib_version) { - strcpy(lib_version, LIB_VERSION); + strcpy(lib_version, LIB_VERSION" "__DATE__" "__TIME__); } if (drv_version) { @@ -414,14 +421,22 @@ int fobos_max2830_init(struct fobos_dev_t * dev) //============================================================================== int fobos_max2830_set_frequency(struct fobos_dev_t * dev, double value, double * actual) { - double fcomp = 25000000.0; - double div = value / fcomp; - uint32_t div_int = (uint32_t)(div) & 0x000000FF; - uint32_t div_frac = (uint32_t)((div - div_int) * 1048575.0 + 0.5); #ifdef FOBOS_PRINT_DEBUG printf_internal("%s(%f);\n", __FUNCTION__, value); #endif // FOBOS_PRINT_DEBUG - fobos_max2830_write_reg(dev, 5, 0x00A0); // Reference Frequency Divider = 1 + double fcomp = dev->max2830_clock; + if (fcomp > 26000000.0) + { + fcomp /= 2.0; + fobos_max2830_write_reg(dev, 5, 0x00A4); // Reference Frequency Divider = 2 + } + else + { + fobos_max2830_write_reg(dev, 5, 0x00A0); // Reference Frequency Divider = 1 + } + double div = value / fcomp; + uint32_t div_int = (uint32_t)(div) & 0x000000FF; + uint32_t div_frac = (uint32_t)((div - div_int) * 1048575.0 + 0.5); if (actual) { div = (double)(div_int) + (double)(div_frac) / 1048575.0; @@ -491,7 +506,7 @@ static const uint16_t rffc507x_regs_default[RFFC507X_REGS_COUNT] = 0x1e84, /* 0x0F */ 0x89d8, /* 0x10 */ 0x9d00, /* 0x11 */ - 0x2a20, /* 0x12 */ + 0x2a80, /* 0x12 */ 0x0000, /* 0x13 */ 0x0000, /* 0x14 */ 0x0000, /* 0x15 */ @@ -561,20 +576,20 @@ int fobos_rffc507x_init(struct fobos_dev_t * dev) return FOBOS_ERR_NO_DEV; } //============================================================================== -#define FOBOS_RFFC507X_LO_MAX 5400 -#define FOBOS_RFFC507X_REF_FREQ 25 -int fobos_rffc507x_set_lo_frequency(struct fobos_dev_t * dev, int lo_freq_mhz, uint64_t * tune_freq_hz) +int fobos_rffc507x_set_lo_frequency_hz(struct fobos_dev_t * dev, uint64_t lo_freq_hz, uint64_t * tune_freq_hz) { - uint32_t lodiv; - uint16_t fvco; + uint64_t lodiv; + uint64_t fvco; uint32_t fbkdiv; uint16_t pllcpl; uint16_t n; uint16_t p1nmsb; - uint8_t p1nlsb; - - uint8_t n_lo = 0; - uint16_t x = FOBOS_RFFC507X_LO_MAX / lo_freq_mhz; + uint16_t p1nlsb; + uint64_t lo_max = 5400000000ULL; + uint64_t fref = 25000000ULL; + fref = dev->rffc507x_clock; + uint16_t n_lo = 0; // aka p1lodiv + uint32_t x = lo_max / lo_freq_hz; while ((x > 1) && (n_lo < 5)) { n_lo++; @@ -582,30 +597,27 @@ int fobos_rffc507x_set_lo_frequency(struct fobos_dev_t * dev, int lo_freq_mhz, u } lodiv = 1 << n_lo; - fvco = lodiv * lo_freq_mhz; + fvco = lodiv * lo_freq_hz; - if (fvco > 3200) + fbkdiv = 2; + pllcpl = 2; + if (fvco > 3200000000ULL) { fbkdiv = 4; pllcpl = 3; } - else - { - fbkdiv = 2; - pllcpl = 2; - } fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x15], 14, 14, 0); // enbl = 0 fobos_rffc507x_commit(dev, 0); fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x00], 2, 0, pllcpl); - uint64_t tmp_n = ((uint64_t)fvco << 29ULL) / ((uint64_t)fbkdiv * FOBOS_RFFC507X_REF_FREQ); + uint64_t tmp_n = (fvco << 29ULL) / (fbkdiv * fref); n = tmp_n >> 29ULL; p1nmsb = (tmp_n >> 13ULL) & 0xffff; p1nlsb = (tmp_n >> 5ULL) & 0xff; - uint64_t freq_hz= (FOBOS_RFFC507X_REF_FREQ * (tmp_n >> 5ULL) * (uint64_t)fbkdiv * 1000000) / ((uint64_t)lodiv * (1 << 24ULL)); + uint64_t freq_hz = (fref * (tmp_n >> 5ULL) * fbkdiv) / (lodiv * (1 << 24ULL)); if (tune_freq_hz) { *tune_freq_hz = freq_hz; @@ -616,10 +628,10 @@ int fobos_rffc507x_set_lo_frequency(struct fobos_dev_t * dev, int lo_freq_mhz, u fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0C], 3, 2, fbkdiv >> 1); // p1presc fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0D], 15, 0, p1nmsb); // p1nmsb fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0E], 15, 8, p1nlsb); // p1nlsb - // Path 2 - fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0F], 6, 4, n_lo); // p2lodiv + // Path 2 + fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0F], 6, 4, n_lo); // p2lodiv fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0F], 15, 7, n); // p1n - fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0F], 3, 2, fbkdiv >> 1); // p1presc + fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x0F], 3, 2, fbkdiv >> 1); // p1presc fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x10], 15, 0, p1nmsb); // p1nmsb fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x11], 15, 8, p1nlsb); // p1nlsb @@ -629,7 +641,7 @@ int fobos_rffc507x_set_lo_frequency(struct fobos_dev_t * dev, int lo_freq_mhz, u fobos_rffc507x_commit(dev, 0); #ifdef FOBOS_PRINT_DEBUG double ff = (double)freq_hz; - printf_internal("rffc507x lo_freq_mhz = %d %f\n", lo_freq_mhz, ff); + printf_internal("rffc507x lo_freq_mhz = %lld %f\n", lo_freq_hz, ff); #endif // FOBOS_PRINT_DEBUG return 0; } @@ -749,11 +761,13 @@ int fobos_si5351c_init(struct fobos_dev_t * dev) fobos_si5351c_config_pll(dev, 0, 80 * 128 - 512, 0, 1); - // Configure rffc507x_clk to 25 MHz - fobos_si5351c_config_msynth(dev, 0, 32 * 128 - 512, 0, 1, 0); + // Configure rffc507x_clk + fobos_si5351c_config_msynth(dev, 0, 20 * 128 - 512, 0, 1, 0); // 40 MHz + dev->rffc507x_clock = 40000000ULL; - // Configure max2830_clk to 25 MHz - fobos_si5351c_config_msynth(dev, 4, 32 * 128 - 512, 0, 1, 0); + // Configure max2830_clk + fobos_si5351c_config_msynth(dev, 4, 20 * 128 - 512, 0, 1, 0); // 40 MHz + dev->max2830_clock = 40000000.0; #ifdef FOBOS_PRINT_DEBUG printf_internal("si5351c registers:\n"); @@ -783,11 +797,17 @@ int fobos_fx3_command(struct fobos_dev_t * dev, uint8_t code, uint16_t value, ui //============================================================================== int fobos_rx_set_user_gpo(struct fobos_dev_t * dev, uint8_t value) { +#ifdef FOBOS_PRINT_DEBUG + printf_internal("%s(0x%04x);\n", __FUNCTION__, value); +#endif // FOBOS_PRINT_DEBUG return fobos_fx3_command(dev, 0xE3, value, 0); } //============================================================================== int fobos_rx_set_dev_gpo(struct fobos_dev_t * dev, uint16_t value) { +#ifdef FOBOS_PRINT_DEBUG + printf_internal("%s(0x%04x);\n", __FUNCTION__, value); +#endif // FOBOS_PRINT_DEBUG return fobos_fx3_command(dev, 0xE4, value, 0); } //============================================================================== @@ -841,11 +861,30 @@ int fobos_rx_open(struct fobos_dev_t ** out_dev, uint32_t index) { *out_dev = dev; //====================================================================== + result = libusb_control_transfer(dev->libusb_devh, CTRLI, 0xE8, 0, 0, (unsigned char *)dev->hw_revision, sizeof(dev->hw_revision), CTRL_TIMEOUT); + if (result <= 0) + { + strcpy(dev->hw_revision, "2.0.0"); + } + result = libusb_control_transfer(dev->libusb_devh, CTRLI, 0xE8, 1, 0, (unsigned char *)dev->fw_version, sizeof(dev->fw_version), CTRL_TIMEOUT); + if (result <= 0) + { + strcpy(dev->hw_revision, "2.0.0"); + } + result = libusb_control_transfer(dev->libusb_devh, CTRLI, 0xE8, 2, 0, (unsigned char *)dev->fw_build, sizeof(dev->fw_build), CTRL_TIMEOUT); + if (result <= 0) + { + strcpy(dev->fw_build, "unknown"); + } + //====================================================================== + dev->rx_frequency_band = 0xFFFFFFFF; dev->dev_gpo = 0; dev->rx_scale_re = 1.0f / 32768.0f; dev->rx_scale_im = 1.0f / 32768.0f; dev->rx_dc_re = 0.25f; dev->rx_dc_im = 0.25f; + dev->rx_avg_re = 0.0f; + dev->rx_avg_im = 0.0f; if (fobos_check(dev) == 0) { bitset(dev->dev_gpo, FOBOS_DEV_CLKSEL); @@ -859,8 +898,7 @@ int fobos_rx_open(struct fobos_dev_t ** out_dev, uint32_t index) fobos_si5351c_init(dev); fobos_max2830_init(dev); fobos_rffc507x_init(dev); - fobos_rffc507x_set_lo_frequency(dev, 2375, 0); - fobos_max2830_set_frequency(dev, 2475000000.0, 0); + fobos_rx_set_frequency(dev, 100E6, 0); fobos_rx_set_samplerate(dev, 10000000.0, 0); return FOBOS_ERR_OK; } @@ -947,11 +985,13 @@ int fobos_rx_get_board_info(struct fobos_dev_t * dev, char * hw_revision, char * } if (hw_revision) { - strcpy(hw_revision, FOBOS_HW_REVISION); + strcpy(hw_revision, dev->hw_revision); } if (fw_version) { - strcpy(fw_version, FOBOS_FV_VERSION); + strcpy(fw_version, dev->fw_version); + strcat(fw_version, " "); + strcat(fw_version, dev->fw_build); } if (manufacturer) { @@ -968,12 +1008,159 @@ int fobos_rx_get_board_info(struct fobos_dev_t * dev, char * hw_revision, char * return result; } //============================================================================== -#define FOBOS_MIN_LP_FREQ_MHZ (40) -#define FOBOS_MAX_LP_FREQ_MHZ (2300) -#define FOBOS_MIN_BP_FREQ_MHZ (2300) -#define FOBOS_MAX_BP_FREQ_MHZ (2550) -#define FOBOS_MIN_HP_FREQ_MHZ (2550) -#define FOBOS_MAX_HP_FREQ_MHZ (6550) +#define FOBOS_PRESELECT_BYPASS 0 +#define FOBOS_PRESELECT_LOWPASS 1 +#define FOBOS_PRESELECT_HIGHPASS 2 +#define FOBOS_IF_FILTER_NONE 0 +#define FOBOS_IF_FILTER_LOW 1 +#define FOBOS_IF_FILTER_HIGH 2 +#define FOBOS_IF_FREQ_AUTO 0 +#define FOBOS_IF_FREQ_2350 2350 +#define FOBOS_IF_FREQ_2400 2400 +#define FOBOS_IF_FREQ_2450 2450 +#define FOBOS_INJECT_NONE 0 +#define FOBOS_INJECT_LOW 1 +#define FOBOS_INJECT_HIGH 2 +//============================================================================== +typedef struct +{ + uint32_t idx; + uint32_t freq_mhz_min; + uint32_t freq_mhz_max; + uint32_t preselect; + uint32_t if_filter; + uint32_t if_freq_mhz; + uint32_t rffc507x_enabled; + uint32_t rffc507x_inject; + uint32_t swap_iq; +} fobos_rx_band_param_t; +//============================================================================== +const fobos_rx_band_param_t fobos_rx_bands[] = +{ + { + .idx = 0, + .freq_mhz_min = 50, + .freq_mhz_max = 2200, + .preselect = FOBOS_PRESELECT_LOWPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_LOW, + .swap_iq = 1, + }, + { + .idx = 1, + .freq_mhz_min = 2200, + .freq_mhz_max = 2300, + .preselect = FOBOS_PRESELECT_LOWPASS, + .if_filter = FOBOS_IF_FILTER_HIGH, + .if_freq_mhz = FOBOS_IF_FREQ_2450, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_LOW, + .swap_iq = 1, + }, + { + .idx = 2, + .freq_mhz_min = 2300, + .freq_mhz_max = 2550, + .preselect = FOBOS_PRESELECT_BYPASS, + .if_filter = FOBOS_IF_FILTER_NONE, + .if_freq_mhz = FOBOS_IF_FREQ_AUTO, + .rffc507x_enabled = 0, + .rffc507x_inject = FOBOS_INJECT_NONE, + .swap_iq = 0, + }, + { + .idx = 3, + .freq_mhz_min = 2550, + .freq_mhz_max = 3000, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + //.rffc507x_inject = FOBOS_INJECT_LOW, + //.swap_iq = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 4, + .freq_mhz_min = 3000, + .freq_mhz_max = 3100, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 5, + .freq_mhz_min = 3100, + .freq_mhz_max = 3200, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_HIGH, + .if_freq_mhz = FOBOS_IF_FREQ_2450, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 6, + .freq_mhz_min = 3200, + .freq_mhz_max = 3400, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 7, + .freq_mhz_min = 3400, + .freq_mhz_max = 3600, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_HIGH, + .if_freq_mhz = FOBOS_IF_FREQ_2450, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 8, + .freq_mhz_min = 3600, + .freq_mhz_max = 4000, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 9, + .freq_mhz_min = 4000, + .freq_mhz_max = 4800, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_HIGH, + .if_freq_mhz = FOBOS_IF_FREQ_2450, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, + { + .idx = 10, + .freq_mhz_min = 4800, + .freq_mhz_max = 6900, + .preselect = FOBOS_PRESELECT_HIGHPASS, + .if_filter = FOBOS_IF_FILTER_LOW, + .if_freq_mhz = FOBOS_IF_FREQ_2350, + .rffc507x_enabled = 1, + .rffc507x_inject = FOBOS_INJECT_HIGH, + .swap_iq = 0, + }, +}; //============================================================================== int fobos_rx_set_frequency(struct fobos_dev_t * dev, double value, double * actual) { @@ -987,141 +1174,117 @@ int fobos_rx_set_frequency(struct fobos_dev_t * dev, double value, double * actu } if (dev->rx_frequency != value) { - double rx_frequency = 0.0; - - uint32_t RFFC5071_freq_mhz; - uint64_t RFFC5071_freq_hz_actual; - - uint64_t freq = (uint64_t)value; - - uint32_t freq_mhz = freq / 1000000; - double max2830_freq = 0.0; - double max2830_freq_actual = 0.0; - - if (freq_mhz < FOBOS_MAX_LP_FREQ_MHZ) + size_t count = sizeof(fobos_rx_bands) / sizeof(fobos_rx_bands[0]); + uint32_t freq_mhz = (uint32_t)(value / 1E6 + 0.5); + size_t idx = count; + for (size_t i = 0; i < count; i++) { - if (dev->rx_frequency_band != 1) - { - dev->rx_frequency_band = 1; - // set_preselect(lowpass); - bitset(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); - bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); - // enable lowpass lna - bitclear(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); - // shut down highpass lna - bitset(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); - // set_if_filter(high); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); - bitset(dev->dev_gpo, FOBOS_DEV_IF_V2); - // turn on max2830 ant1 (main) input, turn off ant2 (aux) input - bitclear(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); - // commit dev_gpo value - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - // enable rffc507x clock - fobos_rffc507x_clock(dev, 1); - } - int upcon = 1; - if (upcon) + if ((freq_mhz >= fobos_rx_bands[i].freq_mhz_min) && (freq_mhz <= fobos_rx_bands[i].freq_mhz_max)) { - dev->rx_swap_iq = 1; - // set frequencies - uint32_t max2830_mhz = 2450; - RFFC5071_freq_mhz = max2830_mhz + freq_mhz; - RFFC5071_freq_mhz = (RFFC5071_freq_mhz / 5) * 5; // spures prevention - fobos_rffc507x_set_lo_frequency(dev, RFFC5071_freq_mhz, &RFFC5071_freq_hz_actual); - max2830_freq = (double)(RFFC5071_freq_hz_actual - freq); - fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); - rx_frequency = RFFC5071_freq_hz_actual - max2830_freq_actual; - } - else - { - dev->rx_swap_iq = 0; - // set frequencies - uint32_t max2830_mhz = 2400; - RFFC5071_freq_mhz = max2830_mhz - freq_mhz; - RFFC5071_freq_mhz = (RFFC5071_freq_mhz / 5) * 5; // spures prevention - fobos_rffc507x_set_lo_frequency(dev, RFFC5071_freq_mhz, &RFFC5071_freq_hz_actual); - max2830_freq = (double)(RFFC5071_freq_hz_actual + freq); - fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); - rx_frequency = max2830_freq_actual - RFFC5071_freq_hz_actual; + idx = i; + break; } - result = 0; } - else if ((freq_mhz >= FOBOS_MIN_BP_FREQ_MHZ) && (freq_mhz <= FOBOS_MAX_BP_FREQ_MHZ)) + if (idx == count) { - if (dev->rx_frequency_band != 2) + return FOBOS_ERR_UNSUPPORTED; + } + if (dev->rx_frequency_band != idx) + { + switch (fobos_rx_bands[idx].preselect) { - dev->rx_frequency_band = 2; - // set_preselect(bypass); - bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); - bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); - // shut down both lnas - bitclear(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); - bitclear(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); - // set_invert_iq(false); - dev->rx_swap_iq = 0; - // set_if_filter(none); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V2); - // turn on max2830 ant2 (diversity) input - bitset(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); - // commit dev_gpo value - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - // disable rffc507x - fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[21], 14, 14, 0); // enbl = 0 - fobos_rffc507x_commit(dev, 0); - // disable rffc507x clock - fobos_rffc507x_clock(dev, 0); + case FOBOS_PRESELECT_BYPASS: + { + bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); + bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); + bitclear(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); // shut down both lnas + bitclear(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); // shut down both lnas + break; + } + case FOBOS_PRESELECT_LOWPASS: + { + bitset(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); + bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); + bitclear(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); // enable lowpass lna + bitset(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); // shut down highpass lna + break; + } + case FOBOS_PRESELECT_HIGHPASS: + { + bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); + bitset(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); + bitset(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); // shut down lowpass lna + bitclear(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); // enable highpass lna + break; + } + } + switch (fobos_rx_bands[idx].if_filter) + { + case FOBOS_IF_FILTER_NONE: + { + bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); + bitclear(dev->dev_gpo, FOBOS_DEV_IF_V2); + bitset(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); + break; + } + case FOBOS_IF_FILTER_LOW: + { + bitset(dev->dev_gpo, FOBOS_DEV_IF_V1); + bitclear(dev->dev_gpo, FOBOS_DEV_IF_V2); + bitclear(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); + break; + } + case FOBOS_IF_FILTER_HIGH: + { + bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); + bitset(dev->dev_gpo, FOBOS_DEV_IF_V2); + bitclear(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); + break; + } } - // set frequency direct to max2830 - max2830_freq = value; - fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); - rx_frequency = max2830_freq_actual; - result = 0; + fobos_rx_set_dev_gpo(dev, dev->dev_gpo); // commit dev_gpo value + fobos_rffc507x_clock(dev, fobos_rx_bands[idx].rffc507x_enabled); + fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x15], 14, 14, fobos_rx_bands[idx].rffc507x_enabled); + fobos_rffc507x_commit(dev, 0); + dev->rx_frequency_band = idx; } - else if ((freq_mhz >= FOBOS_MIN_HP_FREQ_MHZ) && (freq_mhz <= FOBOS_MAX_HP_FREQ_MHZ)) + dev->rx_swap_iq = fobos_rx_bands[idx].swap_iq; + + double max2830_freq = 0.0; + double max2830_freq_actual = 0.0; + uint64_t RFFC5071_freq; + uint64_t RFFC5071_freq_hz_actual; + double rx_frequency = 0.0; + switch (fobos_rx_bands[idx].rffc507x_inject) { - // set_preselect(hipass); - bitclear(dev->dev_gpo, FOBOS_DEV_PRESEL_V1); - bitset(dev->dev_gpo, FOBOS_DEV_PRESEL_V2); - // set_invert_iq(true); - dev->rx_swap_iq = 1; - uint32_t max2830_mhz = 2350; - if ((freq_mhz >= 4550) && (freq_mhz <= 4750)) + case FOBOS_INJECT_NONE: { - // set_if_filter(high); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); - bitset(dev->dev_gpo, FOBOS_DEV_IF_V2); - max2830_mhz = 2450; + max2830_freq = value; + fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); + rx_frequency = max2830_freq_actual; + result = FOBOS_ERR_OK; + break; } - else + case FOBOS_INJECT_LOW: { - // set_if_filter(low); - bitset(dev->dev_gpo, FOBOS_DEV_IF_V1); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V2); - max2830_mhz = 2350; + max2830_freq = fobos_rx_bands[idx].if_freq_mhz * 1E6; + fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); + RFFC5071_freq = (uint64_t)max2830_freq_actual + (uint64_t)value; + fobos_rffc507x_set_lo_frequency_hz(dev, RFFC5071_freq, &RFFC5071_freq_hz_actual); + rx_frequency = RFFC5071_freq_hz_actual - max2830_freq_actual; + result = FOBOS_ERR_OK; + break; } - // turn on max2830 ant1 (main) input - bitclear(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); - // commit dev_gpo value - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - if (dev->rx_frequency_band != 3) + case FOBOS_INJECT_HIGH: { - dev->rx_frequency_band = 3; - - // enable rffc507x clock - fobos_rffc507x_clock(dev, 1); + max2830_freq = fobos_rx_bands[idx].if_freq_mhz * 1E6; + fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); + RFFC5071_freq = (uint64_t)value - (uint64_t)max2830_freq_actual; + fobos_rffc507x_set_lo_frequency_hz(dev, RFFC5071_freq, &RFFC5071_freq_hz_actual); + rx_frequency = RFFC5071_freq_hz_actual + max2830_freq_actual; + result = FOBOS_ERR_OK; + break; } - RFFC5071_freq_mhz = freq_mhz - max2830_mhz; - fobos_rffc507x_set_lo_frequency(dev, RFFC5071_freq_mhz, &RFFC5071_freq_hz_actual); - max2830_freq = (double)(freq - RFFC5071_freq_hz_actual); - fobos_max2830_set_frequency(dev, max2830_freq, &max2830_freq_actual); - rx_frequency = max2830_freq_actual + RFFC5071_freq_hz_actual; - result = 0; - } - else - { - result = FOBOS_ERR_UNSUPPORTED; } if (result == FOBOS_ERR_OK) { @@ -1149,8 +1312,16 @@ int fobos_rx_set_direct_sampling(struct fobos_dev_t * dev, unsigned int enabled) { if (enabled) { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + if (dev->hw_revision[0] == '2') + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + } + else + { + bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A0); + bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A1); + } bitclear(dev->dev_gpo, FOBOS_DEV_NENBL_HF); fobos_rx_set_dev_gpo(dev, dev->dev_gpo); // disable clocks @@ -1168,13 +1339,21 @@ int fobos_rx_set_direct_sampling(struct fobos_dev_t * dev, unsigned int enabled) { dev->rx_lpf_idx = 2; } - if (dev->rx_lpf_idx & 1) + if (dev->hw_revision[0] == '2') { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + if (dev->rx_lpf_idx & 1) + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + } + if (dev->rx_lpf_idx & 2) + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); + } } - if (dev->rx_lpf_idx & 2) + else { bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); } bitset(dev->dev_gpo, FOBOS_DEV_NENBL_HF); fobos_rx_set_dev_gpo(dev, dev->dev_gpo); @@ -1233,9 +1412,123 @@ int fobos_rx_set_vga_gain(struct fobos_dev_t * dev, unsigned int value) return result; } //============================================================================== +int fobos_rx_set_lpf(struct fobos_dev_t * dev, double bandwidth) +{ + int result = fobos_check(dev); +#ifdef FOBOS_PRINT_DEBUG + printf_internal("%s(%f)\n", __FUNCTION__, bandwidth); +#endif // FOBOS_PRINT_DEBUG + if (result != FOBOS_ERR_OK) + { + return result; + } + result = 0; + int rx_lpf_idx = dev->rx_lpf_idx; + if (!dev->rx_direct_sampling) + { + bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A0); + bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A1); + if (dev->hw_revision[0] == '2') + { + if (bandwidth < 13000000.0) + { + rx_lpf_idx = 0; + } + else if (bandwidth < 26000000.0) + { + rx_lpf_idx = 1; + } + else + { + rx_lpf_idx = 2; + } + if (rx_lpf_idx & 1) + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + } + if (rx_lpf_idx & 2) + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); + } + } + else + { + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); + bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); + } + fobos_rx_set_dev_gpo(dev, dev->dev_gpo); + } + dev->rx_lpf_idx = rx_lpf_idx; + return result; +} +//============================================================================== +const double fobos_max2830_bws[] = +{ + 2.0 * 7.5E6, 2.0 * 8.5E6, 2.0 * 15.0E6, 2.0 * 18.0E6 +}; +//============================================================================== +const double fobos_max2830_adj[] = +{ + 0.90, 0.95, 1.00, 1.05, 1.10 +}; +//============================================================================== +int fobos_rx_set_bandwidth(struct fobos_dev_t * dev, double value, double * actual) +{ + int result = fobos_check(dev); +#ifdef FOBOS_PRINT_DEBUG + printf_internal("%s(%f)\n", __FUNCTION__, value); +#endif // FOBOS_PRINT_DEBUG + if (result != FOBOS_ERR_OK) + { + return result; + } + result = 0; + uint32_t p1 = 0; + size_t count = sizeof(fobos_max2830_bws) / sizeof(fobos_max2830_bws[0]); + double dmin = value; + size_t idx = 0; + for (size_t i = 0; i < count; i++) + { + double df = fabs(value - fobos_max2830_bws[i]); + if (df < dmin) + { + dmin = df; + idx = i; + } + } + count = sizeof(fobos_max2830_adj) / sizeof(fobos_max2830_adj[0]); + dmin = value; + size_t adj = 0; + for (size_t i = 0; i < count; i++) + { + double bw = fobos_max2830_bws[idx] * fobos_max2830_adj[i]; + double df = fabs(value - bw); + if (df < dmin) + { + dmin = df; + adj = i; + } + } + if (actual) + { + *actual = fobos_max2830_bws[idx] * fobos_max2830_adj[adj]; + } + if (dev->rx_bw_idx != idx) + { + dev->rx_bw_idx = idx; + fobos_max2830_write_reg(dev, 8, idx | 0x3420); + } + if (dev->rx_bw_adj != adj) + { + dev->rx_bw_adj = adj; + fobos_max2830_write_reg(dev, 7, adj | 0x0020); + } + return result; +} +//============================================================================== const double fobos_sample_rates[] = { - //80000000.0, + 80000000.0, 50000000.0, 40000000.0, 32000000.0, @@ -1244,11 +1537,7 @@ const double fobos_sample_rates[] = 16000000.0, 12500000.0, 10000000.0, - 8000000.0, - 6400000.0, - 6250000.0, - 5000000.0, - 4000000.0 + 8000000.0 }; //============================================================================== int fobos_rx_get_samplerates(struct fobos_dev_t * dev, double * values, unsigned int * count) @@ -1272,8 +1561,8 @@ int fobos_rx_get_samplerates(struct fobos_dev_t * dev, double * values, unsigned //============================================================================== const uint32_t fobos_p1s[] = { - //10, - 16, 20, 25, 32, 40, 50, 64, 80, 100, 125, 128, 160, 200 + 10, + 16, 20, 25, 32, 40, 50, 64, 80, 100 }; //============================================================================== int fobos_rx_set_samplerate(struct fobos_dev_t * dev, double value, double * actual) @@ -1306,59 +1595,9 @@ int fobos_rx_set_samplerate(struct fobos_dev_t * dev, double value, double * act value = fobos_sample_rates[i_min]; if (result == 0) { - int rx_lpf_idx = dev->rx_lpf_idx; - if (value < 13000000.0) - { - rx_lpf_idx = 0; - } - else if (value < 26000000.0) - { - rx_lpf_idx = 1; - } - else - { - rx_lpf_idx = 2; - } - if (!dev->rx_direct_sampling) - { - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A0); - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A1); - if (rx_lpf_idx & 1) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); - } - if (rx_lpf_idx & 2) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); - } - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - } - dev->rx_lpf_idx = rx_lpf_idx; - int rx_bw_idx = dev->rx_bw_idx; - if (value < 15000000.0) - { - rx_bw_idx = 0; - } - else if (value < 17000000.0) - { - rx_bw_idx = 1; - } - else if (value < 30000000.0) - { - rx_bw_idx = 2; - } - else - { - rx_bw_idx = 3; - } - if (dev->rx_bw_idx != rx_bw_idx) - { - dev->rx_bw_idx = rx_bw_idx; - fobos_max2830_write_reg(dev, 8, rx_bw_idx | 0x3420); - } -#ifdef FOBOS_PRINT_DEBUG - printf_internal("lpf_idx = %i bw_idx = %i\n", rx_lpf_idx, rx_bw_idx); -#endif // FOBOS_PRINT_DEBUG + double bandwidth = value * 0.8; + fobos_rx_set_lpf(dev, bandwidth); + fobos_rx_set_bandwidth(dev, bandwidth, 0); dev->rx_samplerate = value; if (actual) { @@ -1368,39 +1607,6 @@ int fobos_rx_set_samplerate(struct fobos_dev_t * dev, double value, double * act return result; } //============================================================================== -int fobos_rx_set_lpf(struct fobos_dev_t * dev, int value) -{ - int result = fobos_check(dev); -#ifdef FOBOS_PRINT_DEBUG - printf_internal("%s(%d)\n", __FUNCTION__, value); -#endif // FOBOS_PRINT_DEBUG - if (result != FOBOS_ERR_OK) - { - return result; - } - if (value < 0) value = 0; - if (value > 2) value = 2; - if (dev->rx_lpf_idx != value) - { - if (!dev->rx_direct_sampling) - { - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A0); - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A1); - if (value & 1) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); - } - if (value & 2) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); - } - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - } - dev->rx_lpf_idx = value; - } - return result; -} -//============================================================================== int fobos_rx_set_clk_source(struct fobos_dev_t * dev, int value) { int result = fobos_check(dev); @@ -1423,6 +1629,60 @@ int fobos_rx_set_clk_source(struct fobos_dev_t * dev, int value) return result; } //============================================================================== +void fobos_rx_calibrate(struct fobos_dev_t * dev, void * data, size_t size) +{ + size_t complex_samples_count = size / 4; + int16_t * psample = (int16_t *)data; + int64_t summ_re = 0ll; + int64_t summ_im = 0ll; + size_t chunks_count = complex_samples_count / 4; + for (size_t i = 0; i < chunks_count; i++) + { + summ_re += psample[0]; + summ_im += psample[1]; + summ_re += psample[2]; + summ_im += psample[3]; + summ_re += psample[4]; + summ_im += psample[5]; + summ_re += psample[6]; + summ_im += psample[7]; + psample += 8; + } + summ_re /= complex_samples_count; + summ_im /= complex_samples_count; + int16_t avg_re = summ_re; + int16_t avg_im = summ_im; + psample = (int16_t *)data; + for (size_t i = 0; i < chunks_count; i++) + { + summ_re += abs(psample[0] - avg_re); + summ_im += abs(psample[1] - avg_im); + summ_re += abs(psample[2] - avg_re); + summ_im += abs(psample[3] - avg_im); + summ_re += abs(psample[4] - avg_re); + summ_im += abs(psample[5] - avg_im); + summ_re += abs(psample[6] - avg_re); + summ_im += abs(psample[7] - avg_im); + psample += 8; + } + dev->rx_avg_re += 0.001f* ((float)summ_re - dev->rx_avg_re); + dev->rx_avg_im += 0.001f* ((float)summ_im - dev->rx_avg_im); + if ((dev->rx_avg_re > 0.0f) && (dev->rx_avg_im > 0.0f) && !dev->rx_direct_sampling) + { + float ratio = dev->rx_avg_re / dev->rx_avg_im; +#ifdef FOBOS_PRINT_DEBUG + if (dev->rx_buff_counter % 128 == 0) + { + printf_internal("re/im scale = %f\n", ratio); + } +#endif // FOBOS_PRINT_DEBUG + if ((ratio < 1.6f) && (ratio > 0.625f)) + { + dev->rx_scale_im = dev->rx_scale_re * ratio; + } + } +} +//============================================================================== #define FOBOS_SWAP_IQ_HW 1 void fobos_rx_convert_samples(struct fobos_dev_t * dev, void * data, size_t size, float * dst_samples) { @@ -1430,16 +1690,19 @@ void fobos_rx_convert_samples(struct fobos_dev_t * dev, void * data, size_t size int16_t * psample = (int16_t *)data; int rx_swap_iq = dev->rx_swap_iq ^ FOBOS_SWAP_IQ_HW; float sample = 0.0f; - float scale_re = dev->rx_scale_re; - float scale_im = dev->rx_scale_im; + float scale_re = 1.0f / 32786.0f; + float scale_im = 1.0f / 32786.0f; if (dev->rx_direct_sampling) { - scale_re = 1.0f / 32786.0f; - scale_im = 1.0f / 32786.0f; - rx_swap_iq = 0; + rx_swap_iq = FOBOS_SWAP_IQ_HW; } - float d; - float k = 0.001f; + else + { + fobos_rx_calibrate(dev, data, size / 16); + scale_re = dev->rx_scale_re; + scale_im = dev->rx_scale_im; + } + float k = 0.005f; float dc_re = dev->rx_dc_re; float dc_im = dev->rx_dc_im; float * dst_re = dst_samples; @@ -1455,40 +1718,34 @@ void fobos_rx_convert_samples(struct fobos_dev_t * dev, void * data, size_t size // 0 sample = (psample[0] & 0x3FFF) * scale_re; dc_re += k * (sample - dc_re); - dst_re[0] = sample - dc_re; - + sample -= dc_re; + dst_re[0] = sample; sample = (psample[1] & 0x3FFF) * scale_im; dc_im += k * (sample - dc_im); - dst_im[0] = sample - dc_im; - + sample -= dc_im; + dst_im[0] = sample; // 1 dst_re[2] = (psample[2] & 0x3FFF) * scale_re - dc_re; dst_im[2] = (psample[3] & 0x3FFF) * scale_im - dc_im; - // 2 dst_re[4] = (psample[4] & 0x3FFF) * scale_re - dc_re; dst_im[4] = (psample[5] & 0x3FFF) * scale_im - dc_im; - // 3 dst_re[6] = (psample[6] & 0x3FFF) * scale_re - dc_re; dst_im[6] = (psample[7] & 0x3FFF) * scale_im - dc_im; - // 4 dst_re[8] = (psample[8] & 0x3FFF) * scale_re - dc_re; dst_im[8] = (psample[9] & 0x3FFF) * scale_im - dc_im; - // 5 dst_re[10] = (psample[10] & 0x3FFF) * scale_re - dc_re; dst_im[10] = (psample[11] & 0x3FFF) * scale_im - dc_im; - // 6 dst_re[12] = (psample[12] & 0x3FFF) * scale_re - dc_re; dst_im[12] = (psample[13] & 0x3FFF) * scale_im - dc_im; - // 7 dst_re[14] = (psample[14] & 0x3FFF) * scale_re - dc_re; dst_im[14] = (psample[15] & 0x3FFF) * scale_im - dc_im; - + // dst_re += 16; dst_im += 16; psample += 16; @@ -1497,157 +1754,6 @@ void fobos_rx_convert_samples(struct fobos_dev_t * dev, void * data, size_t size dev->rx_dc_im = dc_im; } //============================================================================== -void fobos_rx_proceed_calibration(struct fobos_dev_t * dev, void * data, uint32_t size) -{ -#ifdef FOBOS_PRINT_DEBUG - printf_internal("%s(%d)\n", __FUNCTION__, size); -#endif // FOBOS_PRINT_DEBUG - size_t complex_samples_count = size / 4; - - int64_t summ_re = 0ll; - int64_t summ_im = 0ll; - int16_t * psample = (int16_t *)data; - float * dst_re = dev->rx_buff; - float * dst_im = dev->rx_buff + 1; - for (size_t i = 0; i < complex_samples_count; i++) - { - int16_t re = *psample; - re &= 0x3FFF; - *dst_re = re; - summ_re += re; - dst_re += 2; - psample++; - int16_t im = *psample; - im &= 0x3FFF; - *dst_im = im; - summ_im += im; - dst_im += 2; - psample++; - } - float dc_re = (float)summ_re / (float)complex_samples_count; - float dc_im = (float)summ_im / (float)complex_samples_count; - - psample = (int16_t *)data; - dst_re = dev->rx_buff; - dst_im = dev->rx_buff + 1; - double avg_abs_re = 0.0; - double avg_abs_im = 0.0; - for (size_t i = 0; i < complex_samples_count; i++) - { - *dst_re -= dc_re; - float re = fabsf(*dst_re); - dst_re += 2; - *dst_im -= dc_im; - float im = fabsf(*dst_im); - dst_im += 2; - avg_abs_re += re; - avg_abs_im += im; - } - - if ((avg_abs_re > 0.0f) && (avg_abs_im > 0.0f)) - { - avg_abs_re /= (double)complex_samples_count; - avg_abs_im /= (double)complex_samples_count; - float scale_re = 1.0f / 32786.0f; - float scale_im = scale_re * avg_abs_re / avg_abs_im; -#ifdef FOBOS_PRINT_DEBUG - printf_internal("[%d] im/re scale = %f\n", dev->rx_calibration_pos, scale_im / scale_re); -#endif // FOBOS_PRINT_DEBUG - if (dev->rx_calibration_pos == 0) - { - dev->rx_scale_re = scale_re; - dev->rx_scale_im = scale_im; - } - else - { - float k = 0.1f; - dev->rx_scale_re += k * (scale_re - dev->rx_scale_re); - dev->rx_scale_im += k * (scale_im - dev->rx_scale_im); - } - } -} -//============================================================================== -int fobos_rx_set_calibration(struct fobos_dev_t * dev, int state) -{ - int result = fobos_check(dev); - if (result != FOBOS_ERR_OK) - { - return result; - } - if (dev->rx_calibration_state != state) - { - switch (state) - { - case 0: - { - dev->rx_calibration_state = 0; - dev->rx_calibration_pos = 0; - } - break; - - case 1: // "remove dc" calibration state - { - dev->rx_calibration_state = 1; - dev->rx_calibration_pos = 0; - if (dev->rx_direct_sampling) - { - // turn on lpf - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A0); - bitclear(dev->dev_gpo, FOBOS_DEV_LPF_A1); - if (dev->rx_lpf_idx & 1) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A1); - } - if (dev->rx_lpf_idx & 2) - { - bitset(dev->dev_gpo, FOBOS_DEV_LPF_A0); - } - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - // enable clocks - fobos_rffc507x_clock(dev, 1); - fobos_max2830_clock(dev, 1); - // enable rffc507x - fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x15], 14, 14, 1); // enbl = 1 - fobos_rffc507x_commit(dev, 0); - } - // shut down both lnas - bitclear(dev->dev_gpo, FOBOS_DEV_LNA_LP_SHD); - bitclear(dev->dev_gpo, FOBOS_DEV_LNA_HP_SHD); - // set_if_filter(high); - bitclear(dev->dev_gpo, FOBOS_DEV_IF_V1); - bitset(dev->dev_gpo, FOBOS_DEV_IF_V2); - // turn on max2830 ant1 (main) input, turn off ant2 (aux) input - bitclear(dev->dev_gpo, FOBOS_MAX2830_ANTSEL); - // commit dev_gpo value - fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - // set frequency direct to max2830 - fobos_max2830_set_frequency(dev, 2400000000.0, 0); - // disable rffc507x - fobos_rffc507x_register_modify(&dev->rffc507x_registers_local[0x15], 14, 14, 0); // enbl = 0 - fobos_rffc507x_commit(dev, 0); - // set frequency direct rffc507x - fobos_rffc507x_set_lo_frequency(dev, 2401, 0); - } - break; - case 2: - { - double f = dev->rx_frequency; - dev->rx_frequency = 0.0; - dev->rx_frequency_band = 0; - fobos_rx_set_frequency(dev, f, 0); - if (dev->rx_direct_sampling) - { - dev->rx_direct_sampling = 0; - fobos_rx_set_direct_sampling(dev, 1); - } - dev->rx_calibration_state = 2; - } - break; - } - } - return result; -} -//============================================================================== int fobos_alloc_buffers(struct fobos_dev_t *dev) { unsigned int i; @@ -1777,30 +1883,18 @@ static void LIBUSB_CALL _libusb_callback(struct libusb_transfer *transfer) { if (transfer->actual_length == (int)dev->transfer_buf_size) { + //printf_internal("."); dev->rx_buff_counter++; - if ((dev->rx_calibration_state == 1) && (dev->rx_calibration_pos < 4)) - { - fobos_rx_proceed_calibration(dev, transfer->buffer, transfer->actual_length); - dev->rx_calibration_pos++; - } - else + fobos_rx_convert_samples(dev, transfer->buffer, transfer->actual_length, dev->rx_buff); + size_t complex_samples_count = transfer->actual_length / 4; + if (dev->rx_cb) { - //ULONGLONG t0, t1; - //QueryPerformanceCounter(&t0); - fobos_rx_convert_samples(dev, transfer->buffer, transfer->actual_length, dev->rx_buff); - size_t complex_samples_count = transfer->actual_length / 4; - if (dev->rx_cb) - { - dev->rx_cb(dev->rx_buff, complex_samples_count, dev->rx_cb_ctx); - } - //QueryPerformanceCounter(&t1); - //double dt = (t1 - t0); - //printf("%f\n", dt); + dev->rx_cb(dev->rx_buff, complex_samples_count, dev->rx_cb_ctx); } } else { - printf_internal("E");- + printf_internal("E"); dev->rx_failures++; } libusb_submit_transfer(transfer); @@ -1850,8 +1944,8 @@ int fobos_rx_read_async(struct fobos_dev_t * dev, fobos_rx_cb_t cb, void *ctx, u dev->rx_buff_counter = 0; dev->rx_cb = cb; dev->rx_cb_ctx = ctx; - dev->rx_calibration_state = 0; - fobos_rx_set_calibration(dev, 1); // start calibration + dev->rx_avg_re = 0.0f; + dev->rx_avg_im = 0.0f; if (buf_count == 0) { buf_count = FOBOS_DEF_BUF_COUNT; @@ -1909,14 +2003,7 @@ int fobos_rx_read_async(struct fobos_dev_t * dev, fobos_rx_cb_t cb, void *ctx, u dev->rx_async_status = FOBOS_RUNNING; while (FOBOS_IDDLE != dev->rx_async_status) { - if (dev->rx_calibration_state == 1) - { - if (dev->rx_calibration_pos >= 4) - { - fobos_rx_set_calibration(dev, 2); - } - } - //printf_internal("."); + //printf_internal("X"); result = libusb_handle_events_timeout_completed(dev->libusb_ctx, &tv1, &dev->rx_async_cancel); if (result < 0) { @@ -1945,11 +2032,14 @@ int fobos_rx_read_async(struct fobos_dev_t * dev, fobos_rx_cb_t cb, void *ctx, u continue; if (LIBUSB_TRANSFER_CANCELLED != dev->transfer[i]->status) { + struct libusb_transfer * xf = dev->transfer[i]; + //printf_internal(" ~%08x", xf->flags); + result = libusb_cancel_transfer(dev->transfer[i]); libusb_handle_events_timeout_completed(dev->libusb_ctx, &tvx, NULL); if (result < 0) { - printf_internal("libusb_cancel_transfer[%d] returned: %d\n", i, result); + printf_internal("libusb_cancel_transfer[%d] returned: %d %s\n", i, result, libusb_error_name(result)); continue; } dev->rx_async_status = FOBOS_CANCELING; @@ -1993,7 +2083,6 @@ int fobos_rx_cancel_async(struct fobos_dev_t * dev) //============================================================================== int fobos_rx_start_sync(struct fobos_dev_t * dev, uint32_t buf_length) { - int calib_count = 4; int i = 0; int actual = 0; int result = fobos_check(dev); @@ -2028,28 +2117,6 @@ int fobos_rx_start_sync(struct fobos_dev_t * dev, uint32_t buf_length) fobos_fx3_command(dev, 0xE1, 1, 0); // start fx bitclear(dev->dev_gpo, FOBOS_DEV_ADC_SDI); fobos_rx_set_dev_gpo(dev, dev->dev_gpo); - dev->rx_calibration_state = 0; - fobos_rx_set_calibration(dev, 1); // start calibration - for (i = 0; i < calib_count; i++) - { - dev->rx_calibration_pos = i; - result = libusb_bulk_transfer( - dev->libusb_devh, - LIBUSB_BULK_IN_ENDPOINT, - dev->rx_sync_buf, - dev->transfer_buf_size, - &actual, - LIBUSB_BULK_TIMEOUT); - if (result == 0) - { - fobos_rx_proceed_calibration(dev, dev->rx_sync_buf, dev->transfer_buf_size); - } - else - { - break; - } - } - fobos_rx_set_calibration(dev, 2); // end calibration dev->rx_sync_started = 1; return FOBOS_ERR_OK; } diff --git a/fobos/fobos.h b/fobos/fobos.h index 09d3d4b..5195749 100644 --- a/fobos/fobos.h +++ b/fobos/fobos.h @@ -10,6 +10,9 @@ // 2024.03.21 // 2024.04.08 // 2024.05.29 - sync mode (fobos_rx_start_sync, fobos_rx_read_sync, fobos_rx_stop_sync) +// 2024.06.21 - update fow hw rev.3.0.0 +// 2024.07.08 - new band plan +// 2024.07.20 - IQ calibration on the fly //============================================================================== #ifndef LIB_FOBOS_H #include @@ -57,26 +60,24 @@ API_EXPORT int CALL_CONV fobos_rx_set_frequency(struct fobos_dev_t * dev, double API_EXPORT int CALL_CONV fobos_rx_set_direct_sampling(struct fobos_dev_t * dev, unsigned int enabled); // low noise amplifier 0..2 API_EXPORT int CALL_CONV fobos_rx_set_lna_gain(struct fobos_dev_t * dev, unsigned int value); -// variable gain amplifier 0..31 +// variable gain amplifier 0..15 API_EXPORT int CALL_CONV fobos_rx_set_vga_gain(struct fobos_dev_t * dev, unsigned int value); // get available sample rate list API_EXPORT int CALL_CONV fobos_rx_get_samplerates(struct fobos_dev_t * dev, double * values, unsigned int * count); // set sample rate nearest to specified API_EXPORT int CALL_CONV fobos_rx_set_samplerate(struct fobos_dev_t * dev, double value, double * actual); -// set hardware low pass filter (0 .. 2) -API_EXPORT int CALL_CONV fobos_rx_set_lpf(struct fobos_dev_t * dev, int value); // statr the iq rx streaming API_EXPORT int CALL_CONV fobos_rx_read_async(struct fobos_dev_t * dev, fobos_rx_cb_t cb, void *ctx, uint32_t buf_count, uint32_t buf_length); // stop the iq rx streaming API_EXPORT int CALL_CONV fobos_rx_cancel_async(struct fobos_dev_t * dev); -// set user general purpose output bits (0x00 .. 0x3f) +// set user general purpose output bits (0x00 .. 0xFF) API_EXPORT int CALL_CONV fobos_rx_set_user_gpo(struct fobos_dev_t * dev, uint8_t value); // clock source: 0 - internal (default), 1- extrnal API_EXPORT int CALL_CONV fobos_rx_set_clk_source(struct fobos_dev_t * dev, int value); // explicitly set the max2830 frequency, Hz (23500000000 .. 2550000000) API_EXPORT int CALL_CONV fobos_max2830_set_frequency(struct fobos_dev_t * dev, double value, double * actual); -// explicitly set rffc507x frequency, MHz (25 .. 5400) -API_EXPORT int CALL_CONV fobos_rffc507x_set_lo_frequency(struct fobos_dev_t * dev, int lo_freq_mhz, uint64_t * tune_freq_hz); +// explicitly set rffc507x frequency, Hz (25000000 .. 5400000000) +API_EXPORT int CALL_CONV fobos_rffc507x_set_lo_frequency_hz(struct fobos_dev_t * dev, uint64_t lo_freq, uint64_t * tune_freq_hz); // start synchronous rx mode API_EXPORT int CALL_CONV fobos_rx_start_sync(struct fobos_dev_t * dev, uint32_t buf_length); // read samples in synchronous rx mode diff --git a/libfobos.pc.in b/libfobos.pc.in index c0e66a7..37a9144 100644 --- a/libfobos.pc.in +++ b/libfobos.pc.in @@ -7,5 +7,5 @@ Name: RigExpert Fobos SDR Library Description: C Utility Library Version: @LIBVER@ Cflags: -I${includedir}/ @LIBFOBOS_PC_CFLAGS@ -Libs: -L${libdir} -lfobos -lusb-1.0 -Libs.private: @LIBFOBOS_PC_LIBS@ +Libs: -L${libdir} -lfobos +Libs.private: -lusb-1.0 @LIBFOBOS_PC_LIBS@ diff --git a/showimg/Screenshot002.png b/showimg/Screenshot002.png index 84913383f862f2564d16d007430ea61205c17ab4..e300611140a2d4c9af1d3a101d646e3272a569f3 100644 GIT binary patch literal 58190 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
5@=%YOgcHXTWdNf$R!tdxTA6qrwepK73 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 literal 78864 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≥A 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 literal 30573 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

X*4+demO)1+{tM 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 s0_U4*& #include "wav_file.h" -#define _CRT_SECURE_NO_WARNINGS //============================================================================== struct wav_file_t * wav_file_create(void) { @@ -89,7 +88,7 @@ int wav_file_write_header(struct wav_file_t * ctx) } uint16_t b16; uint32_t b32; - long pos = ftell(ctx->file); + size_t pos = ftell(ctx->file); fseek(ctx->file, 0, SEEK_SET); //============================================================================= char ChunkID[4] = { 'R', 'I', 'F', 'F' }; @@ -254,13 +253,13 @@ int wav_file_read_header(struct wav_file_t * ctx) return result; } //============================================================================== -int wav_file_write_data(struct wav_file_t * ctx, void * data, size_t size) +size_t wav_file_write_data(struct wav_file_t * ctx, void * data, size_t size) { if (ctx->file) { - int wrote = fwrite(data, size, 1, ctx->file) * size; + size_t wrote = fwrite(data, size, 1, ctx->file) * size; ctx->file_size = ftell(ctx->file); - ctx->samples_count += (size / ctx->bytes_per_sample); + ctx->samples_count += (size / (size_t)ctx->bytes_per_sample); ctx->sample_groups_count = ctx->samples_count * ctx->channels_count; return wrote; } @@ -270,7 +269,7 @@ int wav_file_write_data(struct wav_file_t * ctx, void * data, size_t size) } } //============================================================================== -int wav_file_read_data(struct wav_file_t * ctx, void * data, size_t size) +size_t wav_file_read_data(struct wav_file_t * ctx, void * data, size_t size) { int Result = 0; if (ctx->file) @@ -280,7 +279,7 @@ int wav_file_read_data(struct wav_file_t * ctx, void * data, size_t size) return Result; } //============================================================================== -int wav_file_samples_to_data(struct wav_file_t * ctx, const float * samples, size_t count, char * data, size_t * size) +size_t wav_file_samples_to_data(struct wav_file_t * ctx, const float * samples, size_t count, char * data, size_t * size) { size_t data_size = 0; size_t i; @@ -398,7 +397,7 @@ int wav_file_samples_to_data(struct wav_file_t * ctx, const float * samples, siz return data_size; } //============================================================================== -int wav_file_data_to_samples(struct wav_file_t * ctx, const char * data, size_t size, float * samples, size_t * count) +size_t wav_file_data_to_samples(struct wav_file_t * ctx, const char * data, size_t size, float * samples, size_t * count) { size_t samples_count = 0; size_t i; diff --git a/wav/wav_file.h b/wav/wav_file.h index a939035..f7f73a5 100644 --- a/wav/wav_file.h +++ b/wav/wav_file.h @@ -37,10 +37,10 @@ int wav_file_open(struct wav_file_t * ctx, const char * file_name, const char * int wav_file_close(struct wav_file_t * ctx); int wav_file_write_header(struct wav_file_t * ctx); int wav_file_read_header(struct wav_file_t * ctx); -int wav_file_write_data(struct wav_file_t * ctx, void * data, size_t size); -int wav_file_read_data(struct wav_file_t * ctx, void * data, size_t size); +size_t wav_file_write_data(struct wav_file_t * ctx, void * data, size_t size); +size_t wav_file_read_data(struct wav_file_t * ctx, void * data, size_t size); //int wav_file_write_samples(struct wav_file_t * ctx, const char * data, size_t size); //int wav_file_read_samples(struct wav_file_t * ctx, const char * data, size_t size); -int wav_file_samples_to_data(struct wav_file_t * ctx, const float * samples, size_t count, char * data, size_t * size); -int wav_file_data_to_samples(struct wav_file_t * ctx, const char * data, size_t size, float * samples, size_t * count); +size_t wav_file_samples_to_data(struct wav_file_t * ctx, const float * samples, size_t count, char * data, size_t * size); +size_t wav_file_data_to_samples(struct wav_file_t * ctx, const char * data, size_t size, float * samples, size_t * count); #endif // __WAV_FILE_H__