18bool hasRoom(std::size_t nextIndex, std::size_t bytesToAdd) {
22void Telemetry::preparePacket(std::uint32_t timestamp) {
44 memcpy(&data, &floatData,
sizeof(data));
52 nextEmptyPacketIndex += 1;
53 this->addSingleSDHToPacket(ssd->
singleSDH);
57 nextEmptyPacketIndex += 1;
61 this->addSingleSDHToPacket(ssd->
multiSDH[i]);
66void Telemetry::setPacketToZero() {
72void Telemetry::addEndMarker() {
81 bool sendingPacketThisTick =
false;
83 for (std::size_t i = 0; i < streamCount; i++) {
85 if (streams[i]->shouldBeSent(currentTime)) {
87 if (!sendingPacketThisTick) {
89 preparePacket(currentTime);
90 sendingPacketThisTick =
true;
98 if (
hasRoom(nextEmptyPacketIndex, totalBytesIfAdded)) {
99 addSSDToPacket(streams[i]);
100 streams[i]->markWasSent(currentTime);
116 for (std::size_t i = 0; i < nextEmptyPacketIndex; i++) {
117 rfdSerialConnection.write(packet[i]);
bool hasRoom(std::size_t nextIndex, std::size_t bytesToAdd)
std::size_t bytesNeededForSSD(const SendableSensorData *ssd)
Packs SensorDataHandler values into a fixed-size byte packet and streams over a Stream (UART).
Buffers sensor samples and forwards them to an IDataSaver at a controlled rate.
DataPoint getLastDataPointSaved() const
bool tick(std::uint32_t currentTimeMs)
Call every loop to send due telemetry streams.
constexpr std::size_t kStartByteIndex
constexpr std::size_t kPacketCapacity
constexpr std::uint8_t kStartByteValue
constexpr std::size_t kPacketCounterIndex
void write_u32_be(std::uint8_t *dst, std::uint32_t v)
Write a 32-bit value in big-endian order to dst[0..3].
constexpr std::size_t kSyncZeros
constexpr std::size_t kEndMarkerBytes
constexpr std::size_t kBytesIn32Bit
constexpr std::size_t kHeaderBytes
constexpr std::uint8_t kEndByteValue
constexpr std::size_t kTimestampIndex
Declares one telemetry "stream" to include in packets.
const std::size_t multiSDHLength
bool isMulti() const
Convenience: true if configured as a multi SDH stream.
bool isSingle() const
Convenience: true if configured as a single SDH stream.
std::uint8_t multiSDHDataLabel
SensorDataHandler *const * multiSDH
SensorDataHandler * singleSDH