硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2712|回复: 2
收起左侧

[有问必答] 安富莱按键检测驱动包的问题

[复制链接]

3

主题

6

回帖

15

积分

新手上路

积分
15
发表于 2019-7-26 11:31:21 | 显示全部楼层 |阅读模式
每次按长按事件,都先会发送一个短按事件吗?以前用感觉没有这个问题,现在发现有,可能以前不够细心???我读源码确实发现长按之前会触发一个短按事件。
  1. static void bsp_DetectKey(uint8_t i)
  2. {
  3.         KEY_T *pBtn;

  4.         /*
  5.                 如果没有初始化按键函数,则报错
  6.                 if (s_tBtn[i].IsKeyDownFunc == 0)
  7.                 {
  8.                         printf("Fault : DetectButton(), s_tBtn[i].IsKeyDownFunc undefine");
  9.                 }
  10.         */

  11.         pBtn = &s_tBtn[i];
  12.         if (pBtn->IsKeyDownFunc())
  13.         {
  14.                 if (pBtn->Count < KEY_FILTER_TIME)
  15.                 {
  16.                         pBtn->Count = KEY_FILTER_TIME;
  17.                 }
  18.                 else if(pBtn->Count < 2 * KEY_FILTER_TIME)
  19.                 {
  20.                         pBtn->Count++;
  21.                 }
  22.                 else
  23.                 {
  24.                         if (pBtn->State == 0)
  25.                         {
  26.                                 pBtn->State = 1;

  27.                                 /* 发送按钮按下的消息 */
  28.                                 bsp_PutKey((uint8_t)(3 * i + 1));
  29.                                 getMsInPlace(3 * i + 1);
  30.                         }
  31.                         if (pBtn->LongTime > 0)
  32.                         {
  33.                                 if (pBtn->LongCount < pBtn->LongTime)
  34.                                 {
  35.                                         /* 发送按钮持续按下的消息 */
  36.                                         if (++pBtn->LongCount == pBtn->LongTime)
  37.                                         {
  38.                                                 /* 键值放入按键FIFO */
  39.                                                 bsp_PutKey((uint8_t)(3 * i + 3));
  40.                                         }
  41.                                 }
  42.                                 else
  43.                                 {
  44.                                         if (pBtn->RepeatSpeed > 0)
  45.                                         {
  46.                                                 if (++pBtn->RepeatCount >= pBtn->RepeatSpeed)
  47.                                                 {
  48.                                                         pBtn->RepeatCount = 0;
  49.                                                         /* 常按键后,每隔10ms发送1个按键 */
  50.                                                         bsp_PutKey((uint8_t)(3 * i + 1));
  51.                                                 }
  52.                                         }
  53.                                 }
  54.                         }

  55.                 }
  56.         }
  57.         else
  58.         {
  59.                 if(pBtn->Count > KEY_FILTER_TIME)
  60.                 {
  61.                         pBtn->Count = KEY_FILTER_TIME;
  62.                 }
  63.                 else if(pBtn->Count != 0)
  64.                 {
  65.                         pBtn->Count--;
  66.                 }
  67.                 else
  68.                 {
  69.                         if (pBtn->State == 1)
  70.                         {
  71.                                 pBtn->State = 0;

  72.                                 /* 发送按钮弹起的消息 */
  73.                                 bsp_PutKey((uint8_t)(3 * i + 2));
  74.                         }
  75.                 }

  76.                 pBtn->LongCount = 0;
  77.                 pBtn->RepeatCount = 0;
  78.         }
  79. }
复制代码


QQ图片20190726112837.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2019-7-27 09:21:58 | 显示全部楼层
这是标准的PC键盘驱动,测试下PC键盘就明白了。

V4按键驱动bsp_key.c出现一个问题,长按会先进入一次短按
http://www.armbbs.cn/forum.php?m ... 0770&fromuid=58
(出处: 安富莱电子官方网站)
回复

使用道具 举报

3

主题

6

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2019-7-27 12:01:12 | 显示全部楼层
eric2013 发表于 2019-7-27 09:21
这是标准的PC键盘驱动,测试下PC键盘就明白了。

V4按键驱动bsp_key.c出现一个问题,长按会先进入一次短 ...

感谢大佬,用心做产品啊,每个人的问答都用心回复。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 12:31 , Processed in 0.180834 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表