Trying to figure a way of mapping the telemetry agents fields back to my UI
This commit is contained in:
@@ -78,6 +78,9 @@ func (mc *DeviceController) AddDeviceAPIListItems() {
|
||||
"streaming-tool",
|
||||
mc.StreamCtrl.StreamView.TextView,
|
||||
)
|
||||
|
||||
mc.StreamCtrl.SetInternalState()
|
||||
|
||||
mc.App.SetFocus(mc.StreamCtrl.StreamView.TextView)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"esdi/telemetry"
|
||||
"esdi/tui/internal/services"
|
||||
"esdi/tui/internal/views"
|
||||
"fmt"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/gdamore/tcell/v2"
|
||||
@@ -75,10 +77,27 @@ func (sc *StreamingCtrl) Start() {
|
||||
isDrawing.Store(true)
|
||||
|
||||
sc.App.QueueUpdateDraw(func() {
|
||||
sc.Messages <- "got data\n"
|
||||
sc.Messages <- fmt.Sprintf("got data: %+v\n", &msg)
|
||||
sc.StreamView.Update(&msg)
|
||||
isDrawing.Store(false)
|
||||
})
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// SetInternalState is used to update the stuff in here, for example, the user
|
||||
// goes into the layout tool, sets up the data to transmit to his devices and
|
||||
// then comes here to stream that data. We call this to set the fields the user
|
||||
// has subscrived to in his tooling
|
||||
func (sc *StreamingCtrl) SetInternalState() {
|
||||
// Get the subscribed fields
|
||||
fields := make([]telemetry.FieldID, 0, len(sc.Service.CDash.State.Layout.Windows))
|
||||
for _, w := range sc.Service.CDash.State.Layout.Windows {
|
||||
fieldID, _ := telemetry.GetFieldID(w.UIData.TelemetryField)
|
||||
fields = append(fields, fieldID-telemetry.FirstField)
|
||||
}
|
||||
|
||||
sc.TelemServ.ActiveProvider.Subscribe(fields)
|
||||
|
||||
sc.Messages <- fmt.Sprintf("Subscribed Fields: %+v [%d]\n", fields, len(fields))
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package services
|
||||
|
||||
import (
|
||||
providerir "esdi/providers/iracing"
|
||||
"log/slog"
|
||||
|
||||
telemetry "esdi/telemetry"
|
||||
)
|
||||
@@ -9,16 +10,19 @@ import (
|
||||
// TelemetryService will be our base struct to handle telemetry data
|
||||
// It should hook to a data sink and handle it like iRacing, BeamNG, AC and so on
|
||||
type TelemetryService struct {
|
||||
logger *slog.Logger
|
||||
ActiveProvider telemetry.TelemetryProvider
|
||||
}
|
||||
|
||||
func NewTelemetryService() *TelemetryService {
|
||||
return &TelemetryService{}
|
||||
func NewTelemetryService(logger *slog.Logger) *TelemetryService {
|
||||
return &TelemetryService{
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TelemetryService) setIRacingProvider() {
|
||||
path := "/home/esilva/Desktop/projetos/simracing_peripherals/testTelemetry/supercars_indianapolis.ibt"
|
||||
provider, _ := providerir.NewIRacingProvider(path, "", "")
|
||||
provider, _ := providerir.NewIRacingProvider(t.logger, path, "", "")
|
||||
|
||||
t.ActiveProvider = provider
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ func NewControlPanel(logger *slog.Logger) *ControlPanel {
|
||||
}
|
||||
|
||||
devService := services.NewCDashService(logger)
|
||||
telemService := services.NewTelemetryService().SetProvider("iRacing")
|
||||
telemService := services.NewTelemetryService(logger).SetProvider("iRacing")
|
||||
if telemService == nil {
|
||||
panic("failed to create the telemetry service")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user