mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * @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:
 | 
						|
 | 
						|
  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
 |