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 2ae7a7224..1709bf9da 100644 --- a/components/esp_modem/include/generate/esp_modem_command_declare.inc +++ b/components/esp_modem/include/generate/esp_modem_command_declare.inc @@ -65,7 +65,15 @@ ESP_MODEM_DECLARE_DCE_COMMAND(store_profile, command_result, 0) \ * @param[in] pin Pin * @return OK, FAIL or TIMEOUT */\ -ESP_MODEM_DECLARE_DCE_COMMAND(set_pin, command_result, 1, STRING_IN(p1, pin)) \ +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 + * @return OK, FAIL or TIMEOUT + */\ +ESP_MODEM_DECLARE_DCE_COMMAND(at, command_result, 2, STRING_IN(p1, cmd), STRING_OUT(p2, out)) \ \ /** * @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 e89fc1950..e1a9e9d9c 100644 --- a/components/esp_modem/src/esp_modem_c_api.cpp +++ b/components/esp_modem/src/esp_modem_c_api.cpp @@ -184,6 +184,20 @@ 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) +{ + 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)); + if ((p_out != NULL) && (!out.empty())) { + strlcpy(p_out, out.c_str(), ESP_MODEM_C_API_STR_MAX); + } + return ret; +} + extern "C" esp_err_t esp_modem_get_signal_quality(esp_modem_dce_t *dce_wrap, int *rssi, int *ber) { if (dce_wrap == nullptr || dce_wrap->dce == nullptr) { diff --git a/components/esp_modem/src/esp_modem_command_library.cpp b/components/esp_modem/src/esp_modem_command_library.cpp index 39a3b6176..867ca20ad 100644 --- a/components/esp_modem/src/esp_modem_command_library.cpp +++ b/components/esp_modem/src/esp_modem_command_library.cpp @@ -379,6 +379,13 @@ 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) +{ + ESP_LOGV(TAG, "%s", __func__ ); + std::string at_command = cmd + "\r"; + return generic_get_string(t, at_command, out); +} + command_result get_signal_quality(CommandableIf *t, int &rssi, int &ber) { ESP_LOGV(TAG, "%s", __func__ ); @@ -543,4 +550,4 @@ command_result set_gnss_power_mode_sim76xx(CommandableIf *t, int mode) return generic_command_common(t, "AT+CGPS=" + std::to_string(mode) + "\r"); } -} // esp_modem::dce_commands \ No newline at end of file +} // esp_modem::dce_commands