luat_pm.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #ifndef LUAT_PM_H
  2. #define LUAT_PM_H
  3. #include "luat_base.h"
  4. /**
  5. * @defgroup luatos_device_pm 电源管理类(低功耗)
  6. * @{
  7. */
  8. #define LUAT_PM_SLEEP_MODE_NONE 0 //系统处于活跃状态,未采取任何的降低功耗状态
  9. #define LUAT_PM_SLEEP_MODE_IDLE 1 //空闲模式,该模式在系统空闲时停止 CPU 和部分时钟,任意事件或中断均可以唤醒
  10. #define LUAT_PM_SLEEP_MODE_LIGHT 2 //轻度睡眠模式,CPU 停止,多数时钟和外设停止
  11. #define LUAT_PM_SLEEP_MODE_DEEP 3 //深度睡眠模式,CPU 停止,仅少数低功耗外设工作,可被特殊中断唤醒
  12. #define LUAT_PM_SLEEP_MODE_STANDBY 4 //待机模式,CPU 停止,设备上下文丢失(可保存至特殊外设),唤醒后通常复位
  13. //#define LUAT_PM_SLEEP_MODE_SHUTDOWN 5 //关断模式,比 Standby 模式功耗更低, 上下文通常不可恢复, 唤醒后复位
  14. #define LUAT_PM_POWER_MODE_NORMAL (0) ///< 去除所有降低功耗的措施
  15. #define LUAT_PM_POWER_MODE_HIGH_PERFORMANCE (1) ///< 尽可能保持性能,兼顾低功耗,使用LUAT_PM_SLEEP_MODE_LIGHT
  16. #define LUAT_PM_POWER_MODE_BALANCED (2) ///< 性能和功耗平衡,使用LUAT_PM_SLEEP_MODE_LIGHT
  17. #define LUAT_PM_POWER_MODE_POWER_SAVER (3) ///< 超低功耗,使用LUAT_PM_SLEEP_MODE_STANDBY,进入PSM模式
  18. /**
  19. * @brief 开机原因
  20. */
  21. typedef enum LUAT_PM_POWERON_REASON
  22. {
  23. LUAT_PM_POWERON_REASON_NORMAL = 0, /**<powerkey或者上电开机*/
  24. LUAT_PM_POWERON_REASON_FOTA, /**<充电或者AT指令下载完成后开机*/
  25. LUAT_PM_POWERON_REASON_ALARM, /**<闹钟开机*/
  26. LUAT_PM_POWERON_REASON_SWRESET, /**<软件重启*/
  27. LUAT_PM_POWERON_REASON_UNKNOWN, /**<未知原因*/
  28. LUAT_PM_POWERON_REASON_HWRESET, /**<RESET键重启*/
  29. LUAT_PM_POWERON_REASON_EXCEPTION, /**<异常重启*/
  30. LUAT_PM_POWERON_REASON_TOOL, /**<工具控制重启*/
  31. LUAT_PM_POWERON_REASON_WDT, /**<内部看门狗重启*/
  32. LUAT_PM_POWERON_REASON_EXTERNAL, /**<外部重启*/
  33. LUAT_PM_POWERON_REASON_CHARGING, /**<充电开机*/
  34. } LUAT_PM_POWERON_REASON_E;
  35. // 开关类
  36. enum
  37. {
  38. LUAT_PM_POWER_USB,
  39. LUAT_PM_POWER_GPS,
  40. LUAT_PM_POWER_GPS_ANT,
  41. LUAT_PM_POWER_CAMERA,
  42. LUAT_PM_POWER_DAC_EN_PIN,
  43. LUAT_PM_POWER_POWERKEY_MODE,
  44. LUAT_PM_POWER_WORK_MODE,
  45. LUAT_PM_POWER_LDO_CTL_PIN,
  46. };
  47. // 电平类
  48. enum
  49. {
  50. LUAT_PM_ALL_GPIO,
  51. LUAT_PM_LDO_TYPE_VMMC,
  52. LUAT_PM_LDO_TYPE_VLCD,
  53. LUAT_PM_LDO_TYPE_CAMA,
  54. LUAT_PM_LDO_TYPE_CAMD,
  55. LUAT_PM_LDO_TYPE_VLP33,//8910没有
  56. LUAT_PM_LDO_TYPE_VLP18,//8910没有
  57. LUAT_PM_LDO_TYPE_VIO18,
  58. LUAT_PM_LDO_TYPE_VIBR, //8850没有
  59. LUAT_PM_LDO_TYPE_KEYLED,
  60. LUAT_PM_LDO_TYPE_VSIM1, //不一定起作用,尽量不要用
  61. LUAT_PM_LDO_TYPE_QTY,
  62. };
  63. /**
  64. * @brief 请求进入指定的休眠模式
  65. * @param mode 休眠模式 见LUAT_PM_SLEEP_MODE_XXX
  66. * @return int =0成功,其他失败
  67. */
  68. int luat_pm_request(int mode);
  69. /**
  70. * @brief 退出休眠模式
  71. * @param mode 休眠模式 见LUAT_PM_SLEEP_MODE_XXX
  72. * @return int =0成功,其他失败
  73. */
  74. int luat_pm_release(int mode);
  75. /**
  76. * @brief 启动底层定时器,在休眠模式下依然生效. 只触发一次
  77. * @param id 定时器id, 通常为0-3
  78. * @param timeout 定时时长, 单位毫秒
  79. * @return int =0成功,其他失败
  80. */
  81. int luat_pm_dtimer_start(int id, size_t timeout);
  82. /**
  83. * @brief 停止底层定时器
  84. * @param id 定时器id, 通常为0-3
  85. * @return int =0成功,其他失败
  86. */
  87. int luat_pm_dtimer_stop(int id);
  88. /**
  89. * @brief 检查底层定时器运行状态
  90. * @param id 定时器id, 通常为0-3
  91. * @return int =1正在运行,0为未运行
  92. */
  93. int luat_pm_dtimer_check(int id);
  94. // void luat_pm_cb(int event, int arg, void* args);
  95. /**
  96. * @brief 唤醒原因,用于判断是从开机是否是由休眠状态下开机/唤醒
  97. * @param lastState 0-普通开机(上电/复位),3-深睡眠开机,4-休眠开机
  98. * @param rtcOrPad 0-上电/复位开机, 1-RTC开机, 2-WakeupIn/Pad/IO开机, 3-Wakeup/RTC开机
  99. * @return int =0成功,其他失败
  100. */
  101. int luat_pm_last_state(int *lastState, int *rtcOrPad);
  102. /**
  103. * @brief 强制进入指定的休眠模式,忽略某些外设的影响,比如USB
  104. * @param mode 休眠模式 见LUAT_PM_SLEEP_MODE_XXX
  105. * @return int =0成功,其他失败
  106. */
  107. int luat_pm_force(int mode);
  108. /**
  109. * @brief 检查休眠状态
  110. * @return int ,见LUAT_PM_SLEEP_MODE_XXX
  111. */
  112. int luat_pm_check(void);
  113. /**
  114. * @brief 获取所有深度休眠定时器的剩余时间,单位ms
  115. * @param count [OUT]定时器数量
  116. * @param list [OUT]剩余时间列表
  117. * @return int =0成功,其他失败
  118. */
  119. int luat_pm_dtimer_list(size_t* count, size_t* list);
  120. /**
  121. * @brief 获取唤醒定时器id
  122. * @param id 唤醒的定时id
  123. * @return int =0成功,其他失败
  124. */
  125. int luat_pm_dtimer_wakeup_id(int* id);
  126. /**
  127. * @brief 关机
  128. *
  129. */
  130. int luat_pm_poweroff(void);
  131. /**
  132. * @brief 重启
  133. *
  134. */
  135. int luat_pm_reset(void);
  136. /**
  137. * @brief 开启内部的电源控制,注意不是所有的平台都支持,可能部分平台支持部分选项,看硬件
  138. * @param id 电源控制id, 见LUAT_PM_POWER_XXX
  139. * @param val 开关true/1开,false/0关,默认关,部分选项支持数值
  140. * @return int =0成功,其他失败
  141. */
  142. int luat_pm_power_ctrl(int id, uint8_t val);
  143. /**
  144. * @brief 开机原因
  145. * @return int ,见LUAT_PM_POWERON_REASON
  146. */
  147. int luat_pm_get_poweron_reason(void);
  148. /**
  149. * @brief 设置IO电压域的电平
  150. * @param id 电压域ID,移芯平台忽略
  151. * @param val 期望的电平值,单位mv
  152. * @return int 成功返回0,其他失败
  153. */
  154. int luat_pm_iovolt_ctrl(int id, int val);
  155. /**
  156. * @brief 配置唤醒引脚,只针对esp系列
  157. * @param pin 引脚
  158. * @param val 电平
  159. * @return
  160. */
  161. int luat_pm_wakeup_pin(int pin, int val);
  162. /**
  163. * @brief 设置联网低功耗模式,等同于AT+POWERMODE
  164. * @param 低功耗主模式 见LUAT_PM_POWER_MODE_XXX
  165. * @param 预留,低功耗次级模式,当主模式设置成LUAT_PM_POWER_MODE_BALANCED,可以微调功耗模式,当前不可用
  166. * @return int =0成功,其他失败
  167. * @note 和luat_pm_set_sleep_mode,luat_pm_set_usb_power冲突,不可以同时使用
  168. */
  169. int luat_pm_set_power_mode(uint8_t mode, uint8_t sub_mode);
  170. /**
  171. * @brief 深度休眠定时器剩余时间,单位ms
  172. * @param id 定时器ID
  173. * @return uint32_t 0xffffffff失败,其他是剩余时间
  174. */
  175. uint32_t luat_pm_dtimer_remain(int id);
  176. /** @}*/
  177. #endif