Parse EngineWarnings

This commit is contained in:
2026-03-15 19:06:15 +00:00
parent fa7f0b73ee
commit 6bcc0a1613
2 changed files with 56 additions and 2 deletions
+19 -1
View File
@@ -119,7 +119,25 @@ const (
// Some other constants that I need to get trough
// // bit fields
// enum irsdk_EngineWarnings
type bitfieldValue struct {
Value int
Name string
}
// EngineWarnings const
var (
irsdkWaterTempWarning = bitfieldValue{0x01, "irsdk_waterTempWarning"}
irsdkFuelPressureWarning = bitfieldValue{0x02, "irsdk_fueldPressureWarning"}
irsdkOilPressureWarning = bitfieldValue{0x04, "irsdk_oilPressureWarning"}
irsdkEngineStalled = bitfieldValue{0x08, "irsdk_engineStalled"}
irsdkPitSpeedLimiter = bitfieldValue{0x10, "irsdk_pitSpeedLimiter"}
irsdkRevLimiterActive = bitfieldValue{0x20, "irsdk_revLimiterActive"}
irsdkEngineWarnings = []bitfieldValue{irsdkWaterTempWarning, irsdkFuelPressureWarning,
irsdkOilPressureWarning, irsdkEngineStalled, irsdkPitSpeedLimiter, irsdkRevLimiterActive}
)
// enum irsdk_EngineWarnings
// {
// irsdk_waterTempWarning = 0x01,
// irsdk_fuelPressureWarning = 0x02,
+37 -1
View File
@@ -7,6 +7,7 @@ import (
"io"
"log"
"math"
"strconv"
"strings"
"time"
)
@@ -153,6 +154,38 @@ func (i *IBT) readVariablerHeaders() error {
return nil
}
func (i *IBT) parseEngineWarnings() {
val, ok := i.Vars.Vars["EngineWarnings"]
if !ok {
log.Fatal("no engine warnings")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("Unable to get engine warnings: " + err.Error())
}
for _, ew := range irsdkEngineWarnings {
result := (int(bitfield) & ew.Value) != 0
i.Vars.Vars[ew.Name] = Var{Value: result}
}
}
// parseBitfieldVariables will parse the variables:
// - irsdk_CameraState "CamCameraState"
// - irsdk_EngineWarnings "EngineWarnings"
// - irsdk_PitSvFlags "PitSvFlags"
// - irsdk_Flags "SessionFlags"
// - irsdk_SessionState "SessionState"
// - irsdk_TrkLoc "CarIdxTrackSurface"
//
// The approach for now will be to create unique entries in the data map for
// the fields in these variables
func (i *IBT) parseBitfieldVariables() {
// Parse the EngineWarnings variables - its the only one for now
i.parseEngineWarnings()
}
func (i *IBT) readData(buf []byte) error {
for k, v := range i.Vars.Vars {
// Slice of the variable value in the buffer
@@ -264,6 +297,9 @@ func (i *IBT) readData(buf []byte) error {
i.Vars.Vars[k] = v
}
// Parse the bitfield variables here
i.parseBitfieldVariables()
return nil
}
@@ -324,7 +360,7 @@ func (i *IBT) Update(timeout time.Duration) (IRacingState, error) {
return Ended, nil
}
// Document why this is here, I don't remember the exact words right now
// Document why this is here, I don't remember the exact words right now
i.Vars.RecorderTick++
} else {
// This will get the dataframe corresponding to a given tick