Skyward boardcore
Loading...
Searching...
No Matches
UdpTransceiver.h
Go to the documentation of this file.
1/* Copyright (c) 2023 Skyward Experimental Rocketry
2 * Authors: Davide Mor, Niccolò Betto
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22
23#pragma once
24
26#include <radio/Transceiver.h>
27
28#include <memory>
29
30namespace Boardcore
31{
32
34{
35public:
36 UdpTransceiver(std::shared_ptr<Wiz5500> wiz, int sock_n)
37 : wiz(std::move(wiz)), sock_n(sock_n)
38 {
39 }
40
42 {
43 // Put a timeout here because we are in the destructor
44 wiz->close(sock_n, 100);
45 }
46
47 bool send(uint8_t* pkt, size_t len) { return wiz->send(sock_n, pkt, len); }
48
49 ssize_t receive(uint8_t* pkt, size_t len)
50 {
51 WizIp dst_ip;
52 uint16_t dst_port;
53 return wiz->recvfrom(sock_n, pkt, len, dst_ip, dst_port);
54 }
55
63 bool open(uint16_t recv_port, Boardcore::WizIp send_ip, uint16_t send_port)
64 {
65 return wiz->openUdp(sock_n, recv_port, send_ip, send_port);
66 }
67
71 void close() { wiz->close(sock_n); }
72
73private:
74 std::shared_ptr<Wiz5500> wiz;
75 int sock_n;
76};
77
78} // namespace Boardcore
UdpTransceiver(std::shared_ptr< Wiz5500 > wiz, int sock_n)
bool open(uint16_t recv_port, Boardcore::WizIp send_ip, uint16_t send_port)
Open this UdpTransceiver on the specified ports.
ssize_t receive(uint8_t *pkt, size_t len)
Wait until a new packet is received.
bool send(uint8_t *pkt, size_t len)
Send a packet.
void close()
Close this transceiver.
This file includes all the types the logdecoder script will decode.
Definition WIZ5500.h:318
Class representing an IPv4 ip.
Definition WIZ5500.h:38