feat: DAX selector on the Flex panel — routes the active slice's RX audio to a DAX channel (slice dax=0-8, Off..8 dropdown next to the antenna selection, highlighted when active); changelog updated
This commit is contained in:
+20
-2
@@ -105,6 +105,7 @@ type flexSlice struct {
|
||||
nrf bool // NRF — noise reduction w/ filter
|
||||
nrfLevel int
|
||||
dspV4 bool
|
||||
daxCh int // DAX audio channel for this slice (0 = off, 1-8)
|
||||
rit bool // receive incremental tuning enabled
|
||||
ritFreq int // RIT offset in Hz (negative = down)
|
||||
xit bool // transmit incremental tuning enabled
|
||||
@@ -844,6 +845,8 @@ func (f *Flex) handleStatus(payload string) {
|
||||
s.nrf, s.dspV4 = val == "1", true
|
||||
case "nrf_level":
|
||||
s.nrfLevel, s.dspV4 = atoiDefault(val, s.nrfLevel), true
|
||||
case "dax":
|
||||
s.daxCh = atoiDefault(val, s.daxCh)
|
||||
case "rit_on":
|
||||
s.rit = val == "1"
|
||||
case "rit_freq":
|
||||
@@ -1374,6 +1377,7 @@ func (f *Flex) FlexState() FlexTXState {
|
||||
st.NRF = rx.nrf
|
||||
st.NRFLevel = rx.nrfLevel
|
||||
st.DSPV4 = rx.dspV4
|
||||
st.DAXCh = rx.daxCh
|
||||
st.RIT = rx.rit
|
||||
st.RITFreq = rx.ritFreq
|
||||
st.XIT = rx.xit
|
||||
@@ -1462,6 +1466,8 @@ func (f *Flex) sendSlice(param string, val any) error {
|
||||
rx.nrf = val == "1"
|
||||
case "nrf_level":
|
||||
rx.nrfLevel = toInt(val)
|
||||
case "dax":
|
||||
rx.daxCh = toInt(val)
|
||||
case "rxant":
|
||||
rx.rxAnt = fmt.Sprint(val)
|
||||
case "txant":
|
||||
@@ -1617,8 +1623,20 @@ func (f *Flex) SetRNN(on bool) error { return f.sendSlice("rnnoise", bool
|
||||
func (f *Flex) SetANFT(on bool) error { return f.sendSlice("anft", boolFlex(on)) }
|
||||
func (f *Flex) SetNRF(on bool) error { return f.sendSlice("nrf", boolFlex(on)) }
|
||||
func (f *Flex) SetNRFLevel(l int) error { return f.sendSlice("nrf_level", clampLevel(l)) }
|
||||
func (f *Flex) SetWNB(on bool) error { return f.sendSlice("wnb", boolFlex(on)) }
|
||||
func (f *Flex) SetWNBLevel(l int) error { return f.sendSlice("wnb_level", clampLevel(l)) }
|
||||
|
||||
// SetDAX routes the active slice's RX audio to a DAX channel (0 = off, 1-8) —
|
||||
// the SmartSDR slice "DAX" selector, e.g. to feed WSJT-X via DAX audio.
|
||||
func (f *Flex) SetDAX(ch int) error {
|
||||
if ch < 0 {
|
||||
ch = 0
|
||||
}
|
||||
if ch > 8 {
|
||||
ch = 8
|
||||
}
|
||||
return f.sendSlice("dax", ch)
|
||||
}
|
||||
func (f *Flex) SetWNB(on bool) error { return f.sendSlice("wnb", boolFlex(on)) }
|
||||
func (f *Flex) SetWNBLevel(l int) error { return f.sendSlice("wnb_level", clampLevel(l)) }
|
||||
|
||||
// ── CW keyer controls (top-level "cw" commands) ──
|
||||
|
||||
|
||||
Reference in New Issue
Block a user