ibt

package module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 10, 2026 License: Apache-2.0 Imports: 16 Imported by: 0

README

Disclaimer

Forked from https://github.com/teamjorge/ibt with optimisations for my use case https://github.com/teamjorge/ibt/blob/main/LICENCE

ibt

iRacing Telemetry parsing and processing library

ibt logo

Go Reference Go Report Card codecov

Install

go get github.com/teamjorge/ibt

Overview

ibt is a package from parsing iRacing telemetry files. An ibt file is created when you enter the car and ends when you exit the car. By default, you can find these files in your iRacing/telemetry/[car]/ directory. These files are binary for the most part, with the exception of the session data.

This package will not parse real-time telemetry as that requires opening a memory-mapped file and CGO. A planned real-time parsing package leverage ibt will be available in the future.

Features

  • Easy to use telemetry tick processing interface.
  • Quick parsing of file metadata.
  • Grouping of ibt files into the sessions where they originate from.
  • Great test coverage and code documentation.
  • Freedom to use it your own way. Most functions/methods has been made public.

Examples

The Examples directory houses all of the available examples.

To try these examples locally, please clone to repository:

git clone https://github.com/teamjorge/ibt
#or
git clone git@github.com:teamjorge/ibt.git

Please have a look at the instructions in the examples README for details on how to run each example.

Documentation

Overview

Package ibt provides high-performance parsing of iRacing telemetry (.ibt) files.

The package uses direct byte-to-struct parsing for optimal performance, with safe byte conversions via encoding/binary that modern Go compilers optimise to the same assembly as unsafe pointer casts.

Basic Usage

Using the Processor interface for tick-by-tick processing:

type MyProcessor struct {
    data []*ibt.TelemetryTick
}

func (p *MyProcessor) Fields() interface{} {
    return struct {
        Speed float64 `ibt:"Speed"`
        RPM   float64 `ibt:"RPM"`
    }{}
}

func (p *MyProcessor) Init(session *headers.Session) error { return nil }

func (p *MyProcessor) ProcessStruct(tick *ibt.TelemetryTick, hasNext bool) error {
    p.data = append(p.data, tick)
    return nil
}

Then use ibt.Process() with stubs:

stubs, _ := ibt.ParseStubs("telemetry.ibt")
groups := stubs.Group()
for _, group := range groups {
    ibt.Process(ctx, group, processor)
}

Direct Parser Usage

reader, _ := ibt.NewIbtReader("telemetry.ibt")
defer reader.Close()

header, _ := headers.ParseHeaders(reader)
parser := ibt.NewStructParser(reader, header, "Speed", "RPM", "Gear")

tick := &ibt.TelemetryTick{}
for {
    tick, hasNext := parser.NextStruct(tick)
    if tick == nil {
        break
    }
    fmt.Printf("Speed: %.2f, RPM: %.2f\n", tick.Speed, tick.RPM)
    if !hasNext {
        break
    }
}

Thread Safety

Parser instances are not safe for concurrent use. Each goroutine should have its own parser instance. The underlying IbtReader can be shared.

Telemetry Fields

The TelemetryTick struct contains 160+ telemetry fields including:

  • Lap data: LapID, LapDistPct, LapCurrentLapTime, LapDeltaToBestLap
  • Motion: Speed, VelocityX/Y/Z, LatAccel, LongAccel, VertAccel
  • Controls: Throttle, Brake, Gear, SteeringWheelAngle, RPM
  • Position: Lat, Lon, Alt, Pitch, Roll, Yaw
  • Car state: FuelLevel, WaterTemp, Voltage, tire temps/pressures/wear
  • Session: SessionTime, SessionNum, PlayerCarIdx

See TelemetryTick struct for complete field list with iRacing field name mappings.

Index

Constants

View Source
const (
	// Number of times the setup has been modified.
	UPDATE_COUNT_FIELD_NAME string = "UpdateCount"
)

Variables

This section is empty.

Functions

func BuildWhitelistFromStruct added in v0.1.3

func BuildWhitelistFromStruct(template any) []string

BuildWhitelistFromStruct extracts field names from ibt tags in a struct. Returns a whitelist suitable for use with ToMap(), ToMapFromStruct(), or parser constructors.

