mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	Hopefully done with everything in the location
Signed-off-by: Sara Damiano <sdamiano@stroudcenter.org>
This commit is contained in:
		| @@ -431,7 +431,7 @@ class TinyGsmSim7000 : public TinyGsmModem<TinyGsmSim7000>, | ||||
|       float ilat         = 0; | ||||
|       float ilon         = 0; | ||||
|       float ispeed       = 0; | ||||
|       int   ialt         = 0; | ||||
|       float ialt         = 0; | ||||
|       int   ivsat        = 0; | ||||
|       int   iusat        = 0; | ||||
|       float iaccuracy    = 0; | ||||
| @@ -473,7 +473,7 @@ class TinyGsmSim7000 : public TinyGsmModem<TinyGsmSim7000>, | ||||
|       if (lat != NULL) *lat = ilat; | ||||
|       if (lon != NULL) *lon = ilon; | ||||
|       if (speed != NULL) *speed = ispeed; | ||||
|       if (alt != NULL) *alt = ialt; | ||||
|       if (alt != NULL) *alt = static_cast<int>(ialt); | ||||
|       if (vsat != NULL) *vsat = ivsat; | ||||
|       if (usat != NULL) *usat = iusat; | ||||
|       if (accuracy != NULL) *accuracy = iaccuracy; | ||||
|   | ||||
| @@ -443,7 +443,7 @@ class TinyGsmSim7600 : public TinyGsmModem<TinyGsmSim7600>, | ||||
|       float ilat         = 0; | ||||
|       float ilon         = 0; | ||||
|       float ispeed       = 0; | ||||
|       int   ialt      = 0; | ||||
|       float ialt         = 0; | ||||
|       int   ivsat        = 0; | ||||
|       int   iusat        = 0; | ||||
|       float iaccuracy    = 0; | ||||
| @@ -485,7 +485,7 @@ class TinyGsmSim7600 : public TinyGsmModem<TinyGsmSim7600>, | ||||
|       if (lat != NULL) *lat = ilat; | ||||
|       if (lon != NULL) *lon = ilon; | ||||
|       if (speed != NULL) *speed = ispeed; | ||||
|       if (alt != NULL) *alt = ialt; | ||||
|       if (alt != NULL) *alt = static_cast<int>(ialt); | ||||
|       if (vsat != NULL) *vsat = ivsat; | ||||
|       if (usat != NULL) *usat = iusat; | ||||
|       if (accuracy != NULL) *accuracy = iaccuracy; | ||||
|   | ||||
| @@ -63,7 +63,7 @@ class TinyGsmSim808 : public TinyGsmSim800, public TinyGsmGPS<TinyGsmSim808> { | ||||
|       float ilat         = 0; | ||||
|       float ilon         = 0; | ||||
|       float ispeed       = 0; | ||||
|       int   ialt         = 0; | ||||
|       float ialt         = 0; | ||||
|       int   ivsat        = 0; | ||||
|       int   iusat        = 0; | ||||
|       float iaccuracy    = 0; | ||||
| @@ -105,7 +105,7 @@ class TinyGsmSim808 : public TinyGsmSim800, public TinyGsmGPS<TinyGsmSim808> { | ||||
|       if (lat != NULL) *lat = ilat; | ||||
|       if (lon != NULL) *lon = ilon; | ||||
|       if (speed != NULL) *speed = ispeed; | ||||
|       if (alt != NULL) *alt = ialt; | ||||
|       if (alt != NULL) *alt = static_cast<int>(ialt); | ||||
|       if (vsat != NULL) *vsat = ivsat; | ||||
|       if (usat != NULL) *usat = iusat; | ||||
|       if (accuracy != NULL) *accuracy = iaccuracy; | ||||
|   | ||||
| @@ -428,7 +428,9 @@ class TinyGsmSaraR4 | ||||
|    * GSM/GPS/GNSS/GLONASS Location functions | ||||
|    * NOTE:  u-blox modules use the same function to get location data from both | ||||
|    * GSM tower triangulation and from dedicated GPS/GNSS/GLONASS receivers.  The | ||||
|    * only difference in which sensor the data is requested from. | ||||
|    * only difference in which sensor the data is requested from.  If a GNSS | ||||
|    * location is requested from a modem without a GNSS receiver installed on the | ||||
|    * I2C port, the GSM-based "Cell Locate" location will be returned instead. | ||||
|    */ | ||||
|  protected: | ||||
|   bool enableGPSImpl() { | ||||
| @@ -475,10 +477,11 @@ class TinyGsmSaraR4 | ||||
|     return getUbloxLocationRaw(1); | ||||
|   } | ||||
|  | ||||
|   bool inline getUbloxLocation(int8_t sensor, float* lat, float* lon, float* speed = 0, | ||||
|                         int* alt = 0, int* vsat = 0, int* usat = 0, | ||||
|                         float* accuracy = 0, int* year = 0, int* month = 0, | ||||
|                         int* day = 0, int* hour = 0, int* minute = 0, | ||||
|   bool inline getUbloxLocation(int8_t sensor, float* lat, float* lon, | ||||
|                                float* speed = 0, int* alt = 0, int* vsat = 0, | ||||
|                                int* usat = 0, float* accuracy = 0, | ||||
|                                int* year = 0, int* month = 0, int* day = 0, | ||||
|                                int* hour = 0, int* minute = 0, | ||||
|                                int* second = 0) { | ||||
|     // AT+ULOC=<mode>,<sensor>,<response_type>,<timeout>,<accuracy> | ||||
|     // <mode> - 2: single shot position | ||||
| @@ -506,7 +509,7 @@ class TinyGsmSaraR4 | ||||
|     float ilat         = 0; | ||||
|     float ilon         = 0; | ||||
|     float ispeed       = 0; | ||||
|     int   ialt         = 0; | ||||
|     float ialt         = 0; | ||||
|     int   iusat        = 0; | ||||
|     float iaccuracy    = 0; | ||||
|     int   iyear        = 0; | ||||
| @@ -526,23 +529,26 @@ class TinyGsmSaraR4 | ||||
|  | ||||
|     ilat = streamGetFloat(',');  // Estimated latitude, in degrees | ||||
|     ilon = streamGetFloat(',');  // Estimated longitude, in degrees | ||||
|     ialt = streamGetFloat(',');  // Estimated altitude, in meters - only for | ||||
|     iaccuracy = streamGetFloat( | ||||
|         ',');  // Maximum possible error, in meters (0 - 20000000) | ||||
|     ialt = streamGetFloat(',');  // Estimated altitude, in meters - only forGNSS | ||||
|                                  // positioning, 0 in case of CellLocate | ||||
|     if (ialt != 0) {             // values not returned for CellLocate | ||||
|       iaccuracy = streamGetFloat(',');  // Maximum possible error, in meters | ||||
|       ispeed    = streamGetFloat(',');  // Speed over ground m/s3 | ||||
|       streamSkipUntil(',');  // Course over ground in degree (0 deg - 360 deg) | ||||
|       streamSkipUntil(',');  // Vertical accuracy, in meters | ||||
|       streamSkipUntil(',');  // Sensor used for the position calculation | ||||
|     iusat = streamGetInt( | ||||
|         ',');              // Number of satellite used to calculate the position | ||||
|       iusat = streamGetInt(',');  // Number of satellite used | ||||
|       streamSkipUntil(',');       // Antenna status | ||||
|       streamSkipUntil('\n');      // Jamming status | ||||
|     } else { | ||||
|       iaccuracy = streamGetFloat('\n');  // Maximum possible error, in meters | ||||
|     } | ||||
|  | ||||
|     // Set pointers | ||||
|     if (lat != NULL) *lat = ilat; | ||||
|     if (lon != NULL) *lon = ilon; | ||||
|     if (speed != NULL) *speed = ispeed; | ||||
|     if (alt != NULL) *alt = ialt; | ||||
|     if (alt != NULL) *alt = static_cast<int>(ialt); | ||||
|     if (vsat != NULL) *vsat = 0;  // Number of satellites viewed not reported; | ||||
|     if (usat != NULL) *usat = iusat; | ||||
|     if (accuracy != NULL) *accuracy = iaccuracy; | ||||
|   | ||||
| @@ -395,7 +395,9 @@ class TinyGsmUBLOX | ||||
|    * GSM/GPS/GNSS/GLONASS Location functions | ||||
|    * NOTE:  u-blox modules use the same function to get location data from both | ||||
|    * GSM tower triangulation and from dedicated GPS/GNSS/GLONASS receivers.  The | ||||
|    * only difference in which sensor the data is requested from. | ||||
|    * only difference in which sensor the data is requested from.  If a GNSS | ||||
|    * location is requested from a modem without a GNSS receiver installed on the | ||||
|    * I2C port, the GSM-based "Cell Locate" location will be returned instead. | ||||
|    */ | ||||
|  protected: | ||||
|   bool enableGPSImpl() { | ||||
| @@ -442,10 +444,11 @@ class TinyGsmUBLOX | ||||
|     return getUbloxLocationRaw(1); | ||||
|   } | ||||
|  | ||||
|   bool inline getUbloxLocation(int8_t sensor, float* lat, float* lon, float* speed = 0, | ||||
|                         int* alt = 0, int* vsat = 0, int* usat = 0, | ||||
|                         float* accuracy = 0, int* year = 0, int* month = 0, | ||||
|                         int* day = 0, int* hour = 0, int* minute = 0, | ||||
|   bool inline getUbloxLocation(int8_t sensor, float* lat, float* lon, | ||||
|                                float* speed = 0, int* alt = 0, int* vsat = 0, | ||||
|                                int* usat = 0, float* accuracy = 0, | ||||
|                                int* year = 0, int* month = 0, int* day = 0, | ||||
|                                int* hour = 0, int* minute = 0, | ||||
|                                int* second = 0) { | ||||
|     // AT+ULOC=<mode>,<sensor>,<response_type>,<timeout>,<accuracy> | ||||
|     // <mode> - 2: single shot position | ||||
| @@ -473,7 +476,7 @@ class TinyGsmUBLOX | ||||
|     float ilat         = 0; | ||||
|     float ilon         = 0; | ||||
|     float ispeed       = 0; | ||||
|     int   ialt         = 0; | ||||
|     float ialt         = 0; | ||||
|     int   iusat        = 0; | ||||
|     float iaccuracy    = 0; | ||||
|     int   iyear        = 0; | ||||
| @@ -493,23 +496,26 @@ class TinyGsmUBLOX | ||||
|  | ||||
|     ilat = streamGetFloat(',');  // Estimated latitude, in degrees | ||||
|     ilon = streamGetFloat(',');  // Estimated longitude, in degrees | ||||
|     ialt = streamGetFloat(',');  // Estimated altitude, in meters - only for | ||||
|     iaccuracy = streamGetFloat( | ||||
|         ',');  // Maximum possible error, in meters (0 - 20000000) | ||||
|     ialt = streamGetFloat(',');  // Estimated altitude, in meters - only forGNSS | ||||
|                                  // positioning, 0 in case of CellLocate | ||||
|     if (ialt != 0) {             // values not returned for CellLocate | ||||
|       iaccuracy = streamGetFloat(',');  // Maximum possible error, in meters | ||||
|       ispeed    = streamGetFloat(',');  // Speed over ground m/s3 | ||||
|       streamSkipUntil(',');  // Course over ground in degree (0 deg - 360 deg) | ||||
|       streamSkipUntil(',');  // Vertical accuracy, in meters | ||||
|       streamSkipUntil(',');  // Sensor used for the position calculation | ||||
|     iusat = streamGetInt( | ||||
|         ',');              // Number of satellite used to calculate the position | ||||
|       iusat = streamGetInt(',');  // Number of satellite used | ||||
|       streamSkipUntil(',');       // Antenna status | ||||
|       streamSkipUntil('\n');      // Jamming status | ||||
|     } else { | ||||
|       iaccuracy = streamGetFloat('\n');  // Maximum possible error, in meters | ||||
|     } | ||||
|  | ||||
|     // Set pointers | ||||
|     if (lat != NULL) *lat = ilat; | ||||
|     if (lon != NULL) *lon = ilon; | ||||
|     if (speed != NULL) *speed = ispeed; | ||||
|     if (alt != NULL) *alt = ialt; | ||||
|     if (alt != NULL) *alt = static_cast<int>(ialt); | ||||
|     if (vsat != NULL) *vsat = 0;  // Number of satellites viewed not reported; | ||||
|     if (usat != NULL) *usat = iusat; | ||||
|     if (accuracy != NULL) *accuracy = iaccuracy; | ||||
|   | ||||
| @@ -274,6 +274,7 @@ class TinyGsmModem { | ||||
|     size_t bytesRead = thisModem().stream.readBytesUntil( | ||||
|         lastChar, buf, static_cast<size_t>(6)); | ||||
|     if (bytesRead) { | ||||
|       buf[bytesRead] = '\0'; | ||||
|       int16_t res    = atoi(buf); | ||||
|       return res; | ||||
|     } else { | ||||
| @@ -282,8 +283,9 @@ class TinyGsmModem { | ||||
|   } | ||||
|  | ||||
|   float inline streamGetFloat(int8_t numChars) { | ||||
|     char   buf[12]; | ||||
|     char   buf[16]; | ||||
|     size_t bytesRead = thisModem().stream.readBytes(buf, numChars); | ||||
|     DBG("### bytesRead:", bytesRead); | ||||
|     if (bytesRead) { | ||||
|       buf[numChars] = '\0'; | ||||
|       int16_t res   = atof(buf); | ||||
| @@ -296,10 +298,12 @@ class TinyGsmModem { | ||||
|   template <class T> | ||||
|   // calling with template only to prevent promotion of char to int | ||||
|   float inline streamGetFloat(T lastChar) { | ||||
|     char   buf[12]; | ||||
|     char   buf[16]; | ||||
|     size_t bytesRead = thisModem().stream.readBytesUntil( | ||||
|         lastChar, buf, static_cast<size_t>(12)); | ||||
|         lastChar, buf, static_cast<size_t>(16)); | ||||
|     DBG("### TEMPL bytesRead:", bytesRead); | ||||
|     if (bytesRead) { | ||||
|       buf[bytesRead] = '\0'; | ||||
|       float res      = atof(buf); | ||||
|       return res; | ||||
|     } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user