Telemetry Structure
There's a lot of data on this robot. I will attempt to explain how it's set up.
1 Where all of the data lives
All of the streamable data is located in DataStreamerData. This is done deliberately as I didn't want each subsystem to "register" its own data - debugging and diagnosing what data is in the system quickly would be impractical.
All of these *.Telemetry objects are initialized here, but are overwritten in RobotInit.
Sidenote:
The reason that they are initialized is because when the Co-Proc receives a new packet, in order for mDataStreamerDataReceiver
on the Co-Proc to call fromByteBuffer
to deserialize the byte[] array none of the objects can be null.
2 How data gets there
Each TelemetryProvider has its own Telemetry class. Take AcesT265 for instance:
AcesT265 wants to supply telemetry, so it implements TelemetryProvider<AcesT265.Telemetry> which is defined lower in the file
This Telemetry object is filled members that extend GenericDataStore (such as DataStore_Integer and DataStore_Float)
3 How data gets out
The DataStreamer can send it Someone can enable network table publishing Lifetime statistics will read it It will be sent to the Co-Proc