Old backup

This commit is contained in:
eKa 2020-01-24 22:32:44 +05:00
parent 8c79fce887
commit e25e9fdcdb
4 changed files with 363 additions and 1005 deletions

View File

@ -35,7 +35,8 @@
GPRS* GPRS::inst; GPRS* GPRS::inst;
GPRS::GPRS(Stream& serial, uint8_t pkPin) { GPRS::GPRS(Stream& serial, uint8_t pkPin)
{
_pkPin = pkPin; _pkPin = pkPin;
inst = this; inst = this;
@ -44,13 +45,16 @@ GPRS::GPRS(Stream& serial, uint8_t pkPin) {
sim900_init(stream); sim900_init(stream);
} }
bool GPRS::init(void) { bool GPRS::init(void)
{
if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD)) if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD))
return false; return false;
if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD)) if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD))
return false; return false;
if (!checkSIMStatus()) if (!checkSIMStatus())
return false; return false;
@ -74,7 +78,7 @@ bool GPRS::init(void) {
} }
bool GPRS::checkPowerUp(void) { bool GPRS::checkPowerUp(void) {
return sim900_check_with_cmd("AT\r\n","OK\r\n", CMD); return sim900_check_with_cmd("AT\r\n","OK\r\n", CMD);
} }
// power Up GPRS Shield // power Up GPRS Shield
@ -101,7 +105,8 @@ void GPRS::reset() {
powerOn(); powerOn();
} }
bool GPRS::checkSIMStatus(void) { bool GPRS::checkSIMStatus(void)
{
char gprsBuffer[32]; char gprsBuffer[32];
byte count = 0; byte count = 0;
sim900_clean_buffer(gprsBuffer,32); sim900_clean_buffer(gprsBuffer,32);
@ -120,7 +125,8 @@ bool GPRS::checkSIMStatus(void) {
return true; return true;
} }
bool GPRS::sendSMS(const char *number, const char *data) { bool GPRS::sendSMS(char *number, char *data)
{
// Set message mode to ASCII // Set message mode to ASCII
if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) { if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) {
return false; return false;
@ -138,11 +144,11 @@ bool GPRS::sendSMS(const char *number, const char *data) {
sim900_send_cmd(data); sim900_send_cmd(data);
delay(500); delay(500);
sim900_send_End_Mark(); sim900_send_End_Mark();
return true;
return sim900_wait_for_resp("OK\r\n", CMD, 2);
} }
char GPRS::isSMSunread() { char GPRS::isSMSunread()
{
char gprsBuffer[48]; //48 is enough to see +CMGL: char gprsBuffer[48]; //48 is enough to see +CMGL:
char *s; char *s;
@ -170,7 +176,7 @@ char GPRS::isSMSunread() {
*/ */
sim900_clean_buffer(gprsBuffer,31); sim900_clean_buffer(gprsBuffer,31);
sim900_read_buffer(gprsBuffer, 30, DEFAULT_TIMEOUT); sim900_read_buffer(gprsBuffer,30,DEFAULT_TIMEOUT);
//Serial.print("Buffer isSMSunread: ");Serial.println(gprsBuffer); //Serial.print("Buffer isSMSunread: ");Serial.println(gprsBuffer);
if(NULL != ( s = strstr(gprsBuffer,"OK"))) { if(NULL != ( s = strstr(gprsBuffer,"OK"))) {
@ -229,149 +235,23 @@ bool GPRS::readSMS(int messageIndex, char *message, byte length) {
return false; return false;
} }
byte GPRS::getEvent(char *message, char *phone, char *datetime, char *gprsBuffer, byte size, bool check) { bool GPRS::getSMS(char *message, char *phone, char *datetime) {
int len;
byte i = 0;
char *s, *p1, *p2;
// Read buffer
sim900_clean_buffer(gprsBuffer, size);
sim900_read_buffer(gprsBuffer, size - 1);
len = strlen(gprsBuffer);
// Get SMS
s = strstr(gprsBuffer,"+CMT: ");
if (s != NULL) {
// Extract phone number string
p1 = strstr(gprsBuffer, "\"+");
p2 = p1 + 1; //First phone number character
p1 = strstr((char *)(p2), "\"");
if (p1 != NULL) {
i = 0;
while (p2 < p1) {
phone[i++] = *(p2++);
}
phone[i] = '\0';
}
// Extract date time string
p1 = strstr((char *)(p2), ",");
p2 = p1 + 1;
p1 = strstr((char *)(p2), ",");
p2 = p1 + 2; //First date time character
p1 = strstr((char *)(p2), "\"");
if (p1 != NULL) {
i = 0;
while (p2 < p1) {
datetime[i++] = *(p2++);
}
datetime[i] = '\0';
}
// Extract message
p2 = strstr(gprsBuffer, "\r\n");
p2 = p2 + 2;
p1 = strstr(p2, "\r\n");
if (p1 != NULL) {
i = 0;
p1 = p1 + 2; //First message character
while((*p1 != '\r') && (i < len - 1)) {
message[i++] = *(p1++);
}
message[i] = '\0';
}
return SMS;
}
// Get Call
s = strstr(gprsBuffer,"+CLIP: ");
if (s != NULL) {
// Extract phone number string
p1 = strstr(gprsBuffer, "\"+");
p2 = p1 + 1; //First phone number character
p1 = strstr((char *)(p2), "\"");
if (p1 != NULL) {
i = 0;
while (p2 < p1) {
phone[i++] = *(p2++);
}
phone[i] = '\0';
}
return CALL;
}
// Get outgoing call
s = strstr(gprsBuffer,"+COLP: ");
if (s != NULL) {
// Extract phone number string
p1 = strstr(gprsBuffer, "\"+");
p2 = p1 + 1; //First phone number character
p1 = strstr((char *)(p2), "\"");
if (p1 != NULL) {
i = 0;
while (p2 < p1) {
phone[i++] = *(p2++);
}
phone[i] = '\0';
}
return ANSWER;
}
// Get BUSY
s = strstr(gprsBuffer,"BUSY");
if (s != NULL) {
return BUSY;
}
// Get NO CARRIER
s = strstr(gprsBuffer,"NO CARRIER");
if (s != NULL) {
return NO_CARRIER;
}
// Get NO ANSWER
s = strstr(gprsBuffer,"NO ANSWER");
if (s != NULL) {
return NO_ANSWER;
}
// Check modem
if (check) {
if (!sim900_check_with_cmd("AT\r\n","OK\r\n", CMD)) return ERR;
}
return NONE;
}
bool GPRS::getSMS(char *message, char *phone, char *datetime, char *gprsBuffer, byte size) {
/* Response is like: /* Response is like:
+CMT: "+79772941911","","15/12/15,01:51:24+12" +CMT: "+79772941911","","15/12/15,01:51:24+12"
SMS text here SMS text here
*/ */
//if(!sim900_check_with_cmd("","+CMT: ", CMD, 3)) return false; if(!sim900_check_with_cmd("","+CMT: ",CMD)) return false;
if(!sim900_wait_for_resp("+CMT: ", CMD, 1)) return false;
byte i = 0; byte i = 0;
//char gprsBuffer[80 + 160]; char gprsBuffer[80 + 160];
char *p1, *p2; char *p1, *p2;
sim900_clean_buffer(gprsBuffer, size);//sizeof(gprsBuffer)); sim900_clean_buffer(gprsBuffer,sizeof(gprsBuffer));
sim900_read_buffer(gprsBuffer, size - 1);//sizeof(gprsBuffer)); sim900_read_buffer(gprsBuffer,sizeof(gprsBuffer));
int len = strlen(gprsBuffer); int len = strlen(gprsBuffer);
//int len = sizeof(message);
//byte len = 160;
// Serial.print("Buff len: ");
// Serial.println(len);
// Serial.print("Buff: ");
// Serial.println(gprsBuffer);
// Serial.println("----- buffer -----"); // Serial.println("----- buffer -----");
// Serial.println(gprsBuffer); // Serial.println(gprsBuffer);
// Serial.println("^^^^^ buffer ^^^^^"); // Serial.println("^^^^^ buffer ^^^^^");
@ -443,9 +323,9 @@ void GPRS::answer(void)
sim900_send_cmd("ATA\r\n"); sim900_send_cmd("ATA\r\n");
} }
bool GPRS::ifcallNow(byte timeout) bool GPRS::ifcallNow(void)
{ {
return sim900_check_with_cmd("","RING\r\n",CMD, timeout); return sim900_check_with_cmd("","RING\r\n",CMD);
} }
bool GPRS::ifcallEnd(void) bool GPRS::ifcallEnd(void)
@ -468,9 +348,9 @@ bool GPRS::disableCLIPring(void)
return sim900_check_with_cmd("AT+CLIP=0\r\n","OK\r\n",CMD); return sim900_check_with_cmd("AT+CLIP=0\r\n","OK\r\n",CMD);
} }
bool GPRS::isCallActive(char *number, char *gprsBuffer) bool GPRS::isCallActive(char *number)
{ {
//char gprsBuffer[46]; //46 is enough to see +CPAS: and CLCC: char gprsBuffer[46]; //46 is enough to see +CPAS: and CLCC:
char *p, *s; char *p, *s;
int i = 0; int i = 0;
@ -490,12 +370,11 @@ bool GPRS::isCallActive(char *number, char *gprsBuffer)
OK OK
*/ */
sim900_clean_buffer(gprsBuffer, 46); sim900_clean_buffer(gprsBuffer,29);
sim900_read_buffer(gprsBuffer, 45); sim900_read_buffer(gprsBuffer,27);
//HACERR cuando haga lo de esperar a OK no me haría falta esto //HACERR cuando haga lo de esperar a OK no me haría falta esto
//We are going to flush serial data until OK is recieved //We are going to flush serial data until OK is recieved
//Serial.println("Wait OK"); sim900_wait_for_resp("OK\r\n", CMD);
//sim900_wait_for_resp("OK\r\n", CMD);
//Serial.print("Buffer isCallActive 1: ");Serial.println(gprsBuffer); //Serial.print("Buffer isCallActive 1: ");Serial.println(gprsBuffer);
if(NULL != ( s = strstr(gprsBuffer,"+CPAS:"))) { if(NULL != ( s = strstr(gprsBuffer,"+CPAS:"))) {
s = s + 7; s = s + 7;
@ -513,8 +392,8 @@ bool GPRS::isCallActive(char *number, char *gprsBuffer)
OK OK
*/ */
sim900_clean_buffer(gprsBuffer, 46); sim900_clean_buffer(gprsBuffer,46);
sim900_read_buffer(gprsBuffer, 45); sim900_read_buffer(gprsBuffer,45);
//Serial.print("Buffer isCallActive 2: ");Serial.println(gprsBuffer); //Serial.print("Buffer isCallActive 2: ");Serial.println(gprsBuffer);
if(NULL != ( s = strstr(gprsBuffer,"+CLCC:"))) { if(NULL != ( s = strstr(gprsBuffer,"+CLCC:"))) {
//There is at least one CALL ACTIVE, get number //There is at least one CALL ACTIVE, get number
@ -552,22 +431,22 @@ bool GPRS::getDateTime(char *buffer) {
sim900_read_buffer(gprsBuffer,43,DEFAULT_TIMEOUT); sim900_read_buffer(gprsBuffer,43,DEFAULT_TIMEOUT);
if(NULL != ( s = strstr(gprsBuffer,"+CCLK:"))) { if(NULL != ( s = strstr(gprsBuffer,"+CCLK:"))) {
s = strstr((char *)(s),"\""); s = strstr((char *)(s),"\"");
s = s + 1; //We are in the first phone number character s = s + 1; //We are in the first phone number character
p = strstr((char *)(s),"\""); //p is last character """ p = strstr((char *)(s),"\""); //p is last character """
if (NULL != s) { if (NULL != s) {
i = 0; i = 0;
while (s < p) { while (s < p) {
buffer[i++] = *(s++); buffer[i++] = *(s++);
}
buffer[i] = '\0';
} }
buffer[i] = '\0'; //We are going to flush serial data until OK is recieved
return sim900_wait_for_resp("OK\r\n", CMD);
} }
//We are going to flush serial data until OK is recieved return false;
return sim900_wait_for_resp("OK\r\n", CMD);
} }
return false;
}
byte GPRS::getSignalStrength() { byte GPRS::getSignalStrength() {
//AT+CSQ: 00,00 --> 13 + CRLF = 15 //AT+CSQ: 00,00 --> 13 + CRLF = 15
// --> CRLF = 2 // --> CRLF = 2
//OK --> 2 + CRLF = 4 //OK --> 2 + CRLF = 4
@ -588,10 +467,11 @@ byte GPRS::getSignalStrength() {
//Here is where we ask for APN configuration, with F() so we can save MEMORY //Here is where we ask for APN configuration, with F() so we can save MEMORY
//bool GPRS::join(const __FlashStringHelper *apn, const __FlashStringHelper *userName, const __FlashStringHelper *passWord) //bool GPRS::join(const __FlashStringHelper *apn, const __FlashStringHelper *userName, const __FlashStringHelper *passWord)
bool GPRS::join(char* apn, char* userName, char* passWord, int timeout) { bool GPRS::join(char* apn, char* userName, char* passWord, int timeout)
byte i; {
char *p, *s; byte i;
char ipAddr[32]; char *p, *s;
char ipAddr[32];
/* if(!sim900_check_with_cmd("AT+CIPSHUT\r\n","SHUT OK\r\n", CMD)) { /* if(!sim900_check_with_cmd("AT+CIPSHUT\r\n","SHUT OK\r\n", CMD)) {
Serial.write("Error = 1\r\n"); Serial.write("Error = 1\r\n");
return false; return false;
@ -659,40 +539,42 @@ bool GPRS::join(char* apn, char* userName, char* passWord, int timeout) {
return false; return false;
} }
void GPRS::disconnect() { void GPRS::disconnect()
{
sim900_send_cmd("AT+CIPSHUT\r\n"); sim900_send_cmd("AT+CIPSHUT\r\n");
} }
bool GPRS::connect(Protocol ptl,const char * host, int port, int timeout) { bool GPRS::connect(Protocol ptl,const char * host, int port, int timeout)
{
//char cmd[64]; //char cmd[64];
char num[4]; char num[4];
char resp[96]; char resp[96];
//sim900_clean_buffer(cmd,64); //sim900_clean_buffer(cmd,64);
if(ptl == TCP) { if(ptl == TCP) {
sim900_send_cmd("AT+CIPSTART=\"TCP\",\""); sim900_send_cmd("AT+CIPSTART=\"TCP\",\"");
sim900_send_cmd(host); sim900_send_cmd(host);
sim900_send_cmd("\","); sim900_send_cmd("\",");
itoa(port, num, 10); itoa(port, num, 10);
sim900_send_cmd(num); sim900_send_cmd(num);
sim900_send_cmd("\r\n"); sim900_send_cmd("\r\n");
// sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",host, port); // sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",host, port);
} else if(ptl == UDP) { } else if(ptl == UDP) {
sim900_send_cmd("AT+CIPSTART=\"UDP\",\""); sim900_send_cmd("AT+CIPSTART=\"UDP\",\"");
sim900_send_cmd(host); sim900_send_cmd(host);
sim900_send_cmd("\","); sim900_send_cmd("\",");
itoa(port, num, 10); itoa(port, num, 10);
sim900_send_cmd(num); sim900_send_cmd(num);
sim900_send_cmd("\r\n"); sim900_send_cmd("\r\n");
// sprintf(cmd, "AT+CIPSTART=\"UDP\",\"%s\",%d\r\n",host, port);
} else {
return false;
}
delay(2000); // sprintf(cmd, "AT+CIPSTART=\"UDP\",\"%s\",%d\r\n",host, port);
} else {
return false;
}
delay(2000);
//sim900_send_cmd(cmd); //sim900_send_cmd(cmd);
sim900_read_buffer(resp,96,timeout); sim900_read_buffer(resp,96,timeout);
//Serial.print("Connect resp: "); Serial.println(resp); //Serial.print("Connect resp: "); Serial.println(resp);
if(NULL != strstr(resp,"CONNECT")) { //ALREADY CONNECT or CONNECT OK if(NULL != strstr(resp,"CONNECT")) { //ALREADY CONNECT or CONNECT OK
@ -702,7 +584,8 @@ bool GPRS::connect(Protocol ptl,const char * host, int port, int timeout) {
} }
//Overload with F() macro to SAVE memory //Overload with F() macro to SAVE memory
bool GPRS::connect(Protocol ptl,const __FlashStringHelper *host, const __FlashStringHelper *port, int timeout) { bool GPRS::connect(Protocol ptl,const __FlashStringHelper *host, const __FlashStringHelper *port, int timeout)
{
//char cmd[64]; //char cmd[64];
char resp[96]; char resp[96];
@ -727,7 +610,8 @@ bool GPRS::connect(Protocol ptl,const __FlashStringHelper *host, const __FlashSt
return false; return false;
} }
bool GPRS::is_connected(void) { bool GPRS::is_connected(void)
{
char resp[96]; char resp[96];
sim900_send_cmd("AT+CIPSTATUS\r\n"); sim900_send_cmd("AT+CIPSTATUS\r\n");
sim900_read_buffer(resp,sizeof(resp),DEFAULT_TIMEOUT); sim900_read_buffer(resp,sizeof(resp),DEFAULT_TIMEOUT);
@ -741,7 +625,8 @@ bool GPRS::is_connected(void) {
} }
} }
bool GPRS::close() { bool GPRS::close()
{
// if not connected, return // if not connected, return
if (!is_connected()) { if (!is_connected()) {
return true; return true;
@ -749,19 +634,23 @@ bool GPRS::close() {
return sim900_check_with_cmd("AT+CIPCLOSE\r\n", "CLOSE OK\r\n", CMD); return sim900_check_with_cmd("AT+CIPCLOSE\r\n", "CLOSE OK\r\n", CMD);
} }
int GPRS::readable(void) { int GPRS::readable(void)
{
return sim900_check_readable(); return sim900_check_readable();
} }
int GPRS::wait_readable(int wait_time) { int GPRS::wait_readable(int wait_time)
{
return sim900_wait_readable(wait_time); return sim900_wait_readable(wait_time);
} }
int GPRS::wait_writeable(int req_size) { int GPRS::wait_writeable(int req_size)
{
return req_size+1; return req_size+1;
} }
int GPRS::send(const char * str, int len) { int GPRS::send(const char * str, int len)
{
//char cmd[32]; //char cmd[32];
char num[4]; char num[4];
if(len > 0){ if(len > 0){
@ -823,7 +712,8 @@ int GPRS::send(const char * str, int len) {
return strlen(buf); return strlen(buf);
} }
uint32_t GPRS::str_to_ip(const char* str) { uint32_t GPRS::str_to_ip(const char* str)
{
uint32_t ip = 0; uint32_t ip = 0;
char* p = (char*)str; char* p = (char*)str;
for(int i = 0; i < 4; i++) { for(int i = 0; i < 4; i++) {
@ -839,17 +729,20 @@ uint32_t GPRS::str_to_ip(const char* str) {
return ip; return ip;
} }
char* GPRS::getIPAddress() { char* GPRS::getIPAddress()
{
//I have already a buffer with ip_string: snprintf(ip_string, sizeof(ip_string), "%d.%d.%d.%d", (_ip>>24)&0xff,(_ip>>16)&0xff,(_ip>>8)&0xff,_ip&0xff); //I have already a buffer with ip_string: snprintf(ip_string, sizeof(ip_string), "%d.%d.%d.%d", (_ip>>24)&0xff,(_ip>>16)&0xff,(_ip>>8)&0xff,_ip&0xff);
return ip_string; return ip_string;
} }
unsigned long GPRS::getIPnumber() { unsigned long GPRS::getIPnumber()
{
return _ip; return _ip;
} }
bool GPRS::controlGPIO(uint8_t index, uint8_t level) { bool GPRS::controlGPIO(uint8_t index, uint8_t level)
char num[4]; {
char num[1];
sim900_send_cmd("AT+SGPIO=0,"); sim900_send_cmd("AT+SGPIO=0,");
itoa(index, num, 10); itoa(index, num, 10);

View File

@ -32,18 +32,6 @@
#ifndef __GPRS_SHIELD_ARDUINO_H__ #ifndef __GPRS_SHIELD_ARDUINO_H__
#define __GPRS_SHIELD_ARDUINO_H__ #define __GPRS_SHIELD_ARDUINO_H__
#define NONE 0
#define SMS 1
#define CALL 2
#define BUSY 3
#define NO_CARRIER 4
#define NO_ANSWER 5
#define ANSWER 6
#define ERR 7
#define CHECK true
#define NO_CHECK false
#include "sim900.h" #include "sim900.h"
/** GPRS class. /** GPRS class.
@ -51,13 +39,14 @@
*/ */
enum Protocol { enum Protocol {
CLOSED = 0, CLOSED = 0,
TCP = 1, TCP = 1,
UDP = 2, UDP = 2,
}; };
class GPRS { class GPRS
public: {
public:
/** Create GPRS instance /** Create GPRS instance
*/ */
@ -100,7 +89,7 @@ class GPRS {
* false on success * false on success
* true on error * true on error
*/ */
bool sendSMS(const char* number, const char* data); bool sendSMS(char* number, char* data);
/** Check if there is any UNREAD SMS: this function DOESN'T change the UNREAD status of the SMS /** Check if there is any UNREAD SMS: this function DOESN'T change the UNREAD status of the SMS
* @returns * @returns
@ -121,8 +110,6 @@ class GPRS {
*/ */
bool readSMS(int messageIndex, char *message, byte length); bool readSMS(int messageIndex, char *message, byte length);
byte getEvent(char *message, char *phone, char *datetime, char *gprsBuffer, byte size, bool check = true);
/** get SMS on the fly, phone and date /** get SMS on the fly, phone and date
* @param message buffer used to get SMS message * @param message buffer used to get SMS message
@ -133,7 +120,7 @@ class GPRS {
* false on error * false on error
*/ */
bool getSMS(char *message, char *phone, char *datetime, char *gprsBuffer, byte size); bool getSMS(char *message, char *phone, char *datetime);
/** delete SMS message on SIM card /** delete SMS message on SIM card
* @param index the index number which SMS message will be delete * @param index the index number which SMS message will be delete
@ -170,7 +157,7 @@ class GPRS {
* true on success * true on success
* false on error * false on error
*/ */
bool ifcallNow(byte timeout = 1); bool ifcallNow(void);
bool ifcallEnd(void); bool ifcallEnd(void);
@ -183,7 +170,7 @@ class GPRS {
* true on success * true on success
* false on error * false on error
*/ */
bool isCallActive(char *number, char *gprsBuffer); bool isCallActive(char *number);
/** get DateTime from SIM900 (see AT command: AT+CLTS=1) as string /** get DateTime from SIM900 (see AT command: AT+CLTS=1) as string
* @param * @param
@ -291,7 +278,7 @@ class GPRS {
*/ */
bool controlGPIO(uint8_t num, uint8_t level); bool controlGPIO(uint8_t num, uint8_t level);
private: private:
bool checkSIMStatus(void); bool checkSIMStatus(void);
uint8_t _pkPin = 9; uint8_t _pkPin = 9;

View File

@ -60,43 +60,42 @@ int sim900_wait_readable (int wait_time)
return dataLen; return dataLen;
} }
void sim900_flush_serial() { void sim900_flush_serial()
while(sim900_check_readable()) { {
char c = serialSIM900->read(); while(sim900_check_readable()){
} char c = serialSIM900->read();
}
} }
void sim900_read_buffer(char *buffer, int count, unsigned int timeout, unsigned int chartimeout) void sim900_read_buffer(char *buffer, int count, unsigned int timeout, unsigned int chartimeout)
{ {
//Serial.println("Read buff"); int i = 0;
int i = 0; unsigned long timerStart, prevChar;
unsigned long timerStart, prevChar; timerStart = millis();
timerStart = millis(); prevChar = 0;
prevChar = 0; while(1) {
while(1) { while (sim900_check_readable()) {
while (sim900_check_readable()) { char c = serialSIM900->read();
char c = serialSIM900->read(); prevChar = millis();
//Serial.print(c); buffer[i++] = c;
prevChar = millis(); if(i >= count)break;
buffer[i++] = c; }
if(i >= count) break; if(i >= count)break;
if ((unsigned long) (millis() - timerStart) > timeout * 1000UL) {
break;
}
//If interchar Timeout => return FALSE. So we can return sooner from this function. Not DO it if we dont recieve at least one char (prevChar <> 0)
if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) {
break;
}
} }
if(i >= count) break;
if ((unsigned long) (millis() - timerStart) > timeout * 1000UL) {
break;
}
//If interchar Timeout => return FALSE. So we can return sooner from this function. Not DO it if we dont recieve at least one char (prevChar <> 0)
if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) {
break;
}
}
} }
void sim900_clean_buffer(char *buffer, int count) void sim900_clean_buffer(char *buffer, int count)
{ {
for(int i = 0; i < count; i++) { for(int i=0; i < count; i++) {
buffer[i] = '\0'; buffer[i] = '\0';
} }
} }
//HACERR quitar esta funcion ? //HACERR quitar esta funcion ?
@ -150,43 +149,30 @@ boolean sim900_wait_for_resp(const char* resp, DataType type, unsigned int timeo
int len = strlen(resp); int len = strlen(resp);
int sum = 0; int sum = 0;
unsigned long timerStart, prevChar; //prevChar is the time when the previous Char has been read. unsigned long timerStart, prevChar; //prevChar is the time when the previous Char has been read.
// Serial.println("Wait for resp");
// Serial.println(resp);
// Serial.print("with length: ");
// Serial.println(len);
timerStart = millis(); timerStart = millis();
prevChar = 0; prevChar = 0;
//Serial.println("Received: ");
while(1) { while(1) {
if(sim900_check_readable()) { if(sim900_check_readable()) {
char c = serialSIM900->read(); char c = serialSIM900->read();
//Serial.print(c);
prevChar = millis(); prevChar = millis();
sum = (c==resp[sum]) ? sum+1 : 0; sum = (c==resp[sum]) ? sum+1 : 0;
if(sum == len - 1) { if(sum == len)break;
//Serial.print("BREAK");
break;
}
} }
if ((unsigned long) (millis() - timerStart) > timeout * 1000UL) { if ((unsigned long) (millis() - timerStart) > timeout * 1000UL) {
//Serial.println("Timeout");
return false; return false;
} }
//If interchar Timeout => return FALSE. So we can return sooner from this function. //If interchar Timeout => return FALSE. So we can return sooner from this function.
if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) { if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) {
//Serial.println("Interchar timeout");
return false; return false;
} }
} }
//Serial.println("End wait cycle");
//If is a CMD, we will finish to read buffer. //If is a CMD, we will finish to read buffer.
if(type == CMD) sim900_flush_serial(); if(type == CMD) sim900_flush_serial();
return true; return true;
} }
boolean sim900_check_with_cmd(const char* cmd, const char *resp, DataType type, unsigned int timeout, unsigned int chartimeout) boolean sim900_check_with_cmd(const char* cmd, const char *resp, DataType type, unsigned int timeout, unsigned int chartimeout)
{ {
sim900_send_cmd(cmd); sim900_send_cmd(cmd);

File diff suppressed because it is too large Load Diff