Merge pull request #587 from marceloaqno/dev-fix-client_mode
Fix Client Mode for Ethernet gateway
This commit is contained in:
+8
-4
@@ -141,6 +141,13 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// GATEWAY - TRANSPORT
|
// GATEWAY - TRANSPORT
|
||||||
|
#if defined(MY_CONTROLLER_IP_ADDRESS) || defined(MY_CONTROLLER_URL_ADDRESS)
|
||||||
|
#define MY_GATEWAY_CLIENT_MODE
|
||||||
|
#endif
|
||||||
|
#if defined(MY_USE_UDP) && !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
|
#error You must specify MY_CONTROLLER_IP_ADDRESS or MY_CONTROLLER_URL_ADDRESS for UDP
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MY_GATEWAY_MQTT_CLIENT)
|
#if defined(MY_GATEWAY_MQTT_CLIENT)
|
||||||
#if defined(MY_RADIO_FEATURE)
|
#if defined(MY_RADIO_FEATURE)
|
||||||
// We assume that a gateway having a radio also should act as repeater
|
// We assume that a gateway having a radio also should act as repeater
|
||||||
@@ -148,7 +155,7 @@
|
|||||||
#endif
|
#endif
|
||||||
// GATEWAY - COMMON FUNCTIONS
|
// GATEWAY - COMMON FUNCTIONS
|
||||||
// We only support MQTT Client using W5100 and ESP8266 at the moment
|
// We only support MQTT Client using W5100 and ESP8266 at the moment
|
||||||
#if !(defined(MY_CONTROLLER_URL_ADDRESS) || defined(MY_CONTROLLER_IP_ADDRESS))
|
#if !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
#error You must specify MY_CONTROLLER_IP_ADDRESS or MY_CONTROLLER_URL_ADDRESS
|
#error You must specify MY_CONTROLLER_IP_ADDRESS or MY_CONTROLLER_URL_ADDRESS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -177,9 +184,6 @@
|
|||||||
// We assume that a gateway having a radio also should act as repeater
|
// We assume that a gateway having a radio also should act as repeater
|
||||||
#define MY_REPEATER_FEATURE
|
#define MY_REPEATER_FEATURE
|
||||||
#endif
|
#endif
|
||||||
#if defined(MY_CONTROLLER_IP_ADDRESS)
|
|
||||||
#define MY_GATEWAY_CLIENT_MODE
|
|
||||||
#endif
|
|
||||||
#if !defined(MY_PORT)
|
#if !defined(MY_PORT)
|
||||||
#error You must define MY_PORT (controller or gatway port to open)
|
#error You must define MY_PORT (controller or gatway port to open)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -52,17 +52,19 @@ typedef struct
|
|||||||
IPAddress _gatewayIp(MY_IP_GATEWAY_ADDRESS);
|
IPAddress _gatewayIp(MY_IP_GATEWAY_ADDRESS);
|
||||||
IPAddress _subnetIp(MY_IP_SUBNET_ADDRESS);
|
IPAddress _subnetIp(MY_IP_SUBNET_ADDRESS);
|
||||||
#endif
|
#endif
|
||||||
static bool clientsConnected[MY_GATEWAY_MAX_CLIENTS];
|
#if !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
|
static bool clientsConnected[MY_GATEWAY_MAX_CLIENTS];
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MY_USE_UDP)
|
#if defined(MY_USE_UDP)
|
||||||
EthernetUDP _ethernetServer;
|
EthernetUDP _ethernetServer;
|
||||||
#else
|
#elif !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
EthernetServer _ethernetServer(_ethernetGatewayPort);
|
EthernetServer _ethernetServer(_ethernetGatewayPort);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(MY_GATEWAY_ESP8266)
|
#if defined(MY_GATEWAY_ESP8266) && !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
static EthernetClient clients[MY_GATEWAY_MAX_CLIENTS];
|
static EthernetClient clients[MY_GATEWAY_MAX_CLIENTS];
|
||||||
static inputBuffer inputString[MY_GATEWAY_MAX_CLIENTS];
|
static inputBuffer inputString[MY_GATEWAY_MAX_CLIENTS];
|
||||||
#else
|
#else
|
||||||
@@ -137,14 +139,29 @@ bool gatewayTransportInit() {
|
|||||||
MY_SERIALDEVICE.println(Ethernet.localIP());
|
MY_SERIALDEVICE.println(Ethernet.localIP());
|
||||||
// give the Ethernet interface a second to initialize
|
// give the Ethernet interface a second to initialize
|
||||||
delay(1000);
|
delay(1000);
|
||||||
#endif
|
#endif /* MY_GATEWAY_ESP8266 */
|
||||||
|
|
||||||
#ifdef MY_USE_UDP
|
#ifdef MY_USE_UDP
|
||||||
_ethernetServer.begin(_ethernetGatewayPort);
|
_ethernetServer.begin(_ethernetGatewayPort);
|
||||||
|
#elif defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
|
#if defined(MY_CONTROLLER_URL_ADDRESS)
|
||||||
|
if (!client.connect(MY_CONTROLLER_URL_ADDRESS, MY_PORT)) {
|
||||||
|
#else
|
||||||
|
if (!client.connect(_ethernetControllerIP, MY_PORT)) {
|
||||||
|
#endif
|
||||||
|
client.stop();
|
||||||
|
debug(PSTR("Eth: Failed to connect\n"));
|
||||||
|
} else {
|
||||||
|
debug(PSTR("Eth: connect\n"));
|
||||||
|
_w5100_spi_en(false);
|
||||||
|
gatewayTransportSend(buildGw(_msgTmp, I_GATEWAY_READY).set("Gateway startup complete."));
|
||||||
|
_w5100_spi_en(true);
|
||||||
|
presentNode();
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
// we have to use pointers due to the constructor of EthernetServer
|
// we have to use pointers due to the constructor of EthernetServer
|
||||||
_ethernetServer.begin();
|
_ethernetServer.begin();
|
||||||
#endif /* USE_UDP */
|
#endif
|
||||||
_w5100_spi_en(false);
|
_w5100_spi_en(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -157,25 +174,37 @@ bool gatewayTransportSend(MyMessage &message)
|
|||||||
setIndication(INDICATION_GW_TX);
|
setIndication(INDICATION_GW_TX);
|
||||||
|
|
||||||
_w5100_spi_en(true);
|
_w5100_spi_en(true);
|
||||||
#if defined(MY_CONTROLLER_IP_ADDRESS)
|
#if defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
#if defined(MY_USE_UDP)
|
#if defined(MY_USE_UDP)
|
||||||
_ethernetServer.beginPacket(_ethernetControllerIP, MY_PORT);
|
#if defined(MY_CONTROLLER_URL_ADDRESS)
|
||||||
|
_ethernetServer.beginPacket(MY_CONTROLLER_URL_ADDRESS, MY_PORT);
|
||||||
|
#else
|
||||||
|
_ethernetServer.beginPacket(_ethernetControllerIP, MY_PORT);
|
||||||
|
#endif
|
||||||
_ethernetServer.write(_ethernetMsg, strlen(_ethernetMsg));
|
_ethernetServer.write(_ethernetMsg, strlen(_ethernetMsg));
|
||||||
// returns 1 if the packet was sent successfully
|
// returns 1 if the packet was sent successfully
|
||||||
ret = _ethernetServer.endPacket();
|
ret = _ethernetServer.endPacket();
|
||||||
#else
|
#else
|
||||||
EthernetClient client;
|
if (!client.connected()) {
|
||||||
|
client.stop();
|
||||||
#if defined(MY_CONTROLLER_URL_ADDRESS)
|
#if defined(MY_CONTROLLER_URL_ADDRESS)
|
||||||
if (client.connected() || client.connect(MY_CONTROLLER_URL_ADDRESS, MY_PORT)) {
|
if (!client.connect(MY_CONTROLLER_URL_ADDRESS, MY_PORT)) {
|
||||||
#else
|
#else
|
||||||
if (client.connected() || client.connect(_ethernetControllerIP, MY_PORT)) {
|
if (!client.connect(_ethernetControllerIP, MY_PORT)) {
|
||||||
#endif
|
#endif
|
||||||
client.write(_ethernetMsg, strlen(_ethernetMsg));
|
// connecting to the server failed!
|
||||||
}
|
debug(PSTR("Eth: Failed to connect\n"));
|
||||||
else {
|
ret = false;
|
||||||
// connecting to the server failed!
|
} else {
|
||||||
ret = false;
|
debug(PSTR("Eth: connect\n"));
|
||||||
}
|
_w5100_spi_en(false);
|
||||||
|
gatewayTransportSend(buildGw(_msgTmp, I_GATEWAY_READY).set("Gateway startup complete."));
|
||||||
|
_w5100_spi_en(true);
|
||||||
|
presentNode();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = client.write(_ethernetMsg, strlen(_ethernetMsg)) > 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
// Send message to connected clients
|
// Send message to connected clients
|
||||||
@@ -188,16 +217,16 @@ bool gatewayTransportSend(MyMessage &message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
_ethernetServer.write(_ethernetMsg);
|
ret = _ethernetServer.write(_ethernetMsg) > 0;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif /* MY_GATEWAY_CLIENT_MODE */
|
||||||
_w5100_spi_en(false);
|
_w5100_spi_en(false);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(MY_GATEWAY_ESP8266)
|
#if defined(MY_GATEWAY_ESP8266) && !defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
bool _readFromClient(uint8_t i) {
|
bool _readFromClient(uint8_t i) {
|
||||||
while (clients[i].connected() && clients[i].available()) {
|
while (clients[i].connected() && clients[i].available()) {
|
||||||
char inChar = clients[i].read();
|
char inChar = clients[i].read();
|
||||||
@@ -290,6 +319,30 @@ bool gatewayTransportAvailable()
|
|||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
#elif defined(MY_GATEWAY_CLIENT_MODE)
|
||||||
|
if (!client.connected()) {
|
||||||
|
client.stop();
|
||||||
|
#if defined(MY_CONTROLLER_URL_ADDRESS)
|
||||||
|
if (!client.connect(MY_CONTROLLER_URL_ADDRESS, MY_PORT)) {
|
||||||
|
#else
|
||||||
|
if (!client.connect(_ethernetControllerIP, MY_PORT)) {
|
||||||
|
#endif
|
||||||
|
debug(PSTR("Eth: Failed to connect\n"));
|
||||||
|
_w5100_spi_en(false);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
debug(PSTR("Eth: connect\n"));
|
||||||
|
_w5100_spi_en(false);
|
||||||
|
gatewayTransportSend(buildGw(_msgTmp, I_GATEWAY_READY).set("Gateway startup complete."));
|
||||||
|
_w5100_spi_en(true);
|
||||||
|
presentNode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_readFromClient()) {
|
||||||
|
setIndication(INDICATION_GW_RX);
|
||||||
|
_w5100_spi_en(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#if defined(MY_GATEWAY_ESP8266)
|
#if defined(MY_GATEWAY_ESP8266)
|
||||||
// ESP8266: Go over list of clients and stop any that are no longer connected.
|
// ESP8266: Go over list of clients and stop any that are no longer connected.
|
||||||
@@ -356,7 +409,7 @@ bool gatewayTransportAvailable()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* MY_GATEWAY_ESP8266 */
|
||||||
#endif
|
#endif
|
||||||
_w5100_spi_en(false);
|
_w5100_spi_en(false);
|
||||||
return false;
|
return false;
|
||||||
@@ -393,4 +446,4 @@ void gatewayTransportRenewIP()
|
|||||||
_w5100_spi_en(false);
|
_w5100_spi_en(false);
|
||||||
next_time = now + MY_IP_RENEWAL_INTERVAL;
|
next_time = now + MY_IP_RENEWAL_INTERVAL;
|
||||||
}
|
}
|
||||||
#endif /* IP_ADDRESS_DHCP */
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user