uses pushing box to write to google spreadsheets

Dependencies:   GSM_PUSHING_BOX_STATE_MACHINE MBed_Adafruit-GPS-Library SDFileSystem mbed

Fork of DCS by DCS_TEAM

Committer:
DeWayneDennis
Date:
Wed Oct 21 19:46:32 2015 +0000
Revision:
20:84661ac75715
Parent:
19:404594768414
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DeWayneDennis 19:404594768414 1 /*
DeWayneDennis 19:404594768414 2 GPRS.cpp
DeWayneDennis 19:404594768414 3 2014 Copyright (c) Seeed Technology Inc. All right reserved.
DeWayneDennis 19:404594768414 4
DeWayneDennis 19:404594768414 5 Author:lawliet zou(lawliet.zou@gmail.com)
DeWayneDennis 19:404594768414 6 2014-2-24
DeWayneDennis 19:404594768414 7
DeWayneDennis 19:404594768414 8 This library is free software; you can redistribute it and/or
DeWayneDennis 19:404594768414 9 modify it under the terms of the GNU Lesser General Public
DeWayneDennis 19:404594768414 10 License as published by the Free Software Foundation; either
DeWayneDennis 19:404594768414 11 version 2.1 of the License, or (at your option) any later version.
DeWayneDennis 19:404594768414 12
DeWayneDennis 19:404594768414 13 This library is distributed in the hope that it will be useful,
DeWayneDennis 19:404594768414 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
DeWayneDennis 19:404594768414 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
DeWayneDennis 19:404594768414 16 Lesser General Public License for more details.
DeWayneDennis 19:404594768414 17
DeWayneDennis 19:404594768414 18 You should have received a copy of the GNU Lesser General Public
DeWayneDennis 19:404594768414 19 License along with this library; if not, write to the Free Software
DeWayneDennis 19:404594768414 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
DeWayneDennis 19:404594768414 21 */
DeWayneDennis 19:404594768414 22
DeWayneDennis 19:404594768414 23 #include "mbed.h"
DeWayneDennis 19:404594768414 24 #include "GPRS.h"
DeWayneDennis 19:404594768414 25
DeWayneDennis 19:404594768414 26 GPRS* GPRS::inst;
DeWayneDennis 19:404594768414 27 char* numbers[100];
DeWayneDennis 19:404594768414 28 FILE *fpNum;
DeWayneDennis 19:404594768414 29 int number_index = 0;
DeWayneDennis 19:404594768414 30 char phone_number[12];
DeWayneDennis 19:404594768414 31
DeWayneDennis 19:404594768414 32 GPRS::GPRS(PinName tx, PinName rx, int baudRate, const char* apn, const char* userName, const char* passWord) : Modem(tx,rx,baudRate)
DeWayneDennis 19:404594768414 33 {
DeWayneDennis 19:404594768414 34 inst = this;
DeWayneDennis 19:404594768414 35 _apn = apn;
DeWayneDennis 19:404594768414 36 _userName = userName;
DeWayneDennis 19:404594768414 37 _passWord = passWord;
DeWayneDennis 19:404594768414 38 socketID = -1;
DeWayneDennis 19:404594768414 39 }
DeWayneDennis 19:404594768414 40
DeWayneDennis 19:404594768414 41 bool GPRS::preInit()
DeWayneDennis 19:404594768414 42 {
DeWayneDennis 19:404594768414 43 //send AT command a couple of times
DeWayneDennis 19:404594768414 44 for(int i = 0; i < 2; i++) {
DeWayneDennis 19:404594768414 45 sendCmd("AT\r\n");
DeWayneDennis 19:404594768414 46 }
DeWayneDennis 19:404594768414 47 return checkSIMStatus();
DeWayneDennis 19:404594768414 48 }
DeWayneDennis 19:404594768414 49 // added by Noah Milam
DeWayneDennis 19:404594768414 50 void GPRS::start_server()
DeWayneDennis 19:404594768414 51 {
DeWayneDennis 19:404594768414 52 sendCmdResp("AT+CGATT?\r\n");
DeWayneDennis 19:404594768414 53
DeWayneDennis 19:404594768414 54 sendCmdResp("AT+CIPSERVER=1,1234\r\n");
DeWayneDennis 19:404594768414 55 listen_server();
DeWayneDennis 19:404594768414 56 }
DeWayneDennis 19:404594768414 57 void GPRS::listen_server()
DeWayneDennis 19:404594768414 58 {
DeWayneDennis 19:404594768414 59 gprs_response();
DeWayneDennis 19:404594768414 60 }
DeWayneDennis 19:404594768414 61
DeWayneDennis 19:404594768414 62 void GPRS::send_SMS(char* number, char* data)
DeWayneDennis 19:404594768414 63 {
DeWayneDennis 19:404594768414 64 printf("sending text message to: %s\r\n", number);
DeWayneDennis 19:404594768414 65 sendCmdAndWaitForResp("AT+CMGF=1\r\n","OK",DEFAULT_TIMEOUT,CMD);
DeWayneDennis 19:404594768414 66 wait(2);
DeWayneDennis 19:404594768414 67 //printf("\032\n");
DeWayneDennis 19:404594768414 68 char cmd[64];
DeWayneDennis 19:404594768414 69 snprintf(cmd,sizeof(cmd),"AT+CMGS=\"+%s\"\r\n",number);
DeWayneDennis 19:404594768414 70 printf(">>>>%s",cmd);
DeWayneDennis 19:404594768414 71 sendCmdAndWaitForResp(cmd,">",DEFAULT_TIMEOUT,CMD);
DeWayneDennis 19:404594768414 72 printf("sent at cmgf\n");
DeWayneDennis 19:404594768414 73 wait(2);
DeWayneDennis 19:404594768414 74 //printf("032");
DeWayneDennis 19:404594768414 75 sendCmd(data); // sends the address
DeWayneDennis 19:404594768414 76 sendCmd("\x1a"); // this is like pressing control - z to end the send command
DeWayneDennis 19:404594768414 77 wait(10); // giving the send enough time to do its thing
DeWayneDennis 19:404594768414 78 printf("should have been received");
DeWayneDennis 19:404594768414 79 }
DeWayneDennis 19:404594768414 80
DeWayneDennis 19:404594768414 81 char* GPRS::read_SMS()
DeWayneDennis 19:404594768414 82 {
DeWayneDennis 19:404594768414 83 wait(1);
DeWayneDennis 19:404594768414 84 sendCmd("AT+CMGF=1\r\n"); // sms mode
DeWayneDennis 19:404594768414 85 wait(2);
DeWayneDennis 19:404594768414 86 sendCmd("AT+CMGD=1\r\n"); // delete the frist message so incoming message is spot 1
DeWayneDennis 19:404594768414 87 wait(1);
DeWayneDennis 19:404594768414 88 wait_for_sms();
DeWayneDennis 19:404594768414 89 wait(10);
DeWayneDennis 19:404594768414 90 sendCmd("AT+CMGR=1\r\n");
DeWayneDennis 19:404594768414 91 storeResp();
DeWayneDennis 19:404594768414 92 return get_server_IP();
DeWayneDennis 19:404594768414 93 }
DeWayneDennis 19:404594768414 94
DeWayneDennis 19:404594768414 95 // end of what Noah Milam added
DeWayneDennis 19:404594768414 96 bool GPRS::checkSIMStatus(void)
DeWayneDennis 19:404594768414 97 {
DeWayneDennis 19:404594768414 98 printf("Checking SIM Status...\r\n");
DeWayneDennis 19:404594768414 99 char gprsBuffer[32];
DeWayneDennis 19:404594768414 100 int count = 0;
DeWayneDennis 19:404594768414 101
DeWayneDennis 19:404594768414 102 while(count < 3) {
DeWayneDennis 19:404594768414 103 cleanBuffer(gprsBuffer,32);
DeWayneDennis 19:404594768414 104 sendCmd("AT+CPIN?\r\n");
DeWayneDennis 19:404594768414 105 readBuffer(gprsBuffer,32,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 106 if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) {
DeWayneDennis 19:404594768414 107 break;
DeWayneDennis 19:404594768414 108 }
DeWayneDennis 19:404594768414 109 printf("SIM Not Ready..Try Again\r\n--%s--\r\n", gprsBuffer);
DeWayneDennis 19:404594768414 110 count++;
DeWayneDennis 19:404594768414 111 wait(1);
DeWayneDennis 19:404594768414 112 }
DeWayneDennis 19:404594768414 113 if(count == 3) {
DeWayneDennis 19:404594768414 114 return false;
DeWayneDennis 19:404594768414 115 }
DeWayneDennis 19:404594768414 116 printf("SIM Status GOOD!\r\n");
DeWayneDennis 19:404594768414 117 return true;
DeWayneDennis 19:404594768414 118 }
DeWayneDennis 19:404594768414 119
DeWayneDennis 19:404594768414 120 bool GPRS::join()
DeWayneDennis 19:404594768414 121 {
DeWayneDennis 19:404594768414 122 char cmd[64];
DeWayneDennis 19:404594768414 123 char ipAddr[32];
DeWayneDennis 19:404594768414 124 char resp[96];
DeWayneDennis 19:404594768414 125
DeWayneDennis 19:404594768414 126 printf(">>>>AT+CREG\r\n");
DeWayneDennis 19:404594768414 127 sendCmd("AT+CREG?\r\n");
DeWayneDennis 19:404594768414 128 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 129 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 130 if(NULL != strstr(resp,"+CREG:")) {
DeWayneDennis 19:404594768414 131 }
DeWayneDennis 19:404594768414 132 else{
DeWayneDennis 19:404594768414 133 return false;
DeWayneDennis 19:404594768414 134 }
DeWayneDennis 19:404594768414 135 //close any existing connections
DeWayneDennis 19:404594768414 136 printf(">>>>AT+CIPSHUT\r\n");
DeWayneDennis 19:404594768414 137 sendCmd("AT+CIPSHUT\r\n");
DeWayneDennis 19:404594768414 138 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 139 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 140 if(NULL != strstr(resp,"OK")) {
DeWayneDennis 19:404594768414 141 }
DeWayneDennis 19:404594768414 142 else{
DeWayneDennis 19:404594768414 143 return false;
DeWayneDennis 19:404594768414 144 }
DeWayneDennis 19:404594768414 145 //Select multi connection (it can be a server or client)
DeWayneDennis 19:404594768414 146 printf(">>>>AT+CIPMUX=0\r\n");
DeWayneDennis 19:404594768414 147 sendCmd("AT+CIPMUX=0 \r\n");
DeWayneDennis 19:404594768414 148 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 149 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 150 if(NULL != strstr(resp,"CIPMUX")) {
DeWayneDennis 19:404594768414 151 }
DeWayneDennis 19:404594768414 152 else{
DeWayneDennis 19:404594768414 153 return false;
DeWayneDennis 19:404594768414 154 }
DeWayneDennis 19:404594768414 155 //get signal strength
DeWayneDennis 19:404594768414 156 printf(">>>>AT+CSQ\r\n");
DeWayneDennis 19:404594768414 157 sendCmd("AT+CSQ\r\n");
DeWayneDennis 19:404594768414 158 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 159 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 160 if(NULL != strstr(resp,"+CSQ:")) {
DeWayneDennis 19:404594768414 161 }
DeWayneDennis 19:404594768414 162 else{
DeWayneDennis 19:404594768414 163 return false;
DeWayneDennis 19:404594768414 164 }
DeWayneDennis 19:404594768414 165 //check if device is attached
DeWayneDennis 19:404594768414 166 printf(">>>>AT+CGATT?\r\n");
DeWayneDennis 19:404594768414 167 sendCmd("AT+CGATT?\r\n");
DeWayneDennis 19:404594768414 168 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 169 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 170 if(NULL != strstr(resp,"+CGATT:")) {
DeWayneDennis 19:404594768414 171 }
DeWayneDennis 19:404594768414 172 else{
DeWayneDennis 19:404594768414 173 return false;
DeWayneDennis 19:404594768414 174 }
DeWayneDennis 19:404594768414 175 //attach the device
DeWayneDennis 19:404594768414 176 printf(">>>>AT+CGATT=1\r\n");
DeWayneDennis 19:404594768414 177 sendCmd("AT+CGATT=1\r\n");
DeWayneDennis 19:404594768414 178 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 179 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 180 if(NULL != strstr(resp,"OK")) {
DeWayneDennis 19:404594768414 181 }
DeWayneDennis 19:404594768414 182 else{
DeWayneDennis 19:404594768414 183 printf("Response: %s\r\n", resp);
DeWayneDennis 19:404594768414 184 return false;
DeWayneDennis 19:404594768414 185 }
DeWayneDennis 19:404594768414 186
DeWayneDennis 19:404594768414 187 //set APN
DeWayneDennis 19:404594768414 188 snprintf(cmd,sizeof(cmd),"AT+CSTT=\"%s\",\"%s\",\"%s\"\r\n",_apn,_userName,_passWord);
DeWayneDennis 19:404594768414 189 printf(">>>>%s",cmd);
DeWayneDennis 19:404594768414 190 //sendCmdAndWaitForRes p(cmd, "OK", DEFAULT_TIMEOUT,CMD);
DeWayneDennis 19:404594768414 191 sendCmd(cmd);
DeWayneDennis 19:404594768414 192 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 193 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 194 if(NULL != strstr(resp,"OK")) {
DeWayneDennis 19:404594768414 195 }
DeWayneDennis 19:404594768414 196 else{
DeWayneDennis 19:404594768414 197 return false;
DeWayneDennis 19:404594768414 198 }
DeWayneDennis 19:404594768414 199 //Brings up wireless connection
DeWayneDennis 19:404594768414 200 printf(">>>>AT+CIICR\r\n");
DeWayneDennis 19:404594768414 201 sendCmd("AT+CIICR\r\n");
DeWayneDennis 19:404594768414 202 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 203 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 204 if(NULL != strstr(resp,"OK")) {
DeWayneDennis 19:404594768414 205 }
DeWayneDennis 19:404594768414 206 else{
DeWayneDennis 19:404594768414 207 return false;
DeWayneDennis 19:404594768414 208 }
DeWayneDennis 19:404594768414 209 printf(">>>>AT+CIPHEAD\r\n");
DeWayneDennis 19:404594768414 210 sendCmd("AT+CIPHEAD=1\r\n");
DeWayneDennis 19:404594768414 211 cleanBuffer(resp,96);
DeWayneDennis 19:404594768414 212 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 213 if(NULL != strstr(resp,"OK")) {
DeWayneDennis 19:404594768414 214 }
DeWayneDennis 19:404594768414 215 else{
DeWayneDennis 19:404594768414 216 return false;
DeWayneDennis 19:404594768414 217 }
DeWayneDennis 19:404594768414 218 //Get local IP address
DeWayneDennis 19:404594768414 219 printf(">>>>AT+CIFSR\r\n");
DeWayneDennis 19:404594768414 220 sendCmd("AT+CIFSR\r\n");
DeWayneDennis 19:404594768414 221 readBuffer(ipAddr,32,2);
DeWayneDennis 19:404594768414 222 printf(">>>>AT+CIFSR returns: %s\r\n", ipAddr);
DeWayneDennis 19:404594768414 223 if(NULL != strstr(ipAddr,"AT+CIFSR")) {
DeWayneDennis 19:404594768414 224 _ip = str_to_ip(ipAddr+12);
DeWayneDennis 19:404594768414 225 if(_ip != 0) {
DeWayneDennis 19:404594768414 226 //possibly send ip address to server for future TCP connections
DeWayneDennis 19:404594768414 227 return true;
DeWayneDennis 19:404594768414 228 }
DeWayneDennis 19:404594768414 229 }
DeWayneDennis 19:404594768414 230 return false;
DeWayneDennis 19:404594768414 231 }
DeWayneDennis 19:404594768414 232
DeWayneDennis 19:404594768414 233 bool GPRS::setProtocol(int socket, Protocol p)
DeWayneDennis 19:404594768414 234 {
DeWayneDennis 19:404594768414 235 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 236 return false;
DeWayneDennis 19:404594768414 237 }
DeWayneDennis 19:404594768414 238 //ToDo: setProtocol
DeWayneDennis 19:404594768414 239 return true;
DeWayneDennis 19:404594768414 240 }
DeWayneDennis 19:404594768414 241
DeWayneDennis 19:404594768414 242 bool GPRS::connect(int socket, Protocol ptl,const char * host, int port, int timeout)
DeWayneDennis 19:404594768414 243 {
DeWayneDennis 19:404594768414 244 char cmd[64];
DeWayneDennis 19:404594768414 245 char resp[96];
DeWayneDennis 19:404594768414 246 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 247 return false;
DeWayneDennis 19:404594768414 248 }
DeWayneDennis 19:404594768414 249 if(ptl == TCP) {
DeWayneDennis 19:404594768414 250 sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",\"%d\"\r\n", host, port);
DeWayneDennis 19:404594768414 251 } else if(ptl == UDP) {
DeWayneDennis 19:404594768414 252 sprintf(cmd, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d\r\n",socket, host, port);
DeWayneDennis 19:404594768414 253 } else {
DeWayneDennis 19:404594768414 254 return false;
DeWayneDennis 19:404594768414 255 }
DeWayneDennis 19:404594768414 256
DeWayneDennis 19:404594768414 257 sendCmd(cmd);
DeWayneDennis 19:404594768414 258 readBuffer(resp,96,DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 259 if(NULL != strstr(resp,"CONNECT")) { //ALREADY CONNECT or CONNECT OK
DeWayneDennis 19:404594768414 260 printf("Response: %s\r\n", resp);
DeWayneDennis 19:404594768414 261 return true;
DeWayneDennis 19:404594768414 262 }
DeWayneDennis 19:404594768414 263 return false;//ERROR
DeWayneDennis 19:404594768414 264 }
DeWayneDennis 19:404594768414 265
DeWayneDennis 19:404594768414 266 bool GPRS::gethostbyname(const char* host, uint32_t* ip)
DeWayneDennis 19:404594768414 267 {
DeWayneDennis 19:404594768414 268 uint32_t addr = str_to_ip(host);
DeWayneDennis 19:404594768414 269 char buf[17];
DeWayneDennis 19:404594768414 270 snprintf(buf, sizeof(buf), "%d.%d.%d.%d", (addr>>24)&0xff, (addr>>16)&0xff, (addr>>8)&0xff, addr&0xff);
DeWayneDennis 19:404594768414 271 if (strcmp(buf, host) == 0) {
DeWayneDennis 19:404594768414 272 *ip = addr;
DeWayneDennis 19:404594768414 273 return true;
DeWayneDennis 19:404594768414 274 }
DeWayneDennis 19:404594768414 275 return false;
DeWayneDennis 19:404594768414 276 }
DeWayneDennis 19:404594768414 277
DeWayneDennis 19:404594768414 278 bool GPRS::disconnect()
DeWayneDennis 19:404594768414 279 {
DeWayneDennis 19:404594768414 280 sendCmd("AT+CIPSHUT\r\n");
DeWayneDennis 19:404594768414 281 return true;
DeWayneDennis 19:404594768414 282 }
DeWayneDennis 19:404594768414 283
DeWayneDennis 19:404594768414 284 bool GPRS::is_connected(int socket)
DeWayneDennis 19:404594768414 285 {
DeWayneDennis 19:404594768414 286
DeWayneDennis 19:404594768414 287 char cmd[16];
DeWayneDennis 19:404594768414 288 char resp[96];
DeWayneDennis 19:404594768414 289 while(1){
DeWayneDennis 19:404594768414 290 snprintf(cmd,16,"AT+CIPSTATUS=%d\r\n",socket);
DeWayneDennis 19:404594768414 291 sendCmd(cmd);
DeWayneDennis 19:404594768414 292 readBuffer(resp,sizeof(resp),DEFAULT_TIMEOUT);
DeWayneDennis 19:404594768414 293 if(NULL != strstr(resp,"CONNECTED")) {
DeWayneDennis 19:404594768414 294 return true;
DeWayneDennis 19:404594768414 295 } else {
DeWayneDennis 19:404594768414 296 return false;
DeWayneDennis 19:404594768414 297 }
DeWayneDennis 19:404594768414 298 }
DeWayneDennis 19:404594768414 299 }
DeWayneDennis 19:404594768414 300
DeWayneDennis 19:404594768414 301 void GPRS::reset()
DeWayneDennis 19:404594768414 302 {
DeWayneDennis 19:404594768414 303 }
DeWayneDennis 19:404594768414 304
DeWayneDennis 19:404594768414 305 bool GPRS::close(int socket)
DeWayneDennis 19:404594768414 306 {
DeWayneDennis 19:404594768414 307 char cmd[16];
DeWayneDennis 19:404594768414 308 char resp[16];
DeWayneDennis 19:404594768414 309
DeWayneDennis 19:404594768414 310 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 311 return false;
DeWayneDennis 19:404594768414 312 }
DeWayneDennis 19:404594768414 313 // if not connected, return
DeWayneDennis 19:404594768414 314 if (is_connected(socket) == false) {
DeWayneDennis 19:404594768414 315 return true;
DeWayneDennis 19:404594768414 316 }
DeWayneDennis 19:404594768414 317 snprintf(cmd, sizeof(cmd),"AT+CIPCLOSE=%d\r\n",socket);
DeWayneDennis 19:404594768414 318 snprintf(resp,sizeof(resp),"%d, CLOSE OK",socket);
DeWayneDennis 19:404594768414 319 if(0 != sendCmdAndWaitForResp(cmd, resp, DEFAULT_TIMEOUT,CMD)) {
DeWayneDennis 19:404594768414 320 return false;
DeWayneDennis 19:404594768414 321 }
DeWayneDennis 19:404594768414 322 return true;
DeWayneDennis 19:404594768414 323 }
DeWayneDennis 19:404594768414 324
DeWayneDennis 19:404594768414 325 bool GPRS::readable(void)
DeWayneDennis 19:404594768414 326 {
DeWayneDennis 19:404594768414 327 return readable();
DeWayneDennis 19:404594768414 328 }
DeWayneDennis 19:404594768414 329
DeWayneDennis 19:404594768414 330 int GPRS::wait_readable(int socket, int wait_time)
DeWayneDennis 19:404594768414 331 {
DeWayneDennis 19:404594768414 332 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 333 return -1;
DeWayneDennis 19:404594768414 334 }
DeWayneDennis 19:404594768414 335 char resp[16];
DeWayneDennis 19:404594768414 336 snprintf(resp,sizeof(resp),"\r\n\r\n+RECEIVE,%d",socket);//"+RECEIVE:<socketID>,<length>"
DeWayneDennis 19:404594768414 337 int len = strlen(resp);
DeWayneDennis 19:404594768414 338
DeWayneDennis 19:404594768414 339 if(false == respCmp(resp,len,wait_time)) {
DeWayneDennis 19:404594768414 340 return -1;
DeWayneDennis 19:404594768414 341 }
DeWayneDennis 19:404594768414 342 char c = readByte();//','
DeWayneDennis 19:404594768414 343 char dataLen[4];
DeWayneDennis 19:404594768414 344 int i = 0;
DeWayneDennis 19:404594768414 345 c = readByte();
DeWayneDennis 19:404594768414 346 while((c >= '0') && (c <= '9')) {
DeWayneDennis 19:404594768414 347 dataLen[i++] = c;
DeWayneDennis 19:404594768414 348 c = readByte();
DeWayneDennis 19:404594768414 349 }
DeWayneDennis 19:404594768414 350 c = readByte();//'\n'
DeWayneDennis 19:404594768414 351 len = atoi(dataLen);
DeWayneDennis 19:404594768414 352 return len;
DeWayneDennis 19:404594768414 353 }
DeWayneDennis 19:404594768414 354
DeWayneDennis 19:404594768414 355 int GPRS::wait_writeable(int socket, int req_size)
DeWayneDennis 19:404594768414 356 {
DeWayneDennis 19:404594768414 357 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 358 return -1;
DeWayneDennis 19:404594768414 359 }
DeWayneDennis 19:404594768414 360 return req_size>256?256:req_size+1;
DeWayneDennis 19:404594768414 361 }
DeWayneDennis 19:404594768414 362
DeWayneDennis 19:404594768414 363 int GPRS::send(int socket, const char * str, int len)
DeWayneDennis 19:404594768414 364 {
DeWayneDennis 19:404594768414 365 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 366 return -1;
DeWayneDennis 19:404594768414 367 }
DeWayneDennis 19:404594768414 368 char cmd[32];
DeWayneDennis 19:404594768414 369 wait(1);
DeWayneDennis 19:404594768414 370 if(len > 0){
DeWayneDennis 19:404594768414 371 printf("Sending data: %s\r\n", str);
DeWayneDennis 19:404594768414 372 snprintf(cmd,sizeof(cmd),"AT+CIPSEND\r\n");
DeWayneDennis 19:404594768414 373 if(0 != sendCmdAndWaitForResp(cmd,">",2,CMD)) {
DeWayneDennis 19:404594768414 374 printf("Couldn't send data!!\r\n");
DeWayneDennis 19:404594768414 375 return false;
DeWayneDennis 19:404594768414 376 }
DeWayneDennis 19:404594768414 377 sendCmd(str);
DeWayneDennis 19:404594768414 378 serialModem.putc((char)0x1a);
DeWayneDennis 19:404594768414 379 }
DeWayneDennis 19:404594768414 380 return len;
DeWayneDennis 19:404594768414 381 }
DeWayneDennis 19:404594768414 382
DeWayneDennis 19:404594768414 383 int GPRS::recv(int socket, char* buf, int len)
DeWayneDennis 19:404594768414 384 {
DeWayneDennis 19:404594768414 385 if (socket < 0 || socket > MAX_SOCK_NUM-1) {
DeWayneDennis 19:404594768414 386 return -1;
DeWayneDennis 19:404594768414 387 }
DeWayneDennis 19:404594768414 388 cleanBuffer(buf,len);
DeWayneDennis 19:404594768414 389 readBuffer(buf,len,DEFAULT_TIMEOUT/2);
DeWayneDennis 19:404594768414 390 return len;
DeWayneDennis 19:404594768414 391 //return strlen(buf);
DeWayneDennis 19:404594768414 392 }
DeWayneDennis 19:404594768414 393
DeWayneDennis 19:404594768414 394 int GPRS::new_socket()
DeWayneDennis 19:404594768414 395 {
DeWayneDennis 19:404594768414 396 socketID = 0; //we only support one socket.
DeWayneDennis 19:404594768414 397 return socketID;
DeWayneDennis 19:404594768414 398 }
DeWayneDennis 19:404594768414 399
DeWayneDennis 19:404594768414 400 uint16_t GPRS::new_port()
DeWayneDennis 19:404594768414 401 {
DeWayneDennis 19:404594768414 402 uint16_t port = rand();
DeWayneDennis 19:404594768414 403 port |= 49152;
DeWayneDennis 19:404594768414 404 return port;
DeWayneDennis 19:404594768414 405 }
DeWayneDennis 19:404594768414 406
DeWayneDennis 19:404594768414 407 uint32_t GPRS::str_to_ip(const char* str)
DeWayneDennis 19:404594768414 408 {
DeWayneDennis 19:404594768414 409 uint32_t ip = 0;
DeWayneDennis 19:404594768414 410 char* p = (char*)str;
DeWayneDennis 19:404594768414 411 for(int i = 0; i < 4; i++) {
DeWayneDennis 19:404594768414 412 ip |= atoi(p);
DeWayneDennis 19:404594768414 413 p = strchr(p, '.');
DeWayneDennis 19:404594768414 414 if (p == NULL) {
DeWayneDennis 19:404594768414 415 break;
DeWayneDennis 19:404594768414 416 }
DeWayneDennis 19:404594768414 417 ip <<= 8;
DeWayneDennis 19:404594768414 418 p++;
DeWayneDennis 19:404594768414 419 }
DeWayneDennis 19:404594768414 420 return ip;
DeWayneDennis 19:404594768414 421 }