155 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /****************************************************************************
 | |
| 
 | |
| Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | |
| 
 | |
| This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | |
| be copied by any method or incorporated into another program without
 | |
| the express written consent of Aerospace C.Power. This Information or any portion
 | |
| thereof remains the property of Aerospace C.Power. The Information contained herein
 | |
| is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | |
| liability for its use in any way and conveys no license or title under
 | |
| any patent or copyright and makes no representation or warranty that this
 | |
| Information is free from patent or copyright infringement.
 | |
| 
 | |
| ****************************************************************************/
 | |
| 
 | |
| #ifndef MAC_PM_H
 | |
| #define MAC_PM_H
 | |
| 
 | |
|     /* os shim includes */
 | |
| #include "os_types.h"
 | |
| #include "os_timer_api.h"
 | |
| #include "iot_config.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* wake up to 75M or sleep to 25M */
 | |
| #define DEEP_SLEEP_LEVEL_1    1
 | |
| /* wake up to 150M */
 | |
| #define DEEP_SLEEP_LEVEL_2    2
 | |
| 
 | |
| #define MAX_SLEEP_PERIOD_CNT  2
 | |
| 
 | |
| /* mac pm request awake module id */
 | |
| #define MAC_PM_INIT_MODULE_ID            (0x1 << 2)
 | |
| #define MAC_PM_SCAN_MODULE_ID            (0x1 << 3)
 | |
| #define MAC_PM_UPLAYER_DEMAND_MODULE_ID  (0x1 << 4)
 | |
| #define MAC_PM_CERT_TEST_MODULE_ID       (0x1 << 5)
 | |
| 
 | |
| #define MAC_HP_FOR_PWROFF                       (20000) // unit 1ms, 20 * 1000ms
 | |
| 
 | |
| typedef union  _pm_status {
 | |
|     /* the union is intended, if fc ok received
 | |
|      * the bitmap would be also set, which makes
 | |
|      * pm stay awake.
 | |
|      */
 | |
|     uint32_t bitmap;
 | |
|     uint32_t fc_ok_found     :  1,
 | |
|              band_select_ok  :  1,
 | |
|     /*
 | |
|      * NOTE: bitmap usage should not conflict
 | |
|      * with fc_ok_found and band_select_ok
 | |
|      * please refer to MAC_PM_INIT_MODULE_ID
 | |
|      * and MAC_PM_SCAN_MODULE_ID
 | |
|      * and MAC_PM_UPLAYER_DEMAND_MODULE_ID
 | |
|      */
 | |
|              resv            :  30;
 | |
| } pm_status_t;
 | |
| 
 | |
| typedef enum {
 | |
|     DEEP_SLEEP,
 | |
|     WAKE_UP,
 | |
| } PM_STATUS;
 | |
| 
 | |
| typedef struct _mac_pm {
 | |
|     uint8_t    is_start : 1,
 | |
|                power_off_high_power : 1,
 | |
|                fc_ok_pm : 1,
 | |
|                is_check_freq : 1,
 | |
|     /* 1: some time off rf state, 0: normal state */
 | |
|                pm_war_state : 1,
 | |
|                resv : 3;
 | |
|     uint8_t    mac_pm_flag;   //flag for power off
 | |
|     uint8_t    cur_status; //0 wake up, 1 sleep
 | |
|     uint8_t    is_sleep_wakeup_valid; //0: sleep wakeup msg invalid,
 | |
|     uint32_t   sleep_time_ms;
 | |
|     uint32_t   wake_time_ms;
 | |
|     timer_id_t sleep_timer; //unit ms
 | |
|     timer_id_t pwroff_timer;
 | |
|     /* mac pm anchor timestamp */
 | |
|     uint32_t   mac_pm_anchor_ts;
 | |
| } mac_pm_t;
 | |
| 
 | |
| /**
 | |
|  * @brief   the cb for prower off, notice mac msg. see
 | |
|  *          iot_plc_pm_listener_func_t for more detail info.
 | |
|  * @param arg                [arg]
 | |
|  * @param data               [data]
 | |
|  * @return                   [none]
 | |
|  */
 | |
| void mac_pm_rx_power_off(uint32_t arg, uint32_t data);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_pm_rx_power_off_internal  to handle power off
 | |
|  *@param uint8_t pdev_id                [pdev id]
 | |
|  *@param uint8_t vdev_id                [vdev id]
 | |
|  *@return                               [done]
 | |
| */
 | |
| uint32_t mac_pm_rx_power_off_internal(uint8_t pdev_id, uint8_t vdev_id);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_pm_power_recover_internal  to handle power recover
 | |
|  *@param uint8_t pdev_id                [pdev id]
 | |
|  *@param uint8_t vdev_id                [vdev id]
 | |
|  *@return                               [done]
 | |
| */
 | |
| uint32_t mac_pm_power_recover_internal(uint8_t pdev_id, uint8_t vdev_id);
 | |
| 
 | |
| uint32_t mac_pm_init(void *pdev_in);
 | |
| uint32_t mac_pm_start(void *pdev_in);
 | |
| uint32_t mac_pm_stop(void *pdev_in);
 | |
| void deep_sleep();
 | |
| void mac_pm_init_wake_up();
 | |
| uint32_t sleep(uint8_t sleep_level);
 | |
| #if PM_USE_DSR
 | |
| void mac_pm_dsr_sleep_cfg(void);
 | |
| #else
 | |
| uint32_t sleep_cfg_internal(void *arg);
 | |
| #endif
 | |
| 
 | |
| uint32_t req_stay_awake(uint32_t module, uint32_t req_awake);
 | |
| 
 | |
| /**
 | |
|  *@brief low_pwr_for_powroff_cfg        to handle power off, change tx power to
 | |
|  *                                      low value when timer fired
 | |
|  *@param uint8_t timer_id               [timer id]
 | |
|  *@param uint8_t arg                    [pdev ptr]
 | |
|  *@return                               [none]
 | |
| */
 | |
| void low_pwr_for_powroff_cfg(timer_id_t timer_id, void * arg);
 | |
| void low_pwr_for_powroff_cfg_internal(timer_id_t timer_id, void * arg);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_pm_switch_by_fc_ok         switch pm by fc ok
 | |
|  *@param mac_addr                       [mac addr]
 | |
|  *@return  ret                          [1: on pm, 0: off pm]
 | |
| */
 | |
| uint32_t mac_pm_switch_by_fc_ok(uint8_t *mac_addr);
 | |
| 
 | |
| /**
 | |
|  *@brief mac_pm_check_freq.  mac pm check freq.
 | |
|  *
 | |
|  *@param cb                 [void]
 | |
|  *@exception                [void]
 | |
|  *@return                   [void]
 | |
|  */
 | |
| void mac_pm_check_freq();
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |