/*
|
* Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
|
* its subsidiaries and affiliates (collectly called MKSEMI).
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* 1. Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form, except as embedded into an MKSEMI
|
* integrated circuit in a product or a software update for such product,
|
* must reproduce the above copyright notice, this list of conditions and
|
* the following disclaimer in the documentation and/or other materials
|
* provided with the distribution.
|
*
|
* 3. Neither the name of MKSEMI nor the names of its contributors may be used
|
* to endorse or promote products derived from this software without
|
* specific prior written permission.
|
*
|
* 4. This software, with or without modification, must only be used with a
|
* MKSEMI integrated circuit.
|
*
|
* 5. Any software provided in binary form under this license must not be
|
* reverse engineered, decompiled, modified and/or disassembled.
|
*
|
* THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef MK_POWER_H_
|
#define MK_POWER_H_
|
#include "mk_common.h"
|
|
/**
|
* @addtogroup MK8000_Power
|
* @{
|
*/
|
|
/** Wakeup sources */
|
enum POWER_WAKEUP_SOURCE_T
|
{
|
POWER_WAKEUP_BY_GPIO_0 = 0,
|
POWER_WAKEUP_BY_GPIO_1,
|
POWER_WAKEUP_BY_GPIO_2,
|
POWER_WAKEUP_BY_GPIO_3,
|
POWER_WAKEUP_BY_GPIO_4,
|
POWER_WAKEUP_BY_GPIO_5,
|
POWER_WAKEUP_BY_GPIO_6,
|
POWER_WAKEUP_BY_GPIO_7,
|
POWER_WAKEUP_BY_GPIO_8,
|
POWER_WAKEUP_BY_GPIO_9,
|
POWER_WAKEUP_BY_GPIO_10,
|
POWER_WAKEUP_BY_GPIO_11,
|
POWER_WAKEUP_BY_GPIO_12,
|
POWER_WAKEUP_BY_GPIO_13,
|
POWER_WAKEUP_BY_GPIO_14,
|
POWER_WAKEUP_BY_GPIO_15,
|
POWER_WAKEUP_BY_GPIO_16,
|
POWER_WAKEUP_BY_GPIO_17,
|
POWER_WAKEUP_BY_ACMP0 = 24,
|
POWER_WAKEUP_BY_ACMP1 = 25,
|
POWER_WAKEUP_BY_SLEEP_TIMER = 26,
|
POWER_WAKEUP_BY_RTC_ALARM = 27,
|
POWER_WAKEUP_BY_RTC_TICK = 28,
|
};
|
|
/** Wakeup signal polarity */
|
enum POWER_WAKEUP_POLARITY_T
|
{
|
POWER_WAKEUP_LEVEL_LOW = 0,
|
POWER_WAKEUP_LEVEL_HIGH,
|
POWER_WAKEUP_LEVEL_NONE,
|
};
|
|
/** Power request units */
|
enum POWER_REQ_UNIT_T
|
{
|
POWER_UNIT_GPIO = (1 << 0),
|
POWER_UNIT_UART = (1 << 1),
|
POWER_UNIT_SPI = (1 << 2),
|
POWER_UNIT_I2C = (1 << 3),
|
POWER_UNIT_TIMER = (1 << 4),
|
POWER_UNIT_RTC = (1 << 5),
|
POWER_UNIT_ADC = (1 << 6),
|
POWER_UNIT_RF = (1 << 7),
|
POWER_UNIT_UWB = (1 << 8),
|
POWER_UNIT_APP = (1 << 9),
|
POWER_UNIT_USER = (1 << 10),
|
POWER_UNIT_UCI_RX = (1 << 11),
|
POWER_UNIT_UCI_TX = (1 << 12),
|
};
|
|
/** Power modes */
|
enum POWER_MODE_T
|
{
|
POWER_MODE_ACTIVE = 0,
|
POWER_MODE_SLEEP,
|
POWER_MODE_POWER_DOWN,
|
POWER_MODE_DEEP_POWER_DOWN,
|
POWER_MODE_SHELF,
|
};
|
|
/** Power request */
|
struct POWER_REQUEST_T
|
{
|
uint32_t power_request[5];
|
};
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/**
|
* @brief Initialize power manager
|
*/
|
void power_init(void);
|
|
/**
|
* @brief Power on radio.
|
* @param[in] tx_en Enable TX
|
* @param[in] rx_en Enable RX
|
*/
|
void power_on_radio(uint8_t tx_en, uint8_t rx_en);
|
|
/**
|
* @brief Power off radio.
|
*/
|
void power_off_radio(void);
|
|
/**
|
* @brief Enable a wakeup source.
|
* @param[in] src Wakeup source @ref POWER_WAKEUP_SOURCE_T
|
* @param[in] pol Wakeup signal polarity
|
*/
|
void power_wakeup_enable(enum POWER_WAKEUP_SOURCE_T src, enum POWER_WAKEUP_POLARITY_T pol);
|
|
/**
|
* @brief Disable a wakeup source.
|
* @param[in] src Wakeup source @ref POWER_WAKEUP_SOURCE_T
|
*/
|
void power_wakeup_disable(enum POWER_WAKEUP_SOURCE_T src);
|
|
/**
|
* @brief Enter sleep mode.
|
*/
|
void power_enter_sleep_mode(void);
|
|
/**
|
* @brief Enter power-down mode.
|
* @param[in] deep_en Enable deep power-down
|
*/
|
void power_enter_power_down_mode(bool deep_en);
|
|
/**
|
* @brief Enter shelf mode.
|
*/
|
void power_enter_shelf_mode(void);
|
|
/**
|
* @brief Request to enter a power mode.
|
* @param[in] item Requester @ref POWER_REQ_UNIT_T
|
* @param[in] mode Power mode @ref POWER_MODE_T
|
*/
|
void power_mode_request(enum POWER_REQ_UNIT_T item, enum POWER_MODE_T mode);
|
|
/**
|
* @brief Clear power mode of a requester
|
* @param[in] item Requester @ref POWER_REQ_UNIT_T
|
*/
|
void power_mode_clear(enum POWER_REQ_UNIT_T item);
|
|
/**
|
* @brief Get the requesters of the specified power mode.
|
* @param[in] mode Power mode @ref POWER_MODE_T
|
* @return all the requesters that request this power mode
|
*/
|
uint32_t power_mode_requester_get(enum POWER_MODE_T mode);
|
|
/**
|
* @brief Power manager process handler
|
*/
|
void power_manage(void);
|
|
/**
|
* @brief Restore application form power-down mode
|
*/
|
void app_restore_from_power_down(void);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
/**
|
* @}
|
*/
|
|
#endif /* MK_POWER_H_ */
|