Browse Source

Gave the XBee a physical pin to use as a hard reset

v_master
Sara Damiano 6 years ago
parent
commit
ec6b475959
1 changed files with 33 additions and 2 deletions
  1. +33
    -2
      src/TinyGsmClientXBee.h

+ 33
- 2
src/TinyGsmClientXBee.h View File

@ -245,6 +245,16 @@ public:
{
beeType = XBEE_UNKNOWN; // Start not knowing what kind of bee it is
guardTime = TINY_GSM_XBEE_GUARD_TIME; // Start with the default guard time of 1 second
resetPin = -1;
memset(sockets, 0, sizeof(sockets));
}
TinyGsmXBee(Stream& stream, int8_t resetPin)
: TinyGsmModem(stream), stream(stream)
{
beeType = XBEE_UNKNOWN; // Start not knowing what kind of bee it is
guardTime = TINY_GSM_XBEE_GUARD_TIME; // Start with the default guard time of 1 second
this->resetPin = resetPin;
memset(sockets, 0, sizeof(sockets));
}
@ -254,6 +264,11 @@ public:
bool init(const char* pin = NULL) {
if (resetPin >= 0) {
pinMode(resetPin, OUTPUT);
digitalWrite(resetPin, HIGH);
}
if (!commandMode(10)) return false; // Try up to 10 times for the init
sendAT(GF("AP0")); // Put in transparent mode
@ -383,6 +398,16 @@ public:
* Power functions
*/
// The XBee's have a bad habit of getting into an unresponsive funk
// This uses the board's hardware reset pin to force it to reset
void pinReset() {
if (resetPin >= 0) {
digitalWrite(resetPin, LOW);
delay(1);
digitalWrite(resetPin, HIGH);
}
}
bool restart() {
if (!commandMode()) return false; // Return immediately
if (beeType == XBEE_UNKNOWN) getSeries(); // how we restart depends on this
@ -874,7 +899,7 @@ finish:
return waitResponse(1000, r1, r2, r3, r4, r5);
}
bool commandMode(uint8_t retries = 2) {
bool commandMode(uint8_t retries = 3) {
uint8_t triesMade = 0;
bool success = false;
streamClear(); // Empty everything in the buffer before starting
@ -883,7 +908,12 @@ finish:
// Default guard time is 1s, but the init fxn decreases it to 250 ms
delay(guardTime);
streamWrite(GF("+++")); // enter command mode
success = (1 == waitResponse(guardTime*2));
int res = waitResponse(guardTime*2);
success = (1 == res);
if (0 == res && triesMade > 2) {
pinReset(); // if it's unresponsive, reset
delay(100); // a short delay to allow it to come back up TODO-optimize this
}
triesMade ++;
}
return success;
@ -936,6 +966,7 @@ public:
protected:
int16_t guardTime;
int8_t resetPin;
XBeeType beeType;
GsmClient* sockets[TINY_GSM_MUX_COUNT];
};


Loading…
Cancel
Save