The template parameter can be a struct value, pointer to struct, or reflect.Type. Only fields with `ibt` tags are included in the whitelist.

Example:

type MyFields struct {
    Speed float64 `ibt:"Speed"`
    Gear  uint32  `ibt:"Gear"`
    RPM   float64 `ibt:"RPM"`
}
whitelist := ibt.BuildWhitelistFromStruct(MyFields{})
// Returns: []string{"Speed", "Gear", "RPM"}

This is useful for:

  1. Building whitelists for parsers: NewDirectStructParser(reader, header, whitelist...)
  2. Creating type-safe processor whitelists
  3. Self-documenting field selection

func CloseAllStubs

func CloseAllStubs(groups []StubGroup) error

func DiscardSetupItems

func DiscardSetupItems[k comparable](setupItems map[CarSetupKey]k, filters ...SetupFilter) map[CarSetupKey]k

DiscardSetupItems removes the given categories, subcategories, and/or items.

func FilterSetupItems

func FilterSetupItems[k comparable](setupItems map[CarSetupKey]k, filters ...SetupFilter) map[CarSetupKey]k

FilterSetupItems for only the given categories, subcategories, and items.

func Process

func Process(ctx context.Context, stubs StubGroup, processors ...Processor) error

Types

type CarSetup

type CarSetup struct {
	Name   string
	Update int
	Values CarSetupDetails
}

CarSetup is the overarching structure to represent the setup of a car.

func ParseCarSetup

func ParseCarSetup(sessionInfo *headers.Session) *CarSetup

ParseCarSetup from the given session info.

type CarSetupComparison

type CarSetupComparison map[CarSetupKey]*CarSetupComparisonItem

CarSetupComparison is the overarching structure for storing the difference between two CarSetups.

func CompareSetups

func CompareSetups(s1, s2 *CarSetup) CarSetupComparison

CompareSetups will compare the differences between the two given setups.

func (CarSetupComparison) Differences

Differences between the two CarSetups that were compared.

type CarSetupComparisonItem

type CarSetupComparisonItem struct {
	I1 *CarSetupItem
	I2 *CarSetupItem

	NumericalDifferences []float64
	RawDifference        string
	// contains filtered or unexported fields
}

CarSetupComparisonItem is the comparison of a single item from the two compared setups.

func CompareSetupItemParsedValue

func CompareSetupItemParsedValue(i1, i2 *CarSetupItem) CarSetupComparisonItem

CompareSetupItemParsedValue compares the parsed values of each setup item.

If a parsed item is not found in one or either of the items, the raw value comparison will be the only populated field.

type CarSetupDetails

type CarSetupDetails map[CarSetupKey]*CarSetupItem

CarSetupDetails is the structure for storing the individual items that make up a car setup.

Example: The front right tire pressure for the given setup will be 128 PSI.

func (CarSetupDetails) Add

func (s CarSetupDetails) Add(category, subcategory, itemName string, value *CarSetupItem)

Add a new setup item for the specified category and subcategory.

type CarSetupItem

type CarSetupItem struct {
	RawValue string
	Parsed   []CarSetupItemParsedValue
}

CarSetupItem is the raw and parsed values of a single car setup item.

func (*CarSetupItem) IsParsed

func (c *CarSetupItem) IsParsed() bool

IsParsed determines if the given CarSetupItem has any parsed numerical values.

type CarSetupItemParsedValue

type CarSetupItemParsedValue struct {
	NumericalValue  float64
	NumericalSign   int
	MeasurementUnit string
}

CarSetupItemParsedValue is a detailed numerical value of a single car setup item.

Parsed items will refer only to numerical values. Additionally, the sign of the numeric value will be preserved for cases where + / - is applicable. For example, some cars might have +3 clicks of wing, rather than just 3 clicks.

func ParseSetupItem

func ParseSetupItem(input string) []CarSetupItemParsedValue

ParseSetupItem attempts to parse a numerical value from the given setup item.

This function returns a slice due to some setup items consisting of multiple values.

For example: Tire pressures will contain 3 independent values for inner, outer, and carcass temperatures.

type CarSetupKey

type CarSetupKey string

CarSetupKey refers to the map key used when storing CarSetupItems.

A CarSetupKey should ideally be created using the NewCarSetupKey function. This eliminates any risk with deconstructing it to find specific values, such as category, subcategory, and item name.

