MCU
Loading...
Searching...
No Matches
Classes | Functions
ProtobufMsgInterface.h File Reference
#include "pb_encode.h"
#include "pb_decode.h"
#include "pb_common.h"
#include "circular_buffer.h"
#include <QNEthernet.h>
#include <functional>
Include dependency graph for ProtobufMsgInterface.h:

Go to the source code of this file.

Classes

struct  ETHInterfaces
 

Functions

template<size_t buffer_size, typename pb_msg_type , class eth_interface >
void handle_ethernet_socket_receive (const SysTick_s &tick, qindesign::network::EthernetUDP *socket, std::function< void(unsigned long, const uint8_t *, size_t, eth_interface &, const pb_msgdesc_t *)> recv_function, eth_interface &interface, const pb_msgdesc_t *desc_pointer)
 
template<typename pb_struct , size_t buffer_size>
bool handle_ethernet_socket_send_pb (IPAddress addr, uint16_t port, qindesign::network::EthernetUDP *socket, const pb_struct &msg, const pb_msgdesc_t *msg_desc)
 
template<typename pb_msg_type , class eth_interface >
void recv_pb_stream_msg (unsigned long curr_millis, const uint8_t *buffer, size_t packet_size, eth_interface &interface, const pb_msgdesc_t *desc_pointer)
 

Function Documentation

◆ handle_ethernet_socket_receive()

template<size_t buffer_size, typename pb_msg_type , class eth_interface >
void handle_ethernet_socket_receive ( const SysTick_s &  tick,
qindesign::network::EthernetUDP *  socket,
std::function< void(unsigned long, const uint8_t *, size_t, eth_interface &, const pb_msgdesc_t *)>  recv_function,
eth_interface &  interface,
const pb_msgdesc_t *  desc_pointer 
)

Definition at line 18 of file ProtobufMsgInterface.h.

19{
20 int packet_size = socket->parsePacket();
21 if (packet_size > 0)
22 {
23 uint8_t buffer[buffer_size];
24 size_t read_bytes = socket->read(buffer, sizeof(buffer));
25 socket->read(buffer, buffer_size);
26 recv_function(tick.millis, buffer, read_bytes, interface, desc_pointer);
27 }
28}

◆ handle_ethernet_socket_send_pb()

template<typename pb_struct , size_t buffer_size>
bool handle_ethernet_socket_send_pb ( IPAddress  addr,
uint16_t  port,
qindesign::network::EthernetUDP *  socket,
const pb_struct &  msg,
const pb_msgdesc_t *  msg_desc 
)

Definition at line 31 of file ProtobufMsgInterface.h.

32{
33 socket->beginPacket(addr, port);
34 uint8_t buffer[buffer_size];
35 pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
36 if (!pb_encode(&stream, msg_desc, &msg))
37 {
38 // You can handle error more explicitly by looking at stream.errmsg
39 return false;
40 }
41 auto message_length = stream.bytes_written;
42 socket->write(buffer, message_length);
43 socket->endPacket();
44 return true;
45}
CAN_message_t msg

◆ recv_pb_stream_msg()

template<typename pb_msg_type , class eth_interface >
void recv_pb_stream_msg ( unsigned long  curr_millis,
const uint8_t *  buffer,
size_t  packet_size,
eth_interface &  interface,
const pb_msgdesc_t *  desc_pointer 
)

Definition at line 48 of file ProtobufMsgInterface.h.

49{
50 pb_istream_t stream = pb_istream_from_buffer(buffer, packet_size);
51 pb_msg_type msg = {};
52 if (pb_decode(&stream, desc_pointer, &msg))
53 {
54 interface.receive_pb_msg(msg, curr_millis);
55 }
56}