Skip to content

Commit fb6abe8

Browse files
Add support of user_data in read_cb (Fixes #604) (IEC-413) (#607)
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. * Bump component version to 1.1.4 and update changelogs * Update esp_delta_ota/src/esp_delta_ota.c
1 parent 8e8bebd commit fb6abe8

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

esp_delta_ota/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 1.1.4
2+
3+
### Enhancements:
4+
- Added support to pass user data to read callback with new callback function: `src_read_cb_with_user_ctx_t`
5+
16
## 1.1.3
27

38
### Bugfixes:

esp_delta_ota/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "1.1.3"
1+
version: "1.1.4"
22
description: "ESP Delta OTA Library"
33
url: https://github.com/espressif/idf-extra-components/tree/master/esp_delta_ota
44
dependencies:

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: 18 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,21 @@ 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);
72+
if (err != ESP_OK) {
73+
ESP_LOGE(TAG, "Error in read_cb_with_user_data(): %s", esp_err_to_name(err));
74+
return ESP_FAIL;
75+
}
6476
}
77+
6578
handle->src_offset += size;
6679
return ESP_OK;
6780
}

0 commit comments

Comments
 (0)