Browse Source

IT WORKS!

v_master
SRGDamia1 7 years ago
parent
commit
4522c31ee2
1 changed files with 36 additions and 55 deletions
  1. +36
    -55
      TinyGsmClientXBee.h

+ 36
- 55
TinyGsmClientXBee.h View File

@ -90,7 +90,7 @@ public:
return sock_connected;
}
virtual void stop() {
virtual void stop() { // Not supported
sock_connected = false;
}
@ -106,38 +106,16 @@ public:
virtual int available() {
TINY_GSM_YIELD();
if (!rx.size()) {
at->maintain();
}
return rx.size();
return at->stream.available();
}
virtual int read(uint8_t *buf, size_t size) {
TINY_GSM_YIELD();
size_t cnt = 0;
while (cnt < size) {
size_t chunk = TinyGsmMin(size-cnt, rx.size());
if (chunk > 0) {
rx.get(buf, chunk);
buf += chunk;
cnt += chunk;
continue;
}
// TODO: Read directly into user buffer?
if (!rx.size()) {
at->maintain();
//break;
}
}
return cnt;
return available();
}
virtual int read() {
uint8_t c;
if (read(&c, 1) == 1) {
return c;
}
return -1;
TINY_GSM_YIELD();
return at->stream.read();
}
virtual int peek() { return at->stream.peek(); }
@ -167,7 +145,15 @@ public:
}
bool init() {
factoryDefault();
guardTime = 1100;
commandMode();
sendAT(GF("AP0")); // Put in transparent mode
waitResponse();
sendAT(GF("GTFA")); // shorten the guard time to 250ms
waitResponse();
writeChanges();
exitCommand();
guardTime = 300;
return true;
}
@ -222,7 +208,7 @@ public:
String getSimCCID() {
commandMode();
sendAT(GF("S#"));
String res = streamReadUntil('\r');
String res = streamReadUntil('\r'); // Does not send an OK, just the result
exitCommand();
return res;
}
@ -230,7 +216,7 @@ public:
String getIMEI() {
commandMode();
sendAT(GF("IM"));
String res = streamReadUntil('\r');
String res = streamReadUntil('\r'); // Does not send an OK, just the result
exitCommand();
return res;
}
@ -238,7 +224,7 @@ public:
int getSignalQuality() {
commandMode();
sendAT(GF("DB"));
char buf[4] = { 0, };
char buf[4] = { 0, }; // Does not send an OK, just the result
buf[0] = streamRead();
buf[1] = streamRead();
buf[2] = streamRead();
@ -255,7 +241,7 @@ public:
RegStatus getRegistrationStatus() {
commandMode();
sendAT(GF("AI"));
String res = streamReadUntil('\r');
String res = streamReadUntil('\r'); // Does not send an OK, just the result
exitCommand();
if(res == GF("0x00"))
@ -277,7 +263,7 @@ public:
String getOperator() {
commandMode();
sendAT(GF("MN"));
String res = streamReadUntil('\r');
String res = streamReadUntil('\r'); // Does not send an OK, just the result
exitCommand();
return res;
}
@ -287,10 +273,9 @@ public:
for (unsigned long start = millis(); millis() - start < timeout; ) {
commandMode();
sendAT(GF("AI"));
waitResponse();
String res = streamReadUntil('\r');
String res = streamReadUntil('\r'); // Does not send an OK, just the result
exitCommand();
if (res == 0) {
if (res == GF("0")) {
return true;
}
delay(1000);
@ -309,6 +294,8 @@ public:
waitResponse();
sendAT(GF("IP"), 1); // Put in TCP mode
waitResponse();
sendAT(GF("EE"), 2); // Set security to WPA2
waitResponse();
sendAT(GF("ID"), ssid);
if (waitResponse() != 1) {
@ -338,20 +325,15 @@ public:
* GPRS functions
*/
bool gprsConnect(const char* apn, const char* user = "", const char* pw = "") {
commandMode();
sendAT(GF("AP"), 0); // Put in transparent mode
waitResponse();
sendAT(GF("IP"), 1); // Put in TCP mode
waitResponse();
sendAT(GF("AN"), apn); // Set the APN
waitResponse();
writeChanges();
exitCommand();
return true;
}
@ -371,20 +353,18 @@ public:
bool sendSMS(const String& number, const String& text) {
commandMode();
sendAT(GF("AP"), 0);
waitResponse();
sendAT(GF("IP"), 2);
sendAT(GF("AP"), 0); // Put in transparent mode
waitResponse();
sendAT(GF("PH"), number);
sendAT(GF("IP"), 2); // Put in text messaging mode
waitResponse();
sendAT(GF("TD D"));
sendAT(GF("PH"), number); // Set the phone number
waitResponse();
sendAT(GF("TD D"));
sendAT(GF("TDD")); // Set the text delimiter to the standard 0x0D (carriabe return)
waitResponse();
writeChanges();
exitCommand();
stream.print(text);
stream.write((char)0x0D);
stream.write((char)0x0D); // close off with the carriage return
return true;
}
@ -394,7 +374,7 @@ public:
streamWrite("AT", cmd..., GSM_NL);
stream.flush();
TINY_GSM_YIELD();
DBG("\r\n", ">>> AT ", cmd..., "\r\n");
DBG(">>> AT ", cmd..., "\r\n");
}
// TODO: Optimize this!
@ -447,9 +427,9 @@ public:
else {
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("\r\n", "<<< ", data);
DBG("<<< ", data, "\r\n");
}
}
// if (gotData) {
@ -532,17 +512,17 @@ private:
String streamReadUntil(char c) {
String return_string = stream.readStringUntil(c);
return_string.trim();
if (String(c) == GSM_NL || String(c) == "\n"){
DBG(return_string, c, " ");
if (String(c) == GSM_NL){
DBG(return_string, "\r\n");
} else DBG(return_string, c);
return return_string;
}
bool commandMode(void){
delay(1000); // cannot send anything for 1 second before entering command mode
delay(guardTime); // cannot send anything for 1 second before entering command mode
streamWrite(GF("+++")); // enter command mode
DBG("\r\n+++\r\n");
waitResponse(1100);
waitResponse(guardTime);
return 1 == waitResponse(1100); // wait another second for an "OK\r"
}
@ -559,6 +539,7 @@ private:
}
private:
int guardTime;
Stream& stream;
GsmClient* sockets[1];
};


Loading…
Cancel
Save