update_task.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #include <update_util/update_manifest.h>
  6. #include <stdint.h>
  7. #include <stdbool.h>
  8. #define UPDATE_DELAY_OPERATION_OK 10
  9. #define UPDATE_DELAY_OPERATION_ERROR INT_MAX
  10. typedef enum {
  11. UpdateTaskStageProgress = 0,
  12. UpdateTaskStageReadManifest,
  13. UpdateTaskStageLfsBackup,
  14. UpdateTaskStageRadioImageValidate,
  15. UpdateTaskStageRadioErase,
  16. UpdateTaskStageRadioWrite,
  17. UpdateTaskStageRadioInstall,
  18. UpdateTaskStageRadioBusy,
  19. UpdateTaskStageOBValidation,
  20. UpdateTaskStageValidateDFUImage,
  21. UpdateTaskStageFlashWrite,
  22. UpdateTaskStageFlashValidate,
  23. UpdateTaskStageLfsRestore,
  24. UpdateTaskStageResourcesUpdate,
  25. UpdateTaskStageSplashscreenInstall,
  26. UpdateTaskStageCompleted,
  27. UpdateTaskStageError,
  28. UpdateTaskStageOBError,
  29. UpdateTaskStageMAX
  30. } UpdateTaskStage;
  31. inline bool update_stage_is_error(const UpdateTaskStage stage) {
  32. return stage >= UpdateTaskStageError;
  33. }
  34. typedef enum {
  35. UpdateTaskStageGroupMisc = 0,
  36. UpdateTaskStageGroupPreUpdate = 1 << 1,
  37. UpdateTaskStageGroupFirmware = 1 << 2,
  38. UpdateTaskStageGroupOptionBytes = 1 << 3,
  39. UpdateTaskStageGroupRadio = 1 << 4,
  40. UpdateTaskStageGroupPostUpdate = 1 << 5,
  41. UpdateTaskStageGroupResources = 1 << 6,
  42. UpdateTaskStageGroupSplashscreen = 1 << 7,
  43. } UpdateTaskStageGroup;
  44. typedef struct {
  45. UpdateTaskStage stage;
  46. uint8_t overall_progress, stage_progress;
  47. FuriString* status;
  48. UpdateTaskStageGroup groups;
  49. uint32_t total_progress_points;
  50. uint32_t completed_stages_points;
  51. } UpdateTaskState;
  52. typedef struct UpdateTask UpdateTask;
  53. typedef void (
  54. *updateProgressCb)(const char* status, const uint8_t stage_pct, bool failed, void* state);
  55. UpdateTask* update_task_alloc();
  56. void update_task_free(UpdateTask* update_task);
  57. void update_task_set_progress_cb(UpdateTask* update_task, updateProgressCb cb, void* state);
  58. void update_task_start(UpdateTask* update_task);
  59. bool update_task_is_running(UpdateTask* update_task);
  60. UpdateTaskState const* update_task_get_state(UpdateTask* update_task);
  61. UpdateManifest const* update_task_get_manifest(UpdateTask* update_task);
  62. #ifdef __cplusplus
  63. }
  64. #endif