update_task.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. 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. } UpdateTaskStageGroup;
  43. typedef struct {
  44. UpdateTaskStage stage;
  45. uint8_t overall_progress, stage_progress;
  46. string_t status;
  47. UpdateTaskStageGroup groups;
  48. uint32_t total_progress_points;
  49. uint32_t completed_stages_points;
  50. } UpdateTaskState;
  51. typedef struct UpdateTask UpdateTask;
  52. typedef void (
  53. *updateProgressCb)(const char* status, const uint8_t stage_pct, bool failed, void* state);
  54. UpdateTask* update_task_alloc();
  55. void update_task_free(UpdateTask* update_task);
  56. void update_task_set_progress_cb(UpdateTask* update_task, updateProgressCb cb, void* state);
  57. bool update_task_start(UpdateTask* update_task);
  58. bool update_task_is_running(UpdateTask* update_task);
  59. UpdateTaskState const* update_task_get_state(UpdateTask* update_task);
  60. UpdateManifest const* update_task_get_manifest(UpdateTask* update_task);
  61. #ifdef __cplusplus
  62. }
  63. #endif