123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /** @file
- ql_keypad.h
- @brief
- This file is used to define keypad interface for different Quectel Project.
- */
- /*================================================================
- Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
- Quectel Wireless Solution Proprietary and Confidential.
- =================================================================*/
- /*=================================================================
- EDIT HISTORY FOR MODULE
- This section contains comments describing changes made to the module.
- Notice that changes are listed in reverse chronological order.
- WHEN WHO WHAT, WHERE, WHY
- ------------ ------- -------------------------------------------------------------------------------
- 16/11/2020 Neo Init version
- =================================================================*/
- #ifndef QL_KEYPAD_H
- #define QL_KEYPAD_H
- #include "ql_api_common.h"
- #include <stdlib.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*===========================================================================
- * Macro Definition
- ===========================================================================*/
- #define QL_KEYPAD_ERRCODE_BASE (QL_COMPONENT_BSP_KEYPAD<<16)
- #define QL_KEYPAD_ROW_LENGTH 6
- #define QL_KEYPAD_COL_LENGTH 6
- /*========================================================================
- * Enumeration Definition
- *========================================================================*/
- /**
- * keypad errcode
- */
- typedef enum
- {
- QL_KEYPAD_SUCCESS = QL_SUCCESS,
- QL_KEYPAD_INVALID_PARAM_ERR = 1|QL_KEYPAD_ERRCODE_BASE
- }ql_errcode_keypad_e;
- /**
- * keyout pin
- * if the module has GNSS function, keyout4 and keyout5 cannot be used
- */
- typedef enum
- {
- QL_KP_OUT0 = 0,
- QL_KP_OUT1,
- QL_KP_OUT2,
- QL_KP_OUT3,
- QL_KP_OUT4,
- QL_KP_OUT5,
- QL_KP_OUT_NO_VALID
- }ql_keypad_out_e;
- /**
- * keyin pin
- * keyin4 and keyin5 can be reused as UART2 RXD/TXD and UART3 CTS/RTS.
- * if it is enabled here, other functions will not be available
- * if it is not reused for other functions, please ignore this sentence
- */
- typedef enum
- {
- QL_KP_IN0 = 0,
- QL_KP_IN1,
- QL_KP_IN2,
- QL_KP_IN3,
- QL_KP_IN4,
- QL_KP_IN5,
- QL_KP_IN_NO_VALID
- }ql_keypad_in_e;
- //it is created for keypad to set fuction
- typedef struct
- {
- uint8_t ql_keypad_pin;
- uint8_t ql_keypad_pin_func;
- }ql_keypad_pin_s;
- extern const ql_keypad_pin_s ql_keypad_out_pin_map[];
- extern const ql_keypad_pin_s ql_keypad_in_pin_map[];
- /**
- * keypad position,support 6*6 keypad,Compatible with the old 6*5 keypad
- keyin0 keyin1 keyin2 keyin3 keyin4 keyin5
- keyout0 QL_KEY_MAP_0 QL_KEY_MAP_1 QL_KEY_MAP_2 QL_KEY_MAP_3 QL_KEY_MAP_4 QL_KEY_MAP_5
- keyout1 QL_KEY_MAP_31 QL_KEY_MAP_6 QL_KEY_MAP_7 QL_KEY_MAP_8 QL_KEY_MAP_9 QL_KEY_MAP_10
- keyout2 QL_KEY_MAP_32 QL_KEY_MAP_11 QL_KEY_MAP_12 QL_KEY_MAP_13 QL_KEY_MAP_14 QL_KEY_MAP_15
- keyout3 QL_KEY_MAP_33 QL_KEY_MAP_16 QL_KEY_MAP_17 QL_KEY_MAP_18 QL_KEY_MAP_19 QL_KEY_MAP_20
- keyout4 QL_KEY_MAP_34 QL_KEY_MAP_21 QL_KEY_MAP_22 QL_KEY_MAP_23 QL_KEY_MAP_24 QL_KEY_MAP_25
- keyout5 QL_KEY_MAP_35 QL_KEY_MAP_26 QL_KEY_MAP_27 QL_KEY_MAP_28 QL_KEY_MAP_29 QL_KEY_MAP_30
- */
- typedef enum
- {
- QL_KEY_MAP_0 = 0,
- QL_KEY_MAP_1,
- QL_KEY_MAP_2,
- QL_KEY_MAP_3,
- QL_KEY_MAP_4,
- QL_KEY_MAP_5,
- QL_KEY_MAP_6,
- QL_KEY_MAP_7,
- QL_KEY_MAP_8,
- QL_KEY_MAP_9,
- QL_KEY_MAP_10,
- QL_KEY_MAP_11,
- QL_KEY_MAP_12,
- QL_KEY_MAP_13,
- QL_KEY_MAP_14,
- QL_KEY_MAP_15,
- QL_KEY_MAP_16,
- QL_KEY_MAP_17,
- QL_KEY_MAP_18,
- QL_KEY_MAP_19,
- QL_KEY_MAP_20,
- QL_KEY_MAP_21,
- QL_KEY_MAP_22,
- QL_KEY_MAP_23,
- QL_KEY_MAP_24,
- QL_KEY_MAP_25,
- QL_KEY_MAP_26,
- QL_KEY_MAP_27,
- QL_KEY_MAP_28,
- QL_KEY_MAP_29,
- QL_KEY_MAP_30,
- QL_KEY_MAP_31,
- QL_KEY_MAP_32,
- QL_KEY_MAP_33,
- QL_KEY_MAP_34,
- QL_KEY_MAP_35,
- QL_KEY_MAP_MAX_COUNT ///< total count
- } ql_keymap_e;
- typedef enum
- {
- QL_KEY_STATE_PRESS = (1 << 0),
- QL_KEY_STATE_RELEASE = (1 << 1),
- } ql_keystate_e;
- /*========================================================================
- * Type Definition
- *========================================================================*/
- typedef struct
- {
- ql_keymap_e keymap; //按键id
- uint32_t keyout; //按键对应的输出通道
- uint32_t keyin; //按键对应的输入通道
- ql_keystate_e keystate; //按键状态,2表示按键按下, 1表示按键未被按下
- }ql_keymatrix_t;
- /*========================================================================
- * function Definition
- *========================================================================*/
- /*****************************************************************
- * Description: keypad 回调函数,用于按键触发通知
- *
- * Parameters:
- * key [in] 按键状态结构体
- *
- *
- *****************************************************************/
- typedef void (*ql_keyeventcb_t)(ql_keymatrix_t key);
- /*****************************************************************
- * Function: ql_keypad_state
- *
- * Description: 获取按键状态
- *
- * Parameters:
- * pressed [out] 按键状态,1表示按键处于按下状态, 0表示按键未被按下
- * id [in] 按键id, 取值范围见ql_keymap_e枚举
- *
- * Return:
- * 0 获取按键状态成功。
- * other 错误码。
- *
- *****************************************************************/
- ql_errcode_keypad_e ql_keypad_state(uint32_t *pressed, ql_keymap_e id);
- /*****************************************************************
- * Function: ql_keypad_init
- * Attention:
- 1. the callback will be run in interrupt, so it is forbidden to block the callback;
- 2. it is forbidden to call Audio start/stop/close,file write/read,CFW(releated to RPC)in interrupt;
- 3. it is forbidden to enter critical in interrupt
- 4. it is suggested for users to perform simple operations , or send event(no timeout) to inform your task in interrupt
-
- * Parameters:
- *
- * Description: 矩阵按键初始化
- *
- * Parameters:
- * cb [in] 回调函数
- * keyrow [in] 输出通道数据,取值范围见ql_keypad_out_e枚举
- * keycol [in] 输入通道数据,取值范围见ql_keypad_in_e枚举
- *
- * Return:
- * 0 获取按键状态成功。
- * other 错误码。
- *
- *****************************************************************/
- ql_errcode_keypad_e ql_keypad_init(ql_keyeventcb_t cb, ql_keypad_out_e keyrow[QL_KEYPAD_ROW_LENGTH], ql_keypad_in_e keycol[QL_KEYPAD_COL_LENGTH]);
- #ifdef __cplusplus
- } /*"C" */
- #endif
- #endif /* QL_KEYPAD_H */
|