Merge 32ed8479f6 into 0610f1533a
commit
bc7a3c00ac
@ -1,65 +1,176 @@
|
|||||||
#include "multi_button.h"
|
#include "multi_button.h"
|
||||||
|
|
||||||
enum Button_IDs {
|
typedef enum {
|
||||||
btn1_id,
|
BUTTON_ID_0,
|
||||||
btn2_id,
|
BUTTON_ID_2,
|
||||||
};
|
|
||||||
|
|
||||||
struct Button btn1;
|
BUTTON_ID_MAX
|
||||||
struct Button btn2;
|
|
||||||
|
|
||||||
uint8_t read_button_GPIO(uint8_t button_id)
|
} BUTTON_ID_INDEX;
|
||||||
|
|
||||||
|
struct Button btnGroup[BUTTON_ID_MAX];
|
||||||
|
uint8_t btnActiveLevel[BUTTON_ID_MAX] = {0, 0};
|
||||||
|
|
||||||
|
uint8_t read_button_level()
|
||||||
{
|
{
|
||||||
// you can share the GPIO read function with multiple Buttons
|
uint8_t code = 0x01;
|
||||||
switch(button_id)
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
||||||
{
|
{
|
||||||
case btn1_id:
|
if (get_button_current() == &btnGroup[i])
|
||||||
return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
|
{
|
||||||
case btn2_id:
|
switch (i)
|
||||||
return HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin);
|
{
|
||||||
default:
|
case BUTTON_ID_0:
|
||||||
return 0;
|
code = HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
code = HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
void BTN_EVENT_Handler(void *btn)
|
||||||
{
|
{
|
||||||
button_init(&btn1, read_button_GPIO, 0, btn1_id);
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
||||||
button_init(&btn2, read_button_GPIO, 0, btn2_id);
|
{
|
||||||
|
if (((Button *)btn) == &btnGroup[i])
|
||||||
button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);
|
{
|
||||||
button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);
|
switch (((Button *)btn)->event)
|
||||||
button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);
|
{
|
||||||
button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);
|
case PRESS_DOWN:
|
||||||
button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);
|
switch (i)
|
||||||
button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);
|
{
|
||||||
button_attach(&btn1, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
button_attach(&btn2, PRESS_DOWN, BTN2_PRESS_DOWN_Handler);
|
break;
|
||||||
button_attach(&btn2, PRESS_UP, BTN2_PRESS_UP_Handler);
|
case BUTTON_ID_2:
|
||||||
button_attach(&btn2, PRESS_REPEAT, BTN2_PRESS_REPEAT_Handler);
|
// do something
|
||||||
button_attach(&btn2, SINGLE_CLICK, BTN2_SINGLE_Click_Handler);
|
break;
|
||||||
button_attach(&btn2, DOUBLE_CLICK, BTN2_DOUBLE_Click_Handler);
|
|
||||||
button_attach(&btn2, LONG_PRESS_START, BTN2_LONG_PRESS_START_Handler);
|
|
||||||
button_attach(&btn2, LONG_PRESS_HOLD, BTN2_LONG_PRESS_HOLD_Handler);
|
|
||||||
|
|
||||||
button_start(&btn1);
|
|
||||||
button_start(&btn2);
|
|
||||||
|
|
||||||
//make the timer invoking the button_ticks() interval 5ms.
|
|
||||||
//This function is implemented by yourself.
|
|
||||||
__timer_start(button_ticks, 0, 5);
|
|
||||||
|
|
||||||
while(1)
|
default:
|
||||||
{}
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case PRESS_UP:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
void BTN1_PRESS_DOWN_Handler(void* btn)
|
default:
|
||||||
{
|
break;
|
||||||
//do something...
|
}
|
||||||
|
break;
|
||||||
|
case PRESS_REPEAT:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SINGLE_CLICK:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DOUBLE_CLICK:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LONG_PRESS_START:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LONG_PRESS_HOLD:
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case BUTTON_ID_0:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case BUTTON_ID_2:
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BTN1_PRESS_UP_Handler(void* btn)
|
int main()
|
||||||
{
|
{
|
||||||
//do something...
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
||||||
|
{
|
||||||
|
button_init(&btnGroup[i], read_button_level, btnActiveLevel[i]);
|
||||||
|
|
||||||
|
button_attach(&btnGroup[i], PRESS_DOWN, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], PRESS_UP, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], PRESS_REPEAT, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], SINGLE_CLICK, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], DOUBLE_CLICK, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], LONG_PRESS_START, BTN_EVENT_Handler);
|
||||||
|
button_attach(&btnGroup[i], LONG_PRESS_HOLD, BTN_EVENT_Handler);
|
||||||
|
|
||||||
|
button_start(&btnGroup[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make the timer invoking the button_ticks() interval 5ms.
|
||||||
|
// This function is implemented by yourself.
|
||||||
|
__timer_start(button_ticks, 0, 5);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue