diff --git a/overlay/etc/udev/rules.d/79-et-generic-remove.rules b/overlay/etc/udev/rules.d/75-et-generic-remove.rules similarity index 100% rename from overlay/etc/udev/rules.d/79-et-generic-remove.rules rename to overlay/etc/udev/rules.d/75-et-generic-remove.rules diff --git a/overlay/etc/udev/rules.d/79-et-digirig-dr891.rules b/overlay/etc/udev/rules.d/79-et-digirig-dr891.rules new file mode 100644 index 0000000..57ca857 --- /dev/null +++ b/overlay/etc/udev/rules.d/79-et-digirig-dr891.rules @@ -0,0 +1,36 @@ +# Author : Gaston Gonzalez +# Date : 11 November 2024 +# Purpose : udev rules for the Yaesu FT-891 via the DigiRig DR-891 +# +# Preconditions: +# 1. Yaesu FT-891 is selected via et-radio +# 2. Yaesu FT-891 is connected via DR-891 USB cable +# +# Postconditions: +# 1. /dev/et-cat created +# 2. /dev/et-audio created +# 3. rigctld is started +# + +# Ensure that the FT-891 is set as the current radio configuration. +# If it is, set ET_DEVICE=FT-891 to allow following rules to match. +SUBSYSTEM=="tty|sound", PROGRAM="/opt/emcomm-tools/sbin/udev-tester.sh yaesu-ft891", \ + ENV{ET_DEVICE}="FT-891" + +# CAT control device will only match if PROGRAM above matches (exit status=0) +#SUBSYSTEM=="tty", ENV{ET_DEVICE}=="FT-891", \ +# ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea70",\ +# ACTION=="add", \ +# ENV{ET_SUBDEVICE}="CAT", GROUP="dialout", MODE="0660", SYMLINK+="et-cat", \ +# RUN+="/usr/bin/systemctl start rigctld" + +SUBSYSTEMS=="usb", ENV{ET_DEVICE}=="FT-891", ATTRS{bInterfaceProtocol}=="00", \ + ACTION=="add", \ + ENV{ET_SUBDEVICE}="CAT", GROUP="dialout", MODE="0660", SYMLINK+="et-cat", \ + RUN+="/usr/bin/systemctl start rigctld" + +# Audio device will only match if PROGRAM above matches (exit status=0) +SUBSYSTEM=="sound", ENV{ET_DEVICE}=="FT-891", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0012", \ + ACTION=="add", \ + ATTR{id}="ET_AUDIO", \ + ENV{ET_SUBDEVICE}="AUDIO", GROUP="audio", MODE="0660", SYMLINK+="et-audio" diff --git a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft891.json b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft891.json new file mode 100644 index 0000000..b6edeff --- /dev/null +++ b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft891.json @@ -0,0 +1,16 @@ +{ + "id": "yaesu-ft891", + "vendor": "Yaesu", + "model": "FT-891 (DR-891)", + "rigctrl": { + "id": "1036", + "baud": "38400", + "ptt": "RTS" + }, + "notes": [ + "TODO" + ], + "fieldNotes": [ + "TODO" + ] +} diff --git a/overlay/opt/emcomm-tools/sbin/udev-tester.sh b/overlay/opt/emcomm-tools/sbin/udev-tester.sh new file mode 100755 index 0000000..781c92a --- /dev/null +++ b/overlay/opt/emcomm-tools/sbin/udev-tester.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Author : Gaston Gonzalez +# Date : 11 October 2024 +# 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. +# +# Exit Statuses: +# 0 udev rule should match +# 1 udev rule should not match. + +ET_HOME=/opt/emcomm-tools +ACTIVE_RADIO="${ET_HOME}/conf/radios.d/active-radio.json" + +# Exit with a 0 exit success if, and only if, the currently selected radio is +# a Yaesu FT-891. +test_yaesu_ft891() { + 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" == "yaesu-ft891" ]]; then + exit 0 + fi + fi + + exit 1 +} + +usage() { + echo "usage: $(basename $0) " +} + +if [ $# -ne 1 ]; then + usage + exit 1 +fi + +case $1 in + yaesu-ft891) + test_yaesu_ft891 + ;; +esac + +exit 1