Final Code 12/19/2015
Dependencies: Chemical_Sensor_DMA GPRS DPG_FINAL MBed_Adafruit-GPS-Library SDFileSystem Socket mbed
Revision 23:0ce1f69ea710, committed 2015-12-19
- Comitter:
- DeWayneDennis
- Date:
- Sat Dec 19 21:58:45 2015 +0000
- Parent:
- 22:f46576c40722
- Commit message:
- Final Code 12/19/2015
Changed in this revision
diff -r f46576c40722 -r 0ce1f69ea710 GPRS.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GPRS.lib Sat Dec 19 21:58:45 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/DeWayneDennis/code/GPRS/#b27750bf16d6
diff -r f46576c40722 -r 0ce1f69ea710 GPRS/GPRS.cpp --- a/GPRS/GPRS.cpp Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,522 +0,0 @@ -/* - GPRS.cpp - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "mbed.h" -#include "GPRS.h" -#include "GSMLibrary.h" - -GPRS* GPRS::inst; -char* numbers[100]; -FILE *fpNum; -int number_index = 0; -char phone_number[12]; - -GPRS::GPRS(PinName tx, PinName rx, int baudRate, const char* apn, const char* userName, const char* passWord) : Modem(tx,rx,baudRate) -{ - inst = this; - _apn = apn; - _userName = userName; - _passWord = passWord; - socketID = -1; -} - -bool GPRS::preInit() -{ - //send AT command a couple of times - for(int i = 0; i < 2; i++) { - sendCmd("AT\r\n"); - //set time to update from tower - //sendCmd("AT+CLTS=1\r\n"); - } - return checkSIMStatus(); -} -// added by Noah Milam -void GPRS::start_server() -{ - sendCmdResp("AT+CGATT?\r\n"); - - sendCmdResp("AT+CIPSERVER=1,1234\r\n"); - listen_server(); -} -void GPRS::listen_server() -{ - gprs_response(); -} - -void GPRS::send_SMS(char* number, char* data) -{ - printf("sending text message to: %s\r\n", number); - sendCmdAndWaitForResp("AT+CMGF=1\r\n","OK",DEFAULT_TIMEOUT,CMD); - wait(2); - //printf("\032\n"); - char cmd[64]; - snprintf(cmd,sizeof(cmd),"AT+CMGS=\"+%s\"\r\n",number); - printf(">>>>%s",cmd); - sendCmdAndWaitForResp(cmd,">",DEFAULT_TIMEOUT,CMD); - printf("sent at cmgf\n"); - wait(2); - //printf("032"); - sendCmd(data); // sends the address - sendCmd("\x1a"); // this is like pressing control - z to end the send command - wait(10); // giving the send enough time to do its thing - printf("should have been received"); -} - -char* GPRS::read_SMS() -{ - wait(1); - sendCmd("AT+CMGF=1\r\n"); // sms mode - wait(2); - sendCmd("AT+CMGD=1\r\n"); // delete the frist message so incoming message is spot 1 - wait(1); - wait_for_sms(); - wait(10); - sendCmd("AT+CMGR=1\r\n"); - storeResp(); - return get_server_IP(); -} - -// end of what Noah Milam added -bool GPRS::checkSIMStatus(void) -{ - printf("Checking SIM Status...\r\n"); - char gprsBuffer[32]; - int count = 0; - - while(count < 3) { - cleanBuffer(gprsBuffer,32); - sendCmd("AT+CPIN?\r\n"); - readBuffer(gprsBuffer,32,DEFAULT_TIMEOUT); - if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) { - break; - } - printf("SIM Not Ready..Try Again--%s--\r\n", gprsBuffer); - count++; - wait(1); - } - if(count == 3) { - return false; - } - printf("SIM Status GOOD!\r\n"); - - //get the phone number - char resp[96]; - printf(">>>>AT+CNUM\r\n"); - sendCmd("AT+CNUM\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"+CNUM:")) { - printf("Response: -%s-", resp); - const char *p1 = strstr(resp, ",\"")+2; - const char *p2 = strstr(p1, "\""); - size_t len = p2-p1; - phoneNumber = (char*)malloc(sizeof(char)*(len+1)); - strncpy(phoneNumber, p1, len); - phoneNumber[len] = '\0'; - } - else{ - printf("Response: -%s-", resp); - return false; - } - return true; - -} -char* GPRS::getCellTime(){ - return cellTime; -} -void GPRS::setCellTime(){ - //what time is it - char resp[96]; - printf(">>>AT+CCLK?\r\n"); - sendCmd("AT+CCLK?\r\n"); - readBuffer(resp,96,(DEFAULT_TIMEOUT/2)); - if(NULL != strstr(resp,"+CCLK")) { //ALREADY CONNECT or CONNECT OK - const char *p1 = strstr(resp, ",")+1; - const char *p2 = strstr(p1, "-"); - size_t len = p2-p1; - cellTime = (char*)malloc(sizeof(char)*(len+1)); - strncpy(cellTime, p1, len); - cellTime[len] = '\0'; - } - else{ - printf("Time is (error): %s\r\n", resp); - } -} -bool GPRS::join() -{ - char cmd[64]; - char ipAddr[32]; - char resp[96]; - - printf(">>>>AT+CREG?\r\n"); - sendCmd("AT+CREG?\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"+CREG: 0,1")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - - //check if need to attach the device - printf(">>>>AT+CGATT?\r\n"); - sendCmd("AT+CGATT?\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"+CGATT: 1")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - //check the signal quality - printf(">>>>AT+CSQ?\r\n"); - sendCmd("AT+CSQ?\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - printf("Response: -%s-", resp); - - //close any existing connections - printf(">>>>AT+CIPSHUT\r\n"); - sendCmd("AT+CIPSHUT\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"OK")) { - } - else{ - return false; - } - //check the ip Status - printf(">>>>AT+CIPSTATUS\r\n"); - sendCmd("AT+CIPSTATUS\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"GPRSACT")) { - //Get local IP address - printf(">>>>AT+CIFSR\r\n"); - sendCmd("AT+CIFSR\r\n"); - readBuffer(ipAddr,32,2); - printf(">>>>AT+CIFSR returns: %s\r\n", ipAddr); - if(NULL != strstr(ipAddr,".")) { - _ip = str_to_ip(ipAddr+12); - if(_ip != 0) { - return true; - } - } - } - else if(NULL != strstr(resp,"INITIAL")){ - printf("Response: -%s-", resp); - - } - else if(NULL != strstr(resp,"CONNECT OK")){ - printf("Response: -%s-", resp); - - } - else if(NULL != strstr(resp,"START")){ - - //Get local IP address - printf(">>>>AT+CIFSR\r\n"); - sendCmd("AT+CIFSR\r\n"); - readBuffer(ipAddr,32,2); - printf(">>>>AT+CIFSR returns: %s\r\n", ipAddr); - if(NULL != strstr(ipAddr,".")) { - _ip = str_to_ip(ipAddr+12); - if(_ip != 0) { - return true; - } - } - } - else{ - printf("Response: -%s-", resp); - return false; - } - - //single connection - printf(">>>>AT+CIPMUX=0\r\n"); - sendCmd("AT+CIPMUX=0\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"OK")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - - //set APN - snprintf(cmd,sizeof(cmd),"AT+CSTT=\"%s\",\"%s\",\"%s\"\r\n",_apn,_userName,_passWord); - printf(">>>>%s",cmd); - //sendCmdAndWaitForResp(cmd, "OK", DEFAULT_TIMEOUT,CMD); - sendCmd(cmd); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"OK")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - //Brings up wireless connection - printf(">>>>AT+CIICR\r\n"); - sendCmd("AT+CIICR\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT*3); - if(NULL != strstr(resp,"OK")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - - //Get local IP address - printf(">>>>AT+CIFSR\r\n"); - sendCmd("AT+CIFSR\r\n"); - readBuffer(ipAddr,32,2); - printf(">>>>AT+CIFSR returns: %s\r\n", ipAddr); - if(NULL != strstr(ipAddr,".")) { - _ip = str_to_ip(ipAddr+12); - if(_ip != 0) { - return true; - } - } - printf(">>>>AT+CIPQSEND=1\r\n"); - sendCmd("AT+CIPQSEND=1\r\n"); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"OK")) { - printf("Response: -%s-", resp); - } - else{ - printf("Response: -%s-", resp); - return false; - } - return false; -} - -bool GPRS::setProtocol(int socket, Protocol p) -{ - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return false; - } - //ToDo: setProtocol - return true; -} - -bool GPRS::connect(int socket, Protocol ptl,const char * host, int port, int timeout) -{ - char cmd[64]; - char resp[96]; - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return false; - } - if(ptl == TCP) { - sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",\"%d\"\r\n", host, port); - } else if(ptl == UDP) { - sprintf(cmd, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d\r\n",socket, host, port); - } else { - return false; - } - - printf("CONNECT: %s", cmd); - sendCmd(cmd); - cleanBuffer(resp,96); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"CONNECT")) { //ALREADY CONNECT or CONNECT OK - printf("SUCCESS: %s\r\n", resp); - - return true; - } - printf("FAILURE: %s\r\n", resp); - return false;//ERROR -} - -bool GPRS::gethostbyname(const char* host, uint32_t* ip) -{ - uint32_t addr = str_to_ip(host); - char buf[17]; - snprintf(buf, sizeof(buf), "%d.%d.%d.%d", (addr>>24)&0xff, (addr>>16)&0xff, (addr>>8)&0xff, addr&0xff); - if (strcmp(buf, host) == 0) { - *ip = addr; - return true; - } - return false; -} - -bool GPRS::disconnect() -{ - char resp[96]; - printf(">>>AT+CIPSHUT\r\n"); - sendCmd("AT+CIPSHUT\r\n"); - readBuffer(resp,96,DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"SHUT OK")) { //ALREADY CONNECT or CONNECT OK - printf("Response: %s\r\n", resp); - } - else{ - printf("Response: %s\r\n", resp); - return false; - } - return true; -} - -bool GPRS::is_connected(int socket) -{ - char cmd[16]; - char resp[96]; - snprintf(cmd,16,"AT+CIPSTATUS\r\n"); - sendCmd(cmd); - readBuffer(resp,sizeof(resp),DEFAULT_TIMEOUT); - if(NULL != strstr(resp,"CONNECT OK")) { - printf("Response -%s-\r\n", resp); - return true; - } else { - printf("Fail Response -%s-\r\n", resp); - return false; - } -} - -void GPRS::reset() -{ -} - -bool GPRS::close(int socket) -{ - char cmd[16]; - char resp[16]; - - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return false; - } - // if not connected, return - if (is_connected(socket) == false) { - return true; - } - snprintf(cmd, sizeof(cmd),"AT+CIPCLOSE=%d\r\n",socket); - snprintf(resp,sizeof(resp),"%d, CLOSE OK",socket); - if(0 != sendCmdAndWaitForResp(cmd, resp, DEFAULT_TIMEOUT,CMD)) { - return false; - } - return true; -} - -bool GPRS::readable(void) -{ - return readable(); -} - -int GPRS::wait_readable(int socket, int wait_time) -{ - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return -1; - } - char resp[16]; - snprintf(resp,sizeof(resp),"\r\n\r\n+RECEIVE,%d",socket);//"+RECEIVE:<socketID>,<length>" - int len = strlen(resp); - - if(false == respCmp(resp,len,wait_time)) { - return -1; - } - char c = readByte();//',' - char dataLen[4]; - int i = 0; - c = readByte(); - while((c >= '0') && (c <= '9')) { - dataLen[i++] = c; - c = readByte(); - } - c = readByte();//'\n' - len = atoi(dataLen); - return len; -} - -int GPRS::wait_writeable(int socket, int req_size) -{ - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return -1; - } - return req_size>256?256:req_size+1; -} - -int GPRS::send(int socket, const char * str, int len) -{ - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return -1; - } - char cmd[32]; - if(len > 0){ - //printf("Sending data: %s\r\n", str); - snprintf(cmd,sizeof(cmd),"AT+CIPSEND\r\n"); - if(0 != sendCmdAndWaitForResp(cmd,">",1,CMD)) { - printf("Couldn't send data!!"); - return false; - } - sendCmd(str); - serialModem.putc((char)0x1a); - - } - return len; -} - -int GPRS::recv(int socket, char* buf, int len) -{ - if (socket < 0 || socket > MAX_SOCK_NUM-1) { - return -1; - } - cleanBuffer(buf,len); - readBuffer(buf,len,DEFAULT_TIMEOUT/2); - return len; - //return strlen(buf); -} - -int GPRS::new_socket() -{ - socketID = 0; //we only support one socket. - return socketID; -} - -uint16_t GPRS::new_port() -{ - uint16_t port = rand(); - port |= 49152; - return port; -} - -uint32_t GPRS::str_to_ip(const char* str) -{ - uint32_t ip = 0; - char* p = (char*)str; - for(int i = 0; i < 4; i++) { - ip |= atoi(p); - p = strchr(p, '.'); - if (p == NULL) { - break; - } - ip <<= 8; - p++; - } - return ip; -} \ No newline at end of file
diff -r f46576c40722 -r 0ce1f69ea710 GPRS/GPRS.h --- a/GPRS/GPRS.h Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* - GPRS.h - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef __GPRS_H__ -#define __GPRS_H__ - -#include "mbed.h" -#include "modem.h" - -#define DEFAULT_WAIT_RESP_TIMEOUT 500 -#define MAX_SOCK_NUM 7 //(0~6) -#define FIELD_BOX 0 -enum Protocol { - CLOSED = 0, - TCP = 1, - UDP = 2, -}; - -/** The GPRS class - * - */ -class GPRS: public Modem -{ - -public: - /** Constructor - * @param tx mbed pin to use for tx line of Serial interface - * @param rx mbed pin to use for rx line of Serial interface - * @param baudRate serial communicate baud rate - * @param apn name of the gateway for GPRS to connect to the network - * @param userName apn's username, usually is NULL - * @param passWord apn's password, usually is NULL - */ - GPRS(PinName tx, PinName rx, int baudRate, const char* apn, const char* userName = NULL, const char *passWord = NULL); - - /** Get instance of GPRS class - */ - static GPRS* getInstance() { - return inst; - }; - - /** Connect the GPRS module to the network. - * @return true if connected, false otherwise - */ - bool join(void); - // added by Noah Milam - void start_server(); - void send_SMS(char*, char*); - char* read_SMS(); - void listen_server(); - - // end of what Noah Milam added - /** Disconnect the GPRS module from the network - * @returns true if successful - */ - bool disconnect(void); - - /** Close a tcp connection - * @returns true if successful - */ - bool close(int socket); - - /** Open a tcp/udp connection with the specified host on the specified port - * @param socket an endpoint of an inter-process communication flow of GPRS module,for SIM900 module, it is in [0,6] - * @param ptl protocol for socket, TCP/UDP can be choosen - * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established) - * @param port port - * @param timeout wait seconds till connected - * @returns true if successful - */ - bool connect(int socket, Protocol ptl, const char * host, int port, int timeout = DEFAULT_TIMEOUT); - - /** Set the protocol (UDP or TCP) - * @param socket socket - * @param p protocol - * @returns true if successful - */ - bool setProtocol(int socket, Protocol p); - - /** Reset the GPRS module - */ - void reset(); - - /** Check if GPRS module is readable or not - * @returns true if readable - */ - bool readable(void); - - /** Wait a few time to check if GPRS module is readable or not - * @param socket socket - * @param wait_time time of waiting - */ - int wait_readable(int socket, int wait_time); - - /** Wait a few time to check if GPRS module is writeable or not - * @param socket socket - * @param wait_time time of waiting - */ - int wait_writeable(int socket, int req_size); - - /** Check if a tcp link is active - * @returns true if successful - */ - bool is_connected(int socket); - - /** Send data to socket - * @param socket socket - * @param str string to be sent - * @param len string length - * @returns return bytes that actually been send - */ - int send(int socket, const char * str, int len); - - /** Read data from socket - * @param socket socket - * @param buf buffer that will store the data read from socket - * @param len string length need to read from socket - * @returns bytes that actually read - */ - int recv(int socket, char* buf, int len); - - /** Convert the host to ip - * @param host host ip string, ex. 10.11.12.13 - * @param ip long int ip address, ex. 0x11223344 - * @returns true if successful - */ - bool gethostbyname(const char* host, uint32_t* ip); - - /** get the cell tower time */ - char* getCellTime(); - /** set the cell time */ - void setCellTime(); - int new_socket(); - uint16_t new_port(); - uint32_t _ip; - char *phoneNumber; - char* cellTime; - bool preInit(); -protected: - - - bool checkSIMStatus(void); - uint32_t str_to_ip(const char* str); - static GPRS* inst; - int socketID; - const char* _apn; - const char* _userName; - const char* _passWord; -}; - -#endif
diff -r f46576c40722 -r 0ce1f69ea710 GPRS/modem/modem.cpp --- a/GPRS/modem/modem.cpp Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -/* - modem.cpp - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "modem.h" -//Serial pc(USBTX,USBRX); -extern SDFileSystem sd; //MOSI, MISO, SCLK, SSEL. Tested on K64F, correct pins. -AnalogIn LM35(PTB2); -// added by Noah Milam -void Modem::gprs_response() -{ - printf("\nlistening for client\n"); - char buffer[100]; - int count = 0; - - mkdir("/sd/mydir", 0777); // makes directory if needed - FILE *fp = fopen("/sd/mydir/chemData.csv", "w"); // creats new file to write - fprintf(fp,"phone Number,chem data, latitude,longitude\n"); // writes in a header for the table - fclose(fp); // closes file - - while(1) - { if(serialModem.readable()) { - - while(serialModem.readable()) { - char c = serialModem.getc(); - buffer[count++] = c; - //pc.puts(&c); - if(count == 64) break; - } - - if(buffer[0] != '\0'){ - buffer[count] = '\0'; - FILE *fp = fopen("/sd/mydir/chemicalData.csv", "a"); // opens file to append it - fprintf(fp,"%s\n",buffer);//writes to file - fclose(fp); // closes file - - printf("%s \n",buffer); - for(int i = 0; i < count+2; i++) { - buffer[i] = NULL; - } - } - count = 0; - } - } -} - -void Modem::wait_for_sms(){ - printf("waiting for message\n"); - while(1){ - if(serialModem.readable()){ - return; - } - } -} -void Modem::get_message(){ - char tempStr[30]; - int count= 0; - int line_count = 0; - for(int i= 0;i < strlen(IPAdd);i++){ - if(line_count == 3){ - tempStr[count++] = IPAdd[i]; - } - if(IPAdd[i] == '\n'){ - line_count++; - } - } - tempStr[count - 2] = '\0'; - count++; - strncpy(IPAdd, tempStr, count); - printf("IP Addr > %s \n", IPAdd); - printf("text size > %d\n",strlen(IPAdd)); - } -void Modem::storeResp(){ - char buffer[100]; - int count = 0; - timeCnt.start(); - while(timeCnt.read() < 5) - { - while(serialModem.readable()) { - char c = serialModem.getc(); - buffer[count++] = c; - } - } - timeCnt.stop(); - timeCnt.reset(); - buffer[count] = '\0'; - - strncpy(IPAdd, buffer, count); - printf("original>> %s",IPAdd); - printf("size of text > %d",strlen(IPAdd)); - count = 0; - get_message(); -} - -char* Modem::get_server_IP(){ - return IPAdd; -} -//end added by Noah Milam -char Modem::readByte(void) -{ - return serialModem.getc(); -} - -bool Modem::readable() -{ - return serialModem.readable(); -} - -int Modem::readBuffer(char *buffer,int count, unsigned int timeOut) -{ - int i = 0; - timeCnt.start(); - while(1) { - while (serialModem.readable()) { - char c = serialModem.getc(); - buffer[i++] = c; - if(i >= count)break; - } - if(i >= count)break; - if(timeCnt.read() > timeOut) { - timeCnt.stop(); - timeCnt.reset(); - break; - } - } - return 0; -} - -void Modem::cleanBuffer(char *buffer, int count) -{ - for(int i=0; i < count; i++) { - buffer[i] = '\0'; - } -} - -void Modem::sendCmd(const char* cmd) -{ - serialModem.puts(cmd); -} -void Modem::sendCmdResp(const char* cmd) -{ - serialModem.puts(cmd); - getResp(); -} -void Modem::getResp() -{ - char buffer[1000]; - int count = 0; - timeCnt.start(); - while(timeCnt.read() < 5) - { while(serialModem.readable()) { - char c = serialModem.getc(); - buffer[count++] = c; - } - } - timeCnt.stop(); - timeCnt.reset(); - buffer[count] = '\0'; - printf("Response:--%s--\r\n",buffer); - for(int i = 0; i < count+2; i++) { - buffer[i] = NULL; - } - count = 0; -} - - -void Modem::sendATTest(void) -{ - sendCmdAndWaitForResp("AT\r\n","OK",DEFAULT_TIMEOUT,CMD); -} - -bool Modem::respCmp(const char *resp, unsigned int len, unsigned int timeout) -{ - int sum=0; - timeCnt.start(); - - while(1) { - if(serialModem.readable()) { - char c = serialModem.getc(); - sum = (c==resp[sum]) ? sum+1 : 0; - if(sum == len)break; - } - if(timeCnt.read() > timeout) { - timeCnt.stop(); - timeCnt.reset(); - return false; - } - } - timeCnt.stop(); - timeCnt.reset(); - - return true; -} - -int Modem::waitForResp(const char *resp, unsigned int timeout,DataType type) -{ - int len = strlen(resp); - int sum=0; - timeCnt.start(); - - while(1) { - if(serialModem.readable()) { - char c = serialModem.getc(); - sum = (c==resp[sum]) ? sum+1 : 0; - if(sum == len)break; - } - if(timeCnt.read() > timeout) { - timeCnt.stop(); - timeCnt.reset(); - return -1; - } - } - - timeCnt.stop(); - timeCnt.reset(); - - if(type == CMD) { - while(serialModem.readable()) { - char c = serialModem.getc(); - } - - } - return 0; -} - -int Modem::sendCmdAndWaitForResp(const char* data, const char *resp, unsigned timeout,DataType type) -{ - sendCmd(data); - int response = waitForResp(resp,timeout,type); - printf("Response: --%s--\r\n", resp); - return response; -}
diff -r f46576c40722 -r 0ce1f69ea710 GPRS/modem/modem.h --- a/GPRS/modem/modem.h Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* - modem.h - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef __MODEM_H__ -#define __MODEM_H__ - -#include "mbed.h" -#include "SDFileSystem.h" -#define DEFAULT_TIMEOUT 1 - -enum DataType { - CMD = 0, - DATA = 1, -}; - -/** Modem class. - * Used for Modem communication. attention that Modem module communicate with MCU in serial protocol - */ -class Modem -{ - -public: - /** Create Modem Instance - * @param tx uart transmit pin to communicate with Modem - * @param rx uart receive pin to communicate with Modem - * @param baudRate baud rate of uart communication - */ - Modem(PinName tx, PinName rx, int baudRate) : serialModem(tx, rx) { - serialModem.baud(baudRate); - }; - // added by Noah Milam - char IPAdd[100]; - void sendCmdResp(const char*); - void getResp(); - void gprs_response(); - void storeResp(); - void wait_for_sms(); - void get_message(); - char* get_server_IP(); - // - Serial serialModem; -protected: - /** Power on Modem - */ - void preInit(void); - - /** check serialModem is readable or not - * @returns - * true on readable - * false on not readable - */ - bool readable(); - - /** read one byte from serialModem - * @returns - * one byte read from serialModem - */ - char readByte(void); - - /** read from Modem module and save to buffer array - * @param buffer buffer array to save what read from Modem module - * @param count the maximal bytes number read from Modem module - * @param timeOut time to wait for reading from Modem module - * @returns - * 0 on success - * -1 on error - */ - int readBuffer(char* buffer,int count, unsigned int timeOut); - - - /** clean Buffer - * @param buffer buffer to clean - * @param count number of bytes to clean - */ - void cleanBuffer(char* buffer, int count); - - /** send AT command to Modem module - * @param cmd command array which will be send to GPRS module - */ - void sendCmd(const char* cmd); - - /**send "AT" to Modem module - */ - void sendATTest(void); - - /** compare the response from GPRS module with a string - * @param resp buffer to be compared - * @param len length that will be compared - * @param timeout waiting seconds till timeout - */ - bool respCmp(const char *resp, unsigned int len, unsigned int timeout); - - /** check Modem module response before time out - * @param *resp correct response which Modem module will return - * @param *timeout waiting seconds till timeout - * @returns - * 0 on success - * -1 on error - */ - int waitForResp(const char *resp, unsigned int timeout,DataType type); - - /** send AT command to GPRS module and wait for correct response - * @param *cmd AT command which will be send to GPRS module - * @param *resp correct response which GPRS module will return - * @param *timeout waiting seconds till timeout - * @returns - * 0 on success - * -1 on error - */ - int sendCmdAndWaitForResp(const char* data, const char *resp, unsigned timeout,DataType type); - - Timer timeCnt; - -private: - -}; - -#endif
diff -r f46576c40722 -r 0ce1f69ea710 MBed_Adafruit-GPS-Library.lib --- a/MBed_Adafruit-GPS-Library.lib Sat Dec 19 21:48:00 2015 +0000 +++ b/MBed_Adafruit-GPS-Library.lib Sat Dec 19 21:58:45 2015 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mlee350/code/MBed_Adafruit-GPS-Library/#f6a84ae4c66f +http://mbed.org/users/mlee350/code/MBed_Adafruit-GPS-Library/#a23e3099bb0a
diff -r f46576c40722 -r 0ce1f69ea710 Socket.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Socket.lib Sat Dec 19 21:58:45 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/DeWayneDennis/code/Socket/#b49935f48132
diff -r f46576c40722 -r 0ce1f69ea710 Socket/Socket.cpp --- a/Socket/Socket.cpp Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* - Socket.cpp - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "Socket.h" - -Socket::Socket() : _sock_fd(-1) { - gprs = GPRS::getInstance(); - if (gprs == NULL) { - error("Socket constructor error: no GPRS instance available!\r\n"); - } -} - -void Socket::set_blocking(bool blocking, unsigned int timeout) -{ - //nothing to do for GPRS -} -int Socket::close() { - return (gprs->close(_sock_fd)) ? 0 : -1; -} - -Socket::~Socket() { - close(); -}
diff -r f46576c40722 -r 0ce1f69ea710 Socket/Socket.h --- a/Socket/Socket.h Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - Socket.h - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ -#ifndef SOCKET_H_ -#define SOCKET_H_ - -#include "GPRS.h" - -/** Socket file descriptor and select wrapper - */ -class Socket { -public: - /** Socket - */ - Socket(); - - void set_blocking(bool blocking, unsigned int timeout=1); - - /** Close the socket file descriptor - */ - int close(); - - ~Socket(); - -protected: - int _sock_fd; - GPRS* gprs; -}; - - -#endif /* SOCKET_H_ */
diff -r f46576c40722 -r 0ce1f69ea710 Socket/TCPSocketConnection.cpp --- a/Socket/TCPSocketConnection.cpp Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* - TCPSocketConnection.cpp - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "TCPSocketConnection.h" - -TCPSocketConnection::TCPSocketConnection() -{ -} - -int TCPSocketConnection::connect(const char* host, const int port) -{ - printf(">%s<",host); - if (_sock_fd < 0) { - _sock_fd = gprs->new_socket(); - if (_sock_fd < 0) { - return -1; - } - } - - if (!gprs->connect(_sock_fd, TCP, host, port)) { - return false; - } - return true; -} - -bool TCPSocketConnection::is_connected(void) -{ - return gprs->is_connected(_sock_fd); -} - -int TCPSocketConnection::send(char* data, int length) -{ - printf("Current Socket is %d \r\n", _sock_fd); - int size = gprs->wait_writeable(_sock_fd, length); - if (size < 0) { - return -1; - } - if (size > length) { - size = length; - } - return gprs->send(_sock_fd, data, size); -} - -int TCPSocketConnection::send_all(char* data, int length) -{ - return send(data,length); -} -void TCPSocketConnection::setSocket(int currentSocket) -{ - _sock_fd = currentSocket; -} -int TCPSocketConnection::receive(char* data, int length) -{ -#if 0 - if (size < 0) { - return -1; - } - if(size == 0) { - size = gprs->wait_readable(_sock_fd, DEFAULT_TIMEOUT); - } - - if(size > length) { - size = size - length; - } else { - length = size; - size = -1; - } -#endif - int size = gprs->wait_readable(_sock_fd, DEFAULT_TIMEOUT); - return gprs->recv(_sock_fd, data, size>length?length:size); -} - -int TCPSocketConnection::receive_all(char* data, int length) -{ - return receive(data,length); -}
diff -r f46576c40722 -r 0ce1f69ea710 Socket/TCPSocketConnection.h --- a/Socket/TCPSocketConnection.h Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* - TCPSocketConnection.h - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef TCPSOCKET_H -#define TCPSOCKET_H - -#include "Socket.h" - -/** TCP socket connection - */ -class TCPSocketConnection: public Socket -{ - friend class TCPSocketServer; - -public: - /** TCP socket connection - */ - TCPSocketConnection(); - - /** Connects this TCP socket to the server - \param host The host to connect to. It can either be an IP Address or a hostname that will be resolved with DNS. - \param port The host's port to connect to. - \return 0 on success, -1 on failure. - */ - int connect(const char* host, const int port); - - /** Check if the socket is connected - \return true if connected, false otherwise. - */ - bool is_connected(void); - - /** Send data to the remote host. - \param data The buffer to send to the host. - \param length The length of the buffer to send. - \return the number of written bytes on success (>=0) or -1 on failure - */ - int send(char* data, int length); - - /** Send all the data to the remote host. - \param data The buffer to send to the host. - \param length The length of the buffer to send. - \return the number of written bytes on success (>=0) or -1 on failure - */ - int send_all(char* data, int length); - - /** Receive data from the remote host. - \param data The buffer in which to store the data received from the host. - \param length The maximum length of the buffer. - \return the number of received bytes on success (>=0) or -1 on failure - */ - int receive(char* data, int length); - - /** Receive all the data from the remote host. - \param data The buffer in which to store the data received from the host. - \param length The maximum length of the buffer. - \return the number of received bytes on success (>=0) or -1 on failure - */ - int receive_all(char* data, int length); - - /* set the current socket */ - void setSocket(int currentSocket); -}; - -#endif
diff -r f46576c40722 -r 0ce1f69ea710 Socket/TCPSocketServer.h --- a/Socket/TCPSocketServer.h Sat Dec 19 21:48:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - TCPSocketServer.h - 2014 Copyright (c) Seeed Technology Inc. All right reserved. - - Author:lawliet zou(lawliet.zou@gmail.com) - 2014-2-24 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ -#ifndef TCPSOCKETSERVER_H -#define TCPSOCKETSERVER_H - -#include "Socket/Socket.h" -#include "TCPSocketConnection.h" - -/** TCP Server. - */ -class TCPSocketServer : public Socket -{ -public: - /** Instantiate a TCP Server. - */ - TCPSocketServer(); - - /** Bind a socket to a specific port. - \param port The port to listen for incoming connections on. - \return 0 on success, -1 on failure. - */ - int bind(int port); - - /** Start listening for incoming connections. - \param backlog number of pending connections that can be queued up at any - one time [Default: 1]. - \return 0 on success, -1 on failure. - */ - int listen(int backlog=1); - - /** Accept a new connection. - \param connection A TCPSocketConnection instance that will handle the incoming connection. - \return 0 on success, -1 on failure. - */ - int accept(TCPSocketConnection& connection); -}; - -#endif