all the GPRS code

Dependents:   DCS_FINAL_CODE

Committer:
DeWayneDennis
Date:
Sat Dec 19 21:57:28 2015 +0000
Revision:
0:b27750bf16d6
Final Code 12/19/2015

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DeWayneDennis 0:b27750bf16d6 1 /*
DeWayneDennis 0:b27750bf16d6 2 GPRS.h
DeWayneDennis 0:b27750bf16d6 3 2014 Copyright (c) Seeed Technology Inc. All right reserved.
DeWayneDennis 0:b27750bf16d6 4
DeWayneDennis 0:b27750bf16d6 5 Author:lawliet zou(lawliet.zou@gmail.com)
DeWayneDennis 0:b27750bf16d6 6 2014-2-24
DeWayneDennis 0:b27750bf16d6 7
DeWayneDennis 0:b27750bf16d6 8 This library is free software; you can redistribute it and/or
DeWayneDennis 0:b27750bf16d6 9 modify it under the terms of the GNU Lesser General Public
DeWayneDennis 0:b27750bf16d6 10 License as published by the Free Software Foundation; either
DeWayneDennis 0:b27750bf16d6 11 version 2.1 of the License, or (at your option) any later version.
DeWayneDennis 0:b27750bf16d6 12
DeWayneDennis 0:b27750bf16d6 13 This library is distributed in the hope that it will be useful,
DeWayneDennis 0:b27750bf16d6 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
DeWayneDennis 0:b27750bf16d6 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
DeWayneDennis 0:b27750bf16d6 16 Lesser General Public License for more details.
DeWayneDennis 0:b27750bf16d6 17
DeWayneDennis 0:b27750bf16d6 18 You should have received a copy of the GNU Lesser General Public
DeWayneDennis 0:b27750bf16d6 19 License along with this library; if not, write to the Free Software
DeWayneDennis 0:b27750bf16d6 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
DeWayneDennis 0:b27750bf16d6 21 */
DeWayneDennis 0:b27750bf16d6 22
DeWayneDennis 0:b27750bf16d6 23 #ifndef __GPRS_H__
DeWayneDennis 0:b27750bf16d6 24 #define __GPRS_H__
DeWayneDennis 0:b27750bf16d6 25
DeWayneDennis 0:b27750bf16d6 26 #include "mbed.h"
DeWayneDennis 0:b27750bf16d6 27 #include "modem.h"
DeWayneDennis 0:b27750bf16d6 28
DeWayneDennis 0:b27750bf16d6 29 #define DEFAULT_WAIT_RESP_TIMEOUT 500
DeWayneDennis 0:b27750bf16d6 30 #define MAX_SOCK_NUM 7 //(0~6)
DeWayneDennis 0:b27750bf16d6 31 #define FIELD_BOX 0
DeWayneDennis 0:b27750bf16d6 32 enum Protocol {
DeWayneDennis 0:b27750bf16d6 33 CLOSED = 0,
DeWayneDennis 0:b27750bf16d6 34 TCP = 1,
DeWayneDennis 0:b27750bf16d6 35 UDP = 2,
DeWayneDennis 0:b27750bf16d6 36 };
DeWayneDennis 0:b27750bf16d6 37
DeWayneDennis 0:b27750bf16d6 38 /** The GPRS class
DeWayneDennis 0:b27750bf16d6 39 *
DeWayneDennis 0:b27750bf16d6 40 */
DeWayneDennis 0:b27750bf16d6 41 class GPRS: public Modem
DeWayneDennis 0:b27750bf16d6 42 {
DeWayneDennis 0:b27750bf16d6 43
DeWayneDennis 0:b27750bf16d6 44 public:
DeWayneDennis 0:b27750bf16d6 45 /** Constructor
DeWayneDennis 0:b27750bf16d6 46 * @param tx mbed pin to use for tx line of Serial interface
DeWayneDennis 0:b27750bf16d6 47 * @param rx mbed pin to use for rx line of Serial interface
DeWayneDennis 0:b27750bf16d6 48 * @param baudRate serial communicate baud rate
DeWayneDennis 0:b27750bf16d6 49 * @param apn name of the gateway for GPRS to connect to the network
DeWayneDennis 0:b27750bf16d6 50 * @param userName apn's username, usually is NULL
DeWayneDennis 0:b27750bf16d6 51 * @param passWord apn's password, usually is NULL
DeWayneDennis 0:b27750bf16d6 52 */
DeWayneDennis 0:b27750bf16d6 53 GPRS(PinName tx, PinName rx, int baudRate, const char* apn, const char* userName = NULL, const char *passWord = NULL);
DeWayneDennis 0:b27750bf16d6 54
DeWayneDennis 0:b27750bf16d6 55 /** Get instance of GPRS class
DeWayneDennis 0:b27750bf16d6 56 */
DeWayneDennis 0:b27750bf16d6 57 static GPRS* getInstance() {
DeWayneDennis 0:b27750bf16d6 58 return inst;
DeWayneDennis 0:b27750bf16d6 59 };
DeWayneDennis 0:b27750bf16d6 60
DeWayneDennis 0:b27750bf16d6 61 /** Connect the GPRS module to the network.
DeWayneDennis 0:b27750bf16d6 62 * @return true if connected, false otherwise
DeWayneDennis 0:b27750bf16d6 63 */
DeWayneDennis 0:b27750bf16d6 64 bool join(void);
DeWayneDennis 0:b27750bf16d6 65 // added by Noah Milam
DeWayneDennis 0:b27750bf16d6 66 void start_server();
DeWayneDennis 0:b27750bf16d6 67 void send_SMS(char*, char*);
DeWayneDennis 0:b27750bf16d6 68 char* read_SMS();
DeWayneDennis 0:b27750bf16d6 69 void listen_server();
DeWayneDennis 0:b27750bf16d6 70
DeWayneDennis 0:b27750bf16d6 71 // end of what Noah Milam added
DeWayneDennis 0:b27750bf16d6 72 /** Disconnect the GPRS module from the network
DeWayneDennis 0:b27750bf16d6 73 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 74 */
DeWayneDennis 0:b27750bf16d6 75 bool disconnect(void);
DeWayneDennis 0:b27750bf16d6 76
DeWayneDennis 0:b27750bf16d6 77 /** Close a tcp connection
DeWayneDennis 0:b27750bf16d6 78 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 79 */
DeWayneDennis 0:b27750bf16d6 80 bool close(int socket);
DeWayneDennis 0:b27750bf16d6 81
DeWayneDennis 0:b27750bf16d6 82 /** Open a tcp/udp connection with the specified host on the specified port
DeWayneDennis 0:b27750bf16d6 83 * @param socket an endpoint of an inter-process communication flow of GPRS module,for SIM900 module, it is in [0,6]
DeWayneDennis 0:b27750bf16d6 84 * @param ptl protocol for socket, TCP/UDP can be choosen
DeWayneDennis 0:b27750bf16d6 85 * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established)
DeWayneDennis 0:b27750bf16d6 86 * @param port port
DeWayneDennis 0:b27750bf16d6 87 * @param timeout wait seconds till connected
DeWayneDennis 0:b27750bf16d6 88 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 89 */
DeWayneDennis 0:b27750bf16d6 90 bool connect(int socket, Protocol ptl, const char * host, int port, int timeout = DEFAULT_TIMEOUT);
DeWayneDennis 0:b27750bf16d6 91
DeWayneDennis 0:b27750bf16d6 92 /** Set the protocol (UDP or TCP)
DeWayneDennis 0:b27750bf16d6 93 * @param socket socket
DeWayneDennis 0:b27750bf16d6 94 * @param p protocol
DeWayneDennis 0:b27750bf16d6 95 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 96 */
DeWayneDennis 0:b27750bf16d6 97 bool setProtocol(int socket, Protocol p);
DeWayneDennis 0:b27750bf16d6 98
DeWayneDennis 0:b27750bf16d6 99 /** Reset the GPRS module
DeWayneDennis 0:b27750bf16d6 100 */
DeWayneDennis 0:b27750bf16d6 101 void reset();
DeWayneDennis 0:b27750bf16d6 102
DeWayneDennis 0:b27750bf16d6 103 /** Check if GPRS module is readable or not
DeWayneDennis 0:b27750bf16d6 104 * @returns true if readable
DeWayneDennis 0:b27750bf16d6 105 */
DeWayneDennis 0:b27750bf16d6 106 bool readable(void);
DeWayneDennis 0:b27750bf16d6 107
DeWayneDennis 0:b27750bf16d6 108 /** Wait a few time to check if GPRS module is readable or not
DeWayneDennis 0:b27750bf16d6 109 * @param socket socket
DeWayneDennis 0:b27750bf16d6 110 * @param wait_time time of waiting
DeWayneDennis 0:b27750bf16d6 111 */
DeWayneDennis 0:b27750bf16d6 112 int wait_readable(int socket, int wait_time);
DeWayneDennis 0:b27750bf16d6 113
DeWayneDennis 0:b27750bf16d6 114 /** Wait a few time to check if GPRS module is writeable or not
DeWayneDennis 0:b27750bf16d6 115 * @param socket socket
DeWayneDennis 0:b27750bf16d6 116 * @param wait_time time of waiting
DeWayneDennis 0:b27750bf16d6 117 */
DeWayneDennis 0:b27750bf16d6 118 int wait_writeable(int socket, int req_size);
DeWayneDennis 0:b27750bf16d6 119
DeWayneDennis 0:b27750bf16d6 120 /** Check if a tcp link is active
DeWayneDennis 0:b27750bf16d6 121 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 122 */
DeWayneDennis 0:b27750bf16d6 123 bool is_connected(int socket);
DeWayneDennis 0:b27750bf16d6 124
DeWayneDennis 0:b27750bf16d6 125 /** Send data to socket
DeWayneDennis 0:b27750bf16d6 126 * @param socket socket
DeWayneDennis 0:b27750bf16d6 127 * @param str string to be sent
DeWayneDennis 0:b27750bf16d6 128 * @param len string length
DeWayneDennis 0:b27750bf16d6 129 * @returns return bytes that actually been send
DeWayneDennis 0:b27750bf16d6 130 */
DeWayneDennis 0:b27750bf16d6 131 int send(int socket, const char * str, int len);
DeWayneDennis 0:b27750bf16d6 132
DeWayneDennis 0:b27750bf16d6 133 /** Read data from socket
DeWayneDennis 0:b27750bf16d6 134 * @param socket socket
DeWayneDennis 0:b27750bf16d6 135 * @param buf buffer that will store the data read from socket
DeWayneDennis 0:b27750bf16d6 136 * @param len string length need to read from socket
DeWayneDennis 0:b27750bf16d6 137 * @returns bytes that actually read
DeWayneDennis 0:b27750bf16d6 138 */
DeWayneDennis 0:b27750bf16d6 139 int recv(int socket, char* buf, int len);
DeWayneDennis 0:b27750bf16d6 140
DeWayneDennis 0:b27750bf16d6 141 /** Convert the host to ip
DeWayneDennis 0:b27750bf16d6 142 * @param host host ip string, ex. 10.11.12.13
DeWayneDennis 0:b27750bf16d6 143 * @param ip long int ip address, ex. 0x11223344
DeWayneDennis 0:b27750bf16d6 144 * @returns true if successful
DeWayneDennis 0:b27750bf16d6 145 */
DeWayneDennis 0:b27750bf16d6 146 bool gethostbyname(const char* host, uint32_t* ip);
DeWayneDennis 0:b27750bf16d6 147
DeWayneDennis 0:b27750bf16d6 148 /** get the cell tower time */
DeWayneDennis 0:b27750bf16d6 149 char* getCellTime();
DeWayneDennis 0:b27750bf16d6 150 /** set the cell time */
DeWayneDennis 0:b27750bf16d6 151 void setCellTime();
DeWayneDennis 0:b27750bf16d6 152 int new_socket();
DeWayneDennis 0:b27750bf16d6 153 uint16_t new_port();
DeWayneDennis 0:b27750bf16d6 154 uint32_t _ip;
DeWayneDennis 0:b27750bf16d6 155 char *phoneNumber;
DeWayneDennis 0:b27750bf16d6 156 char* cellTime;
DeWayneDennis 0:b27750bf16d6 157 bool preInit();
DeWayneDennis 0:b27750bf16d6 158 protected:
DeWayneDennis 0:b27750bf16d6 159
DeWayneDennis 0:b27750bf16d6 160
DeWayneDennis 0:b27750bf16d6 161 bool checkSIMStatus(void);
DeWayneDennis 0:b27750bf16d6 162 uint32_t str_to_ip(const char* str);
DeWayneDennis 0:b27750bf16d6 163 static GPRS* inst;
DeWayneDennis 0:b27750bf16d6 164 int socketID;
DeWayneDennis 0:b27750bf16d6 165 const char* _apn;
DeWayneDennis 0:b27750bf16d6 166 const char* _userName;
DeWayneDennis 0:b27750bf16d6 167 const char* _passWord;
DeWayneDennis 0:b27750bf16d6 168 };
DeWayneDennis 0:b27750bf16d6 169
DeWayneDennis 0:b27750bf16d6 170 #endif