update_task.h 2.2 KB

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