/** * @file TinyGsmGPS.tpp * @author Volodymyr Shymanskyy * @license LGPL-3.0 * @copyright Copyright (c) 2016 Volodymyr Shymanskyy * @date Nov 2016 */ #ifndef SRC_TINYGSMGPS_H_ #define SRC_TINYGSMGPS_H_ #include "TinyGsmCommon.h" #define TINY_GSM_MODEM_HAS_GPS template class TinyGsmGPS { public: /* * GPS/GNSS/GLONASS location functions */ bool enableGPS() { return thisModem().enableGPSImpl(); } bool disableGPS() { return thisModem().disableGPSImpl(); } String getGPSraw() { return thisModem().getGPSrawImpl(); } bool getGPS(float* lat, float* lon, float* speed = 0, float* 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) { return thisModem().getGPSImpl(lat, lon, speed, alt, vsat, usat, accuracy, year, month, day, hour, minute, second); } bool getGPSTime(int* year, int* month, int* day, int* hour, int* minute, int* second) { float lat = 0; float lon = 0; return thisModem().getGPSImpl(&lat, &lon, 0, 0, 0, 0, 0, year, month, day, hour, minute, second); } String setGNSSMode(uint8_t mode, bool dpo) { return thisModem().setGNSSModeImpl(mode, dpo); } uint8_t getGNSSMode() { return thisModem().getGNSSModeImpl(); } /* * CRTP Helper */ protected: inline const modemType& thisModem() const { return static_cast(*this); } inline modemType& thisModem() { return static_cast(*this); } /* * GPS/GNSS/GLONASS location functions */ bool enableGPSImpl() TINY_GSM_ATTR_NOT_IMPLEMENTED; bool disableGPSImpl() TINY_GSM_ATTR_NOT_IMPLEMENTED; String getGPSrawImpl() TINY_GSM_ATTR_NOT_IMPLEMENTED; bool getGPSImpl(float* lat, float* lon, float* speed = 0, float* 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) TINY_GSM_ATTR_NOT_IMPLEMENTED; String setGNSSModeImpl(uint8_t mode, bool dpo) TINY_GSM_ATTR_NOT_IMPLEMENTED; uint8_t getGNSSModeImpl() TINY_GSM_ATTR_NOT_IMPLEMENTED; }; #endif // SRC_TINYGSMGPS_H_