- 博客(91)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 蓝牙协议栈学习笔记(序)
由于国内关于蓝牙的资料太少了,基本都是英文的,对于英语不太好的人,会有点痛苦。公司是做蓝牙的方案的,所以提供了一个很好的学习平台,在此万分感谢!一万读者就有一万个哈姆雷特,每个人对一个知识的学习都会有自己的理解,在这里我把我的关于蓝牙学习的笔记和一些小心得分享给大家,希望对大家有所帮助!首先声明我也是一个菜鸟,有问题或者是需要资料留言我,大家互相学习!一、学习方法授人鱼不如授人以渔,一...
2019-02-12 17:22:15
10214
41
原创 bes2300之eq调试(十一)
软件配置打开所使用工程的target.mk文件,修改宏PC_CMD_UART ?= 1Bes提供了多种滤波方式,可在target.mk中进行配置,这里我使用的默认的配置,如下图所示,具体要怎么配置,可一个根据实际的项目需求重新编译并烧录固件打开eq调试软件连接设备工具在bes的ftp服务器上,地址为 ftp://software.bestechnic.com/ ,工具位于tools/audiotools/eq design/ 目录下,audiotool_v3.5.rar为调试工.
2021-03-20 09:32:49
3698
5
原创 bes2300之anc(十二)
https://blog.csdn.net/yd1002/article/details/106363159https://blog.csdn.net/zhanghuaishu0/article/details/109265280https://blog.csdn.net/zhanghuaishu0/article/details/113096882
2021-02-19 09:37:58
1688
1
原创 bes2300之i2c(七)
sdk中i2c的接口相关都在hal_i2c中,提供的i2c的模式也有很多种,包括硬件,io口模拟,状态机管理方式等等(I2C_SIMPLE_MODE,I2C_TASK_MODE,I2C_SENSOR_ENGINE),这里我主要说说io口模拟的方式,适用通讯数据量比较小的处理,比如配置外设的寄存器等。app_i2c_demo.c#include "app_i2c_demo.h"#include "hal_i2c.h"#include "hal_iomux.h"#include "hal_tra
2021-02-17 12:50:08
2227
1
原创 bes2300之电源管理(六)
这里主要是分析一下充电插拔的处理,以及电池电量的监测的逻辑初始化流程/* 初始化流程 */app_init app_battery_open /* 创建电池电量检测定时器 */ osTimerCreate (osTimer(APP_BATTERY), ...) /* 创建插拨防抖的定时器 */ osTimerCreate (osTimer(APP_BATTERY_PLUGINOUT_DEBOUNCE), ...); /*注册app线程中APP_MODUAL_BATTERY
2021-02-07 17:15:18
1921
原创 bes2300之i2s(八)
代码逻辑分析音频模块的初始化app_audio_open /* 首先是注册了app线程的APP_MODUAL_AUDIO模块的回调函数*/ app_set_threadhandle(APP_MODUAL_AUDIO, app_audio_handle_process);然后我们在来看看当有音频要处理时,流程是怎样的/* 当有音频处理的消息时,比如通话,音乐,提示音等等 */app_audio_handle_process app_bt_stream_open /* 这里根据.
2021-02-07 16:59:04
2199
13
原创 bes2300之RTX介绍及简单运用(五)
目录RTX介绍运用示例线程Timer信号量互斥锁内存池消息队列Mail测试代码使用方法RTX介绍官网文档:https://arm-software.github.io/CMSIS_5/RTOS/html/index.html如何查看当前使用的内核版本:在cmsis_os.h中:这里可以看到我使用的sdk的RTX版本信息API版本为:v1.0.1系统版本为:v4.61如果你对实时操作系统已经架构有所了解,接下来重要的事情,..
2021-02-07 14:45:47
2496
6
原创 bes2300之提示音配置(四)
代码逻辑分析用户层接口,与led模块一样,设置状态播放相应的音频app_voice_report app_voice_report_handler#if defined(IBRT) /* 对于ibrt tws工程 */ app_ibrt_if_voice_report_handler(id, isMerging); app_ibrt_if_voice_report_init if(ibrt没有启用 && 提示音仅本地播放 && t.
2021-02-07 12:01:00
1990
原创 bes2300之led配置(三)
代码解析led模块相对简单,对对外只有一个接口暴露出来,通过设置状态来执行相应的显示/* 应用层设置led的状态,led模块根据状态设置相应的动作 */app_status_indication_set(APP_STATUS_INDICATION_T status){ struct APP_PWL_CFG_T cfg0; struct APP_PWL_CFG_T cfg1; ... switch (status) { case APP_STATUS_INDICATION
2021-02-07 11:07:18
1321
2
原创 bes2300之按键配置(二)
代码分析/* 首先是初始化部分 */app_init /*硬件初始化,注册中断等*/ app_key_open /* 这里指定了线程APP_MODUAL_KEY的处理函数为app_key_handle_process */ app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process); /* 这里注册按键中断事件的回调函数 */ hal_key_open(checkPwrKey, key_event_process)
2021-02-07 09:53:10
3132
原创 bes2300开发调试笔记
记录学习过程以及遇到的问题!持续随机更新~bes2300之环境搭建(一) bes2300之按键配置(二) bes2300之led配置(三) bes2300之prompt配置(四) bes2300之RTX介绍及简单运用(五) bes2300之电源管理(六) bes2300之i2c(七) bes2300之i2s(八) bes2300之ota(九) bes2300之enc(十) bes2300之anc(十一) bes2300之ibrt技术解析(十一)相关资料网盘链接,学习使用.
2021-02-06 14:55:30
6574
11
原创 bes2300之环境搭建(一)
目录环境搭建sdk文件结构介绍编译烧录配置烧录选项选择端口启动升级简单使用环境搭建安装编译工具链:gcc-arm-none-eabi-4_9-2014q4-20141203-win32.exemake-3.81.exe并在系统变量 path 添加 gcc 和 make 的相关路径:C:\Program Files (x86)\GnuWin32\binC:\Program Files (x86)\GNU Tools ARM Embedded\4.9
2021-02-06 14:41:46
4811
4
原创 QCC512X--QCC514X--QCC302X--QCC304X烧录工具
简介下面是我自己开发的烧录工具,支持qcc51xx系列与qcc30xx系列芯片的擦除、烧录、写地址与名称等功能。简单使用说明该工具解压即可使用,支持USB与TRB烧录,但是使用之前电脑中必须已经安装了相关驱动,驱动安装这里不做说明,网上都有相关教程。同时也可将如下四个文件复制到BlueSuite x.x.x目录运行。使用之前要选择芯片系列“QCC512X”支持qcc512x_qcc302x系列芯片的烧录;“QCC514X”支持qcc514x_qcc304x系列芯片的烧录。“.
2021-01-23 14:23:56
1893
4
原创 qcc304x笔记之系统消息(二十)
这里我们简单介绍一下系统消息,在sdk中如何定义,使用定义enum message_groups{ FOREACH_DOMAINS_MESSAGE_GROUP(EXPAND_AS_MESSAGE_GROUP_ENUM) FOREACH_SERVICES_MESSAGE_GROUP(EXPAND_AS_MESSAGE_GROUP_ENUM) FOREACH_TOPOLOGY_MESSAGE_GROUP(EXPAND_AS_MESSAGE_GROUP_ENUM) F.
2020-11-26 11:44:55
2070
2
原创 qcc304x笔记之常用配置(十九)
目录打开cvc打开anc打开aec输出功率调整输出方式选择(class D、class AB)离线log的小技巧MIC配置Panic复位增改eq与充电盒交互配置电池电量等级修改log输出等级配对超时时间设置修改回连手机的次数与间隔打开cvc打开anc在projects中使能anc的宏:ENABLE_ANC打开aec在projects中使能aec的宏:ENABLE_AEC_LEAKTHROUGH输出功率调整音乐:appC
2020-11-25 09:42:18
4412
16
原创 qcc304x笔记之音频链路(chain)机制(十八)
相关概念介绍首先介绍一些相关概念,为了方便理解,引用面向对象思想中class与object描述。类(class):类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,一个类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。对象():对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域与
2020-11-19 11:45:33
1838
4
原创 qcc304x笔记之主从确定(find role)机制详解(十七)
目录对耳配对流程(peer pair - LE)对于server端对于client端主从确定流程(peer find role)对于server端在find role连接过程中的server在执行find role过程的server对于client端在find role连接过程中的client在执行find role过程的client实际项目中,可能会碰到固定某一方为主机类似的需求!或者需要向别人解释,为什么左边首次配对的时候是主机,某次出仓的时候又变成了从机!这
2020-11-03 14:58:11
1404
原创 qcc304x笔记之主从切换(handover)机制详解(十六)
主从切换执行条件引起主从切换的原因有PhyState改变,电池的状态,rssi状态,通话音质等方面,这里我们主要是针对PhyState改变引起的切换来举例说明当PhyState状态改变时,交由stateProxy模块进行处理(注:由于SDK在持续更新,有些接口可能会有些变化,所以仅供参考)appPhyStateEnterInCaseappPhyStateEnterInEarappPhyStateEnterOutOfEarAtRestappPhyStateExitInCaseappPh
2020-10-24 10:07:25
1601
原创 qcc304x笔记之目的(goal)机制详解(十五)
goal可以理解为一个模型(可以类比linux的驱动模型),这个模型(代码中的体现为procedure_fns_t)中包含了两个操作:start,cancel。猜测这样做的目的是,可以使上层只以目标为导向,不用关心底层实现,这样上层的逻辑会更加清晰。定义了这样一个模型之后,也有更多的组合使用方式,可以单独使用,也可以将有相关性的模型进行组合形成一个SCRIPT。相关性可以举个例子类比:比如进配对的时候实际上是开启可连接和可发现,将这两个模型组合成一个script,在我们进配对的时候只需要调一个脚本,就
2020-10-22 09:26:48
1240
原创 qcc304x笔记之规则(rules)机制详解(十四)
代码逻辑分析(注:由于SDK在持续更新,所以有些接口可能会有些变化,所以仅供参考)/*目前使用的rules 容器有*/Common_rules_setprimary_rules_setsecondary_rules_sethstop_rules_settws_topology_primary_rulestws_topology_secondary_rules/*rules的通用实现,包含创建、注销,执行和取消规则*///rules_engine.c /*创建一个规则容器,将一
2020-10-17 18:10:15
1756
原创 数据缓存-fifo算法(c语言)
在通讯场景下,两端的数据处理能力不同,或者受传输单次数据传输量的的限制,很多时候我们都需要将数据进行缓存,然后在进行处理,fifo就是一种很好的数据缓存模型,下面我写了一个实例,可直接移植使用typedef unsigned char uint8;typedef unsigned short uint16;#define MAX_FIFO_BUFFER_LEN 21typedef struct _fifo_t{ uint8 *buff; uint16 fifo_len; uint16 d
2020-10-08 18:20:30
4152
5
原创 电池电压值转换为百分比
在开发嵌入式产品中,一般都会用到电池,同时也就可能需要指示电池的电量需求,有些品台自带的百分比算法比较粗糙,满电电压减去关机电压除以100%,这种计算不符合实际电池放电曲线,往往30%多开始就飞速往下掉了。这里举例用一个简单的算法,用积分方式,把电池放电曲线,按同等时间分成10等分,每等分看似一个固定斜率,参考代码如下:#define ARRAY_DIM(a) (sizeof(a) / sizeof((a)[0]))const static int Battery_Level_Percent_Ta.
2020-10-08 18:08:52
9394
8
原创 crc和校验算法
本算法主要用于通讯数据传输中的数据校验,比如在基于串口的用户协议中,保证通讯的健壮性,就需要加入简单的校验,防止错报或者部分数据丢失。主要原理为发送数据时,在原始数据的末尾加入一个直接,用于存储原始数据的求和的值,当和值大于255时,对255取余。数据接收时,计算前面数据的和值,对比末尾位数据/************************************************************************************************函数名.
2020-10-08 18:00:16
726
原创 qcc304x笔记之tws mirror技术简述(十三)
本文针对高通tws mirror技术相关文档进行翻译与整理,以求能对新一代tws耳机的一些特性及原理有一个大致的了解。耳机与手机连接场景演变Tws技术发展历史TWS mirror概述如上图所示,该技术涉及的细节包括监听,同步,选择性数据中继,切换等监听:我猜测类似于用sniffer去抓取空中数据,可以获取大部分的数据包,由于没有纠错与重传机制,所以数据可信度不高,数据完整性依赖于数据的中继。同步:主要是同步比如AHF通道映射、加密信息变化等选择性数据中继:中继连接状态
2020-09-30 16:00:58
1803
1
原创 git常用命令
目录设置用户名和邮箱:新建版本库将修改加入到版本库:版本提交:修改上一次提交:查看历史版本:查看修改:本地关联服务器换行符转换从远端clone版本库到本地push代码到远端分支管理branch和checkout命令branch主要用法如下:checkout主要用法如下:版本回退对比差异设置用户名和邮箱:git config --global user.name "xxx" git config --global user.em...
2020-09-17 11:39:52
310
原创 Frontline ComProbe Protocol Analysis System(CPAS)简单使用说明
好的工具总能事半功陪,这里我简单是说明一下CPAS蓝牙数据分析工具,在分析蓝牙协议的过程中,基本都会用到了。打开Capture File Viewer选择手机抓取的btsnoop_hci.log或者是sniffer抓出来的.cfa文件然后选择View->Frame Display,就可以看到数据界面了:1区显示的是协议包的解析结构,图中显示的是从controller读取蓝牙地址的返回值,通过选择View->Show Decode Pane显示2区是协议区,通过选择不同
2020-09-04 11:17:42
5022
原创 python从入门到放弃(精通?不存在的)
python入门到精~精通是不可能精通的,这辈子都不可能精通的,自学不会,又不肯交学费,最终只能放弃这样子~呕血整理的python入门级别资料,带给即将入坑的小伙伴们~持续更新~官方网站:python官网:https://www.python.org/官方API文档,网盘里有本地档的,不过版本(3.7.4)较低,网速慢的可以将就着用:https://docs.python.org/3/library/index.htmlpython语言基础:廖雪峰python:..
2020-08-28 10:53:53
683
2
原创 qcc304x笔记之嵌入EQ模块(十二)
QCC304x_QCC514x默认没有嵌入EQ模块,即打开QACT工具是看不到eq调试界面的,所以需要我们将EQ模块嵌入到音频链路中。打开Earbud->src->chains目录,打开chain_output_voume.chain文件,将CAP_ID_PEQ加入链路中。<chain name="CHAIN_OUTPUT_VOLUME" id="0" generate_operator_roles_enum="False" generate_endpoint_roles_enu
2020-08-14 17:48:32
1799
10
原创 qcc304x笔记之监听(aec)功能(十一)
高通earbud工程自带环境音拾取功能(aec leakthrough),这里我们将介绍如何开启该功能。首先在工程配置中加入如下两个宏:自定义按键消息用于开启或关闭监听重新编译,并将固件烧录到芯片中。根据按键定义去开启监听,比如这里我定义的是双击切换enable/disable,双击就有可以开启监听环境音的效果了。如果觉得效果不明显,还可以连接QACT工具修改音频参数,如图,将Gain Sink1的参数加大之后,拾音效果就非常明显了,也可以调整其他eq参数,优化拾音效果。.
2020-07-23 21:01:18
1390
1
原创 qcc304x笔记之ota升级(十)
OTA升级说明生成oem key与之前csr、qcc的芯片一样,ota之前都需要oem key,该key(public,private)固件与ota文件各执一端,当升级的时候进行验证,保证固件与ota文件属于同一发布者。在MDE中选择Tools->Setup DFU security此时会让你选择保存文件夹,直接点确定默认就好,生成完成之后如下图所示:重新编译工程,就会将公钥注入固件中了,Deploy All将固件烧录到板子即可将上述过程重复操作,即可生成新的密钥对,只要d
2020-07-23 20:59:56
1544
原创 qcc304x笔记之长按开关机(四)
Earbud工程都没有长按开机的功能,默认是一个上升沿就开机了,需要我们自己设计在程序初始化时,进行拦截,等待条件(比如长按2s)到来在进行开机初始化流程我们先来看下开机初始化的逻辑main() appHandleMessage APPS_COMMON_INIT_CFM appHandleCommonInitCfm /*UI配置初始化*/...
2020-07-11 17:14:12
2631
21
原创 qcc304x笔记之手机端显示电量(九)
默认的sdk有些安卓手机不支持电量显示,所以需要加电量显示的补丁流程分析1. 首先新建一个task,并将task注册给电池模块appBatteryRegister(batteryRegistrationForm)实现handler处理函数,当battery模块电池电量更新后,会将电池百分比值发送到本模块,然后我们就可以在handler中将实时电量同步到手机端了。hfpAtCmdInit atCmdTask.task.handler = appAtCmdHandleM...
2020-07-11 17:13:56
1926
13
原创 qcc304x笔记之led配置(五)
在实际的项目中,可能需要针对产品的UI去定义led的显示,以提供给客户的提示效果,这篇我们将来解析关于qcc3040的led的逻辑以及如何去配置led代码逻辑分析/*将状态提供者注册给ui_led,这样当该提供者的状态改变时才能发送消息到led模块*/Ui_RegisterUiProvider/*当某一ui provider的状态改变,比如管理与耳机配对的ui_provider_handset_pairing状态由idle转换为active,发送UI_PROVIDER_CONTEXT_UPDA
2020-07-11 17:13:43
2187
9
原创 qcc304x笔记之i2c运用(八)
这里以驱动ST的gsensor--lis2dh12为例流程分析首先根据自己的原理图配置pio,注意这里是16进制显示添加一个task以及注册taskHandler用于管理与外设通讯,将task注册给PioMonitor 初始化pio 实现中断处理即taskhandler 配置gsensor的寄存器代码实现gSenorTaskData gSenorTask;/*pio中断处理函数*/static void Lis2dh12InterruptHandler(Task task,
2020-07-11 17:13:34
2261
4
原创 qcc304x笔记之提示音配置(六)
代码逻辑分析/*处理来自系统和内部的消息*/uiPrompts_HandleMessage /*从earbud_ui_prompts_table匹配当前事件是否设置了提示音*/ uiPrompts_GetPromptIndexFromMappingTable /*提示音播放任务调度*/ uiPrompts_SchedulePromptPlay uiPrompts_PlayPrompt appKymeraPromptPlay /*通知对端同步播放提示音*/Ui_RaiseUiE
2020-07-11 17:13:16
1982
10
原创 qcc304x笔记之tone配置(七)
代码逻辑分析/*处理来自外部的系统消息和内部的消息*/uiTones_HandleMessage /*从earbud_ui_tones_table匹配当前事件是否设置了提示音*/ uiTones_GetToneIndexFromMappingTable /*tone播放任务调度*/ uiTones_SchedulePlay uiTones_PlayTone appKymeraTonePlay /*通知对端同步播放tones*/Ui_RaiseUiEvent(ui_indica
2020-07-11 17:12:44
1087
原创 qcc304x笔记之按键拓扑(三)
上篇我们介绍了底层按键处理相关的逻辑,这篇我们继续说明按键的拓扑结构,比如按键事件在peer之间如何通知和如何处理代码逻辑分析不管是本地的按键消息还是对端传过来的消息,都会在如下的函数中处理:logicalInputSwitch_HandleMessage /*从对端设备传过来的按键消息*/ PEER_SIG_MARSHALLED_MSG_CHANNEL_RX_IND logicalInputSwitch_HandleMarshalledM...
2020-07-11 17:12:16
1635
7
原创 GUI说明(四)
GUI是基于vs2017的MFC实现的主界面:主界面的相关控件都是在btstack_demoDlg.cpp中实现,包括蓝牙搜索显示,连接等,如下图所示:协议调试界面在主界面中点击profile test,会进入各个协议操作的GUI这里我用propsheet的方式进行绘制,每一页为一个单独的property sheet,初始化的时候,会将app_display函数一回调的方式注册给底层,当底层有事件上报时,根据不同的事件,分发给对应的sheet进行相应的ui显示。音频处理音
2020-06-26 23:12:44
617
原创 做蓝牙发射(三)
上篇我们介绍了如何做为蓝牙接收设备运行,这篇我们继续介绍作为蓝牙发射设备运行!这里所说的蓝牙发射是指hfp ag,audio source,spp client,gatt client。同样,打开stack_config.h,修改宏定义,打开APP_TYPE_CENTRAL由于是做发射,这里只初始化了接收部分,涉及的应用应用程序为a2dp_source,hfp_ag,spp_client,le_streamer_client,相关接口我已经做了封装,并汇集到app.c中,请自行查阅。运行
2020-06-26 22:17:29
1314
2
原创 做蓝牙接收(二)
SDK简述首先我先简述一下整个开源sdk的目录结构:3rd-party:放的是各种算法,包括加密,音频编解码等等app(原example):各个协议的运用例程,本来各个例程之间是分离的,只能单独验证,这里我进行了整合,使之可以同时运行chipset:芯片相关,蓝牙厂商可以自定义一些hci指令,所以这里是为了适配蓝牙不同厂商的指令,我测试用的dongle是csr的,所以这里需要说明一下platform:平台相关,涉及到系统时钟以及任务的调度,这里是用的windows平台port:主
2020-06-26 21:59:25
821
ATS3015 Datasheet V1.1.pdf
2020-09-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人