power.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #pragma once
  2. #include <stdint.h>
  3. #include <furi/pubsub.h>
  4. #include <stdbool.h>
  5. typedef struct Power Power;
  6. typedef enum {
  7. PowerBootModeNormal,
  8. PowerBootModeDfu,
  9. PowerBootModeUpdateStart,
  10. } PowerBootMode;
  11. typedef enum {
  12. PowerEventTypeStopCharging,
  13. PowerEventTypeStartCharging,
  14. PowerEventTypeFullyCharged,
  15. PowerEventTypeBatteryLevelChanged,
  16. } PowerEventType;
  17. typedef union {
  18. uint8_t battery_level;
  19. } PowerEventData;
  20. typedef struct {
  21. PowerEventType type;
  22. PowerEventData data;
  23. } PowerEvent;
  24. typedef struct {
  25. bool gauge_is_ok;
  26. float current_charger;
  27. float current_gauge;
  28. float voltage_charger;
  29. float voltage_gauge;
  30. float voltage_vbus;
  31. uint32_t capacity_remaining;
  32. uint32_t capacity_full;
  33. float temperature_charger;
  34. float temperature_gauge;
  35. uint8_t charge;
  36. uint8_t health;
  37. } PowerInfo;
  38. /** Power off device
  39. */
  40. void power_off(Power* power);
  41. /** Reboot device
  42. *
  43. * @param mode PowerBootMode
  44. */
  45. void power_reboot(PowerBootMode mode);
  46. /** Get power info
  47. *
  48. * @param power Power instance
  49. * @param info PowerInfo instance
  50. */
  51. void power_get_info(Power* power, PowerInfo* info);
  52. /** Get power event pubsub handler
  53. *
  54. * @param power Power instance
  55. *
  56. * @return FuriPubSub instance
  57. */
  58. FuriPubSub* power_get_pubsub(Power* power);
  59. /** Check battery health
  60. *
  61. * @return true if battery is healthy
  62. */
  63. bool power_is_battery_healthy(Power* power);
  64. /** Enable or disable battery low level notification mesage
  65. *
  66. * @param power Power instance
  67. * @param enable true - enable, false - disable
  68. */
  69. void power_enable_low_battery_level_notification(Power* power, bool enable);