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
 |