Skip to content

PPP: add "battery status" read stub functions #10043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 61 additions & 126 deletions libraries/PPP/src/PPP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@
#include "driver/uart.h"
#include "hal/uart_ll.h"

#define PPP_CMD_MODE_CHECK(x) \
if (_dce == NULL) { \
return x; \
} \
if (_mode == ESP_MODEM_MODE_DATA) { \
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND"); \
return x; \
}

typedef struct {
void *arg;
} PdpContext;
Expand Down Expand Up @@ -416,26 +425,13 @@ void PPPClass::end(void) {
}

bool PPPClass::sync() const {
if (_dce == NULL) {
return false;
}
PPP_CMD_MODE_CHECK(false);

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
return esp_modem_sync(_dce) == ESP_OK;
}

bool PPPClass::attached() const {
if (_dce == NULL) {
return false;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
PPP_CMD_MODE_CHECK(false);

int m = 0;
esp_err_t err = esp_modem_get_network_attachment_state(_dce, m);
Expand Down Expand Up @@ -500,52 +496,31 @@ bool PPPClass::setPin(const char *pin) {
}

int PPPClass::RSSI() const {
if (_dce == NULL) {
return -1;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return -1;
}
PPP_CMD_MODE_CHECK(-1);

int rssi, ber;
esp_err_t err = esp_modem_get_signal_quality(_dce, rssi, ber);
if (err != ESP_OK) {
// log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
return -1;
}
return rssi;
}

int PPPClass::BER() const {
if (_dce == NULL) {
return -1;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return -1;
}
PPP_CMD_MODE_CHECK(-1);

int rssi, ber;
esp_err_t err = esp_modem_get_signal_quality(_dce, rssi, ber);
if (err != ESP_OK) {
// log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
log_e("esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
return -1;
}
return ber;
}

String PPPClass::IMSI() const {
if (_dce == NULL) {
return String();
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return String();
}
PPP_CMD_MODE_CHECK(String());

char imsi[32];
esp_err_t err = esp_modem_get_imsi(_dce, (std::string &)imsi);
Expand All @@ -558,14 +533,7 @@ String PPPClass::IMSI() const {
}

String PPPClass::IMEI() const {
if (_dce == NULL) {
return String();
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return String();
}
PPP_CMD_MODE_CHECK(String());

char imei[32];
esp_err_t err = esp_modem_get_imei(_dce, (std::string &)imei);
Expand All @@ -578,14 +546,7 @@ String PPPClass::IMEI() const {
}

String PPPClass::moduleName() const {
if (_dce == NULL) {
return String();
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return String();
}
PPP_CMD_MODE_CHECK(String());

char name[32];
esp_err_t err = esp_modem_get_module_name(_dce, (std::string &)name);
Expand All @@ -598,14 +559,7 @@ String PPPClass::moduleName() const {
}

String PPPClass::operatorName() const {
if (_dce == NULL) {
return String();
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return String();
}
PPP_CMD_MODE_CHECK(String());

char oper[32];
int act = 0;
Expand All @@ -619,14 +573,7 @@ String PPPClass::operatorName() const {
}

int PPPClass::networkMode() const {
if (_dce == NULL) {
return -1;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return -1;
}
PPP_CMD_MODE_CHECK(-1);

int m = 0;
esp_err_t err = esp_modem_get_network_system_mode(_dce, m);
Expand All @@ -638,14 +585,7 @@ int PPPClass::networkMode() const {
}

int PPPClass::radioState() const {
if (_dce == NULL) {
return -1;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return -1;
}
PPP_CMD_MODE_CHECK(-1);

int m = 0;
esp_err_t err = esp_modem_get_radio_state(_dce, m);
Expand All @@ -657,14 +597,7 @@ int PPPClass::radioState() const {
}

bool PPPClass::powerDown() {
if (_dce == NULL) {
return false;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
PPP_CMD_MODE_CHECK(false);

esp_err_t err = esp_modem_power_down(_dce);
if (err != ESP_OK) {
Expand All @@ -675,14 +608,7 @@ bool PPPClass::powerDown() {
}

bool PPPClass::reset() {
if (_dce == NULL) {
return false;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
PPP_CMD_MODE_CHECK(false);

esp_err_t err = esp_modem_reset(_dce);
if (err != ESP_OK) {
Expand All @@ -693,14 +619,7 @@ bool PPPClass::reset() {
}

bool PPPClass::storeProfile() {
if (_dce == NULL) {
return false;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
PPP_CMD_MODE_CHECK(false);

esp_err_t err = esp_modem_store_profile(_dce);
if (err != ESP_OK) {
Expand All @@ -711,14 +630,7 @@ bool PPPClass::storeProfile() {
}

bool PPPClass::setBaudrate(int baudrate) {
if (_dce == NULL) {
return false;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
}
PPP_CMD_MODE_CHECK(false);

esp_err_t err = esp_modem_set_baud(_dce, baudrate);
if (err != ESP_OK) {
Expand All @@ -737,15 +649,44 @@ bool PPPClass::setBaudrate(int baudrate) {
return true;
}

bool PPPClass::sms(const char *num, const char *message) {
if (_dce == NULL) {
return false;
int PPPClass::batteryVoltage() const {
PPP_CMD_MODE_CHECK(-1);

int volt, bcs, bcl;
esp_err_t err = esp_modem_get_battery_status(_dce, volt, bcs, bcl);
if (err != ESP_OK) {
log_e("esp_modem_get_battery_status failed with %d %s", err, esp_err_to_name(err));
return -1;
}
return volt;
}

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return false;
int PPPClass::batteryLevel() const {
PPP_CMD_MODE_CHECK(-1);

int volt, bcs, bcl;
esp_err_t err = esp_modem_get_battery_status(_dce, volt, bcs, bcl);
if (err != ESP_OK) {
log_e("esp_modem_get_battery_status failed with %d %s", err, esp_err_to_name(err));
return -1;
}
return bcl;
}

int PPPClass::batteryStatus() const {
PPP_CMD_MODE_CHECK(-1);

int volt, bcs, bcl;
esp_err_t err = esp_modem_get_battery_status(_dce, volt, bcs, bcl);
if (err != ESP_OK) {
log_e("esp_modem_get_battery_status failed with %d %s", err, esp_err_to_name(err));
return -1;
}
return bcs;
}

bool PPPClass::sms(const char *num, const char *message) {
PPP_CMD_MODE_CHECK(false);

for (int i = 0; i < strlen(num); i++) {
if (num[i] != '+' && num[i] != '#' && num[i] != '*' && (num[i] < 0x30 || num[i] > 0x39)) {
Expand Down Expand Up @@ -775,14 +716,8 @@ bool PPPClass::sms(const char *num, const char *message) {
}

String PPPClass::cmd(const char *at_command, int timeout) {
if (_dce == NULL) {
return String();
}
PPP_CMD_MODE_CHECK(String());

if (_mode == ESP_MODEM_MODE_DATA) {
log_e("Wrong modem mode. Should be ESP_MODEM_MODE_COMMAND");
return String();
}
char out[128] = {0};
esp_err_t err = _esp_modem_at(_dce, at_command, out, timeout);
if (err != ESP_OK) {
Expand Down
3 changes: 3 additions & 0 deletions libraries/PPP/src/PPP.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ class PPPClass : public NetworkInterface {
int radioState() const; // 0:minimal, 1:full
bool attached() const; // true is attached to network
bool sync() const; // true if responds to 'AT'
int batteryVoltage() const;
int batteryLevel() const;
int batteryStatus() const;

// Switch the communication mode
bool mode(esp_modem_dce_mode_t m);
Expand Down
Loading