MEGA fix for SIM800. Stable now? ;)
This commit is contained in:
@@ -66,6 +66,7 @@ public:
|
|||||||
this->at = modem;
|
this->at = modem;
|
||||||
this->mux = mux;
|
this->mux = mux;
|
||||||
sock_available = 0;
|
sock_available = 0;
|
||||||
|
prev_check = 0;
|
||||||
sock_connected = false;
|
sock_connected = false;
|
||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
@@ -113,7 +114,14 @@ public:
|
|||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size()) {
|
if (sock_connected && !rx.size()) {
|
||||||
|
// Workaround: sometimes SIM800 forgets to notify about data arrival.
|
||||||
|
// TODO: Currently we ping the module periodically,
|
||||||
|
// but maybe there's a better indicator that we need to poll
|
||||||
|
if (millis() - prev_check > 500) {
|
||||||
|
got_data = true;
|
||||||
|
prev_check = millis();
|
||||||
|
}
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
return rx.size() + sock_available;
|
return rx.size() + sock_available;
|
||||||
@@ -164,6 +172,7 @@ private:
|
|||||||
TinyGsm* at;
|
TinyGsm* at;
|
||||||
uint8_t mux;
|
uint8_t mux;
|
||||||
uint16_t sock_available;
|
uint16_t sock_available;
|
||||||
|
uint32_t prev_check;
|
||||||
bool sock_connected;
|
bool sock_connected;
|
||||||
bool got_data;
|
bool got_data;
|
||||||
RxFifo rx;
|
RxFifo rx;
|
||||||
@@ -191,7 +200,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool autoBaud(unsigned long timeout = 10000L) {
|
bool autoBaud(unsigned long timeout = 10000L) {
|
||||||
streamWrite(GF("AAAAAAA")); // extra A's to help detect the baud rate
|
//streamWrite(GF("AAAAA" GSM_NL)); // TODO: extra A's to help detect the baud rate
|
||||||
for (unsigned long start = millis(); millis() - start < timeout; ) {
|
for (unsigned long start = millis(); millis() - start < timeout; ) {
|
||||||
sendAT(GF(""));
|
sendAT(GF(""));
|
||||||
if (waitResponse(200) == 1) {
|
if (waitResponse(200) == 1) {
|
||||||
@@ -205,9 +214,10 @@ public:
|
|||||||
|
|
||||||
void maintain() {
|
void maintain() {
|
||||||
for (int mux = 0; mux < TINY_GSM_MUX_COUNT; mux++) {
|
for (int mux = 0; mux < TINY_GSM_MUX_COUNT; mux++) {
|
||||||
if (sockets[mux] && sockets[mux]->got_data) {
|
GsmClient* sock = sockets[mux];
|
||||||
sockets[mux]->got_data = false;
|
if (sock && sock->got_data) {
|
||||||
sockets[mux]->sock_available = modemGetAvailable(mux);
|
sock->got_data = false;
|
||||||
|
sock->sock_available = modemGetAvailable(mux);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (stream.available()) {
|
while (stream.available()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user