176 lines
3.6 KiB
C
176 lines
3.6 KiB
C
|
|
/**
|
|||
|
|
* @file cm_keypad.h
|
|||
|
|
* @brief cm_keypad接口
|
|||
|
|
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
|
|||
|
|
* @author By WangPeng
|
|||
|
|
* @date 2021/5/14
|
|||
|
|
*
|
|||
|
|
* @defgroup keypad keypad
|
|||
|
|
* @ingroup PI
|
|||
|
|
* @{
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef __CM_KEYPAD_H__
|
|||
|
|
#define __CM_KEYPAD_H__
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Included Files
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Pre-processor Definitions
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Types
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Data
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
/****************************************************************************
|
|||
|
|
* Public Function Prototypes
|
|||
|
|
****************************************************************************/
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
#define EXTERN extern "C"
|
|||
|
|
extern "C"
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
#define EXTERN extern
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
/****************************************************************************/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief key map
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
typedef uint32_t cm_keypad_map_t;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief key事件类型
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
CM_KEY_EVENT_RELEASE = 0, /*!<按键被释放*/
|
|||
|
|
CM_KEY_EVENT_PRESS = 1, /*!<按键被按下*/
|
|||
|
|
} cm_keypad_event_e;
|
|||
|
|
|
|||
|
|
/*具体配置参照资源综述*/
|
|||
|
|
typedef enum cm_keypad_kp_mkin{
|
|||
|
|
CM_KP_MKI0 = 0,
|
|||
|
|
CM_KP_MKI1,
|
|||
|
|
CM_KP_MKI2,
|
|||
|
|
CM_KP_MKI3,
|
|||
|
|
CM_KP_MKI4,
|
|||
|
|
CM_KP_MKI5,
|
|||
|
|
CM_KP_MKI6,
|
|||
|
|
CM_KP_MKI7,
|
|||
|
|
CM_KP_MKI_NO_VALID
|
|||
|
|
}cm_keypad_kp_mkin_e;
|
|||
|
|
|
|||
|
|
/*具体配置参照资源综述*/
|
|||
|
|
typedef enum cm_keypad_kp_mkout{
|
|||
|
|
CM_KP_MKO0 = 0,
|
|||
|
|
CM_KP_MKO1,
|
|||
|
|
CM_KP_MKO2,
|
|||
|
|
CM_KP_MKO3,
|
|||
|
|
CM_KP_MKO4,
|
|||
|
|
CM_KP_MKO5,
|
|||
|
|
CM_KP_MKO6,
|
|||
|
|
CM_KP_MKO7,
|
|||
|
|
CM_KP_MKO_NO_VALID
|
|||
|
|
}cm_keypad_kp_mkout_e;
|
|||
|
|
|
|||
|
|
/** 配置 */
|
|||
|
|
typedef struct{
|
|||
|
|
cm_keypad_kp_mkin_e *cm_col;
|
|||
|
|
cm_keypad_kp_mkout_e *cm_row;
|
|||
|
|
uint8_t cm_col_len;//*cm_col长度
|
|||
|
|
uint8_t cm_row_len;//*cm_cow长度
|
|||
|
|
} cm_keypad_cfg_t;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad事件回调函数
|
|||
|
|
*
|
|||
|
|
* @param [in] key 键值
|
|||
|
|
* @param [in] event 按键事件
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
typedef void (*cm_key_event_callback_t)(cm_keypad_map_t key, cm_keypad_event_e event);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad配置
|
|||
|
|
*
|
|||
|
|
* @param [in] cm_keypad_cfg keypad 配置参数指针
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* = 0 - 成功 \n
|
|||
|
|
* = -1 - 失败
|
|||
|
|
*
|
|||
|
|
* @details 需在cm_keypad_init函数之前使用
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
int32_t cm_keypad_config(cm_keypad_cfg_t *cm_keypad_cfg);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad初始化
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* = 0 - 成功 \n
|
|||
|
|
* = -1 - 失败
|
|||
|
|
*/
|
|||
|
|
int32_t cm_keypad_init(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad事件回调注册
|
|||
|
|
*
|
|||
|
|
* @param [in] cb keypad回调函数
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* = 0 - 成功 \n
|
|||
|
|
* = -1 - 失败
|
|||
|
|
*
|
|||
|
|
* @details 最大允许注册的回调函数个数为10
|
|||
|
|
*/
|
|||
|
|
int32_t cm_keypad_register(cm_key_event_callback_t cb);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad事件回调注销
|
|||
|
|
*
|
|||
|
|
* @param [in] cb keypad回调函数
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* = 0 - 成功 \n
|
|||
|
|
* = -1 - 失败
|
|||
|
|
*
|
|||
|
|
* @details 最大允许注册的回调函数个数为10
|
|||
|
|
*/
|
|||
|
|
int32_t cm_keypad_unregister(cm_key_event_callback_t cb);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief keypad去初始化
|
|||
|
|
*
|
|||
|
|
* @details 由于任务删除不能释放已经分配的内存,因此重复初始化keypad功能会造成内存泄露
|
|||
|
|
*/
|
|||
|
|
void cm_keypad_deinit(void);
|
|||
|
|
|
|||
|
|
#undef EXTERN
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#endif /* __CM_KEYPAD_H__ */
|
|||
|
|
|
|||
|
|
/** @}*/
|
|||
|
|
|
|||
|
|
|