partial subscriptions
not really partial. they just happen per peripheral now
This commit is contained in:
+6
-11
@@ -23,13 +23,6 @@ type FieldMapper struct {
|
||||
Transform func(any) uint64
|
||||
}
|
||||
|
||||
// VirtualField will derive data from telemetry primitives
|
||||
// So fuel per lap predictions, compound gauge lights and so on
|
||||
type VirtualField interface {
|
||||
Process(td *TelemetryData)
|
||||
EnsureSubscribed() []FieldID
|
||||
}
|
||||
|
||||
// NOTE: Update the iracing SDK to write data to the same map ALWAYS, then
|
||||
// I can bind that address and read directly from there on the transform
|
||||
|
||||
@@ -228,16 +221,18 @@ func GetFieldID(name string) (FieldID, bool) {
|
||||
}
|
||||
|
||||
// TelemetryData is
|
||||
// I need to find a way of having the values be per window or some other
|
||||
type TelemetryData struct {
|
||||
Values [MaxFields]TelemetryField
|
||||
ActiveBinds []BoundField
|
||||
VirtualBinds []VirtualField
|
||||
ActiveBinds map[FieldID]BoundField
|
||||
VirtualBinds map[string]VirtualField
|
||||
InitialTime time.Time
|
||||
PenultimateDataPoll time.Time
|
||||
LastDataPoll time.Time
|
||||
}
|
||||
|
||||
func NewTelemetryData() *TelemetryData {
|
||||
return &TelemetryData{}
|
||||
return &TelemetryData{
|
||||
ActiveBinds: make(map[FieldID]BoundField, MaxFields),
|
||||
VirtualBinds: make(map[string]VirtualField),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"esdi/constants"
|
||||
)
|
||||
|
||||
// NOTE: for managing fuel consumption and predictions we need to filter out
|
||||
@@ -264,3 +266,7 @@ func (fc *FuelCalculator) resetHistory() {
|
||||
func (fc *FuelCalculator) EnsureSubscribed() []FieldID {
|
||||
return []FieldID{FuelLevel, LapNumber}
|
||||
}
|
||||
|
||||
func (fc *FuelCalculator) Name() string {
|
||||
return constants.FuelCalculatorName
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import "time"
|
||||
type TelemetryProvider interface {
|
||||
StopStream()
|
||||
Stream() (<-chan TelemetryData, error)
|
||||
Subscribe([]FieldID)
|
||||
Subscribe([]FieldID) []string
|
||||
IsAlive(time.Duration) bool
|
||||
Name() string
|
||||
Close()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package telemetry
|
||||
|
||||
import "esdi/constants"
|
||||
|
||||
type RPMLights struct {
|
||||
State string
|
||||
}
|
||||
@@ -28,3 +30,7 @@ func (rl *RPMLights) Process(td *TelemetryData) {
|
||||
func (rl *RPMLights) EnsureSubscribed() []FieldID {
|
||||
return []FieldID{RPM}
|
||||
}
|
||||
|
||||
func (rl *RPMLights) Name() string {
|
||||
return constants.RPMLightsName
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package telemetry
|
||||
|
||||
// VirtualField will derive data from telemetry primitives
|
||||
// So fuel per lap predictions, compound gauge lights and so on
|
||||
type VirtualField interface {
|
||||
Name() string
|
||||
Process(td *TelemetryData)
|
||||
EnsureSubscribed() []FieldID
|
||||
}
|
||||
Reference in New Issue
Block a user