diff --git a/components/esp_modem/include/generate/esp_modem_command_declare.inc b/components/esp_modem/include/generate/esp_modem_command_declare.inc index f4b71c30f..5c512b3ad 100644 --- a/components/esp_modem/include/generate/esp_modem_command_declare.inc +++ b/components/esp_modem/include/generate/esp_modem_command_declare.inc @@ -72,9 +72,10 @@ ESP_MODEM_DECLARE_DCE_COMMAND(set_pin, command_result, 1, STRING_IN(p1, pin)) \ * @brief Execute the supplied AT command * @param[in] at AT command * @param[out] out Command output string + * @param[in] timeout AT command timeout in milliseconds * @return OK, FAIL or TIMEOUT */\ -ESP_MODEM_DECLARE_DCE_COMMAND(at, command_result, 2, STRING_IN(p1, cmd), STRING_OUT(p2, out)) \ +ESP_MODEM_DECLARE_DCE_COMMAND(at, command_result, 3, STRING_IN(p1, cmd), STRING_OUT(p2, out), INT_IN(p3, timeout)) \ \ /** * @brief Checks if the SIM needs a PIN diff --git a/components/esp_modem/src/esp_modem_c_api.cpp b/components/esp_modem/src/esp_modem_c_api.cpp index e041e469c..27473fb5d 100644 --- a/components/esp_modem/src/esp_modem_c_api.cpp +++ b/components/esp_modem/src/esp_modem_c_api.cpp @@ -179,14 +179,14 @@ extern "C" esp_err_t esp_modem_set_pin(esp_modem_dce_t *dce_wrap, const char *pi return command_response_to_esp_err(dce_wrap->dce->set_pin(pin_str)); } -extern "C" esp_err_t esp_modem_at(esp_modem_dce_t *dce_wrap, const char *at, char *p_out) +extern "C" esp_err_t esp_modem_at(esp_modem_dce_t *dce_wrap, const char *at, char *p_out, int timeout) { if (dce_wrap == nullptr || dce_wrap->dce == nullptr) { return ESP_ERR_INVALID_ARG; } std::string out; std::string at_str(at); - auto ret = command_response_to_esp_err(dce_wrap->dce->at(at_str, out)); + auto ret = command_response_to_esp_err(dce_wrap->dce->at(at_str, out, timeout)); if ((p_out != NULL) && (!out.empty())) { strlcpy(p_out, out.c_str(), ESP_MODEM_C_API_STR_MAX); } diff --git a/components/esp_modem/src/esp_modem_command_library.cpp b/components/esp_modem/src/esp_modem_command_library.cpp index dd79e8e98..78be8879f 100644 --- a/components/esp_modem/src/esp_modem_command_library.cpp +++ b/components/esp_modem/src/esp_modem_command_library.cpp @@ -273,7 +273,7 @@ command_result set_pdp_context(CommandableIf *t, PdpContext &pdp) ESP_LOGV(TAG, "%s", __func__ ); std::string pdp_command = "AT+CGDCONT=" + std::to_string(pdp.context_id) + ",\"" + pdp.protocol_type + "\",\"" + pdp.apn + "\"\r"; - return generic_command_common(t, pdp_command); + return generic_command_common(t, pdp_command, 150000); } command_result set_data_mode(CommandableIf *t) @@ -389,11 +389,11 @@ command_result set_pin(CommandableIf *t, const std::string &pin) return generic_command_common(t, set_pin_command); } -command_result at(CommandableIf *t, const std::string &cmd, std::string &out) +command_result at(CommandableIf *t, const std::string &cmd, std::string &out, int timeout = 500) { ESP_LOGV(TAG, "%s", __func__ ); std::string at_command = cmd + "\r"; - return generic_get_string(t, at_command, out); + return generic_get_string(t, at_command, out, timeout); } command_result get_signal_quality(CommandableIf *t, int &rssi, int &ber) @@ -458,7 +458,7 @@ command_result get_network_attachment_state(CommandableIf *t, int &state) command_result set_radio_state(CommandableIf *t, int state) { ESP_LOGV(TAG, "%s", __func__ ); - return generic_command_common(t, "AT+CFUN=" + std::to_string(state) + "\r"); + return generic_command_common(t, "AT+CFUN=" + std::to_string(state) + "\r", 15000); } command_result get_radio_state(CommandableIf *t, int &state)