supla-device
Loading...
Searching...
No Matches
ethernet_shield.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_NETWORK_ETHERNET_SHIELD_H_
5#define SRC_SUPLA_NETWORK_ETHERNET_SHIELD_H_
6
7#ifdef ARDUINO_ARCH_AVR
8#include <Arduino.h>
9#include <Ethernet.h>
10#include <supla/log_wrapper.h>
11
12#include "../supla_lib_config.h"
13#include "network.h"
14
15namespace Supla {
16class EthernetShield : public Supla::Network {
17 public:
18 explicit EthernetShield(uint8_t mac[6], unsigned char *ip = NULL)
19 : Network(ip) {
20 memcpy(this->mac, mac, 6);
21 }
22
23 void disable() override {
24 isDeviceReady = false;
25 }
26
27 bool isReady() override {
28 return isDeviceReady;
29 }
30
31 void setup() override {
32 setSSLEnabled(false); // no SSL support on Arduino MEGA target
33 SUPLA_LOG_INFO("Connecting to network...");
34 if (useLocalIp) {
35 Ethernet.begin(mac, localIp);
36 isDeviceReady = true;
37 } else {
38 int result = false;
39 result = Ethernet.begin(mac, 10000, 4000);
40 SUPLA_LOG_INFO("DHCP connection result: %d", result);
41 isDeviceReady = result == 1 ? true : false;
42 }
43
44 IPAddress localIP = Ethernet.localIP();
45 IPAddress subnetMaskIP = Ethernet.subnetMask();
46 IPAddress gatewayIP = Ethernet.gatewayIP();
47 IPAddress dnsServerIP = Ethernet.dnsServerIP();
48 SUPLA_LOG_INFO(
49 "localIP: %d.%d.%d.%d", localIP[0], localIP[1], localIP[2], localIP[3]);
50 SUPLA_LOG_INFO("subnetMaskIP: %d.%d.%d.%d",
51 subnetMaskIP[0],
52 subnetMaskIP[1],
53 subnetMaskIP[2],
54 subnetMaskIP[3]);
55 SUPLA_LOG_INFO("gatewayIP: %d.%d.%d.%d",
56 gatewayIP[0],
57 gatewayIP[1],
58 gatewayIP[2],
59 gatewayIP[3]);
60 SUPLA_LOG_INFO("dnsServerIP: %d.%d.%d.%d",
61 dnsServerIP[0],
62 dnsServerIP[1],
63 dnsServerIP[2],
64 dnsServerIP[3]);
65 SUPLA_LOG_INFO("ETH MAC: %02X:%02X:%02X:%02X:%02X:%02X",
66 mac[0],
67 mac[1],
68 mac[2],
69 mac[3],
70 mac[4],
71 mac[5]);
72 }
73
74 bool iterate() {
75 Ethernet.maintain();
76 return true;
77 }
78
79 void fillStateData(TDSC_ChannelState *channelState) {
80 channelState->Fields |=
81 SUPLA_CHANNELSTATE_FIELD_IPV4 | SUPLA_CHANNELSTATE_FIELD_MAC;
82 channelState->IPv4 = Ethernet.localIP();
83 Ethernet.MACAddress(channelState->MAC);
84 }
85
86 protected:
87 uint8_t mac[6] = {};
88 bool isDeviceReady = false;
89};
90
91}; // namespace Supla
92
93#endif // ARDUINO_ARCH_AVR
94
95#endif // SRC_SUPLA_NETWORK_ETHERNET_SHIELD_H_
Definition ip_address.h:15
Definition network.h:21
Definition proto.h:2705