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:
@@ -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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -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
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user