Code Monkey home page Code Monkey logo

mfbd's Introduction

Hi, You are my NO. Visitor Count visitor, Welcome!

I'm an Embedded Software Engineer

  • Focusing on OpenSource Software
  • Using ST & ESP & Nordic & TI & WCH

I'm Learning

  • BLE & BLE MESH
  • 6LOWPAN

mfbd's People

Contributors

smartmx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

mfbd's Issues

mbtn模式下,多次按下按键,会出现未知键值代码;

  • 使用最新源码
    如下初始化,未使用段段定义
const mfbd_btn_code_t KEY2_DOWN_CODES[2] = 
{ 
    KEY2_CLICK_1,
    KEY2_CLICK_2,
};
#if MFBD_USE_MULTIFUCNTION_BUTTON//重复时间与长按时间请大于滤波时间
/*                       名称,  按键索引,           最大点击数量 */
MFBD_MBTN_DEFAULT_DEFINE(KEY2,  KID_KEY2, 2);
MFBD_MBTN_ARRAYLIST(mbtn_list, &KEY2);

日志输出如下:

KEY2_UP_CODE
[warn] unknow btn_value:52636
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
[warn] unknow btn_value:52636
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
[warn] unknow btn_value:52636
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
  • 增加代码确认如下
               /* it means the button is down for over filter_time. */
                if (_pbtn->state == MFBD_BTN_STATE_UP)
                {
                    _pbtn->state = MFBD_BTN_STATE_DOWN;
                    /* clear long_count. */
                    _pbtn->long_count = 0;
                    if (_pbtn->btn_info->btn_down_code[_pbtn->multiclick_state] > 0)
                    {
+                        printf("multiclick_state %d\n", _pbtn->multiclick_state);
                        _pbtn_group->btn_value_report(_pbtn->btn_info->btn_down_code[_pbtn->multiclick_state]);
                    }
                }
multiclick_state 2
                  [warn] unknow btn_value:52692
KEY2_UP_CODE
multiclick_state 2
                  [warn] unknow btn_value:52692
KEY2_UP_CODE
multiclick_state 2
                  [warn] unknow btn_value:52692
KEY2_UP_CODE
multiclick_state 2
                  [warn] unknow btn_value:52692
KEY2_UP_CODE
multiclick_state 2
                  [warn] unknow btn_value:52692
KEY2_UP_CODE
multiclick_state 2
                  [warn] unknow btn_value:52692

现在把初始化中修改如下,这并不符合直觉逻辑

//这里需要为1才是正常的
+ MFBD_MBTN_DEFAULT_DEFINE(KEY2,  KID_KEY2, 1);

在日志中就不会出现错误的键值代码

KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
KEY2_CLICK_1
KEY2_UP_CODE
KEY2_CLICK_2
KEY2_UP_CODE
  • 增加代码确认如下
              /* it means the button is down for over filter_time. */
                if (_pbtn->state == MFBD_BTN_STATE_UP)
                {
                    _pbtn->state = MFBD_BTN_STATE_DOWN;
                    /* clear long_count. */
                    _pbtn->long_count = 0;
                    if (_pbtn->btn_info->btn_down_code[_pbtn->multiclick_state] > 0)
                    {
                        printf("mbtn down code: %d\n", _pbtn->btn_info->btn_down_code[_pbtn->multiclick_state]);
                        _pbtn_group->btn_value_report(_pbtn->btn_info->btn_down_code[_pbtn->multiclick_state]);
                    }
                }
mbtn down code: 52688
                     [warn] unknow btn_value:52688
KEY2_UP_CODE
mbtn down code: 52688
                     [warn] unknow btn_value:52688
KEY2_UP_CODE
mbtn down code: 52688
                     [warn] unknow btn_value:52688
KEY2_UP_CODE
mbtn down code: 52688
                     [warn] unknow btn_value:52688
KEY2_UP_CODE
mbtn down code: 52688

修改如下代码正常

  • 这部分代码要不要改,是设置的时候应该怎么理解;我认为设置最大点击数多少,就是只能点击几次
+        if(_pbtn->multiclick_state < _pbtn->btn_info->max_multiclick_state - 1)
        {
            _pbtn->multiclick_state++;
            printf("MFBD_BTN_STATE_UP %d\r\n", _pbtn->multiclick_state);
        }

