diff --git a/overlay/etc/udev/rules.d/89-et-xiegu-x6100.rules b/overlay/etc/udev/rules.d/89-et-xiegu-x6100.rules new file mode 100644 index 0000000..319f137 --- /dev/null +++ b/overlay/etc/udev/rules.d/89-et-xiegu-x6100.rules @@ -0,0 +1,26 @@ +# Author : Gaston Gonzalez +# Date : 5 October 2025 +# Purpose : udev rules for the Xiegu X6100 +# +# Preconditions: +# 1. Xiegu X6100 connected via USB cable +# +# Postconditions: +# 1. /dev/et-cat created +# 2. rigctld is started +# 3. /dev/et-audio created + +SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d2", ENV{ET_DEVICE}=="", \ + PROGRAM="/opt/emcomm-tools/sbin/udev-tester.sh xiegu-x6100", \ + ACTION=="add", \ + ENV{ET_DEVICE}="X6100", ENV{ET_SUBDEVICE}="CAT", GROUP="dialout", MODE="0660", SYMLINK+="et-cat", \ + RUN+="/usr/bin/systemctl start rigctld" + +# This soundcard will collide with the DigiRig, so we need to ensure that this +# rule is ordered before it and that we guard the match with the PROGRAM check. +SUBSYSTEM=="sound", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0012", \ + PROGRAM="/opt/emcomm-tools/sbin/udev-tester.sh xiegu-x6100", \ + ACTION=="add", \ + ENV{ET_DEVICE}="X6100", \ + ATTR{id}="ET_AUDIO", \ + ENV{ET_SUBDEVICE}="AUDIO", GROUP="audio", MODE="0660", SYMLINK+="et-audio" diff --git a/overlay/opt/emcomm-tools/bin/et-audio b/overlay/opt/emcomm-tools/bin/et-audio index b7a4e05..4aa9062 100755 --- a/overlay/opt/emcomm-tools/bin/et-audio +++ b/overlay/opt/emcomm-tools/bin/et-audio @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 31 October 2024 -# Updated : 26 September 2025 +# Updated : 5 October 2025 # Purpose : Configures ET audio device with sane defaults # # Preconditions @@ -112,6 +112,18 @@ update-config () { et-log "Applied amixer settings for ${ET_DEVICE_NAME}" ;; + "X6100") + # Unmute Speaker a set volume. Adjust if remote station can't decode you. + amixer -q -c ${AUDIO_CARD} sset Speaker Playback Switch 42% unmute + # Unmute Mic + amixer -q -c ${AUDIO_CARD} sset Mic Playback Switch 52% unmute + # Set "L/R Capture" to 19. Adjust if you can't decode received audio. + amixer -q -c ${AUDIO_CARD} sset Mic Capture Switch 31% unmute + # Disable Auto Gain Control + amixer -q -c ${AUDIO_CARD} sset 'Auto Gain Control' mute + + et-log "Applied amixer settings for ${ET_DEVICE_NAME}" + ;; *) et-log "No ALSA configuration specified for this ET_DEVICE." ;; diff --git a/overlay/opt/emcomm-tools/conf/radios.d/xiegu-x6100.json b/overlay/opt/emcomm-tools/conf/radios.d/xiegu-x6100.json new file mode 100644 index 0000000..a90ee06 --- /dev/null +++ b/overlay/opt/emcomm-tools/conf/radios.d/xiegu-x6100.json @@ -0,0 +1,18 @@ +{ + "id": "xiegu-x6100", + "vendor": "Xiegu", + "model": "X6100", + "rigctrl": { + "id": "3087", + "baud": "19200", + "conf": "data_bits=8,stop_bits=1", + "ptt": "RIG" + }, + "notes": [ + "Plug USB-C cable into the DEV port", + "Set mode to U-DIG" + ], + "fieldNotes": [ + "Tested with firmware version: 1.1.6 (2023/03/07)" + ] +} diff --git a/overlay/opt/emcomm-tools/sbin/udev-tester.sh b/overlay/opt/emcomm-tools/sbin/udev-tester.sh index 02fb7f9..5959aab 100755 --- a/overlay/opt/emcomm-tools/sbin/udev-tester.sh +++ b/overlay/opt/emcomm-tools/sbin/udev-tester.sh @@ -1,7 +1,7 @@ #!/bin/bash # Author : Gaston Gonzalez # Date : 11 October 2024 -# Updated : 13 September 2025 +# Updated : 5 October 2025 # Purpose : Perform tests that can be used by the udev subsystem to aid # in rule development. This is intended to by used with the PROGRAM # directive inside of a udev rule. @@ -13,6 +13,20 @@ ET_HOME=/opt/emcomm-tools ACTIVE_RADIO="${ET_HOME}/conf/radios.d/active-radio.json" +# Exit with a 0 exit status if, and only if, the currently selected radio is +# a Xiegu X6100 +test_xiegu_x6100() { + if [[ -L "${ET_HOME}/conf/radios.d/active-radio.json" ]]; then + ID=$(cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .id) + + if [[ "$ID" == "xiegu-x6100" ]]; then + exit 0 + fi + fi + + exit 1 +} + # Exit with a 0 exit status if, and only if, the currently selected radio is # a Yaesu FTX-1. test_yaesu_ftx1() { @@ -101,6 +115,9 @@ if [ $# -ne 1 ]; then fi case $1 in + xiegu-x6100) + test_xiegu_x6100 + ;; yaesu-ftx1) test_yaesu_ftx1 ;; @@ -112,6 +129,7 @@ case $1 in ;; digirig-mobile) test_digirig_mobile + ;; esac exit 1