Cleanup Sequans implementation.
This commit is contained in:
@@ -71,13 +71,13 @@
|
|||||||
typedef TinyGsmXBee::GsmClient TinyGsmClient;
|
typedef TinyGsmXBee::GsmClient TinyGsmClient;
|
||||||
typedef TinyGsmXBee::GsmClientSecure TinyGsmClientSecure;
|
typedef TinyGsmXBee::GsmClientSecure TinyGsmClientSecure;
|
||||||
|
|
||||||
#elif defined(TINY_GSM_MODEM_SEQUANS_MONARCH_CATM1)
|
#elif defined(TINY_GSM_MODEM_SEQUANS_MONARCH)
|
||||||
#define TINY_GSM_MODEM_HAS_GPRS
|
#define TINY_GSM_MODEM_HAS_GPRS
|
||||||
#define TINY_GSM_MODEM_HAS_SSL
|
#define TINY_GSM_MODEM_HAS_SSL
|
||||||
#include <TinyGsmClientSequansMonarchCatM1.h>
|
#include <TinyGsmClientSequansMonarch.h>
|
||||||
typedef TinyGsmSequansMonarchCatM1 TinyGsm;
|
typedef TinyGsmSequansMonarch TinyGsm;
|
||||||
typedef TinyGsmSequansMonarchCatM1::GsmClient TinyGsmClient;
|
typedef TinyGsmSequansMonarch::GsmClient TinyGsmClient;
|
||||||
typedef TinyGsmSequansMonarchCatM1::GsmClientSecure TinyGsmClientSecure;
|
typedef TinyGsmSequansMonarch::GsmClientSecure TinyGsmClientSecure;
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@@ -1,6 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @file TinyGsmClientSequansMonarch.h
|
||||||
|
* @author Michael Krumpus
|
||||||
|
* @license LGPL-3.0
|
||||||
|
* @copyright Copyright (c) 2019 Michael Krumpus
|
||||||
|
* @date Jan 2019
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef TinyGsmClientSequansMonarchCatM1_h
|
#ifndef TinyGsmClientSequansMonarch_h
|
||||||
#define TinyGsmClientSequansMonarchCatM1_h
|
#define TinyGsmClientSequansMonarch_h
|
||||||
|
|
||||||
#define TINY_GSM_DEBUG Serial
|
#define TINY_GSM_DEBUG Serial
|
||||||
//#define TINY_GSM_USE_HEX
|
//#define TINY_GSM_USE_HEX
|
||||||
@@ -45,24 +52,24 @@ enum SocketStatus {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class TinyGsmSequansMonarchCatM1
|
class TinyGsmSequansMonarch
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
class GsmClient : public Client
|
class GsmClient : public Client
|
||||||
{
|
{
|
||||||
friend class TinyGsmSequansMonarchCatM1;
|
friend class TinyGsmSequansMonarch;
|
||||||
typedef TinyGsmFifo<uint8_t, TINY_GSM_RX_BUFFER> RxFifo;
|
typedef TinyGsmFifo<uint8_t, TINY_GSM_RX_BUFFER> RxFifo;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GsmClient() {}
|
GsmClient() {}
|
||||||
|
|
||||||
GsmClient(TinyGsmSequansMonarchCatM1& modem, uint8_t mux = 1) {
|
GsmClient(TinyGsmSequansMonarch& modem, uint8_t mux = 1) {
|
||||||
init(&modem, mux);
|
init(&modem, mux);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool init(TinyGsmSequansMonarchCatM1* modem, uint8_t mux = 1) {
|
bool init(TinyGsmSequansMonarch* modem, uint8_t mux = 1) {
|
||||||
this->at = modem;
|
this->at = modem;
|
||||||
this->mux = mux;
|
this->mux = mux;
|
||||||
sock_available = 0;
|
sock_available = 0;
|
||||||
@@ -179,7 +186,7 @@ public:
|
|||||||
String remoteIP() TINY_GSM_ATTR_NOT_IMPLEMENTED;
|
String remoteIP() TINY_GSM_ATTR_NOT_IMPLEMENTED;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TinyGsmSequansMonarchCatM1* at;
|
TinyGsmSequansMonarch* at;
|
||||||
uint8_t mux;
|
uint8_t mux;
|
||||||
uint16_t sock_available;
|
uint16_t sock_available;
|
||||||
uint32_t prev_check;
|
uint32_t prev_check;
|
||||||
@@ -193,7 +200,7 @@ class GsmClientSecure : public GsmClient
|
|||||||
public:
|
public:
|
||||||
GsmClientSecure() {}
|
GsmClientSecure() {}
|
||||||
|
|
||||||
GsmClientSecure(TinyGsmSequansMonarchCatM1& modem, uint8_t mux = 1)
|
GsmClientSecure(TinyGsmSequansMonarch& modem, uint8_t mux = 1)
|
||||||
: GsmClient(modem, mux)
|
: GsmClient(modem, mux)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -209,7 +216,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
TinyGsmSequansMonarchCatM1(Stream& stream)
|
TinyGsmSequansMonarch(Stream& stream)
|
||||||
: stream(stream)
|
: stream(stream)
|
||||||
{
|
{
|
||||||
memset(sockets, 0, sizeof(sockets));
|
memset(sockets, 0, sizeof(sockets));
|
||||||
@@ -295,6 +302,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
/*
|
||||||
bool hasSSL() {
|
bool hasSSL() {
|
||||||
sendAT(GF("+CIPSSL=?"));
|
sendAT(GF("+CIPSSL=?"));
|
||||||
if (waitResponse(GF(GSM_NL "+CIPSSL:")) != 1) {
|
if (waitResponse(GF(GSM_NL "+CIPSSL:")) != 1) {
|
||||||
@@ -302,7 +310,7 @@ public:
|
|||||||
}
|
}
|
||||||
return waitResponse() == 1;
|
return waitResponse() == 1;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
* Power functions
|
* Power functions
|
||||||
*/
|
*/
|
||||||
@@ -312,13 +320,12 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
sendAT(GF("+CFUN=0"));
|
sendAT(GF("+CFUN=0"));
|
||||||
if (waitResponse(10000L) != 1) {
|
if (waitResponse(10000L) != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
sendAT(GF("+CFUN=1"));
|
sendAT(GF("+CFUN=1,1"));
|
||||||
if (waitResponse(10000L) != 1) {
|
if (waitResponse(10000L) != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -463,101 +470,29 @@ public:
|
|||||||
bool gprsConnect(const char* apn, const char* user = NULL, const char* pwd = NULL) {
|
bool gprsConnect(const char* apn, const char* user = NULL, const char* pwd = NULL) {
|
||||||
gprsDisconnect();
|
gprsDisconnect();
|
||||||
|
|
||||||
/*
|
// Define the PDP context
|
||||||
// Set the Bearer for the IP
|
sendAT(GF("+CGDCONT=3,\"IPV4V6\",\""), apn, '"');
|
||||||
sendAT(GF("+SAPBR=3,1,\"Contype\",\"GPRS\"")); // Set the connection type to GPRS
|
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
|
||||||
sendAT(GF("+SAPBR=3,1,\"APN\",\""), apn, '"'); // Set the APN
|
|
||||||
waitResponse();
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (user && strlen(user) > 0) {
|
if (user && strlen(user) > 0) {
|
||||||
sendAT(GF("+CGAUTH=3,1,\""), user, GF("\",\""), pwd, GF("\""));
|
sendAT(GF("+CGAUTH=3,1,\""), user, GF("\",\""), pwd, GF("\""));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define the PDP context
|
|
||||||
// AT+CGDCONT=3,"IPV4V6","NIMBLINK.GW12.VZWENTP"
|
|
||||||
// AT+CGDCONT=3,"IPV4V6","hologram"
|
|
||||||
sendAT(GF("+CGDCONT=3,\"IPV4V6\",\""), apn, '"');
|
|
||||||
waitResponse();
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Activate the PDP context
|
// Activate the PDP context
|
||||||
sendAT(GF("+CGACT=1,1"));
|
sendAT(GF("+CGACT=3,1"));
|
||||||
waitResponse(60000L);
|
waitResponse(60000L);
|
||||||
|
|
||||||
// Open the definied GPRS bearer context
|
|
||||||
sendAT(GF("+SAPBR=1,1"));
|
|
||||||
waitResponse(85000L);
|
|
||||||
// Query the GPRS bearer context status
|
|
||||||
sendAT(GF("+SAPBR=2,1"));
|
|
||||||
if (waitResponse(30000L) != 1)
|
|
||||||
return false;
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Attach to GPRS
|
// Attach to GPRS
|
||||||
sendAT(GF("+CGATT=1"));
|
sendAT(GF("+CGATT=1"));
|
||||||
if (waitResponse(60000L) != 1)
|
if (waitResponse(60000L) != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Set to multi-IP
|
|
||||||
sendAT(GF("+CIPMUX=1"));
|
|
||||||
if (waitResponse() != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Put in "quick send" mode (thus no extra "Send OK")
|
|
||||||
sendAT(GF("+CIPQSEND=1"));
|
|
||||||
if (waitResponse() != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set to get data manually
|
|
||||||
sendAT(GF("+CIPRXGET=1"));
|
|
||||||
if (waitResponse() != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start Task and Set APN, USER NAME, PASSWORD
|
|
||||||
sendAT(GF("+CSTT=\""), apn, GF("\",\""), user, GF("\",\""), pwd, GF("\""));
|
|
||||||
if (waitResponse(60000L) != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bring Up Wireless Connection with GPRS or CSD
|
|
||||||
sendAT(GF("+CIICR"));
|
|
||||||
if (waitResponse(60000L) != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get Local IP Address, only assigned after connection
|
|
||||||
sendAT(GF("+CIFSR;E0"));
|
|
||||||
if (waitResponse(10000L) != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure Domain Name Server (DNS)
|
|
||||||
sendAT(GF("+CDNSCFG=\"8.8.8.8\",\"8.8.4.4\""));
|
|
||||||
if (waitResponse() != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gprsDisconnect() {
|
bool gprsDisconnect() {
|
||||||
// Shut the TCP/IP connection
|
sendAT(GF("+CGATT=0"));
|
||||||
/*
|
|
||||||
sendAT(GF("+CIPSHUT"));
|
|
||||||
if (waitResponse(60000L) != 1)
|
|
||||||
return false;
|
|
||||||
*/
|
|
||||||
sendAT(GF("+CGATT=0")); // Deactivate the bearer context
|
|
||||||
if (waitResponse(60000L) != 1)
|
if (waitResponse(60000L) != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -579,24 +514,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getLocalIP() {
|
String getLocalIP() {
|
||||||
//sendAT(GF("+CIFSR;E0"));
|
|
||||||
sendAT(GF("+CGPADDR=3"));
|
sendAT(GF("+CGPADDR=3"));
|
||||||
|
|
||||||
if (waitResponse(10000L, GF("+CGPADDR: 3,\"")) != 1) {
|
if (waitResponse(10000L, GF("+CGPADDR: 3,\"")) != 1) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String res = stream.readStringUntil('\"');
|
String res = stream.readStringUntil('\"');
|
||||||
waitResponse();
|
waitResponse();
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
res.replace(GSM_NL "OK" GSM_NL, "");
|
|
||||||
res.replace(GSM_NL, "");
|
|
||||||
res.trim();
|
|
||||||
*/
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IPAddress localIP() {
|
IPAddress localIP() {
|
||||||
@@ -607,6 +532,7 @@ public:
|
|||||||
* Phone Call functions
|
* Phone Call functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO
|
||||||
bool setGsmBusy(bool busy = true) {
|
bool setGsmBusy(bool busy = true) {
|
||||||
sendAT(GF("+GSMBUSY="), busy ? 1 : 0);
|
sendAT(GF("+GSMBUSY="), busy ? 1 : 0);
|
||||||
return waitResponse() == 1;
|
return waitResponse() == 1;
|
||||||
@@ -618,6 +544,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns true on pick-up, false on error/busy
|
// Returns true on pick-up, false on error/busy
|
||||||
|
// TODO
|
||||||
bool callNumber(const String& number) {
|
bool callNumber(const String& number) {
|
||||||
if (number == GF("last")) {
|
if (number == GF("last")) {
|
||||||
sendAT(GF("DL"));
|
sendAT(GF("DL"));
|
||||||
@@ -643,6 +570,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 0-9,*,#,A,B,C,D
|
// 0-9,*,#,A,B,C,D
|
||||||
|
// TODO
|
||||||
bool dtmfSend(char cmd, int duration_ms = 100) {
|
bool dtmfSend(char cmd, int duration_ms = 100) {
|
||||||
duration_ms = constrain(duration_ms, 100, 1000);
|
duration_ms = constrain(duration_ms, 100, 1000);
|
||||||
|
|
||||||
@@ -656,7 +584,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
* Messaging functions
|
* Messaging functions
|
||||||
*/
|
*/
|
||||||
|
// TODO
|
||||||
String sendUSSD(const String& code) {
|
String sendUSSD(const String& code) {
|
||||||
sendAT(GF("+CMGF=1"));
|
sendAT(GF("+CMGF=1"));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
@@ -683,6 +611,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
bool sendSMS(const String& number, const String& text) {
|
bool sendSMS(const String& number, const String& text) {
|
||||||
sendAT(GF("+CMGF=1"));
|
sendAT(GF("+CMGF=1"));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
@@ -699,6 +628,7 @@ public:
|
|||||||
return waitResponse(60000L) == 1;
|
return waitResponse(60000L) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
bool sendSMS_UTF16(const String& number, const void* text, size_t len) {
|
bool sendSMS_UTF16(const String& number, const void* text, size_t len) {
|
||||||
sendAT(GF("+CMGF=1"));
|
sendAT(GF("+CMGF=1"));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
@@ -731,6 +661,7 @@ public:
|
|||||||
* Location functions
|
* Location functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO
|
||||||
String getGsmLocation() {
|
String getGsmLocation() {
|
||||||
sendAT(GF("+CIPGSMLOC=1,1"));
|
sendAT(GF("+CIPGSMLOC=1,1"));
|
||||||
if (waitResponse(10000L, GF(GSM_NL "+CIPGSMLOC:")) != 1) {
|
if (waitResponse(10000L, GF(GSM_NL "+CIPGSMLOC:")) != 1) {
|
||||||
@@ -746,6 +677,7 @@ public:
|
|||||||
* Battery functions
|
* Battery functions
|
||||||
*/
|
*/
|
||||||
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
|
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
|
||||||
|
// TODO
|
||||||
uint16_t getBattVoltage() {
|
uint16_t getBattVoltage() {
|
||||||
sendAT(GF("+CBC"));
|
sendAT(GF("+CBC"));
|
||||||
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
|
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
|
||||||
@@ -759,6 +691,7 @@ public:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
int getBattPercent() {
|
int getBattPercent() {
|
||||||
sendAT(GF("+CBC"));
|
sendAT(GF("+CBC"));
|
||||||
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
|
if (waitResponse(GF(GSM_NL "+CBC:")) != 1) {
|
||||||
@@ -774,14 +707,21 @@ protected:
|
|||||||
|
|
||||||
bool modemConnect(const char* host, uint16_t port, uint8_t mux, bool ssl = false) {
|
bool modemConnect(const char* host, uint16_t port, uint8_t mux, bool ssl = false) {
|
||||||
int rsp;
|
int rsp;
|
||||||
|
|
||||||
|
// TODO
|
||||||
/*
|
/*
|
||||||
// TODO: test for SSL ability somehow
|
|
||||||
sendAT(GF("+CIPSSL="), ssl);
|
sendAT(GF("+CIPSSL="), ssl);
|
||||||
rsp = waitResponse();
|
rsp = waitResponse();
|
||||||
if (ssl && rsp != 1) {
|
if (ssl && rsp != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
sendAT(GF("+SQNSCFG="), mux, GF(",3,300,90,600,50"));
|
||||||
|
waitResponse();
|
||||||
|
|
||||||
|
sendAT(GF("+SQNSCFGEXT="), mux, GF(",1,0,0,0,0"));
|
||||||
|
waitResponse();
|
||||||
|
|
||||||
sendAT(GF("+SQNSD="), mux, ",0,", port, ',', GF("\""), host, GF("\""), ",0,0,1");
|
sendAT(GF("+SQNSD="), mux, ",0,", port, ',', GF("\""), host, GF("\""), ",0,0,1");
|
||||||
rsp = waitResponse(75000L,
|
rsp = waitResponse(75000L,
|
||||||
GF("OK" GSM_NL),
|
GF("OK" GSM_NL),
|
||||||
@@ -836,7 +776,6 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
size_t modemRead(size_t size, uint8_t mux) {
|
size_t modemRead(size_t size, uint8_t mux) {
|
||||||
size_t bytes_read = 0;
|
|
||||||
sendAT(GF("+SQNSRECV="), mux, ',', size);
|
sendAT(GF("+SQNSRECV="), mux, ',', size);
|
||||||
if (waitResponse(GF("+SQNSRECV: ")) != 1) {
|
if (waitResponse(GF("+SQNSRECV: ")) != 1) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -844,52 +783,14 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
size_t len = stream.readStringUntil('\n').toInt();
|
size_t len = stream.readStringUntil('\n').toInt();
|
||||||
|
|
||||||
unsigned long timeout = 500;
|
|
||||||
unsigned long startMillis = millis();
|
|
||||||
bool timedOut = false;
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) {
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
TINY_GSM_YIELD();
|
|
||||||
if (millis() - startMillis < timeout) {
|
|
||||||
timedOut = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (timedOut) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
bytes_read++;
|
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
if (timedOut) {
|
waitResponse();
|
||||||
Serial.print("timeout! ");
|
|
||||||
Serial.print(" len=");
|
|
||||||
Serial.print(len);
|
|
||||||
Serial.print(" bytes_read=");
|
|
||||||
Serial.println(bytes_read);
|
|
||||||
unsigned char *s = (unsigned char*)malloc(bytes_read+1);
|
|
||||||
sockets[mux]->rx.get(s, bytes_read);
|
|
||||||
Serial.print("->");
|
|
||||||
Serial.print((char *)s);
|
|
||||||
Serial.println("<-");
|
|
||||||
} else {
|
|
||||||
waitResponse();
|
|
||||||
}
|
|
||||||
sockets[mux]->sock_available = modemGetAvailable(mux);
|
sockets[mux]->sock_available = modemGetAvailable(mux);
|
||||||
return bytes_read;
|
return len;
|
||||||
}
|
|
||||||
|
|
||||||
size_t getSocketInfo(uint8_t mux) {
|
|
||||||
sendAT(GF("+SQNSI="), mux);
|
|
||||||
size_t bytes_sent = 0;
|
|
||||||
if (waitResponse(GF("+SQNSI:")) == 1) {
|
|
||||||
streamSkipUntil(','); // Skip mux
|
|
||||||
bytes_sent = stream.readStringUntil(',').toInt();
|
|
||||||
streamSkipUntil('\n');
|
|
||||||
waitResponse();
|
|
||||||
}
|
|
||||||
return bytes_sent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemGetAvailable(uint8_t mux) {
|
size_t modemGetAvailable(uint8_t mux) {
|
||||||
@@ -1011,6 +912,7 @@ public:
|
|||||||
sockets[mux]->sock_connected = false;
|
sockets[mux]->sock_connected = false;
|
||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
|
DBG("### Closed: ", mux);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (millis() - startMillis < timeout);
|
} while (millis() - startMillis < timeout);
|
||||||
@@ -1022,11 +924,6 @@ finish:
|
|||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
Serial.print("-> ");
|
|
||||||
Serial.print(data);
|
|
||||||
Serial.print(" <-");
|
|
||||||
*/
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue
Block a user