feat: Added Antenna selection to Flex FlexPanel
feat: New settings flexradio to select antennas per band
This commit is contained in:
@@ -7426,6 +7426,83 @@ func (a *App) FlexSetMute(on bool) error {
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error { return fc.SetMute(on) })
|
||||
}
|
||||
|
||||
func (a *App) FlexSetRXAntenna(ant string) error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
}
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error { return fc.SetRXAntenna(ant) })
|
||||
}
|
||||
|
||||
func (a *App) FlexSetTXAntenna(ant string) error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
}
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error { return fc.SetTXAntenna(ant) })
|
||||
}
|
||||
|
||||
// keyFlexBandAnt stores the per-band RX/TX antenna map (global, machine-local).
|
||||
const keyFlexBandAnt = "flex.band_antennas"
|
||||
|
||||
// FlexBandAnt is the antenna pair to select on a given band.
|
||||
type FlexBandAnt struct {
|
||||
RX string `json:"rx"`
|
||||
TX string `json:"tx"`
|
||||
}
|
||||
|
||||
// GetFlexBandAntennas returns the band→{rx,tx} antenna map (band key uppercased,
|
||||
// e.g. "20M").
|
||||
func (a *App) GetFlexBandAntennas() (map[string]FlexBandAnt, error) {
|
||||
out := map[string]FlexBandAnt{}
|
||||
if a.settings == nil {
|
||||
return out, nil
|
||||
}
|
||||
v, _ := a.settings.GetGlobal(a.ctx, keyFlexBandAnt)
|
||||
if strings.TrimSpace(v) == "" {
|
||||
return out, nil
|
||||
}
|
||||
_ = json.Unmarshal([]byte(v), &out)
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// SaveFlexBandAntennas persists the band→antenna map.
|
||||
func (a *App) SaveFlexBandAntennas(m map[string]FlexBandAnt) error {
|
||||
if a.settings == nil {
|
||||
return fmt.Errorf("db not initialized")
|
||||
}
|
||||
b, err := json.Marshal(m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return a.settings.SetGlobal(a.ctx, keyFlexBandAnt, string(b))
|
||||
}
|
||||
|
||||
// FlexApplyBandAntenna selects the configured RX/TX antennas for the given band
|
||||
// (no-op if the backend isn't a Flex or the band has no mapping). Called on band
|
||||
// changes and spot clicks so the right antennas follow the frequency.
|
||||
func (a *App) FlexApplyBandAntenna(band string) error {
|
||||
if a.cat == nil {
|
||||
return nil
|
||||
}
|
||||
band = strings.ToUpper(strings.TrimSpace(band))
|
||||
if band == "" {
|
||||
return nil
|
||||
}
|
||||
m, _ := a.GetFlexBandAntennas()
|
||||
ant, ok := m[band]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return a.cat.FlexDo(func(fc cat.FlexController) error {
|
||||
if strings.TrimSpace(ant.RX) != "" {
|
||||
_ = fc.SetRXAntenna(ant.RX)
|
||||
}
|
||||
if strings.TrimSpace(ant.TX) != "" {
|
||||
_ = fc.SetTXAntenna(ant.TX)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (a *App) FlexSetNB(on bool) error {
|
||||
if a.cat == nil {
|
||||
return fmt.Errorf("cat not initialized")
|
||||
|
||||
Reference in New Issue
Block a user