## b_mod_button 此功能模块是对第三方代码FlexibleButton的封装。支持独立按键和矩阵按键。 ### 数据结构 ```C typedef void (*pBtnEventHandler_t)(uint32_t dev_no, uint8_t sub_id, uint16_t event, uint8_t param); typedef struct bButtonInstance { uint32_t dev_no; uint16_t event; pBtnEventHandler_t handler; struct bButtonInstance *next; } bButtonInstance_t; //按键事件,1个按键可以同时注册多个事件 #define BTN_EVENT_DOWN (0x001) #define BTN_EVENT_CLICK (0x002) #define BTN_EVENT_DOUBLE_CLICK (0x004) #define BTN_EVENT_REPEAT_CLICK (0x008) #define BTN_EVENT_SHORT (0x010) #define BTN_EVENT_SHORT_UP (0x020) #define BTN_EVENT_LONG (0x040) #define BTN_EVENT_LONG_UP (0x080) #define BTN_EVENT_LONGLONG (0x100) #define BTN_EVENT_LONGLONG_UP (0x200) ``` ### 接口介绍 ```C #define bBUTTON_ADD_KEY(dev, e, e_handler) #define bBUTTON_ADD_MATRIXKEYS(dev, e, e_handler) // 请不要直接调用下面这两个函数。使用bBUTTON_ADD_KEY和bBUTTON_ADD_MATRIXKEYS代替 int bButtonAddKey(bButtonInstance_t *pbutton, flex_button_t *pflex); int bButtonAddMatrixKeys(bButtonInstance_t *pbutton, flex_button_t *pflex); ``` ### 使用例子 b_hal_if定义按键的硬件接口,b_dev_list.h注册按键设备。 ```C #define HAL_KEY_IF #define HAL_MATRIXKEYS_IF void BtnEventHandler(uint32_t dev_no, uint8_t sub_id, uint16_t event, uint8_t param) { b_log("dev:%d id:%d event:%x param:%d\n", dev_no, sub_id, event, param); } int main() { ... bInit(); bBUTTON_ADD_KEY(bKEY1, BTN_EVENT_CLICK | BTN_EVENT_LONG, BtnEventHandler); bBUTTON_ADD_KEY(bKEY2, BTN_EVENT_CLICK | BTN_EVENT_LONG, BtnEventHandler); bBUTTON_ADD_KEY(bKEY3, BTN_EVENT_CLICK | BTN_EVENT_LONG, BtnEventHandler); bBUTTON_ADD_KEY(bKEY4, BTN_EVENT_CLICK | BTN_EVENT_LONG, BtnEventHandler); bBUTTON_ADD_MATRIXKEYS(bMATRIXKEYS, BTN_EVENT_CLICK | BTN_EVENT_LONG, BtnEventHandler); ... } ```