mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			151 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
 | |
| #pragma message("TinyGSM:  TinyGsmClientSIM808")
 | |
| 
 | |
| #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
 |