feat(modem): add ability to change ESP_MODEM_C_API_STR_MAX from Kconfig

This commit is contained in:
embedcat
2024-09-11 11:40:09 +03:00
parent 73c48307a3
commit 1790989242
4 changed files with 17 additions and 14 deletions

View File

@ -63,4 +63,11 @@ menu "esp-modem"
dce_factory::Factory::create_unique_dce_from<CustomModule, DCE*>(dce_config, std::move(dte), netif) dce_factory::Factory::create_unique_dce_from<CustomModule, DCE*>(dce_config, std::move(dte), netif)
Please refer to the pppos_client example for more details. Please refer to the pppos_client example for more details.
config ESP_MODEM_C_API_STR_MAX
int "Size in bytes for response from AT commands returning textual values (C-API)"
default 128
help
Some AT commands returns textrual values which C-API copy as c-string to user allocated space,
it also truncates the output data to this size. Increase this if some AT answers are truncated.
endmenu endmenu

View File

@ -56,7 +56,7 @@ DCE *esp_modem_create_custom_dce(const esp_modem_dce_config_t *dce_config, std::
/** /**
* @brief This API is only needed for extending standard C-API, since we added get_time() method to our CustomModule * @brief This API is only needed for extending standard C-API, since we added get_time() method to our CustomModule
* *
* @note This header is included from esp_modem_c_api.cpp, so it could use ESP_MODEM_C_API_STR_MAX macro * @note This header is included from esp_modem_c_api.cpp, so it could use CONFIG_ESP_MODEM_C_API_STR_MAX macro
* indicating maximum C-API string size * indicating maximum C-API string size
* *
* @note In order to access the newly added API get_time(), we have to static_cast<> the GenericModule from DCE * @note In order to access the newly added API get_time(), we have to static_cast<> the GenericModule from DCE
@ -70,10 +70,10 @@ extern "C" esp_err_t esp_modem_get_time(esp_modem_dce_t *dce_wrap, char *p_time)
if (dce_wrap == nullptr || dce_wrap->dce == nullptr) { if (dce_wrap == nullptr || dce_wrap->dce == nullptr) {
return ESP_ERR_INVALID_ARG; return ESP_ERR_INVALID_ARG;
} }
std::string time{ESP_MODEM_C_API_STR_MAX}; std::string time{CONFIG_ESP_MODEM_C_API_STR_MAX};
auto ret = command_response_to_esp_err(static_cast<SIM7600_WITH_TIME *>(dce_wrap->dce->get_module())->get_time(time)); auto ret = command_response_to_esp_err(static_cast<SIM7600_WITH_TIME *>(dce_wrap->dce->get_module())->get_time(time));
if (ret == ESP_OK && !time.empty()) { if (ret == ESP_OK && !time.empty()) {
strlcpy(p_time, time.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_time, time.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }

View File

@ -16,10 +16,6 @@
#include "exception_stub.hpp" #include "exception_stub.hpp"
#include "esp_private/c_api_wrapper.hpp" #include "esp_private/c_api_wrapper.hpp"
#ifndef ESP_MODEM_C_API_STR_MAX
#define ESP_MODEM_C_API_STR_MAX 128
#endif
#ifndef HAVE_STRLCPY #ifndef HAVE_STRLCPY
size_t strlcpy(char *dest, const char *src, size_t len); size_t strlcpy(char *dest, const char *src, size_t len);
#endif #endif
@ -180,7 +176,7 @@ extern "C" esp_err_t esp_modem_at(esp_modem_dce_t *dce_wrap, const char *at, cha
std::string at_str(at); std::string at_str(at);
auto ret = command_response_to_esp_err(dce_wrap->dce->at(at_str, out, timeout)); auto ret = command_response_to_esp_err(dce_wrap->dce->at(at_str, out, timeout));
if ((p_out != NULL) && (!out.empty())) { if ((p_out != NULL) && (!out.empty())) {
strlcpy(p_out, out.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_out, out.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }
@ -201,7 +197,7 @@ extern "C" esp_err_t esp_modem_get_imsi(esp_modem_dce_t *dce_wrap, char *p_imsi)
std::string imsi; std::string imsi;
auto ret = command_response_to_esp_err(dce_wrap->dce->get_imsi(imsi)); auto ret = command_response_to_esp_err(dce_wrap->dce->get_imsi(imsi));
if (ret == ESP_OK && !imsi.empty()) { if (ret == ESP_OK && !imsi.empty()) {
strlcpy(p_imsi, imsi.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_imsi, imsi.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }
@ -214,7 +210,7 @@ extern "C" esp_err_t esp_modem_at_raw(esp_modem_dce_t *dce_wrap, const char *cmd
std::string out; std::string out;
auto ret = command_response_to_esp_err(dce_wrap->dce->at_raw(cmd, out, pass, fail, timeout)); auto ret = command_response_to_esp_err(dce_wrap->dce->at_raw(cmd, out, pass, fail, timeout));
if ((p_out != NULL) && (!out.empty())) { if ((p_out != NULL) && (!out.empty())) {
strlcpy(p_out, out.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_out, out.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }
@ -244,7 +240,7 @@ extern "C" esp_err_t esp_modem_get_imei(esp_modem_dce_t *dce_wrap, char *p_imei)
std::string imei; std::string imei;
auto ret = command_response_to_esp_err(dce_wrap->dce->get_imei(imei)); auto ret = command_response_to_esp_err(dce_wrap->dce->get_imei(imei));
if (ret == ESP_OK && !imei.empty()) { if (ret == ESP_OK && !imei.empty()) {
strlcpy(p_imei, imei.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_imei, imei.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }
@ -258,7 +254,7 @@ extern "C" esp_err_t esp_modem_get_operator_name(esp_modem_dce_t *dce_wrap, char
int act; int act;
auto ret = command_response_to_esp_err(dce_wrap->dce->get_operator_name(name, act)); auto ret = command_response_to_esp_err(dce_wrap->dce->get_operator_name(name, act));
if (ret == ESP_OK && !name.empty()) { if (ret == ESP_OK && !name.empty()) {
strlcpy(p_name, name.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_name, name.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
*p_act = act; *p_act = act;
} }
return ret; return ret;
@ -272,7 +268,7 @@ extern "C" esp_err_t esp_modem_get_module_name(esp_modem_dce_t *dce_wrap, char *
std::string name; std::string name;
auto ret = command_response_to_esp_err(dce_wrap->dce->get_module_name(name)); auto ret = command_response_to_esp_err(dce_wrap->dce->get_module_name(name));
if (ret == ESP_OK && !name.empty()) { if (ret == ESP_OK && !name.empty()) {
strlcpy(p_name, name.c_str(), ESP_MODEM_C_API_STR_MAX); strlcpy(p_name, name.c_str(), CONFIG_ESP_MODEM_C_API_STR_MAX);
} }
return ret; return ret;
} }

View File

@ -43,7 +43,7 @@ These functions are the actual commands to communicate with the modem using AT c
Note that the functions which implement AT commands returning textual values use plain ``char *`` Note that the functions which implement AT commands returning textual values use plain ``char *``
pointer as the return value. The API expects the output data to point to user allocated space of at least pointer as the return value. The API expects the output data to point to user allocated space of at least
``ESP_MODEM_C_API_STR_MAX`` (64 by default) bytes, it also truncates the output data to this size. ``CONFIG_ESP_MODEM_C_API_STR_MAX`` (128 by default) bytes, it also truncates the output data to this size.
.. doxygenfile:: esp_modem_api_commands.h .. doxygenfile:: esp_modem_api_commands.h