aboutsummaryrefslogtreecommitdiff
path: root/libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2013-08-08 16:43:19 +0200
committerCristian Maglie <c.maglie@bug.st>2013-08-08 16:43:19 +0200
commita8193ed933d9c9954cefbfb541cde56770ab5b74 (patch)
tree80796833fecca5d7426f1d09f7ac9870bab5f062 /libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp
parenta4c9fee673342304a5b12f7f2f7f9ecb9cb26d30 (diff)
parent5527c44aa443b20d63cf7a276180a36695233924 (diff)
Merge branch 'ide-1.5.x-library-to-new-format' into ide-1.5.x
Diffstat (limited to 'libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp')
-rw-r--r--libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp363
1 files changed, 0 insertions, 363 deletions
diff --git a/libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp b/libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp
deleted file mode 100644
index aaffdba..0000000
--- a/libraries/GSM/GSM3ShieldV1DataNetworkProvider.cpp
+++ /dev/null
@@ -1,363 +0,0 @@
-#include <GSM3ShieldV1DataNetworkProvider.h>
-#include <Arduino.h>
-
-char _command_CGATT[] PROGMEM = "AT+CGATT=";
-char _command_SEPARATOR[] PROGMEM = "\",\"";
-
-//Attach GPRS main function.
-GSM3_NetworkStatus_t GSM3ShieldV1DataNetworkProvider::attachGPRS(char* apn, char* user_name, char* password, bool synchronous)
-{
- user = user_name;
- passwd = password;
- // A sad use of byte reuse
- theGSM3ShieldV1ModemCore.setPhoneNumber(apn);
-
- theGSM3ShieldV1ModemCore.openCommand(this,ATTACHGPRS);
- theGSM3ShieldV1ModemCore.setStatus(CONNECTING);
-
- attachGPRSContinue();
-
- // If synchronous, wait till attach is over, or not.
- if(synchronous)
- {
- // if we shorten this delay, the command fails
- while(ready()==0)
- delay(100);
- }
-
- return theGSM3ShieldV1ModemCore.getStatus();
-}
-
-//Atthach GPRS continue function.
-void GSM3ShieldV1DataNetworkProvider::attachGPRSContinue()
-{
- bool resp;
- // 1: Attach to GPRS service "AT+CGATT=1"
- // 2: Wait attach OK and Set the context 0 as FGCNT "AT+QIFGCNT=0"
- // 3: Wait context OK and Set bearer type as GPRS, APN, user name and pasword "AT+QICSGP=1..."
- // 4: Wait bearer OK and Enable the function of MUXIP "AT+QIMUX=1"
- // 5: Wait for disable MUXIP OK and Set the session mode as non transparent "AT+QIMODE=0"
- // 6: Wait for session mode OK and Enable notification when data received "AT+QINDI=1"
- // 8: Wait domain name OK and Register the TCP/IP stack "AT+QIREGAPP"
- // 9: Wait for Register OK and Activate FGCNT "AT+QIACT"
- // 10: Wait for activate OK
-
- int ct=theGSM3ShieldV1ModemCore.getCommandCounter();
- if(ct==1)
- {
- //AT+CGATT
- theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGATT,false);
- theGSM3ShieldV1ModemCore.print(1);
- theGSM3ShieldV1ModemCore.print('\r');
- theGSM3ShieldV1ModemCore.setCommandCounter(2);
- }
- else if(ct==2)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- //AT+QIFGCNT
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIFGCNT=0"));
- theGSM3ShieldV1ModemCore.setCommandCounter(3);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==3)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- // Great. Go for the next step
- //DEBUG
- //Serial.println("AT+QICSGP.");
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QICSGP=1,\""),false);
- theGSM3ShieldV1ModemCore.print(theGSM3ShieldV1ModemCore.getPhoneNumber());
- theGSM3ShieldV1ModemCore.genericCommand_rq(_command_SEPARATOR,false);
- theGSM3ShieldV1ModemCore.print(user);
- theGSM3ShieldV1ModemCore.genericCommand_rq(_command_SEPARATOR,false);
- theGSM3ShieldV1ModemCore.print(passwd);
- theGSM3ShieldV1ModemCore.print("\"\r");
- theGSM3ShieldV1ModemCore.setCommandCounter(4);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==4)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- // AT+QIMUX=1 for multisocket
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIMUX=0"));
- theGSM3ShieldV1ModemCore.setCommandCounter(5);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==5)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- //AT+QIMODE=0 for multisocket
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIMODE=1"));
- theGSM3ShieldV1ModemCore.setCommandCounter(6);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==6)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- // AT+QINDI=1
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QINDI=1"));
- theGSM3ShieldV1ModemCore.setCommandCounter(8);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==8)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- // AT+QIREGAPP
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIREGAPP"));
- theGSM3ShieldV1ModemCore.setCommandCounter(9);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==9)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if(resp)
- {
- // AT+QIACT
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QIACT"));
- theGSM3ShieldV1ModemCore.setCommandCounter(10);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
- else if(ct==10)
- {
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- if (resp)
- {
- theGSM3ShieldV1ModemCore.setStatus(GPRS_READY);
- theGSM3ShieldV1ModemCore.closeCommand(1);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- }
-}
-
-//Detach GPRS main function.
-GSM3_NetworkStatus_t GSM3ShieldV1DataNetworkProvider::detachGPRS(bool synchronous)
-{
- theGSM3ShieldV1ModemCore.openCommand(this,DETACHGPRS);
- theGSM3ShieldV1ModemCore.setStatus(CONNECTING);
- detachGPRSContinue();
-
- if(synchronous)
- {
- while(ready()==0)
- delay(1);
- }
-
- return theGSM3ShieldV1ModemCore.getStatus();
-}
-
-void GSM3ShieldV1DataNetworkProvider::detachGPRSContinue()
-{
- bool resp;
- // 1: Detach to GPRS service "AT+CGATT=0"
- // 2: Wait dettach +PDP DEACT
- // 3: Wait for OK
-
- switch (theGSM3ShieldV1ModemCore.getCommandCounter()) {
- case 1:
- //AT+CGATT=0
- theGSM3ShieldV1ModemCore.genericCommand_rq(_command_CGATT,false);
- theGSM3ShieldV1ModemCore.print(0);
- theGSM3ShieldV1ModemCore.print('\r');
- theGSM3ShieldV1ModemCore.setCommandCounter(2);
- break;
- case 2:
- char auxLocate[12];
- prepareAuxLocate(PSTR("+PDP DEACT"), auxLocate);
- if(theGSM3ShieldV1ModemCore.theBuffer().locate(auxLocate))
- {
- if(resp)
- {
- // Received +PDP DEACT;
- theGSM3ShieldV1ModemCore.setCommandCounter(3);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- break;
- case 3:
- if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
- {
- // OK received
- if (resp)
- {
- theGSM3ShieldV1ModemCore.setStatus(GSM_READY);
- theGSM3ShieldV1ModemCore.closeCommand(1);
- }
- else theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- break;
- }
-}
-
-//QILOCIP parse.
-bool GSM3ShieldV1DataNetworkProvider::parseQILOCIP_rsp(char* LocalIP, int LocalIPlength, bool& rsp)
-{
- if (!(theGSM3ShieldV1ModemCore.theBuffer().extractSubstring("\r\n","\r\n", LocalIP, LocalIPlength)))
- rsp = false;
- else
- rsp = true;
- return true;
-}
-
-//Get IP main function.
-int GSM3ShieldV1DataNetworkProvider::getIP(char* LocalIP, int LocalIPlength)
-{
- theGSM3ShieldV1ModemCore.setPhoneNumber(LocalIP);
- theGSM3ShieldV1ModemCore.setPort(LocalIPlength);
- theGSM3ShieldV1ModemCore.openCommand(this,GETIP);
- getIPContinue();
- return theGSM3ShieldV1ModemCore.getCommandError();
-}
-
-void GSM3ShieldV1DataNetworkProvider::getIPContinue()
-{
-
- bool resp;
- // 1: Read Local IP "AT+QILOCIP"
- // 2: Waiting for IP.
-
- switch (theGSM3ShieldV1ModemCore.getCommandCounter()) {
- case 1:
- //AT+QILOCIP
- theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QILOCIP"));
- theGSM3ShieldV1ModemCore.setCommandCounter(2);
- break;
- case 2:
- if(parseQILOCIP_rsp(theGSM3ShieldV1ModemCore.getPhoneNumber(), theGSM3ShieldV1ModemCore.getPort(), resp))
- {
- if (resp)
- theGSM3ShieldV1ModemCore.closeCommand(1);
- else
- theGSM3ShieldV1ModemCore.closeCommand(3);
- }
- theGSM3ShieldV1ModemCore.theBuffer().flush();
- theGSM3ShieldV1ModemCore.gss.spaceAvailable();
- break;
- }
-}
-
-//Get IP with IPAddress object
-IPAddress GSM3ShieldV1DataNetworkProvider::getIPAddress() {
- char ip_temp[15]="";
- getIP(ip_temp, 15);
- unsigned long m=millis();
-
- while((millis()-m)<10*1000 && (!ready())){
- // wait for a response from the modem:
- delay(100);
- }
- IPAddress ip;
- inet_aton(ip_temp, ip);
- return ip;
-}
-
-int GSM3ShieldV1DataNetworkProvider::inet_aton(const char* aIPAddrString, IPAddress& aResult)
-{
- // See if we've been given a valid IP address
- const char* p =aIPAddrString;
- while (*p &&
- ( (*p == '.') || (*p >= '0') || (*p <= '9') ))
- {
- p++;
- }
-
- if (*p == '\0')
- {
- // It's looking promising, we haven't found any invalid characters
- p = aIPAddrString;
- int segment =0;
- int segmentValue =0;
- while (*p && (segment < 4))
- {
- if (*p == '.')
- {
- // We've reached the end of a segment
- if (segmentValue > 255)
- {
- // You can't have IP address segments that don't fit in a byte
- return 0;
- }
- else
- {
- aResult[segment] = (byte)segmentValue;
- segment++;
- segmentValue = 0;
- }
- }
- else
- {
- // Next digit
- segmentValue = (segmentValue*10)+(*p - '0');
- }
- p++;
- }
- // We've reached the end of address, but there'll still be the last
- // segment to deal with
- if ((segmentValue > 255) || (segment > 3))
- {
- // You can't have IP address segments that don't fit in a byte,
- // or more than four segments
- return 0;
- }
- else
- {
- aResult[segment] = (byte)segmentValue;
- return 1;
- }
- }
- else
- {
- return 0;
- }
-}
-
-//Response management.
-void GSM3ShieldV1DataNetworkProvider::manageResponse(byte from, byte to)
-{
- switch(theGSM3ShieldV1ModemCore.getOngoingCommand())
- {
- case ATTACHGPRS:
- attachGPRSContinue();
- break;
- case DETACHGPRS:
- detachGPRSContinue();
- break;
- case GETIP:
- getIPContinue();
- break;
- }
-}