Skip to content

Commit 42c0664

Browse files
committed
feature(spi_ram_fifo): add timetick
1 parent 1e40a85 commit 42c0664

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

components/spi_ram/include/spi_ram_fifo.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,15 @@ typedef struct {
4141
* @param handle spi ram fifo handle
4242
* @param data Pointer to the write data buffer
4343
* @param len Length of write data, range: len > 0
44+
* @param timeout_ticks freertos timeout ticks
4445
*
4546
* @return
4647
* - ESP_OK Success
4748
* - ESP_ERR_INVALID_ARG Parameter error
49+
* - ESP_ERR_TIMEOUT spi ram fifo write timeout
4850
* - ESP_FAIL spi ram fifo not created yet
4951
*/
50-
esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int len);
52+
esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int len, uint32_t timeout_ticks);
5153

5254
/**
5355
* @brief spi ram fifo read function
@@ -57,13 +59,15 @@ esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int le
5759
* @param handle spi ram fifo handle
5860
* @param data Pointer to the read data buffer
5961
* @param len Length of read data, range: len > 0
62+
* @param timeout_ticks freertos timeout ticks
6063
*
6164
* @return
6265
* - ESP_OK Success
6366
* - ESP_ERR_INVALID_ARG Parameter error
67+
* - ESP_ERR_TIMEOUT spi ram fifo read timeout
6468
* - ESP_FAIL spi ram fifo not created yet
6569
*/
66-
esp_err_t spi_ram_fifo_read(spi_ram_fifo_handle_t handle, uint8_t *data, int len);
70+
esp_err_t spi_ram_fifo_read(spi_ram_fifo_handle_t handle, uint8_t *data, int len, uint32_t timeout_ticks);
6771

6872
/**
6973
* @brief Get spi ram fifo filled length

components/spi_ram/spi_ram_fifo.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ typedef struct {
4545
return (ret_val); \
4646
}
4747

48-
esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int len)
48+
esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int len, uint32_t timeout_ticks)
4949
{
5050
spi_ram_fifo_obj_t *obj = (spi_ram_fifo_obj_t *)handle;
5151
int n;
@@ -69,7 +69,10 @@ esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int le
6969
// Not enough free room in FIFO. Wait till there's some read and try again.
7070
obj->overflow_num++;
7171
xSemaphoreGive(obj->mux);
72-
xSemaphoreTake(obj->write_sem, portMAX_DELAY);
72+
if (pdFALSE == xSemaphoreTake(obj->write_sem, timeout_ticks)) {
73+
xSemaphoreGive(obj->mux);
74+
return ESP_ERR_TIMEOUT;
75+
}
7376
} else {
7477
//Write the data.
7578
spi_ram_write(obj->ram_num, obj->start_addr + obj->write_pos, data, n);
@@ -90,7 +93,7 @@ esp_err_t spi_ram_fifo_write(spi_ram_fifo_handle_t handle, uint8_t *data, int le
9093
return ESP_OK;
9194
}
9295

93-
esp_err_t spi_ram_fifo_read(spi_ram_fifo_handle_t handle, uint8_t *data, int len)
96+
esp_err_t spi_ram_fifo_read(spi_ram_fifo_handle_t handle, uint8_t *data, int len, uint32_t timeout_ticks)
9497
{
9598
spi_ram_fifo_obj_t *obj = (spi_ram_fifo_obj_t *)handle;
9699
int n;
@@ -114,7 +117,10 @@ esp_err_t spi_ram_fifo_read(spi_ram_fifo_handle_t handle, uint8_t *data, int len
114117
// Not enough data in FIFO. Wait till there's some written and try again.
115118
obj->underrun_num++;
116119
xSemaphoreGive(obj->mux);
117-
xSemaphoreTake(obj->read_sem, portMAX_DELAY);
120+
if (pdFALSE == xSemaphoreTake(obj->read_sem, timeout_ticks)) {
121+
xSemaphoreGive(obj->mux);
122+
return ESP_ERR_TIMEOUT;
123+
}
118124
} else {
119125
// Read the data.
120126
spi_ram_read(obj->ram_num, obj->start_addr + obj->read_pos, data, n);

0 commit comments

Comments
 (0)