From 08bbaab94bd405a4432e53b22885c61e4495ab41 Mon Sep 17 00:00:00 2001 From: rouggy Date: Sat, 28 Feb 2026 11:01:03 +0100 Subject: [PATCH] update --- internal/devices/flexradio/flexradio.go | 46 +++++++++++++++++-------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/internal/devices/flexradio/flexradio.go b/internal/devices/flexradio/flexradio.go index 046c9f6..16d12f3 100644 --- a/internal/devices/flexradio/flexradio.go +++ b/internal/devices/flexradio/flexradio.go @@ -364,7 +364,18 @@ func (c *Client) handleMessage(msg string) { if strings.Contains(data, "interlock") { c.handleInterlockStatus(handle, statusMap) } else if strings.Contains(data, "slice") { - c.handleSliceStatus(handle, statusMap) + // Extraire le numéro de slice depuis le message (ex: "slice 0 RF_frequency=14.225") + sliceNum := -1 + fields := strings.Fields(data) + for i, f := range fields { + if f == "slice" && i+1 < len(fields) { + if n, err := strconv.Atoi(fields[i+1]); err == nil { + sliceNum = n + } + break + } + } + c.handleSliceStatus(handle, statusMap, sliceNum) } else if strings.Contains(data, "radio") { c.handleRadioStatus(handle, statusMap) } else { @@ -389,7 +400,7 @@ func (c *Client) handleMessage(msg string) { } } -func (c *Client) handleSliceStatus(handle string, statusMap map[string]string) { +func (c *Client) handleSliceStatus(handle string, statusMap map[string]string, sliceNum int) { c.statusMu.Lock() defer c.statusMu.Unlock() @@ -404,17 +415,27 @@ func (c *Client) handleSliceStatus(handle string, statusMap map[string]string) { if rfFreq, ok := statusMap["RF_frequency"]; ok { if freq, err := strconv.ParseFloat(rfFreq, 64); err == nil && freq > 0 { oldFreq := c.lastStatus.Frequency - c.lastStatus.Frequency = freq - c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", freq) - // Déclencher le callback si la fréquence a changé - if oldFreq != freq && c.onFrequencyChange != nil { + // Mettre à jour la fréquence affichée uniquement si c'est slice 0 + if sliceNum == 0 || sliceNum == -1 { + c.lastStatus.Frequency = freq + c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", freq) + } + + // Déclencher le callback UNIQUEMENT pour la slice 0 + // Les slices 1, 2, 3 ne contrôlent pas l'Ultrabeam + if sliceNum == 0 && oldFreq != freq && c.onFrequencyChange != nil { + log.Printf("FlexRadio: Slice 0 frequency changed to %.3f MHz -> triggering Ultrabeam callback", freq) go c.onFrequencyChange(freq) + } else if sliceNum > 0 { + log.Printf("FlexRadio: Slice %d frequency changed to %.3f MHz -> ignored for Ultrabeam", sliceNum, freq) } } else if freq == 0 { // Fréquence 0 = slice inactive - c.lastStatus.Frequency = 0 - c.lastStatus.RadioInfo = "Slice inactive" + if sliceNum == 0 || sliceNum == -1 { + c.lastStatus.Frequency = 0 + c.lastStatus.RadioInfo = "Slice inactive" + } } } @@ -525,15 +546,12 @@ func (c *Client) handleFrequencyUpdate(handle string, freqStr string, statusMap } // Parser la fréquence + // Note: ce chemin est un fallback sans numéro de slice connu. + // On met à jour l'affichage mais on ne déclenche PAS le callback Ultrabeam + // (les vrais changements de slice 0 passent par handleSliceStatus) if freq, err := strconv.ParseFloat(freqStr, 64); err == nil && freq > 0 { - oldFreq := c.lastStatus.Frequency c.lastStatus.Frequency = freq c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", freq) - - // Déclencher le callback si la fréquence a changé - if oldFreq != freq && c.onFrequencyChange != nil { - go c.onFrequencyChange(freq) - } } log.Printf("FlexRadio: Frequency update: %s MHz", freqStr)