Added fields for the BeamNG provider and am working on some changes for the telem
I need to simplify the way telemetry is fetched and updated on the app side. Reduce the use of any for example and so on
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
github.com/ESilva15/ESgoRepl v0.1.0 h1:hOVcRBfdP8Yw1kLr2tFoM3SetV7vxFswKjzfAtq8UgM=
|
github.com/ESilva15/ESgoRepl v0.1.0 h1:hOVcRBfdP8Yw1kLr2tFoM3SetV7vxFswKjzfAtq8UgM=
|
||||||
github.com/ESilva15/ESgoRepl v0.1.0/go.mod h1:O2JQMyEgHy0zf9UvzvLNvp2w95T2uazc3torrzRmG9Y=
|
github.com/ESilva15/ESgoRepl v0.1.0/go.mod h1:O2JQMyEgHy0zf9UvzvLNvp2w95T2uazc3torrzRmG9Y=
|
||||||
github.com/ESilva15/gobngsdk v0.0.2 h1:N6stNOE14Wg80BAZMFu/Qd9Qa/J0DmExCfdPoDf7lco=
|
github.com/ESilva15/gobngsdk v1.1.3 h1:CFaz2KjHKnBLrQuEN1QHOd1761cWM/rmTwLpSLrgbe4=
|
||||||
github.com/ESilva15/gobngsdk v0.0.2/go.mod h1:cKLaZRgM0tGGXDvosaSjHnxeyC5Y6rg7zCLqEUJnOzw=
|
github.com/ESilva15/gobngsdk v1.1.3/go.mod h1:cKLaZRgM0tGGXDvosaSjHnxeyC5Y6rg7zCLqEUJnOzw=
|
||||||
github.com/ESilva15/goirsdk v0.2.11 h1:C/HuO9xGmRJ01vMR0KRjrhcMEfq1Mea1rQK0CICaOU4=
|
github.com/ESilva15/goirsdk v0.2.11 h1:C/HuO9xGmRJ01vMR0KRjrhcMEfq1Mea1rQK0CICaOU4=
|
||||||
github.com/ESilva15/goirsdk v0.2.11/go.mod h1:5borQbw+L4fe9b58JFHRHZwrzz0sMVAteuYbRnFOc0Q=
|
github.com/ESilva15/goirsdk v0.2.11/go.mod h1:5borQbw+L4fe9b58JFHRHZwrzz0sMVAteuYbRnFOc0Q=
|
||||||
github.com/arl/statsviz v0.8.0 h1:O6GjjVxEDxcByAucOSl29HaGYLXsuwA3ujJw8H9E7/U=
|
github.com/arl/statsviz v0.8.0 h1:O6GjjVxEDxcByAucOSl29HaGYLXsuwA3ujJw8H9E7/U=
|
||||||
|
|||||||
+232
-88
@@ -1,5 +1,53 @@
|
|||||||
Windows:
|
Windows:
|
||||||
|
1:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 170
|
||||||
|
Y0: 136
|
||||||
|
Width: 40
|
||||||
|
Height: 55
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 4
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: '>'
|
||||||
|
Title: ->
|
||||||
|
uidata:
|
||||||
|
WID: 1
|
||||||
|
TelemetryField: Right Indicator
|
||||||
2:
|
2:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 341
|
||||||
|
Y0: 417
|
||||||
|
Width: 40
|
||||||
|
Height: 55
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 4
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: A
|
||||||
|
Title: ABS
|
||||||
|
uidata:
|
||||||
|
WID: 2
|
||||||
|
TelemetryField: ABS Dash Light
|
||||||
|
3:
|
||||||
uiwindow:
|
uiwindow:
|
||||||
Dims:
|
Dims:
|
||||||
X0: 470
|
X0: 470
|
||||||
@@ -21,81 +69,9 @@ Windows:
|
|||||||
PreviewValue: "9999"
|
PreviewValue: "9999"
|
||||||
Title: Dig Tacho
|
Title: Dig Tacho
|
||||||
uidata:
|
uidata:
|
||||||
WID: 2
|
WID: 3
|
||||||
TelemetryField: RPM
|
TelemetryField: RPM
|
||||||
4:
|
4:
|
||||||
uiwindow:
|
|
||||||
Dims:
|
|
||||||
X0: 321
|
|
||||||
Y0: 195
|
|
||||||
Width: 134
|
|
||||||
Height: 80
|
|
||||||
Decor:
|
|
||||||
BGColour: 4161
|
|
||||||
FGColour: 65535
|
|
||||||
TitleColour: 65535
|
|
||||||
BorderColour: 63488
|
|
||||||
TitleSize: 2
|
|
||||||
TextSize: 7
|
|
||||||
HasBorder: 1
|
|
||||||
Padding: 0
|
|
||||||
Opts:
|
|
||||||
ShowID: 0
|
|
||||||
WinType: 2
|
|
||||||
PreviewValue: "234"
|
|
||||||
Title: SPEEDO
|
|
||||||
uidata:
|
|
||||||
WID: 4
|
|
||||||
TelemetryField: Speed
|
|
||||||
5:
|
|
||||||
uiwindow:
|
|
||||||
Dims:
|
|
||||||
X0: 590
|
|
||||||
Y0: 367
|
|
||||||
Width: 100
|
|
||||||
Height: 50
|
|
||||||
Decor:
|
|
||||||
BGColour: 4161
|
|
||||||
FGColour: 65535
|
|
||||||
TitleColour: 65535
|
|
||||||
BorderColour: 63488
|
|
||||||
TitleSize: 2
|
|
||||||
TextSize: 3
|
|
||||||
HasBorder: 1
|
|
||||||
Padding: 0
|
|
||||||
Opts:
|
|
||||||
ShowID: 0
|
|
||||||
WinType: 2
|
|
||||||
PreviewValue: "101.5"
|
|
||||||
Title: Water T
|
|
||||||
uidata:
|
|
||||||
WID: 5
|
|
||||||
TelemetryField: Water Temperature
|
|
||||||
10:
|
|
||||||
uiwindow:
|
|
||||||
Dims:
|
|
||||||
X0: 470
|
|
||||||
Y0: 132
|
|
||||||
Width: 169
|
|
||||||
Height: 50
|
|
||||||
Decor:
|
|
||||||
BGColour: 4161
|
|
||||||
FGColour: 65535
|
|
||||||
TitleColour: 65535
|
|
||||||
BorderColour: 63488
|
|
||||||
TitleSize: 2
|
|
||||||
TextSize: 3
|
|
||||||
HasBorder: 1
|
|
||||||
Padding: 0
|
|
||||||
Opts:
|
|
||||||
ShowID: 0
|
|
||||||
WinType: 2
|
|
||||||
PreviewValue: "123.4"
|
|
||||||
Title: Fuel Level
|
|
||||||
uidata:
|
|
||||||
WID: 10
|
|
||||||
TelemetryField: Fuel Level
|
|
||||||
11:
|
|
||||||
uiwindow:
|
uiwindow:
|
||||||
Dims:
|
Dims:
|
||||||
X0: 321
|
X0: 321
|
||||||
@@ -117,33 +93,33 @@ Windows:
|
|||||||
PreviewValue: R
|
PreviewValue: R
|
||||||
Title: Box
|
Title: Box
|
||||||
uidata:
|
uidata:
|
||||||
WID: 11
|
WID: 4
|
||||||
TelemetryField: Gear
|
TelemetryField: Gear
|
||||||
16:
|
5:
|
||||||
uiwindow:
|
uiwindow:
|
||||||
Dims:
|
Dims:
|
||||||
X0: 694
|
X0: 80
|
||||||
Y0: 423
|
Y0: 136
|
||||||
Width: 100
|
Width: 40
|
||||||
Height: 50
|
Height: 55
|
||||||
Decor:
|
Decor:
|
||||||
BGColour: 4161
|
BGColour: 4161
|
||||||
FGColour: 65535
|
FGColour: 65535
|
||||||
TitleColour: 65535
|
TitleColour: 65535
|
||||||
BorderColour: 63488
|
BorderColour: 63488
|
||||||
TitleSize: 2
|
TitleSize: 2
|
||||||
TextSize: 3
|
TextSize: 4
|
||||||
HasBorder: 1
|
HasBorder: 1
|
||||||
Padding: 0
|
Padding: 0
|
||||||
Opts:
|
Opts:
|
||||||
ShowID: 0
|
ShowID: 0
|
||||||
WinType: 2
|
WinType: 2
|
||||||
PreviewValue: "4.56"
|
PreviewValue: <
|
||||||
Title: Oil P
|
Title: <-
|
||||||
uidata:
|
uidata:
|
||||||
WID: 16
|
WID: 5
|
||||||
TelemetryField: Oil Pressure
|
TelemetryField: Left Indicator
|
||||||
17:
|
6:
|
||||||
uiwindow:
|
uiwindow:
|
||||||
Dims:
|
Dims:
|
||||||
X0: 694
|
X0: 694
|
||||||
@@ -165,9 +141,177 @@ Windows:
|
|||||||
PreviewValue: "101.4"
|
PreviewValue: "101.4"
|
||||||
Title: Oil T
|
Title: Oil T
|
||||||
uidata:
|
uidata:
|
||||||
WID: 17
|
WID: 6
|
||||||
TelemetryField: Oil Temperature
|
TelemetryField: Oil Temperature
|
||||||
20:
|
7:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 386
|
||||||
|
Y0: 417
|
||||||
|
Width: 40
|
||||||
|
Height: 55
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 4
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: T
|
||||||
|
Title: TC
|
||||||
|
uidata:
|
||||||
|
WID: 7
|
||||||
|
TelemetryField: Traction Control Light
|
||||||
|
8:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 431
|
||||||
|
Y0: 417
|
||||||
|
Width: 40
|
||||||
|
Height: 55
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 4
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: B
|
||||||
|
Title: Bat
|
||||||
|
uidata:
|
||||||
|
WID: 8
|
||||||
|
TelemetryField: Battery Light
|
||||||
|
9:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 321
|
||||||
|
Y0: 195
|
||||||
|
Width: 134
|
||||||
|
Height: 80
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 7
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: "234"
|
||||||
|
Title: SPEEDO
|
||||||
|
uidata:
|
||||||
|
WID: 9
|
||||||
|
TelemetryField: Speed
|
||||||
|
10:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 590
|
||||||
|
Y0: 367
|
||||||
|
Width: 100
|
||||||
|
Height: 50
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 3
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: "101.5"
|
||||||
|
Title: Water T
|
||||||
|
uidata:
|
||||||
|
WID: 10
|
||||||
|
TelemetryField: Water Temperature
|
||||||
|
11:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 470
|
||||||
|
Y0: 132
|
||||||
|
Width: 169
|
||||||
|
Height: 50
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 3
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: "123.4"
|
||||||
|
Title: Fuel Level
|
||||||
|
uidata:
|
||||||
|
WID: 11
|
||||||
|
TelemetryField: Fuel Level
|
||||||
|
12:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 694
|
||||||
|
Y0: 423
|
||||||
|
Width: 100
|
||||||
|
Height: 50
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 3
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: "4.56"
|
||||||
|
Title: Oil P
|
||||||
|
uidata:
|
||||||
|
WID: 12
|
||||||
|
TelemetryField: Oil Pressure
|
||||||
|
13:
|
||||||
|
uiwindow:
|
||||||
|
Dims:
|
||||||
|
X0: 296
|
||||||
|
Y0: 417
|
||||||
|
Width: 40
|
||||||
|
Height: 55
|
||||||
|
Decor:
|
||||||
|
BGColour: 4161
|
||||||
|
FGColour: 65535
|
||||||
|
TitleColour: 65535
|
||||||
|
BorderColour: 63488
|
||||||
|
TitleSize: 2
|
||||||
|
TextSize: 4
|
||||||
|
HasBorder: 1
|
||||||
|
Padding: 0
|
||||||
|
Opts:
|
||||||
|
ShowID: 0
|
||||||
|
WinType: 2
|
||||||
|
PreviewValue: P
|
||||||
|
Title: HB
|
||||||
|
uidata:
|
||||||
|
WID: 13
|
||||||
|
TelemetryField: Parking Brake Dash Light
|
||||||
|
14:
|
||||||
uiwindow:
|
uiwindow:
|
||||||
Dims:
|
Dims:
|
||||||
X0: 142
|
X0: 142
|
||||||
@@ -189,5 +333,5 @@ Windows:
|
|||||||
PreviewValue: "5678"
|
PreviewValue: "5678"
|
||||||
Title: TACHO
|
Title: TACHO
|
||||||
uidata:
|
uidata:
|
||||||
WID: 20
|
WID: 14
|
||||||
TelemetryField: RPM
|
TelemetryField: RPM
|
||||||
|
|||||||
+153
-42
@@ -5,7 +5,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"strconv"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type BeamNG struct {
|
type BeamNG struct {
|
||||||
SDK *bngsdk.BNGSDK
|
SDK *bngsdk.BeamNGSDK
|
||||||
|
|
||||||
// data handling
|
// data handling
|
||||||
mut sync.Mutex
|
mut sync.Mutex
|
||||||
@@ -67,6 +66,7 @@ func (b *BeamNG) Stream() (<-chan telemetry.TelemetryData, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
||||||
|
// 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)))
|
||||||
|
|
||||||
b.data.ActiveBinds = make([]telemetry.BoundField, 0, len(requestFields))
|
b.data.ActiveBinds = make([]telemetry.BoundField, 0, len(requestFields))
|
||||||
@@ -99,74 +99,187 @@ func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translate the UI FieldIDs to this provider's field names
|
|
||||||
sdkKey, ok := internalToSDKFieldNames[id]
|
|
||||||
if !ok {
|
|
||||||
slog.Debug("failed to get internal id")
|
|
||||||
// Need to find a way to pass a message saying something wasn't right
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
binding := telemetry.BoundField{
|
binding := telemetry.BoundField{
|
||||||
Key: sdkKey,
|
ID: id,
|
||||||
ID: id,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch id {
|
switch id {
|
||||||
case telemetry.Speed:
|
case telemetry.Speed:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.Speed
|
||||||
|
}
|
||||||
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
out.Type = telemetry.DataTypeUINT16
|
out.Type = telemetry.DataTypeUINT16
|
||||||
out.Raw = uint64(conv.MsToKph(v.(float32)))
|
out.Raw = uint64(conv.MsToKph(v.(float32)))
|
||||||
}
|
}
|
||||||
case telemetry.Gear:
|
case telemetry.Gear:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.Gear
|
||||||
|
}
|
||||||
binding.Transform = GearTransform
|
binding.Transform = GearTransform
|
||||||
case telemetry.RPM:
|
case telemetry.RPM:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.RPM
|
||||||
|
}
|
||||||
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
out.Type = telemetry.DataTypeUINT16
|
out.Type = telemetry.DataTypeUINT16
|
||||||
out.Raw = uint64(uint16(v.(float32)))
|
out.Raw = uint64(uint16(v.(float32)))
|
||||||
}
|
}
|
||||||
case telemetry.FuelLevel:
|
case telemetry.FuelLevel:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.Fuel
|
||||||
|
}
|
||||||
binding.Transform = telemetry.FloatToStringTransform
|
binding.Transform = telemetry.FloatToStringTransform
|
||||||
// Engine Data
|
// Engine Data
|
||||||
case telemetry.OilPress:
|
case telemetry.OilPress:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.OilPressure
|
||||||
|
}
|
||||||
binding.Transform = telemetry.FloatToStringTransform
|
binding.Transform = telemetry.FloatToStringTransform
|
||||||
case telemetry.OilTemp:
|
case telemetry.OilTemp:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.OilTemp
|
||||||
|
}
|
||||||
binding.Transform = telemetry.FloatToStringTransform
|
binding.Transform = telemetry.FloatToStringTransform
|
||||||
case telemetry.WaterTemp:
|
case telemetry.WaterTemp:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Data.EngTemp
|
||||||
|
}
|
||||||
binding.Transform = telemetry.FloatToStringTransform
|
binding.Transform = telemetry.FloatToStringTransform
|
||||||
// Something else
|
// Something else
|
||||||
case telemetry.PitSpeedLimiter:
|
case telemetry.PitSpeedLimiter:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Pitspeed()
|
||||||
|
}
|
||||||
binding.Transform = PitSpeedLimiterTransform
|
binding.Transform = PitSpeedLimiterTransform
|
||||||
|
// Electrics (dash lights and so on)
|
||||||
|
case telemetry.LeftIndicator:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.LeftIndicator()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = '<'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
|
case telemetry.RightIndicator:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.RightIndicator()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = '>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
|
case telemetry.ABSWarningLight:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.ABS()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = 'A'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
|
case telemetry.ParkingBrakeLight:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.Handbrake()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = 'P'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
|
case telemetry.TCLight:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.TractionControl()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = 'T'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
|
case telemetry.BatteryLight:
|
||||||
|
binding.Fetch = func() any {
|
||||||
|
return b.SDK.BatteryLight()
|
||||||
|
}
|
||||||
|
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
|
out.Type = telemetry.DataTypeCHAR
|
||||||
|
|
||||||
|
chr := ' '
|
||||||
|
if r, ok := v.(bool); ok {
|
||||||
|
if r {
|
||||||
|
chr = 'B'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Raw = uint64(chr)
|
||||||
|
}
|
||||||
// Adjustements
|
// Adjustements
|
||||||
case telemetry.BrakeBias:
|
// case telemetry.BrakeBias:
|
||||||
binding.Transform = telemetry.FloatToStringTransform
|
// binding.Transform = telemetry.FloatToStringTransform
|
||||||
case telemetry.ABSSetting:
|
// case telemetry.ABSSetting:
|
||||||
binding.Transform = telemetry.FloatToUInt8Transform
|
// binding.Transform = telemetry.FloatToUInt8Transform
|
||||||
case telemetry.TCSetting:
|
// case telemetry.TCSetting:
|
||||||
binding.Transform = telemetry.FloatToUInt8Transform
|
// binding.Transform = telemetry.FloatToUInt8Transform
|
||||||
case telemetry.ThrottleSetting:
|
// case telemetry.ThrottleSetting:
|
||||||
binding.Transform = telemetry.FloatToUInt8Transform
|
// binding.Transform = telemetry.FloatToUInt8Transform
|
||||||
case telemetry.LFtempM:
|
// case telemetry.LFtempM:
|
||||||
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
// binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
out.Type = telemetry.DataTypeSTRING
|
// out.Type = telemetry.DataTypeSTRING
|
||||||
out.Str = strconv.FormatFloat(float64(v.(float32)), 'f', 1, 32)
|
// out.Str = strconv.FormatFloat(float64(v.(float32)), 'f', 1, 32)
|
||||||
}
|
// }
|
||||||
case telemetry.SessionTime:
|
// case telemetry.SessionTime:
|
||||||
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
// binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
out.Type = telemetry.DataTypeSTRING
|
// out.Type = telemetry.DataTypeSTRING
|
||||||
out.Str = strconv.FormatFloat(v.(float64), 'f', 1, 32)
|
// out.Str = strconv.FormatFloat(v.(float64), 'f', 1, 32)
|
||||||
}
|
// }
|
||||||
case telemetry.ReplaySessionTime:
|
// case telemetry.ReplaySessionTime:
|
||||||
binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
// binding.Transform = func(v any, out *telemetry.TelemetryField) {
|
||||||
out.Type = telemetry.DataTypeSTRING
|
// out.Type = telemetry.DataTypeSTRING
|
||||||
out.Str = strconv.FormatFloat(v.(float64), 'f', 1, 32)
|
// out.Str = strconv.FormatFloat(v.(float64), 'f', 1, 32)
|
||||||
}
|
// }
|
||||||
case telemetry.Empty:
|
case telemetry.Empty:
|
||||||
binding.Transform = telemetry.EmptyTransform
|
binding.Transform = telemetry.EmptyTransform
|
||||||
case telemetry.LapLastLapTime:
|
// case telemetry.LapLastLapTime:
|
||||||
binding.Transform = LapTimeTransform
|
// binding.Transform = LapTimeTransform
|
||||||
case telemetry.LapNumber:
|
// case telemetry.LapNumber:
|
||||||
binding.Transform = telemetry.UInt8Transform
|
// binding.Transform = telemetry.UInt8Transform
|
||||||
}
|
}
|
||||||
|
|
||||||
b.data.ActiveBinds = append(b.data.ActiveBinds, binding)
|
b.data.ActiveBinds = append(b.data.ActiveBinds, binding)
|
||||||
@@ -194,9 +307,7 @@ func (b *BeamNG) readData() {
|
|||||||
// Read 1 to 1 data
|
// Read 1 to 1 data
|
||||||
slog.Debug("Reading normal data binds")
|
slog.Debug("Reading normal data binds")
|
||||||
for _, bind := range b.data.ActiveBinds {
|
for _, bind := range b.data.ActiveBinds {
|
||||||
v := b.SDK.DataDict[bind.Key]
|
bind.Transform(bind.Fetch(), &b.data.Values[bind.ID])
|
||||||
|
|
||||||
bind.Transform(v, &b.data.Values[bind.ID])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up virtual binds
|
// Set up virtual binds
|
||||||
|
|||||||
@@ -2,44 +2,44 @@ package beamng
|
|||||||
|
|
||||||
// This file maps the data from the desktop provider data structure to iRacing
|
// This file maps the data from the desktop provider data structure to iRacing
|
||||||
|
|
||||||
import (
|
// var internalToSDKFieldNames = map[telemetry.FieldID]string{
|
||||||
"esdi/telemetry"
|
// telemetry.Speed: "Speed",
|
||||||
)
|
// telemetry.Gear: "Gear",
|
||||||
|
// telemetry.RPM: "RPM",
|
||||||
var internalToSDKFieldNames = map[telemetry.FieldID]string{
|
// telemetry.FuelLevel: "Fuel",
|
||||||
telemetry.Speed: "Speed",
|
// // Engine Data
|
||||||
telemetry.Gear: "Gear",
|
// telemetry.OilPress: "OilPressure",
|
||||||
telemetry.RPM: "RPM",
|
// telemetry.OilTemp: "OilTemp",
|
||||||
telemetry.FuelLevel: "Fuel",
|
// telemetry.WaterTemp: "EngTemp",
|
||||||
// Engine Data
|
// // Engine Warnings
|
||||||
telemetry.OilPress: "OilPressure",
|
// telemetry.PitSpeedLimiter: "irsdk_pitSpeedLimiter",
|
||||||
telemetry.OilTemp: "OilTemp",
|
// // Electrics (dash lights and so on)
|
||||||
telemetry.WaterTemp: "EngTemp",
|
// telemetry.LeftIndicator: "sssssssss",
|
||||||
// Engine Warnings
|
// telemetry.RightIndicator: "something",
|
||||||
telemetry.PitSpeedLimiter: "irsdk_pitSpeedLimiter",
|
// telemetry.Hazards: "something",
|
||||||
// Ajudstements
|
// // Ajudstements
|
||||||
telemetry.BrakeBias: "dcBrakeBias",
|
// telemetry.BrakeBias: "dcBrakeBias",
|
||||||
telemetry.ABSSetting: "dcABS",
|
// telemetry.ABSSetting: "dcABS",
|
||||||
telemetry.TCSetting: "dcTractionControl",
|
// telemetry.TCSetting: "dcTractionControl",
|
||||||
telemetry.ThrottleSetting: "dcThrottleShape",
|
// telemetry.ThrottleSetting: "dcThrottleShape",
|
||||||
// Lap Data
|
// // Lap Data
|
||||||
telemetry.LapLastLapTime: "LapLastLapTime",
|
// telemetry.LapLastLapTime: "LapLastLapTime",
|
||||||
telemetry.LapNumber: "Lap",
|
// telemetry.LapNumber: "Lap",
|
||||||
// Tire data
|
// // Tire data
|
||||||
telemetry.LFtempL: "LFtempCL",
|
// telemetry.LFtempL: "LFtempCL",
|
||||||
telemetry.LFtempM: "LFtempCM",
|
// telemetry.LFtempM: "LFtempCM",
|
||||||
telemetry.LFtempR: "LFtempCR",
|
// telemetry.LFtempR: "LFtempCR",
|
||||||
telemetry.RFtempL: "RFtempCL",
|
// telemetry.RFtempL: "RFtempCL",
|
||||||
telemetry.RFtempM: "RFtempCM",
|
// telemetry.RFtempM: "RFtempCM",
|
||||||
telemetry.RFtempR: "RFtempCR",
|
// telemetry.RFtempR: "RFtempCR",
|
||||||
telemetry.LRtempL: "LRtempCL",
|
// telemetry.LRtempL: "LRtempCL",
|
||||||
telemetry.LRtempM: "LRtempCM",
|
// telemetry.LRtempM: "LRtempCM",
|
||||||
telemetry.LRtempR: "LRtempCR",
|
// telemetry.LRtempR: "LRtempCR",
|
||||||
telemetry.RRtempL: "RRtempCL",
|
// telemetry.RRtempL: "RRtempCL",
|
||||||
telemetry.RRtempM: "RRtempCM",
|
// telemetry.RRtempM: "RRtempCM",
|
||||||
telemetry.RRtempR: "RRtempCR",
|
// telemetry.RRtempR: "RRtempCR",
|
||||||
// Session Data
|
// // Session Data
|
||||||
telemetry.SessionTime: "SessionTime",
|
// telemetry.SessionTime: "SessionTime",
|
||||||
telemetry.ReplaySessionTime: "ReplaySessionTime",
|
// telemetry.ReplaySessionTime: "ReplaySessionTime",
|
||||||
telemetry.Empty: "empty",
|
// telemetry.Empty: "empty",
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -27,9 +27,14 @@ type VirtualField interface {
|
|||||||
// NOTE: Update the iracing SDK to write data to the same map ALWAYS, then
|
// 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
|
// I can bind that address and read directly from there on the transform
|
||||||
|
|
||||||
|
// BoundField is the data structure we use to bind the telemetry provider's data
|
||||||
|
// to our internal telemetry fields
|
||||||
|
// NOTE: we must deprecate the `Key` member. We used it to map the internal
|
||||||
|
// telemetry fields to the providers name. But we shouldn't be using `string` keys.
|
||||||
type BoundField struct {
|
type BoundField struct {
|
||||||
Key string
|
Key string
|
||||||
ID FieldID
|
ID FieldID
|
||||||
|
Fetch func() any
|
||||||
Transform func(any, *TelemetryField)
|
Transform func(any, *TelemetryField)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +148,14 @@ const (
|
|||||||
WaterTemp
|
WaterTemp
|
||||||
// Engine Warnings
|
// Engine Warnings
|
||||||
PitSpeedLimiter
|
PitSpeedLimiter
|
||||||
|
// Electrics (dash lights and so on)
|
||||||
|
LeftIndicator
|
||||||
|
RightIndicator
|
||||||
|
Hazards
|
||||||
|
ABSWarningLight
|
||||||
|
ParkingBrakeLight
|
||||||
|
TCLight
|
||||||
|
BatteryLight
|
||||||
// Adjustements
|
// Adjustements
|
||||||
BrakeBias
|
BrakeBias
|
||||||
ABSSetting
|
ABSSetting
|
||||||
@@ -191,6 +204,14 @@ var FieldNames = [MaxFields]string{
|
|||||||
WaterTemp: "Water Temperature",
|
WaterTemp: "Water Temperature",
|
||||||
// Engine Warnings
|
// Engine Warnings
|
||||||
PitSpeedLimiter: "Pit Speed Limiter",
|
PitSpeedLimiter: "Pit Speed Limiter",
|
||||||
|
// Electrics (dash lights and so on)
|
||||||
|
LeftIndicator: "Left Indicator",
|
||||||
|
RightIndicator: "Right Indicator",
|
||||||
|
Hazards: "Hazards",
|
||||||
|
ABSWarningLight: "ABS Dash Light",
|
||||||
|
ParkingBrakeLight: "Parking Brake Dash Light",
|
||||||
|
TCLight: "Traction Control Light",
|
||||||
|
BatteryLight: "Battery Light",
|
||||||
// Ajustments
|
// Ajustments
|
||||||
BrakeBias: "BrakeBias",
|
BrakeBias: "BrakeBias",
|
||||||
ABSSetting: "ABS Control",
|
ABSSetting: "ABS Control",
|
||||||
|
|||||||
Reference in New Issue
Block a user