REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mac.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3//
4// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
5
6#pragma once
7
8#ifdef ARDUINO
9
10#include "utils/json.h"
11#include <IPAddress.h>
12
13#include <array>
14#include <cstdint>
15#include <list>
16#include <string>
17
18namespace utils {
19
20
26struct MacAddress {
27 uint8_t mac[6] = {0};
28 void reset();
29 operator std::string() const;
30 bool fromString(const char *str);
31
32 uint8_t &operator[](size_t i) { return mac[i]; }
33
34 const uint8_t &operator[](size_t i) const { return mac[i]; }
35
37 static MacAddress otp() {
39 mac.reset();
40 return mac;
41 }
42};
43
44void convertFromJson(JsonVariantConst serialized_mac, MacAddress &mac);
45void convertToJson(const MacAddress &mac, JsonVariant serialized_mac);
46
48std::string toString(const MacAddress &mac, char sep = '-');
50std::string toString(const std::array<uint8_t, 8> &eui64, char sep='-');
52std::string toString(const IPAddress &ip);
53
54bool valid(const MacAddress &mac);
55bool valid(const IPAddress &ip);
56
59 IPAddress address;
60 IPAddress mask;
61 // TODO: fromString, toString, contains(IPAddress)
62};
63
65struct IPMaskList {
66 std::list<IPAddressMask> list;
67 boolean contains(IPAddress); // true if any contains
68};
69
70// TODO implement!
71// Probably want to serialize as *compact* if it is eeprom facing not user facing
72inline void convertFromJson(JsonVariantConst serialized_iplist, IPMaskList &iplist) {}
73
74inline void convertToJson(const IPMaskList &iplist, JsonVariant serialized_iplist) {}
75
76} // namespace utils
77
78// must be defined in global namespace, where Arduinos IPAddress lives
79void convertFromJson(JsonVariantConst ipjson, IPAddress &ip);
80void convertToJson(const IPAddress &ip, JsonVariant ipjson);
81
82#endif // ARDUINO
void convertToJson(const IPAddress &ip, JsonVariant ipjson)
Definition mac.cpp:74
void convertFromJson(JsonVariantConst ipjson, IPAddress &ip)
Definition mac.cpp:72
void convertFromJson(JsonVariantConst serialized_mac, MacAddress &mac)
Definition mac.cpp:68
std::string toString(const MacAddress &mac, char sep='-')
EUI48/MAC Canonical Format AA-BB-CC-DD-EE-FF.
Definition mac.cpp:33
void convertToJson(const MacAddress &mac, JsonVariant serialized_mac)
Definition mac.cpp:76
bool valid(const MacAddress &mac)
All zero mac bytes considered invalid (0-0-0-0-0-0)
Definition mac.cpp:61
IPv4 Adress with net mask.
Definition mac.h:58
IPAddress mask
Definition mac.h:60
IPAddress address
Definition mac.h:59
Represents a list of IP Addresses.
Definition mac.h:65
boolean contains(IPAddress)
std::list< IPAddressMask > list
Definition mac.h:66
Represents Ethernet Mac address.
Definition mac.h:26
void reset()
set to system default (stored in teensy HW_OCOTP_MAC1 and ...MAC0)
Definition mac.cpp:16
uint8_t mac[6]
Definition mac.h:27
bool fromString(const char *str)
required format AA-BB-CC-DD-EE-FF
Definition mac.cpp:25
const uint8_t & operator[](size_t i) const
Definition mac.h:34
uint8_t & operator[](size_t i)
Definition mac.h:32
static MacAddress otp()
Handy access to system default/permanent mac address (one time programmed)
Definition mac.h:37