lpm.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (C) 2019-2020 Alibaba Group Holding Limited
  3. */
  4. #ifndef YOC_LPM_H
  5. #define YOC_LPM_H
  6. #include <time.h>
  7. #include <aos/list.h>
  8. #include <aos/aos.h>
  9. #include <drv/gpio.h>
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #define KV_LPM_POLICY "lpm_policy"
  14. #define KV_LPM_LS_THRES "lpm_ls"
  15. #define KV_LPM_DS_THRES "lpm_ds"
  16. typedef enum {
  17. LPM_EVENT_WAKUP,
  18. LPM_EVENT_SUSPEND,
  19. } lpm_event_e;
  20. typedef enum {
  21. LPM_POLICY_NO_POWER_SAVE,
  22. LPM_POLICY_LOW_POWER,
  23. LPM_POLICY_DEEP_SLEEP,
  24. } pm_policy_t;
  25. typedef struct {
  26. slist_t next;
  27. void *dev;
  28. void *param;
  29. } pm_dev_node_t;
  30. #define LPM_DEV_MASK_GENERAL_ADC (1<<0)
  31. #define LPM_DEV_MASK_GENERAL_GPIO1 (1<<1)
  32. #define LPM_DEV_MASK_GENERAL_GPIO2 (1<<2)
  33. typedef void (*lpm_event_cb_t)(pm_policy_t policy, lpm_event_e event);
  34. typedef struct {
  35. pm_policy_t policy; //0: no low power, 1: low power, 2: support deep sleep
  36. uint32_t agree_halt; //execution context will be lost
  37. uint32_t alarm_ms;
  38. uint32_t ls_ms; //low power sleep threshold
  39. uint32_t ds_ms; //deep sleep threshold
  40. uint32_t suspend_tick;
  41. uint32_t lpm_dev_mask; /* 标记位置一对应的模块不进入低功耗 */
  42. aos_mutex_t mutex;
  43. aos_task_t task_handle;
  44. aos_sem_t sem;
  45. void (*lpm_handle)(void);
  46. lpm_event_cb_t wake_cb;
  47. } pm_ctx_t;
  48. void pm_init(lpm_event_cb_t pm_cb);
  49. void pm_config_mask(uint32_t lpm_dev_mask);
  50. void pm_config_policy(pm_policy_t policy);
  51. pm_policy_t pm_get_policy(void);
  52. void pm_agree_halt(uint32_t ms);
  53. #ifdef CONFIG_CSI_V2
  54. void setup_wake_irq(csi_gpio_t *handle, csi_gpio_mode_t mode);
  55. #else
  56. void setup_wake_irq(gpio_pin_handle_t handle, gpio_irq_mode_e mode);
  57. #endif
  58. #ifdef __cplusplus
  59. }
  60. #endif
  61. #endif