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
- func BuildWhitelistFromStruct(template any) []string
- func CloseAllStubs(groups []StubGroup) error
- func DiscardSetupItems[k comparable](setupItems map[CarSetupKey]k, filters ...SetupFilter) map[CarSetupKey]k
- func FilterSetupItems[k comparable](setupItems map[CarSetupKey]k, filters ...SetupFilter) map[CarSetupKey]k
- func Process(ctx context.Context, stubs StubGroup, processors ...Processor) error
- type CarSetup
- type CarSetupComparison
- type CarSetupComparisonItem
- type CarSetupDetails
- type CarSetupItem
- type CarSetupItemParsedValue
- type CarSetupKey
- type CarSetupKeys
- type DirectStructParser
- type IbtReader
- type Processor
- type SetupFilter
- type StructParser
- type Stub
- type StubGroup
- type StubGroupGrouping
- type TelemetryTick
Constants ¶
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
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:
- Building whitelists for parsers: NewDirectStructParser(reader, header, whitelist...)
- Creating type-safe processor whitelists
- Self-documenting field selection
func CloseAllStubs ¶
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.
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 ¶
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 ¶
func (c CarSetupComparison) Differences() map[CarSetupKey]*CarSetupComparisonItem
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
NewIbtReader reads the entire file into memory for parsing.
func (*IbtReader) Data ¶ added in v0.1.3
Data returns the underlying byte slice for zero-copy parsing.
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 ¶
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) DriverIdx ¶
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.
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 ¶
ParseStubs will create a stub for each of the given files by parsing their headers.
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
}
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
loader
command
|
|
|
template_conversion
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. |