This key consists of the category, subcategory and item name.

For example:

Category |    SubCategory  |  Item Name

DriveBrake|BrakeSystemConfig|BaseBrakeBias.

func NewCarSetupKey

func NewCarSetupKey(category, subcategory, itemName string) CarSetupKey

NewCarSetupKey initialises a new CarSetupKey value.

func (CarSetupKey) Category

func (csk CarSetupKey) Category() string

Category part of the given CarSetupKey.

func (CarSetupKey) ItemName

func (csk CarSetupKey) ItemName() string

ItemName part of the given CarSetupKey.

func (CarSetupKey) SubCategory

func (csk CarSetupKey) SubCategory() string

SubCategory part of the given CarSetupKey.

type CarSetupKeys

type CarSetupKeys []CarSetupKey

CarSetupKeys are multiple CarSetupKey values

This structure primarily exists for sorting purposes.

func (CarSetupKeys) Len

func (a CarSetupKeys) Len() int

func (CarSetupKeys) Less

func (a CarSetupKeys) Less(i, j int) bool

func (CarSetupKeys) Swap

func (a CarSetupKeys) Swap(i, j int)

type DirectStructParser added in v0.1.3

type DirectStructParser struct {
	// contains filtered or unexported fields
}

DirectStructParser reads telemetry bytes directly into TelemetryTick structs without intermediate map allocations. This provides performance improvements over map-based parsing.

The parser uses safe byte conversions via encoding/binary, which modern Go compilers optimise to the same assembly as unsafe pointer casts.

This parser is safe for concurrent use when each goroutine has its own instance.

func NewDirectStructParser added in v0.1.3

func NewDirectStructParser(reader *IbtReader, header *headers.Header, whitelist ...string) *DirectStructParser

func (*DirectStructParser) NextStruct added in v0.1.3

func (p *DirectStructParser) NextStruct(tick *TelemetryTick) (*TelemetryTick, bool)

NextStruct reads the next telemetry tick directly into a struct. Returns (nil, false) when end of file is reached.

type IbtReader added in v0.1.3

type IbtReader struct {
	// contains filtered or unexported fields
}

func NewIbtReader added in v0.1.3

func NewIbtReader(filename string) (*IbtReader, error)

NewIbtReader reads the entire file into memory for parsing.

func (*IbtReader) Close added in v0.1.3

func (m *IbtReader) Close() error

Close releases the data held by the reader.

func (*IbtReader) Data added in v0.1.3

func (r *IbtReader) Data() []byte

Data returns the underlying byte slice for zero-copy parsing.

func (*IbtReader) Read added in v0.1.3

func (m *IbtReader) Read(p []byte) (int, error)

Read implements the io.Reader interface.

func (*IbtReader) ReadAt added in v0.1.3

func (m *IbtReader) ReadAt(p []byte, off int64) (int, error)

ReadAt implements the io.ReaderAt interface with zero-copy reads.

type Processor

type Processor interface {
	Init(session *headers.Session) error
	ProcessStruct(tick *TelemetryTick, hasNext bool) error
	Fields() any
	FlushPendingData() error
	Close() error
	GetMetrics() any
}

Processor processes telemetry data tick by tick. Whitelists are automatically extracted from the Fields() struct tags.

Example:

type MyProcessor struct {
	cache []*ibt.TelemetryTick
}

func (p *MyProcessor) Fields() interface{} {
	return struct {
		Speed float64 `ibt:"Speed"`
		RPM   float64 `ibt:"RPM"`
	}{}
}

func (p *MyProcessor) ProcessStruct(tick *ibt.TelemetryTick, ...) error {
	p.cache = append(p.cache, tick)
	return nil
}

type SetupFilter

type SetupFilter struct {
	Category    string
	SubCategory string
	ItemName    string
}

SetupFilter is used to filter a CarSetup or CarSetupComparison for specific categories, subcategories and/or items.

Prefixes can be used instead of specifying full categories, subcategories, and/or item names.

Fields that are not populated will be ignored during equality checks.

func (SetupFilter) Compare

func (s SetupFilter) Compare(key CarSetupKey) bool

Compare determines if SetupFilter contains all of the populated filter fields.

