update
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user