#include "pb_encode.h"
#include "pb_decode.h"
#include "pb_common.h"
#include "circular_buffer.h"
#include <QNEthernet.h>
#include <functional>
Go to the source code of this file.
|
| 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) |
| |
◆ 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
39 return false;
40 }
41 auto message_length = stream.bytes_written;
42 socket->write(buffer, message_length);
43 socket->endPacket();
44 return true;
45}
◆ 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);
52 if (pb_decode(&stream, desc_pointer, &
msg))
53 {
54 interface.receive_pb_msg(
msg, curr_millis);
55 }
56}