自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Android Bluetooth Framework源码剖析(二)它们都重要

在具体讲述每个模块前我们先来看看一些公共的知识点,如Binder、JNI、Service、AIDL、Broadcast等,它们都是Android/Java基础的知识点,在网络上有许多相关的文章,本文就不深入的讲述它们,但在Bluetooth Framework或者app中都大量的使用了它们,所以本文主要是结合代码做一个回顾,后续文章可能一笔带过,不再花费篇幅讲解,主要集中在具体代码逻辑中。

2024-01-19 09:33:18 1184

原创 Android Bluetooth Framework源码剖析(一)初见轮廓

蓝牙如今许多人生活中不可或缺的一项技术,耳机、音箱、遥控器、手表、手环、电灯泡、手机、电脑、电视机,而Android也很常见,小到三岁孩童,老至八十老人都可能使用着它, 本系列文章将从源码角度详细剖析Android蓝牙框架,从现象看本质,看看点击一下蓝牙开关、点击一下连接就可以听到音乐背后的神秘面纱,看看app开发时调用enableconnect都是如何实现的。,也可以从国内的一些源获取。

2024-01-19 09:30:41 1176

原创 Android蓝牙协议栈fluoride(十一) - 音乐播放(4)

介绍了蓝牙音频的播放通路和编解码器,接下来介绍Source和Sink如何选择编解码器以及编解码流程。

2024-01-14 11:04:05 1209

原创 Android蓝牙协议栈fluoride(十) - 音乐播放(3)

音频流向如下图:建立AVDTP协议连接之后,当Source端需要播放时会通过AVDTP协议发送通过RTP格式封装的音频数据包,收到数据包之后协议栈中选用连接时约定的编码器以及参数进行解码,解码成PCM数据之后写入到音频模块进行播放。Source端会获取Sink端支持几个解码器(SEP, Stream End Point)。Source端获取每个SEP的配置(Capabilites)。根据Source端支持的配置情况选择一个配置设置给Sink端。

2023-12-27 14:08:06 1155 3

原创 Android蓝牙协议栈fluoride(九) - 音乐播放(2)

前面介绍了A2DP的角色和fluoride协议栈对外提供的API,接下来将介绍fluoride的实现。首先梳理一下btif中A2DP 角色和状态各个类之间的关系,如下图:在btif层用BtifAvPeer表示一个对端设备,分为两个角色:BtifAvSink、BtifAvSoure。在初始化(和)时,调用使能A2DP Profile,同时注册事件回调(和),然后调用注册peer id获取bta handle。之后A2DP相关事件都会通过注册的回调函数上报的btif,btif集中到处理。在中根据或者。

2023-12-22 16:41:40 980

原创 Android蓝牙协议栈fluoride(八) - 音乐播放(1)

通常情况下音乐播放与控制这两个profile(即A2DP和AVRCP)都是同时存在的,A2DP分为Sink(SNK)和Source(SRC)两个角色,ACRVP分为Controller(CT)和Target(TG)两个角色。接下来的几篇博客将详细介绍这两个profile。Sink和Source、CT和TG都是成对出现的。CT和TG可以同时存在在一个设备上,而Sink和Source则不能同时存在在一个设备上(不能同时工作)。

2023-12-21 17:39:57 717

原创 Android蓝牙协议栈fluoride(七) - 设备管理(bt stack)

设备管理stack层实现与整理流程

2023-12-15 20:22:41 1131

原创 Android蓝牙协议栈fluoride(六) - 设备管理(bt application)

fluoride协议栈功耗管理

2023-12-14 10:35:17 1039 1

原创 Android蓝牙协议栈fluoride(五) - 设备管理(bt application)

在上一篇中梳理了设备管理器对上层提供的接口,本文将介绍这些接口的具体实现。各个模块中采用了API+状态机+数据收发的方式,介绍设备管理时也将采用这个顺序介绍。

2023-12-11 14:37:00 1002

原创 Android蓝牙协议栈fluoride(三) - 系统管理

fluoride 协议栈的系统管理

2023-12-09 17:45:50 1330

原创 Android蓝牙协议栈fluoride(四) - 设备管理(bt interface)

设备管理的接口实现了蓝牙的开/关、属性设置、发现设备、获取profile的接口等等。

2023-12-08 11:05:26 716

原创 Android蓝牙协议栈fluoride(二) - 软件框架

