3G Shield library, port for mbed. (from http://3gsa.org/ ) see: https://developer.mbed.org/users/phsfan/notebook/phsshield/

Dependents:   PHSShield_test PHSShield_connectTCP PHSShield_Twitter PHSShield_httpGET

a3gs.h

Committer:
phsfan
Date:
2015-03-10
Revision:
0:ca471c239d5f

File content as of revision 0:ca471c239d5f:

//***********************************************************
//	a3gs.h -- IEM 3G Sheild for Arduino Control Library
//
//	History:
//		R1.0 2012/10/06  1st Release for IEM 3G Shiled(Ver1.0)
//		R1.1 2012/10/14  2nd Release(Operate by few memories)
//						 (modify sendSMS(),onSMSReceived(),httpGET(),httpPOST(),tweet(),connectTCP())
//		R1.2 2012/10/28  Bug fix (httpGET(), httpPOST(), tweet(), availableSMS() and redSMS())
//		R1.3 2013/01/01  Support "https" in httpGET() and httpPost()
//		R1.4 2013/04/16  Bug fix (discardUntil() has never return)
//		R2.0 2013/07/10  Change interface of TCP/IP and discardUntil(), some bugs fix
//						 a3gsMAX_TWEET_LENGTH set as 60 (bytes)
//		R2.1 2013/08/17  Buf fix (discardUntil() has never return)
//		R2.2 2013/10/27  Bug fix (read(res, reslength))
//		R2.3 2014/07/06  Support binary data in read() and add new version read() function, bug fix write()
//		R3.0 2014/08/30  Support for gw3g R2.0 and add follow functions:
//						   setAirplaneMode(), put(), get()
//
//	Author:
//		3G Shield Alliance and Atushi Daikoku
//
//	Notes:
//		Lower compatible with Arduino GSM/GPRS Shield library.
//		Notices as bellow:
//		- Use SoftwareSerial library (RxD is D4, TxD is D5).
//		- Use Interrupt 0(D2) for SMS arrival notification.
//		- Use D6 and D7 are used for Power control.
//		If you want to change UART baudrate then define "a3gsBAUDRATE"
//		symbol before #include "a3gs.h" statement.
//***********************************************************
/* Modified by 2015 phsfan
 *  for ABIT PHS Shield on mbed
 */

#ifndef _A3GS_H_
#define _A3GS_H_  1

#include "mbed.h"

/*
	Define constants
*/
//	for compatibility of GSM.h
#define	ctrlz					26		// Ascii character for ctr+z. End of a SMS.
#define	cr						13		// Ascii character for carriage return. 
#define	lf						10		// Ascii character for line feed. 

//	Basic constants
#define	a3gsBAUDRATE			4800	// Default UART baudrate if "a3gsBAUDRATE" is undefined
#define	a3gsDATE_SIZE			11		// date space size ("YYYY/MM/DD\0" format, used in getTime(), included '\0')
#define	a3gsTIME_SIZE			9		// time space size ("HH:MM:SS\0" format(hour is 24h-way), used in getTime(), included '\0')
#define	a3gsCS_ASCII			0		// SMS Text Char Code: ASCII (used in sendSMS())
#define	a3gsCS_UNICODE			1		// SMS Text Char Code: UNICODE(Little Endian) (used in sendSMS())
#define	a3gsIMEI_SIZE			16		// imei space size ("99..9\0" format, used in getIMEI(), included '\0')
#define	a3gsDEFAULT_PORT		0		// Default port number(for httpGET() and httpPOST())

//	Return values in general
#define	a3gsSUCCESS				0
#define	a3gsERROR				(-1)

//	Maximum lengths
#define	a3gsMAX_VERSION_LENGTH	5		// Maximum bytes of Version number(used in getVersion())
#define	a3gsMAX_SMS_LENGTH		100		// Maximum bytes of SMS message(used in sendSMS())
#define	a3gsMAX_MSN_LENGTH		11		// Maximum bytes of Phone Number in Japan(used in readSMS())
#define	a3gsMAX_PROFILE_NUMBER	16		// Profile number is 1..a3gsMAX_PROFILE_NUMBER
#define	a3gsMAX_HOST_LENGTH		128		// Maximum length of host name
#define	a3gsMAX_DATA_LENGTH		1024	// Maximum length of data(at read/write)
#define	a3gsMAX_STORAGE_NUMBER  30		// Maximum number of storages
#define	a3gsMAX_STORAGE_LENGTH  1023	// Maximum storages size(bytes)

#define	a3gsMAX_URL_LENGTH		256		// Maximum length of URL(used in httpGET() and httpPOST())
#define	a3gsMAX_RESULT_LENGTH	1024	// Maximum length of result(used in httpGET() and httpPOST())
#define	a3gsMAX_HEADER_LENGTH	512		// Maximum length of header(used in httpPOST())
#define	a3gsMAX_BODY_LENGTH		1024	// Maximum length of header(used in httpPOST())
#define	a3gsMAX_TWEET_LENGTH	140		// Maximum length of Tweet message(used in tweet())

//	Return values of getService()
#define	a3gsSRV_NO				0		// Out of service
#define	a3gsSRV_PS				1		// Data(packet) only
#define	a3gsSRV_CS				2		// Voice only
#define	a3gsSRV_BOTH			3		// Data and voice both

//	Method of positioning by getPosition()
#define	a3gsMPBASED				0		// GPS + AGPS
#define	a3gsMPASSISTED			1		// AGPS
#define	a3gsMPSTANDALONE		2		// GPS only

/*
	Declare class
*/
class A3GS
{
  public:
	enum A3GS_st_e { ERROR, IDLE, READY, TCPCONNECTEDCLIENT };

	A3GS(PinName tx, PinName rx, PinName intin, PinName power, PinName reg, int baud = a3gsBAUDRATE);

	// compatible methods with Arduino GSM/GPRS Shield library
	int getStatus() { return _status; };
	int begin(char* pin = 0);
	int begin(char* pin, uint32_t baudrate);
	int end(void);
	int restart(char* pin = 0);
	int start(char* pin = 0);
	int shutdown(void);
		//-- This library do not use "pin" parameter, so ignore it.
	int getIMEI(char* imei);
	int sendSMS(const char* to, const char* msg, int encode = a3gsCS_ASCII);
	bool availableSMS(void);
	int readSMS(char* msg, int msglength, char* number, int nlength);
	int connectTCP(const char* server, int port);
	int disconnectTCP();
	int write(uint8_t c);
			//--@R3.0 support binary data
	int write(const char* str);
			//--@R3.0 this function doesn't support binary data
	int write(const uint8_t* buffer, size_t sz);
			//--@R3.0 support binary data
	int read(char* result, int resultlength);	//@R2.3 - Leave for compatibility
			//--@R3.0 change non-blocking mode and this function doesn't support binary data
	int read(void);		//@R2.0 Change
			//--@R3.0 support binary data and change non-blocking mode
	int read(uint8_t* buffer, size_t sz);		//@R2.3 Add
			//--@R3.0 support binary data and change non-blocking mode
		//-- This library do not support tcp/ip server functions.
	int httpGET(const char* server, uint16_t port, const char* path, char* result, int resultlength, bool ssled = false, const char* header = NULL);
			//--@R3.0 add optional paramer "header"
	int httpPOST(const char* server, uint16_t port, const char* path, const char* header, const char* body, char* result, int* resultlength, bool ssled = false);
			//-- httpPOST() is not compatible parameters with Arduino GSM/GPRS Shield library
	int tweet(const char* token, const char* msg);
		//-- tweet() sends a message to twitter with the text "msg"and the token "token". 
		//-- Get the token from http://arduino-tweet.appspot.com/

	//-- Extended methods of IEM 3G Shield --//
	int onSMSReceived(void (*handler)(void));
	int getLocation(int method, char* latitude, char* longitude);
	int getServices(int& status);
	int getRSSI(int& rssi);
	int getTime(char* date, char* time);
	int getTime2(uint32_t& seconds);
	int getVersion(char *version);
	int setDefaultProfile(int profileNum);
	int getDefaultProfile(int* profileNum);
	int setBaudrate(uint32_t baudrate);
	int setLED(bool sw);
		//--@R3.0 add three functions:
	int setAirplaneMode(bool sw);
	int put(int storageNum, uint8_t *buffer, size_t sz);
	int get(int storageNum, uint8_t *buffer, size_t sz);
	int updateProfile(const uint8_t *encryptedProfile, int sz);
	int encryptString(const char *password, const char *s);

  private:
	int _status;		// for Compatible with GSM.h
	void sendCommand(const char* cmd);
	void sendData(const char* data);
	void discardUntil(const char match);
	int getResult(char *buf, int *len, uint32_t timeout);
	void handleINT0(void);

	RawSerial iemSerial;
	InterruptIn _intin;
	DigitalOut _reg, _power;
};

#endif // _A3GS_H_