power.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. float current_charger;
  26. float current_gauge;
  27. float voltage_charger;
  28. float voltage_gauge;
  29. float voltage_vbus;
  30. uint32_t capacity_remaining;
  31. uint32_t capacity_full;
  32. float temperature_charger;
  33. float temperature_gauge;
  34. uint8_t charge;
  35. uint8_t health;
  36. } PowerInfo;
  37. /** Power off device
  38. */
  39. void power_off(Power* power);
  40. /** Reboot device
  41. *
  42. * @param mode PowerBootMode
  43. */
  44. void power_reboot(PowerBootMode mode);
  45. /** Get power info
  46. *
  47. * @param power Power instance
  48. * @param info PowerInfo instance
  49. */
  50. void power_get_info(Power* power, PowerInfo* info);
  51. /** Get power event pubsub handler
  52. *
  53. * @param power Power instance
  54. *
  55. * @return FuriPubSub instance
  56. */
  57. FuriPubSub* power_get_pubsub(Power* power);
  58. /** Check battery health
  59. *
  60. * @return true if battery is healthy
  61. */
  62. bool power_is_battery_healthy(Power* power);
  63. /** Enable or disable battery low level notification mesage
  64. *
  65. * @param power Power instance
  66. * @param enable true - enable, false - disable
  67. */
  68. void power_enable_low_battery_level_notification(Power* power, bool enable);