update_manifest.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #include <stdint.h>
  6. #include <stdbool.h>
  7. #include <furi.h>
  8. #include <furi_hal_flash.h>
  9. /* Paths don't include /ext -- because at startup SD card is mounted as FS root */
  10. #define UPDATE_MANIFEST_DEFAULT_NAME "update.fuf"
  11. #define UPDATE_MANIFEST_POINTER_FILE_NAME ".fupdate"
  12. typedef union {
  13. uint8_t raw[6];
  14. struct {
  15. uint8_t major;
  16. uint8_t minor;
  17. uint8_t sub;
  18. uint8_t branch;
  19. uint8_t release;
  20. uint8_t type;
  21. } version;
  22. } UpdateManifestRadioVersion;
  23. _Static_assert(sizeof(UpdateManifestRadioVersion) == 6, "UpdateManifestRadioVersion size error");
  24. typedef struct {
  25. uint32_t manifest_version;
  26. FuriString* version;
  27. uint32_t target;
  28. FuriString* staged_loader_file;
  29. uint32_t staged_loader_crc;
  30. FuriString* firmware_dfu_image;
  31. FuriString* radio_image;
  32. uint32_t radio_address;
  33. UpdateManifestRadioVersion radio_version;
  34. uint32_t radio_crc;
  35. FuriString* resource_bundle;
  36. FuriHalFlashRawOptionByteData ob_reference;
  37. FuriHalFlashRawOptionByteData ob_compare_mask;
  38. FuriHalFlashRawOptionByteData ob_write_mask;
  39. FuriString* splash_file;
  40. bool valid;
  41. } UpdateManifest;
  42. UpdateManifest* update_manifest_alloc();
  43. void update_manifest_free(UpdateManifest* update_manifest);
  44. bool update_manifest_init(UpdateManifest* update_manifest, const char* manifest_filename);
  45. bool update_manifest_init_mem(
  46. UpdateManifest* update_manifest,
  47. const uint8_t* manifest_data,
  48. const uint16_t length);
  49. bool update_manifest_has_obdata(UpdateManifest* update_manifest);
  50. #ifdef __cplusplus
  51. }
  52. #endif