REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mac.cpp
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#include "utils/mac.h"
7
8#ifdef ARDUINO
9
10#include <QNEthernet.h>
11
12#include "lwip_t41.h" // from QNEthernet import enet_get_mac
13
14using namespace utils;
15
16void utils::MacAddress::reset() { enet_get_mac(mac); }
17
18FLASHMEM
19utils::MacAddress::operator std::string() const {
20 return toString(*this); // not inline to avoid forward declaration
21}
22
24FLASHMEM
25bool utils::MacAddress::fromString(const char *address) {
26 if (strlen(address) != 17)
27 return false;
28 for (int i = 0; i < 6; i++, address += 3)
29 mac[i] = std::stoul(address, nullptr, 16);
30 return true;
31}
32
33FLASHMEM std::string utils::toString(const MacAddress &mac, char sep) {
34 char mac_str[20];
35 sprintf(mac_str, "%02X%c%02X%c%02X%c%02X%c%02X%c%02X", mac[0], sep, mac[1], sep, mac[2], sep, mac[3], sep,
36 mac[4], sep, mac[5]);
37 return mac_str;
38}
39
40FLASHMEM std::string utils::toString(const std::array<uint8_t, 8> &mac, char sep) {
41 char mac_str[26];
42 sprintf(mac_str, "%02X%c%02X%c%02X%c%02X%c%02X%c%02X%c%02X%c%02X",
43 mac[0], sep, mac[1], sep, mac[2], sep, mac[3], sep,
44 mac[4], sep, mac[5], sep, mac[6], sep, mac[7]);
45 return mac_str;
46}
47
48FLASHMEM std::string utils::toString(const IPAddress &ip) {
49 char ip_str[16];
50 sprintf(ip_str, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
51 return ip_str;
52}
53
54FLASHMEM bool utils::valid(const IPAddress &ip) {
55 uint8_t sum = 0;
56 for (int i = 0; i < 4; i++)
57 sum += ip[i];
58 return sum != 0;
59}
60
61FLASHMEM bool utils::valid(const MacAddress &mac) {
62 uint8_t sum = 0;
63 for (int i = 0; i < 4; i++)
64 sum += mac[i];
65 return sum != 0;
66}
67
68FLASHMEM void utils::convertFromJson(JsonVariantConst macjson, MacAddress &mac) {
69 mac.fromString(macjson.as<const char *>());
70}
71
72FLASHMEM void convertFromJson(JsonVariantConst ipjson, IPAddress &ip) { ip.fromString(ipjson.as<const char *>()); }
73
74FLASHMEM void convertToJson(const IPAddress &ip, JsonVariant ipjson) { ipjson.set(toString(ip)); }
75
76FLASHMEM void utils::convertToJson(const MacAddress &mac, JsonVariant macjson) { macjson.set(toString(mac)); }
77
78#endif // ARDUINO
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
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