boolean Adafruit_FONA::enableGPRS(boolean onoff) { if (onoff) { // disconnect all sockets sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000); if (! sendCheckReply(F("AT+CGATT=1"), F("OK"), 10000)) return false; // set bearer profile! connection type GPRS if (! sendCheckReply(F("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""), F("OK"), 10000)) return false; // set bearer profile access point name if (apn) { // Send command AT+SAPBR=3,1,"APN","<apn value>" where <apn value> is the configured APN value. if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"APN\","), apn, F("OK"), 10000)) return false; // set username/password if (apnusername) { // Send command AT+SAPBR=3,1,"USER","<user>" where <user> is the configured APN username. if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"USER\","), apnusername, F("OK"), 10000)) return false; } if (apnpassword) { // Send command AT+SAPBR=3,1,"PWD","<password>" where <password> is the configured APN password. if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"PWD\","), apnpassword, F("OK"), 10000)) return false; } } // open GPRS context if (! sendCheckReply(F("AT+SAPBR=1,1"), F("OK"), 10000)) return false; } else { // disconnect all sockets if (! sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000)) return false; // close GPRS context if (! sendCheckReply(F("AT+SAPBR=0,1"), F("OK"), 10000)) return false; if (! sendCheckReply(F("AT+CGATT=0"), F("OK"), 10000)) return false; } return true; }
bool Adafruit_FONA::HTTP_initialize(char *url) { // Handle any pending HTTP_terminate(); // Initialize and set parameters if (! sendCheckReply(F("AT+HTTPINIT"), F("OK"))) return false; if (! sendCheckReply(F("AT+HTTPPARA=\"CID\",1"), F("OK"))) return false; if (! sendCheckReplyQuoted(F("AT+HTTPPARA=\"UA\","), useragent, F("OK"), 10000)) return false; flushInput(); mySerial->print(F("AT+HTTPPARA=\"URL\",\"")); mySerial->print(url); mySerial->println("\""); readline(FONA_DEFAULT_TIMEOUT_MS); if (strcmp(replybuffer, "OK") != 0) return false; // HTTPS redirect if (httpsredirect) { if (! sendCheckReply(F("AT+HTTPPARA=\"REDIR\",1"), F("OK"))) return false; if (! sendCheckReply(F("AT+HTTPSSL=1"), F("OK"))) return false; } return true; }
bool Adafruit_FONA::HTTP_POST_start(char *url, const char *contenttype, const uint8_t *postdata, uint16_t postdatalen, uint16_t *status, uint16_t *datalen){ if (! HTTP_initialize(url)) return false; if (! sendCheckReplyQuoted(F("AT+HTTPPARA=\"CONTENT\","), contenttype, F("OK"), 10000)) return false; // HTTP POST data flushInput(); mySerial->print(F("AT+HTTPDATA=")); mySerial->print(postdatalen); mySerial->println(",10000"); readline(FONA_DEFAULT_TIMEOUT_MS); if (strcmp(replybuffer, "DOWNLOAD") != 0) return false; mySerial->write(postdata, postdatalen); readline(10000); if (strcmp(replybuffer, "OK") != 0) return false; // HTTP POST if (! sendCheckReply(F("AT+HTTPACTION=1"), F("OK"))) return false; if (! HTTP_response(status, datalen)) return false; return true; }
boolean Adafruit_FONA_3G::enableGPRS(boolean onoff) { if (onoff) { // disconnect all sockets //sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000); if (! sendCheckReply(F("AT+CGATT=1"), F("OK"), 10000)) return false; // set bearer profile access point name if (apn) { // Send command AT+CGSOCKCONT=1,"IP","<apn value>" where <apn value> is the configured APN name. if (! sendCheckReplyQuoted(F("AT+CGSOCKCONT=1,\"IP\","), apn, F("OK"), 10000)) return false; // set username/password if (apnusername) { char authstring[100] = "AT+CGAUTH=1,1,\""; char *strp = authstring + strlen(authstring); strcpy_P(strp, (prog_char *)apnusername); strp+=strlen_P((prog_char *)apnusername); strp[0] = '\"'; strp++; strp[0] = 0; if (apnpassword) { strp[0] = ','; strp++; strp[0] = '\"'; strp++; strcpy_P(strp, (prog_char *)apnpassword); strp+=strlen_P((prog_char *)apnpassword); strp[0] = '\"'; strp++; strp[0] = 0; } if (! sendCheckReply(authstring, "OK", 10000)) return false; } } // connect in transparent if (! sendCheckReply(F("AT+CIPMODE=1"), F("OK"), 10000)) return false; // open network (?) if (! sendCheckReply(F("AT+NETOPEN=,,1"), F("Network opened"), 10000)) return false; readline(); // eat 'OK' } else { // close GPRS context if (! sendCheckReply(F("AT+NETCLOSE"), F("Network closed"), 10000)) return false; readline(); // eat 'OK' } return true; }