尝鲜了一下段定义的mbtn模式,这时候定义最大点击数量为2就是正常的

MFBD_GROUP_DEFINE(test_btns, bsp_btn_check, bsp_btn_value_report);
/*支持Button单击&长按的操作*/
#if MFBD_USE_NORMAL_BUTTON
/*                       名称,  按键索引 */
MFBD_NBTN_DEFAULT_DEFINE(test_btns, KEY1,  KID_KEY1);
//MFBD_NBTN_ARRAYLIST(nbtn_list, &KEY1);
#endif /* MFBD_USE_NORMAL_BUTTON */
#if MFBD_USE_MULTIFUCNTION_BUTTON//重复时间与长按时间请大于滤波时间
/*                       名称,  按键索引,           最大点击数量 */
MFBD_MBTN_DEFAULT_DEFINE(test_btns ,KEY2,  KID_KEY2, 2);
  • 另外我只使用了两个按键,一个普通模式,一个多击模式.
  • 这个时候使用段定义和不使用段定义的编译结果在flash存储上区别不大
  • 这个段定义主要是减少ROM的使用是吗?
使用段	167200	   2880	  56648	 226728	  375a8	application.elf
未使用段	167216	   2924	  56624	 226764	  375cc	application.elf

希望按键键值与按键索引都增加使用宏定义完成

例如:定义一个枚举存放按键索引。
一个枚举存放按键键值。
我只要通过宏定义输入按键名称。
就能生成对应的索引与各个状态的键值。这样方便查看与编写。
我尝试过操作,搞不出来。

大概像如下这样的枚举

/* 按键ID*/
typedef enum
{
KID_Stop_Button = 0X00,
KID_WK_UP,
KID_Before_Radar_1,
KID_Before_Radar_2,
KID_Before_Radar_3,
KID_Start_Button,
KID_Article_Crash,
KID_Turn_ALM,
KID_Walk_ALM,
HARD_KEY_NUM,// 实体按键个数
}KEY_ID;
/*
定义键值代码, 必须按如下次序定时每个键的按下、弹起和长按事件

推荐使用enum, 不用#define,原因:
(1) 便于新增键值,方便调整顺序,使代码看起来舒服点
(2) 编译器可帮我们避免键值重复。

/
typedef enum
{
KEY_NONE = 0X00U, /
0 表示按键事件 */

KEY_WK_UP_DOWN, /* 4键按下 /
KEY_WK_UP_UP, /
4键弹起 /
KEY_WK_UP_LONG, /
4键长按 */

KEY_TURN_ZERO_DOWN, /* 1键按下 /
KEY_TURN_ZERO_UP, /
1键弹起 /
KEY_TURN_ZERO_LONG, /
1键长按 */

KEY_TURN_LIMIT_DOWN, /* 2键按下 /
KEY_TURN_LIMIT_UP, /
2键弹起 /
KEY_TURN_LIMIT_LONG, /
2键长按 */

KEY_TURN_ALM_DOWN, /* 3键按下 /
KEY_TURN_ALM_UP, /
3键弹起 /
KEY_TURN_ALM_LONG, /
3键长按 /
}KEY_CODE;
/
名称, 按键索引, 滤波时间, 重复时间,长按时间,按下键值, 松开键值 长按键值) */
MFBD_NBTN_DEFINE(STOP_BUTTON, KID_Stop_Button, 3, 0, 150, KEY_TURN_ZERO_DOWN, KEY_TURN_ZERO_UP, KEY_TURN_ZERO_LONG);
MFBD_NBTN_DEFINE(turn_limit, KID_TURN_LIMIT, 3, 0, 150, KEY_TURN_LIMIT_DOWN, KEY_TURN_LIMIT_UP,KEY_TURN_LIMIT_LONG);
MFBD_NBTN_DEFINE(turn_alm, KID_TURN_ALM, 3, 0, 150, KEY_TURN_ALM_DOWN, KEY_TURN_ALM_UP, KEY_TURN_ALM_LONG);
MFBD_NBTN_DEFINE(WK_UP, KID_WK_UP, 3, 0, 150, KEY_WK_UP_DOWN, KEY_WK_UP_UP, KEY_WK_UP_LONG);

