1#ifndef PROTOBUFMSGINTERFACE
2#define PROTOBUFMSGINTERFACE
7#include "circular_buffer.h"
17template <
size_t buffer_size,
typename pb_msg_type,
class eth_
interface>
18void 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)
20 int packet_size = socket->parsePacket();
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);
30template <
typename pb_struct,
size_t buffer_size>
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))
41 auto message_length = stream.bytes_written;
42 socket->write(buffer, message_length);
47template <
typename pb_msg_type,
class eth_
interface>
48void 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)
50 pb_istream_t stream = pb_istream_from_buffer(buffer, packet_size);
52 if (pb_decode(&stream, desc_pointer, &
msg))
54 interface.receive_pb_msg(
msg, curr_millis);
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)
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)
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)