42 lines
1.6 KiB
C++
42 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <queue>
|
|
#include "LinBusListener.h"
|
|
|
|
namespace esphome {
|
|
namespace truma_inetbox {
|
|
class LinBusProtocol : public LinBusListener {
|
|
public:
|
|
virtual const std::array<u_int8_t, 4> lin_identifier() = 0;
|
|
virtual void lin_reset_device() = 0;
|
|
|
|
protected:
|
|
const std::array<u_int8_t, 8> lin_empty_response_ = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
|
|
|
bool answer_lin_order_(const u_int8_t pid) override;
|
|
void lin_message_recieved_(const u_int8_t pid, const u_int8_t *message, u_int8_t length) override;
|
|
|
|
virtual bool lin_read_field_by_identifier_(u_int8_t identifier, std::array<u_int8_t, 5> *response) = 0;
|
|
virtual const u_int8_t *lin_multiframe_recieved(const u_int8_t *message, const u_int8_t message_len,
|
|
u_int8_t *return_len) = 0;
|
|
|
|
std::queue<std::array<u_int8_t, 8>> updates_to_send_ = {};
|
|
|
|
private:
|
|
u_int8_t lin_node_address_ = /*LIN initial node address*/ 0x03;
|
|
|
|
void prepare_update_msg_(const std::array<u_int8_t, 8> message);
|
|
bool is_matching_identifier_(const u_int8_t *message);
|
|
|
|
u_int16_t multi_pdu_message_expected_size_ = 0;
|
|
u_int8_t multi_pdu_message_len_ = 0;
|
|
u_int8_t multi_pdu_message_[64];
|
|
void lin_message_recieved_diagnostic_(const u_int8_t *message, u_int8_t length);
|
|
void lin_message_recieved_diagnostic_multi_(const u_int8_t *message, u_int8_t length,
|
|
u_int8_t protocol_control_information);
|
|
void lin_message_recieved_diagnostic_single_(const u_int8_t *message, u_int8_t length);
|
|
};
|
|
|
|
} // namespace truma_inetbox
|
|
} // namespace esphome
|