a library to use GPRS like ethernet or wifi, which makes it possible to connect to the internet with your GPRS module

Dependencies:   BufferedSerial

Dependents:   ThinkSpeak_Test roam_v1 roam_v2 finalv3

Fork of GPRSInterface by wei zou

Committer:
yihui
Date:
Tue Mar 10 03:11:38 2015 +0000
Revision:
12:47488369a980
Parent:
10:652c23d73373
Child:
13:379ce1d51b88
only LPC11UXX or LPC176X uses BufferedSerial, as other targets are not tested.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lawliet 0:8ccbd963e74d 1 /*
lawliet 0:8ccbd963e74d 2 modem.h
lawliet 0:8ccbd963e74d 3 2014 Copyright (c) Seeed Technology Inc. All right reserved.
lawliet 0:8ccbd963e74d 4
lawliet 0:8ccbd963e74d 5 Author:lawliet zou(lawliet.zou@gmail.com)
lawliet 0:8ccbd963e74d 6 2014-2-24
lawliet 0:8ccbd963e74d 7
lawliet 0:8ccbd963e74d 8 This library is free software; you can redistribute it and/or
lawliet 0:8ccbd963e74d 9 modify it under the terms of the GNU Lesser General Public
lawliet 0:8ccbd963e74d 10 License as published by the Free Software Foundation; either
lawliet 0:8ccbd963e74d 11 version 2.1 of the License, or (at your option) any later version.
lawliet 0:8ccbd963e74d 12
lawliet 0:8ccbd963e74d 13 This library is distributed in the hope that it will be useful,
lawliet 0:8ccbd963e74d 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
lawliet 0:8ccbd963e74d 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
lawliet 0:8ccbd963e74d 16 Lesser General Public License for more details.
lawliet 0:8ccbd963e74d 17
lawliet 0:8ccbd963e74d 18 You should have received a copy of the GNU Lesser General Public
lawliet 0:8ccbd963e74d 19 License along with this library; if not, write to the Free Software
lawliet 0:8ccbd963e74d 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
lawliet 0:8ccbd963e74d 21 */
lawliet 0:8ccbd963e74d 22
lawliet 0:8ccbd963e74d 23 #ifndef __MODEM_H__
lawliet 0:8ccbd963e74d 24 #define __MODEM_H__
lawliet 0:8ccbd963e74d 25
yihui 12:47488369a980 26 #if defined(LPC11UXX) || defined (LPC176X)
yihui 10:652c23d73373 27 #include "BufferedSerial.h"
yihui 12:47488369a980 28 #else
yihui 12:47488369a980 29 #include "mbed.h"
yihui 12:47488369a980 30 #endif
lawliet 0:8ccbd963e74d 31
lawliet 0:8ccbd963e74d 32 #define DEFAULT_TIMEOUT 5
lawliet 0:8ccbd963e74d 33
lawliet 0:8ccbd963e74d 34 enum DataType {
lawliet 0:8ccbd963e74d 35 CMD = 0,
lawliet 0:8ccbd963e74d 36 DATA = 1,
lawliet 0:8ccbd963e74d 37 };
lawliet 0:8ccbd963e74d 38
lawliet 0:8ccbd963e74d 39 /** Modem class.
lawliet 0:8ccbd963e74d 40 * Used for Modem communication. attention that Modem module communicate with MCU in serial protocol
lawliet 0:8ccbd963e74d 41 */
lawliet 0:8ccbd963e74d 42 class Modem
lawliet 0:8ccbd963e74d 43 {
lawliet 0:8ccbd963e74d 44
lawliet 0:8ccbd963e74d 45 public:
lawliet 0:8ccbd963e74d 46 /** Create Modem Instance
lawliet 0:8ccbd963e74d 47 * @param tx uart transmit pin to communicate with Modem
lawliet 0:8ccbd963e74d 48 * @param rx uart receive pin to communicate with Modem
lawliet 0:8ccbd963e74d 49 * @param baudRate baud rate of uart communication
lawliet 0:8ccbd963e74d 50 */
lawliet 0:8ccbd963e74d 51 Modem(PinName tx, PinName rx, int baudRate) : serialModem(tx, rx) {
lawliet 0:8ccbd963e74d 52 serialModem.baud(baudRate);
lawliet 0:8ccbd963e74d 53 };
yihui 12:47488369a980 54
yihui 12:47488369a980 55 #if defined(LPC11UXX) || defined (LPC176X)
yihui 12:47488369a980 56 BufferedSerial serialModem;
yihui 12:47488369a980 57 #else
yihui 12:47488369a980 58 Serial serialModem;
yihui 12:47488369a980 59 #endif
lawliet 6:464ccda1ebcc 60
lawliet 1:7298a7950f65 61 protected:
lawliet 0:8ccbd963e74d 62 /** Power on Modem
lawliet 0:8ccbd963e74d 63 */
lawliet 0:8ccbd963e74d 64 void preInit(void);
lawliet 0:8ccbd963e74d 65
lawliet 0:8ccbd963e74d 66 /** check serialModem is readable or not
lawliet 0:8ccbd963e74d 67 * @returns
lawliet 0:8ccbd963e74d 68 * true on readable
lawliet 0:8ccbd963e74d 69 * false on not readable
lawliet 0:8ccbd963e74d 70 */
lawliet 0:8ccbd963e74d 71 bool readable();
lawliet 0:8ccbd963e74d 72
lawliet 0:8ccbd963e74d 73 /** read one byte from serialModem
lawliet 0:8ccbd963e74d 74 * @returns
lawliet 0:8ccbd963e74d 75 * one byte read from serialModem
lawliet 0:8ccbd963e74d 76 */
lawliet 0:8ccbd963e74d 77 char readByte(void);
lawliet 0:8ccbd963e74d 78
lawliet 0:8ccbd963e74d 79 /** read from Modem module and save to buffer array
lawliet 0:8ccbd963e74d 80 * @param buffer buffer array to save what read from Modem module
lawliet 0:8ccbd963e74d 81 * @param count the maximal bytes number read from Modem module
lawliet 0:8ccbd963e74d 82 * @param timeOut time to wait for reading from Modem module
lawliet 0:8ccbd963e74d 83 * @returns
lawliet 0:8ccbd963e74d 84 * 0 on success
lawliet 0:8ccbd963e74d 85 * -1 on error
lawliet 0:8ccbd963e74d 86 */
lawliet 0:8ccbd963e74d 87 int readBuffer(char* buffer,int count, unsigned int timeOut);
lawliet 0:8ccbd963e74d 88
lawliet 0:8ccbd963e74d 89
lawliet 0:8ccbd963e74d 90 /** clean Buffer
lawliet 0:8ccbd963e74d 91 * @param buffer buffer to clean
lawliet 0:8ccbd963e74d 92 * @param count number of bytes to clean
lawliet 0:8ccbd963e74d 93 */
lawliet 0:8ccbd963e74d 94 void cleanBuffer(char* buffer, int count);
lawliet 0:8ccbd963e74d 95
lawliet 0:8ccbd963e74d 96 /** send AT command to Modem module
lawliet 0:8ccbd963e74d 97 * @param cmd command array which will be send to GPRS module
lawliet 0:8ccbd963e74d 98 */
lawliet 0:8ccbd963e74d 99 void sendCmd(const char* cmd);
yihui 9:38800611a613 100
yihui 9:38800611a613 101 /** send data to Modem module
yihui 9:38800611a613 102 * @param data array which will be send to GPRS module
yihui 9:38800611a613 103 * @param len data length
yihui 9:38800611a613 104 */
yihui 9:38800611a613 105 void sendData(const char* data, int len);
lawliet 0:8ccbd963e74d 106
lawliet 0:8ccbd963e74d 107 /**send "AT" to Modem module
lawliet 0:8ccbd963e74d 108 */
lawliet 0:8ccbd963e74d 109 void sendATTest(void);
lawliet 0:8ccbd963e74d 110
lawliet 0:8ccbd963e74d 111 /** compare the response from GPRS module with a string
lawliet 0:8ccbd963e74d 112 * @param resp buffer to be compared
lawliet 0:8ccbd963e74d 113 * @param len length that will be compared
lawliet 0:8ccbd963e74d 114 * @param timeout waiting seconds till timeout
lawliet 0:8ccbd963e74d 115 */
lawliet 0:8ccbd963e74d 116 bool respCmp(const char *resp, unsigned int len, unsigned int timeout);
lawliet 0:8ccbd963e74d 117
lawliet 0:8ccbd963e74d 118 /** check Modem module response before time out
lawliet 0:8ccbd963e74d 119 * @param *resp correct response which Modem module will return
lawliet 0:8ccbd963e74d 120 * @param *timeout waiting seconds till timeout
lawliet 0:8ccbd963e74d 121 * @returns
lawliet 0:8ccbd963e74d 122 * 0 on success
lawliet 0:8ccbd963e74d 123 * -1 on error
lawliet 0:8ccbd963e74d 124 */
lawliet 0:8ccbd963e74d 125 int waitForResp(const char *resp, unsigned int timeout,DataType type);
lawliet 0:8ccbd963e74d 126
lawliet 0:8ccbd963e74d 127 /** send AT command to GPRS module and wait for correct response
lawliet 0:8ccbd963e74d 128 * @param *cmd AT command which will be send to GPRS module
lawliet 0:8ccbd963e74d 129 * @param *resp correct response which GPRS module will return
lawliet 0:8ccbd963e74d 130 * @param *timeout waiting seconds till timeout
lawliet 0:8ccbd963e74d 131 * @returns
lawliet 0:8ccbd963e74d 132 * 0 on success
lawliet 0:8ccbd963e74d 133 * -1 on error
lawliet 0:8ccbd963e74d 134 */
lawliet 0:8ccbd963e74d 135 int sendCmdAndWaitForResp(const char* data, const char *resp, unsigned timeout,DataType type);
lawliet 0:8ccbd963e74d 136
lawliet 0:8ccbd963e74d 137 Timer timeCnt;
lawliet 0:8ccbd963e74d 138
lawliet 0:8ccbd963e74d 139 private:
lawliet 0:8ccbd963e74d 140
lawliet 0:8ccbd963e74d 141 };
lawliet 0:8ccbd963e74d 142
lawliet 0:8ccbd963e74d 143 #endif