Skip to content

Commit 34dccee

Browse files
Add support of user_data in read_cb (Fixes #604)
Added in reference to write callback. Is backward compatible. Tested with file read using FileIO in esp32s3.
1 parent 86bd7d9 commit 34dccee

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

esp_delta_ota/include/esp_delta_ota.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@ typedef void *esp_delta_ota_handle_t;
2323

2424
// Callback for reading the source data
2525
typedef esp_err_t (*src_read_cb_t)(uint8_t *buf_p, size_t size, int src_offset);
26+
typedef esp_err_t (*src_read_cb_with_user_ctx_t)(uint8_t *buf_p, size_t size, int src_offset, void* user_data);
2627

2728
// Callback for working on the data generated by applying patch on the source data
2829
typedef esp_err_t (*merged_stream_write_cb_t)(const uint8_t *buf_p, size_t size);
2930
typedef esp_err_t (*merged_stream_write_cb_with_user_ctx_t)(const uint8_t *buf_p, size_t size, void *user_data);
3031

3132
typedef struct esp_delta_ota_cfg {
3233
void *user_data; /*!< User Data */
33-
src_read_cb_t read_cb; /*!< Read Callback */
34+
union{
35+
src_read_cb_t read_cb; /*!< Read Callback */
36+
src_read_cb_with_user_ctx_t read_cb_with_user_data; /*!< Read Callback with user data */
37+
};
3438
union {
3539
merged_stream_write_cb_with_user_ctx_t write_cb_with_user_data; /*!< Write Callback with user data */
3640
merged_stream_write_cb_t write_cb DEPRECATED_ATTRIBUTE; /*!< Write Callback */

esp_delta_ota/src/esp_delta_ota.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ static const char *TAG = "esp_delta_ota";
1919

2020
typedef struct esp_delta_ota_ctx {
2121
void *user_data;
22-
src_read_cb_t read_cb;
22+
union{
23+
src_read_cb_t read_cb; /*!< Read Callback */
24+
src_read_cb_with_user_ctx_t read_cb_with_user_data; /*!< Read Callback with user data */
25+
};
2326
union {
2427
merged_stream_write_cb_with_user_ctx_t write_cb_with_user_data;
2528
merged_stream_write_cb_t write_cb;
@@ -57,11 +60,20 @@ static int esp_delta_ota_read_cb(void *arg_p, uint8_t *buf_p, size_t size)
5760
return -ESP_ERR_INVALID_ARG;
5861
}
5962
esp_delta_ota_ctx *handle = (esp_delta_ota_ctx *)arg_p;
60-
esp_err_t err = handle->read_cb(buf_p, size, handle->src_offset);
61-
if (err != ESP_OK) {
62-
ESP_LOGE(TAG, "Error in read_cb(): %s", esp_err_to_name(err));
63-
return ESP_FAIL;
63+
esp_err_t err = ESP_OK;
64+
if (!handle->user_data) {
65+
err = handle->read_cb(buf_p, size, handle->src_offset);
66+
if (err != ESP_OK) {
67+
ESP_LOGE(TAG, "Error in read_cb(): %s", esp_err_to_name(err));
68+
return ESP_FAIL;
69+
}
70+
} else {
71+
err = handle->read_cb_with_user_data(buf_p, size, handle->src_offset, handle->user_data); if (err != ESP_OK) {
72+
ESP_LOGE(TAG, "Error in read_cb_with_user_data(): %s", esp_err_to_name(err));
73+
return ESP_FAIL;
74+
}
6475
}
76+
6577
handle->src_offset += size;
6678
return ESP_OK;
6779
}

0 commit comments

Comments
 (0)