Added XBee set baud and more graceful reset
This commit is contained in:
		@@ -12,7 +12,7 @@
 | 
			
		||||
// #define TINY_GSM_DEBUG Serial
 | 
			
		||||
 | 
			
		||||
#if !defined(TINY_GSM_RX_BUFFER)
 | 
			
		||||
  #define TINY_GSM_RX_BUFFER 256
 | 
			
		||||
  #define TINY_GSM_RX_BUFFER 64
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define TINY_GSM_MUX_COUNT 1  // Multi-plexing isn't supported using command mode
 | 
			
		||||
@@ -218,11 +218,13 @@ public:
 | 
			
		||||
    if (!commandMode()) return false;
 | 
			
		||||
 | 
			
		||||
    sendAT(GF("AP0"));  // Put in transparent mode
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    writeChanges();
 | 
			
		||||
    bool ret_val = waitResponse() == 1;
 | 
			
		||||
    ret_val &= writeChanges();
 | 
			
		||||
 | 
			
		||||
    sendAT(GF("GT64")); // shorten the guard time to 100ms
 | 
			
		||||
    if (1 == waitResponse() && writeChanges()) guardTime = 125;
 | 
			
		||||
    ret_val &= waitResponse();
 | 
			
		||||
    ret_val &= writeChanges();
 | 
			
		||||
    if (ret_val) guardTime = 125;
 | 
			
		||||
 | 
			
		||||
    sendAT(GF("HS"));  // Get the "Hardware Series"; 0x601 for S6B (Wifi)
 | 
			
		||||
    int res = waitResponse(GF("601"));
 | 
			
		||||
