Update to work with latest mBed
Fork of FONA_CellPhone by
Revision 13:0b9b73b16406, committed 2016-03-28
- Comitter:
- George windoge T
- Date:
- Mon Mar 28 12:20:13 2016 -0400
- Parent:
- 12:a40669ca217a
- Parent:
- 10:9dd3e49dec97
- Child:
- 14:0c0bbca5ac26
- Commit message:
- GT: Changed file extension
Changed in this revision
--- a/Adafruit_FONA.cpp Mon Mar 28 12:18:56 2016 -0400 +++ b/Adafruit_FONA.cpp Mon Mar 28 12:20:13 2016 -0400 @@ -16,7 +16,7 @@ ****************************************************/ /* - * Modified by Marc PLOUHINEC 27/06/2015 for use in mbed + * Modified by George Tzintzarov & Jesse Baker 03/14/2016 for use in mbed LPC1768 */ #include <algorithm> #include "Adafruit_FONA.h" @@ -30,6 +30,7 @@ */ + bool Adafruit_FONA::begin(int baudrate) { mySerial.baud(baudrate); //set the baud rate of the fona serial connection mySerial.attach(this, &Adafruit_FONA::onSerialDataReceived, Serial::RxIrq); //attached onSerialDataReceived as Serial receive interrupt
--- a/Adafruit_FONA.h Mon Mar 28 12:18:56 2016 -0400 +++ b/Adafruit_FONA.h Mon Mar 28 12:20:13 2016 -0400 @@ -16,7 +16,7 @@ ****************************************************/ /* - * Modified by Marc PLOUHINEC 27/06/2015 for use in mbed + * Modified by George Tzintzarov & Jesse Baker 03/14/2016 for use in mbed LPC1768 */ #ifndef ADAFRUIT_FONA_H @@ -51,11 +51,36 @@ #define RX_BUFFER_SIZE 255 +/** Adafruit FONA 800H Class +* Modified by George Tzintzarov & Jesse Baker 03/14/2016 for use in mbed LPC1768 +*/ + class Adafruit_FONA : public Stream { public: - /** - * Listener for FONA events. - */ +/** +Listener for FONA events. Inherit this class to customize. +@code +#define FONA_RST p12 +#define FONA_TX p13 +#define FONA_RX p14 +#define FONA_RI p11 + +Adafruit_FONA my_fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI); +DigitalOut led1(LED1); +class FonaEventListener : public Adafruit_FONA::EventListener { + virtual void onRing() { + led1 = 1; +} + + virtual void onNoCarrier() { + led1 = 0; + } +}; +FonaEventListener fonaEventListener; +my_fona.setEventListener(&fonaEventListener); +@endcode +*/ + class EventListener { public: /** @@ -70,37 +95,178 @@ }; public: + /** Create instance of the Adafruit_FONA + @param tx Set mbed TX + @param rx Set mbed RX + @param rst Set reset pin + @param ringIndicator Set ring indicator pin. This is to let mbed know if there is an incoming call + */ + Adafruit_FONA(PinName tx, PinName rx, PinName rst, PinName ringIndicator) : _rstpin(rst, false), _ringIndicatorInterruptIn(ringIndicator), apn("FONAnet"), apnusername(NULL), apnpassword(NULL), httpsredirect(false), useragent("FONA"), _incomingCall(false), eventListener(NULL), mySerial(tx, rx), rxBufferInIndex(0), rxBufferOutIndex(0), currentReceivedLineSize(0) {} + + /** Built-in Test to see if FONA is connected + @param baudrate test and set at baudrate + @return true upon success + @return false upon failure. Most likely something is not hooked up. + +EXAMPLE CODE: + @code +// See if the FONA is responding +// fona is an instance of Adafruit_FONA +if (! fona.begin(9600)) { + printf("Couldn't find FONA\r\n"); + while (1); +} + @endcode + */ bool begin(int baudrate); + + /** Set the event listener for incoming calls + @param eventListener A pointer to the event listener + @see Adafruit_FONA::EventListener for specific example + */ + void setEventListener(EventListener *eventListener); - // Stream + // Stream---------------------------------------------------------------------- virtual int _putc(int value); virtual int _getc(); - int readable(); - // RTC + /** Check if FONA has anything in its output buffer + @return 0 if nothing + */ + int readable(void); + + // RTC---------------------------------------------------------------------- bool enableRTC(uint8_t i); // i = 0 <=> disable, i = 1 <=> enable - // Battery and ADC + // Battery and ADC---------------------------------------------------------------------- + /** Get ADC voltage from external pin + @param v uint16_t pointer to insert ADC voltage data + @return TRUE if successful + +EXAMPLE CODE: + @code +// read the ADC +// fona is an instance of Adafruit_FONA +uint16_t adc; +if (! fona.getADCVoltage(&adc)) { + printf("Failed to read ADC\r\n"); +} +else { + printf("ADC = %d mV\r\n", adc); +} + @endcode + */ bool getADCVoltage(uint16_t *v); + + /** Get battery percentage level + @param p uint16_t pointer to insert battery percent data + @return TRUE if successful + +EXAMPLE CODE: + @code +// read the battery percent level +// fona is an instance of Adafruit_FONA +uint16_t vbatPer; +if (! fona.getBattPercent(&vbatPer)) { + printf("Failed to read Batt\r\n"); +} +else { + printf("VPct = %d%%\r\n", vbatPer); +} + @endcode + */ + bool getBattPercent(uint16_t *p); + + /** Get battery voltage level + @param v uint16_t pointer to insert battery voltage data + @return TRUE if successful + +EXAMPLE CODE: + @code +// read the battery voltage +// fona is an instance of Adafruit_FONA +uint16_t vbat; +if (! fona.getBattPercent(&vbat)) { + printf("Failed to read Batt\r\n"); +} +else { + printf("Vbat = %d%%\r\n", vbat); +} + @endcode + */ bool getBattVoltage(uint16_t *v); - // SIM query + // SIM query---------------------------------------------------------------------- + /** Unlock SIM if needed + @param pin 4 digit char arrary + @return TRUE if successful + */ bool unlockSIM(char *pin); + /** Get the SIM chip card interface device (CCID) + @param ccid make sure it is at least 21 bytes long + @return length of CCID + */ + uint8_t getSIMCCID(char *ccid); + /** Get the Network Status of FONA + @return Code 0-5 + @see https://www.adafruit.com/datasheets/sim800_series_at_command_manual_v1.01.pdf page 80 + */ uint8_t getNetworkStatus(void); + + /** Get the RSSI of the network signal + @return RSSI value in dBm per below reference + + EXAMPLE + @code +// read the RSSI +uint8_t n = fona.getRSSI(); +int8_t r = 0; + +pcSerial.printf("RSSI = %d: ", n); +if (n == 0) r = -115; +if (n == 1) r = -111; +if (n == 31) r = -52; +if ((n >= 2) && (n <= 30)) { + r = map(n, 2, 30, -110, -54); +} +printf("%d dBm\r\n", r); + +// helper function MAP to do calculations +long MAP(long x, long in_min, long in_max, long out_min, long out_max) +{ + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} + @endcode + @see https://www.adafruit.com/datasheets/sim800_series_at_command_manual_v1.01.pdf page 82 + */ uint8_t getRSSI(void); - // IMEI + // IMEI---------------------------------------------------------------------- + /** Get the International Mobile Station Equipment Identity (IMEI) + @param imei A char array with minimum length 16 + @return The IMEI of the device + +EXAMPLE CODE: + @code +// Print SIM card IMEI number. +char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! +uint8_t imeiLen = fona.getIMEI(imei); //fona is an instance of Adafruit_FONA +if (imeiLen > 0) { + pcSerial.printf("SIM card IMEI: %s\r\n", imei); +} + @endcode + */ uint8_t getIMEI(char *imei); - // set Audio output + // set Audio output---------------------------------------------------------------------- bool setAudio(uint8_t a); bool setVolume(uint8_t i); uint8_t getVolume(void); @@ -108,14 +274,14 @@ bool setMicVolume(uint8_t a, uint8_t level); bool playDTMF(char tone); - // FM radio functions + // FM radio functions---------------------------------------------------------------------- bool tuneFMradio(uint16_t station); bool FMradio(bool onoff, uint8_t a = FONA_HEADSETAUDIO); bool setFMVolume(uint8_t i); int8_t getFMVolume(); int8_t getFMSignalLevel(uint16_t station); - // SMS handling + // SMS handling---------------------------------------------------------------------- bool setSMSInterrupt(uint8_t i); uint8_t getSMSInterrupt(void); int8_t getNumSMS(void); @@ -124,26 +290,26 @@ bool deleteSMS(uint8_t i); bool getSMSSender(uint8_t i, char *sender, int senderlen); - // Time + // Time---------------------------------------------------------------------- bool enableNetworkTimeSync(bool onoff); bool enableNTPTimeSync(bool onoff, const char* ntpserver=0); bool getTime(char* buff, uint16_t maxlen); - // GPRS handling + // GPRS handling---------------------------------------------------------------------- bool enableGPRS(bool onoff); uint8_t GPRSstate(void); bool getGSMLoc(uint16_t *replycode, char *buff, uint16_t maxlen); bool getGSMLoc(float *lat, float *lon); void setGPRSNetworkSettings(const char* apn, const char* username=0, const char* password=0); - // GPS handling + // GPS handling---------------------------------------------------------------------- bool enableGPS(bool onoff); int8_t GPSstatus(void); uint8_t getGPS(uint8_t arg, char *buffer, uint8_t maxbuff); bool getGPS(float *lat, float *lon, float *speed_kph=0, float *heading=0, float *altitude=0); bool enableGPSNMEA(uint8_t nmea); - // TCP raw connections + // TCP raw connections---------------------------------------------------------------------- bool TCPconnect(char *server, uint16_t port); bool TCPclose(void); bool TCPconnected(void); @@ -151,7 +317,7 @@ uint16_t TCPavailable(void); uint16_t TCPread(uint8_t *buff, uint8_t len); - // HTTP low level interface (maps directly to SIM800 commands). + // HTTP low level interface (maps directly to SIM800 commands).---------------------------------------------------------------------- bool HTTP_init(); bool HTTP_term(); void HTTP_para_start(const char* parameter, bool quoted = true); @@ -163,20 +329,20 @@ bool HTTP_readall(uint16_t *datalen); bool HTTP_ssl(bool onoff); - // HTTP high level interface (easier to use, less flexible). + // HTTP high level interface (easier to use, less flexible).---------------------------------------------------------------------- bool HTTP_GET_start(char *url, uint16_t *status, uint16_t *datalen); void HTTP_GET_end(void); bool HTTP_POST_start(char *url, const char* contenttype, const uint8_t *postdata, uint16_t postdatalen, uint16_t *status, uint16_t *datalen); void HTTP_POST_end(void); void setUserAgent(const char* useragent); - // HTTPS + // HTTPS---------------------------------------------------------------------- void setHTTPSRedirect(bool onoff); - // PWM (buzzer) + // PWM (buzzer)---------------------------------------------------------------------- bool setPWM(uint16_t period, uint8_t duty = 50); - // Phone calls + // Phone calls---------------------------------------------------------------------- bool callPhone(char *phonenum); bool hangUp(void); bool pickUp(void);