fluoride 协议栈在整个软件框架中作为一个中间件的角色,向上对接APP,向下对接蓝牙芯片。fluoride采用C++语言实现,与APP(Jave)通信采用JNI机制;与蓝牙芯片通信使用HCI硬件接口(HCI软件协议参考蓝牙核心规范),同时fluoride还实现了蓝牙协议栈中的Host层,蓝牙应用的profile,设备管理等等。

2023-12-07 14:09:44 832

原创 Android蓝牙协议栈fluoride(一) - 概述

fluoride概述

2023-07-13 19:50:32 1781

原创 python入门一【各种运算】

python入门一【各种运算】

2019-03-17 19:12:50 323

原创 FreeRTOS学习笔记十三【事件组】

FreeRTOS学习笔记十三【事件组】目的简介事件组的特征事件组、事件标志、事件位多个任务访问事件组通过事件组管理事件xEventGroupCreate()xEventGroupSetBits()xEventGroupSetBitsFromISR()xEventGroupWaitBits()示例使用事件组同步任务引入xEventGroupSync()示例目的介绍事件组的实际用途。事件组相对...

2019-01-25 09:04:03 8191 5

原创 FreeRTOS学习笔记十二【资源管理】

FreeRTOS学习笔记十二【资源管理】目的资源管理的必要性关键部分代码与暂停调度器基本的关键部分代码暂停(或锁定)调度程序vTaskSuspendAll()xTaskResumeAll()互斥锁(和二值信号量)xSemaphoreCreateMutex()优先级反转优先级继承死锁递归互斥锁互斥锁和任务调度关守任务目的何时需要资源管理以及为什么需要资源管理。什么是关键部分代码。什么是互斥...

2019-01-23 10:41:34 1083

原创 FreeRTOS学习笔记十一【中断管理-下】

FreeRTOS学习笔记十一【中断管理-下】计数信号量介绍xSemaphoreCreateCounting()示例将工作推迟到RTOS守护程序任务介绍xTimerPendFunctionCallFromISR()示例在ISR中使用队列及其注意事项中断嵌套计数信号量介绍与二值信号量类似,计数信号量可以看作是长度大于1的队列,任务只关心队列中的项数,而不关心队列中的数据。要使用计数信号量需将Fr...

2019-01-22 15:39:22 2928 3

原创 FreeRTOS学习笔记十【中断管理-上】

FreeRTOS学习笔记十【中断管理-上】目的中断中使用API中断安全的APIxHigherPriorityTaskWoken参数目的介绍可以在中断服务函数例使用的FreeRTOS API函数。介绍将中断中处理的内容推迟到任务中处理的方法。创建和使用二值信号量和计数信号量。二值信号量和计数信号量的区别。使用队列将数据传入和传出中断服务函数。介绍一些FreeRTOS移植的中断嵌套模型...

2019-01-21 20:31:51 8127 1

原创 FreeRTOS学习笔记九【软件定时器】

FreeRTOS学习笔记九【软件定时器】目的软件定时器的属性与状态定时周期一次性定时器和固定频率定时器软件定时器的状态软件定时器的上下文软件定时器的回调函数RTOS守护程序(定时服务)任务定时器命令队列守护程序任务的调度软件定时器的使用xTimerCreate()xTimerStart()创建与启动定时器的示例xTimerChangePeriod()xTimerReset()定时器IDvTimer...

2019-01-19 14:53:14 4898

原创 FreeRTOS学习笔记八【队列-下】

FreeRTOS学习笔记八【队列-下】队列中存放大数据(一个包)或大小可变的数据存放大数据队列中存放大数据(一个包)或大小可变的数据存放大数据如果存储在队列中的数据项很大,则最好将指向数据的指针存放在队列中,这种方法可以有效的节省数据的拷贝时间以及降低创建队列时所需的空间。但使用指针时必须注意一下两点:指针指向的RAM的所有者是明确定义的。通过指针在任务之间共享内存时,必须确保各个任务...

2019-01-18 18:18:51 2890

原创 FreeRTOS学习笔记七【队列-上】

FreeRTOS学习笔记七【队列-上】目的队列的特征数据存储多个任务访问出队时阻塞任务入队时阻塞任务多个队列阻塞任务队列的使用xQueueCreate()xQueueSendToBack() 、 xQueueSendToFront()xQueueReceive()uxQueueMessagesWaiting()API的使用示例从多个数据源接收数据目的如何创建队列。队列如何管理它的数据。如...

