Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions esp_delta_ota/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 1.1.4

### Enhancements:
- Added support to pass user data to read callback with new callback function: `src_read_cb_with_user_ctx_t`

## 1.1.3

### Bugfixes:
Expand Down
2 changes: 1 addition & 1 deletion esp_delta_ota/idf_component.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: "1.1.3"
version: "1.1.4"
description: "ESP Delta OTA Library"
url: https://github.com/espressif/idf-extra-components/tree/master/esp_delta_ota
dependencies:
Expand Down
6 changes: 5 additions & 1 deletion esp_delta_ota/include/esp_delta_ota.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,18 @@ typedef void *esp_delta_ota_handle_t;

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

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

typedef struct esp_delta_ota_cfg {
void *user_data; /*!< User Data */
src_read_cb_t read_cb; /*!< Read Callback */
union {
src_read_cb_t read_cb; /*!< Read Callback */
src_read_cb_with_user_ctx_t read_cb_with_user_data; /*!< Read Callback with user data */
};
union {
merged_stream_write_cb_with_user_ctx_t write_cb_with_user_data; /*!< Write Callback with user data */
merged_stream_write_cb_t write_cb DEPRECATED_ATTRIBUTE; /*!< Write Callback */
Expand Down
23 changes: 18 additions & 5 deletions esp_delta_ota/src/esp_delta_ota.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ static const char *TAG = "esp_delta_ota";

typedef struct esp_delta_ota_ctx {
void *user_data;
src_read_cb_t read_cb;
union {
src_read_cb_t read_cb; /*!< Read Callback */
src_read_cb_with_user_ctx_t read_cb_with_user_data; /*!< Read Callback with user data */
};
union {
merged_stream_write_cb_with_user_ctx_t write_cb_with_user_data;
merged_stream_write_cb_t write_cb;
Expand Down Expand Up @@ -57,11 +60,21 @@ static int esp_delta_ota_read_cb(void *arg_p, uint8_t *buf_p, size_t size)
return -ESP_ERR_INVALID_ARG;
}
esp_delta_ota_ctx *handle = (esp_delta_ota_ctx *)arg_p;
esp_err_t err = handle->read_cb(buf_p, size, handle->src_offset);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Error in read_cb(): %s", esp_err_to_name(err));
return ESP_FAIL;
esp_err_t err = ESP_OK;
if (!handle->user_data) {
err = handle->read_cb(buf_p, size, handle->src_offset);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Error in read_cb(): %s", esp_err_to_name(err));
return ESP_FAIL;
}
} else {
err = handle->read_cb_with_user_data(buf_p, size, handle->src_offset, handle->user_data);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Error in read_cb_with_user_data(): %s", esp_err_to_name(err));
return ESP_FAIL;
}
}

handle->src_offset += size;
return ESP_OK;
}
Expand Down
Loading