This commit is contained in:
2026-02-28 11:01:03 +01:00
parent 238716fdae
commit 08bbaab94b

View File

@@ -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,19 +415,29 @@ 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
// 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 si la fréquence a changé
if oldFreq != freq && c.onFrequencyChange != nil {
// 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
if sliceNum == 0 || sliceNum == -1 {
c.lastStatus.Frequency = 0
c.lastStatus.RadioInfo = "Slice inactive"
}
}
}
// Mettre à jour le mode
if mode, ok := statusMap["mode"]; ok {
@@ -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)