Go to the documentation of this file.
21 #include "etl/delegate.h"
25 #include "can/conn/raw.h"
26 #include "periph/can.h"
27 #include "ringbuffer.h"
35 #include "MessageInterface.h"
40 #define CAN_BUFFER_SIZE CANPB_INPUT_MESSAGE_LENGTH_MAX*2
65 uint8_t can_interface_number
70 bool init(
struct can_filter *filter);
87 const EmbeddedProto::MessageInterface *message =
nullptr
98 conn_can_raw_t conn_can_raw_;
99 uint8_t can_interface_number_;
100 kernel_pid_t reader_pid_;
101 ringbuffer_t rx_buf_;
102 uint32_t msg_length_ = 0;
103 mutex_t mutex_ = MUTEX_INIT;
104 etl::map<uuid_t, message_handler_t, CANPB_MAX_HANDLERS> message_handlers_;
107 char rx_mem_[CAN_BUFFER_SIZE];
#define CANPB_READER_STACKSIZE
message reader thread stask size
uint32_t uuid_t
Custom type for uuids.
void message_reader()
Wait and decode incoming Protobuf messages.
void register_message_handler(uuid_t uuid, message_handler_t handler)
Associate a message handle to a specific uuid.
CanProtobuf(uint8_t can_interface_number)
Class constructor.
ReadBuffer class used to decode Protobuf messages.
WriteBuffer class used to encode Protobuf messages.
bool init(struct can_filter *filter)
Initialize CAN connection.
Differential drive controller.
Generic CAN Protobuf communication class.
bool send_message(uuid_t uuid, const EmbeddedProto::MessageInterface *message=nullptr)
Send CAN message.
Write buffer for EmbeddedProto.
Read buffer for EmbeddedProto.
void * message_reader_wrapper(void *arg)
Thread function decoding incoming Protobuf messages.
etl::delegate< void(cogip::canpb::ReadBuffer &)> message_handler_t
Prototype for incoming Protobuf message handlers.
void can_rx_cb(uint8_t data)
Function call for each incomming frame on CAN port.
void start_reader()
Start thread waiting for incoming messages.