2025-04-11 09:40:32 +08:00

188 lines
4.1 KiB
C

/******************************************************************************
*(C) Copyright 2018 EIGENCOMM International Ltd.
* All Rights Reserved
******************************************************************************
* Filename: pwrkey.h
*
* Description: header of pwrkey.c, power on/off and software debounce
*
* History: 2021.04.29 initiated by Zhao Weiqi
*
* Notes:
*
******************************************************************************/
#ifndef PWR_KEY_H
#define PWR_KEY_H
/*----------------------------------------------------------------------------*
* INCLUDES *
*----------------------------------------------------------------------------*/
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------------------*
* MACROS *
*----------------------------------------------------------------------------*/
#define KEY_BUF_SIZE 8
/*----------------------------------------------------------------------------*
* DATA TYPE DEFINITION *
*----------------------------------------------------------------------------*/
typedef struct
{
int16_t longPressTimeout;
int16_t repeatTimeout;
int16_t pwrOffTimeout;
}pwrKeyDly_t;
typedef enum
{
PWRKEY_PWRON_MODE = 0,
PWRKEY_WAKEUP_LOWACTIVE_MODE,
PWRKEY_WAKEUP_HIGHACTIVE_MODE,
PWRKEY_UNKNOW_MODE,
}pwrKeyWorkMode;
/*
typedef enum
{
PWRKEY_SYSTEM_ON = 0,
PWRKEY_SYSTEM_OFF,
}pwrKeySysStatus;
*/
typedef enum
{
PWRKEY_RELEASE = 0,
PWRKEY_PRESS,
PWRKEY_LONGPRESS,
PWRKEY_REPEAT,
}pwrKeyPressStatus;
typedef struct
{
bool negEdgeEn;
bool posEdgeEn;
}pwrKeyWakeupCfg_t;
typedef void(* pwrKeyCallback_t)(pwrKeyPressStatus status);
typedef struct
{
pwrKeyWorkMode workMode;
pwrKeyWakeupCfg_t wakeupCfg;
pwrKeyDly_t delayCfg;
pwrKeyCallback_t pwrKeyCallback;
pwrKeyPressStatus curStatus;
pwrKeyPressStatus keyBuf[KEY_BUF_SIZE];
uint8_t bufOffset;
}pwrKeyInfo_t;
/*----------------------------------------------------------------------------*
* GLOBAL FUNCTIONS DECLEARATION *
*----------------------------------------------------------------------------*/
/**
* @brief pwrKeyPushKey
* @details push a key to power key buffer
*
* @param pwrKeyInfo
@param status
* @return null
*/
void pwrKeyPushKey(pwrKeyInfo_t *pwrKeyInfo, pwrKeyPressStatus status);
/**
* @brief pwrKeyPopKey
* @details pop a key from power key buffer and return the key status
*
* @param pwrKeyInfo
* @return null
*/
pwrKeyPressStatus pwrKeyPopKey(pwrKeyInfo_t *pwrKeyInfo);
/**
* @brief pwrKeyStartPowerOff
* @details force to enter power off status
*
* @return null
*/
void pwrKeyStartPowerOff(void);
/**
* @brief pwrkeyPwrOnDebounce
* @details power on debounce flow according to the configures
*
* @param tmpDelay in ms
* @return null
*/
void pwrkeyPwrOnDebounce(int16_t tmpDelay);
/**
* @brief pwrKeyHwInit
* @details power key hardware init
*
* @param pullUpEn
* @return null
*/
void pwrKeyHwInit(bool pullUpEn);
/**
* @brief pwrKeyHwDeinit
* @details power key hardware deinit
*
* @param pullUpEn
* @return null
*/
void pwrKeyHwDeinit(bool pullUpEn);
/**
* @brief pwrKeyGetPinLevel
* @details get power key pin value
*
* @return null
*/
bool pwrKeyGetPinLevel(void);
/**
* @brief pwrKeySetSWOn
* @details set power key on status, this status clear only when pwr off
*
* @return null
*/
void pwrKeySetSWOn(void);
/**
* @brief pwrKeySwStatusGet
* @details Get power key sw status
*
* @return null
*/
bool pwrKeySwStatusGet(void);
/**
* @brief pwrKeyGetPwrKeyMode
* @details Get power key mode
*
* @return null
*/
pwrKeyWorkMode pwrKeyGetPwrKeyMode(void);
/**
* @brief pwrKeyStoreFirstPwrOnFlag
* @details call at the very beginning to store a flag indicate it is the first power on
*
* @return null
*/
void pwrKeyStoreFirstPwrOnFlag(void);
#ifdef __cplusplus
}
#endif
#endif