decoupled the winIDs from the telemetry data #11
@@ -15,12 +15,13 @@ func (cds *CDashDisplay) Name() string {
|
|||||||
return NAME
|
return NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cds *CDashDisplay) RequiredFields() map[int16]telemetry.FieldID {
|
func (cds *CDashDisplay) RequiredFields() []telemetry.FieldID {
|
||||||
fields := make(map[int16]telemetry.FieldID, len(cds.State.Layout.Windows))
|
fields := make([]telemetry.FieldID, 0, len(cds.State.Layout.Windows))
|
||||||
|
|
||||||
for _, w := range cds.State.Layout.Windows {
|
for _, w := range cds.State.Layout.Windows {
|
||||||
fieldID, _ := telemetry.GetFieldID(w.UIData.TelemetryField)
|
if fieldID, ok := telemetry.GetFieldID(w.UIData.TelemetryField); ok {
|
||||||
fields[w.UIData.IDX] = fieldID
|
fields = append(fields, fieldID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return fields
|
return fields
|
||||||
|
|||||||
@@ -37,17 +37,10 @@ func (uid *UIDevice) DataChannel() <-chan telemetry.TelemetryData {
|
|||||||
return uid.dataChan
|
return uid.dataChan
|
||||||
}
|
}
|
||||||
|
|
||||||
func (uid *UIDevice) RequiredFields() map[int16]telemetry.FieldID {
|
func (uid *UIDevice) RequiredFields() []telemetry.FieldID {
|
||||||
subscribeTo := []telemetry.FieldID{
|
return []telemetry.FieldID{
|
||||||
telemetry.Speed,
|
telemetry.Speed,
|
||||||
telemetry.Gear,
|
telemetry.Gear,
|
||||||
telemetry.RPM,
|
telemetry.RPM,
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := make(map[int16]telemetry.FieldID, len(subscribeTo))
|
|
||||||
for k, field := range subscribeTo {
|
|
||||||
fields[int16(k)] = field
|
|
||||||
}
|
|
||||||
|
|
||||||
return fields
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ func initApplication() {
|
|||||||
slog.Error(fmt.Sprintf("failed to setup metrics server: %+v", err))
|
slog.Error(fmt.Sprintf("failed to setup metrics server: %+v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setting up some internal data structures
|
|
||||||
// telemetry.Init()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupLogger() error {
|
func setupLogger() error {
|
||||||
@@ -55,7 +52,6 @@ func setupLogger() error {
|
|||||||
logger := slog.New(
|
logger := slog.New(
|
||||||
slog.NewTextHandler(output, &slog.HandlerOptions{
|
slog.NewTextHandler(output, &slog.HandlerOptions{
|
||||||
Level: slog.LevelDebug,
|
Level: slog.LevelDebug,
|
||||||
// AddSource: true, // NOTE: this may have some performance impacts, disable it for prod
|
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const (
|
|||||||
type Peripheral interface {
|
type Peripheral interface {
|
||||||
Name() string
|
Name() string
|
||||||
SendData(*telemetry.TelemetryData)
|
SendData(*telemetry.TelemetryData)
|
||||||
RequiredFields() map[int16]telemetry.FieldID
|
RequiredFields() []telemetry.FieldID
|
||||||
}
|
}
|
||||||
|
|
||||||
type PeripheralDeviceClerk struct {
|
type PeripheralDeviceClerk struct {
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (b *BeamNG) Stream() (<-chan telemetry.TelemetryData, error) {
|
|||||||
return b.streamCh, nil
|
return b.streamCh, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
func (b *BeamNG) Subscribe(requestFields []telemetry.FieldID) {
|
||||||
// NOTE: document how the Subscribe funtion works
|
// NOTE: document how the Subscribe funtion works
|
||||||
slog.Debug(fmt.Sprintf("Len Req: %d\n", len(requestFields)))
|
slog.Debug(fmt.Sprintf("Len Req: %d\n", len(requestFields)))
|
||||||
|
|
||||||
@@ -126,8 +126,6 @@ func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
|||||||
pendingBinds := make([]telemetry.FieldID, telemetry.MaxFields)
|
pendingBinds := make([]telemetry.FieldID, telemetry.MaxFields)
|
||||||
|
|
||||||
for _, id := range requestFields {
|
for _, id := range requestFields {
|
||||||
// b.data.Values[id].IDs = append(b.data.Values[id].IDs, winID)
|
|
||||||
|
|
||||||
switch id {
|
switch id {
|
||||||
case telemetry.RPMStateColour:
|
case telemetry.RPMStateColour:
|
||||||
b.data.VirtualBinds = append(b.data.VirtualBinds, telemetry.NewRPMLights())
|
b.data.VirtualBinds = append(b.data.VirtualBinds, telemetry.NewRPMLights())
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ func (i *IRacing) StopStream() {
|
|||||||
i.streamCancel = nil
|
i.streamCancel = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *IRacing) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
func (i *IRacing) Subscribe(requestFields []telemetry.FieldID) {
|
||||||
i.logger.Debug(fmt.Sprintf("Len Req: %d\n", len(requestFields)))
|
i.logger.Debug(fmt.Sprintf("Len Req: %d\n", len(requestFields)))
|
||||||
|
|
||||||
i.data.ActiveBinds = make([]telemetry.BoundField, 0, len(requestFields))
|
i.data.ActiveBinds = make([]telemetry.BoundField, 0, len(requestFields))
|
||||||
@@ -230,8 +230,6 @@ func (i *IRacing) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
|||||||
pendingBinds := make([]telemetry.FieldID, 0, telemetry.MaxFields)
|
pendingBinds := make([]telemetry.FieldID, 0, telemetry.MaxFields)
|
||||||
|
|
||||||
for _, id := range requestFields {
|
for _, id := range requestFields {
|
||||||
// i.data.Values[id].IDs = append(i.data.Values[id].IDs, winID)
|
|
||||||
|
|
||||||
switch id {
|
switch id {
|
||||||
case telemetry.RPMStateColour:
|
case telemetry.RPMStateColour:
|
||||||
i.data.VirtualBinds = append(i.data.VirtualBinds, telemetry.NewRPMLights())
|
i.data.VirtualBinds = append(i.data.VirtualBinds, telemetry.NewRPMLights())
|
||||||
|
|||||||
@@ -222,13 +222,6 @@ func GetFieldName(id FieldID) string {
|
|||||||
|
|
||||||
var fieldNameToID map[string]FieldID
|
var fieldNameToID map[string]FieldID
|
||||||
|
|
||||||
// func initFieldNamesMap() {
|
|
||||||
// fieldNameToID = make(map[string]FieldID, MaxFields)
|
|
||||||
// for id, name := range FieldNames {
|
|
||||||
// fieldNameToID[name] = FieldID(id)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
func GetFieldID(name string) (FieldID, bool) {
|
func GetFieldID(name string) (FieldID, bool) {
|
||||||
id, ok := fieldNameToID[name]
|
id, ok := fieldNameToID[name]
|
||||||
return id, ok
|
return id, ok
|
||||||
@@ -248,26 +241,3 @@ type TelemetryData struct {
|
|||||||
func NewTelemetryData() *TelemetryData {
|
func NewTelemetryData() *TelemetryData {
|
||||||
return &TelemetryData{}
|
return &TelemetryData{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (td *TelemetryData) Pack() []byte {
|
|
||||||
// bufPtr := bufferPool.Get().(*[]byte)
|
|
||||||
// buf := (*bufPtr)[:0]
|
|
||||||
//
|
|
||||||
// // for _, bind := range td.ActiveBinds {
|
|
||||||
// // buf = td.Values[bind.ID].Pack(buf)
|
|
||||||
// // }
|
|
||||||
//
|
|
||||||
// for k := range td.Values {
|
|
||||||
// if len(td.Values[k].IDs) > 0 {
|
|
||||||
// buf = td.Values[k].Pack(buf)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // We have to copy here because we have to return the buffer
|
|
||||||
// result := make([]byte, len(buf))
|
|
||||||
// copy(result, buf)
|
|
||||||
//
|
|
||||||
// bufferPool.Put(&buf)
|
|
||||||
//
|
|
||||||
// return result
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import "time"
|
|||||||
type TelemetryProvider interface {
|
type TelemetryProvider interface {
|
||||||
StopStream()
|
StopStream()
|
||||||
Stream() (<-chan TelemetryData, error)
|
Stream() (<-chan TelemetryData, error)
|
||||||
Subscribe(map[int16]FieldID)
|
Subscribe([]FieldID)
|
||||||
IsAlive(time.Duration) bool
|
IsAlive(time.Duration) bool
|
||||||
Name() string
|
Name() string
|
||||||
Close()
|
Close()
|
||||||
|
|||||||
@@ -1,5 +1 @@
|
|||||||
package telemetry
|
package telemetry
|
||||||
|
|
||||||
// func Init() {
|
|
||||||
// initFieldNamesMap()
|
|
||||||
// }
|
|
||||||
|
|||||||
Reference in New Issue
Block a user