Merge branch 'develop' into radioberry
This commit is contained in:
commit
379e39aa3e
@ -20,6 +20,11 @@
|
|||||||
[the js8py library](https://github.com/jketterl/js8py))
|
[the js8py library](https://github.com/jketterl/js8py))
|
||||||
- Reorganization of the frontend demodulator code
|
- Reorganization of the frontend demodulator code
|
||||||
- Improve receiver load time by concatenating javascript assets
|
- Improve receiver load time by concatenating javascript assets
|
||||||
|
- Docker images migrated to Debian slim images; This was necessary to allow the use of function multiversioning in
|
||||||
|
csdr and owrx_connector to allow the images to run on a wider range of CPUs
|
||||||
|
- Docker containers have been updated to include the SDRplay driver version 3
|
||||||
|
- HackRF support is now based on SoapyHackRF
|
||||||
|
- Removed sdr.hu server listing support since the site has been shut down
|
||||||
|
|
||||||
**0.18.0**
|
**0.18.0**
|
||||||
- Support for SoapyRemote
|
- Support for SoapyRemote
|
||||||
|
70
bands.json
70
bands.json
@ -199,5 +199,75 @@
|
|||||||
"name": "3cm",
|
"name": "3cm",
|
||||||
"lower_bound": 10000000000,
|
"lower_bound": 10000000000,
|
||||||
"upper_bound": 10500000000
|
"upper_bound": 10500000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "120m Broadcast",
|
||||||
|
"lower_bound": 2300000,
|
||||||
|
"upper_bound": 2495000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "90m Broadcast",
|
||||||
|
"lower_bound": 3200000,
|
||||||
|
"upper_bound": 3400000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "75m Broadcast",
|
||||||
|
"lower_bound": 3900000,
|
||||||
|
"upper_bound": 4000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "60m Broadcast",
|
||||||
|
"lower_bound": 4750000,
|
||||||
|
"upper_bound": 4995000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "49m Broadcast",
|
||||||
|
"lower_bound": 5900000,
|
||||||
|
"upper_bound": 6200000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "41m Broadcast",
|
||||||
|
"lower_bound": 7200000,
|
||||||
|
"upper_bound": 7450000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "31m Broadcast",
|
||||||
|
"lower_bound": 9400000,
|
||||||
|
"upper_bound": 9900000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "25m Broadcast",
|
||||||
|
"lower_bound": 11600000,
|
||||||
|
"upper_bound": 12100000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "22m Broadcast",
|
||||||
|
"lower_bound": 13570000,
|
||||||
|
"upper_bound": 13870000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "19m Broadcast",
|
||||||
|
"lower_bound": 15100000,
|
||||||
|
"upper_bound": 15830000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "16m Broadcast",
|
||||||
|
"lower_bound": 17480000,
|
||||||
|
"upper_bound": 17900000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "15m Broadcast",
|
||||||
|
"lower_bound": 18900000,
|
||||||
|
"upper_bound": 19020000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "13m Broadcast",
|
||||||
|
"lower_bound": 21450000,
|
||||||
|
"upper_bound": 21850000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "11m Broadcast",
|
||||||
|
"lower_bound": 25670000,
|
||||||
|
"upper_bound": 26100000
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -49,23 +49,16 @@ receiver_asl = 200
|
|||||||
receiver_admin = "example@example.com"
|
receiver_admin = "example@example.com"
|
||||||
receiver_gps = {"lat": 47.000000, "lon": 19.000000}
|
receiver_gps = {"lat": 47.000000, "lon": 19.000000}
|
||||||
photo_title = "Panorama of Budapest from Schönherz Zoltán Dormitory"
|
photo_title = "Panorama of Budapest from Schönherz Zoltán Dormitory"
|
||||||
|
# photo_desc allows you to put pretty much any HTML you like into the receiver description.
|
||||||
|
# The lines below should give you some examples of what's possible.
|
||||||
photo_desc = """
|
photo_desc = """
|
||||||
You can add your own background photo and receiver information.<br />
|
You can add your own background photo and receiver information.<br />
|
||||||
Receiver is operated by: <a href="mailto:%[RX_ADMIN]">%[RX_ADMIN]</a><br/>
|
Receiver is operated by: <a href="mailto:openwebrx@localhost" target="_blank">Receiver Operator</a><br/>
|
||||||
Device: %[RX_DEVICE]<br />
|
Device: Receiver Device<br />
|
||||||
Antenna: %[RX_ANT]<br />
|
Antenna: Receiver Antenna<br />
|
||||||
Website: <a href="http://localhost" target="_blank">http://localhost</a>
|
Website: <a href="http://localhost" target="_blank">http://localhost</a>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# ==== sdr.hu listing ====
|
|
||||||
# If you want your ham receiver to be listed publicly on sdr.hu, then take the following steps:
|
|
||||||
# 1. Register at: http://sdr.hu/register
|
|
||||||
# 2. You will get an unique key by email. Copy it and paste here:
|
|
||||||
sdrhu_key = ""
|
|
||||||
# 3. Set this setting to True to enable listing:
|
|
||||||
sdrhu_public_listing = False
|
|
||||||
server_hostname = "localhost"
|
|
||||||
|
|
||||||
# ==== DSP/RX settings ====
|
# ==== DSP/RX settings ====
|
||||||
fft_fps = 9
|
fft_fps = 9
|
||||||
fft_size = 4096 # Should be power of 2
|
fft_size = 4096 # Should be power of 2
|
||||||
|
@ -241,7 +241,7 @@ class dsp(object):
|
|||||||
if self.fft_compression == "adpcm":
|
if self.fft_compression == "adpcm":
|
||||||
chain += ["csdr compress_fft_adpcm_f_u8 {fft_size}"]
|
chain += ["csdr compress_fft_adpcm_f_u8 {fft_size}"]
|
||||||
return chain
|
return chain
|
||||||
chain += ["csdr shift_addition_cc --fifo {shift_pipe}"]
|
chain += ["csdr shift_addfast_cc --fifo {shift_pipe}"]
|
||||||
if self.decimation > 1:
|
if self.decimation > 1:
|
||||||
chain += ["csdr fir_decimate_cc {decimation} {ddc_transition_bw} HAMMING"]
|
chain += ["csdr fir_decimate_cc {decimation} {ddc_transition_bw} HAMMING"]
|
||||||
chain += ["csdr bandpass_fir_fft_cc --fifo {bpf_pipe} {bpf_transition_bw} HAMMING"]
|
chain += ["csdr bandpass_fir_fft_cc --fifo {bpf_pipe} {bpf_transition_bw} HAMMING"]
|
||||||
@ -331,7 +331,7 @@ class dsp(object):
|
|||||||
return chain
|
return chain
|
||||||
elif which == "bpsk31" or which == "bpsk63":
|
elif which == "bpsk31" or which == "bpsk63":
|
||||||
return chain + [
|
return chain + [
|
||||||
"csdr shift_addition_cc --fifo {secondary_shift_pipe}",
|
"csdr shift_addfast_cc --fifo {secondary_shift_pipe}",
|
||||||
"csdr bandpass_fir_fft_cc -{secondary_bpf_cutoff} {secondary_bpf_cutoff} {secondary_bpf_cutoff}",
|
"csdr bandpass_fir_fft_cc -{secondary_bpf_cutoff} {secondary_bpf_cutoff} {secondary_bpf_cutoff}",
|
||||||
"csdr simple_agc_cc 0.001 0.5",
|
"csdr simple_agc_cc 0.001 0.5",
|
||||||
"csdr timing_recovery_cc GARDNER {secondary_samples_per_bits} 0.5 2 --add_q",
|
"csdr timing_recovery_cc GARDNER {secondary_samples_per_bits} 0.5 2 --add_q",
|
||||||
|
2
debian/changelog
vendored
2
debian/changelog
vendored
@ -23,6 +23,8 @@ openwebrx (0.19.0) UNRELEASED; urgency=low
|
|||||||
installation of js8call and the js8py library)
|
installation of js8call and the js8py library)
|
||||||
* Reorganization of the frontend demodulator code
|
* Reorganization of the frontend demodulator code
|
||||||
* Improve receiver load time by concatenating javascript assets
|
* Improve receiver load time by concatenating javascript assets
|
||||||
|
* HackRF support is now based on SoapyHackRF
|
||||||
|
* Removed sdr.hu server listing support since the site has been shut down
|
||||||
|
|
||||||
-- Jakob Ketterl <jakob.ketterl@gmx.de> Thu, 20 Feb 2020 21:01:00 +0000
|
-- Jakob Ketterl <jakob.ketterl@gmx.de> Thu, 20 Feb 2020 21:01:00 +0000
|
||||||
|
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
FROM alpine:3.10
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN apk add --no-cache bash
|
ADD docker/files/js8call/js8call-hamlib.patch /
|
||||||
|
ADD docker/files/wsjtx/*.patch /
|
||||||
RUN ln -s /usr/local/lib /usr/local/lib64
|
|
||||||
|
|
||||||
ADD docker/scripts/direwolf-1.5.patch /
|
|
||||||
ADD docker/scripts/install-dependencies.sh /
|
ADD docker/scripts/install-dependencies.sh /
|
||||||
RUN /install-dependencies.sh && \
|
RUN /install-dependencies.sh && \
|
||||||
rm /install-dependencies.sh
|
rm /install-dependencies.sh && \
|
||||||
|
rm /*.patch
|
||||||
|
|
||||||
|
ENTRYPOINT ["/init"]
|
||||||
|
|
||||||
WORKDIR /opt/openwebrx
|
WORKDIR /opt/openwebrx
|
||||||
|
|
||||||
VOLUME /etc/openwebrx
|
VOLUME /etc/openwebrx
|
||||||
|
|
||||||
ENTRYPOINT [ "/opt/openwebrx/docker/scripts/run.sh" ]
|
CMD [ "/opt/openwebrx/docker/scripts/run.sh" ]
|
||||||
|
|
||||||
EXPOSE 8073
|
EXPOSE 8073
|
||||||
|
@ -2,11 +2,11 @@ ARG ARCHTAG
|
|||||||
FROM openwebrx-base:$ARCHTAG
|
FROM openwebrx-base:$ARCHTAG
|
||||||
|
|
||||||
ADD docker/scripts/install-dependencies-*.sh /
|
ADD docker/scripts/install-dependencies-*.sh /
|
||||||
ADD docker/scripts/install-lib.*.patch /
|
ADD docker/files/sdrplay/install-lib.*.patch /
|
||||||
|
|
||||||
RUN /install-dependencies-rtlsdr.sh &&\
|
RUN /install-dependencies-rtlsdr.sh &&\
|
||||||
/install-dependencies-hackrf.sh &&\
|
|
||||||
/install-dependencies-soapysdr.sh &&\
|
/install-dependencies-soapysdr.sh &&\
|
||||||
|
/install-dependencies-hackrf.sh &&\
|
||||||
/install-dependencies-sdrplay.sh &&\
|
/install-dependencies-sdrplay.sh &&\
|
||||||
/install-dependencies-airspy.sh &&\
|
/install-dependencies-airspy.sh &&\
|
||||||
/install-dependencies-rtlsdr-soapy.sh &&\
|
/install-dependencies-rtlsdr-soapy.sh &&\
|
||||||
@ -21,4 +21,6 @@ ADD docker/scripts/install-connectors.sh /
|
|||||||
RUN /install-connectors.sh &&\
|
RUN /install-connectors.sh &&\
|
||||||
rm /install-connectors.sh
|
rm /install-connectors.sh
|
||||||
|
|
||||||
|
ADD docker/files/services/sdrplay /etc/services.d/sdrplay
|
||||||
|
|
||||||
ADD . /opt/openwebrx
|
ADD . /opt/openwebrx
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
ARG ARCHTAG
|
ARG ARCHTAG
|
||||||
FROM openwebrx-base:$ARCHTAG
|
FROM openwebrx-soapysdr-base:$ARCHTAG
|
||||||
|
|
||||||
ADD docker/scripts/install-dependencies-hackrf.sh /
|
ADD docker/scripts/install-dependencies-hackrf.sh /
|
||||||
RUN /install-dependencies-hackrf.sh &&\
|
RUN /install-dependencies-hackrf.sh &&\
|
||||||
|
@ -2,9 +2,11 @@ ARG ARCHTAG
|
|||||||
FROM openwebrx-soapysdr-base:$ARCHTAG
|
FROM openwebrx-soapysdr-base:$ARCHTAG
|
||||||
|
|
||||||
ADD docker/scripts/install-dependencies-sdrplay.sh /
|
ADD docker/scripts/install-dependencies-sdrplay.sh /
|
||||||
ADD docker/scripts/install-lib.*.patch /
|
ADD docker/files/sdrplay/install-lib.*.patch /
|
||||||
RUN /install-dependencies-sdrplay.sh &&\
|
RUN /install-dependencies-sdrplay.sh &&\
|
||||||
rm /install-dependencies-sdrplay.sh &&\
|
rm /install-dependencies-sdrplay.sh &&\
|
||||||
rm /install-lib.*.patch
|
rm /install-lib.*.patch
|
||||||
|
|
||||||
|
ADD docker/files/services/sdrplay /etc/services.d/sdrplay
|
||||||
|
|
||||||
ADD . /opt/openwebrx
|
ADD . /opt/openwebrx
|
||||||
|
150
docker/files/js8call/js8call-hamlib.patch
Normal file
150
docker/files/js8call/js8call-hamlib.patch
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
diff -ur js8call-orig/CMake/Modules/Findhamlib.cmake js8call/CMake/Modules/Findhamlib.cmake
|
||||||
|
--- js8call-orig/CMake/Modules/Findhamlib.cmake 2020-05-28 00:10:13.386429366 +0200
|
||||||
|
+++ js8call/CMake/Modules/Findhamlib.cmake 2020-05-28 00:10:34.339623106 +0200
|
||||||
|
@@ -78,4 +78,4 @@
|
||||||
|
# Handle the QUIETLY and REQUIRED arguments and set HAMLIB_FOUND to
|
||||||
|
# TRUE if all listed variables are TRUE
|
||||||
|
include (FindPackageHandleStandardArgs)
|
||||||
|
-find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARIES hamlib_LIBRARY_DIRS)
|
||||||
|
+find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARIES)
|
||||||
|
diff -ur js8call-orig/CMakeLists.txt js8call/CMakeLists.txt
|
||||||
|
--- js8call-orig/CMakeLists.txt 2020-05-28 00:10:13.393095987 +0200
|
||||||
|
+++ js8call/CMakeLists.txt 2020-05-28 00:12:09.925653037 +0200
|
||||||
|
@@ -683,7 +683,7 @@
|
||||||
|
#
|
||||||
|
# libhamlib setup
|
||||||
|
#
|
||||||
|
-set (hamlib_STATIC 1)
|
||||||
|
+set (hamlib_STATIC 0)
|
||||||
|
find_package (hamlib 3 REQUIRED)
|
||||||
|
find_program (RIGCTL_EXE rigctl)
|
||||||
|
find_program (RIGCTLD_EXE rigctld)
|
||||||
|
@@ -1033,55 +1033,6 @@
|
||||||
|
target_link_libraries (js8 wsjt_fort wsjt_cxx Qt5::Core)
|
||||||
|
endif (${OPENMP_FOUND} OR APPLE)
|
||||||
|
|
||||||
|
-# build the main application
|
||||||
|
-add_executable (js8call MACOSX_BUNDLE
|
||||||
|
- ${sqlite3_CSRCS}
|
||||||
|
- ${wsjtx_CXXSRCS}
|
||||||
|
- ${wsjtx_GENUISRCS}
|
||||||
|
- wsjtx.rc
|
||||||
|
- ${WSJTX_ICON_FILE}
|
||||||
|
- ${wsjtx_RESOURCES_RCC}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-if (WSJT_CREATE_WINMAIN)
|
||||||
|
- set_target_properties (js8call PROPERTIES WIN32_EXECUTABLE ON)
|
||||||
|
-endif (WSJT_CREATE_WINMAIN)
|
||||||
|
-
|
||||||
|
-set_target_properties (js8call PROPERTIES
|
||||||
|
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Darwin/Info.plist.in"
|
||||||
|
- MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
|
||||||
|
- MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_VERSION ${wsjtx_VERSION}
|
||||||
|
- MACOSX_BUNDLE_SHORT_VERSION_STRING "v${wsjtx_VERSION}"
|
||||||
|
- MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${wsjtx_VERSION}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_EXECUTABLE_NAME "${PROJECT_NAME}"
|
||||||
|
- MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}"
|
||||||
|
- MACOSX_BUNDLE_GUI_IDENTIFIER "org.kn4crd.js8call"
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-target_include_directories (js8call PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||||
|
-if (APPLE)
|
||||||
|
- target_link_libraries (js8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||||
|
-else ()
|
||||||
|
- target_link_libraries (js8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||||
|
- if (OpenMP_C_FLAGS)
|
||||||
|
- set_target_properties (js8call PROPERTIES
|
||||||
|
- COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||||
|
- LINK_FLAGS "${OpenMP_C_FLAGS}"
|
||||||
|
- )
|
||||||
|
- endif ()
|
||||||
|
- set_target_properties (js8call PROPERTIES
|
||||||
|
- Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
|
||||||
|
- )
|
||||||
|
- if (WIN32)
|
||||||
|
- set_target_properties (js8call PROPERTIES
|
||||||
|
- LINK_FLAGS -Wl,--stack,16777216
|
||||||
|
- )
|
||||||
|
- endif ()
|
||||||
|
-endif ()
|
||||||
|
-qt5_use_modules (js8call SerialPort) # not sure why the interface link library syntax above doesn't work
|
||||||
|
-
|
||||||
|
# if (UNIX)
|
||||||
|
# if (NOT WSJT_SKIP_MANPAGES)
|
||||||
|
# add_subdirectory (manpages)
|
||||||
|
@@ -1097,38 +1048,10 @@
|
||||||
|
#
|
||||||
|
# installation
|
||||||
|
#
|
||||||
|
-install (TARGETS js8call
|
||||||
|
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
- BUNDLE DESTINATION . COMPONENT runtime
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
install (TARGETS js8 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
)
|
||||||
|
|
||||||
|
-install (PROGRAMS
|
||||||
|
- ${RIGCTL_EXE}
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- RENAME rigctl-local${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (PROGRAMS
|
||||||
|
- ${RIGCTLD_EXE}
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- RENAME rigctld-local${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (FILES
|
||||||
|
- README
|
||||||
|
- COPYING
|
||||||
|
- INSTALL
|
||||||
|
- INSTALL-WSJTX
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
install (FILES
|
||||||
|
contrib/Ephemeris/JPLEPH
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}
|
||||||
|
@@ -1182,32 +1105,6 @@
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/wsjtx_config.h"
|
||||||
|
)
|
||||||
|
|
||||||
|
-
|
||||||
|
-if (NOT WIN32 AND NOT APPLE)
|
||||||
|
- # install a desktop file so js8call appears in the application start
|
||||||
|
- # menu with an icon
|
||||||
|
- install (
|
||||||
|
- FILES js8call.desktop
|
||||||
|
- DESTINATION /usr/share/applications
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- )
|
||||||
|
- install (
|
||||||
|
- FILES icons/Unix/js8call_icon.png
|
||||||
|
- DESTINATION /usr/share/pixmaps
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
- IF("${CMAKE_INSTALL_PREFIX}" STREQUAL "/opt/js8call")
|
||||||
|
- execute_process(COMMAND ln -s /opt/js8call/bin/js8call ljs8call)
|
||||||
|
-
|
||||||
|
- install(FILES
|
||||||
|
- ${CMAKE_BINARY_DIR}/ljs8call DESTINATION /usr/bin/ RENAME js8call
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- )
|
||||||
|
- endif()
|
||||||
|
-endif (NOT WIN32 AND NOT APPLE)
|
||||||
|
-
|
||||||
|
-
|
||||||
|
#
|
||||||
|
# bundle fixup only done in Release or MinSizeRel configurations
|
||||||
|
#
|
||||||
|
Only in js8call/: .idea
|
23
docker/files/sdrplay/install-lib.aarch64.patch
Normal file
23
docker/files/sdrplay/install-lib.aarch64.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
diff -ur sdrplay-orig/install_lib.sh sdrplay/install_lib.sh
|
||||||
|
--- sdrplay-orig/install_lib.sh 2020-05-24 14:30:06.022483867 +0000
|
||||||
|
+++ sdrplay/install_lib.sh 2020-05-24 14:30:49.093435726 +0000
|
||||||
|
@@ -4,19 +4,6 @@
|
||||||
|
export MAJVERS="3"
|
||||||
|
|
||||||
|
echo "Installing SDRplay RSP API library ${VERS}..."
|
||||||
|
-read -p "Press RETURN to view the license agreement" ret
|
||||||
|
-
|
||||||
|
-more sdrplay_license.txt
|
||||||
|
-
|
||||||
|
-while true; do
|
||||||
|
- echo "Press y and RETURN to accept the license agreement and continue with"
|
||||||
|
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
||||||
|
- case $yn in
|
||||||
|
- [Yy]* ) break;;
|
||||||
|
- [Nn]* ) exit;;
|
||||||
|
- * ) echo "Please answer y or n";;
|
||||||
|
- esac
|
||||||
|
-done
|
||||||
|
|
||||||
|
export ARCH=`uname -m`
|
||||||
|
|
40
docker/files/sdrplay/install-lib.armv7l.patch
Normal file
40
docker/files/sdrplay/install-lib.armv7l.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
diff -ur sdrplay-orig/install_lib.sh sdrplay/install_lib.sh
|
||||||
|
--- sdrplay-orig/install_lib.sh 2020-05-24 14:13:04.561271707 +0000
|
||||||
|
+++ sdrplay/install_lib.sh 2020-05-24 14:16:20.068329040 +0000
|
||||||
|
@@ -4,19 +4,6 @@
|
||||||
|
MAJVERS="3"
|
||||||
|
|
||||||
|
echo "Installing SDRplay RSP API library ${VERS}..."
|
||||||
|
-read -p "Press RETURN to view the license agreement" ret
|
||||||
|
-
|
||||||
|
-more sdrplay_license.txt
|
||||||
|
-
|
||||||
|
-while true; do
|
||||||
|
- echo "Press y and RETURN to accept the license agreement and continue with"
|
||||||
|
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
||||||
|
- case $yn in
|
||||||
|
- [Yy]* ) break;;
|
||||||
|
- [Nn]* ) exit;;
|
||||||
|
- * ) echo "Please answer y or n";;
|
||||||
|
- esac
|
||||||
|
-done
|
||||||
|
|
||||||
|
ARCH=`uname -m`
|
||||||
|
|
||||||
|
@@ -141,16 +128,6 @@
|
||||||
|
echo "SDRplay API ${VERS} Installation Finished"
|
||||||
|
echo " "
|
||||||
|
|
||||||
|
-while true; do
|
||||||
|
- echo "Would you like to add SDRplay USB IDs to the local database for easier
|
||||||
|
-"
|
||||||
|
- read -p "identification in applications such as lsusb? [y/n] " yn
|
||||||
|
- case $yn in
|
||||||
|
- [Yy]* ) break;;
|
||||||
|
- [Nn]* ) exit;;
|
||||||
|
- * ) echo "Please answer y or n";;
|
||||||
|
- esac
|
||||||
|
-done
|
||||||
|
sudo cp scripts/sdrplay_usbids.sh ${INSTALLBINDIR}/.
|
||||||
|
sudo chmod 755 ${INSTALLBINDIR}/sdrplay_usbids.sh
|
||||||
|
sudo cp scripts/sdrplay_ids.txt ${INSTALLBINDIR}/.
|
39
docker/files/sdrplay/install-lib.x86_64.patch
Normal file
39
docker/files/sdrplay/install-lib.x86_64.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
diff -ur sdrplay-orig/install_lib.sh sdrplay/install_lib.sh
|
||||||
|
--- sdrplay-orig/install_lib.sh 2020-05-24 13:56:56.622000041 +0000
|
||||||
|
+++ sdrplay/install_lib.sh 2020-05-24 13:58:51.837801559 +0000
|
||||||
|
@@ -4,19 +4,6 @@
|
||||||
|
MAJVERS="3"
|
||||||
|
|
||||||
|
echo "Installing SDRplay RSP API library ${VERS}..."
|
||||||
|
-read -p "Press RETURN to view the license agreement" ret
|
||||||
|
-
|
||||||
|
-more sdrplay_license.txt
|
||||||
|
-
|
||||||
|
-while true; do
|
||||||
|
- echo "Press y and RETURN to accept the license agreement and continue with"
|
||||||
|
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
||||||
|
- case $yn in
|
||||||
|
- [Yy]* ) break;;
|
||||||
|
- [Nn]* ) exit;;
|
||||||
|
- * ) echo "Please answer y or n";;
|
||||||
|
- esac
|
||||||
|
-done
|
||||||
|
|
||||||
|
ARCH=`uname -m`
|
||||||
|
OSDIST="Unknown"
|
||||||
|
@@ -157,15 +144,6 @@
|
||||||
|
echo " "
|
||||||
|
echo "SDRplay API ${VERS} Installation Finished"
|
||||||
|
echo " "
|
||||||
|
-while true; do
|
||||||
|
- echo "Would you like to add SDRplay USB IDs to the local database for easier"
|
||||||
|
- read -p "identification in applications such as lsusb? [y/n] " yn
|
||||||
|
- case $yn in
|
||||||
|
- [Yy]* ) break;;
|
||||||
|
- [Nn]* ) exit;;
|
||||||
|
- * ) echo "Please answer y or n";;
|
||||||
|
- esac
|
||||||
|
-done
|
||||||
|
sudo cp scripts/sdrplay_usbids.sh ${INSTALLBINDIR}/.
|
||||||
|
sudo chmod 755 ${INSTALLBINDIR}/sdrplay_usbids.sh
|
||||||
|
sudo cp scripts/sdrplay_ids.txt ${INSTALLBINDIR}/.
|
2
docker/files/services/sdrplay/run
Executable file
2
docker/files/services/sdrplay/run
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/execlineb -P
|
||||||
|
/usr/local/bin/sdrplay_apiService
|
43
docker/files/wsjtx/wsjtx-hamlib.patch
Normal file
43
docker/files/wsjtx/wsjtx-hamlib.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
--- CMakeLists.txt 2020-05-25 19:26:41.423517236 +0200
|
||||||
|
+++ CMakeLists.txt 2020-05-25 19:11:36.116236231 +0200
|
||||||
|
@@ -79,24 +79,6 @@
|
||||||
|
|
||||||
|
include (ExternalProject)
|
||||||
|
|
||||||
|
-
|
||||||
|
-#
|
||||||
|
-# build and install hamlib locally so it can be referenced by the
|
||||||
|
-# WSJT-X build
|
||||||
|
-#
|
||||||
|
-ExternalProject_Add (hamlib
|
||||||
|
- GIT_REPOSITORY ${hamlib_repo}
|
||||||
|
- GIT_TAG ${hamlib_TAG}
|
||||||
|
- URL ${CMAKE_CURRENT_SOURCE_DIR}/src/hamlib.tgz
|
||||||
|
- URL_HASH MD5=${hamlib_md5sum}
|
||||||
|
- UPDATE_COMMAND ./bootstrap
|
||||||
|
- PATCH_COMMAND ${PATCH_EXECUTABLE} -p1 -N < ${CMAKE_CURRENT_SOURCE_DIR}/hamlib.patch
|
||||||
|
- CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-shared --enable-static --without-cxx-binding ${EXTRA_FLAGS} # LIBUSB_LIBS=${USB_LIBRARY}
|
||||||
|
- BUILD_COMMAND $(MAKE) all V=1 # $(MAKE) is ExternalProject_Add() magic to do recursive make
|
||||||
|
- INSTALL_COMMAND $(MAKE) install-strip V=1 DESTDIR=""
|
||||||
|
- STEP_TARGETS update install
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
#
|
||||||
|
# custom target to make a hamlib source tarball
|
||||||
|
#
|
||||||
|
@@ -128,7 +110,6 @@
|
||||||
|
# build and optionally install WSJT-X using the hamlib package built
|
||||||
|
# above
|
||||||
|
#
|
||||||
|
-ExternalProject_Get_Property (hamlib INSTALL_DIR)
|
||||||
|
ExternalProject_Add (wsjtx
|
||||||
|
GIT_REPOSITORY ${wsjtx_repo}
|
||||||
|
GIT_TAG ${WSJTX_TAG}
|
||||||
|
@@ -152,7 +133,6 @@
|
||||||
|
DEPENDEES build
|
||||||
|
)
|
||||||
|
|
||||||
|
-set_target_properties (hamlib PROPERTIES EXCLUDE_FROM_ALL 1)
|
||||||
|
set_target_properties (wsjtx PROPERTIES EXCLUDE_FROM_ALL 1)
|
||||||
|
|
||||||
|
add_dependencies (wsjtx-configure hamlib-install)
|
156
docker/files/wsjtx/wsjtx.patch
Normal file
156
docker/files/wsjtx/wsjtx.patch
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
diff -ur wsjtx-orig/CMake/Modules/Findhamlib.cmake wsjtx/CMake/Modules/Findhamlib.cmake
|
||||||
|
--- wsjtx-orig/CMake/Modules/Findhamlib.cmake 2020-05-27 22:41:57.774855748 +0200
|
||||||
|
+++ wsjtx/CMake/Modules/Findhamlib.cmake 2020-05-27 22:42:35.267939882 +0200
|
||||||
|
@@ -85,4 +85,4 @@
|
||||||
|
# Handle the QUIETLY and REQUIRED arguments and set HAMLIB_FOUND to
|
||||||
|
# TRUE if all listed variables are TRUE
|
||||||
|
include (FindPackageHandleStandardArgs)
|
||||||
|
-find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARIES hamlib_LIBRARY_DIRS)
|
||||||
|
+find_package_handle_standard_args (hamlib DEFAULT_MSG hamlib_INCLUDE_DIRS hamlib_LIBRARIES)
|
||||||
|
diff -ur wsjtx-orig/CMakeLists.txt wsjtx/CMakeLists.txt
|
||||||
|
--- wsjtx-orig/CMakeLists.txt 2020-05-27 22:41:57.774855748 +0200
|
||||||
|
+++ wsjtx/CMakeLists.txt 2020-05-27 22:58:18.905001618 +0200
|
||||||
|
@@ -869,7 +869,7 @@
|
||||||
|
#
|
||||||
|
# libhamlib setup
|
||||||
|
#
|
||||||
|
-set (hamlib_STATIC 1)
|
||||||
|
+set (hamlib_STATIC 0)
|
||||||
|
find_package (hamlib 3 REQUIRED)
|
||||||
|
find_program (RIGCTL_EXE rigctl)
|
||||||
|
find_program (RIGCTLD_EXE rigctld)
|
||||||
|
@@ -1326,54 +1326,10 @@
|
||||||
|
|
||||||
|
endif(WSJT_BUILD_UTILS)
|
||||||
|
|
||||||
|
-# build the main application
|
||||||
|
-add_executable (wsjtx MACOSX_BUNDLE
|
||||||
|
- ${wsjtx_CXXSRCS}
|
||||||
|
- ${wsjtx_GENUISRCS}
|
||||||
|
- wsjtx.rc
|
||||||
|
- ${WSJTX_ICON_FILE}
|
||||||
|
- ${wsjtx_RESOURCES_RCC}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
if (WSJT_CREATE_WINMAIN)
|
||||||
|
set_target_properties (wsjtx PROPERTIES WIN32_EXECUTABLE ON)
|
||||||
|
endif (WSJT_CREATE_WINMAIN)
|
||||||
|
|
||||||
|
-set_target_properties (wsjtx PROPERTIES
|
||||||
|
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Darwin/Info.plist.in"
|
||||||
|
- MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
|
||||||
|
- MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_VERSION ${wsjtx_VERSION}
|
||||||
|
- MACOSX_BUNDLE_SHORT_VERSION_STRING "v${wsjtx_VERSION}"
|
||||||
|
- MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${wsjtx_VERSION}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}"
|
||||||
|
- MACOSX_BUNDLE_BUNDLE_EXECUTABLE_NAME "${PROJECT_NAME}"
|
||||||
|
- MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}"
|
||||||
|
- MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||||
|
-if (APPLE)
|
||||||
|
- target_link_libraries (wsjtx wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||||
|
-else ()
|
||||||
|
- target_link_libraries (wsjtx wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||||
|
- if (OpenMP_C_FLAGS)
|
||||||
|
- set_target_properties (wsjtx PROPERTIES
|
||||||
|
- COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||||
|
- LINK_FLAGS "${OpenMP_C_FLAGS}"
|
||||||
|
- )
|
||||||
|
- endif ()
|
||||||
|
- set_target_properties (wsjtx PROPERTIES
|
||||||
|
- Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
|
||||||
|
- )
|
||||||
|
- if (WIN32)
|
||||||
|
- set_target_properties (wsjtx PROPERTIES
|
||||||
|
- LINK_FLAGS -Wl,--stack,16777216
|
||||||
|
- )
|
||||||
|
- endif ()
|
||||||
|
-endif ()
|
||||||
|
-qt5_use_modules (wsjtx SerialPort) # not sure why the interface link library syntax above doesn't work
|
||||||
|
-
|
||||||
|
# make a library for WSJT-X UDP servers
|
||||||
|
# add_library (wsjtx_udp SHARED ${UDP_library_CXXSRCS})
|
||||||
|
add_library (wsjtx_udp-static STATIC ${UDP_library_CXXSRCS})
|
||||||
|
@@ -1417,24 +1373,9 @@
|
||||||
|
set_target_properties (message_aggregator PROPERTIES WIN32_EXECUTABLE ON)
|
||||||
|
endif (WSJT_CREATE_WINMAIN)
|
||||||
|
|
||||||
|
-if (UNIX)
|
||||||
|
- if (NOT WSJT_SKIP_MANPAGES)
|
||||||
|
- add_subdirectory (manpages)
|
||||||
|
- add_dependencies (wsjtx manpages)
|
||||||
|
- endif (NOT WSJT_SKIP_MANPAGES)
|
||||||
|
- if (NOT APPLE)
|
||||||
|
- add_subdirectory (debian)
|
||||||
|
- add_dependencies (wsjtx debian)
|
||||||
|
- endif (NOT APPLE)
|
||||||
|
-endif (UNIX)
|
||||||
|
-
|
||||||
|
#
|
||||||
|
# installation
|
||||||
|
#
|
||||||
|
-install (TARGETS wsjtx
|
||||||
|
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
- BUNDLE DESTINATION . COMPONENT runtime
|
||||||
|
- )
|
||||||
|
|
||||||
|
# install (TARGETS wsjtx_udp EXPORT udp
|
||||||
|
# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
@@ -1453,12 +1394,7 @@
|
||||||
|
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/wsjtx
|
||||||
|
# )
|
||||||
|
|
||||||
|
-install (TARGETS udp_daemon message_aggregator
|
||||||
|
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
- BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (TARGETS jt9 wsprd fmtave fcal fmeasure
|
||||||
|
+install (TARGETS jt9 wsprd
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||||
|
)
|
||||||
|
@@ -1471,39 +1407,6 @@
|
||||||
|
)
|
||||||
|
endif(WSJT_BUILD_UTILS)
|
||||||
|
|
||||||
|
-install (PROGRAMS
|
||||||
|
- ${RIGCTL_EXE}
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- RENAME rigctl-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (PROGRAMS
|
||||||
|
- ${RIGCTLD_EXE}
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- RENAME rigctld-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (PROGRAMS
|
||||||
|
- ${RIGCTLCOM_EXE}
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- RENAME rigctlcom-wsjtx${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
-install (FILES
|
||||||
|
- README
|
||||||
|
- COPYING
|
||||||
|
- AUTHORS
|
||||||
|
- THANKS
|
||||||
|
- NEWS
|
||||||
|
- INSTALL
|
||||||
|
- BUGS
|
||||||
|
- DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
||||||
|
- #COMPONENT runtime
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
install (FILES
|
||||||
|
contrib/Ephemeris/JPLEPH
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}
|
||||||
|
Only in wsjtx: .idea
|
@ -1,241 +0,0 @@
|
|||||||
diff --git a/Makefile.linux b/Makefile.linux
|
|
||||||
index 5010833..3f61de9 100644
|
|
||||||
--- a/Makefile.linux
|
|
||||||
+++ b/Makefile.linux
|
|
||||||
@@ -585,102 +585,102 @@ install : $(APPS) direwolf.conf tocalls.txt symbols-new.txt symbolsX.txt dw-icon
|
|
||||||
# Applications, not installed with package manager, normally go in /usr/local/bin.
|
|
||||||
# /usr/bin is used instead when installing from .DEB or .RPM package.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=755 direwolf $(DESTDIR)/bin/direwolf
|
|
||||||
- $(INSTALL) -D --mode=755 decode_aprs $(DESTDIR)/bin/decode_aprs
|
|
||||||
- $(INSTALL) -D --mode=755 text2tt $(DESTDIR)/bin/text2tt
|
|
||||||
- $(INSTALL) -D --mode=755 tt2text $(DESTDIR)/bin/tt2text
|
|
||||||
- $(INSTALL) -D --mode=755 ll2utm $(DESTDIR)/bin/ll2utm
|
|
||||||
- $(INSTALL) -D --mode=755 utm2ll $(DESTDIR)/bin/utm2ll
|
|
||||||
- $(INSTALL) -D --mode=755 aclients $(DESTDIR)/bin/aclients
|
|
||||||
- $(INSTALL) -D --mode=755 log2gpx $(DESTDIR)/bin/log2gpx
|
|
||||||
- $(INSTALL) -D --mode=755 gen_packets $(DESTDIR)/bin/gen_packets
|
|
||||||
- $(INSTALL) -D --mode=755 atest $(DESTDIR)/bin/atest
|
|
||||||
- $(INSTALL) -D --mode=755 ttcalc $(DESTDIR)/bin/ttcalc
|
|
||||||
- $(INSTALL) -D --mode=755 kissutil $(DESTDIR)/bin/kissutil
|
|
||||||
- $(INSTALL) -D --mode=755 cm108 $(DESTDIR)/bin/cm108
|
|
||||||
- $(INSTALL) -D --mode=755 dwespeak.sh $(DESTDIR)/bin/dwspeak.sh
|
|
||||||
+ $(INSTALL) -D -m=755 direwolf $(DESTDIR)/bin/direwolf
|
|
||||||
+ $(INSTALL) -D -m=755 decode_aprs $(DESTDIR)/bin/decode_aprs
|
|
||||||
+ $(INSTALL) -D -m=755 text2tt $(DESTDIR)/bin/text2tt
|
|
||||||
+ $(INSTALL) -D -m=755 tt2text $(DESTDIR)/bin/tt2text
|
|
||||||
+ $(INSTALL) -D -m=755 ll2utm $(DESTDIR)/bin/ll2utm
|
|
||||||
+ $(INSTALL) -D -m=755 utm2ll $(DESTDIR)/bin/utm2ll
|
|
||||||
+ $(INSTALL) -D -m=755 aclients $(DESTDIR)/bin/aclients
|
|
||||||
+ $(INSTALL) -D -m=755 log2gpx $(DESTDIR)/bin/log2gpx
|
|
||||||
+ $(INSTALL) -D -m=755 gen_packets $(DESTDIR)/bin/gen_packets
|
|
||||||
+ $(INSTALL) -D -m=755 atest $(DESTDIR)/bin/atest
|
|
||||||
+ $(INSTALL) -D -m=755 ttcalc $(DESTDIR)/bin/ttcalc
|
|
||||||
+ $(INSTALL) -D -m=755 kissutil $(DESTDIR)/bin/kissutil
|
|
||||||
+ $(INSTALL) -D -m=755 cm108 $(DESTDIR)/bin/cm108
|
|
||||||
+ $(INSTALL) -D -m=755 dwespeak.sh $(DESTDIR)/bin/dwspeak.sh
|
|
||||||
#
|
|
||||||
# Telemetry Toolkit executables. Other .conf and .txt files will go into doc directory.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-balloon.pl $(DESTDIR)/bin/telem-balloon.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-bits.pl $(DESTDIR)/bin/telem-bits.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-data.pl $(DESTDIR)/bin/telem-data.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-data91.pl $(DESTDIR)/bin/telem-data91.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-eqns.pl $(DESTDIR)/bin/telem-eqns.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-parm.pl $(DESTDIR)/bin/telem-parm.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-seq.sh $(DESTDIR)/bin/telem-seq.sh
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-unit.pl $(DESTDIR)/bin/telem-unit.pl
|
|
||||||
- $(INSTALL) -D --mode=755 telemetry-toolkit/telem-volts.py $(DESTDIR)/bin/telem-volts.py
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-balloon.pl $(DESTDIR)/bin/telem-balloon.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-bits.pl $(DESTDIR)/bin/telem-bits.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-data.pl $(DESTDIR)/bin/telem-data.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-data91.pl $(DESTDIR)/bin/telem-data91.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-eqns.pl $(DESTDIR)/bin/telem-eqns.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-parm.pl $(DESTDIR)/bin/telem-parm.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-seq.sh $(DESTDIR)/bin/telem-seq.sh
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-unit.pl $(DESTDIR)/bin/telem-unit.pl
|
|
||||||
+ $(INSTALL) -D -m=755 telemetry-toolkit/telem-volts.py $(DESTDIR)/bin/telem-volts.py
|
|
||||||
#
|
|
||||||
# Misc. data such as "tocall" to system mapping.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 tocalls.txt $(DESTDIR)/share/direwolf/tocalls.txt
|
|
||||||
- $(INSTALL) -D --mode=644 symbols-new.txt $(DESTDIR)/share/direwolf/symbols-new.txt
|
|
||||||
- $(INSTALL) -D --mode=644 symbolsX.txt $(DESTDIR)/share/direwolf/symbolsX.txt
|
|
||||||
+ $(INSTALL) -D -m=644 tocalls.txt $(DESTDIR)/share/direwolf/tocalls.txt
|
|
||||||
+ $(INSTALL) -D -m=644 symbols-new.txt $(DESTDIR)/share/direwolf/symbols-new.txt
|
|
||||||
+ $(INSTALL) -D -m=644 symbolsX.txt $(DESTDIR)/share/direwolf/symbolsX.txt
|
|
||||||
#
|
|
||||||
# For desktop icon.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 dw-icon.png $(DESTDIR)/share/direwolf/pixmaps/dw-icon.png
|
|
||||||
- $(INSTALL) -D --mode=644 direwolf.desktop $(DESTDIR)/share/applications/direwolf.desktop
|
|
||||||
+ $(INSTALL) -D -m=644 dw-icon.png $(DESTDIR)/share/direwolf/pixmaps/dw-icon.png
|
|
||||||
+ $(INSTALL) -D -m=644 direwolf.desktop $(DESTDIR)/share/applications/direwolf.desktop
|
|
||||||
#
|
|
||||||
# Documentation. Various plain text files and PDF.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 CHANGES.md $(DESTDIR)/share/doc/direwolf/CHANGES.md
|
|
||||||
- $(INSTALL) -D --mode=644 LICENSE-dire-wolf.txt $(DESTDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
|
||||||
- $(INSTALL) -D --mode=644 LICENSE-other.txt $(DESTDIR)/share/doc/direwolf/LICENSE-other.txt
|
|
||||||
+ $(INSTALL) -D -m=644 CHANGES.md $(DESTDIR)/share/doc/direwolf/CHANGES.md
|
|
||||||
+ $(INSTALL) -D -m=644 LICENSE-dire-wolf.txt $(DESTDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
|
||||||
+ $(INSTALL) -D -m=644 LICENSE-other.txt $(DESTDIR)/share/doc/direwolf/LICENSE-other.txt
|
|
||||||
#
|
|
||||||
# ./README.md is an overview for the project main page.
|
|
||||||
# Maybe we could stick it in some other place.
|
|
||||||
# doc/README.md contains an overview of the PDF file contents and is more useful here.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 doc/README.md $(DESTDIR)/share/doc/direwolf/README.md
|
|
||||||
- $(INSTALL) -D --mode=644 doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(DESTDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(DESTDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/APRS-Telemetry-Toolkit.pdf $(DESTDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/APRStt-Implementation-Notes.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/APRStt-interface-for-SARTrack.pdf $(DESTDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/APRStt-Listening-Example.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Bluetooth-KISS-TNC.pdf $(DESTDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Going-beyond-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS-Tracker.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Raspberry-Pi-SDR-IGate.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/Successful-APRS-IGate-Operation.pdf $(DESTDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/User-Guide.pdf $(DESTDIR)/share/doc/direwolf/User-Guide.pdf
|
|
||||||
- $(INSTALL) -D --mode=644 doc/WA8LMF-TNC-Test-CD-Results.pdf $(DESTDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/README.md $(DESTDIR)/share/doc/direwolf/README.md
|
|
||||||
+ $(INSTALL) -D -m=644 doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(DESTDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(DESTDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/APRS-Telemetry-Toolkit.pdf $(DESTDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/APRStt-Implementation-Notes.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/APRStt-interface-for-SARTrack.pdf $(DESTDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/APRStt-Listening-Example.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Bluetooth-KISS-TNC.pdf $(DESTDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Going-beyond-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Raspberry-Pi-APRS.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Raspberry-Pi-APRS-Tracker.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Raspberry-Pi-SDR-IGate.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/Successful-APRS-IGate-Operation.pdf $(DESTDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/User-Guide.pdf $(DESTDIR)/share/doc/direwolf/User-Guide.pdf
|
|
||||||
+ $(INSTALL) -D -m=644 doc/WA8LMF-TNC-Test-CD-Results.pdf $(DESTDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
|
||||||
#
|
|
||||||
# Various sample config and other files go into examples under the doc directory.
|
|
||||||
# When building from source, these can be put in home directory with "make install-conf".
|
|
||||||
# When installed from .DEB or .RPM package, the user will need to copy these to
|
|
||||||
# the home directory or other desired location.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 direwolf.conf $(DESTDIR)/share/doc/direwolf/examples/direwolf.conf
|
|
||||||
- $(INSTALL) -D --mode=755 dw-start.sh $(DESTDIR)/share/doc/direwolf/examples/dw-start.sh
|
|
||||||
- $(INSTALL) -D --mode=644 sdr.conf $(DESTDIR)/share/doc/direwolf/examples/sdr.conf
|
|
||||||
- $(INSTALL) -D --mode=644 telemetry-toolkit/telem-m0xer-3.txt $(DESTDIR)/share/doc/direwolf/examples/telem-m0xer-3.txt
|
|
||||||
- $(INSTALL) -D --mode=644 telemetry-toolkit/telem-balloon.conf $(DESTDIR)/share/doc/direwolf/examples/telem-balloon.conf
|
|
||||||
- $(INSTALL) -D --mode=644 telemetry-toolkit/telem-volts.conf $(DESTDIR)/share/doc/direwolf/examples/telem-volts.conf
|
|
||||||
+ $(INSTALL) -D -m=644 direwolf.conf $(DESTDIR)/share/doc/direwolf/examples/direwolf.conf
|
|
||||||
+ $(INSTALL) -D -m=755 dw-start.sh $(DESTDIR)/share/doc/direwolf/examples/dw-start.sh
|
|
||||||
+ $(INSTALL) -D -m=644 sdr.conf $(DESTDIR)/share/doc/direwolf/examples/sdr.conf
|
|
||||||
+ $(INSTALL) -D -m=644 telemetry-toolkit/telem-m0xer-3.txt $(DESTDIR)/share/doc/direwolf/examples/telem-m0xer-3.txt
|
|
||||||
+ $(INSTALL) -D -m=644 telemetry-toolkit/telem-balloon.conf $(DESTDIR)/share/doc/direwolf/examples/telem-balloon.conf
|
|
||||||
+ $(INSTALL) -D -m=644 telemetry-toolkit/telem-volts.conf $(DESTDIR)/share/doc/direwolf/examples/telem-volts.conf
|
|
||||||
#
|
|
||||||
# "man" pages
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 man1/aclients.1 $(DESTDIR)/share/man/man1/aclients.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/atest.1 $(DESTDIR)/share/man/man1/atest.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/decode_aprs.1 $(DESTDIR)/share/man/man1/decode_aprs.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/direwolf.1 $(DESTDIR)/share/man/man1/direwolf.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/gen_packets.1 $(DESTDIR)/share/man/man1/gen_packets.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/kissutil.1 $(DESTDIR)/share/man/man1/kissutil.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/ll2utm.1 $(DESTDIR)/share/man/man1/ll2utm.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/log2gpx.1 $(DESTDIR)/share/man/man1/log2gpx.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/text2tt.1 $(DESTDIR)/share/man/man1/text2tt.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/tt2text.1 $(DESTDIR)/share/man/man1/tt2text.1
|
|
||||||
- $(INSTALL) -D --mode=644 man1/utm2ll.1 $(DESTDIR)/share/man/man1/utm2ll.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/aclients.1 $(DESTDIR)/share/man/man1/aclients.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/atest.1 $(DESTDIR)/share/man/man1/atest.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/decode_aprs.1 $(DESTDIR)/share/man/man1/decode_aprs.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/direwolf.1 $(DESTDIR)/share/man/man1/direwolf.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/gen_packets.1 $(DESTDIR)/share/man/man1/gen_packets.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/kissutil.1 $(DESTDIR)/share/man/man1/kissutil.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/ll2utm.1 $(DESTDIR)/share/man/man1/ll2utm.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/log2gpx.1 $(DESTDIR)/share/man/man1/log2gpx.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/text2tt.1 $(DESTDIR)/share/man/man1/text2tt.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/tt2text.1 $(DESTDIR)/share/man/man1/tt2text.1
|
|
||||||
+ $(INSTALL) -D -m=644 man1/utm2ll.1 $(DESTDIR)/share/man/man1/utm2ll.1
|
|
||||||
#
|
|
||||||
# Set group and mode of HID devices corresponding to C-Media USB Audio adapters.
|
|
||||||
# This will allow us to use the CM108/CM119 GPIO pins for PTT.
|
|
||||||
#
|
|
||||||
- $(INSTALL) -D --mode=644 99-direwolf-cmedia.rules /etc/udev/rules.d/99-direwolf-cmedia.rules
|
|
||||||
+ $(INSTALL) -D -m=644 99-direwolf-cmedia.rules /etc/udev/rules.d/99-direwolf-cmedia.rules
|
|
||||||
#
|
|
||||||
@echo " "
|
|
||||||
@echo "If this is your first install, not an upgrade, type this to put a copy"
|
|
||||||
diff --git a/cdigipeater.c b/cdigipeater.c
|
|
||||||
index 9c40d95..94112e9 100644
|
|
||||||
--- a/cdigipeater.c
|
|
||||||
+++ b/cdigipeater.c
|
|
||||||
@@ -49,7 +49,7 @@
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h> /* for isdigit, isupper */
|
|
||||||
#include "regex.h"
|
|
||||||
-#include <sys/unistd.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
|
|
||||||
#include "ax25_pad.h"
|
|
||||||
#include "cdigipeater.h"
|
|
||||||
diff --git a/decode_aprs.c b/decode_aprs.c
|
|
||||||
index 35c186b..a620cb3 100644
|
|
||||||
--- a/decode_aprs.c
|
|
||||||
+++ b/decode_aprs.c
|
|
||||||
@@ -3872,11 +3872,7 @@ static void decode_tocall (decode_aprs_t *A, char *dest)
|
|
||||||
* models before getting to the more generic APY.
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#if defined(__WIN32__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)
|
|
||||||
qsort (tocalls, num_tocalls, sizeof(struct tocalls_s), tocall_cmp);
|
|
||||||
-#else
|
|
||||||
- qsort (tocalls, num_tocalls, sizeof(struct tocalls_s), (__compar_fn_t)tocall_cmp);
|
|
||||||
-#endif
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( ! A->g_quiet) {
|
|
||||||
diff --git a/digipeater.c b/digipeater.c
|
|
||||||
index 36970d7..5195582 100644
|
|
||||||
--- a/digipeater.c
|
|
||||||
+++ b/digipeater.c
|
|
||||||
@@ -62,7 +62,7 @@
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h> /* for isdigit, isupper */
|
|
||||||
#include "regex.h"
|
|
||||||
-#include <sys/unistd.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
|
|
||||||
#include "ax25_pad.h"
|
|
||||||
#include "digipeater.h"
|
|
||||||
diff --git a/direwolf.h b/direwolf.h
|
|
||||||
index 514bcc5..52f5ae9 100644
|
|
||||||
--- a/direwolf.h
|
|
||||||
+++ b/direwolf.h
|
|
||||||
@@ -274,7 +274,7 @@ char *strtok_r(char *str, const char *delim, char **saveptr);
|
|
||||||
char *strcasestr(const char *S, const char *FIND);
|
|
||||||
|
|
||||||
|
|
||||||
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)
|
|
||||||
+#if 1
|
|
||||||
|
|
||||||
// strlcpy and strlcat should be in string.h and the C library.
|
|
||||||
|
|
||||||
diff --git a/multi_modem.c b/multi_modem.c
|
|
||||||
index 5d96c79..24261b9 100644
|
|
||||||
--- a/multi_modem.c
|
|
||||||
+++ b/multi_modem.c
|
|
||||||
@@ -80,7 +80,7 @@
|
|
||||||
#include <string.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
-#include <sys/unistd.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
|
|
||||||
#include "ax25_pad.h"
|
|
||||||
#include "textcolor.h"
|
|
@ -18,12 +18,14 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
BUILD_PACKAGES="git cmake make gcc g++ musl-dev"
|
BUILD_PACKAGES="git cmake make gcc g++"
|
||||||
|
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install --no-install-recommends $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/jketterl/owrx_connector.git
|
git clone https://github.com/jketterl/owrx_connector.git
|
||||||
cmakebuild owrx_connector 9d72cf1382ed90735632a6d0ef6f820a4758f733
|
cmakebuild owrx_connector 45ec227b38bb763b0a923a1856740f4ddf74216c
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,11 +18,11 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb"
|
STATIC_PACKAGES="libusb-1.0-0"
|
||||||
BUILD_PACKAGES="git libusb-dev cmake make gcc musl-dev g++ linux-headers"
|
BUILD_PACKAGES="git libusb-1.0-0-dev cmake make gcc g++ pkg-config"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/airspy/airspyone_host.git
|
git clone https://github.com/airspy/airspyone_host.git
|
||||||
cmakebuild airspyone_host bceca18f9e3a5f89cff78c4d949c71771d92dfd3
|
cmakebuild airspyone_host bceca18f9e3a5f89cff78c4d949c71771d92dfd3
|
||||||
@ -36,4 +36,6 @@ cmakebuild airspyhf 613852a2bb64af42690bf9be2201826af69a9475
|
|||||||
git clone https://github.com/pothosware/SoapyAirspyHF.git
|
git clone https://github.com/pothosware/SoapyAirspyHF.git
|
||||||
cmakebuild SoapyAirspyHF 81ca737bb044dd930a9de738bced1e4915491f1b
|
cmakebuild SoapyAirspyHF 81ca737bb044dd930a9de738bced1e4915491f1b
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,11 +18,11 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb fftw udev"
|
STATIC_PACKAGES="libusb-1.0-0 libfftw3-3 udev"
|
||||||
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++ libusb-dev fftw-dev"
|
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++ libusb-1.0-0-dev libfftw3-dev pkg-config"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/mossmann/hackrf.git
|
git clone https://github.com/mossmann/hackrf.git
|
||||||
cd hackrf
|
cd hackrf
|
||||||
@ -31,4 +31,9 @@ cmakebuild host
|
|||||||
cd ..
|
cd ..
|
||||||
rm -rf hackrf
|
rm -rf hackrf
|
||||||
|
|
||||||
apk del .build-deps
|
git clone https://github.com/pothosware/SoapyHackRF.git
|
||||||
|
cmakebuild SoapyHackRF 3c514cecd3dd2fdf4794aebc96c482940c11d7ff
|
||||||
|
|
||||||
|
SUDO_FORCE_REMOVE=yes apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -4,21 +4,28 @@ export MAKEFLAGS="-j4"
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb"
|
STATIC_PACKAGES="libusb-1.0-0 libatomic1"
|
||||||
BUILD_PACKAGES="git libusb-dev cmake make gcc musl-dev g++ linux-headers"
|
BUILD_PACKAGES="git libusb-1.0-0-dev cmake make gcc g++"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
|
SIMD_FLAGS=""
|
||||||
|
if [[ 'x86_64' == `uname -m` ]] ; then
|
||||||
|
SIMD_FLAGS="-DDEFAULT_SIMD_FLAGS=SSE3"
|
||||||
|
fi
|
||||||
|
|
||||||
git clone https://github.com/myriadrf/LimeSuite.git
|
git clone https://github.com/myriadrf/LimeSuite.git
|
||||||
cd LimeSuite
|
cd LimeSuite
|
||||||
git checkout 0854a51ec06b30b01f19a562149c39461e92f24d
|
git checkout 0854a51ec06b30b01f19a562149c39461e92f24d
|
||||||
mkdir builddir
|
mkdir builddir
|
||||||
cd builddir
|
cd builddir
|
||||||
cmake .. -DENABLE_EXAMPLES=OFF -DENABLE_DESKTOP=OFF -DENABLE_LIME_UTIL=OFF -DENABLE_QUICKTEST=OFF -DENABLE_OCTAVE=OFF -DENABLE_GUI=OFF -DCMAKE_CXX_STANDARD_LIBRARIES="-latomic"
|
cmake .. -DENABLE_EXAMPLES=OFF -DENABLE_DESKTOP=OFF -DENABLE_LIME_UTIL=OFF -DENABLE_QUICKTEST=OFF -DENABLE_OCTAVE=OFF -DENABLE_GUI=OFF -DCMAKE_CXX_STANDARD_LIBRARIES="-latomic" ${SIMD_FLAGS}
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
cd ../..
|
cd ../..
|
||||||
rm -rf LimeSuite
|
rm -rf LimeSuite
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -4,11 +4,11 @@ export MAKEFLAGS="-j4"
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb udev"
|
STATIC_PACKAGES="libusb-1.0-0 libudev1"
|
||||||
BUILD_PACKAGES="git make gcc autoconf automake libtool musl-dev libusb-dev shadow vim"
|
BUILD_PACKAGES="git make gcc autoconf automake libtool libusb-1.0-0-dev xxd"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/Microtelecom/libperseus-sdr.git
|
git clone https://github.com/Microtelecom/libperseus-sdr.git
|
||||||
cd libperseus-sdr
|
cd libperseus-sdr
|
||||||
@ -21,4 +21,6 @@ ldconfig /etc/ld.so.conf.d
|
|||||||
cd ..
|
cd ..
|
||||||
rm -rf libperseus-sdr
|
rm -rf libperseus-sdr
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,11 +18,11 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb libxml2"
|
STATIC_PACKAGES="libusb-1.0-0 libxml2"
|
||||||
BUILD_PACKAGES="git libusb-dev cmake make gcc musl-dev g++ linux-headers libxml2-dev flex bison"
|
BUILD_PACKAGES="git libusb-1.0-0-dev cmake make gcc g++ libxml2-dev flex bison"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/analogdevicesinc/libiio.git
|
git clone https://github.com/analogdevicesinc/libiio.git
|
||||||
cmakebuild libiio 5f5af2e417129ad8f4e05fc5c1b730f0694dca12 -DCMAKE_INSTALL_PREFIX=/usr/local
|
cmakebuild libiio 5f5af2e417129ad8f4e05fc5c1b730f0694dca12 -DCMAKE_INSTALL_PREFIX=/usr/local
|
||||||
@ -33,4 +33,6 @@ cmakebuild libad9361-iio 8ac95f3325c18c2e34cd9cfd49c7b63d69a0a9d2
|
|||||||
git clone https://github.com/pothosware/SoapyPlutoSDR.git
|
git clone https://github.com/pothosware/SoapyPlutoSDR.git
|
||||||
cmakebuild SoapyPlutoSDR c88b7f5bac1e5785f212f9a7c6ce8fef64eb719e
|
cmakebuild SoapyPlutoSDR c88b7f5bac1e5785f212f9a7c6ce8fef64eb719e
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,11 +18,11 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb"
|
STATIC_PACKAGES="libusb-1.0-0"
|
||||||
BUILD_PACKAGES="git libusb-dev cmake make gcc musl-dev g++ linux-headers"
|
BUILD_PACKAGES="git libusb-1.0-0-dev cmake make gcc g++ pkg-config"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/osmocom/rtl-sdr.git
|
git clone https://github.com/osmocom/rtl-sdr.git
|
||||||
cmakebuild rtl-sdr d794155ba65796a76cd0a436f9709f4601509320
|
cmakebuild rtl-sdr d794155ba65796a76cd0a436f9709f4601509320
|
||||||
@ -30,4 +30,6 @@ cmakebuild rtl-sdr d794155ba65796a76cd0a436f9709f4601509320
|
|||||||
git clone https://github.com/pothosware/SoapyRTLSDR.git
|
git clone https://github.com/pothosware/SoapyRTLSDR.git
|
||||||
cmakebuild SoapyRTLSDR 8ba18f17d64005e43ff2a4e46611f8c710b05007
|
cmakebuild SoapyRTLSDR 8ba18f17d64005e43ff2a4e46611f8c710b05007
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,13 +18,15 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb"
|
STATIC_PACKAGES="libusb-1.0.0"
|
||||||
BUILD_PACKAGES="git libusb-dev cmake make gcc musl-dev g++ linux-headers"
|
BUILD_PACKAGES="git libusb-1.0.0-dev cmake make gcc g++ pkg-config"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/osmocom/rtl-sdr.git
|
git clone https://github.com/osmocom/rtl-sdr.git
|
||||||
cmakebuild rtl-sdr d794155ba65796a76cd0a436f9709f4601509320
|
cmakebuild rtl-sdr d794155ba65796a76cd0a436f9709f4601509320
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,23 +18,23 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="libusb udev"
|
STATIC_PACKAGES="libusb-1.0.0 udev"
|
||||||
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++ libusb-dev"
|
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++ libusb-1.0-0-dev"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
case $ARCH in
|
case $ARCH in
|
||||||
x86_64)
|
x86_64)
|
||||||
BINARY=SDRplay_RSP_API-Linux-2.13.1.run
|
BINARY=SDRplay_RSP_API-Linux-3.07.1.run
|
||||||
;;
|
;;
|
||||||
armv*)
|
armv*)
|
||||||
BINARY=SDRplay_RSP_API-RPi-2.13.1.run
|
BINARY=SDRplay_RSP_API-ARM32-3.07.2.run
|
||||||
;;
|
;;
|
||||||
aarch64)
|
aarch64)
|
||||||
BINARY=SDRplay_RSP_API-ARM64-2.13.1.run
|
BINARY=SDRplay_RSP_API-ARM64-3.07.1.run
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -48,7 +48,9 @@ cd ..
|
|||||||
rm -rf sdrplay
|
rm -rf sdrplay
|
||||||
rm $BINARY
|
rm $BINARY
|
||||||
|
|
||||||
git clone https://github.com/pothosware/SoapySDRPlay.git
|
git clone https://github.com/SDRplay/SoapySDRPlay.git
|
||||||
cmakebuild SoapySDRPlay 14ec39e4ff0dab7ae7fdf1afbbd2d28b49b0ffae
|
cmakebuild SoapySDRPlay 1c2728a04db5edf8154d02f5cca87e655152d7c1
|
||||||
|
|
||||||
apk del .build-deps
|
SUDO_FORCE_REMOVE=yes apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,13 +18,15 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="avahi"
|
STATIC_PACKAGES="avahi-daemon libavahi-client3"
|
||||||
BUILD_PACKAGES="git cmake make gcc musl-dev g++ linux-headers avahi-dev"
|
BUILD_PACKAGES="git cmake make gcc g++ libavahi-client-dev"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/pothosware/SoapyRemote.git
|
git clone https://github.com/pothosware/SoapyRemote.git
|
||||||
cmakebuild SoapyRemote 6d9bd820da470cfe7b27b2e6946af93cfece448f
|
cmakebuild SoapyRemote 6d9bd820da470cfe7b27b2e6946af93cfece448f
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,13 +18,15 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="udev"
|
STATIC_PACKAGES="libudev1"
|
||||||
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++"
|
BUILD_PACKAGES="git cmake make patch wget sudo gcc g++"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
git clone https://github.com/pothosware/SoapySDR
|
git clone https://github.com/pothosware/SoapySDR
|
||||||
cmakebuild SoapySDR f722f9ce5b629c3c44401a9bf628b3f8e67a9695
|
cmakebuild SoapySDR f722f9ce5b629c3c44401a9bf628b3f8e67a9695
|
||||||
|
|
||||||
apk del .build-deps
|
SUDO_FORCE_REMOVE=yes apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -18,24 +18,46 @@ function cmakebuild() {
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
STATIC_PACKAGES="sox fftw python3 netcat-openbsd libsndfile lapack libusb qt5-qtbase qt5-qtmultimedia qt5-qtserialport qt5-qttools alsa-lib"
|
STATIC_PACKAGES="sox libfftw3-bin python3 python3-setuptools netcat-openbsd libsndfile1 liblapack3 libusb-1.0-0 libqt5core5a libreadline7 libgfortran4 libgomp1 libasound2 libudev1 ca-certificates"
|
||||||
BUILD_PACKAGES="git libsndfile-dev fftw-dev cmake ca-certificates make gcc musl-dev g++ lapack-dev linux-headers autoconf automake libtool texinfo gfortran libusb-dev qt5-qtbase-dev qt5-qtmultimedia-dev qt5-qtserialport-dev qt5-qttools-dev asciidoctor asciidoc alsa-lib-dev linux-headers"
|
BUILD_PACKAGES="wget git libsndfile1-dev libfftw3-dev cmake make gcc g++ liblapack-dev autoconf automake libtool texinfo gfortran libusb-1.0-0-dev qtbase5-dev qtmultimedia5-dev qttools5-dev libqt5serialport5-dev qttools5-dev-tools asciidoctor asciidoc libasound2-dev pkg-config libudev-dev libhamlib-dev patch xsltproc"
|
||||||
|
|
||||||
apk add --no-cache $STATIC_PACKAGES
|
apt-get update
|
||||||
apk add --no-cache --virtual .build-deps $BUILD_PACKAGES
|
apt-get -y install auto-apt-proxy
|
||||||
|
apt-get -y install --no-install-recommends $STATIC_PACKAGES $BUILD_PACKAGES
|
||||||
|
|
||||||
|
case `uname -m` in
|
||||||
|
arm*)
|
||||||
|
PLATFORM=armhf
|
||||||
|
;;
|
||||||
|
aarch64*)
|
||||||
|
PLATFORM=aarch64
|
||||||
|
;;
|
||||||
|
x86_64*)
|
||||||
|
PLATFORM=amd64
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
pushd /tmp
|
||||||
|
wget https://github.com/just-containers/s6-overlay/releases/download/v1.21.8.0/s6-overlay-${PLATFORM}.tar.gz
|
||||||
|
tar xzf s6-overlay-${PLATFORM}.tar.gz -C /
|
||||||
|
rm s6-overlay-${PLATFORM}.tar.gz
|
||||||
|
popd
|
||||||
|
|
||||||
git clone https://github.com/jketterl/js8py.git
|
git clone https://github.com/jketterl/js8py.git
|
||||||
pushd js8py
|
pushd js8py
|
||||||
git checkout 888e62be375316882ad2b2ac8e396c3bf857b6fc
|
git checkout 888e62be375316882ad2b2ac8e396c3bf857b6fc
|
||||||
python3 setup.py install
|
python3 setup.py install
|
||||||
popd
|
popd
|
||||||
|
rm -rf js8py
|
||||||
|
|
||||||
git clone https://git.code.sf.net/p/itpp/git itpp
|
git clone https://git.code.sf.net/p/itpp/git itpp
|
||||||
cmakebuild itpp bb5c7e95f40e8fdb5c3f3d01a84bcbaf76f3676d
|
cmakebuild itpp bb5c7e95f40e8fdb5c3f3d01a84bcbaf76f3676d
|
||||||
|
|
||||||
git clone https://github.com/jketterl/csdr.git
|
git clone https://github.com/jketterl/csdr.git
|
||||||
cd csdr
|
cd csdr
|
||||||
git checkout fe0b042d9cdc2605a817ca7fdd3a23c48bf07563
|
git checkout c4d8a8a5590898e8c9e94b88b96a2fdc7cd0493a
|
||||||
|
autoreconf -i
|
||||||
|
./configure
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
cd ..
|
cd ..
|
||||||
@ -50,21 +72,14 @@ cmakebuild digiham 95206501be89b38d0267bf6c29a6898e7c65656f
|
|||||||
git clone https://github.com/f4exb/dsd.git
|
git clone https://github.com/f4exb/dsd.git
|
||||||
cmakebuild dsd f6939f9edbbc6f66261833616391a4e59cb2b3d7
|
cmakebuild dsd f6939f9edbbc6f66261833616391a4e59cb2b3d7
|
||||||
|
|
||||||
git clone https://github.com/Hamlib/Hamlib.git
|
|
||||||
pushd Hamlib
|
|
||||||
git checkout 301ebb92eaa538dfa75c06821f46715f40dd7673
|
|
||||||
./bootstrap
|
|
||||||
./configure
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
popd
|
|
||||||
rm -rf Hamlib
|
|
||||||
|
|
||||||
JS8CALL_VERSION=2.1.1
|
JS8CALL_VERSION=2.1.1
|
||||||
JS8CALL_DIR=js8call-${JS8CALL_VERSION}
|
JS8CALL_DIR=js8call-${JS8CALL_VERSION}
|
||||||
JS8CALL_TGZ=${JS8CALL_DIR}.tgz
|
JS8CALL_TGZ=${JS8CALL_DIR}.tgz
|
||||||
wget http://files.js8call.com/${JS8CALL_VERSION}/${JS8CALL_TGZ}
|
wget http://files.js8call.com/${JS8CALL_VERSION}/${JS8CALL_TGZ}
|
||||||
tar xfz ${JS8CALL_TGZ}
|
tar xfz ${JS8CALL_TGZ}
|
||||||
|
# patch allows us to build against the packaged hamlib
|
||||||
|
patch -Np1 -d ${JS8CALL_DIR} < /js8call-hamlib.patch
|
||||||
|
rm /js8call-hamlib.patch
|
||||||
CMAKE_ARGS="-D CMAKE_CXX_FLAGS=-DJS8_USE_LEGACY_HAMLIB" cmakebuild ${JS8CALL_DIR}
|
CMAKE_ARGS="-D CMAKE_CXX_FLAGS=-DJS8_USE_LEGACY_HAMLIB" cmakebuild ${JS8CALL_DIR}
|
||||||
rm ${JS8CALL_TGZ}
|
rm ${JS8CALL_TGZ}
|
||||||
|
|
||||||
@ -72,12 +87,13 @@ WSJT_DIR=wsjtx-2.1.2
|
|||||||
WSJT_TGZ=${WSJT_DIR}.tgz
|
WSJT_TGZ=${WSJT_DIR}.tgz
|
||||||
wget http://physics.princeton.edu/pulsar/k1jt/${WSJT_TGZ}
|
wget http://physics.princeton.edu/pulsar/k1jt/${WSJT_TGZ}
|
||||||
tar xfz ${WSJT_TGZ}
|
tar xfz ${WSJT_TGZ}
|
||||||
|
patch -Np0 -d ${WSJT_DIR} < /wsjtx-hamlib.patch
|
||||||
|
mv /wsjtx.patch ${WSJT_DIR}
|
||||||
cmakebuild ${WSJT_DIR}
|
cmakebuild ${WSJT_DIR}
|
||||||
rm ${WSJT_TGZ}
|
rm ${WSJT_TGZ}
|
||||||
|
|
||||||
git clone --depth 1 -b 1.5 https://github.com/wb2osz/direwolf.git
|
git clone --depth 1 -b 1.5 https://github.com/wb2osz/direwolf.git
|
||||||
cd direwolf
|
cd direwolf
|
||||||
patch -Np1 < /direwolf-1.5.patch
|
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
cd ..
|
cd ..
|
||||||
@ -88,4 +104,6 @@ pushd /opt/aprs-symbols
|
|||||||
git checkout 5c2abe2658ee4d2563f3c73b90c6f59124839802
|
git checkout 5c2abe2658ee4d2563f3c73b90c6f59124839802
|
||||||
popd
|
popd
|
||||||
|
|
||||||
apk del .build-deps
|
apt-get -y purge --autoremove $BUILD_PACKAGES
|
||||||
|
apt-get clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
--- sdrplay/install_lib.sh 2018-06-21 18:47:08.000000000 +0000
|
|
||||||
+++ sdrplay/install_lib_patched.sh 2019-12-15 01:49:49.477386963 +0000
|
|
||||||
@@ -3,19 +3,7 @@
|
|
||||||
|
|
||||||
echo "Installing SDRplay RSP API library 2.13..."
|
|
||||||
|
|
||||||
-more sdrplay_license.txt
|
|
||||||
-
|
|
||||||
-while true; do
|
|
||||||
- echo "Press y and RETURN to accept the license agreement and continue with"
|
|
||||||
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
|
||||||
- case $yn in
|
|
||||||
- [Yy]* ) break;;
|
|
||||||
- [Nn]* ) exit;;
|
|
||||||
- * ) echo "Please answer y or n";;
|
|
||||||
- esac
|
|
||||||
-done
|
|
||||||
-
|
|
||||||
-export ARCH=`arch`
|
|
||||||
+export ARCH=`uname -m`
|
|
||||||
export VERS="2.13"
|
|
||||||
|
|
||||||
echo "Architecture: ${ARCH}"
|
|
||||||
@@ -63,16 +51,6 @@
|
|
||||||
echo " "
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
-
|
|
||||||
-if /sbin/ldconfig -p | /bin/fgrep -q libusb-1.0; then
|
|
||||||
- echo "Libusb found, continuing..."
|
|
||||||
-else
|
|
||||||
- echo " "
|
|
||||||
- echo "ERROR: Libusb cannot be found. Please install libusb and then run"
|
|
||||||
- echo "the installer again. Libusb can be installed from http://libusb.info"
|
|
||||||
- echo " "
|
|
||||||
- exit 1
|
|
||||||
-fi
|
|
||||||
|
|
||||||
sudo ldconfig
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
--- sdrplay/install_lib.sh
|
|
||||||
+++ sdrplay/install_lib_patched.sh
|
|
||||||
@@ -3,19 +3,7 @@
|
|
||||||
|
|
||||||
echo "Installing SDRplay RSP API library 2.13..."
|
|
||||||
|
|
||||||
-more sdrplay_license.txt
|
|
||||||
-
|
|
||||||
-while true; do
|
|
||||||
- echo "Press y and RETURN to accept the license agreement and continue with"
|
|
||||||
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
|
||||||
- case $yn in
|
|
||||||
- [Yy]* ) break;;
|
|
||||||
- [Nn]* ) exit;;
|
|
||||||
- * ) echo "Please answer y or n";;
|
|
||||||
- esac
|
|
||||||
-done
|
|
||||||
-
|
|
||||||
-export ARCH=`arch`
|
|
||||||
+export ARCH=`uname -m`
|
|
||||||
export VERS="2.13"
|
|
||||||
|
|
||||||
echo "Architecture: ${ARCH}"
|
|
||||||
@@ -60,16 +48,6 @@
|
|
||||||
echo "ERROR: udev rules directory not found, add udev support and run the"
|
|
||||||
echo "installer again. udev support can be added by running..."
|
|
||||||
echo "sudo apt-get install libudev-dev"
|
|
||||||
- echo " "
|
|
||||||
- exit 1
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
-if /sbin/ldconfig -p | /bin/fgrep -q libusb-1.0; then
|
|
||||||
- echo "Libusb found, continuing..."
|
|
||||||
-else
|
|
||||||
- echo " "
|
|
||||||
- echo "ERROR: Libusb cannot be found. Please install libusb and then run"
|
|
||||||
- echo "the installer again. Libusb can be installed from http://libusb.info"
|
|
||||||
echo " "
|
|
||||||
exit 1
|
|
||||||
fi
|
|
@ -1,40 +0,0 @@
|
|||||||
--- sdrplay/install_lib.sh 2018-06-21 01:57:02.000000000 +0200
|
|
||||||
+++ sdrplay/install_lib_patched.sh 2019-01-22 17:21:06.445804136 +0100
|
|
||||||
@@ -2,19 +2,7 @@
|
|
||||||
|
|
||||||
echo "Installing SDRplay RSP API library 2.13..."
|
|
||||||
|
|
||||||
-more sdrplay_license.txt
|
|
||||||
-
|
|
||||||
-while true; do
|
|
||||||
- echo "Press y and RETURN to accept the license agreement and continue with"
|
|
||||||
- read -p "the installation, or press n and RETURN to exit the installer [y/n] " yn
|
|
||||||
- case $yn in
|
|
||||||
- [Yy]* ) break;;
|
|
||||||
- [Nn]* ) exit;;
|
|
||||||
- * ) echo "Please answer y or n";;
|
|
||||||
- esac
|
|
||||||
-done
|
|
||||||
-
|
|
||||||
-export ARCH=`arch`
|
|
||||||
+export ARCH=`uname -m`
|
|
||||||
export VERS="2.13"
|
|
||||||
|
|
||||||
echo "Architecture: ${ARCH}"
|
|
||||||
@@ -60,16 +48,6 @@
|
|
||||||
echo " "
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
-
|
|
||||||
-if /sbin/ldconfig -p | /bin/fgrep -q libusb-1.0; then
|
|
||||||
- echo "Libusb found, continuing..."
|
|
||||||
-else
|
|
||||||
- echo " "
|
|
||||||
- echo "ERROR: Libusb cannot be found. Please install libusb and then run"
|
|
||||||
- echo "the installer again. Libusb can be installed from http://libusb.info"
|
|
||||||
- echo " "
|
|
||||||
- exit 1
|
|
||||||
-fi
|
|
||||||
|
|
||||||
#echo "Installing SoapySDRPlay..."
|
|
||||||
|
|
@ -1,11 +1,6 @@
|
|||||||
@import url("openwebrx-header.css");
|
@import url("openwebrx-header.css");
|
||||||
@import url("openwebrx-globals.css");
|
@import url("openwebrx-globals.css");
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #2e2e2e;
|
|
||||||
color: #DDD;
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttons {
|
.buttons {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
12
htdocs/css/bootstrap.min.css
vendored
Normal file
12
htdocs/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -5,7 +5,3 @@ h1 {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 50px 0;
|
margin: 50px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
@ -1,10 +1,6 @@
|
|||||||
@import url("openwebrx-header.css");
|
@import url("openwebrx-header.css");
|
||||||
@import url("openwebrx-globals.css");
|
@import url("openwebrx-globals.css");
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #2e2e2e;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login {
|
.login {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
@ -13,7 +9,6 @@ body {
|
|||||||
|
|
||||||
width: 500px;
|
width: 500px;
|
||||||
|
|
||||||
background-color: #ddd;
|
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border: 1px solid #575757;
|
border: 1px solid #575757;
|
||||||
@ -25,8 +20,5 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-login {
|
.btn-login {
|
||||||
color: #FFF;
|
|
||||||
background-color: #2e2e2e;
|
|
||||||
border-color: #2e2e2e;
|
|
||||||
height: 50px;
|
height: 50px;
|
||||||
}
|
}
|
@ -43,6 +43,15 @@
|
|||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#webrx-tob-container, #webrx-top-container * {
|
||||||
|
line-height: initial;
|
||||||
|
box-sizing: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
#webrx-top-container img {
|
||||||
|
vertical-align: initial;
|
||||||
|
}
|
||||||
|
|
||||||
#webrx-top-logo
|
#webrx-top-logo
|
||||||
{
|
{
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<HTML><HEAD>
|
<HTML><HEAD>
|
||||||
<TITLE>OpenWebRX Feature report</TITLE>
|
<TITLE>OpenWebRX Feature report</TITLE>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
||||||
<link rel="stylesheet" href="static/css/features.css">
|
<link rel="stylesheet" href="static/css/features.css">
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"></script>
|
||||||
|
@ -3,12 +3,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>OpenWebRX Settings</title>
|
<title>OpenWebRX Settings</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
||||||
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
|
||||||
<script src="static/lib/Header.js"></script>
|
|
||||||
<script src="https://unpkg.com/location-picker/dist/location-picker.min.js"></script>
|
<script src="https://unpkg.com/location-picker/dist/location-picker.min.js"></script>
|
||||||
<script src="static/settings.js"></script>
|
<script src="compiled/settings.js"></script>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<div id="webrx-top-container">
|
<div id="webrx-top-container">
|
||||||
<div id="webrx-top-photo-clip">
|
<div id="webrx-top-photo-clip">
|
||||||
<img src="static/gfx/openwebrx-top-photo.jpg" id="webrx-top-photo"/>
|
<img src="static/gfx/openwebrx-top-photo.jpg" id="webrx-top-photo" alt="Receiver panorama"/>
|
||||||
<div id="webrx-top-bar" class="webrx-top-bar-parts">
|
<div id="webrx-top-bar" class="webrx-top-bar-parts">
|
||||||
<a href="https://www.openwebrx.de/" target="_blank"><img src="static/gfx/openwebrx-top-logo.png" id="webrx-top-logo" /></a>
|
<a href="https://www.openwebrx.de/" target="_blank"><img src="static/gfx/openwebrx-top-logo.png" id="webrx-top-logo" alt="OpenWebRX Logo"/></a>
|
||||||
<img id="webrx-rx-avatar" class="openwebrx-photo-trigger" src="static/gfx/openwebrx-avatar.png"/>
|
<img id="webrx-rx-avatar" class="openwebrx-photo-trigger" src="static/gfx/openwebrx-avatar.png" alt="Receiver avatar"/>
|
||||||
<div id="webrx-rx-texts">
|
<div id="webrx-rx-texts">
|
||||||
<div id="webrx-rx-title" class="openwebrx-photo-trigger"></div>
|
<div id="webrx-rx-title" class="openwebrx-photo-trigger"></div>
|
||||||
<div id="webrx-rx-desc" class="openwebrx-photo-trigger"></div>
|
<div id="webrx-rx-desc" class="openwebrx-photo-trigger"></div>
|
||||||
@ -13,10 +13,10 @@
|
|||||||
<a id="openwebrx-rx-details-arrow-down" class="openwebrx-photo-trigger"><img src="static/gfx/openwebrx-rx-details-arrow.png" /></a>
|
<a id="openwebrx-rx-details-arrow-down" class="openwebrx-photo-trigger"><img src="static/gfx/openwebrx-rx-details-arrow.png" /></a>
|
||||||
</div>
|
</div>
|
||||||
<section id="openwebrx-main-buttons">
|
<section id="openwebrx-main-buttons">
|
||||||
<div class="button" data-toggle-panel="openwebrx-panel-status"><img src="static/gfx/openwebrx-panel-status.png" /><br/>Status</div>
|
<div class="button" data-toggle-panel="openwebrx-panel-status"><img src="static/gfx/openwebrx-panel-status.png" alt="Status"/><br/>Status</div>
|
||||||
<div class="button" data-toggle-panel="openwebrx-panel-log"><img src="static/gfx/openwebrx-panel-log.png" /><br/>Log</div>
|
<div class="button" data-toggle-panel="openwebrx-panel-log"><img src="static/gfx/openwebrx-panel-log.png" alt="Log"/><br/>Log</div>
|
||||||
<div class="button" data-toggle-panel="openwebrx-panel-receiver"><img src="static/gfx/openwebrx-panel-receiver.png" /><br/>Receiver</div>
|
<div class="button" data-toggle-panel="openwebrx-panel-receiver"><img src="static/gfx/openwebrx-panel-receiver.png" alt="Receiver"/><br/>Receiver</div>
|
||||||
<a class="button" href="map" target="openwebrx-map"><img src="static/gfx/openwebrx-panel-map.png" /><br/>Map</a>
|
<a class="button" href="map" target="openwebrx-map"><img src="static/gfx/openwebrx-panel-map.png" alt="Map"/><br/>Map</a>
|
||||||
${settingslink}
|
${settingslink}
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@ -222,7 +222,7 @@ DemodulatorPanel.prototype.transformHashParams = function(params) {
|
|||||||
var ret = {
|
var ret = {
|
||||||
mod: params.secondary_mod || params.mod
|
mod: params.secondary_mod || params.mod
|
||||||
};
|
};
|
||||||
if (params.offset_frequency) ret.offset_frequency = params.offset_frequency;
|
if (typeof(params.offset_frequency) !== 'undefined') ret.offset_frequency = params.offset_frequency;
|
||||||
if (typeof(params.sql) !== 'undefined') ret.squelch_level = parseInt(params.sql);
|
if (typeof(params.sql) !== 'undefined') ret.squelch_level = parseInt(params.sql);
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,7 @@ function Header(el) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.init_rx_photo();
|
this.init_rx_photo();
|
||||||
|
this.download_details();
|
||||||
};
|
};
|
||||||
|
|
||||||
Header.prototype.setDetails = function(details) {
|
Header.prototype.setDetails = function(details) {
|
||||||
@ -57,6 +58,13 @@ Header.prototype.toggle_rx_photo = function(ev) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Header.prototype.download_details = function() {
|
||||||
|
var self = this;
|
||||||
|
$.ajax('api/receiverdetails').done(function(data){
|
||||||
|
self.setDetails(data);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
$.fn.header = function() {
|
$.fn.header = function() {
|
||||||
if (!this.data('header')) {
|
if (!this.data('header')) {
|
||||||
this.data('header', new Header(this));
|
this.data('header', new Header(this));
|
||||||
|
138
htdocs/lib/settings/Input.js
Normal file
138
htdocs/lib/settings/Input.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
function Input(name, value, options) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
this.options = options;
|
||||||
|
this.label = options && options.label || name;
|
||||||
|
};
|
||||||
|
|
||||||
|
Input.prototype.getClasses = function() {
|
||||||
|
return ['form-control', 'form-control-sm'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Input.prototype.bootstrapify = function(input) {
|
||||||
|
this.getClasses().forEach(input.addClass.bind(input));
|
||||||
|
return [
|
||||||
|
'<div class="form-group row">',
|
||||||
|
'<label class="col-form-label col-form-label-sm col-3" for="' + this.name + '">' + this.label + '</label>',
|
||||||
|
'<div class="col-9">',
|
||||||
|
$.map(input, function(el) {
|
||||||
|
return el.outerHTML;
|
||||||
|
}).join(''),
|
||||||
|
'</div>',
|
||||||
|
'</div>'
|
||||||
|
].join('');
|
||||||
|
};
|
||||||
|
|
||||||
|
function TextInput() {
|
||||||
|
Input.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
TextInput.prototype = new Input();
|
||||||
|
|
||||||
|
TextInput.prototype.render = function() {
|
||||||
|
return this.bootstrapify($('<input type="text" name="' + this.name + '" value="' + this.value + '">'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function NumberInput() {
|
||||||
|
Input.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
NumberInput.prototype = new Input();
|
||||||
|
|
||||||
|
NumberInput.prototype.render = function() {
|
||||||
|
return this.bootstrapify($('<input type="number" name="' + this.name + '" value="' + this.value + '">'));
|
||||||
|
};
|
||||||
|
|
||||||
|
function SoapyGainInput() {
|
||||||
|
Input.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
SoapyGainInput.prototype = new Input();
|
||||||
|
|
||||||
|
SoapyGainInput.prototype.getClasses = function() {
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
|
||||||
|
SoapyGainInput.prototype.render = function(){
|
||||||
|
var markup = $(
|
||||||
|
'<div class="row form-group">' +
|
||||||
|
'<div class="col-4">Gain mode</div>' +
|
||||||
|
'<div class="col-8">' +
|
||||||
|
'<select class="form-control form-control-sm">' +
|
||||||
|
'<option value="auto">automatic gain</option>' +
|
||||||
|
'<option value="single">single gain value</option>' +
|
||||||
|
'<option value="separate">separate gain values</option>' +
|
||||||
|
'</select>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'<div class="row option form-group gain-mode-single">' +
|
||||||
|
'<div class="col-4">Gain</div>' +
|
||||||
|
'<div class="col-8">' +
|
||||||
|
'<input class="form-control form-control-sm" type="number">' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>' +
|
||||||
|
this.options.gains.map(function(g){
|
||||||
|
return '<div class="row option form-group gain-mode-separate">' +
|
||||||
|
'<div class="col-4">' + g + '</div>' +
|
||||||
|
'<div class="col-8">' +
|
||||||
|
'<input class="form-control form-control-sm" data-gain="' + g + '" type="number">' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
|
}).join('')
|
||||||
|
);
|
||||||
|
var el = $(this.bootstrapify(markup))
|
||||||
|
var setMode = function(mode){
|
||||||
|
el.find('select').val(mode);
|
||||||
|
el.find('.option').hide();
|
||||||
|
el.find('.gain-mode-' + mode).show();
|
||||||
|
};
|
||||||
|
el.on('change', 'select', function(){
|
||||||
|
var mode = $(this).val();
|
||||||
|
setMode(mode);
|
||||||
|
});
|
||||||
|
if (typeof(this.value) === 'number') {
|
||||||
|
setMode('single');
|
||||||
|
el.find('.gain-mode-single input').val(this.value);
|
||||||
|
} else if (typeof(this.value) === 'string') {
|
||||||
|
if (this.value === 'auto') {
|
||||||
|
setMode('auto');
|
||||||
|
} else {
|
||||||
|
setMode('separate');
|
||||||
|
values = $.extend.apply($, this.value.split(',').map(function(seg){
|
||||||
|
var split = seg.split('=');
|
||||||
|
if (split.length < 2) return;
|
||||||
|
var res = {};
|
||||||
|
res[split[0]] = parseInt(split[1]);
|
||||||
|
return res;
|
||||||
|
}));
|
||||||
|
el.find('.gain-mode-separate input').each(function(){
|
||||||
|
var $input = $(this);
|
||||||
|
var g = $input.data('gain');
|
||||||
|
$input.val(g in values ? values[g] : 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setMode('auto');
|
||||||
|
}
|
||||||
|
return el;
|
||||||
|
};
|
||||||
|
|
||||||
|
function ProfileInput() {
|
||||||
|
Input.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
ProfileInput.prototype = new Input();
|
||||||
|
|
||||||
|
ProfileInput.prototype.render = function() {
|
||||||
|
return $('<div><h3>Profiles</h3></div>');
|
||||||
|
};
|
||||||
|
|
||||||
|
function SchedulerInput() {
|
||||||
|
Input.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
SchedulerInput.prototype = new Input();
|
||||||
|
|
||||||
|
SchedulerInput.prototype.render = function() {
|
||||||
|
return $('<div><h3>Scheduler</h3></div>');
|
||||||
|
};
|
252
htdocs/lib/settings/SdrDevice.js
Normal file
252
htdocs/lib/settings/SdrDevice.js
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
function SdrDevice(el, data) {
|
||||||
|
this.el = el;
|
||||||
|
this.data = data;
|
||||||
|
this.inputs = {};
|
||||||
|
this.render();
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
el.on('click', '.fieldselector .btn', function() {
|
||||||
|
var key = el.find('.fieldselector select').val();
|
||||||
|
self.data[key] = self.getInitialValue(key);
|
||||||
|
self.render();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.create = function(el) {
|
||||||
|
var data = JSON.parse(decodeURIComponent(el.data('config')));
|
||||||
|
var type = data.type;
|
||||||
|
var constructor = SdrDevice.types[type] || SdrDevice;
|
||||||
|
return new constructor(el, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getData = function() {
|
||||||
|
return $.extend(new Object(), this.getDefaults(), this.data);
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getDefaults = function() {
|
||||||
|
var defaults = {}
|
||||||
|
$.each(this.getMappings(), function(k, v) {
|
||||||
|
if (!v.includeInDefault) return;
|
||||||
|
defaults[k] = 'initialValue' in v ? v['initialValue'] : false;
|
||||||
|
});
|
||||||
|
return defaults;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getMappings = function() {
|
||||||
|
return {
|
||||||
|
"name": {
|
||||||
|
constructor: TextInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Name"
|
||||||
|
},
|
||||||
|
initialValue: "",
|
||||||
|
includeInDefault: true
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
constructor: TextInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Type"
|
||||||
|
},
|
||||||
|
initialValue: '',
|
||||||
|
includeInDefault: true
|
||||||
|
},
|
||||||
|
"ppm": {
|
||||||
|
constructor: NumberInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "PPM"
|
||||||
|
},
|
||||||
|
initialValue: 0
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
constructor: ProfileInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Profiles"
|
||||||
|
},
|
||||||
|
initialValue: [],
|
||||||
|
includeInDefault: true,
|
||||||
|
position: 100
|
||||||
|
},
|
||||||
|
"scheduler": {
|
||||||
|
constructor: SchedulerInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Scheduler",
|
||||||
|
},
|
||||||
|
initialValue: {},
|
||||||
|
position: 101
|
||||||
|
},
|
||||||
|
"rf_gain": {
|
||||||
|
constructor: TextInput,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Gain",
|
||||||
|
},
|
||||||
|
initialValue: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getMapping = function(key) {
|
||||||
|
var mappings = this.getMappings();
|
||||||
|
return mappings[key];
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getInputClass = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && mapping.constructor || TextInput;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getInitialValue = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && ('initialValue' in mapping) ? mapping['initialValue'] : false;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getPosition = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && mapping.position || 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getInputOptions = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && mapping.inputOptions || {};
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getLabel = function(key) {
|
||||||
|
var options = this.getInputOptions(key);
|
||||||
|
return options && options.label || key;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.render = function() {
|
||||||
|
var self = this;
|
||||||
|
self.el.empty();
|
||||||
|
var data = this.getData();
|
||||||
|
Object.keys(data).sort(function(a, b){
|
||||||
|
return self.getPosition(a) - self.getPosition(b);
|
||||||
|
}).forEach(function(key){
|
||||||
|
var value = data[key];
|
||||||
|
var inputClass = self.getInputClass(key);
|
||||||
|
var input = new inputClass(key, value, self.getInputOptions(key));
|
||||||
|
self.inputs[key] = input;
|
||||||
|
self.el.append(input.render());
|
||||||
|
});
|
||||||
|
self.el.append(this.renderFieldSelector());
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.renderFieldSelector = function() {
|
||||||
|
var self = this;
|
||||||
|
return '<div class="fieldselector">' +
|
||||||
|
'<h3>Add new configuration options<h3>' +
|
||||||
|
'<div class="form-group row">' +
|
||||||
|
'<div class="col-3"><select class="form-control form-control-sm">' +
|
||||||
|
Object.keys(self.getMappings()).filter(function(m){
|
||||||
|
return !(m in self.data);
|
||||||
|
}).map(function(m) {
|
||||||
|
return '<option value="' + m + '">' + self.getLabel(m) + '</option>';
|
||||||
|
}).join('') +
|
||||||
|
'</select></div>' +
|
||||||
|
'<div class="col-2">' +
|
||||||
|
'<div class="btn btn-primary">Add to config</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
|
};
|
||||||
|
|
||||||
|
RtlSdrDevice = function() {
|
||||||
|
SdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
RtlSdrDevice.prototype = Object.create(SdrDevice.prototype);
|
||||||
|
RtlSdrDevice.prototype.constructor = RtlSdrDevice;
|
||||||
|
|
||||||
|
RtlSdrDevice.prototype.getMappings = function() {
|
||||||
|
var mappings = SdrDevice.prototype.getMappings.apply(this, arguments);
|
||||||
|
return $.extend(new Object(), mappings, {
|
||||||
|
"device": {
|
||||||
|
constructor: TextInput,
|
||||||
|
inputOptions:{
|
||||||
|
label: "Serial number"
|
||||||
|
},
|
||||||
|
initialValue: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SoapySdrDevice = function() {
|
||||||
|
SdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
SoapySdrDevice.prototype = Object.create(SdrDevice.prototype);
|
||||||
|
SoapySdrDevice.prototype.constructor = SoapySdrDevice;
|
||||||
|
|
||||||
|
SoapySdrDevice.prototype.getMappings = function() {
|
||||||
|
var mappings = SdrDevice.prototype.getMappings.apply(this, arguments);
|
||||||
|
return $.extend(new Object(), mappings, {
|
||||||
|
"device": {
|
||||||
|
constructor: TextInput,
|
||||||
|
inputOptions:{
|
||||||
|
label: "Soapy device selector"
|
||||||
|
},
|
||||||
|
initialValue: ""
|
||||||
|
},
|
||||||
|
"rf_gain": {
|
||||||
|
constructor: SoapyGainInput,
|
||||||
|
initialValue: 0,
|
||||||
|
inputOptions: {
|
||||||
|
label: "Gain",
|
||||||
|
gains: this.getGains()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SoapySdrDevice.prototype.getGains = function() {
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrplaySdrDevice = function() {
|
||||||
|
SoapySdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrplaySdrDevice.prototype = Object.create(SoapySdrDevice.prototype);
|
||||||
|
SdrplaySdrDevice.prototype.constructor = SdrplaySdrDevice;
|
||||||
|
|
||||||
|
SdrplaySdrDevice.prototype.getGains = function() {
|
||||||
|
return ['RFGR', 'IFGR'];
|
||||||
|
};
|
||||||
|
|
||||||
|
AirspyHfSdrDevice = function() {
|
||||||
|
SoapySdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
AirspyHfSdrDevice.prototype = Object.create(SoapySdrDevice.prototype);
|
||||||
|
AirspyHfSdrDevice.prototype.constructor = AirspyHfSdrDevice;
|
||||||
|
|
||||||
|
AirspyHfSdrDevice.prototype.getGains = function() {
|
||||||
|
return ['RF', 'VGA'];
|
||||||
|
};
|
||||||
|
|
||||||
|
HackRfSdrDevice = function() {
|
||||||
|
SoapySdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
HackRfSdrDevice.prototype = Object.create(SoapySdrDevice.prototype);
|
||||||
|
HackRfSdrDevice.prototype.constructor = HackRfSdrDevice;
|
||||||
|
|
||||||
|
HackRfSdrDevice.prototype.getGains = function() {
|
||||||
|
return ['LNA', 'VGA', 'AMP'];
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.types = {
|
||||||
|
'rtl_sdr': RtlSdrDevice,
|
||||||
|
'sdrplay': SdrplaySdrDevice,
|
||||||
|
'airspyhf': AirspyHfSdrDevice,
|
||||||
|
'hackrf': HackRfSdrDevice
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.sdrdevice = function() {
|
||||||
|
return this.map(function(){
|
||||||
|
var el = $(this);
|
||||||
|
if (!el.data('sdrdevice')) {
|
||||||
|
el.data('sdrdevice', SdrDevice.create(el));
|
||||||
|
}
|
||||||
|
return el.data('sdrdevice');
|
||||||
|
});
|
||||||
|
};
|
@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>OpenWebRX Login</title>
|
<title>OpenWebRX Login</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/login.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/login.css" />
|
||||||
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
||||||
<script src="static/lib/Header.js"></script>
|
<script src="static/lib/Header.js"></script>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<label for="password">Password</label>
|
<label for="password">Password</label>
|
||||||
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
|
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-login">Login</button>
|
<button type="submit" class="btn btn-secondary btn-login">Login</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
@ -3,11 +3,9 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>OpenWebRX Settings</title>
|
<title>OpenWebRX Settings</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
||||||
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
<script src="compiled/settings.js"></script>
|
||||||
<script src="static/lib/Header.js"></script>
|
|
||||||
<script src="static/settings.js"></script>
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -3,11 +3,9 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>OpenWebRX Settings</title>
|
<title>OpenWebRX Settings</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/admin.css" />
|
||||||
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
<script src="compiled/settings.js"></script>
|
||||||
<script src="static/lib/Header.js"></script>
|
|
||||||
<script src="static/settings.js"></script>
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -19,5 +19,7 @@ $(function(){
|
|||||||
$lon.val(pos.lng);
|
$lon.val(pos.lng);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
|
$(".sdrdevice").sdrdevice();
|
||||||
});
|
});
|
@ -1,20 +1,19 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
from http.server import HTTPServer
|
from http.server import HTTPServer
|
||||||
from owrx.http import RequestHandler
|
from owrx.http import RequestHandler
|
||||||
from owrx.config import Config
|
from owrx.config import Config
|
||||||
from owrx.feature import FeatureDetector
|
from owrx.feature import FeatureDetector
|
||||||
from owrx.sdr import SdrService
|
from owrx.sdr import SdrService
|
||||||
from socketserver import ThreadingMixIn
|
from socketserver import ThreadingMixIn
|
||||||
from owrx.sdrhu import SdrHuUpdater
|
|
||||||
from owrx.service import Services
|
from owrx.service import Services
|
||||||
from owrx.websocket import WebSocketConnection
|
from owrx.websocket import WebSocketConnection
|
||||||
from owrx.pskreporter import PskReporter
|
from owrx.pskreporter import PskReporter
|
||||||
from owrx.version import openwebrx_version
|
from owrx.version import openwebrx_version
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class ThreadedHttpServer(ThreadingMixIn, HTTPServer):
|
class ThreadedHttpServer(ThreadingMixIn, HTTPServer):
|
||||||
pass
|
pass
|
||||||
@ -59,10 +58,6 @@ Support and info: https://groups.io/g/openwebrx
|
|||||||
# Get error messages about unknown / unavailable features as soon as possible
|
# Get error messages about unknown / unavailable features as soon as possible
|
||||||
SdrService.loadProps()
|
SdrService.loadProps()
|
||||||
|
|
||||||
if "sdrhu_key" in pm and pm["sdrhu_public_listing"]:
|
|
||||||
updater = SdrHuUpdater()
|
|
||||||
updater.start()
|
|
||||||
|
|
||||||
Services.start()
|
Services.start()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -25,6 +25,12 @@ class QueueJob(object):
|
|||||||
def run(self):
|
def run(self):
|
||||||
self.decoder.decode(self)
|
self.decoder.decode(self)
|
||||||
|
|
||||||
|
def unlink(self):
|
||||||
|
try:
|
||||||
|
os.unlink(self.file)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class QueueWorker(threading.Thread):
|
class QueueWorker(threading.Thread):
|
||||||
def __init__(self, queue):
|
def __init__(self, queue):
|
||||||
@ -40,6 +46,9 @@ class QueueWorker(threading.Thread):
|
|||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("failed to decode job")
|
logger.exception("failed to decode job")
|
||||||
self.queue.onError()
|
self.queue.onError()
|
||||||
|
finally:
|
||||||
|
job.unlink()
|
||||||
|
|
||||||
self.queue.task_done()
|
self.queue.task_done()
|
||||||
|
|
||||||
|
|
||||||
@ -159,11 +168,12 @@ class AudioWriter(object):
|
|||||||
self.switchingLock.release()
|
self.switchingLock.release()
|
||||||
|
|
||||||
file.close()
|
file.close()
|
||||||
|
job = QueueJob(self, filename, self.dsp.get_operating_freq())
|
||||||
try:
|
try:
|
||||||
DecoderQueue.getSharedInstance().put(QueueJob(self, filename, self.dsp.get_operating_freq()))
|
DecoderQueue.getSharedInstance().put(job)
|
||||||
except Full:
|
except Full:
|
||||||
logger.warning("decoding queue overflow; dropping one file")
|
logger.warning("decoding queue overflow; dropping one file")
|
||||||
os.unlink(filename)
|
job.unlink()
|
||||||
self._scheduleNextSwitch()
|
self._scheduleNextSwitch()
|
||||||
|
|
||||||
def decode(self, job: QueueJob):
|
def decode(self, job: QueueJob):
|
||||||
@ -183,7 +193,6 @@ class AudioWriter(object):
|
|||||||
except subprocess.TimeoutExpired:
|
except subprocess.TimeoutExpired:
|
||||||
logger.warning("subprocess (pid=%i}) did not terminate correctly; sending kill signal.", decoder.pid)
|
logger.warning("subprocess (pid=%i}) did not terminate correctly; sending kill signal.", decoder.pid)
|
||||||
decoder.kill()
|
decoder.kill()
|
||||||
os.unlink(job.file)
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
(self.wavefilename, self.wavefile) = self.getWaveFile()
|
(self.wavefilename, self.wavefile) = self.getWaveFile()
|
||||||
|
@ -26,6 +26,11 @@ class ConfigMigrator(ABC):
|
|||||||
def migrate(self, config):
|
def migrate(self, config):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def renameKey(self, config, old, new):
|
||||||
|
if old in config and not new in config:
|
||||||
|
config[new] = config[old]
|
||||||
|
del config[old]
|
||||||
|
|
||||||
|
|
||||||
class ConfigMigratorVersion1(ConfigMigrator):
|
class ConfigMigratorVersion1(ConfigMigrator):
|
||||||
def migrate(self, config):
|
def migrate(self, config):
|
||||||
@ -37,6 +42,9 @@ class ConfigMigratorVersion1(ConfigMigrator):
|
|||||||
levels = config["waterfall_auto_level_margin"]
|
levels = config["waterfall_auto_level_margin"]
|
||||||
config["waterfall_auto_level_margin"] = {"min": levels[0], "max": levels[1]}
|
config["waterfall_auto_level_margin"] = {"min": levels[0], "max": levels[1]}
|
||||||
|
|
||||||
|
self.renameKey(config, "wsjt_queue_workers", "decoding_queue_workers")
|
||||||
|
self.renameKey(config, "wsjt_queue_length", "decoding_queue_length")
|
||||||
|
|
||||||
config["version"] = 2
|
config["version"] = 2
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from owrx.config import Config
|
from owrx.config import Config
|
||||||
|
from owrx.details import ReceiverDetails
|
||||||
from owrx.dsp import DspManager
|
from owrx.dsp import DspManager
|
||||||
from owrx.cpu import CpuUsageThread
|
from owrx.cpu import CpuUsageThread
|
||||||
from owrx.sdr import SdrService
|
from owrx.sdr import SdrService
|
||||||
@ -9,7 +10,6 @@ from owrx.version import openwebrx_version
|
|||||||
from owrx.bands import Bandplan
|
from owrx.bands import Bandplan
|
||||||
from owrx.bookmarks import Bookmarks
|
from owrx.bookmarks import Bookmarks
|
||||||
from owrx.map import Map
|
from owrx.map import Map
|
||||||
from owrx.locator import Locator
|
|
||||||
from owrx.property import PropertyStack
|
from owrx.property import PropertyStack
|
||||||
from owrx.modes import Modes, DigitalMode
|
from owrx.modes import Modes, DigitalMode
|
||||||
from multiprocessing import Queue
|
from multiprocessing import Queue
|
||||||
@ -68,18 +68,10 @@ class OpenWebRxClient(Client, metaclass=ABCMeta):
|
|||||||
def __init__(self, conn):
|
def __init__(self, conn):
|
||||||
super().__init__(conn)
|
super().__init__(conn)
|
||||||
|
|
||||||
receiver_details = Config.get().filter(
|
receiver_details = ReceiverDetails()
|
||||||
"receiver_name",
|
|
||||||
"receiver_location",
|
|
||||||
"receiver_asl",
|
|
||||||
"receiver_gps",
|
|
||||||
"photo_title",
|
|
||||||
"photo_desc",
|
|
||||||
)
|
|
||||||
|
|
||||||
def send_receiver_info(*args):
|
def send_receiver_info(*args):
|
||||||
receiver_info = receiver_details.__dict__()
|
receiver_info = receiver_details.__dict__()
|
||||||
receiver_info["locator"] = Locator.fromCoordinates(receiver_info["receiver_gps"])
|
|
||||||
self.write_receiver_details(receiver_info)
|
self.write_receiver_details(receiver_info)
|
||||||
|
|
||||||
# TODO unsubscribe
|
# TODO unsubscribe
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from . import Controller
|
from . import Controller
|
||||||
from owrx.feature import FeatureDetector
|
from owrx.feature import FeatureDetector
|
||||||
|
from owrx.details import ReceiverDetails
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
@ -7,3 +8,8 @@ class ApiController(Controller):
|
|||||||
def indexAction(self):
|
def indexAction(self):
|
||||||
data = json.dumps(FeatureDetector().feature_report())
|
data = json.dumps(FeatureDetector().feature_report())
|
||||||
self.send_response(data, content_type="application/json")
|
self.send_response(data, content_type="application/json")
|
||||||
|
|
||||||
|
def receiverDetails(self):
|
||||||
|
receiver_details = ReceiverDetails()
|
||||||
|
data = json.dumps(receiver_details.__dict__())
|
||||||
|
self.send_response(data, content_type="application/json")
|
||||||
|
@ -87,6 +87,13 @@ class CompiledAssetsController(Controller):
|
|||||||
"lib/Header.js",
|
"lib/Header.js",
|
||||||
"map.js",
|
"map.js",
|
||||||
],
|
],
|
||||||
|
"settings.js": [
|
||||||
|
"lib/jquery-3.2.1.min.js",
|
||||||
|
"lib/Header.js",
|
||||||
|
"lib/settings/Input.js",
|
||||||
|
"lib/settings/SdrDevice.js",
|
||||||
|
"settings.js",
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
def indexAction(self):
|
def indexAction(self):
|
||||||
|
@ -13,6 +13,8 @@ from owrx.form import (
|
|||||||
ServicesCheckboxInput,
|
ServicesCheckboxInput,
|
||||||
Js8ProfileCheckboxInput,
|
Js8ProfileCheckboxInput,
|
||||||
)
|
)
|
||||||
|
from urllib.parse import quote
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -55,18 +57,24 @@ class SdrSettingsController(AdminController):
|
|||||||
return variables
|
return variables
|
||||||
|
|
||||||
def render_devices(self):
|
def render_devices(self):
|
||||||
def render_devicde(device_id, config):
|
return "".join(self.render_device(key, value) for key, value in Config.get()["sdrs"].items())
|
||||||
|
|
||||||
|
def render_device(self, device_id, config):
|
||||||
return """
|
return """
|
||||||
<div class="card device bg-dark text-white">
|
<div class="card device bg-dark text-white">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
{device_name}
|
{device_name}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
device settings go here
|
{form}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
""".format(device_name=config["name"])
|
""".format(device_name=config["name"], form=self.render_form(device_id, config))
|
||||||
return "".join(render_devicde(key, value) for key, value in Config.get()["sdrs"].items())
|
|
||||||
|
def render_form(self, device_id, config):
|
||||||
|
return """
|
||||||
|
<form class="sdrdevice" data-config="{formdata}"></form>
|
||||||
|
""".format(device_id=device_id, formdata=quote(json.dumps(config)))
|
||||||
|
|
||||||
def indexAction(self):
|
def indexAction(self):
|
||||||
self.serve_template("sdrsettings.html", **self.template_variables())
|
self.serve_template("sdrsettings.html", **self.template_variables())
|
||||||
@ -236,18 +244,6 @@ class GeneralSettingsController(AdminController):
|
|||||||
infotext="This callsign will be used to send spots to pskreporter.info",
|
infotext="This callsign will be used to send spots to pskreporter.info",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Section(
|
|
||||||
"sdr.hu",
|
|
||||||
TextInput(
|
|
||||||
"sdrhu_key",
|
|
||||||
"sdr.hu key",
|
|
||||||
infotext='Please obtain your personal key on <a href="https://sdr.hu" target="_blank">sdr.hu</a>',
|
|
||||||
),
|
|
||||||
CheckboxInput(
|
|
||||||
"sdrhu_public_listing", "List on sdr.hu", "List my receiver on sdr.hu"
|
|
||||||
),
|
|
||||||
TextInput("server_hostname", "Hostname"),
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def render_sections(self):
|
def render_sections(self):
|
||||||
|
@ -9,26 +9,6 @@ import pkg_resources
|
|||||||
|
|
||||||
|
|
||||||
class StatusController(Controller):
|
class StatusController(Controller):
|
||||||
def indexAction(self):
|
|
||||||
pm = Config.get()
|
|
||||||
# convert to old format
|
|
||||||
gps = (pm["receiver_gps"]["lat"], pm["receiver_gps"]["lon"])
|
|
||||||
avatar_path = pkg_resources.resource_filename("htdocs", "gfx/openwebrx-avatar.png")
|
|
||||||
# TODO keys that have been left out since they are no longer simple strings: sdr_hw, bands, antenna
|
|
||||||
vars = {
|
|
||||||
"status": "active",
|
|
||||||
"name": pm["receiver_name"],
|
|
||||||
"op_email": pm["receiver_admin"],
|
|
||||||
"users": ClientRegistry.getSharedInstance().clientCount(),
|
|
||||||
"users_max": pm["max_clients"],
|
|
||||||
"gps": gps,
|
|
||||||
"asl": pm["receiver_asl"],
|
|
||||||
"loc": pm["receiver_location"],
|
|
||||||
"sw_version": openwebrx_version,
|
|
||||||
"avatar_ctime": os.path.getctime(avatar_path),
|
|
||||||
}
|
|
||||||
self.send_response("\n".join(["{key}={value}".format(key=key, value=value) for key, value in vars.items()]))
|
|
||||||
|
|
||||||
def getProfileStats(self, profile):
|
def getProfileStats(self, profile):
|
||||||
return {
|
return {
|
||||||
"name": profile["name"],
|
"name": profile["name"],
|
||||||
@ -45,7 +25,7 @@ class StatusController(Controller):
|
|||||||
}
|
}
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
def jsonAction(self):
|
def indexAction(self):
|
||||||
pm = Config.get()
|
pm = Config.get()
|
||||||
|
|
||||||
status = {
|
status = {
|
||||||
|
@ -23,7 +23,7 @@ class WebpageController(TemplateController):
|
|||||||
settingslink = ""
|
settingslink = ""
|
||||||
pm = Config.get()
|
pm = Config.get()
|
||||||
if "webadmin_enabled" in pm and pm["webadmin_enabled"]:
|
if "webadmin_enabled" in pm and pm["webadmin_enabled"]:
|
||||||
settingslink = """<a class="button" href="settings" target="openwebrx-settings"><img src="static/gfx/openwebrx-panel-settings.png" /><br/>Settings</a>"""
|
settingslink = """<a class="button" href="settings" target="openwebrx-settings"><img src="static/gfx/openwebrx-panel-settings.png" alt="Settings"/><br/>Settings</a>"""
|
||||||
header = self.render_template("include/header.include.html", settingslink=settingslink)
|
header = self.render_template("include/header.include.html", settingslink=settingslink)
|
||||||
return {"header": header}
|
return {"header": header}
|
||||||
|
|
||||||
|
21
owrx/details.py
Normal file
21
owrx/details.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from owrx.config import Config
|
||||||
|
from owrx.locator import Locator
|
||||||
|
from owrx.property import PropertyFilter
|
||||||
|
|
||||||
|
|
||||||
|
class ReceiverDetails(PropertyFilter):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(
|
||||||
|
Config.get(),
|
||||||
|
"receiver_name",
|
||||||
|
"receiver_location",
|
||||||
|
"receiver_asl",
|
||||||
|
"receiver_gps",
|
||||||
|
"photo_title",
|
||||||
|
"photo_desc",
|
||||||
|
)
|
||||||
|
|
||||||
|
def __dict__(self):
|
||||||
|
receiver_info = super().__dict__()
|
||||||
|
receiver_info["locator"] = Locator.fromCoordinates(receiver_info["receiver_gps"])
|
||||||
|
return receiver_info
|
@ -24,12 +24,12 @@ class FeatureDetector(object):
|
|||||||
"rtl_sdr": ["rtl_connector"],
|
"rtl_sdr": ["rtl_connector"],
|
||||||
"rtl_sdr_soapy": ["soapy_connector", "soapy_rtl_sdr"],
|
"rtl_sdr_soapy": ["soapy_connector", "soapy_rtl_sdr"],
|
||||||
"sdrplay": ["soapy_connector", "soapy_sdrplay"],
|
"sdrplay": ["soapy_connector", "soapy_sdrplay"],
|
||||||
"hackrf": ["hackrf_transfer"],
|
"hackrf": ["soapy_connector", "soapy_hackrf"],
|
||||||
"perseussdr": ["perseustest"],
|
"perseussdr": ["perseustest"],
|
||||||
"airspy": ["soapy_connector", "soapy_airspy"],
|
"airspy": ["soapy_connector", "soapy_airspy"],
|
||||||
"airspyhf": ["soapy_connector", "soapy_airspyhf"],
|
"airspyhf": ["soapy_connector", "soapy_airspyhf"],
|
||||||
"lime_sdr": ["soapy_connector", "soapy_lime_sdr"],
|
"lime_sdr": ["soapy_connector", "soapy_lime_sdr"],
|
||||||
"fifi_sdr": ["alsa"],
|
"fifi_sdr": ["alsa", "rockprog"],
|
||||||
"pluto_sdr": ["soapy_connector", "soapy_pluto_sdr"],
|
"pluto_sdr": ["soapy_connector", "soapy_pluto_sdr"],
|
||||||
"soapy_remote": ["soapy_connector", "soapy_remote"],
|
"soapy_remote": ["soapy_connector", "soapy_remote"],
|
||||||
"uhd": ["soapy_connector", "soapy_uhd"],
|
"uhd": ["soapy_connector", "soapy_uhd"],
|
||||||
@ -128,26 +128,6 @@ class FeatureDetector(object):
|
|||||||
"""
|
"""
|
||||||
return self.command_is_runnable("nc --help")
|
return self.command_is_runnable("nc --help")
|
||||||
|
|
||||||
def has_hackrf_transfer(self):
|
|
||||||
"""
|
|
||||||
To use a HackRF, compile the HackRF host tools from its "stdout" branch:
|
|
||||||
```
|
|
||||||
git clone https://github.com/mossmann/hackrf/
|
|
||||||
cd hackrf
|
|
||||||
git fetch
|
|
||||||
git checkout origin/stdout
|
|
||||||
cd host
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake .. -DINSTALL_UDEV_RULES=ON
|
|
||||||
make
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
"""
|
|
||||||
# TODO i don't have a hackrf, so somebody doublecheck this.
|
|
||||||
# TODO also check if it has the stdout feature
|
|
||||||
return self.command_is_runnable("hackrf_transfer --help")
|
|
||||||
|
|
||||||
def has_perseustest(self):
|
def has_perseustest(self):
|
||||||
"""
|
"""
|
||||||
To use a Microtelecom Perseus HF receiver, compile and
|
To use a Microtelecom Perseus HF receiver, compile and
|
||||||
@ -273,7 +253,7 @@ class FeatureDetector(object):
|
|||||||
"""
|
"""
|
||||||
The SoapySDR module for sdrplay devices is required for interfacing with SDRPlay devices (RSP1*, RSP2*, RSPDuo)
|
The SoapySDR module for sdrplay devices is required for interfacing with SDRPlay devices (RSP1*, RSP2*, RSPDuo)
|
||||||
|
|
||||||
You can get it [here](https://github.com/pothosware/SoapySDRPlay/wiki).
|
You can get it [here](https://github.com/SDRplay/SoapySDRPlay).
|
||||||
"""
|
"""
|
||||||
return self._has_soapy_driver("sdrplay")
|
return self._has_soapy_driver("sdrplay")
|
||||||
|
|
||||||
@ -342,6 +322,14 @@ class FeatureDetector(object):
|
|||||||
"""
|
"""
|
||||||
return self._has_soapy_driver("radioberry")
|
return self._has_soapy_driver("radioberry")
|
||||||
|
|
||||||
|
def has_soapy_hackrf(self):
|
||||||
|
"""
|
||||||
|
The SoapyHackRF allows HackRF to be used with SoapySDR.
|
||||||
|
|
||||||
|
You can get it [here](https://github.com/pothosware/SoapyHackRF/wiki).
|
||||||
|
"""
|
||||||
|
return self._has_soapy_driver("hackrf")
|
||||||
|
|
||||||
def has_dsd(self):
|
def has_dsd(self):
|
||||||
"""
|
"""
|
||||||
The digital voice modes NXDN and D-Star can be decoded by the dsd project. Please note that you need the version
|
The digital voice modes NXDN and D-Star can be decoded by the dsd project. Please note that you need the version
|
||||||
@ -396,3 +384,11 @@ class FeatureDetector(object):
|
|||||||
on the Alsa library. It is available as a package for most Linux distributions.
|
on the Alsa library. It is available as a package for most Linux distributions.
|
||||||
"""
|
"""
|
||||||
return self.command_is_runnable("arecord --help")
|
return self.command_is_runnable("arecord --help")
|
||||||
|
|
||||||
|
def has_rockprog(self):
|
||||||
|
"""
|
||||||
|
The "rockprog" executable is required to send commands to your FiFiSDR. It needs to be installed separately.
|
||||||
|
|
||||||
|
You can find instructions and downloads [here](https://o28.sischa.net/fifisdr/trac/wiki/De%3Arockprog).
|
||||||
|
"""
|
||||||
|
return self.command_is_runnable("rockprog")
|
||||||
|
@ -89,18 +89,16 @@ class Router(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.routes = [
|
self.routes = [
|
||||||
StaticRoute("/", IndexController),
|
StaticRoute("/", IndexController),
|
||||||
StaticRoute("/status", StatusController),
|
StaticRoute("/status.json", StatusController),
|
||||||
StaticRoute("/status.json", StatusController, options={"action": "jsonAction"}),
|
|
||||||
RegexRoute("/static/(.+)", OwrxAssetsController),
|
RegexRoute("/static/(.+)", OwrxAssetsController),
|
||||||
RegexRoute("/compiled/(.+)", CompiledAssetsController),
|
RegexRoute("/compiled/(.+)", CompiledAssetsController),
|
||||||
RegexRoute("/aprs-symbols/(.+)", AprsSymbolsController),
|
RegexRoute("/aprs-symbols/(.+)", AprsSymbolsController),
|
||||||
StaticRoute("/ws/", WebSocketController),
|
StaticRoute("/ws/", WebSocketController),
|
||||||
RegexRoute("(/favicon.ico)", OwrxAssetsController),
|
RegexRoute("(/favicon.ico)", OwrxAssetsController),
|
||||||
# backwards compatibility for the sdr.hu portal
|
|
||||||
RegexRoute("(/gfx/openwebrx-avatar.png)", OwrxAssetsController),
|
|
||||||
StaticRoute("/map", MapController),
|
StaticRoute("/map", MapController),
|
||||||
StaticRoute("/features", FeatureController),
|
StaticRoute("/features", FeatureController),
|
||||||
StaticRoute("/api/features", ApiController),
|
StaticRoute("/api/features", ApiController),
|
||||||
|
StaticRoute("/api/receiverdetails", ApiController, options={"action": "receiverDetails"}),
|
||||||
StaticRoute("/metrics", MetricsController),
|
StaticRoute("/metrics", MetricsController),
|
||||||
StaticRoute("/settings", SettingsController),
|
StaticRoute("/settings", SettingsController),
|
||||||
StaticRoute("/generalsettings", GeneralSettingsController),
|
StaticRoute("/generalsettings", GeneralSettingsController),
|
||||||
|
@ -40,6 +40,10 @@ class PropertyManager(ABC):
|
|||||||
def __dict__(self):
|
def __dict__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def __delitem__(self, key):
|
||||||
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def keys(self):
|
def keys(self):
|
||||||
pass
|
pass
|
||||||
@ -98,6 +102,9 @@ class PropertyLayer(PropertyManager):
|
|||||||
def __dict__(self):
|
def __dict__(self):
|
||||||
return {k: v for k, v in self.properties.items()}
|
return {k: v for k, v in self.properties.items()}
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
return self.properties.__delitem__(key)
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return self.properties.keys()
|
return self.properties.keys()
|
||||||
|
|
||||||
@ -132,6 +139,11 @@ class PropertyFilter(PropertyManager):
|
|||||||
def __dict__(self):
|
def __dict__(self):
|
||||||
return {k: v for k, v in self.pm.__dict__().items() if k in self.props}
|
return {k: v for k, v in self.pm.__dict__().items() if k in self.props}
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
if key not in self.props:
|
||||||
|
raise KeyError(key)
|
||||||
|
return self.pm.__delitem__(key)
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return [k for k in self.pm.keys() if k in self.props]
|
return [k for k in self.pm.keys() if k in self.props]
|
||||||
|
|
||||||
@ -226,5 +238,9 @@ class PropertyStack(PropertyManager):
|
|||||||
def __dict__(self):
|
def __dict__(self):
|
||||||
return {k: self.__getitem__(k) for k in self.keys()}
|
return {k: self.__getitem__(k) for k in self.keys()}
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
for layer in self.layers:
|
||||||
|
layer["props"].__delitem__(key)
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return set([key for l in self.layers for key in l["props"].keys()])
|
return set([key for l in self.layers for key in l["props"].keys()])
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
import threading
|
|
||||||
import time
|
|
||||||
from owrx.config import Config
|
|
||||||
from urllib import request, parse
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class SdrHuUpdater(threading.Thread):
|
|
||||||
def __init__(self):
|
|
||||||
self.doRun = True
|
|
||||||
super().__init__(daemon=True)
|
|
||||||
|
|
||||||
def update(self):
|
|
||||||
pm = Config.get().filter("server_hostname", "web_port", "sdrhu_key")
|
|
||||||
data = parse.urlencode({
|
|
||||||
"url": "http://{server_hostname}:{web_port}".format(**pm.__dict__()),
|
|
||||||
"apikey": pm["sdrhu_key"]
|
|
||||||
}).encode()
|
|
||||||
|
|
||||||
res = request.urlopen("https://sdr.hu/update", data=data)
|
|
||||||
if res.getcode() < 200 or res.getcode() >= 300:
|
|
||||||
logger.warning('sdr.hu update failed with error code %i', res.getcode())
|
|
||||||
return 2
|
|
||||||
|
|
||||||
returned = res.read().decode("utf-8")
|
|
||||||
if "UPDATE:" not in returned:
|
|
||||||
logger.warning("Update failed, your receiver cannot be listed on sdr.hu!")
|
|
||||||
return 2
|
|
||||||
|
|
||||||
value = returned.split("UPDATE:")[1].split("\n", 1)[0]
|
|
||||||
if value.startswith("SUCCESS"):
|
|
||||||
logger.info("Update succeeded!")
|
|
||||||
else:
|
|
||||||
logger.warning("Update failed, your receiver cannot be listed on sdr.hu! Reason: %s", value)
|
|
||||||
return 20
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
while self.doRun:
|
|
||||||
retrytime_mins = self.update()
|
|
||||||
time.sleep(60 * retrytime_mins)
|
|
@ -265,6 +265,7 @@ class ServiceHandler(object):
|
|||||||
d.set_secondary_demodulator(mode)
|
d.set_secondary_demodulator(mode)
|
||||||
d.set_audio_compression("none")
|
d.set_audio_compression("none")
|
||||||
d.set_samp_rate(source.getProps()["samp_rate"])
|
d.set_samp_rate(source.getProps()["samp_rate"])
|
||||||
|
d.set_temporary_directory(Config.get()['temporary_directory'])
|
||||||
d.set_service()
|
d.set_service()
|
||||||
d.start()
|
d.start()
|
||||||
return d
|
return d
|
||||||
|
@ -1,23 +1,11 @@
|
|||||||
from .direct import DirectSource
|
from .soapy import SoapyConnectorSource
|
||||||
from owrx.command import Option
|
|
||||||
import time
|
|
||||||
|
|
||||||
|
|
||||||
class HackrfSource(DirectSource):
|
class HackrfSource(SoapyConnectorSource):
|
||||||
def getCommandMapper(self):
|
def getSoapySettingsMappings(self):
|
||||||
return super().getCommandMapper().setBase("hackrf_transfer").setMappings(
|
mappings = super().getSoapySettingsMappings()
|
||||||
{
|
mappings.update({"bias_tee": "bias_tx"})
|
||||||
"samp_rate": Option("-s"),
|
return mappings
|
||||||
"tuner_freq": Option("-f"),
|
|
||||||
"rf_gain": Option("-g"),
|
|
||||||
"lna_gain": Option("-l"),
|
|
||||||
"rf_amp": Option("-a"),
|
|
||||||
"ppm": Option("-C"),
|
|
||||||
}
|
|
||||||
).setStatic("-r-")
|
|
||||||
|
|
||||||
def getFormatConversion(self):
|
def getDriver(self):
|
||||||
return ["csdr convert_s8_f"]
|
return "hackrf"
|
||||||
|
|
||||||
def sleepOnRestart(self):
|
|
||||||
time.sleep(1)
|
|
@ -1,10 +1,4 @@
|
|||||||
from .direct import DirectSource
|
from .direct import DirectSource
|
||||||
from . import SdrSource
|
|
||||||
import subprocess
|
|
||||||
import threading
|
|
||||||
import os
|
|
||||||
import socket
|
|
||||||
import time
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -29,7 +23,7 @@ class Resampler(DirectSource):
|
|||||||
def getCommand(self):
|
def getCommand(self):
|
||||||
return [
|
return [
|
||||||
"nc -v 127.0.0.1 {nc_port}".format(nc_port=self.sdr.getPort()),
|
"nc -v 127.0.0.1 {nc_port}".format(nc_port=self.sdr.getPort()),
|
||||||
"csdr shift_addition_cc {shift}".format(shift=self.shift),
|
"csdr shift_addfast_cc {shift}".format(shift=self.shift),
|
||||||
"csdr fir_decimate_cc {decimation} {ddc_transition_bw} HAMMING".format(
|
"csdr fir_decimate_cc {decimation} {ddc_transition_bw} HAMMING".format(
|
||||||
decimation=self.decimation, ddc_transition_bw=self.transition_bw
|
decimation=self.decimation, ddc_transition_bw=self.transition_bw
|
||||||
),
|
),
|
||||||
|
40
sdrhu.py
40
sdrhu.py
@ -1,40 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
"""
|
|
||||||
|
|
||||||
This file is part of OpenWebRX,
|
|
||||||
an open-source SDR receiver software with a web UI.
|
|
||||||
Copyright (c) 2013-2015 by Andras Retzler <randras@sdr.hu>
|
|
||||||
Copyright (c) 2019-2020 by Jakob Ketterl <dd5jfk@darc.de>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as
|
|
||||||
published by the Free Software Foundation, either version 3 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from owrx.sdrhu import SdrHuUpdater
|
|
||||||
from owrx.config import Config
|
|
||||||
|
|
||||||
import logging
|
|
||||||
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
pm = Config.get()
|
|
||||||
|
|
||||||
if "sdrhu_public_listing" not in pm or not pm["sdrhu_public_listing"]:
|
|
||||||
logger.error('Public listing on sdr.hu is not activated. Please check "sdrhu_public_listing" in your config.')
|
|
||||||
exit(1)
|
|
||||||
if "sdrhu_key" not in pm or pm["sdrhu_key"] is None or pm["sdrhu_key"] == "":
|
|
||||||
logger.error('Missing "sdrhu_key" in your config. Aborting')
|
|
||||||
exit(1)
|
|
||||||
SdrHuUpdater().update()
|
|
Loading…
Reference in New Issue
Block a user