dfu_file.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include "dfu_headers.h"
  3. #include <stdbool.h>
  4. #include <storage/storage.h>
  5. typedef enum {
  6. UpdateBlockResult_Unknown,
  7. UpdateBlockResult_OK,
  8. UpdateBlockResult_Skipped,
  9. UpdateBlockResult_Failed
  10. } DfuUpdateBlockResult;
  11. typedef bool (
  12. *DfuPageTaskCb)(const uint8_t i_page, const uint8_t* update_block, uint16_t update_block_len);
  13. typedef void (*DfuPageTaskProgressCb)(const uint8_t progress, void* context);
  14. typedef bool (*DfuAddressValidationCb)(const size_t address);
  15. typedef struct {
  16. DfuPageTaskCb task_cb;
  17. DfuPageTaskProgressCb progress_cb;
  18. DfuAddressValidationCb address_cb;
  19. void* context;
  20. } DfuUpdateTask;
  21. typedef struct {
  22. uint16_t vendor;
  23. uint16_t product;
  24. uint16_t device;
  25. } DfuValidationParams;
  26. bool dfu_file_validate_crc(File* dfuf, const DfuPageTaskProgressCb progress_cb, void* context);
  27. /* Returns number of valid targets from file header
  28. * If file is invalid, returns 0
  29. */
  30. uint8_t dfu_file_validate_headers(File* dfuf, const DfuValidationParams* reference_params);
  31. bool dfu_file_process_targets(const DfuUpdateTask* task, File* dfuf, const uint8_t n_targets);