/* 名称, 按键索引, 滤波时间, 重复时间,长按时间,按下键值, 松开键值 长按键值) /
MFBD_NBTN_DEFINE(STOP_BUTTON, KID_Stop_Button, 3, 0, 150, KEY_TURN_ZERO_DOWN, KEY_TURN_ZERO_UP, KEY_TURN_ZERO_LONG);
MFBD_NBTN_DEFINE(turn_limit, KID_TURN_LIMIT, 3, 0, 150, KEY_TURN_LIMIT_DOWN, KEY_TURN_LIMIT_UP,KEY_TURN_LIMIT_LONG);
MFBD_NBTN_DEFINE(turn_alm, KID_TURN_ALM, 3, 0, 150, KEY_TURN_ALM_DOWN, KEY_TURN_ALM_UP, KEY_TURN_ALM_LONG);
MFBD_NBTN_DEFINE(WK_UP, KID_WK_UP, 3, 0, 150, KEY_WK_UP_DOWN, KEY_WK_UP_UP, KEY_WK_UP_LONG);
/


  • 函 数 名: 按键处理函数
  • 功能说明: 无
  • 形 参: 无
  • 返 回 值: 无

/
void Key_Handle(mfbd_btn_code_t ucKeyCode)
{
if (ucKeyCode != KEY_NONE)
{
switch (ucKeyCode)
{
case KEY_WK_UP_UP:
LOG_I("WK_UP UP");
break;
case KEY_WK_UP_DOWN:
LOG_I("WK_UP DOWN");
break;
case KEY_WK_UP_LONG:
LOG_I("WK_UP LONG");
break;
case KEY_TURN_ZERO_UP:
LOG_I("turn zero sensor UP");
break;
case KEY_TURN_ZERO_DOWN:
LOG_I("turn zero sensor DOWN");
break;
case KEY_TURN_ZERO_LONG:
LOG_I("turn zero sensor LONG");
break;
case KEY_TURN_LIMIT_UP:
LOG_I("turn limit sensor UP");
break;
case KEY_TURN_LIMIT_DOWN:
LOG_I("turn limit sensor DOWN");
break;
case KEY_TURN_LIMIT_LONG:
LOG_I("turn limit sensor LONG");
break;
case KEY_TURN_ALM_UP:
LOG_I("turn alm sensor UP");
break;
case KEY_TURN_ALM_DOWN:
LOG_I("turn alm sensor DOWN");
break;
case KEY_TURN_ALM_LONG:
LOG_I("turn alm sensor LONG");
break;
default:
/
其它的键值不处理 */
break;
}
}
}

配置的宏定义能否进行优化

由于更改配置会直接修改mfbd_cfg.h头文件。
导致我在用git 上传代码时,显示:modified: mfbd_cfg.h

没法上传。就只能删除子模块git文件。变成自己的文件,而且无法获取更新了。

建议在rt_config.h里进行配置就好

对于rtt软件包的配置建议

我最近重新添加了MFDB软件包

  • 发现如下配置得修改.h文件,我之前代码手动进行了修改。移植新的代码也得修改一遍
/* set MFBD_USE_TINY_BUTTON to 1 will enable tiny button functions. */
#define MFBD_USE_TINY_BUTTON                0

/* set MFBD_USE_NORMAL_BUTTON to 1 will enable normal button functions. */
#define MFBD_USE_NORMAL_BUTTON              1

/* set MFBD_USE_MULTIFUCNTION_BUTTON to 1 will enable multifunction button functions. */
#define MFBD_USE_MULTIFUCNTION_BUTTON       0

/* set MFBD_USE_BTN_SCAN_PRE_FUNC to 1 will enable running prepare_function before run button detection function */
#define MFBD_USE_BTN_SCAN_PRE_FUNC          0

/* set MFBD_USE_BTN_SCAN_AFTER_FUNC to 1 will enable running after_function after run button detection function */
#define MFBD_USE_BTN_SCAN_AFTER_FUNC        0

建议

  • rtt软件包里面添加配置选项,这样在软件包更新后,不需要重新修改配置

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.