267 lines
9.2 KiB
C++
267 lines
9.2 KiB
C++
/***************************************************
|
|
This is a library for our Adafruit FONA Cellular Module
|
|
|
|
Designed specifically to work with the Adafruit FONA
|
|
----> http://www.adafruit.com/products/1946
|
|
----> http://www.adafruit.com/products/1963
|
|
|
|
These displays use TTL Serial to communicate, 2 pins are required to
|
|
interface
|
|
Adafruit invests time and resources providing this open source code,
|
|
please support Adafruit and open-source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
|
BSD license, all text above must be included in any redistribution
|
|
****************************************************/
|
|
#ifndef ADAFRUIT_FONA_H
|
|
#define ADAFRUIT_FONA_H
|
|
|
|
#include "includes/FONAConfig.h"
|
|
#include "includes/FONAExtIncludes.h"
|
|
#include "includes/platform/FONAPlatform.h"
|
|
|
|
|
|
|
|
#define FONA800L 1
|
|
#define FONA800H 6
|
|
|
|
#define FONA808_V1 2
|
|
#define FONA808_V2 3
|
|
|
|
#define FONA3G_A 4
|
|
#define FONA3G_E 5
|
|
|
|
// Set the preferred SMS storage.
|
|
// Use "SM" for storage on the SIM.
|
|
// Use "ME" for internal storage on the FONA chip
|
|
#define FONA_PREF_SMS_STORAGE "\"SM\""
|
|
//#define FONA_PREF_SMS_STORAGE "\"ME\""
|
|
|
|
#define FONA_HEADSETAUDIO 0
|
|
#define FONA_EXTAUDIO 1
|
|
|
|
#define FONA_STTONE_DIALTONE 1
|
|
#define FONA_STTONE_BUSY 2
|
|
#define FONA_STTONE_CONGESTION 3
|
|
#define FONA_STTONE_PATHACK 4
|
|
#define FONA_STTONE_DROPPED 5
|
|
#define FONA_STTONE_ERROR 6
|
|
#define FONA_STTONE_CALLWAIT 7
|
|
#define FONA_STTONE_RINGING 8
|
|
#define FONA_STTONE_BEEP 16
|
|
#define FONA_STTONE_POSTONE 17
|
|
#define FONA_STTONE_ERRTONE 18
|
|
#define FONA_STTONE_INDIANDIALTONE 19
|
|
#define FONA_STTONE_USADIALTONE 20
|
|
|
|
#define FONA_DEFAULT_TIMEOUT_MS 500
|
|
|
|
#define FONA_HTTP_GET 0
|
|
#define FONA_HTTP_POST 1
|
|
#define FONA_HTTP_HEAD 2
|
|
|
|
#define FONA_CALL_READY 0
|
|
#define FONA_CALL_FAILED 1
|
|
#define FONA_CALL_UNKNOWN 2
|
|
#define FONA_CALL_RINGING 3
|
|
#define FONA_CALL_INPROGRESS 4
|
|
|
|
class Adafruit_FONA : public FONAStreamType {
|
|
public:
|
|
Adafruit_FONA(int8_t r);
|
|
boolean begin(FONAStreamType &port);
|
|
uint8_t type();
|
|
|
|
// Stream
|
|
int available(void);
|
|
size_t write(uint8_t x);
|
|
int read(void);
|
|
int peek(void);
|
|
void flush();
|
|
|
|
// FONA 3G requirements
|
|
boolean setBaudrate(uint16_t baud);
|
|
|
|
// RTC
|
|
boolean enableRTC(uint8_t i);
|
|
boolean readRTC(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *hr, uint8_t *min, uint8_t *sec);
|
|
|
|
// Battery and ADC
|
|
boolean getADCVoltage(uint16_t *v);
|
|
boolean getBattPercent(uint16_t *p);
|
|
boolean getBattVoltage(uint16_t *v);
|
|
|
|
// SIM query
|
|
uint8_t unlockSIM(char *pin);
|
|
uint8_t getSIMCCID(char *ccid);
|
|
uint8_t getNetworkStatus(void);
|
|
uint8_t getRSSI(void);
|
|
|
|
// IMEI
|
|
uint8_t getIMEI(char *imei);
|
|
|
|
// set Audio output
|
|
boolean setAudio(uint8_t a);
|
|
boolean setVolume(uint8_t i);
|
|
uint8_t getVolume(void);
|
|
boolean playToolkitTone(uint8_t t, uint16_t len);
|
|
boolean setMicVolume(uint8_t a, uint8_t level);
|
|
boolean playDTMF(char tone);
|
|
|
|
// FM radio functions.
|
|
boolean tuneFMradio(uint16_t station);
|
|
boolean FMradio(boolean onoff, uint8_t a = FONA_HEADSETAUDIO);
|
|
boolean setFMVolume(uint8_t i);
|
|
int8_t getFMVolume();
|
|
int8_t getFMSignalLevel(uint16_t station);
|
|
|
|
// SMS handling
|
|
boolean setSMSInterrupt(uint8_t i);
|
|
uint8_t getSMSInterrupt(void);
|
|
int8_t getNumSMS(void);
|
|
boolean readSMS(uint8_t i, char *smsbuff, uint16_t max, uint16_t *readsize);
|
|
boolean sendSMS(char *smsaddr, char *smsmsg);
|
|
boolean deleteSMS(uint8_t i);
|
|
boolean getSMSSender(uint8_t i, char *sender, int senderlen);
|
|
boolean sendUSSD(char *ussdmsg, char *ussdbuff, uint16_t maxlen, uint16_t *readlen);
|
|
|
|
// Time
|
|
boolean enableNetworkTimeSync(boolean onoff);
|
|
boolean enableNTPTimeSync(boolean onoff, FONAFlashStringPtr ntpserver=0);
|
|
boolean getTime(char *buff, uint16_t maxlen);
|
|
|
|
// GPRS handling
|
|
boolean enableGPRS(boolean onoff);
|
|
uint8_t GPRSstate(void);
|
|
boolean getGSMLoc(uint16_t *replycode, char *buff, uint16_t maxlen);
|
|
boolean getGSMLoc(float *lat, float *lon);
|
|
void setGPRSNetworkSettings(FONAFlashStringPtr apn, FONAFlashStringPtr username=0, FONAFlashStringPtr password=0);
|
|
|
|
// GPS handling
|
|
boolean enableGPS(boolean onoff);
|
|
int8_t GPSstatus(void);
|
|
uint8_t getGPS(uint8_t arg, char *buffer, uint8_t maxbuff);
|
|
boolean getGPS(float *lat, float *lon, float *speed_kph=0, float *heading=0, float *altitude=0);
|
|
boolean enableGPSNMEA(uint8_t nmea);
|
|
|
|
// TCP raw connections
|
|
boolean TCPconnect(char *server, uint16_t port);
|
|
boolean TCPclose(void);
|
|
boolean TCPconnected(void);
|
|
boolean TCPsend(char *packet, uint8_t len);
|
|
uint16_t TCPavailable(void);
|
|
uint16_t TCPread(uint8_t *buff, uint8_t len);
|
|
|
|
// HTTP low level interface (maps directly to SIM800 commands).
|
|
boolean HTTP_init();
|
|
boolean HTTP_term();
|
|
void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true);
|
|
boolean HTTP_para_end(boolean quoted = true);
|
|
boolean HTTP_para(FONAFlashStringPtr parameter, const char *value);
|
|
boolean HTTP_para(FONAFlashStringPtr parameter, FONAFlashStringPtr value);
|
|
boolean HTTP_para(FONAFlashStringPtr parameter, int32_t value);
|
|
boolean HTTP_data(uint32_t size, uint32_t maxTime=10000);
|
|
boolean HTTP_action(uint8_t method, uint16_t *status, uint16_t *datalen, int32_t timeout = 10000);
|
|
boolean HTTP_readall(uint16_t *datalen);
|
|
boolean HTTP_ssl(boolean onoff);
|
|
|
|
// HTTP high level interface (easier to use, less flexible).
|
|
boolean HTTP_GET_start(char *url, uint16_t *status, uint16_t *datalen);
|
|
void HTTP_GET_end(void);
|
|
boolean HTTP_POST_start(char *url, FONAFlashStringPtr contenttype, const uint8_t *postdata, uint16_t postdatalen, uint16_t *status, uint16_t *datalen);
|
|
void HTTP_POST_end(void);
|
|
void setUserAgent(FONAFlashStringPtr useragent);
|
|
|
|
// HTTPS
|
|
void setHTTPSRedirect(boolean onoff);
|
|
|
|
// PWM (buzzer)
|
|
boolean setPWM(uint16_t period, uint8_t duty = 50);
|
|
|
|
// Phone calls
|
|
boolean callPhone(char *phonenum);
|
|
uint8_t getCallStatus(void);
|
|
boolean hangUp(void);
|
|
boolean pickUp(void);
|
|
boolean callerIdNotification(boolean enable, uint8_t interrupt = 0);
|
|
boolean incomingCallNumber(char* phonenum);
|
|
|
|
// Helper functions to verify responses.
|
|
boolean expectReply(FONAFlashStringPtr reply, uint16_t timeout = 10000);
|
|
boolean sendCheckReply(char *send, char *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
boolean sendCheckReply(FONAFlashStringPtr send, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
boolean sendCheckReply(char* send, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
|
|
|
|
protected:
|
|
int8_t _rstpin;
|
|
uint8_t _type;
|
|
|
|
char replybuffer[255];
|
|
FONAFlashStringPtr apn;
|
|
FONAFlashStringPtr apnusername;
|
|
FONAFlashStringPtr apnpassword;
|
|
boolean httpsredirect;
|
|
FONAFlashStringPtr useragent;
|
|
FONAFlashStringPtr ok_reply;
|
|
|
|
// HTTP helpers
|
|
boolean HTTP_setup(char *url);
|
|
|
|
void flushInput();
|
|
uint16_t readRaw(uint16_t b);
|
|
uint8_t readline(uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS, boolean multiline = false);
|
|
uint8_t getReply(char *send, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
uint8_t getReply(FONAFlashStringPtr send, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
uint8_t getReply(FONAFlashStringPtr prefix, char *suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
uint8_t getReply(FONAFlashStringPtr prefix, int32_t suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
uint8_t getReply(FONAFlashStringPtr prefix, int32_t suffix1, int32_t suffix2, uint16_t timeout); // Don't set default value or else function call is ambiguous.
|
|
uint8_t getReplyQuoted(FONAFlashStringPtr prefix, FONAFlashStringPtr suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
|
|
boolean sendCheckReply(FONAFlashStringPtr prefix, char *suffix, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
boolean sendCheckReply(FONAFlashStringPtr prefix, int32_t suffix, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
boolean sendCheckReply(FONAFlashStringPtr prefix, int32_t suffix, int32_t suffix2, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
boolean sendCheckReplyQuoted(FONAFlashStringPtr prefix, FONAFlashStringPtr suffix, FONAFlashStringPtr reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS);
|
|
|
|
|
|
boolean parseReply(FONAFlashStringPtr toreply,
|
|
uint16_t *v, char divider = ',', uint8_t index=0);
|
|
boolean parseReply(FONAFlashStringPtr toreply,
|
|
char *v, char divider = ',', uint8_t index=0);
|
|
boolean parseReplyQuoted(FONAFlashStringPtr toreply,
|
|
char *v, int maxlen, char divider, uint8_t index);
|
|
|
|
boolean sendParseReply(FONAFlashStringPtr tosend,
|
|
FONAFlashStringPtr toreply,
|
|
uint16_t *v, char divider = ',', uint8_t index=0);
|
|
|
|
static boolean _incomingCall;
|
|
static void onIncomingCall();
|
|
|
|
FONAStreamType *mySerial;
|
|
};
|
|
|
|
class Adafruit_FONA_3G : public Adafruit_FONA {
|
|
|
|
public:
|
|
Adafruit_FONA_3G (int8_t r) : Adafruit_FONA(r) { _type = FONA3G_A; }
|
|
|
|
boolean getBattVoltage(uint16_t *v);
|
|
boolean playToolkitTone(uint8_t t, uint16_t len);
|
|
boolean hangUp(void);
|
|
boolean pickUp(void);
|
|
boolean enableGPRS(boolean onoff);
|
|
boolean enableGPS(boolean onoff);
|
|
|
|
protected:
|
|
boolean parseReply(FONAFlashStringPtr toreply,
|
|
float *f, char divider, uint8_t index);
|
|
|
|
boolean sendParseReply(FONAFlashStringPtr tosend,
|
|
FONAFlashStringPtr toreply,
|
|
float *f, char divider = ',', uint8_t index=0);
|
|
};
|
|
|
|
#endif
|