暂存multi_button不太行?
This commit is contained in:
parent
f8cec39611
commit
1dab144866
|
@ -56,6 +56,7 @@
|
|||
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.1731377187" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler">
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.paths.1567947810" name="Include paths (-I)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Startup}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/common/MultiButton}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/common/FlexibleButton-2.0.1}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/common/letter-shell}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/common/letter-shell/extensions/log}""/>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-782333052934719487" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-675874543788235318" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "bsp_key.h"
|
||||
|
||||
#include "flexible_button.h"
|
||||
#include "multi_button.h"
|
||||
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
|
@ -15,37 +15,11 @@
|
|||
#undef LOG_TAG
|
||||
#define LOG_TAG "key"
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
USER_BUTTON_0 = 0,
|
||||
USER_BUTTON_MAX
|
||||
} user_button_t;
|
||||
|
||||
#if 1
|
||||
#define ENUM_TO_STR(e) (#e)
|
||||
static char *enum_event_string[] = {
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_DOWN),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_CLICK),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_DOUBLE_CLICK),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_REPEAT_CLICK),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_SHORT_START),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_SHORT_UP),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_LONG_START),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_LONG_UP),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_LONG_HOLD),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_LONG_HOLD_UP),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_MAX),
|
||||
ENUM_TO_STR(FLEX_BTN_PRESS_NONE),
|
||||
enum Button_IDs {
|
||||
btn1_id,
|
||||
};
|
||||
|
||||
static char *enum_btn_id_string[] = {
|
||||
ENUM_TO_STR(USER_BUTTON_0),
|
||||
ENUM_TO_STR(USER_BUTTON_MAX),
|
||||
};
|
||||
#endif
|
||||
|
||||
static flex_button_t user_button[USER_BUTTON_MAX];
|
||||
struct Button btn1;
|
||||
|
||||
tmosTaskID key_task_id = INVALID_TASK_ID;
|
||||
|
||||
|
@ -193,47 +167,50 @@ void KEY_ProcessLoop(void)
|
|||
}
|
||||
}
|
||||
|
||||
static uint8_t common_btn_read(void *arg)
|
||||
uint8_t read_button_GPIO(uint8_t button_id)
|
||||
{
|
||||
uint8_t value = 0;
|
||||
|
||||
flex_button_t *btn = (flex_button_t *)arg;
|
||||
|
||||
switch (btn->id)
|
||||
{
|
||||
case USER_BUTTON_0:
|
||||
value = (uint8_t)GPIOB_ReadPortPin(KEY_B_PIN);
|
||||
break;
|
||||
default:
|
||||
logAssert(0, while (1));
|
||||
}
|
||||
|
||||
return value;
|
||||
// you can share the GPIO read function with multiple Buttons
|
||||
switch(button_id)
|
||||
{
|
||||
case btn1_id:
|
||||
return (uint8_t)GPIOB_ReadPortPin(KEY_B_PIN);
|
||||
default:
|
||||
// logAssert(0, while (1));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void common_btn_evt_cb(void *arg)
|
||||
void BTN1_PRESS_DOWN_Handler(void* btn)
|
||||
{
|
||||
flex_button_t *btn = (flex_button_t *)arg;
|
||||
logDebug("BTN1_PRESS_DOWN_Handler");
|
||||
// BSP_KEY_EnterLowpower();
|
||||
}
|
||||
|
||||
logDebug("id: [%d - %s] event: [%d - %30s] repeat: %d",
|
||||
btn->id, enum_btn_id_string[btn->id],
|
||||
btn->event, enum_event_string[btn->event],
|
||||
btn->click_cnt);
|
||||
if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK)
|
||||
{
|
||||
logDebug("USER_BUTTON_0 PRESS_CLICK");
|
||||
BSP_KEY_EnterLowpower();
|
||||
}
|
||||
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_DOUBLE_CLICK)
|
||||
{
|
||||
logDebug("USER_BUTTON_0 PRESS_LONG_HOLD")
|
||||
BSP_KEY_EnterLowpower();
|
||||
}
|
||||
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_START)
|
||||
{
|
||||
logDebug("USER_BUTTON_0 FLEX_BTN_PRESS_LONG_START");
|
||||
BSP_KEY_EnterLowpower();
|
||||
}
|
||||
void BTN1_PRESS_UP_Handler(void* btn)
|
||||
{
|
||||
logDebug("BTN1_PRESS_UP_Handler");
|
||||
tmos_stop_task(key_task_id, KEY_IDLE_TIMEOUT_EVT);
|
||||
tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(1000 * 5));
|
||||
logDebug("tmos_start_task KEY_IDLE_TIMEOUT_EVT");
|
||||
// BSP_KEY_EnterLowpower();
|
||||
}
|
||||
|
||||
void BTN1_SINGLE_Click_Handler(void* btn)
|
||||
{
|
||||
logDebug("BTN1_SINGLE_Click_Handler");
|
||||
// BSP_KEY_EnterLowpower();
|
||||
}
|
||||
|
||||
void BTN1_DOUBLE_Click_Handler(void* btn)
|
||||
{
|
||||
logDebug("BTN1_DOUBLE_Click_Handler");
|
||||
// BSP_KEY_EnterLowpower();
|
||||
}
|
||||
|
||||
void BTN1_LONG_PRESS_START_Handler(void* btn)
|
||||
{
|
||||
logDebug("BTN1_LONG_PRESS_START_Handler");
|
||||
// BSP_KEY_EnterLowpower();
|
||||
}
|
||||
|
||||
static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||
|
@ -259,18 +236,10 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
// }
|
||||
if (events & KEY_SCAN_EVT)
|
||||
{
|
||||
// 按键没抬起来就继续扫描
|
||||
if (0 == key_timeout_flag)
|
||||
{
|
||||
if (IS_KEY_Vaild())
|
||||
{
|
||||
tmos_stop_task(key_task_id, KEY_IDLE_TIMEOUT_EVT);
|
||||
tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(1000 * 5));
|
||||
}
|
||||
else
|
||||
{
|
||||
logDebug("0");
|
||||
}
|
||||
tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(20));
|
||||
tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(5));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -278,12 +247,14 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
BSP_KEY_EnterLowpower();
|
||||
}
|
||||
// logDebug("KEY_SCAN_EVT");
|
||||
flex_button_scan();
|
||||
button_ticks();
|
||||
|
||||
return (events ^ KEY_SCAN_EVT);
|
||||
}
|
||||
if (events & KEY_IDLE_TIMEOUT_EVT)
|
||||
{
|
||||
tmos_stop_task(key_task_id, KEY_SCAN_EVT);
|
||||
BSP_KEY_EnterLowpower();
|
||||
logDebug("KEY_IDLE_TIMEOUT_EVT");
|
||||
key_timeout_flag = 1;
|
||||
return (events ^ KEY_IDLE_TIMEOUT_EVT);
|
||||
|
@ -294,28 +265,25 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void BSP_KEY_Init(void)
|
||||
{
|
||||
/* 初始化按键数据结构 */
|
||||
tmos_memset(&user_button[0], 0x0, sizeof(user_button));
|
||||
|
||||
// 由外部上拉电阻了
|
||||
// 设置为浮空输入模式
|
||||
GPIOB_SetBits(KEY_B_PIN);
|
||||
GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_PU);
|
||||
|
||||
for (uint8_t i = 0; i < USER_BUTTON_MAX; i++)
|
||||
{
|
||||
user_button[i].id = i;
|
||||
user_button[i].usr_button_read = common_btn_read;
|
||||
user_button[i].cb = common_btn_evt_cb;
|
||||
user_button[i].pressed_logic_level = 0;
|
||||
user_button[i].short_press_start_tick = FLEX_MS_TO_SCAN_CNT(1500);
|
||||
user_button[i].long_press_start_tick = FLEX_MS_TO_SCAN_CNT(3000);
|
||||
// user_button[i].long_hold_start_tick = FLEX_MS_TO_SCAN_CNT(4500);
|
||||
button_init(&btn1, read_button_GPIO, 0, btn1_id);
|
||||
|
||||
flex_button_register(&user_button[i]);
|
||||
}
|
||||
// button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);
|
||||
button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);
|
||||
button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);
|
||||
button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);
|
||||
button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);
|
||||
|
||||
button_start(&btn1);
|
||||
|
||||
// 下降沿触发
|
||||
GPIOB_ITModeCfg(KEY_B_PIN, GPIO_ITMode_FallEdge);
|
||||
|
@ -328,7 +296,7 @@ void BSP_KEY_Init(void)
|
|||
PFIC_EnableIRQ(GPIO_B_IRQn);
|
||||
|
||||
key_task_id = TMOS_ProcessEventRegister(KEY_Task_ProcessEvent);
|
||||
// tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(20));
|
||||
// tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(5));
|
||||
|
||||
//开始一个定时事件,不断的执行,除非运行tmos_stop_task关掉,
|
||||
//tmosTimer具体是 1600 = 1s
|
||||
|
|
|
@ -105,7 +105,7 @@ uint32_t CH59x_LowPower(uint32_t time)
|
|||
// LOW POWER-sleep模式
|
||||
if (!RTCTigFlag)
|
||||
{
|
||||
BSP_KEY_EnterLowpower();
|
||||
// BSP_KEY_EnterLowpower();
|
||||
|
||||
LowPower_Sleep(RB_PWR_RAM2K | RB_PWR_RAM24K | RB_PWR_EXTEND | RB_XT_PRE_EN);
|
||||
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
|
||||
|
@ -113,7 +113,6 @@ uint32_t CH59x_LowPower(uint32_t time)
|
|||
while (i == RTC_GetCycle32k());
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
#include "multi_button.h"
|
||||
|
||||
enum Button_IDs {
|
||||
btn1_id,
|
||||
btn2_id,
|
||||
};
|
||||
|
||||
struct Button btn1;
|
||||
struct Button btn2;
|
||||
|
||||
uint8_t read_button_GPIO(uint8_t button_id)
|
||||
{
|
||||
// you can share the GPIO read function with multiple Buttons
|
||||
switch(button_id)
|
||||
{
|
||||
case btn1_id:
|
||||
return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
|
||||
case btn2_id:
|
||||
return HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
button_init(&btn1, read_button_GPIO, 0, btn1_id);
|
||||
button_init(&btn2, read_button_GPIO, 0, btn2_id);
|
||||
|
||||
button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);
|
||||
button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);
|
||||
button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);
|
||||
button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);
|
||||
button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);
|
||||
button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);
|
||||
button_attach(&btn1, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);
|
||||
|
||||
button_attach(&btn2, PRESS_DOWN, BTN2_PRESS_DOWN_Handler);
|
||||
button_attach(&btn2, PRESS_UP, BTN2_PRESS_UP_Handler);
|
||||
button_attach(&btn2, PRESS_REPEAT, BTN2_PRESS_REPEAT_Handler);
|
||||
button_attach(&btn2, SINGLE_CLICK, BTN2_SINGLE_Click_Handler);
|
||||
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)
|
||||
{}
|
||||
}
|
||||
|
||||
void BTN1_PRESS_DOWN_Handler(void* btn)
|
||||
{
|
||||
//do something...
|
||||
}
|
||||
|
||||
void BTN1_PRESS_UP_Handler(void* btn)
|
||||
{
|
||||
//do something...
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
#include "multi_button.h"
|
||||
|
||||
unit8_t btn1_id = 0;
|
||||
struct Button btn1;
|
||||
|
||||
uint8_t read_button_GPIO(uint8_t button_id)
|
||||
{
|
||||
// you can share the GPIO read function with multiple Buttons
|
||||
switch(button_id)
|
||||
{
|
||||
case btn1_id:
|
||||
return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
static PressEvent btn1_event_val;
|
||||
|
||||
button_init(&btn1, read_button_GPIO, 0, btn1_id);
|
||||
button_start(&btn1);
|
||||
|
||||
//make the timer invoking the button_ticks() interval 5ms.
|
||||
//This function is implemented by yourself.
|
||||
__timer_start(button_ticks, 0, 5);
|
||||
|
||||
while(1)
|
||||
{
|
||||
if(btn1_event_val != get_button_event(&btn1)) {
|
||||
btn1_event_val = get_button_event(&btn1);
|
||||
|
||||
if(btn1_event_val == PRESS_DOWN) {
|
||||
//do something
|
||||
} else if(btn1_event_val == PRESS_UP) {
|
||||
//do something
|
||||
} else if(btn1_event_val == LONG_PRESS_HOLD) {
|
||||
//do something
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,8 +12,8 @@
|
|||
//According to your need to modify the constants.
|
||||
#define TICKS_INTERVAL 5 //ms
|
||||
#define DEBOUNCE_TICKS 3 //MAX 7 (0 ~ 7)
|
||||
#define SHORT_TICKS (300 /TICKS_INTERVAL)
|
||||
#define LONG_TICKS (1000 /TICKS_INTERVAL)
|
||||
#define SHORT_TICKS (400 /TICKS_INTERVAL)
|
||||
#define LONG_TICKS (1500 /TICKS_INTERVAL)
|
||||
|
||||
|
||||
typedef void (*BtnCallback)(void*);
|
||||
|
|
Loading…
Reference in New Issue