2019-01-18 15:16:38 1100

原创 FreeRTOS学习笔记六【任务管理-调度算法】

FreeRTOS学习笔记五【任务管理-调度算法】任务状态和事件的回顾配置调度算法术语有时间片的优先抢占式调度无时间片的优先抢占式调度协作调度任务状态和事件的回顾运行中的任务处于运行状态(占用CPU时间)。在单核处理器上,在任一时刻只能有一个任务处于运行状态,未运行但又不处于阻塞态或暂停态的任务处于就绪态。处于就绪态的任务可以由调度程序调度进入运行状态,调度器始终选择处于就绪态中优先级最高的任务...

2019-01-18 11:03:59 3075 4

原创 FreeRTOS学习笔记五【任务管理-下】

FreeRTOS学习笔记五【任务管理-下】空闲任务与空闲任务hook空闲任务空闲任务hook改变任务优先级删除任务空闲任务与空闲任务hook空闲任务在FreeRTOS学习笔记四【任务管理-中】描述了当所有用户任务处于非运行态时,调度程序将调用空闲任务。在内核中必须有一个但也只能有一个任务进入运行状态,为了确保这种情况,在调用vTaskStartScheduler()时,调度程序会自动创建一个...

2019-01-17 10:23:25 625

原创 FreeRTOS学习笔记四【任务管理-中】

Free RTOS学习笔记四【任务管理-中】任务优先级时间测量和嘀嗒中断任务状态(补充)非运行态的子状态各个状态的转换图示例vTaskDelay函数vTaskDelayUntil函数任务优先级在Free RTOS学习笔记三【任务管理-上】一文中介绍了xTaskCreate()函数的各个参数,其中参数uxPriority指定创建任务的初始优先级。在创建完成后可以通过vTaskPriorityS...

2019-01-16 19:58:54 1648

原创 FreeRTOS学习笔记三【任务管理-上】

Free RTOS学习笔记三【任务管理-上】目的任务函数任务状态(简化)创建任务API函数任务创建创建任务时传递参数参考目的接下来的任务管理的几篇文章的主要目的是:FreeRTOS如何为应用程序中的每个任务分配处理时间。FreeRTOS如何在给定时间内选择执行哪个任务。每个任务的相对优先级对系统的影响。任务的几种状态。如何实现一个任务。如何创建一个或多个任务实例。如何使用任务参...

2019-01-16 16:03:51 816

原创 FreeRTOS学习笔记二【源码文件介绍及命名规范】

Free RTOS学习笔记二【源码文件介绍及命名规范】源码文件介绍源码中的命名规范两个重要数据类型变量名函数名宏名源码文件介绍Free RTOS源码中包含了内核、内核配置、各个厂家的微处理器的移植、多种内存管理方案、大量的demo。下面从使用的角度介绍源码中的文件。核心共用代码Free RTOS中实现最基本的任务调度功能只需要两个文件,及task.c和list.c,task用于任务的创...

2019-01-16 11:14:40 1095

原创 FreeRTOS学习笔记一【简介】

Free RTOS学习笔记一简介为什么使用Free RTOSFree RTOS的特性与FreeRTOS相关的两个RTOS源码与资料获取参考这一篇没有干货,只有FreeRTOS的一些介绍,可以选择性略过。简介FreeRTOS非常适用于微处理器或者小型微处理器的深度嵌入式实时应用,而这类应用包括硬实时应用和软实时应用。软实时即是在设定时间内运行,但未在该时间内运行不会使系统失效的应用,比如,响...

2019-01-16 11:14:09 1365

原创 ubuntu18.04 安装JLinkOB驱动以及问题解决

ubuntu18.04 安装JLinkOB驱动以及问题解决安装方式deb方式安装解压文件的方式安装解决问题FAILED: Can not connect to J-Link via USB.STM32 (connect): Can not attach to CPU. Trying connect under reset.安装方式deb方式安装解压文件方式安装(主要是在ARM板上安装时使用...

2018-12-20 18:47:08 2846

原创 dma-pl330 12680000.pdma: Reset Channel-1 CS-20000f FTC-20000解决方案

dma-pl330 12680000.pdma: Reset Channel-1 CS-20000f FTC-20000解决方案开发环境问题解决方法参考开发环境PC:Ubuntu18.04开发板:tiny4412SDK1611+tiny4412-1412交叉编译工具:gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabiU-boot:u-bo...

2018-12-15 08:25:25 1233 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除