络达开发---- AB1562x左右两侧同一按钮不同功能

news2025/1/23 10:28:35

开发平台:AB1562X

SDK版本:V1.5.2

说明:AB1562X支持TWS,左右两个的耳机的按钮在硬件上是芯片的同一个IO口;那如何实现左右按键对应动作A,右侧按钮对应动作B呢?即左右两侧同一按钮的动作对应不同的功能;


SDK支持MSync通信,即左右两个耳机之前的直接数据同步,比如对于音量+/-来说,默认情况下,按左侧和按右侧都会实现同样的动作,即音量+或者-,这是因为系统采用MCsync会自动同步一侧的动作到另一个。

                但是并不是所有的事件都会被同步的另一个,这个在SDK中有定义哪些事件会被同步,在SDK的下面文件中有这些说明:

SDK\V1.5.2\project\AB1562\apps\mcsync_ref_design\src\APP\APP_MCSync\App_MCSync.c

其中的函数:static BOOL app_AwsMce_IsSystemKeyNeedSync(U16 keyEventCode)

中会判断哪些事件支持MCSync同步:


static BOOL app_AwsMce_IsSystemKeyNeedSync(U16 keyEventCode)
{
    BD_ADDR_T *pServiceBdAddr = (BD_ADDR_T *)APP_GetServiceBdAddr();

    switch(keyEventCode)
    {
        case KEY_VOICE_COMMAND_ENABLE:
        case KEY_MIC_MUTE_TOGGLE:
        case KEY_MIC_MUTE_ON:
        case KEY_MIC_MUTE_OFF:
        case KEY_RECONNECT_USER_INIT:
        case KEY_CONNECTED_TO_DISCOVERABLE:
        case KEY_VOICEUP:
        case KEY_VOICEDN:
        case KEY_AIROTHRU:
        case KEY_PEQ_GROUP_CHANGE:
        case KEY_GAME_MODE_ON:
        case KEY_GAME_MODE_OFF:
        case KEY_GAME_MODE_TOGGLE:
        case KEY_MEDIA_TRIGGER_1:
        case KEY_MEDIA_TRIGGER_2:
        case KEY_RESET_PAIRED_DEVICES:
        case KEY_ANC_SWITCH:
        case KEY_TOGGLE_LED:
        case KEY_VOICE_PROMPT_LANG_CHANGE:
        case KEY_NONDISCOVERABLE:
        case KEY_DISCOVERABLE:
            return TRUE;

        #ifdef AIR_MCSYNC_SHARE_MODE_ENABLE
        case KEY_SHARE_PAIRING_START:
        case KEY_SHARE_PAIRING_STOP:
        case KEY_MASTER_SHARE_MODE_START:
        case KEY_MASTER_SHARE_MODE_STOP:
        case KEY_FOLLOWER_SHARE_MODE_START:
        case KEY_FOLLOWER_SHARE_MODE_STOP:
        case KEY_MASTER_SHARE_MODE_TOGGLE:
        case KEY_FOLLOWER_SHARE_MODE_TOGGLE:
            return APP_MCSync_Share_IsKeyNeedSync(keyEventCode);
        #endif

        default:
            return FALSE;
    }

    return FALSE;
}

如上面代码所示,可以发现音量的+/-在支持的case中,即KEY_VOICEUP/KEY_VOICEDN;该函数的主调函数是该文件中的:

BOOL APP_AWSMCE_KeyEvent(U8 keyIndex, U8 keyAction)

通过上面分析可以知道,如果左右想实现不同的事件,可以在UI定义中使用不被MCSync支持的事件来做,如下面的UI定义:

ENABLE_LED/DISABLE_LED 在代码中可以知道是不被MCSync同步支持的,因此左右两侧可以判断自己所在的哪一侧来执行相应的动作。

那么代码中如何判断自己是哪一侧呢?

       其中一个办法是通过声道的配置来判断,如下图中所示:

代码中是可以获取该通道的配置的,这个在生产的时候是写死的,下面代码即用来判断当前的耳机是左侧还是右侧:

 

