Browse Source

decodeHex16bit support for sendUSSD

v_master
Volodymyr Shymanskyy 7 years ago
parent
commit
16b6c853fe
2 changed files with 72 additions and 8 deletions
  1. +26
    -3
      TinyGsmClientA6.h
  2. +46
    -5
      TinyGsmClientSIM800.h

+ 26
- 3
TinyGsmClientA6.h View File

@ -446,7 +446,9 @@ public:
*/
String sendUSSD(const String& code) {
sendAT(GF("+CSCS=HEX"));
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CSCS=\"HEX\""));
waitResponse();
sendAT(GF("+CUSD=1,\""), code, GF("\",15"));
if (waitResponse(10000L) != 1) {
@ -462,6 +464,8 @@ public:
if (dcs == 15) {
return decodeHex7bit(hex);
} else if (dcs == 72) {
return decodeHex16bit(hex);
} else {
return hex;
}
@ -539,8 +543,8 @@ private:
return len;
}
bool modemGetConnected(uint8_t mux) { //TODO mux?
sendAT(GF("+CIPSTATUS"));
bool modemGetConnected(uint8_t mux) {
sendAT(GF("+CIPSTATUS")); //TODO mux?
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
waitResponse();
return 1 == res;
@ -571,6 +575,25 @@ private:
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 */


+ 46
- 5
TinyGsmClientSIM800.h View File

@ -257,7 +257,7 @@ public:
return "";
}
res.replace(GSM_NL "OK" GSM_NL, "");
res.replace(GSM_NL, "");
res.replace(GSM_NL, " ");
res.trim();
return res;
}
@ -537,7 +537,9 @@ public:
*/
String sendUSSD(const String& code) {
sendAT(GF("+CSCS=\"8859-1\""));
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CSCS=\"HEX\""));
waitResponse();
sendAT(GF("+CUSD=1,\""), code, GF("\""));
if (waitResponse() != 1) {
@ -547,9 +549,17 @@ public:
return "";
}
stream.readStringUntil('"');
String res = stream.readStringUntil('"');
stream.readStringUntil('\n');
return res;
String hex = stream.readStringUntil('"');
stream.readStringUntil(',');
int dcs = stream.readStringUntil('\n').toInt();
if (dcs == 15) {
return decodeHex8bit(hex);
} else if (dcs == 72) {
return decodeHex16bit(hex);
} else {
return hex;
}
}
bool sendSMS(const String& number, const String& text) {
@ -717,6 +727,37 @@ private:
return 1 == 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 */


Loading…
Cancel
Save