use flush_uart to get long at results

This commit is contained in:
oarcher 2024-08-17 03:34:42 +02:00
parent 8681a5b302
commit 17309fb315
2 changed files with 9 additions and 9 deletions

View file

@ -83,7 +83,7 @@ AtCommandResult ModemComponent::get_imei() {
// get the imei, and check the result is a valid imei string // get the imei, and check the result is a valid imei string
// (so it can be used to check if the modem is responding correctly (a simple 'AT' cmd is sometime not enough)) // (so it can be used to check if the modem is responding correctly (a simple 'AT' cmd is sometime not enough))
AtCommandResult at_command_result; AtCommandResult at_command_result;
at_command_result = this->send_at("AT+CGSN", 4000); at_command_result = this->send_at("AT+CGSN", this->command_delay_);
if (at_command_result.success && at_command_result.output.length() == 15) { if (at_command_result.success && at_command_result.output.length() == 15) {
for (char c : at_command_result.output) { for (char c : at_command_result.output) {
if (!isdigit(static_cast<unsigned char>(c))) { if (!isdigit(static_cast<unsigned char>(c))) {
@ -665,9 +665,9 @@ void ModemComponent::send_init_at_() {
std::replace(output.begin(), output.end(), '\n', ' '); std::replace(output.begin(), output.end(), '\n', ' ');
return command_result::OK; return command_result::OK;
}, },
2000), this->command_delay_),
"init_at"); "init_at");
output += this->flush_uart_(); // probably a bug in esp_modem. long string are truncated
ESP_LOGI(TAG, "init_at %s: %s", cmd.c_str(), output.c_str()); ESP_LOGI(TAG, "init_at %s: %s", cmd.c_str(), output.c_str());
} }
this->flush_uart_(); this->flush_uart_();
@ -803,7 +803,8 @@ void ModemComponent::dump_connect_params_() {
ESP_LOGCONFIG(TAG, " DNS fallback: %s", network::IPAddress(dns_fallback_ip).str().c_str()); ESP_LOGCONFIG(TAG, " DNS fallback: %s", network::IPAddress(dns_fallback_ip).str().c_str());
} }
bool ModemComponent::flush_uart_() { std::string ModemComponent::flush_uart_() {
// empty command that just read the result, to flush the uart
size_t cleaned = 0; size_t cleaned = 0;
std::string output; std::string output;
this->dce->command( this->dce->command(
@ -811,15 +812,14 @@ bool ModemComponent::flush_uart_() {
[&](uint8_t *data, size_t len) { [&](uint8_t *data, size_t len) {
cleaned = len; cleaned = len;
output.assign(reinterpret_cast<char *>(data), len); output.assign(reinterpret_cast<char *>(data), len);
std::replace(output.begin(), output.end(), '\n', ' ');
return command_result::OK; return command_result::OK;
}, },
2000); this->command_delay_);
if (cleaned != 0) { if (cleaned != 0) {
ESP_LOGW(TAG, "Cleaned %d modem buffer data: %s", cleaned, output.c_str()); ESP_LOGD(TAG, "Flushed %d modem buffer data: %s", cleaned, output.c_str());
} }
return cleaned != 0; return output;
} }
const char *AtCommandResult::c_str() const { const char *AtCommandResult::c_str() const {

View file

@ -121,7 +121,7 @@ class ModemComponent : public Component {
void abort_(const std::string &message); void abort_(const std::string &message);
static void ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data); static void ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data);
void dump_connect_params_(); void dump_connect_params_();
bool flush_uart_(); std::string flush_uart_();
// Attributes from yaml config // Attributes from yaml config
uint32_t timeout_; uint32_t timeout_;