mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	poweroff, localIP, sendUSSD support
This commit is contained in:
		@@ -233,7 +233,7 @@ public:
 | 
			
		||||
      return "";
 | 
			
		||||
    }
 | 
			
		||||
    res.replace(GSM_NL "OK" GSM_NL, "");
 | 
			
		||||
    res.replace(GSM_NL, "");
 | 
			
		||||
    res.replace(GSM_NL, " ");
 | 
			
		||||
    res.trim();
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
@@ -255,7 +255,10 @@ public:
 | 
			
		||||
    return init();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool poweroff() TINY_GSM_ATTR_NOT_IMPLEMENTED;
 | 
			
		||||
  bool poweroff() {
 | 
			
		||||
    sendAT(GF("+CPWROFF"));
 | 
			
		||||
    return waitResponse(3000L) == 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * SIM card functions
 | 
			
		||||
@@ -397,7 +400,17 @@ public:
 | 
			
		||||
    return waitResponse(60000L) == 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  String getLocalIP() TINY_GSM_ATTR_NOT_IMPLEMENTED;
 | 
			
		||||
  String getLocalIP() {
 | 
			
		||||
    sendAT(GF("+XIIC?"));
 | 
			
		||||
    if (waitResponse(GF(GSM_NL "+XIIC:")) != 1) {
 | 
			
		||||
      return "";
 | 
			
		||||
    }
 | 
			
		||||
    stream.readStringUntil(',');
 | 
			
		||||
    String res = stream.readStringUntil('\n');
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    res.trim();
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  IPAddress localIP() {
 | 
			
		||||
    IPAddress res;
 | 
			
		||||
@@ -423,10 +436,35 @@ public:
 | 
			
		||||
   * Messaging functions
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  void sendUSSD() TINY_GSM_ATTR_NOT_IMPLEMENTED;
 | 
			
		||||
  String sendUSSD(const String& code) {
 | 
			
		||||
    sendAT(GF("+CMGF=1"));
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    sendAT(GF("+CSCS=\"HEX\""));
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    sendAT(GF("D"), code);
 | 
			
		||||
    if (waitResponse(10000L, GF(GSM_NL "+CUSD:")) != 1) {
 | 
			
		||||
      return "";
 | 
			
		||||
    }
 | 
			
		||||
    stream.readStringUntil('"');
 | 
			
		||||
    String hex = stream.readStringUntil('"');
 | 
			
		||||
    stream.readStringUntil(',');
 | 
			
		||||
    int dcs = stream.readStringUntil('\n').toInt();
 | 
			
		||||
 | 
			
		||||
    if (waitResponse() != 1) {
 | 
			
		||||
      return "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (dcs == 15) {
 | 
			
		||||
      return decodeHex8bit(hex);
 | 
			
		||||
    } else if (dcs == 72) {
 | 
			
		||||
      return decodeHex16bit(hex);
 | 
			
		||||
    } else {
 | 
			
		||||
      return hex;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool sendSMS(const String& number, const String& text) {
 | 
			
		||||
    sendAT(GF("+CSCS=\"gsm\""));
 | 
			
		||||
    sendAT(GF("+CSCS=\"GSM\""));
 | 
			
		||||
    waitResponse();
 | 
			
		||||
    sendAT(GF("+CMGF=1"));
 | 
			
		||||
    waitResponse();
 | 
			
		||||
@@ -440,6 +478,8 @@ public:
 | 
			
		||||
    return waitResponse(60000L) == 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool sendSMS_UTF16(const String& number, const void* text, size_t len)
 | 
			
		||||
  TINY_GSM_ATTR_NOT_AVAILABLE;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Location functions
 | 
			
		||||
@@ -510,6 +550,37 @@ private:
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static String decodeHex8bit(String &instr) {
 | 
			
		||||
    String result;
 | 
			
		||||
    for (unsigned i=0; i<instr.length(); i+=2) {
 | 
			
		||||
      char buf[4] = { 0, };
 | 
			
		||||
      buf[0] = instr[i];
 | 
			
		||||
      buf[1] = instr[i+1];
 | 
			
		||||
      char b = strtol(buf, NULL, 16);
 | 
			
		||||
      result += b;
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static String decodeHex16bit(String &instr) {
 | 
			
		||||
    String result;
 | 
			
		||||
    for (unsigned i=0; i<instr.length(); i+=4) {
 | 
			
		||||
      char buf[4] = { 0, };
 | 
			
		||||
      buf[0] = instr[i];
 | 
			
		||||
      buf[1] = instr[i+1];
 | 
			
		||||
      char b = strtol(buf, NULL, 16);
 | 
			
		||||
      if (b) { // If high byte is non-zero, we can't handle it ;(
 | 
			
		||||
        b = '?';
 | 
			
		||||
      } else {
 | 
			
		||||
        buf[0] = instr[i+2];
 | 
			
		||||
        buf[1] = instr[i+3];
 | 
			
		||||
        b = strtol(buf, NULL, 16);
 | 
			
		||||
      }
 | 
			
		||||
      result += b;
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
  /* Utilities */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user