this is a doozy - device auto discovery and handling

The main goal was to decouple more things
We got devices being looked for in the background and the stream view
is like a device now too
This commit is contained in:
2026-09-17 22:55:17 +01:00
parent 20025dae1b
commit 65f03fd4c9
17 changed files with 327 additions and 111 deletions
+21 -21
View File
@@ -211,14 +211,14 @@ func (lc *LayoutController) createWindow() {
}
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -321,14 +321,14 @@ func (lc *LayoutController) newWindowAction() {
func (lc *LayoutController) updateWindowAction(win *cdashdisplay.DesktopUIWindow) {
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -347,14 +347,14 @@ func (lc *LayoutController) displayLoadedLayouts() {
lc.Logger.Debug("We want to view our layout!")
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -392,14 +392,14 @@ func (lc *LayoutController) getCurrentTreeNodeModel() (*tview.TreeNode, int16, e
func (lc *LayoutController) loadLayout() {
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -416,14 +416,14 @@ func (lc *LayoutController) loadLayout() {
func (lc *LayoutController) unloadLayout() {
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -437,14 +437,14 @@ func (lc *LayoutController) unloadLayout() {
func (lc *LayoutController) saveLayout() {
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -470,14 +470,14 @@ func (lc *LayoutController) deleteWindow() {
wID := curNode.GetReference().(int16)
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return
}
// ---
@@ -52,14 +52,14 @@ func (lc *LayoutController) handleMovementCapture(idx int16,
}
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return nil
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return nil
}
// ---
@@ -86,14 +86,14 @@ func (lc *LayoutController) handleResizeCapture(idx int16,
}
// Acquire the cdashdisplay
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
displayIF, err := lc.DevService.GetDevice(cdashdisplay.NAME)
if err != nil {
lc.Messages <- "failed to get " + cdashdisplay.Name
lc.Messages <- "failed to get " + cdashdisplay.NAME
return nil
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
lc.Messages <- "failed to acquire " + cdashdisplay.Name
lc.Messages <- "failed to acquire " + cdashdisplay.NAME
return nil
}
// ---
+1 -1
View File
@@ -67,7 +67,7 @@ func (mc *DeviceController) AddDeviceAPIListItems() {
mc.DeviceAPIView.DevAPIList.
AddItem("layout", "build a layout for CDashDisplay", func() {
// This CDashDisplay specific, only load if we have a CDashDisplay
if !mc.DevService.DeviceExists(cdashdisplay.Name) {
if !mc.DevService.DeviceExists(cdashdisplay.NAME) {
mc.DevService.Messages <- "CDashDisplay it not loaded yet\n"
return
}
+37 -32
View File
@@ -6,7 +6,7 @@ import (
"sync/atomic"
"esdi/config"
"esdi/devices/cdashdisplay"
"esdi/devices/uidevice"
"esdi/providers"
"esdi/services"
"esdi/telemetry"
@@ -56,15 +56,15 @@ func NewStreamingCtrl(
}
ctrl.registerHooks()
ctrl.subscribeListeners()
go ctrl.listenToUIStream()
// ctrl.subscribeListeners()
return ctrl
}
func (sc *StreamingCtrl) subscribeListeners() {
sc.TelemetryCh = sc.TelemServ.SubscribeListener("UI", 1)
}
// func (sc *StreamingCtrl) subscribeListeners() {
// // Here I will set a UIDevice
// sc.TelemetryCh = sc.TelemServ.SubscribeListener("UI", 1)
// }
func (sc *StreamingCtrl) registerHooks() {
sc.StreamView.Options.Form.SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey {
@@ -109,16 +109,21 @@ func (sc *StreamingCtrl) StartStop() {
// stream is not running, we have to start it now
// NOTE:
// Subscribe the only existing device - needs to be discovered by now
slog.Debug("setting the data stream for cdash")
sc.Service.SetTelemetryChannel(sc.TelemServ.SubscribeListener("cdash", 1))
slog.Debug("setting the data stream for device servie")
sc.Service.SetTelemetryChannel(sc.TelemServ.SubscribeListener("DeviceService", 1))
slog.Debug("starting to stream data again")
dev, err := sc.Service.GetDevice(uidevice.NAME)
if err == nil {
if uiDev, ok := dev.(*uidevice.UIDevice); ok {
sc.TelemetryCh = uiDev.DataChannel()
go sc.listenToUIStream()
}
}
slog.Debug("starting services")
sc.Service.StartStream()
slog.Debug("starting the stream")
sc.TelemServ.StartStream()
slog.Debug("setting local control variables")
sc.isRunning = true
slog.Debug("starting stream")
@@ -157,28 +162,23 @@ func (sc *StreamingCtrl) updateStream() {
// so we can get away with using a map for convenience here
func (sc *StreamingCtrl) SetInternalState() {
// Acquire the cdashdisplay
displayIF, err := sc.Service.GetDevice(cdashdisplay.Name)
if err != nil {
sc.Messages <- "failed to get " + cdashdisplay.Name
return
}
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
if !ok {
sc.Messages <- "failed to acquire " + cdashdisplay.Name
return
}
// displayIF, err := sc.Service.GetDevice(cdashdisplay.NAME)
// if err != nil {
// sc.Messages <- "failed to get " + cdashdisplay.NAME
// return
// }
// display, ok := displayIF.(*cdashdisplay.CDashDisplay)
// if !ok {
// sc.Messages <- "failed to acquire " + cdashdisplay.NAME
// return
// }
// ---
fields := make(map[int16]telemetry.FieldID, len(display.State.Layout.Windows))
sc.TelemServ.SubscribeToFields()
for _, w := range display.State.Layout.Windows {
fieldID, _ := telemetry.GetFieldID(w.UIData.TelemetryField)
fields[w.UIData.IDX] = fieldID
}
sc.TelemServ.SubscribeToFields(fields)
sc.Messages <- fmt.Sprintf("Subscribed Fields: %+v [%d]\n", fields, len(fields))
// sc.Messages <- fmt.Sprintf("Subscribed Fields: %+v [%d]\n", fields, len(fields))
// Should I update this?
sc.Messages <- fmt.Sprintf("Subscribed to fields\n")
}
func (sc *StreamingCtrl) listenToUIStream() {
@@ -190,8 +190,13 @@ func (sc *StreamingCtrl) listenToUIStream() {
}
isDrawing.Store(true)
// sc.Logger.Debug("got data", "data", msg)
// Capture locally
telemetryMsg := msg
sc.App.QueueUpdateDraw(func() {
sc.StreamView.Visualizer.Update(&msg)
sc.StreamView.Visualizer.Update(&telemetryMsg)
isDrawing.Store(false)
})
}