Too many things for a single commit but in summary:

We got them data bytes computer majigs being transmitted to the display
and correctly parsed over there. Also seems to be fast. I won't touch
performance issues until I have this working and documented tho.
This commit is contained in:
2026-03-10 23:10:10 +00:00
parent a8d71e0827
commit 16e102dd83
8 changed files with 162 additions and 37 deletions
+20
View File
@@ -4,8 +4,10 @@ import (
"esdi/cdashdisplay"
helper "esdi/helpers"
"esdi/peripheral"
"esdi/telemetry"
"fmt"
"log/slog"
"sync/atomic"
)
type CDashService struct {
@@ -89,3 +91,21 @@ func (cds *CDashService) MoveWindow(idx int16, vec *helper.Vector) error {
return nil
}
func (cds *CDashService) StreamData(stream <-chan telemetry.TelemetryData) {
var isSending atomic.Bool
go func() {
for msg := range stream {
if isSending.Load() {
continue
}
isSending.Store(true)
cds.CDash.SendData(&msg)
isSending.Store(false)
}
}()
}
+7 -1
View File
@@ -11,12 +11,14 @@ import (
// It should hook to a data sink and handle it like iRacing, BeamNG, AC and so on
type TelemetryService struct {
logger *slog.Logger
cdash *CDashService
ActiveProvider telemetry.TelemetryProvider
}
func NewTelemetryService(logger *slog.Logger) *TelemetryService {
func NewTelemetryService(logger *slog.Logger, cdash *CDashService) *TelemetryService {
return &TelemetryService{
logger: logger,
cdash: cdash,
}
}
@@ -45,5 +47,9 @@ func (t *TelemetryService) SetProvider(provider string) *TelemetryService {
func (t *TelemetryService) StartStream() <-chan telemetry.TelemetryData {
stream, _ := t.ActiveProvider.Stream()
// Somewhere around here we have to tell the device service to also send data
t.cdash.StreamData(stream)
return stream
}
+2 -1
View File
@@ -22,7 +22,8 @@ func NewControlPanel(logger *slog.Logger) *ControlPanel {
}
devService := services.NewCDashService(logger)
telemService := services.NewTelemetryService(logger).SetProvider("iRacing")
telemService := services.NewTelemetryService(logger, devService).
SetProvider("iRacing")
if telemService == nil {
panic("failed to create the telemetry service")
}