get modem voltage and ber and cmux

This commit is contained in:
Alex Pyslar 2024-10-22 12:52:41 +03:00 committed by Chelios
parent 77c314f930
commit ead5995f13
2 changed files with 44 additions and 22 deletions

View file

@ -69,8 +69,6 @@ void ModemComponent::setup() {
ESP_LOGD(TAG, "Initializing esp_modem"); ESP_LOGD(TAG, "Initializing esp_modem");
this->modem_netif_init_(); this->modem_netif_init_();
this->dte_init_(); this->dte_init_();
this->started_ = true;
} }
void ModemComponent::loop() { void ModemComponent::loop() {
@ -154,11 +152,12 @@ void ModemComponent::loop() {
// The state of waiting for the modem to register in the network // The state of waiting for the modem to register in the network
case ModemComponentState::REGISTRATION_IN_NETWORK: case ModemComponentState::REGISTRATION_IN_NETWORK:
if (get_rssi_()) { if (get_rssi()) {
ESP_LOGD(TAG, "Starting modem connection"); ESP_LOGD(TAG, "Starting modem connection");
ESP_LOGD(TAG, "SIgnal quality: rssi=%d", get_rssi_()); ESP_LOGD(TAG, "SIgnal quality: rssi=%d", get_rssi());
this->set_state_(ModemComponentState::CONNECTING); this->set_state_(ModemComponentState::CONNECTING);
this->dce_->set_data(); // this->dce_->set_data();
this->dce_->set_mode(esp_modem::modem_mode::CMUX_MODE);
} else { } else {
ESP_LOGD(TAG, "Wait RSSI"); ESP_LOGD(TAG, "Wait RSSI");
} }
@ -172,11 +171,7 @@ void ModemComponent::loop() {
// The state of network connection established // The state of network connection established
case ModemComponentState::CONNECTED: case ModemComponentState::CONNECTED:
if (esp_netif_is_netif_up(this->modem_netif_)) { ESP_LOGD(TAG, "The modem works!");
ESP_LOGD(TAG, "esp_netif_is_netif_UP");
} else {
ESP_LOGD(TAG, "esp_netif_is_netif_DOWN");
}
break; break;
default: default:
@ -234,6 +229,7 @@ void ModemComponent::set_state_(ModemComponentState state) {
switch (state) { switch (state) {
case ModemComponentState::SYNC: case ModemComponentState::SYNC:
this->dce_init_(); this->dce_init_();
this->started = true;
break; break;
default: default:
@ -302,14 +298,40 @@ void ModemComponent::dump_connect_params() {
ESP_LOGCONFIG(TAG, " DNS2: %s", network::IPAddress(&dns_info.ip.u_addr.ip4).str().c_str()); ESP_LOGCONFIG(TAG, " DNS2: %s", network::IPAddress(&dns_info.ip.u_addr.ip4).str().c_str());
} }
int ModemComponent::get_rssi_() { int ModemComponent::get_rssi() {
int rssi = 0, ber = 0; if (this->started) {
esp_modem::command_result errr = this->dce_->get_signal_quality(rssi, ber); int rssi = 0, ber = 0;
// esp_err_t err = esp_modem::esp_modem_get_signal_quality(dce, &rssi, &ber); esp_modem::command_result errr = this->dce_->get_signal_quality(rssi, ber);
if (errr != esp_modem::command_result::OK) { if (errr != esp_modem::command_result::OK) {
ESP_LOGE(TAG, "esp_modem_get_signal_quality failed with"); ESP_LOGE(TAG, "esp_modem_get_signal_quality failed with");
}
return rssi;
} }
return rssi; return 0;
}
int ModemComponent::get_ber() {
if (this->started) {
int rssi = 0, ber = 0;
esp_modem::command_result errr = this->dce_->get_signal_quality(rssi, ber);
if (errr != esp_modem::command_result::OK) {
ESP_LOGE(TAG, "esp_modem_get_signal_quality failed with");
}
return ber;
}
return 0;
}
int ModemComponent::get_modem_voltage() {
if (this->started) {
int milli_volt = 0, bcs = 0, bcl = 0;
esp_modem::command_result errr = this->dce_->get_battery_status(milli_volt, bcs, bcl);
if (errr != esp_modem::command_result::OK) {
ESP_LOGE(TAG, "esp_modem_get_modem_voltage failed with");
}
return milli_volt;
}
return 0;
} }
float ModemComponent::get_setup_priority() const { return setup_priority::MODEM; } float ModemComponent::get_setup_priority() const { return setup_priority::MODEM; }

View file

@ -9,7 +9,7 @@
#include "esphome/components/network/ip_address.h" #include "esphome/components/network/ip_address.h"
#include <map> #include <map>
using esphome::esp_log_printf_; using esphome::esp_log_printf_; // NOLINT
#include "esp_netif.h" #include "esp_netif.h"
#include "cxx_include/esp_modem_api.hpp" #include "cxx_include/esp_modem_api.hpp"
@ -55,6 +55,7 @@ class ModemComponent : public Component {
float get_setup_priority() const override; float get_setup_priority() const override;
bool can_proceed() override; bool can_proceed() override;
bool is_connected(); bool is_connected();
bool started{false};
void set_power_pin(InternalGPIOPin *power_pin); void set_power_pin(InternalGPIOPin *power_pin);
void set_pwrkey_pin(InternalGPIOPin *pwrkey_pin); void set_pwrkey_pin(InternalGPIOPin *pwrkey_pin);
void set_type(ModemType type); void set_type(ModemType type);
@ -67,6 +68,9 @@ class ModemComponent : public Component {
void set_uart_event_queue_size(int uart_event_queue_size); void set_uart_event_queue_size(int uart_event_queue_size);
void set_uart_tx_buffer_size(int uart_tx_buffer_size); void set_uart_tx_buffer_size(int uart_tx_buffer_size);
void set_uart_rx_buffer_size(int uart_rx_buffer_size); void set_uart_rx_buffer_size(int uart_rx_buffer_size);
int get_rssi();
int get_ber();
int get_modem_voltage();
network::IPAddress get_ip_address(); network::IPAddress get_ip_address();
std::string get_use_address() const; std::string get_use_address() const;
@ -93,8 +97,6 @@ class ModemComponent : public Component {
void dce_init_(); void dce_init_();
bool check_modem_component_state_timings_(); bool check_modem_component_state_timings_();
int get_rssi_();
int get_modem_voltage_();
const char *get_state_(); const char *get_state_();
void set_state_(ModemComponentState state); void set_state_(ModemComponentState state);
const char *state_to_string_(ModemComponentState state); const char *state_to_string_(ModemComponentState state);
@ -118,8 +120,6 @@ class ModemComponent : public Component {
uint pull_time_{0}; uint pull_time_{0};
uint change_state_{0}; uint change_state_{0};
bool started_{false};
ModemComponentState state_{ModemComponentState::TURNING_ON_POWER}; ModemComponentState state_{ModemComponentState::TURNING_ON_POWER};
int connect_begin_; int connect_begin_;
esp_netif_t *modem_netif_{nullptr}; esp_netif_t *modem_netif_{nullptr};