Browse Source

Add TinyGsmDecodeHex*bit

v_master
Volodymyr Shymanskyy 7 years ago
parent
commit
4e6620a925
1 changed files with 60 additions and 0 deletions
  1. +60
    -0
      TinyGsmCommon.h

+ 60
- 0
TinyGsmCommon.h View File

@ -93,6 +93,7 @@ uint32_t TinyGsmAutoBaud(T& SerialAT)
return 0;
}
static inline
IPAddress TinyGsmIpFromString(const String& strIP) {
int Parts[4] = {0,0,0,0};
int Part = 0;
@ -108,4 +109,63 @@ IPAddress TinyGsmIpFromString(const String& strIP) {
return IPAddress(Parts[0], Parts[1], Parts[2], Parts[3]);
}
static inline
String TinyGsmDecodeHex7bit(String &instr) {
String result;
byte reminder = 0;
int bitstate = 7;
for (unsigned i=0; i<instr.length(); i+=2) {
char buf[4] = { 0, };
buf[0] = instr[i];
buf[1] = instr[i+1];
byte b = strtol(buf, NULL, 16);
byte bb = b << (7 - bitstate);
char c = (bb + reminder) & 0x7F;
result += c;
reminder = b >> bitstate;
bitstate--;
if (bitstate == 0) {
char c = reminder;
result += c;
reminder = 0;
bitstate = 7;
}
}
return result;
}
static inline
String TinyGsmDecodeHex8bit(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 inline
String TinyGsmDecodeHex16bit(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;
}
#endif

Loading…
Cancel
Save