type StructParser added in v0.1.2

type StructParser struct {
	*DirectStructParser
}

StructParser wraps DirectStructParser for backward compatibility.

func NewStructParser added in v0.1.2

func NewStructParser(reader *IbtReader, header *headers.Header, whitelist ...string) *StructParser

NewStructParser creates a parser that outputs TelemetryTick structs.

func (*StructParser) NextStruct added in v0.1.2

func (p *StructParser) NextStruct(tick *TelemetryTick) (*TelemetryTick, bool)

NextStruct returns the next telemetry tick as a struct Delegates to DirectStructParser.NextStruct() for optimal performance.

type Stub

type Stub struct {
	// contains filtered or unexported fields
}

Stub represents the headers and filename parsed from an ibt file.

Stubs are used for initial parsing of ibt files and their metadata. This can be useful to make decisions regarding which files should have their telemetry parsed.

func (Stub) CarSetup

func (stub Stub) CarSetup() *CarSetup

CarSetup for the given stub.

func (*Stub) Close

func (stub *Stub) Close() error

Close the stub reader.

func (*Stub) DriverIdx

func (stub *Stub) DriverIdx() int

DriverIdx is the index of the current driver.

This value is useful when parsing telemetry or session info where the index of the driver is required.

func (*Stub) Filename

func (stub *Stub) Filename() string

Filename where the stub originated from.

func (*Stub) Headers

func (stub *Stub) Headers() *headers.Header

Headers that were parsed when the stub was created.

func (*Stub) Open

func (stub *Stub) Open() (err error)

Open the underlying ibt file for reading.

func (*Stub) Time

func (stub *Stub) Time() time.Time

Time when the stub was created.

type StubGroup

type StubGroup []Stub

StubGroup is a grouping of stubs.

This group is not necessarily part of the same session, but can be grouped with Group().

func ParseStubs

func ParseStubs(files ...string) (StubGroup, error)

ParseStubs will create a stub for each of the given files by parsing their headers.

func (StubGroup) Close

func (sg StubGroup) Close() error

Close the reader for every stub in the group.

func (StubGroup) Group

func (stubs StubGroup) Group() []StubGroup

Group stubs together by their iRacing session.

The process for grouping is slightly different for official and test sessions. Official sessions can utilise the SubSessionID, whereas Test sessions use the ResultsPosition field to determine the start/end of a session.

func (StubGroup) Len

func (a StubGroup) Len() int

func (StubGroup) Less

func (a StubGroup) Less(i, j int) bool

func (StubGroup) Swap

func (a StubGroup) Swap(i, j int)

type StubGroupGrouping

type StubGroupGrouping []StubGroup

StubGroupGrouping is just a group of StubGroups.

func (StubGroupGrouping) Len

func (a StubGroupGrouping) Len() int

func (StubGroupGrouping) Less

func (a StubGroupGrouping) Less(i, j int) bool

func (StubGroupGrouping) Swap

func (a StubGroupGrouping) Swap(i, j int)

type TelemetryTick added in v0.1.2

