mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-29 18:27:31 +02:00
feat(modem): add ability to change ESP_MODEM_C_API_STR_MAX from Kconfig
This commit is contained in:
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user