File twai_transmitter.h¶
File List > espos_n2k > include > espos_n2k > twai_transmitter.h
Go to the documentation of this file
/* SPDX-FileCopyrightText: 2026 Dirk Wahrheit */
/* SPDX-License-Identifier: Apache-2.0 */
#ifndef COCKPIT_N2K_TWAI_TRANSMITTER_H_
#define COCKPIT_N2K_TWAI_TRANSMITTER_H_
#include <atomic>
#include <cstdint>
#include "esp_timer.h"
#include "espos_n2k/can_frame.h"
namespace espos_n2k {
class TwaiTransmitter {
public:
explicit TwaiTransmitter(size_t tx_queue_depth = 32);
~TwaiTransmitter();
void start();
void stop();
void set(const CanMessage& msg);
bool ever_transmitted() const {
return last_tx_us_.load(std::memory_order_relaxed) != 0;
}
int64_t seconds_since_last_tx() const {
int64_t last = last_tx_us_.load(std::memory_order_relaxed);
if (last == 0) return INT64_MAX;
return (esp_timer_get_time() - last) / 1000000;
}
uint32_t tx_fail_count() const { return tx_fail_count_; }
private:
size_t tx_queue_depth_;
std::atomic<bool> running_{false};
// Microseconds-since-boot of last successful TX; 0 = nothing yet.
std::atomic<int64_t> last_tx_us_{0};
std::atomic<uint32_t> tx_fail_count_{0};
};
} // namespace espos_n2k
#endif // COCKPIT_N2K_TWAI_TRANSMITTER_H_