1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "dev_key.h"
- struct Button *btn_press;
- struct Button btn_key_up;
- struct Button btn_key0;
- struct Button btn_key1;
- struct Button btn_key2;
- dev_key_t dev_key;
- #define KEY_UP_ACTIVE_LEVEL 1
- #define KEY0_ACTIVE_LEVEL 0
- #define KEY1_ACTIVE_LEVEL 0
- #define KEY2_ACTIVE_LEVEL 0
- uint8_t dev_key_read_button(uint8_t button_id)
- {
- // you can share the GPIO read function with multiple Buttons
- switch (button_id)
- {
- case 0:
- return GPIO_ReadInputDataBit(HAL_GPIO_KEY_UP_PORT, HAL_GPIO_KEY_UP_PIN);
- case 1:
- return GPIO_ReadInputDataBit(HAL_GPIO_KEY0_PORT, HAL_GPIO_KEY0_PIN);
- case 2:
- return GPIO_ReadInputDataBit(HAL_GPIO_KEY1_PORT, HAL_GPIO_KEY1_PIN);
- case 3:
- return GPIO_ReadInputDataBit(HAL_GPIO_KEY2_PORT, HAL_GPIO_KEY2_PIN);
- default:
- return 0;
- }
- }
- void dev_key_press_down(void *btn)
- {
- if (NULL == btn)
- {
- dev_key.i = 0;
- }
- else
- {
- btn_press = (struct Button *)btn;
- if (btn_press == &btn_key_up)
- {
- dev_key.dev_key_state.bits.key_up_state_flag = 1;
- }
- if (btn_press == &btn_key0)
- {
- dev_key.dev_key_state.bits.key0_state_flag = 1;
- }
- if (btn_press == &btn_key1)
- {
- dev_key.dev_key_state.bits.key1_state_flag = 1;
- }
- if (btn_press == &btn_key2)
- {
- dev_key.dev_key_state.bits.key2_state_flag = 1;
- }
- }
- }
- void dev_key_button_init(void)
- {
- button_init(&btn_key_up, dev_key_read_button, KEY_UP_ACTIVE_LEVEL, 0);
- button_init(&btn_key0, dev_key_read_button, KEY0_ACTIVE_LEVEL, 1);
- button_init(&btn_key1, dev_key_read_button, KEY1_ACTIVE_LEVEL, 2);
- button_init(&btn_key2, dev_key_read_button, KEY2_ACTIVE_LEVEL, 3);
- button_attach(&btn_key_up, PRESS_DOWN, dev_key_press_down);
- button_attach(&btn_key0, PRESS_DOWN, dev_key_press_down);
- button_attach(&btn_key1, PRESS_DOWN, dev_key_press_down);
- button_attach(&btn_key2, PRESS_DOWN, dev_key_press_down);
- button_start(&btn_key_up);
- button_start(&btn_key0);
- button_start(&btn_key1);
- button_start(&btn_key2);
- }
- void dev_key_button_task()
- {
- button_ticks();
- }
|