updated beamng provider for the new SDK

This commit is contained in:
2026-09-17 23:01:50 +01:00
parent ffc03e9e49
commit 1321977f18
3 changed files with 28 additions and 24 deletions
+7 -9
View File
@@ -20,6 +20,7 @@ type BeamNG struct {
logger *slog.Logger
SDK *bngsdk.BeamNGSDK
og *bngsdk.Outgauge
// data handling
mut sync.Mutex
@@ -38,22 +39,18 @@ const (
NAME = "BeamNG.drive"
)
func NewBeamNGProvider(ip string, port int, newLogger *slog.Logger) (*BeamNG, error) {
beam, err := bngsdk.NewBngSDK(bngsdk.Options{
Logger: newLogger.With("TelemetrySDK", "BeamNG"),
SourceType: bngsdk.UDPData,
ImportUDPAddress: "127.0.0.1",
ImportUDPPort: 4444,
})
func NewBeamNGProvider(logger *slog.Logger, opts *bngsdk.Options) (*BeamNG, error) {
beam, err := bngsdk.NewBngSDK(*opts)
if err != nil {
return &BeamNG{}, err
}
provider := &BeamNG{
logger: newLogger.With("TelemetryProvider", "BeamNG"),
logger: logger.With("TelemetryProvider", NAME),
streamCh: make(chan telemetry.TelemetryData, 1),
data: telemetry.NewTelemetryData(),
SDK: beam,
og: &bngsdk.Outgauge{},
ticker: time.NewTicker(time.Second / 60),
}
@@ -164,7 +161,7 @@ func (b *BeamNG) Subscribe(requestFields map[int16]telemetry.FieldID) {
func (b *BeamNG) readData() {
slog.Debug("READING THIS DATA")
// BUG: getting stuck in here
_, err := b.SDK.Update()
ogSnapshot, err := b.SDK.Update()
slog.Debug("THE DATA WAS READ")
if err != nil {
slog.Error("Error getting data", "error", err)
@@ -172,6 +169,7 @@ func (b *BeamNG) readData() {
}
b.mut.Lock()
b.og = ogSnapshot
defer b.mut.Unlock()
// Read 1 to 1 data
+13 -13
View File
@@ -18,34 +18,34 @@ func (b *BeamNG) unused(out *telemetry.TelemetryField) {
func (b *BeamNG) updateSpeed(out *telemetry.TelemetryField) {
out.Type = telemetry.DataTypeUINT16
out.Raw = uint64(conv.MsToKph(b.SDK.Data.Speed))
out.Raw = uint64(conv.MsToKph(b.og.Speed))
}
func (b *BeamNG) updateGear(out *telemetry.TelemetryField) {
out.Type = telemetry.DataTypeSTRING
// NOTE: stupid idea but we can cache these values
out.Str = strconv.Itoa(int(b.SDK.Data.Gear))
out.Str = strconv.Itoa(int(b.og.Gear))
}
func (b *BeamNG) updateRPM(out *telemetry.TelemetryField) {
out.Type = telemetry.DataTypeUINT16
out.Raw = uint64(uint16(b.SDK.Data.RPM))
out.Raw = uint64(uint16(b.og.RPM))
}
func (b *BeamNG) fuelLevel(out *telemetry.TelemetryField) {
telemetry.FloatToStringTransform(b.SDK.Data.Fuel, out)
telemetry.FloatToStringTransform(b.og.Fuel, out)
}
func (b *BeamNG) oilPressure(out *telemetry.TelemetryField) {
telemetry.FloatToStringTransform(b.SDK.Data.OilPressure, out)
telemetry.FloatToStringTransform(b.og.OilPressure, out)
}
func (b *BeamNG) oilTemp(out *telemetry.TelemetryField) {
telemetry.FloatToStringTransform(b.SDK.Data.OilTemp, out)
telemetry.FloatToStringTransform(b.og.OilTemp, out)
}
func (b *BeamNG) engTemp(out *telemetry.TelemetryField) {
telemetry.FloatToStringTransform(b.SDK.Data.EngTemp, out)
telemetry.FloatToStringTransform(b.og.EngTemp, out)
}
// NOTE: find how to empty this
@@ -54,7 +54,7 @@ func (b *BeamNG) pitSpeedLimiter(out *telemetry.TelemetryField) {
func (b *BeamNG) leftIndicator(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.LeftIndicator() {
if b.og.LeftIndicator() {
chr = '<'
}
@@ -64,7 +64,7 @@ func (b *BeamNG) leftIndicator(out *telemetry.TelemetryField) {
func (b *BeamNG) rightIndicator(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.RightIndicator() {
if b.og.RightIndicator() {
chr = '>'
}
@@ -74,7 +74,7 @@ func (b *BeamNG) rightIndicator(out *telemetry.TelemetryField) {
func (b *BeamNG) absLight(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.ABS() {
if b.og.ABS() {
chr = 'A'
}
@@ -84,7 +84,7 @@ func (b *BeamNG) absLight(out *telemetry.TelemetryField) {
func (b *BeamNG) handbrakeLight(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.Handbrake() {
if b.og.Handbrake() {
chr = 'P'
}
@@ -94,7 +94,7 @@ func (b *BeamNG) handbrakeLight(out *telemetry.TelemetryField) {
func (b *BeamNG) tcLight(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.TractionControl() {
if b.og.TractionControl() {
chr = 'T'
}
@@ -104,7 +104,7 @@ func (b *BeamNG) tcLight(out *telemetry.TelemetryField) {
func (b *BeamNG) batteryLight(out *telemetry.TelemetryField) {
chr := ' '
if b.SDK.BatteryLight() {
if b.og.BatteryLight() {
chr = 'B'
}
+8 -2
View File
@@ -8,6 +8,7 @@ import (
"esdi/providers/iracing"
"esdi/telemetry"
bngsdk "github.com/ESilva15/gobngsdk"
"github.com/ESilva15/goirsdk"
)
@@ -42,8 +43,13 @@ func NewLiveIRacingProvider(logger *slog.Logger) telemetry.TelemetryProvider {
}
func NewBeamNGProvider(logger *slog.Logger) telemetry.TelemetryProvider {
// TODO: Get from some kind of config or whatever
provider, _ := beamng.NewBeamNGProvider("127.0.0.1", 4444, logger)
// TODO: these should come from some kind of config
provider, _ := beamng.NewBeamNGProvider(logger, &bngsdk.Options{
Logger: logger.With("TelemetryProvider", beamng.NAME),
SourceType: bngsdk.UDPData,
ImportUDPAddress: "127.0.0.1",
ImportUDPPort: 4444,
})
return provider
}