#!/bin/bash function kc908_sa_device() { ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then colorecho "[+] Architecture is $ARCH, proceeding with installation" colorecho "[+] Downloading bin from DEEPACE" [ -d /root/thirdparty ] || mkdir -p /root/thirdparty cd /root/thirdparty installfromnet "wget https://deepace.net/wp-content/uploads/2024/04/KC908-GNURadio24.4.06.zip" unzip KC908-GNURadio24.4.06.zip rm KC908-GNURadio24.4.06.zip cd KC908-GNURadio/lib INCLUDE_DIR="/usr/local/include/kcsdr" LIB_DIR="/usr/local/lib" mkdir ${INCLUDE_DIR} cp ./kcsdr.h ${INCLUDE_DIR} cp ./libkcsdr.so ${LIB_DIR} chmod 666 ${INCLUDE_DIR}/kcsdr.h chmod 666 ${LIB_DIR}/libkcsdr.so rm -f /usr/lib/libftd3xx.so cp ./linux/libftd3xx.so /usr/lib/ cp ./linux/libftd3xx.so.0.5.21 /usr/lib/ cp ./linux/51-ftd3xx.rules /etc/udev/rules.d/ cd /root/thirdparty cd KC908-GNURadio/module3.9/gr-kc_sdr mkdir build \ && cd build/ \ && cmake -DCMAKE_INSTALL_PREFIX=/usr ../ \ && make -j$(nproc); sudo make install cd /root/ else criticalecho-noexit "[!] Architecture is not amd64 or x86_64. Skipping installation." fi } function signalhound_spike_sa_device() { ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then colorecho "[+] Architecture is $ARCH, proceeding with installation" colorecho "[+] Downloading Spike bin from SignalHound" [ -d /rftools/analysers ] || mkdir -p /rftools/analysers cd /rftools/analysers filename="Spike(Ubuntu22.04x64)_4_0_0" installfromnet "wget https://signalhound.com/sigdownloads/Spike/$filename.zip" unzip ${filename}.zip rm ${filename}.zip cd ${filename} chmod +x setup.sh sh -c ./setup.sh # Create the script content local script_path="/usr/local/bin/Spike" cat << 'EOF' | sudo tee "$script_path" > /dev/null #!/bin/sh # Set the fixed path BASE_DIR="/rftools/analysers/Spike(Ubuntu22.04x64)_4_0_0" APPNAME="Spike" # Set up the environment variables LD_LIBRARY_PATH="$BASE_DIR/lib" LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/MATLAB/MATLAB_Runtime/v911/runtime/glnxa64 export LD_LIBRARY_PATH export QT_PLUGIN_PATH="$BASE_DIR/plugins" # Execute the binary "$BASE_DIR/bin/$APPNAME" "$@" EOF # Make the script executable sudo chmod +x "$script_path" else criticalecho-noexit "[!] Architecture is not amd64 or x86_64. Skipping installation." fi } function signalhound_vsg60_sa_device() { ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then colorecho "[+] Architecture is $ARCH, proceeding with installation" colorecho "[+] Downloading VSG60 bin from SignalHound" [ -d /rftools/generators ] || mkdir -p /rftools/generators cd /rftools/generators filename="VSG60(Ubuntu22.04x64)_1_0_15" installfromnet "wget https://signalhound.com/sigdownloads/VSG60/$filename.zip" unzip VSG60\(Ubuntu22.04x64\)_1_0_15.zip rm VSG60\(Ubuntu22.04x64\)_1_0_15.zip cd VSG60\(Ubuntu22.04x64\)_1_0_15 chmod +x setup.sh sh -c ./setup.sh local script_path="/usr/sbin/vsg60" # Create the script content cat << 'EOF' | sudo tee "$script_path" > /dev/null #!/bin/sh # Set the fixed path BASE_DIR="/rftools/generators/VSG60(Ubuntu22.04x64)_1_0_15" APPNAME="vsg60" # Set up the environment variables LD_LIBRARY_PATH="$BASE_DIR/lib" export LD_LIBRARY_PATH export QT_PLUGIN_PATH="$BASE_DIR/plugins" # Execute the binary "$BASE_DIR/bin/$APPNAME" "$@" EOF # Make the script executable sudo chmod +x "$script_path" echo "VSG60 script has been created at $script_path and made executable" else criticalecho-noexit "[!] Architecture is not amd64 or x86_64. Skipping installation." fi } function harogic_sa_device() { goodecho "[+] Downloading SAStudio4" [ -d /rftools/analysers ] || mkdir -p /rftools/analysers cd /rftools/analysers arch=`uname -i` prog="" sdkarch="" case "$arch" in x86_64|amd64) prog="SAStudio4_4.3.55.2_x86_64";; aarch64|unknown|arm64) # We asume unknwon would be RPi 5 for now...? prog="SAStudio4_4.3.55.2_aarch64";; *) printf 'Unsupported architecture: "%s"!\n' "$arch" >&2; exit 0;; esac installfromnet "wget https://github.com/PentHertz/rfswift_harogic_install/releases/download/0.55.53/$prog.zip" unzip "$prog.zip" rm "$prog.zip" cd "$prog" currentpath=$(pwd) sh -c ./install.sh case "$arch" in # quick fix for aarch64 aarch64|unknown) ln -s /usr/lib/aarch64-linux-gnu/libffi.so.8 /usr/lib/libffi.so.6;; esac ln -s /usr/local/bin/sastudio/.sastudio.sh /usr/sbin/sastudio goodecho "[+] Installing htraapi" installfromnet "wget https://github.com/PentHertz/rfswift_harogic_install/releases/download/0.55.53/Install_HTRA_SDK.zip" unzip Install_HTRA_SDK.zip rm Install_HTRA_SDK.zip cd Install_HTRA_SDK/ cp htraapi/configs/htrausb.conf /etc/ cp htraapi/configs/htra-cyusb.rules /etc/udev/rules.d/ rm -rf /opt/htraapi/ cp -r htraapi/ /opt/ file=$( ls htraapi/lib/x86_64/libhtraapi.so.* ) file=$( basename $file ) version=${file#*so.} majornum=${version%%.*} case "$arch" in x86_64|amd64) sdkarch="x86_64" ln -sf /opt/htraapi/lib/x86_64/libhtraapi.so.${version} /opt/htraapi/lib/x86_64/libhtraapi.so.${majornum} ln -sf /opt/htraapi/lib/x86_64/libhtraapi.so.${majornum} /opt/htraapi/lib/x86_64/libhtraapi.so ln -sf /opt/htraapi/lib/x86_64/libusb-1.0.so.0.2.0 /opt/htraapi/lib/x86_64/libusb-1.0.so.0 ln -sf /opt/htraapi/lib/x86_64/libusb-1.0.so.0 /opt/htraapi/lib/x86_64/libusb-1.0.so ;; aarch64|unknown) # We assume unknown would be RPi 5 for now...? sdkarch="aarch64" ln -sf /opt/htraapi/lib/aarch64/libhtraapi.so.${version} /opt/htraapi/lib/aarch64/libhtraapi.so.${majornum} ln -sf /opt/htraapi/lib/aarch64/libhtraapi.so.${majornum} /opt/htraapi/lib/aarch64/libhtraapi.so ln -sf /opt/htraapi/lib/aarch64/libusb-1.0.so.0.2.0 /opt/htraapi/lib/aarch64/libusb-1.0.so.0 ln -sf /opt/htraapi/lib/aarch64/libusb-1.0.so.0 /opt/htraapi/lib/aarch64/libusb-1.0.so ;; *) printf 'Unsupported architecture: "%s"!\n' "$arch" >&2 exit 0 ;; esac cd "/opt/htraapi/lib/$sdkarch" ln -sf $(pwd)/libhtraapi.so.${version} /usr/lib/libhtraapi.so.${version} ln -sf $(pwd)/libhtraapi.so.${majornum} /usr/lib/libhtraapi.so.${majornum} ln -sf $(pwd)/libliquid.so /usr/lib/libliquid.so colorecho "[+] Note: you'll have to put your calibration data after!" }