fix(modem): Add support for URC handler into C-API

Closes https://github.com/espressif/esp-protocols/issues/180
This commit is contained in:
David Cermak
2024-11-19 15:57:29 +01:00
parent b65cff3a0b
commit 295d99df96
3 changed files with 40 additions and 0 deletions

View File

@ -141,6 +141,21 @@ esp_err_t esp_modem_command(esp_modem_dce_t *dce, const char *command, esp_err_t
*/ */
esp_err_t esp_modem_set_apn(esp_modem_dce_t *dce, const char *apn); esp_err_t esp_modem_set_apn(esp_modem_dce_t *dce, const char *apn);
#ifdef CONFIG_ESP_MODEM_URC_HANDLER
/**
* @brief Sets a handler for unsolicited result codes (URCs) from the modem
*
* This function registers a callback that is triggered whenever an unsolicited
* result code (URC) is received from the modem. URCs are typically sent by the
* modem without a prior command to notify the host about certain events or status changes.
*
* @param dce Modem DCE handle
* @param got_line_cb Callback function which is called whenever a URC line is received
* @return ESP_OK on success, ESP_FAIL on failure
*/
esp_err_t esp_modem_set_urc(esp_modem_dce_t *dce, esp_err_t(*got_line_cb)(uint8_t *data, size_t len));
#endif
/** /**
* @} * @}
*/ */

View File

@ -451,3 +451,27 @@ extern "C" esp_err_t esp_modem_set_apn(esp_modem_dce_t *dce_wrap, const char *ap
dce_wrap->dce->get_module()->configure_pdp_context(std::move(new_pdp)); dce_wrap->dce->get_module()->configure_pdp_context(std::move(new_pdp));
return ESP_OK; return ESP_OK;
} }
#ifdef CONFIG_ESP_MODEM_URC_HANDLER
extern "C" esp_err_t esp_modem_set_urc(esp_modem_dce_t *dce_wrap, esp_err_t(*got_line_fn)(uint8_t *data, size_t len))
{
if (dce_wrap == nullptr || dce_wrap->dce == nullptr) {
return ESP_ERR_INVALID_ARG;
}
if (got_line_fn == nullptr) {
dce_wrap->dce->set_urc(nullptr);
return ESP_OK;
}
dce_wrap->dce->set_urc([got_line_fn](uint8_t *data, size_t len) {
switch (got_line_fn(data, len)) {
case ESP_OK:
return command_result::OK;
case ESP_FAIL:
return command_result::FAIL;
default:
return command_result::TIMEOUT;
}
});
return ESP_OK;
}
#endif

View File

@ -72,6 +72,7 @@ private:
{ {
auto t = static_cast<UartTerminal *>(task_param); auto t = static_cast<UartTerminal *>(task_param);
t->task(); t->task();
t->task_handle.task_handle = nullptr;
vTaskDelete(nullptr); vTaskDelete(nullptr);
} }