123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /**
- * file TinyGsmClientSIM808.h
- * author Volodymyr Shymanskyy
- * license LGPL-3.0
- * copyright Copyright (c) 2016 Volodymyr Shymanskyy
- * date Nov 2016
- */
-
- #ifndef TinyGsmClientSIM808_h
- #define TinyGsmClientSIM808_h
-
- #include "TinyGsmClientSIM800.h"
-
- class TinyGsmSim808: public TinyGsmSim800
- {
-
- public:
-
- explicit TinyGsmSim808(Stream& stream)
- : TinyGsmSim800(stream)
- {}
-
- /*
- * GPS location functions
- */
-
- // enable GPS
- bool enableGPS()
- {
- uint16_t state;
-
- sendAT(GF("+CGNSPWR=1"));
- if (waitResponse() != 1) {
- return false;
- }
-
- return true;
- }
-
- bool disableGPS()
- {
- uint16_t state;
-
- sendAT(GF("+CGNSPWR=0"));
- if (waitResponse() != 1) {
- return false;
- }
-
- return true;
- }
-
- // get the RAW GPS output
- // works only with ans SIM808 V2
- String getGPSraw()
- {
- sendAT(GF("+CGNSINF"));
- if (waitResponse(GF(GSM_NL "+CGNSINF:")) != 1) {
- return "";
- }
- String res = stream.readStringUntil('\n');
- waitResponse();
- res.trim();
- return res;
- }
-
- // get GPS informations
- // works only with ans SIM808 V2
- bool getGPS(float *lat, float *lon, float *speed=0, int *alt=0, int *vsat=0, int *usat=0)
- {
- //String buffer = "";
- char chr_buffer[12];
- bool fix = false;
-
- sendAT(GF("+CGNSINF"));
- if (waitResponse(GF(GSM_NL "+CGNSINF:")) != 1) {
- return false;
- }
-
- stream.readStringUntil(','); // mode
- if ( stream.readStringUntil(',').toInt() == 1 ) {
- fix = true;
- }
- stream.readStringUntil(','); //utctime
- *lat = stream.readStringUntil(',').toFloat(); //lat
- *lon = stream.readStringUntil(',').toFloat(); //lon
- if (alt != NULL) {
- *alt = stream.readStringUntil(',').toFloat(); //lon
- }
- if (speed != NULL) {
- *speed = stream.readStringUntil(',').toFloat(); //speed
- }
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- stream.readStringUntil(',');
- if (vsat != NULL) {
- *vsat = stream.readStringUntil(',').toInt(); //viewed satelites
- }
- if (usat != NULL) {
- *usat = stream.readStringUntil(',').toInt(); //used satelites
- }
- stream.readStringUntil('\n');
-
- waitResponse();
-
- return fix;
- }
-
- // get GPS time
- // works only with SIM808 V2
- bool getGPSTime(int *year, int *month, int *day, int *hour, int *minute, int *second)
- {
- bool fix = false;
- char chr_buffer[12];
- sendAT(GF("+CGNSINF"));
- if (waitResponse(GF(GSM_NL "+CGNSINF:")) != 1) {
- return false;
- }
-
- for (int i = 0; i < 3; i++) {
- String buffer = stream.readStringUntil(',');
- buffer.toCharArray(chr_buffer, sizeof(chr_buffer));
- switch (i) {
- case 0:
- //mode
- break;
- case 1:
- //fixstatus
- if ( buffer.toInt() == 1 ) {
- fix = buffer.toInt();
- }
- break;
- case 2:
- *year = buffer.substring(0,4).toInt();
- *month = buffer.substring(4,6).toInt();
- *day = buffer.substring(6,8).toInt();
- *hour = buffer.substring(8,10).toInt();
- *minute = buffer.substring(10,12).toInt();
- *second = buffer.substring(12,14).toInt();
- break;
-
- default:
- // if nothing else matches, do the default
- // default is optional
- break;
- }
- }
- String res = stream.readStringUntil('\n');
- waitResponse();
-
- if (fix) {
- return true;
- } else {
- return false;
- }
- }
-
- };
-
- #endif
|