type TelemetryTick struct {
	// Lap & Position
	LapID                  int32   `ibt:"Lap"`
	LapDistPct             float64 `ibt:"LapDistPct"`
	LapDist                float64 `ibt:"LapDist"`
	PlayerCarPosition      float64 `ibt:"PlayerCarPosition"`
	PlayerCarClassPosition int32   `ibt:"PlayerCarClassPosition"`
	PlayerCarIdx           int32   `ibt:"PlayerCarIdx"`

	// Lap Timing
	LapCurrentLapTime float64 `ibt:"LapCurrentLapTime"`
	LapLastLapTime    float64 `ibt:"LapLastLapTime"`
	LapLastNLapTime   float64 `ibt:"LapLastNLapTime"`
	LapBestLap        int32   `ibt:"LapBestLap"`
	LapBestLapTime    float64 `ibt:"LapBestLapTime"`
	LapBestNLapLap    int32   `ibt:"LapBestNLapLap"`
	LapBestNLapTime   float64 `ibt:"LapBestNLapTime"`
	LapLasNLapSeq     int32   `ibt:"LapLasNLapSeq"`

	// Delta Timing
	LapDeltaToBestLap              float64 `ibt:"LapDeltaToBestLap"`
	LapDeltaToBestLap_DD           float64 `ibt:"LapDeltaToBestLap_DD"`
	LapDeltaToBestLap_OK           bool    `ibt:"LapDeltaToBestLap_OK"`
	LapDeltaToOptimalLap           float64 `ibt:"LapDeltaToOptimalLap"`
	LapDeltaToOptimalLap_DD        float64 `ibt:"LapDeltaToOptimalLap_DD"`
	LapDeltaToOptimalLap_OK        bool    `ibt:"LapDeltaToOptimalLap_OK"`
	LapDeltaToSessionBestLap       float64 `ibt:"LapDeltaToSessionBestLap"`
	LapDeltaToSessionBestLap_DD    float64 `ibt:"LapDeltaToSessionBestLap_DD"`
	LapDeltaToSessionBestLap_OK    bool    `ibt:"LapDeltaToSessionBestLap_OK"`
	LapDeltaToSessionLastlLap      float64 `ibt:"LapDeltaToSessionLastlLap"`
	LapDeltaToSessionLastlLap_DD   float64 `ibt:"LapDeltaToSessionLastlLap_DD"`
	LapDeltaToSessionLastlLap_OK   bool    `ibt:"LapDeltaToSessionLastlLap_OK"`
	LapDeltaToSessionOptimalLap    float64 `ibt:"LapDeltaToSessionOptimalLap"`
	LapDeltaToSessionOptimalLap_DD float64 `ibt:"LapDeltaToSessionOptimalLap_DD"`
	LapDeltaToSessionOptimalLap_OK bool    `ibt:"LapDeltaToSessionOptimalLap_OK"`

	// Session Info
	SessionNum        int32   `ibt:"SessionNum"`
	SessionTime       float64 `ibt:"SessionTime"`
	SessionTimeRemain float64 `ibt:"SessionTimeRemain"`
	SessionLapsRemain int32   `ibt:"SessionLapsRemain"`
	SessionState      int32   `ibt:"SessionState"`
	SessionUniqueID   int32   `ibt:"SessionUniqueID"`

	// Driver Inputs
	Throttle                        float64 `ibt:"Throttle"`
	ThrottleRaw                     float64 `ibt:"ThrottleRaw"`
	Brake                           float64 `ibt:"Brake"`
	BrakeRaw                        float64 `ibt:"BrakeRaw"`
	Clutch                          float64 `ibt:"Clutch"`
	Gear                            uint32  `ibt:"Gear"`
	SteeringWheelAngle              float64 `ibt:"SteeringWheelAngle"`
	SteeringWheelAngleMax           float64 `ibt:"SteeringWheelAngleMax"`
	SteeringWheelTorque             float64 `ibt:"SteeringWheelTorque"`
	SteeringWheelPctTorque          float64 `ibt:"SteeringWheelPctTorque"`
	SteeringWheelPctTorqueSign      float64 `ibt:"SteeringWheelPctTorqueSign"`
	SteeringWheelPctTorqueSignStops float64 `ibt:"SteeringWheelPctTorqueSignStops"`
	SteeringWheelPctDamper          float64 `ibt:"SteeringWheelPctDamper"`

	// Speed & Motion
	Speed     float64 `ibt:"Speed"`
	VelocityX float64 `ibt:"VelocityX"`
	VelocityY float64 `ibt:"VelocityY"`
	VelocityZ float64 `ibt:"VelocityZ"`

	// Acceleration
	LatAccel  float64 `ibt:"LatAccel"`
	LongAccel float64 `ibt:"LongAccel"`
	VertAccel float64 `ibt:"VertAccel"`

	// Orientation
	Pitch     float64 `ibt:"pitch"`
	PitchRate float64 `ibt:"PitchRate"`
	Roll      float64 `ibt:"roll"`
	RollRate  float64 `ibt:"RollRate"`
	Yaw       float64 `ibt:"yaw"`
	YawNorth  float64 `ibt:"YawNorth"`
	YawRate   float64 `ibt:"YawRate"`

	// GPS Position
	Lat float64 `ibt:"Lat"`
	Lon float64 `ibt:"Lon"`
	Alt float64 `ibt:"alt"`

	// Engine
	RPM               float64 `ibt:"RPM"`
	ShiftGrindRPM     float64 `ibt:"ShiftGrindRPM"`
	ShiftIndicatorPct float64 `ibt:"ShiftIndicatorPct"`
	ShiftPowerPct     float64 `ibt:"ShiftPowerPct"`
	Voltage           float64 `ibt:"Voltage"`
	WaterTemp         float64 `ibt:"WaterTemp"`
	WaterLevel        float64 `ibt:"WaterLevel"`
	OilTemp           float64 `ibt:"OilTemp"`
	OilPress          float64 `ibt:"OilPress"`
	OilLevel          float64 `ibt:"OilLevel"`
	FuelPress         float64 `ibt:"FuelPress"`
	ManifoldPress     float64 `ibt:"ManifoldPress"`

	// Fuel
	FuelLevel      float64 `ibt:"FuelLevel"`
	FuelLevelPct   float64 `ibt:"FuelLevelPct"`
	FuelUsePerHour float64 `ibt:"FuelUsePerHour"`

	// Environment
	AirDensity       float64 `ibt:"AirDensity"`
	AirPressure      float64 `ibt:"AirPressure"`
	AirTemp          float64 `ibt:"AirTemp"`
	FogLevel         float64 `ibt:"FogLevel"`
	RelativeHumidity float64 `ibt:"RelativeHumidity"`
	Skies            int32   `ibt:"Skies"`
	TrackTemp        float64 `ibt:"TrackTemp"`
	TrackTempCrew    float64 `ibt:"TrackTempCrew"`
	WeatherType      int32   `ibt:"WeatherType"`
	WindDir          float64 `ibt:"WindDir"`
	WindVel          float64 `ibt:"WindVel"`

	// Track Position
	IsOnTrack    bool `ibt:"IsOnTrack"`
	IsOnTrackCar bool `ibt:"IsOnTrackCar"`
	OnPitRoad    bool `ibt:"OnPitRoad"`

	// System
	CpuUsageBG     float64 `ibt:"CpuUsageBG"`
	FrameRate      float64 `ibt:"FrameRate"`
	DriverMarker   bool    `ibt:"DriverMarker"`
	EnterExitReset int32   `ibt:"EnterExitReset"`

	// Pit Service
	PitRepairLeft    float64 `ibt:"PitRepairLeft"`
	PitOptRepairLeft float64 `ibt:"PitOptRepairLeft"`
	PitSvFuel        float64 `ibt:"PitSvFuel"`
	PitSvLFP         float64 `ibt:"PitSvLFP"`
	PitSvRFP         float64 `ibt:"PitSvRFP"`
	PitSvLRP         float64 `ibt:"PitSvLRP"`
	PitSvRRP         float64 `ibt:"PitSvRRP"`

	// Tire Pressure
	LFpressure float64 `ibt:"LFpressure"`
	RFpressure float64 `ibt:"RFpressure"`
	LRpressure float64 `ibt:"LRpressure"`
	RRpressure float64 `ibt:"RRpressure"`

	// Tire Temperature (Middle/Surface)
	LFtempM float64 `ibt:"LFtempM"`
	RFtempM float64 `ibt:"RFtempM"`
	LRtempM float64 `ibt:"LRtempM"`
	RRtempM float64 `ibt:"RRtempM"`

	// Tire Temperature (Carcass - Left, Middle, Right)
	LFtempCL float64 `ibt:"LFtempCL"`
	LFtempCM float64 `ibt:"LFtempCM"`
	LFtempCR float64 `ibt:"LFtempCR"`
	RFtempCL float64 `ibt:"RFtempCL"`
	RFtempCM float64 `ibt:"RFtempCM"`
	RFtempCR float64 `ibt:"RFtempCR"`
	LRtempCL float64 `ibt:"LRtempCL"`
	LRtempCM float64 `ibt:"LRtempCM"`
	LRtempCR float64 `ibt:"LRtempCR"`
	RRtempCL float64 `ibt:"RRtempCL"`
	RRtempCM float64 `ibt:"RRtempCM"`
	RRtempCR float64 `ibt:"RRtempCR"`

	// Tire Wear
	LFwearL float64 `ibt:"LFwearL"`
	LFwearM float64 `ibt:"LFwearM"`
	LFwearR float64 `ibt:"LFwearR"`
	RFwearL float64 `ibt:"RFwearL"`
	RFwearM float64 `ibt:"RFwearM"`
	RFwearR float64 `ibt:"RFwearR"`
	LRwearL float64 `ibt:"LRwearL"`
	LRwearM float64 `ibt:"LRwearM"`
	LRwearR float64 `ibt:"LRwearR"`
	RRwearL float64 `ibt:"RRwearL"`
	RRwearM float64 `ibt:"RRwearM"`
	RRwearR float64 `ibt:"RRwearR"`

	// Tire Cold Pressure
	LFcoldPressure float64 `ibt:"LFcoldPressure"`
	RFcoldPressure float64 `ibt:"RFcoldPressure"`
	LRcoldPressure float64 `ibt:"LRcoldPressure"`
	RRcoldPressure float64 `ibt:"RRcoldPressure"`

	// Suspension - Shock Deflection
	LFshockDefl float64 `ibt:"LFshockDefl"`
	RFshockDefl float64 `ibt:"RFshockDefl"`
	LRshockDefl float64 `ibt:"LRshockDefl"`
	RRshockDefl float64 `ibt:"RRshockDefl"`
	CFshockDefl float64 `ibt:"CFshockDefl"`
	CRshockDefl float64 `ibt:"CRshockDefl"`

	// Suspension - Shock Velocity
	LFshockVel float64 `ibt:"LFshockVel"`
	RFshockVel float64 `ibt:"RFshockVel"`
	LRshockVel float64 `ibt:"LRshockVel"`
	RRshockVel float64 `ibt:"RRshockVel"`
	CFshockVel float64 `ibt:"CFshockVel"`
	CRshockVel float64 `ibt:"CRshockVel"`

	// Wheel Speed
	LFspeed float64 `ibt:"LFspeed"`
	RFspeed float64 `ibt:"RFspeed"`
	LRspeed float64 `ibt:"LRspeed"`
	RRspeed float64 `ibt:"RRspeed"`

	// Brake Line Pressure
	LFbrakeLinePress float64 `ibt:"LFbrakeLinePress"`
	RFbrakeLinePress float64 `ibt:"RFbrakeLinePress"`
	LRbrakeLinePress float64 `ibt:"LRbrakeLinePress"`
	RRbrakeLinePress float64 `ibt:"RRbrakeLinePress"`

	// Dynamic In-Car Adjustments
	DcABS                   float64 `ibt:"dcABS"`
	DcAntiRollFront         float64 `ibt:"dcAntiRollFront"`
	DcAntiRollRear          float64 `ibt:"dcAntiRollRear"`
	DcBoostLevel            float64 `ibt:"dcBoostLevel"`
	DcBrakeBias             float64 `ibt:"dcBrakeBias"`
	DcDiffEntry             float64 `ibt:"dcDiffEntry"`
	DcDiffExit              float64 `ibt:"dcDiffExit"`
	DcDiffMiddle            float64 `ibt:"dcDiffMiddle"`
	DcEngineBraking         float64 `ibt:"dcEngineBraking"`
	DcEnginePower           float64 `ibt:"dcEnginePower"`
	DcFuelMixture           float64 `ibt:"dcFuelMixture"`
	DcRevLimiter            float64 `ibt:"dcRevLimiter"`
	DcThrottleShape         float64 `ibt:"dcThrottleShape"`
	DcTractionControl       float64 `ibt:"dcTractionControl"`
	DcTractionControl2      float64 `ibt:"dcTractionControl2"`
	DcTractionControlToggle bool    `ibt:"dcTractionControlToggle"`
	DcWeightJackerLeft      float64 `ibt:"dcWeightJackerLeft"`
	DcWeightJackerRight     float64 `ibt:"dcWeightJackerRight"`
	DcWingFront             float64 `ibt:"dcWingFront"`
	DcWingRear              float64 `ibt:"dcWingRear"`

	SessionID   string
	SessionType string
	SessionName string
	TrackName   string
	TrackID     int
	WorkerID    int
	GroupNum    int

	TickTime time.Time
}

Directories

Path Synopsis
loader command
track_temp command
Package headers provides the utilities for parsing and interacting with the ibt header objects.
Package headers provides the utilities for parsing and interacting with the ibt header objects.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL