洛达应用层开发教程系列10-按键配置1

支持的按键方式

  • 单击(short)
  • 双击(double)
  • 三击(triple)
  • 长按(press1,press2,press3)
  • 长按释放(press release1,press release2,press release3)
  • 单击长按(slong)
  • 双击长按(dlong)
  • 单击长按释放(slong release)
  • 双击长按释放(dlong release)
    基本上我们常用的就是单击,双击,三击,长按,其他的基本用的少,看自己需要

配置

  • 文件
    按键的配置在customersized_key_config.c中,根据自己的工程选择自己的需要的配置文件即可,因为不同的工程都有自己相应的配置文件,注意不要选错了,不然是没有效果的

    ota分区xml文件编写规则

  • 配置表
    通过创建数组的方式,创建按键的配置表,数组的每个成员代表一种触发的方式以及动作。

    配置表的创建方式有两种:

    1. default_configurable_table和left_configurable_table

      默认的配置表,当有按键动作之后,会先匹配这两个配置表,如果没有,则再去匹配下面的两个配置表。

      每个成员通过结构体apps_config_configurable_table_t定义。

      typedef struct {
      uint8_t key_event;          /* Means how to pressed the key, refer to apps_config_serialized_event_t. */
      uint8_t key_id;             /* Means which key, refer to hal_keypad_table.h */
      uint16_t app_key_event;     /* The output action of the mapping table, refer to apps_config_key_action_t. */
      uint32_t supported_states;  /* MMI states. Every bit represent a state, refer to apps_config_state_t. */
      } __attribute__((__packed__)) apps_config_configurable_table_t;
      
      • key_event:也就是此时单击,双击,三击还是长按等。
      • key_id:哪个按键此时按下,比如是电源键或者其他按键等
      • app_key_event:此时触发的事件,如果播放,暂停,接听,拒接等等。
      • supported_states:此时耳机的状态,用来限制只有耳机在现在的状态,才能执行具体的触发事件,否则不触发
    2. s_map_list和s_left_map_list
      相当于是备用配置表,默认配置表没有匹配到,就到这里来配置

      每个个成员通过结构体apps_config_key_event_map_list_t定义

      typedef struct {
          uint32_t map_size;                          /* Size of the mapping table item. */
          const apps_config_key_event_map_t *key_map; /* Pointer to the mapping table item. */
      } apps_config_key_event_map_list_t;
      

      这里重点看结构体apps_config_key_event_map_t

      typedef struct {
          uint8_t key_id;             /* Means which key, refer to hal_keypad_table.h */
          uint16_t app_key_event;     /* The output action of the mapping table, refer to apps_config_key_action_t. */
          uint32_t supported_states;  /* MMI states. Every bit represent a state, refer to apps_config_state_t. */
      } __attribute__((__packed__)) apps_config_key_event_map_t;
      

      其实和上面的类似,唯一就是少了key_event,而每一个apps_config_key_event_map_list_t这个结构体就类似于key_event,所以因为如此,我们使用这两个配置表的时候,一定要注意顺序,否则就会导致匹配错误的情况

添加自己的按键配置

  • default_configurable_table和left_configurable_table
    // 左右配置表类似,根据实际的按键操作进行配置
    const static apps_config_configurable_table_t default_configurable_table[] = {
        {
            APPS_CONFIG_KEY_SHORT_CLICK,
            EINT_KEY_2,
            KEY_AVRCP_PAUSE,
            (1 << APP_A2DP_PLAYING)
        },
        {
            APPS_CONFIG_KEY_SHORT_CLICK,
            EINT_KEY_2,
            KEY_AVRCP_PLAY,
            (1 << APP_CONNECTED)
        },
        ...
    }
    
  • s_map_list和s_left_map_list
    // 左右配置表类似,根据实际的按键操作进行配置
    const static apps_config_key_event_map_list_t const s_map_list[APPS_CONFIG_KEY_INVALID] = {
        {
            sizeof(temp_key_release_configs) / sizeof(apps_config_key_event_map_t),
            temp_key_release_configs
        },
        {
            sizeof(temp_key_short_click_configs) / sizeof(apps_config_key_event_map_t),
            temp_key_short_click_configs
        },
        ...
    }
    
    const apps_config_key_event_map_t temp_key_short_click_configs[] = {
        {
            EINT_KEY_2,
            KEY_AVRCP_PAUSE,
            (1 << APP_A2DP_PLAYING)
        },
        {
            EINT_KEY_2,
            KEY_AVRCP_PLAY,
            (1 << APP_CONNECTED)
        },
        ...
    }
    

总结

通过上面的配置我们就可以使用我们自己的按键配置了。