|
|
- /**
- * @file TinyGsmBattery.tpp
- * @author Volodymyr Shymanskyy
- * @license LGPL-3.0
- * @copyright Copyright (c) 2016 Volodymyr Shymanskyy
- * @date Nov 2016
- */
-
- #ifndef SRC_TINYGSMBATTERY_H_
- #define SRC_TINYGSMBATTERY_H_
-
- #include "TinyGsmCommon.h"
-
- #define TINY_GSM_MODEM_HAS_BATTERY
-
- template <class modemType>
- class TinyGsmBattery {
- public:
- /*
- * Battery functions
- */
- uint16_t getBattVoltage() {
- return thisModem().getBattVoltageImpl();
- }
- int8_t getBattPercent() {
- return thisModem().getBattPercentImpl();
- }
- uint8_t getBattChargeState() {
- return thisModem().getBattChargeStateImpl();
- }
- bool getBattStats(uint8_t& chargeState, int8_t& percent,
- uint16_t& milliVolts) {
- return thisModem().getBattStatsImpl(chargeState, percent, milliVolts);
- }
-
- /*
- * CRTP Helper
- */
- protected:
- inline const modemType& thisModem() const {
- return static_cast<const modemType&>(*this);
- }
- inline modemType& thisModem() {
- return static_cast<modemType&>(*this);
- }
-
- /*
- * Battery functions
- */
- protected:
- // Use: float vBatt = modem.getBattVoltage() / 1000.0;
- uint16_t getBattVoltageImpl() {
- thisModem().sendAT(GF("+CBC"));
- if (thisModem().waitResponse(GF("+CBC:")) != 1) { return 0; }
- thisModem().streamSkipUntil(','); // Skip battery charge status
- thisModem().streamSkipUntil(','); // Skip battery charge level
- // return voltage in mV
- uint16_t res = thisModem().streamGetIntBefore('\n');
- // Wait for final OK
- thisModem().waitResponse();
- return res;
- }
-
- int8_t getBattPercentImpl() {
- thisModem().sendAT(GF("+CBC"));
- if (thisModem().waitResponse(GF("+CBC:")) != 1) { return false; }
- thisModem().streamSkipUntil(','); // Skip battery charge status
- // Read battery charge level
- int8_t res = thisModem().streamGetIntBefore(',');
- // Wait for final OK
- thisModem().waitResponse();
- return res;
- }
-
- uint8_t getBattChargeStateImpl() {
- thisModem().sendAT(GF("+CBC"));
- if (thisModem().waitResponse(GF("+CBC:")) != 1) { return false; }
- // Read battery charge status
- int8_t res = thisModem().streamGetIntBefore(',');
- // Wait for final OK
- thisModem().waitResponse();
- return res;
- }
-
- bool getBattStatsImpl(uint8_t& chargeState, int8_t& percent,
- uint16_t& milliVolts) {
- thisModem().sendAT(GF("+CBC"));
- if (thisModem().waitResponse(GF("+CBC:")) != 1) { return false; }
- chargeState = thisModem().streamGetIntBefore(',');
- percent = thisModem().streamGetIntBefore(',');
- milliVolts = thisModem().streamGetIntBefore('\n');
- // Wait for final OK
- thisModem().waitResponse();
- return true;
- }
- };
-
- #endif // SRC_TINYGSMBATTERY_H_
|