ghrh

gprs.h

Committer:
lawliet
Date:
2014-01-10
Revision:
3:48ee24a4b0f3
Parent:
2:16985da3a446
Child:
4:63a2619b423b

File content as of revision 3:48ee24a4b0f3:

/*
  gprs.h
  2013 Copyright (c) Seeed Technology Inc.  All right reserved.

  Author:lawliet.zou@gmail.com
  2013-11-14

  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 <stdio.h>
#include "mbed.h"

#define DEFAULT_TIMEOUT     5

/** GPRS class.
 *  Used for mobile communication. attention that GPRS module communicate with MCU in serial protocol
 */
class GPRS
{
public:
    /** Create GPRS instance
     *  @param tx  uart transmit pin to communicate with GPRS module
     *  @param rx  uart receive pin to communicate with GPRS module
     *  @param baudRate baud rate of uart communication
     *  @param number default phone number during mobile communication
     */
    GPRS(PinName tx, PinName rx, int baudRate,char *number) : gprsSerial(tx, rx) {
        gprsSerial.baud(baudRate);
        phoneNumber = number;
    };

    /** init GPRS module including SIM card check & signal strength & network check
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int init(void);

    /** read from GPRS module and save to buffer array
     *  @param  *buffer buffer array to save what read from GPRS module
     *  @param  *count  the maximal bytes number read from GPRS module
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int readBuffer(char *buffer,int count);

    /** send AT command to GPRS module
     *  @param  *cmd command array which will be send to GPRS module
     */
    void sendCmd(char *cmd);

    /** check GPRS module response before timeout
     *  @param  *resp   correct response which GPRS module will return
     *  @param  *timeout    waiting seconds till timeout
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int waitForResp(char *resp, int timeout);

    /** 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(char *cmd, char *resp, int timeout);

    /** check SIM card' Status
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int checkSIMStatus(void);

    /** check signal strength
     *  @returns
     *      signal strength in number(ex 3,4,5,6,7,8...) on success
     *      -1 on error
     */
    int checkSignalStrength(void);

    /** check network is ok or not
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int networkInit(void);

    /** send text SMS
     *  @param  *number    phone number which SMS will be send to
     *  @param  *data   message that will be send to
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int sendSMS(char *number, char *data);

    /** read SMS if get a SMS
     *  @param  *buffer    buffer that get from GPRS module(when getting a SMS, GPRS module will return a buffer array)
     *  @param  *message   buffer used to get SMS message
     *  @param  check    whether to check phone number(we may only want to read SMS from specified phone number)
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int readSMS(char *buffer, char *message, bool check);

    /** delete SMS message on SIM card
     *  @param  *index    the index number which SMS message will be delete
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int deleteSMS(int index);

    /** call someone
     *  @param  *number    the phone number which you want to call
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int callUp(char *number);

    /** auto answer if coming a call
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int answer(void);

    /** a loop to wait for some event. if a call comes in, it will auto answer it and if a SMS message comes in, it will read the message
     *  @param  *check    whether to check phone number when get event
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int loop(bool check);

    /** build TCP connect
     *  @param  *ip    ip address which will connect to
     *  @param  *port   TCP server' port number
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int connectTCP(char *ip, char *port);

    /** send data to TCP server
     *  @param  *data    data that will be send to TCP server
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int sendTCPData(char *data);

    /** close TCP connection
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int closeTCP(void);

    /** close TCP service
     *  @returns
     *      0 on success
     *      -1 on error
     */
    int shutTCP(void);

    /** used for serial debug, you can specify tx and rx pin and then communicate with GPRS module with common AT commands
     */
    void serialDebug(PinName tx, PinName rx);

private:
    Serial gprsSerial;
    Timer timeCnt;
    char *phoneNumber;
};

#endif