@@ -230,7 +232,32 @@ public:
 | 
			
		||||
    else beeType = CELL;
 | 
			
		||||
 | 
			
		||||
    exitCommand();
 | 
			
		||||
    return true;
 | 
			
		||||
    return ret_val;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setBaud(unsigned long baud) {
 | 
			
		||||
    if (!commandMode()) return;
 | 
			
		||||
    switch(baud)
 | 
			
		||||
    {
 | 
			
		||||
      case 2400: sendAT(GF("BD1")); break;
 | 
			
		||||
      case 4800: sendAT(GF("BD2")); break;
 | 
			
		||||
      case 9600: sendAT(GF("BD3")); break;
 | 
			
		||||
      case 19200: sendAT(GF("BD4")); break;
 | 
			
		||||
      case 38400: sendAT(GF("BD5")); break;
 | 
			
		||||
      case 57600: sendAT(GF("BD6")); break;
 | 
			
		||||
      case 115200: sendAT(GF("BD7")); break;
 | 
			
		||||
      case 230400: sendAT(GF("BD8")); break;
 | 
			
		||||
      case 460800: sendAT(GF("BD9")); break;
 | 
			
		||||
      case 921600: sendAT(GF("BDA")); break;
 | 
			
		||||
      default: {
 | 
			
		||||
          DBG(GF("Specified baud rate is unsupported! Setting to 9600 baud."));
 | 
			
		||||
          sendAT(GF("BD3")); // Set to default of 9600
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    writeChanges();
 | 
			
		||||
    exitCommand();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool testAT(unsigned long timeout = 10000L) {
 | 
			
		||||
@@ -254,7 +281,7 @@ public:
 | 
			
		||||
    if (!commandMode()) return false;  // Return immediately
 | 
			
		||||
    sendAT(GF("RE"));
 | 
			
		||||
    bool ret_val = waitResponse() == 1;
 | 
			
		||||
    writeChanges();
 | 
			
		||||
    ret_val &= writeChanges();
 | 
			
		||||
    exitCommand();
 | 
			
		||||
    return ret_val;
 | 
			
		||||
  }
 | 
			
		||||
@@ -270,6 +297,10 @@ public:
 | 
			
		||||
 | 
			
		||||
  bool restart() {
 | 
			
		||||
    if (!commandMode()) return false;  // Return immediately
 | 
			
		||||
    sendAT(GF("AM1"));  // Digi suggests putting into airplane mode before restarting
 | 
			
		||||
                       // This allows the sockets and connections to close cleanly
 | 
			
		||||
    writeChanges();
 | 
			
		||||
    if (waitResponse() != 1) goto fail;
 | 
			
		||||
    sendAT(GF("FR"));
 | 
			
		||||
    if (waitResponse() != 1) goto fail;
 | 
			
		||||
 | 
			
		||||
@@ -278,6 +309,8 @@ public:
 | 
			
		||||
    // Wait until reboot complete and responds to command mode call again
 | 
			
		||||
    for (unsigned long start = millis(); millis() - start < 60000L; ) {
 | 
			
		||||
      if (commandMode(1)) {
 | 
			
		||||
        sendAT(GF("AM0"));  // Turn off airplane mode
 | 
			
		||||
        writeChanges();
 | 
			
		||||
        exitCommand();
 | 
			
		||||
        delay(250);  // wait a litle before trying again
 | 
			
		||||
      }
 | 
			
		||||
@@ -300,6 +333,7 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
    else if (!maintainAssociation){
 | 
			
		||||
        sendAT(GF("SO"),1);  // For lowest power, dissassociated deep sleep
 | 
			
		||||
                             // Not supported by all modules, will return "ERROR"
 | 
			
		||||
        waitResponse();
 | 
			
		||||
    }
 | 
			
		||||
    writeChanges();
 | 
			
		||||
@@ -310,9 +344,7 @@ public:
 | 
			
		||||
   * SIM card functions
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  bool simUnlock(const char *pin) {  // Not supported
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  bool simUnlock(const char *pin) TINY_GSM_ATTR_NOT_AVAILABLE; // Not supported
 | 
			
		||||
 | 
			
		||||
  String getSimCCID() {
 | 
			
		||||
    if (!commandMode()) return "";  // Return immediately
 | 
			
		||||
@@ -330,9 +362,7 @@ public:
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SimStatus getSimStatus(unsigned long timeout = 10000L) {
 | 
			
		||||
    return SIM_READY;  // unsupported
 | 
			
		||||
  }
 | 
			
		||||
  SimStatus getSimStatus(unsigned long timeout) TINY_GSM_ATTR_NOT_AVAILABLE; // Not supported
 | 
			
		||||
 | 
			
		||||
  RegStatus getRegistrationStatus() {
 | 
			
		||||
    if (!commandMode()) return REG_UNREGISTERED;  // Return immediately
 | 
			
		||||
@@ -495,10 +525,12 @@ fail:
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
  int modemConnect(const char* host, uint16_t port, uint8_t mux = 0, bool ssl = false) {
 | 
			
		||||
  bool modemConnect(const char* host, uint16_t port, uint8_t mux = 0, bool ssl = false) {
 | 
			
		||||
    String strIP; strIP.reserve(16);
 | 
			
		||||
    unsigned long startMillis = millis();
 | 
			
		||||
    bool gotIP = false;
 | 
			
		||||
    // XBee's require a numeric IP address for connection, but do provide the
 | 
			
		||||
    // functionality to look up the IP address from a fully qualified domain name
 | 
			
		||||
    while (!gotIP && millis() - startMillis < 30000)  // the lookup can take a while
 | 
			
		||||
    {
 | 
			
		||||
      sendAT(GF("LA"), host);
 | 
			
		||||
@@ -514,7 +546,8 @@ private:
 | 
			
		||||
    else return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  int modemConnect(IPAddress ip, uint16_t port, uint8_t mux = 0, bool ssl = false) {
 | 
			
		||||
  bool modemConnect(IPAddress ip, uint16_t port, uint8_t mux = 0, bool ssl = false) {
 | 
			
		||||
    bool success = true;
 | 
			
		||||
    String host; host.reserve(16);
 | 
			
		||||
    host += ip[0];
 | 
			
		||||
    host += ".";
 | 
			
		||||
@@ -524,17 +557,17 @@ private:
 | 
			
		||||
    host += ".";
 | 
			
		||||
    host += ip[3];
 | 
			
		||||
    if (ssl) {
 | 
			
		||||
      sendAT(GF("IP"), 4);  // Put in TCP mode
 | 
			
		||||
      waitResponse();
 | 
			
		||||
      sendAT(GF("IP"), 4);  // Put in SSL over TCP communication mode
 | 
			
		||||
      success &= (1 == waitResponse());
 | 
			
		||||
    } else {
 | 
			
		||||
      sendAT(GF("IP"), 1);  // Put in TCP mode
 | 
			
		||||
      waitResponse();
 | 
			
		||||
      success &= (1 == waitResponse());
 | 
			
		||||
    }
 | 
			
		||||
    sendAT(GF("DL"), host);  // Set the "Destination Address Low"
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    success &= (1 == waitResponse());
 | 
			
		||||
    sendAT(GF("DE"), String(port, HEX));  // Set the destination port
 | 
			
		||||
    int rsp = waitResponse();
 | 
			
		||||
    return rsp;
 | 
			
		||||
    success &= (1 == waitResponse());
 | 
			
		||||
    return success;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  int modemSend(const void* buff, size_t len, uint8_t mux = 0) {
 | 
			
		||||
@@ -665,7 +698,7 @@ finish:
 | 
			
		||||
    if (!index) {
 | 
			
		||||
      data.trim();
 | 
			
		||||
      data.replace(GSM_NL GSM_NL, GSM_NL);
 | 
			
		||||
      data.replace(GSM_NL, "\r\n" "    ");
 | 
			
		||||
      data.replace(GSM_NL, "\r\n    ");
 | 
			
		||||
      if (data.length()) {
 | 
			
		||||
        DBG("### Unhandled:", data, "\r\n");
 | 
			
		||||
      } else {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user