客户侧能力:RTC、开机锁键与 BLE 协议收敛
1、新增 usr_periph RTC,DEVICEINFO 自动对时;对外精简为 get_time(sys_time*),开发板 RTC 时钟改用 LRC 2、iokey 开机锁键改为公开 start/stop 接口,板级宏 TCFG_IOKEY_BOOT_LOCK_ENABLE 可关闭 3、对齐模组 BLE 收发/组包与公开 API,更新 libusr_le_code.a;Release 包命名调整为 JBao_JL7016_SOC_SDK_Vx.x.x
This commit is contained in:
@@ -157,7 +157,77 @@ __attribute__((weak)) u8 iokey_filter_hook(u8 io_state)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
u8 usr_first_power=0;
|
||||
|
||||
/* 开机锁键剩余确认次数;非 0 时扫描一律返回 NO_KEY */
|
||||
static u8 s_boot_lock_cnt;
|
||||
|
||||
/**
|
||||
* @brief 启动/关闭开机锁键
|
||||
* @param release_cnt >0:松开后连续确认次数;0:关闭
|
||||
*/
|
||||
void iokey_boot_lock_start(u8 release_cnt)
|
||||
{
|
||||
#if TCFG_IOKEY_BOOT_LOCK_ENABLE
|
||||
s_boot_lock_cnt = release_cnt;
|
||||
#else
|
||||
(void)release_cnt;
|
||||
s_boot_lock_cnt = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 立即关闭开机锁键
|
||||
*/
|
||||
void iokey_boot_lock_stop(void)
|
||||
{
|
||||
s_boot_lock_cnt = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 扫描路径更新锁键:监视 port[0],松开则递减计数
|
||||
* @return 1=仍锁定(应返回 NO_KEY),0=已解锁可正常扫描
|
||||
*/
|
||||
static u8 iokey_boot_lock_update(void)
|
||||
{
|
||||
#if !TCFG_IOKEY_BOOT_LOCK_ENABLE
|
||||
return 0;
|
||||
#else
|
||||
u8 key_io;
|
||||
u8 io_level;
|
||||
u8 released;
|
||||
|
||||
if (!s_boot_lock_cnt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (!__this || (__this->num == 0))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
key_io = __this->port[0].key_type.one_io.port;
|
||||
io_level = gpio_read(key_io);
|
||||
if (__this->port[0].connect_way == ONE_PORT_TO_LOW)
|
||||
{
|
||||
released = io_level; /* 上拉输入,松开为高 */
|
||||
}
|
||||
else
|
||||
{
|
||||
released = !io_level; /* 下拉输入,松开为低 */
|
||||
}
|
||||
|
||||
if (released)
|
||||
{
|
||||
s_boot_lock_cnt--;
|
||||
if (s_boot_lock_cnt == 0)
|
||||
{
|
||||
puts("iokey boot lock released\n");
|
||||
}
|
||||
}
|
||||
return 1; /* 本拍仍屏蔽;计数到 0 后下一拍才开放 */
|
||||
#endif
|
||||
}
|
||||
|
||||
u8 io_get_key_value(void)
|
||||
{
|
||||
int i;
|
||||
@@ -173,12 +243,7 @@ u8 io_get_key_value(void)
|
||||
if (!__this->enable) {
|
||||
return NO_KEY;
|
||||
}
|
||||
if(usr_first_power)
|
||||
{
|
||||
if(gpio_read(IO_PORTB_01))
|
||||
{
|
||||
usr_first_power--;
|
||||
}
|
||||
if (iokey_boot_lock_update()) {
|
||||
return NO_KEY;
|
||||
}
|
||||
//先扫描单IO接按键方式
|
||||
@@ -266,7 +331,7 @@ _iokey_get_value_end:
|
||||
int iokey_init(const struct iokey_platform_data *iokey_data)
|
||||
{
|
||||
int i;
|
||||
usr_first_power=10;
|
||||
|
||||
__this = iokey_data;
|
||||
if (__this == NULL) {
|
||||
return -EINVAL;
|
||||
@@ -275,6 +340,12 @@ int iokey_init(const struct iokey_platform_data *iokey_data)
|
||||
return KEY_NOT_SUPPORT;
|
||||
}
|
||||
|
||||
/* 长按开机场景:等电源键(port[0])松开后再开放按键扫描 */
|
||||
#if TCFG_IOKEY_BOOT_LOCK_ENABLE
|
||||
iokey_boot_lock_start(IOKEY_BOOT_LOCK_DEFAULT_CNT);
|
||||
#else
|
||||
iokey_boot_lock_stop();
|
||||
#endif
|
||||
key_io_reset();
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user