Skip to main content
The pipeline reports on itself using the same mechanism it reports kart data with. This page is the reference for those signals. They come from the receiver rather than from a kart, so they exist whether or not a kart is answering, which is what makes them the first place to look when one is not. For how they are produced, see The Charging Data Receiver. Every signal the pipeline emits about itself is prefixed x. They are written into InfluxDB exactly like real CAN channels, which is why they appear in the dashboard and in Data Explorer alongside battery data, and why they are worth knowing by name. Counters described as per burst are counted within a single receive burst and start again on the next one. Counters described as cumulative run from the moment that connection opened.
The {id} in the two response counters is the frame ID masked with 0x3FFFFFFF, so the top two bits are cleared. The {id} in xFrameIdUnknown_ is the raw, unmasked frame ID. The same physical frame can therefore appear under two different numbers depending on which signal you are reading.

Decoding xKartInfo And xEndpoint

Two of the internal signals are packed values rather than readings, so they need unpacking before they mean anything. xKartInfo carries what the kart is, in one number, as category << 12 | type << 4 | batterySpec: Kart type, category and battery spec are validated as a set rather than independently, so in practice the type tells you the rest, and the category tells you how many battery nodes to expect:
This is also the source of the Invalid combination of KartType, BatterySpec and Category validation error. The three fields are checked against a fixed list of permitted sets, so a kart with a plausible looking type and the wrong category will not load.
xEndpoint encodes the connection’s address as a number. Each octet of the IP is padded to three digits and concatenated to make the integer part, and the port becomes the fractional part. So 172.25.160.1:1234 is written as 172025160001.1234, read back as octets 172, 025, 160, 001 and port 1234.
The port only survives if it does not end in a zero. It is stored as a decimal fraction, so port 1240 comes back as .124 and port 80 as .8. Use xEndpoint to identify the IP address, and take the port from ip-config.json rather than from this signal.

Reading Them

Internal signals are the closest thing the track machine has to monitoring, so it is worth knowing what a healthy kart looks like.

Key Files

Last modified on September 8, 2026