U8 AudioDsp_GetAudioChannel()
{
    U8 ch_sel;
    #ifdef CHANNEL_SELECTION_ENABLE
    if(drv_audio_nvkey_a2dp_get_audio_mode_setting() == AUDIO_CHANNEL_SW_MODE)
    {
        ch_sel = drv_audio_nvkey_a2dp_get_sw_audio_channel_setting();
    }
    else if(drv_audio_nvkey_a2dp_get_audio_mode_setting() == AUDIO_CHANNEL_HW_MODE)
    {
        if(drv_audio_nvkey_a2dp_get_audio_channel_gpio_h())
        {
            ch_sel = AU_DSP_CH_L;
        }
        else
        {
            ch_sel = AU_DSP_CH_R;
        }
    }
    else
    {
        ch_sel = AU_DSP_CH_LR;
    }
    #else
    ---
    ch_sel = (BtAwsMce_IsDefaultRoleAgent())?AU_DSP_CH_R : AU_DSP_CH_L;
    #endif
    return ch_sel;
}

ENABLE_LED/DISABLE_LED 对应的事件是在文件App_SystemKey.c中处理的,以DISABLE_LED事件为例,判断的代码如下所示:

static void app_SystemKey_DisableLED(BD_ADDR_T *pBdAddr)
{
    UNUSED(pBdAddr);
    DBG_LOG_APP_SYSTEM( "[Key]: GHP: DisableLED, bdAddr: 0x%x%x, Size:%d, IsPartener:%d", 4, 
                FW_bdaddr_to_2U32(pBdAddr,TRUE),
                FW_bdaddr_to_2U32(pBdAddr,FALSE),
                AudioDsp_GetAudioChannel(), BtMCSync_PartnerMode());
    if(AudioDsp_GetAudioChannel() == AU_DSP_CH_R)
    {
        DBG_LOG_APP_SYSTEM("[Key]GHP: Disable:Key From Right", 0);
    }
    else if(AudioDsp_GetAudioChannel() == AU_DSP_CH_L)
    {
        DBG_LOG_APP_SYSTEM("[Key]cs: Disable:Key From Left", 0);
    }
    else
    {
        DBG_LOG_APP_SYSTEM("[Key]: Disable:Key From LR", 0);
    }
    //MMI_LED_KeyOnOffHandler(DISABLE_LED);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【创建一个网页,实现猜数字游戏】

要求如下 逻辑如下: 一个button按钮第二行中,打印“请…数字” 然后一个 输入文本框 然后一个 按钮第三行 打印 “已经猜的次数” 然后打印 猜的次数结果显示 猜大了 猜小了 猜对了 在script中 获取button按钮、输入的数据、记录count的值&#xff…

vue3——咸鱼仔

vue3——咸鱼仔 vue3——咸鱼仔P1.前言 【00:45】P2.创建项目 【02:09】P3.代码格式化 【01:37】P4.commit规范 【01:57】P5.强制commit 【02:41】P6.强制代码规范 【01:03】P7.按需导入elementplus 【02:58】P8.vue3.2新特性 【01:42】P9.初始化项目 【02:47】P10.登录页面静态…

融合开源软件治理经验,助力科技企业规避开源风险

随着开源软件的普及,越来越多的科技企业依赖开源软件实现业务的高速发展,但开源软件存在的安全合规问题,已成为科技企业面临的主要风险之一。 开源网安十年发展,通过为百度、大疆、金蝶等科技企业提供优质的软件安全产品与服务&a…

【虚幻引擎|UE4】TArray在C++中的使用

简介 TArray 类似于STL的vector,可以自动扩容,因为提供了相关操作函数,所以当作队列、栈、堆来使用也很方便,是UE4中最常用的容器类。其速度快、内存消耗小、安全性高。TArray 类型由两大属性定义:元素类型和可选分配…

smardaten社区版/专业版发布,查看特性与区别!

为满足个人和中小团队开发者需求,近期smardaten正式推出社区版与专业版,其中社区版为免费版本,支持一键下载安装。 值得一提的是,本次社区版和专业版,均支持独立私有部署,并进行商业应用交付。 熟悉smard…

Linux网络——Shell编程之条件语句—if 、case

Linux网络——Shell编程之条件语句—if 、case 一、条件测试1.test命令2.文件测试3.整数值比较4.逻辑测试 二、if语句1.单分支结构2.双分支结构3.多分支结构4.实践操作 三、case分支语句1.case多分支结构2.实践操作 一、条件测试 1.test命令 测试表达式是否成立,若…

信息收集(二)IP信息收集

信息收集(一)域名信息收集 什么是CDN? 内容分发网络(CDN): 是指企业利用分布在不同区域的节点服务器群组成流量分配管理平台,为用户提供内容分散存储和高速缓存服务 在渗透测试过程中&#x…

大数据好学么

大数据本质上是海量数据。 以往的数据开发,需要一定的Java基础和工作经验,门槛高,入门难。 如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言…

kafka集群模拟单节点故障

这里通过kafka manage来展示节点宕机效果 现在三台主机节点均正常 topic正常识别到三个broker leader也均匀分配到了三个broker上 现在把节点id为0的主机模拟宕机 可以通过以上两张图片看到每个topic现在只识别到了两个broker节点,broker id为0的节点已经被剔除掉了 isr列…

SpringBoot框架(邮件发送Mail|持久层框架JPA|Extra前后端分离跨域处理|接口管理Swagger)这一篇就够了(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

【Python表白集】没有哪个女孩子 不喜欢花 不喜欢惊喜:“一束花的仪式感,永远不会过时呢~”(turtle绘图代码)

导语 “我想和你在一起虚度时光,坐看云卷云舒,花开花落” 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 又快到了一年小长假的时候啦, 单身狗的你们还好嘛…

如何有效使用渲染农场?防止渲染出错的7个方法!

如何使用渲染农场?又如何有效地使用渲染农场,使用云渲染农场时出错怎么办? 众所周知我们可以在任意的笔记本或者终端PC上面来创作 3ds Max 场景,但是实际渲染是这样吗?其实不然,这其中的差距不是一星半点&…

在 iOS 16 中用 SwiftUI Charts 创建一个折线图

前言 苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外&am…

Spring Security环境搭建

Spring Security环境搭建 Spring BootSpring Security 认证&#xff1a;判断用户是否是用户合法用户的过程授权&#xff1a;判断系统用户可以访问或访问哪些权限资源 环境搭建 创建springBoot项目并导入springsecurity相关的依赖。 <dependencies><dependency>…

翻转课堂,让传统的以教为中心变成以学中心

翻转教室的故事起源于2007年&#xff0c;美国科罗拉多州洛矶山林地公园高中 (Woodland Park High School)的化学老师Jon Bergmann 和Aaron Sams&#xff0c;为了解决同学的缺课&#xff0c;先将预录好的课程上传到YouTube网站&#xff0c;让学生自行上网浏览学习。 他们发现学…

YOLO物体检测系列1.经典方法概述及评价指标体现

1. 深度学习经典检测方法&#xff1a; two-stage(两阶段)&#xff1a; Faster-rcnn Mask-RCNN系列 one-stage(单阶段)&#xff1a;Yolo系列 两阶段&#xff1a;一阶段实现RPN候选区域预选 二阶段基于候选区域再进行检测回归分类任务 单阶段&#xff1a;一个CNN卷积网络实现检测…

Ficus: 一款 markdown 编辑管理软件

Ficus Ficus 是一款 markdown 文档的编辑管理软件&#xff0c;由 ggG 团队开发。 Ficus 释义为“榕树”&#xff0c;榕树具有“冠盖如伞、一木成林“的特点。这也恰是本款软件想要为用户提供的核心服务&#xff1a;让用户的 md 文档可以像一棵榕树一样被浏览和编辑&#xff0…

EasyExcel动态头导出

前言 这段时间的项目中需要导出动态表格。 根据所选的参数导出对应的字段内容 下图所示选择下面几个tab页就需要导出对应的表头字段 下面为具体实现的效果。表头样式可以通过EasyExcel 提供的方法自定义。 具体实现 主要是通过 传入 exportItem 这个条件来决定导出的事项…

GCM与CCM的的规格和加解密过程

CCM CCM&#xff08;Counter with CBC-MAC&#xff09;是一种基于对称加密算法的认证加密&#xff08;Authenticated Encryption&#xff09;模式&#xff0c;结合了CBC-MAC&#xff08;Cipher Block Chaining Message Authentication Code&#xff09;用于消息认证和CTR&…

沃通TSA可信时间戳服务,保障电子数据法律效力

在全球信息化的大趋势下&#xff0c;以计算机及其网络为依托的电子数据&#xff0c;在证明案件事实的过程中起着越来越重要的作用&#xff0c;而可信时间戳已成为确立电子数据法律效力的重要技术之一。沃通TSA可信时间戳服务&#xff0c;提供具有法律效力的第三方可信时间戳认证…