void printMultiYesNo(char *result, char *s){ int cc, ccMax, idxMax; cc = 0;ccMax = 0;idxMax = -1; cc = matchChars(result, "YES"); if(ccMax < cc){ccMax = cc;idxMax = 0;} cc = matchChars(result, "NO"); if(ccMax < cc){ccMax = cc;idxMax = 1;} if(idxMax == 0) sprintf(s, "%s \"ismultiplier\": true\n",s); else sprintf(s, "%s \"ismultiplier\": false\n",s); }
void GPRS::testMatchChars() { Serial.println("Type OK or + in 10000ms"); if (!matchChars(&Serial, "OK", 10000, "+")) { Serial.println("Not found"); } }
void getMonth(char *m, char *mOut){ int cc, ccMax, idxMax, cc2; int i; cc = 0;ccMax = 0;idxMax = -1; cc2 = 0; for(i=0;i<12;i++) { cc = matchChars(m, Month_Names[i]); if(ccMax == cc) cc2++; else { if(ccMax < cc){ccMax = cc;idxMax = i;cc2 = 0;} } } //printf("-------m= %s, ccMax= %d, cc2= %d idxMax= %d\n", m, ccMax, cc2, idxMax); //if(idxMax >= 0) // printf("-------Month_Names[idxMax]= %s\n", Month_Names[idxMax]); if(cc2 == 0 && ccMax > 0) strcpy(mOut, Month_Names[idxMax]); else strcpy(mOut, m); }
int testMonth(char *tmpStr){ int cc, ccMax, idxMax, cc2; int i; cc = 0;ccMax = 0;idxMax = -1; cc2 = 0; for(i=0;i<12;i++) { cc = matchChars(tmpStr, M_Names[i]); if(ccMax == cc) cc2++; else { if(ccMax < cc){ccMax = cc;idxMax = i;cc2 = 0;} } } idxMax++; tmpStr[0] = 0; if(cc2 == 0 && ccMax > 1) { if(idxMax<9) {strcpy(tmpStr,"0");tmpStr[1] = idxMax+'0';} else sprintf(tmpStr,"%d",idxMax); tmpStr[2]=0; return 1; } else return 0; }
bool GPRS::readTcpPrompt(Stream* stream) { bool result = matchChars(stream, "> ", -1); consume(stream); return result; }
bool GPRS::readPrompt(Stream* stream) { bool result = matchChars(stream, "> ", -1, "OK\n\n> "); consume(stream); return result; }
bool GPRS::readOK(Stream* stream) { bool result = matchChars(stream, "OK"); consume(stream); return result; }
// Taken from http://www.sparkfun.com/datasheets/CellularShield/SM5100B%20TCPIP%20App%20Note.pdf bool GPRS::sendTCP(Stream* stream, char* host, int port, char* data) { int buflen = 100; char buffer[buflen]; #ifdef GPRS_DEBUG Serial.println("AT+CGATT?"); #endif stream->println("AT+CGATT?"); if (!matchChars(stream, "+CGATT: 1")) { #ifdef GPRS_DEBUG Serial.println("Could not find CGATT : 1"); #endif return false; } if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } /*#ifdef GPRS_DEBUG Serial.println("AT+CGDCONT=?"); #endif // It appears that this should only happen once, however there is no real way to test it easily stream->println("AT+CGDCONT?"); if (readOK(stream)) { #ifdef GPRS_DEBUG Serial.print("AT+CGDCONT=1,\"IP\",\""); Serial.print(pdp); Serial.println("\""); #endif stream->print("AT+CGDCONT=1,\"IP\",\""); stream->print(pdp); stream->println("\""); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } } else { #ifdef GPRS_DEBUG Serial.println("Have context already"); #endif consume(stream); } */ #ifdef GPRS_DEBUG Serial.print("AT+CGDCONT=1,\"IP\",\""); Serial.print(pdp); Serial.println("\""); #endif stream->print("AT+CGDCONT=1,\"IP\",\""); stream->print(pdp); stream->println("\""); if (!matchChars(stream, "OK", -1, "+CME ERROR: 4")) { #ifdef GPRS_DEBUG Serial.println("Not ok or error 4"); #endif return false; } if (strlen(username) > 0) { #ifdef GPRS_DEBUG Serial.println("Username/Password"); #endif stream->print("AT+CGPCO=0,\""); stream->print(username); stream->print("\",\""); stream->print(password); stream->println("\", 1 "); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } } #ifdef GPRS_DEBUG Serial.println("AT+CGACT=1,1"); #endif stream->println("AT+CGACT=1,1"); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } #ifdef GPRS_DEBUG Serial.print("AT+SDATACONF=1,\"TCP\",\""); Serial.print(host); Serial.print("\","); Serial.println(port); #endif stream->print("AT+SDATACONF=1,\"TCP\",\""); stream->print(host); stream->print("\","); stream->println(port); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } #ifdef GPRS_DEBUG Serial.println("AT+SDATASTART=1,1"); #endif stream->println("AT+SDATASTART=1,1"); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } bool connected = false; #ifdef GPRS_DEBUG Serial.println("AT+SDATASTATUS=1"); #endif while (!connected) { stream->println("AT+SDATASTATUS=1"); readUntil(stream, buffer, buflen, '+'); readUntil(stream, buffer, buflen, '\n'); // Expecting //+SOCKSTATUS: 1,0,0104,0,0,0 #ifdef GPRS_DEBUG Serial.print("B: "); Serial.println(buffer); #endif if (strcmp(buffer, "SOCKSTATUS: 1,1,0102,0,0,0\r") == 0) { connected = true; } } #ifdef GPRS_DEBUG Serial.print("AT+SDATATSEND=1,"); Serial.println(strlen(data)); #endif stream->print("AT+SDATATSEND=1,"); stream->println(strlen(data)); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } if(!readTcpPrompt(stream)) { #ifdef GPRS_DEBUG Serial.println("No prompt"); #endif return false; } #ifdef GPRS_DEBUG Serial.print(data); #endif stream->print(data); stream->print(26, BYTE); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } #ifdef GPRS_DEBUG Serial.println("AT+SDATASTART=1,0"); #endif stream->println("AT+SDATASTART=1,0"); if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("Not ok"); #endif return false; } return true; }
bool GPRS::sendSMS(Stream* stream, char* number, char* msg) { /* AT+CMGF=1 AT+CMGS="15921272576" > HELLO9527<ctrl-z > +CMGS: 36 OK */ if (!configureSMS(stream)) { #ifdef GPRS_DEBUG Serial.println("\nCould not configure"); #endif return false; } #ifdef GPRS_DEBUG Serial.println("\nSend phone number"); #endif stream->print("AT+CMGS=\""); stream->print(number); stream->println("\""); #ifdef GPRS_DEBUG Serial.println("\nWait for prompt"); #endif if (!readPrompt(stream)) { #ifdef GPRS_DEBUG Serial.println("No Prompt"); #endif return false; } stream->print(msg); stream->print(26, BYTE); int buflen = 100; char buffer[buflen]; #ifdef GPRS_DEBUG Serial.println("\nWait for response"); #endif if (!matchChars(stream, "+CMGS:")) { #ifdef GPRS_DEBUG Serial.println("No +CMGS:"); #endif return false; } if (!readUntil(stream, buffer, buflen, '\n')) { #ifdef GPRS_DEBUG Serial.println("No new line"); #endif return false; } #ifdef GPRS_DEBUG Serial.println("\nWait for OK"); #endif if (!readOK(stream)) { #ifdef GPRS_DEBUG Serial.println("No OK 2"); #endif return false; } return true; }