mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-09 23:54:33 +02:00
rmt: const callback event data
This commit is contained in:
@@ -46,7 +46,7 @@ typedef struct {
|
|||||||
*
|
*
|
||||||
* @return Whether a high priority task has been waken up by this callback function
|
* @return Whether a high priority task has been waken up by this callback function
|
||||||
*/
|
*/
|
||||||
typedef bool (*rmt_tx_done_callback_t)(rmt_channel_handle_t tx_chan, rmt_tx_done_event_data_t *edata, void *user_ctx);
|
typedef bool (*rmt_tx_done_callback_t)(rmt_channel_handle_t tx_chan, const rmt_tx_done_event_data_t *edata, void *user_ctx);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Type of RMT RX done event data
|
* @brief Type of RMT RX done event data
|
||||||
@@ -65,7 +65,7 @@ typedef struct {
|
|||||||
* @param[in] user_ctx User registered context, passed from `rmt_rx_register_event_callbacks()`
|
* @param[in] user_ctx User registered context, passed from `rmt_rx_register_event_callbacks()`
|
||||||
* @return Whether a high priority task has been waken up by this function
|
* @return Whether a high priority task has been waken up by this function
|
||||||
*/
|
*/
|
||||||
typedef bool (*rmt_rx_done_callback_t)(rmt_channel_handle_t rx_chan, rmt_rx_done_event_data_t *edata, void *user_ctx);
|
typedef bool (*rmt_rx_done_callback_t)(rmt_channel_handle_t rx_chan, const rmt_rx_done_event_data_t *edata, void *user_ctx);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,7 @@ typedef struct {
|
|||||||
} test_nec_rx_user_data_t;
|
} test_nec_rx_user_data_t;
|
||||||
|
|
||||||
TEST_RMT_CALLBACK_ATTR
|
TEST_RMT_CALLBACK_ATTR
|
||||||
static bool test_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data)
|
static bool test_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
BaseType_t high_task_wakeup = pdFALSE;
|
BaseType_t high_task_wakeup = pdFALSE;
|
||||||
test_nec_rx_user_data_t *test_user_data = (test_nec_rx_user_data_t *)user_data;
|
test_nec_rx_user_data_t *test_user_data = (test_nec_rx_user_data_t *)user_data;
|
||||||
|
@@ -160,7 +160,7 @@ TEST_CASE("rmt_ping_pong_trans_with_dma", "[rmt]")
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST_RMT_CALLBACK_ATTR
|
TEST_RMT_CALLBACK_ATTR
|
||||||
static bool test_rmt_tx_done_cb_check_event_data(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data)
|
static bool test_rmt_tx_done_cb_check_event_data(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
|
uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
|
||||||
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
|
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
|
||||||
@@ -237,7 +237,7 @@ TEST_CASE("rmt_trans_done_event_callback_with_dma", "[rmt]")
|
|||||||
#if SOC_RMT_SUPPORT_TX_LOOP_COUNT
|
#if SOC_RMT_SUPPORT_TX_LOOP_COUNT
|
||||||
|
|
||||||
TEST_RMT_CALLBACK_ATTR
|
TEST_RMT_CALLBACK_ATTR
|
||||||
static bool test_rmt_loop_done_cb_check_event_data(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data)
|
static bool test_rmt_loop_done_cb_check_event_data(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
|
uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
|
||||||
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
|
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
|
||||||
@@ -454,7 +454,7 @@ TEST_CASE("rmt_tx_nec_carrier_with_dma", "[rmt]")
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST_RMT_CALLBACK_ATTR
|
TEST_RMT_CALLBACK_ATTR
|
||||||
static bool test_rmt_tx_done_cb_record_time(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data)
|
static bool test_rmt_tx_done_cb_record_time(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
int64_t *record_time = (int64_t *)user_data;
|
int64_t *record_time = (int64_t *)user_data;
|
||||||
*record_time = esp_timer_get_time();
|
*record_time = esp_timer_get_time();
|
||||||
|
@@ -304,21 +304,21 @@ The receiver will be stopped by the driver when it finishes working (i.e. receiv
|
|||||||
|
|
||||||
.. code:: c
|
.. code:: c
|
||||||
|
|
||||||
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data)
|
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
BaseType_t high_task_wakeup = pdFALSE;
|
BaseType_t high_task_wakeup = pdFALSE;
|
||||||
TaskHandle_t task_to_notify = (TaskHandle_t)user_data;
|
QueueHandle_t receive_queue = (QueueHandle_t)user_data;
|
||||||
// send the received RMT symbols to the parser task
|
// send the received RMT symbols to the parser task
|
||||||
xTaskNotifyFromISR(task_to_notify, (uint32_t)edata, eSetValueWithOverwrite, &high_task_wakeup);
|
xQueueSendFromISR(receive_queue, edata, &high_task_wakeup);
|
||||||
// return whether any task is woken up
|
// return whether any task is woken up
|
||||||
return high_task_wakeup == pdTRUE;
|
return high_task_wakeup == pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskHandle_t cur_task = xTaskGetCurrentTaskHandle();
|
QueueHandle_t receive_queue = xQueueCreate(1, sizeof(rmt_rx_done_event_data_t));
|
||||||
rmt_rx_event_callbacks_t cbs = {
|
rmt_rx_event_callbacks_t cbs = {
|
||||||
.on_recv_done = example_rmt_rx_done_callback,
|
.on_recv_done = example_rmt_rx_done_callback,
|
||||||
};
|
};
|
||||||
ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(rx_channel, &cbs, cur_task));
|
ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(rx_channel, &cbs, receive_queue));
|
||||||
|
|
||||||
// the following timing requirement is based on NEC protocol
|
// the following timing requirement is based on NEC protocol
|
||||||
rmt_receive_config_t receive_config = {
|
rmt_receive_config_t receive_config = {
|
||||||
@@ -330,10 +330,10 @@ The receiver will be stopped by the driver when it finishes working (i.e. receiv
|
|||||||
// ready to receive
|
// ready to receive
|
||||||
ESP_ERROR_CHECK(rmt_receive(rx_channel, raw_symbols, sizeof(raw_symbols), &receive_config));
|
ESP_ERROR_CHECK(rmt_receive(rx_channel, raw_symbols, sizeof(raw_symbols), &receive_config));
|
||||||
// wait for RX done signal
|
// wait for RX done signal
|
||||||
rmt_rx_done_event_data_t *rx_data = NULL;
|
rmt_rx_done_event_data_t rx_data;
|
||||||
xTaskNotifyWait(0x00, ULONG_MAX, (uint32_t *)&rx_data, portMAX_DELAY);
|
xQueueReceive(receive_queue, &rx_data, portMAX_DELAY);
|
||||||
// parse the receive symbols
|
// parse the receive symbols
|
||||||
example_parse_nec_frame(rx_data->received_symbols, rx_data->num_symbols);
|
example_parse_nec_frame(rx_data.received_symbols, rx_data.num_symbols);
|
||||||
|
|
||||||
RMT Encoder
|
RMT Encoder
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
|
@@ -142,7 +142,7 @@ static void example_parse_nec_frame(rmt_symbol_word_t *rmt_nec_symbols, size_t s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data)
|
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
BaseType_t high_task_wakeup = pdFALSE;
|
BaseType_t high_task_wakeup = pdFALSE;
|
||||||
QueueHandle_t receive_queue = (QueueHandle_t)user_data;
|
QueueHandle_t receive_queue = (QueueHandle_t)user_data;
|
||||||
|
@@ -144,7 +144,7 @@ const static rmt_receive_config_t onewire_rmt_rx_config = {
|
|||||||
.signal_range_max_ns = (ONEWIRE_RESET_PULSE_DURATION + ONEWIRE_RESET_WAIT_DURATION) * 1000
|
.signal_range_max_ns = (ONEWIRE_RESET_PULSE_DURATION + ONEWIRE_RESET_WAIT_DURATION) * 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool onewire_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data)
|
static bool onewire_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
|
||||||
{
|
{
|
||||||
BaseType_t task_woken = pdFALSE;
|
BaseType_t task_woken = pdFALSE;
|
||||||
struct onewire_bus_t *handle = (struct onewire_bus_t *)user_data;
|
struct onewire_bus_t *handle = (struct onewire_bus_t *)user_data;
|
||||||
@@ -324,7 +324,7 @@ esp_err_t onewire_del_bus(onewire_bus_handle_t handle)
|
|||||||
rmt_disable(handle->tx_channel);
|
rmt_disable(handle->tx_channel);
|
||||||
rmt_del_channel(handle->tx_channel);
|
rmt_del_channel(handle->tx_channel);
|
||||||
}
|
}
|
||||||
if(handle->receive_queue) {
|
if (handle->receive_queue) {
|
||||||
vQueueDelete(handle->receive_queue);
|
vQueueDelete(handle->receive_queue);
|
||||||
}
|
}
|
||||||
if (handle->rx_symbols) {
|
if (handle->rx_symbols) {
|
||||||
@@ -340,7 +340,7 @@ esp_err_t onewire_bus_reset(onewire_bus_handle_t handle)
|
|||||||
ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "invalid 1-wire handle");
|
ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "invalid 1-wire handle");
|
||||||
|
|
||||||
// send reset pulse while receive presence pulse
|
// send reset pulse while receive presence pulse
|
||||||
ESP_RETURN_ON_ERROR(rmt_receive(handle->rx_channel, handle->rx_symbols, sizeof(rmt_symbol_word_t)*2, &onewire_rmt_rx_config),
|
ESP_RETURN_ON_ERROR(rmt_receive(handle->rx_channel, handle->rx_symbols, sizeof(rmt_symbol_word_t) * 2, &onewire_rmt_rx_config),
|
||||||
TAG, "1-wire reset pulse receive failed");
|
TAG, "1-wire reset pulse receive failed");
|
||||||
ESP_RETURN_ON_ERROR(rmt_transmit(handle->tx_channel, handle->tx_copy_encoder, &onewire_reset_pulse_symbol, sizeof(onewire_reset_pulse_symbol), &onewire_rmt_tx_config),
|
ESP_RETURN_ON_ERROR(rmt_transmit(handle->tx_channel, handle->tx_copy_encoder, &onewire_reset_pulse_symbol, sizeof(onewire_reset_pulse_symbol), &onewire_rmt_tx_config),
|
||||||
TAG, "1-wire reset pulse transmit failed");
|
TAG, "1-wire reset pulse transmit failed");
|
||||||
|
Reference in New Issue
Block a user