update
This commit is contained in:
@@ -364,7 +364,18 @@ func (c *Client) handleMessage(msg string) {
|
|||||||
if strings.Contains(data, "interlock") {
|
if strings.Contains(data, "interlock") {
|
||||||
c.handleInterlockStatus(handle, statusMap)
|
c.handleInterlockStatus(handle, statusMap)
|
||||||
} else if strings.Contains(data, "slice") {
|
} 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") {
|
} else if strings.Contains(data, "radio") {
|
||||||
c.handleRadioStatus(handle, statusMap)
|
c.handleRadioStatus(handle, statusMap)
|
||||||
} else {
|
} 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()
|
c.statusMu.Lock()
|
||||||
defer c.statusMu.Unlock()
|
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 rfFreq, ok := statusMap["RF_frequency"]; ok {
|
||||||
if freq, err := strconv.ParseFloat(rfFreq, 64); err == nil && freq > 0 {
|
if freq, err := strconv.ParseFloat(rfFreq, 64); err == nil && freq > 0 {
|
||||||
oldFreq := c.lastStatus.Frequency
|
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.Frequency = freq
|
||||||
c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", freq)
|
c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", freq)
|
||||||
|
}
|
||||||
|
|
||||||
// Déclencher le callback si la fréquence a changé
|
// Déclencher le callback UNIQUEMENT pour la slice 0
|
||||||
if oldFreq != freq && c.onFrequencyChange != nil {
|
// 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)
|
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 {
|
} else if freq == 0 {
|
||||||
// Fréquence 0 = slice inactive
|
// Fréquence 0 = slice inactive
|
||||||
|
if sliceNum == 0 || sliceNum == -1 {
|
||||||
c.lastStatus.Frequency = 0
|
c.lastStatus.Frequency = 0
|
||||||
c.lastStatus.RadioInfo = "Slice inactive"
|
c.lastStatus.RadioInfo = "Slice inactive"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Mettre à jour le mode
|
// Mettre à jour le mode
|
||||||
if mode, ok := statusMap["mode"]; ok {
|
if mode, ok := statusMap["mode"]; ok {
|
||||||
@@ -525,15 +546,12 @@ func (c *Client) handleFrequencyUpdate(handle string, freqStr string, statusMap
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parser la fréquence
|
// 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 {
|
if freq, err := strconv.ParseFloat(freqStr, 64); err == nil && freq > 0 {
|
||||||
oldFreq := c.lastStatus.Frequency
|
|
||||||
c.lastStatus.Frequency = freq
|
c.lastStatus.Frequency = freq
|
||||||
c.lastStatus.RadioInfo = fmt.Sprintf("Active on %.3f MHz", 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)
|
log.Printf("FlexRadio: Frequency update: %s MHz", freqStr)
|
||||||
|
|||||||
Reference in New Issue
Block a user