AVS 端能力之蓝牙模块
该类为蓝牙端能力处理类,主要负责蓝牙设备配对和蓝牙音频播放功能。
功能简介
- 实现蓝牙设备的启动发现模式、扫描蓝牙设备、建立蓝牙连接功能
- 实现蓝牙设备音频播放、停止、上一首、下一首功能
- 其它细节参考《AVS 端能力模块》
UML 图集
完整类图

精简类图

对象调用

调用流程
// 创建对象并更新上下文
Bluetooth:create
Bluetooth:init
BlueZDeviceManager:getDiscoveredDevices
Bluetooth:executeUpdateContext:buffer={"alexaDevice"\:{"friendlyName"\:"sprite-moon"}\,"pairedDevices"\:[]}
Bluetooth:getConfiguration
// 注册蓝牙指令处理
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=Previous,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=Play,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=DisconnectDevice,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=Next,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=ConnectByProfile,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=EnterDiscoverableMode,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=PairDevice,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=ScanDevices,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=ExitDiscoverableMode,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=UnpairDevice,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=Stop,handler=0x55a9c2a48000,policy=NON_BLOCKING
DirectiveRouter:addDirectiveHandlers:action=added,namespace=Bluetooth,name=ConnectByDeviceId,handler=0x55a9c2a48000,policy=NON_BLOCKING
###########################
# Thinking... #
###########################
// 接收到ConnectByProfile指令并执行预处理
DirectiveSequencer:onDirective:directive={"directive"\:{"header"\:{"namespace"\:"Bluetooth"\,"name"\:"ConnectByProfile"\,"messageId"\:"90326566-00c6-436b-93ef-a9d7e0bf8558"\,"dialogRequestId"\:"5a6fa9c6-bdbb-4097-9d6a-d9e8ad5d5434"}\,"payload"\:{"profile"\:{"name"\:"A2DP-SOURCE"}}}}
DirectiveRouter:preHandleDirective:messageId=90326566-00c6-436b-93ef-a9d7e0bf8558,action=calling
CapabilityAgent:addingMessageIdToMap:messageId=90326566-00c6-436b-93ef-a9d7e0bf8558
Bluetooth:preHandleDirective
// 接收到EnterDiscoverableMode指令并执行预处理
DirectiveSequencer:onDirective:directive={"directive"\:{"header"\:{"namespace"\:"Bluetooth"\,"name"\:"EnterDiscoverableMode"\,"messageId"\:"2836b54f-8e68-4147-86a4-8056d98cc7fe"\,"dialogRequestId"\:"5a6fa9c6-bdbb-4097-9d6a-d9e8ad5d5434"}\,"payload"\:{}}}
DirectiveRouter:preHandleDirective:messageId=2836b54f-8e68-4147-86a4-8056d98cc7fe,action=calling
CapabilityAgent:addingMessageIdToMap:messageId=2836b54f-8e68-4147-86a4-8056d98cc7fe
Bluetooth:preHandleDirective
###########################
# Speaking... #
###########################
// 处理ConnectByProfile指令
DirectiveRouter:handleDirective:messageId=90326566-00c6-436b-93ef-a9d7e0bf8558,action=calling
Bluetooth:handleDirective
// 处理EnterDiscoverableMode指令
DirectiveRouter:handleDirective:messageId=2836b54f-8e68-4147-86a4-8056d98cc7fe,action=calling
Bluetooth:handleDirective
// 解析ConnectByProfile指令内容连接执行后消息队列移除该消息
Bluetooth:parseDirectivePayload
Bluetooth:executeConnectByProfile:profileName=A2DP-SOURCE,profileVersion=
Bluetooth:executeUpdateContext:buffer={"alexaDevice"\:{"friendlyName"\:"sprite-moon"}\,"pairedDevices"\:[]}
Bluetooth:executeQueueEventAndRequestContext:eventName=ConnectByProfileFailed
DirectiveProcessor:onHandlingCompeted:messageId=90326566-00c6-436b-93ef-a9d7e0bf8558,directiveBeingPreHandled=(nullptr)
CapabilityAgent:removingMessageIdFromMap:messageId=90326566-00c6-436b-93ef-a9d7e0bf8558
// 解析EnterDiscoverableMode指令内容连接执行后消息队列移除该消息
Bluetooth:parseDirectivePayload
Bluetooth:executeSetDiscoverableMode
Bluetooth:executeQueueEventAndRequestContext:eventName=EnterDiscoverableModeSucceeded
DirectiveProcessor:onHandlingCompeted:messageId=2836b54f-8e68-4147-86a4-8056d98cc7fe,directiveBeingPreHandled=(nullptr)
CapabilityAgent:removingMessageIdFromMap:messageId=2836b54f-8e68-4147-86a4-8056d98cc7fe
// Context可用时发送ConnectByProfileFailed事件
Bluetooth:onContextAvailableLambda
EventBuilder:buildJsonEventString:messageId=ab2db07c-9095-4110-bec2-59719618417d,namespace=Bluetooth,name=ConnectByProfileFailed
Bluetooth:onContextAvailableLambda:event={"context":[{"header":{"namespace":"Bluetooth","name":"BluetoothState"},"payload":{"alexaDevice":{"friendlyName":"sprite-moon"},"pairedDevices":[]}}],"event":{"header":{"namespace":"Bluetooth","name":"ConnectByProfileFailed","messageId":"ab2db07c-9095-4110-bec2-59719618417d"},"payload":{"requester":"CLOUD","profileName":"A2DP-SOURCE"}}}
AVSConnectionManager:sendMessage:event="报文内容同上,原始报文中的context包含所有端能力状态"
// Context可用时发送EnterDiscoverableModeSucceeded事件
Bluetooth:onContextAvailableLambda
EventBuilder:buildJsonEventString:messageId=6dcdbdad-eba3-4fd2-805f-48b2da365a62,namespace=Bluetooth,name=EnterDiscoverableModeSucceeded
Bluetooth:onContextAvailableLambda:event={"context":[{"header":{"namespace":"Bluetooth","name":"BluetoothState"},"payload":{"alexaDevice":{"friendlyName":"sprite-moon"},"pairedDevices":[]}}],"event":{"header":{"namespace":"Bluetooth","name":"EnterDiscoverableModeSucceeded","messageId":"6dcdbdad-eba3-4fd2-805f-48b2da365a62"},"payload":{}}}
AVSConnectionManager:sendMessage:event="报文内容同上,原始报文中的context包含所有端能力状态"
AVS 端能力之蓝牙模块的更多相关文章
- AVS 端能力之音频播放模块
功能简介 音频播放 音频流播放 URL文件播放 播放控制 播放 暂停 继续 停止 其它功能(AVS服务器端实现) 支持播放列表 支持上一首下一首切换 支持电台 事件指令集 AudioPlayer 端能 ...
- Arduino蓝牙模块实现通信
蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有 ...
- Android蓝牙实例(和单片机蓝牙模块通信)
最近做毕设,需要写一个简单的蓝牙APP进行交互,在网上也找了很多资料,终于给搞定了,这里分享一下^_^. 1.Android蓝牙编程 蓝牙3.0及以下版本编程需要使用UUID,UUID是通用唯一识别码 ...
- 【转】android蓝牙开发---与蓝牙模块进行通信--不错
原文网址:http://www.cnblogs.com/wenjiang/p/3200138.html 近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利, ...
- 【Arduino】开发入门【十】Arduino蓝牙模块与Android实现通信
[Arduino]开发入门[十]蓝牙模块 首先show一下新入手的蓝牙模块 蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机 ...
- Android单片机与蓝牙模块通信实例代码
Android单片机与蓝牙模块通信实例代码 参考路径:http://www.jb51.net/article/83349.htm 啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通 ...
- Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino UNO板 https://item.t ...
- android蓝牙开发---与蓝牙模块进行通信
近半个月来一直在搞android蓝牙这方面,主要是项目需要与蓝牙模块进行通信.开头的进展很顺利,但因为蓝牙模块不在我这里,所以只能用手机测试.一开头就发现手机的蓝牙不能用,为了证明这点,我刷了四次不同 ...
- Bluetooth篇 开发实例之九 和蓝牙模块通信
首先,我们要去连接蓝牙模块,那么,我们只要写客户端的程序就好了,蓝牙模块就相当于服务端. 连接就需要UUID. #蓝牙串口服务SerialPortServiceClass_UUID = ‘{00001 ...
随机推荐
- Flutter 与 Swift - 在创建 iOS 应用程序时应该押注什么技术?
Swift 和 Flutter 是考虑创建 iOS 应用程序的公司最想要的两种技术.开发者能用原生技术取胜吗?如何选择,哪种更适合您的应用?让我们一探究竟吧! 根据 Statista 的数据, 201 ...
- 题解 Lost My Music
传送门 多明显的斜率式然而我没有看出来 然而不管是我乱搞的思路还是正解的凸包思路都需要一个可持久化栈 考场上想到可持久化单调栈,但不会实现-- 其实单调栈不管是否可持久化都能倍增弹栈 但普通单调栈本来 ...
- HCNP Routing&Switching之OSPF网络类型
前文我们了解了PPPoE协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15182512.html:今天我们聊聊一聊OSPF中的网络类型相关话题: ...
- 让div占据父元素剩下的所有位置
场景模拟: 现在有一个父容器,里面有俩个div,左边的要给一个固定的200px的宽度,父容器剩下的宽度都归右边的div该怎么完成?HTML代码: <div class="wrap&qu ...
- 【spring 注解驱动开发】spring组件注册
尚学堂spring 注解驱动开发学习笔记之 - 组件注册 组件注册 1.@Configuration&@Bean给容器中注册组件 2.@ComponentScan-自动扫描组件&指定扫 ...
- C#基础知识---动态为类型添加属性
一.概述 通常情况下,我们是事先在类型中定义好属性的,但有时候,我们需要动态为一个类型添加某些属性,这个时候,我们就需要使用DynamicObject类型了. 二.Demo using System; ...
- c++与c#混合编程
C#写界面比较方便,而C++则擅长写算法,所以将两者结合起来将会加快程序的开发速度,并保证程序的质量.但C#与C++的混合编程有很多细节问题需要注意,下面简要列举一些并指出相应的解决办法. 1. 将本 ...
- WPF日积月累之文件监测与DataGrid指定Row的颜色
一.概述 关于DataGrid指定Row的颜色,我们可以使用转换器和DataGridRow的Style来实现.对于文件的检测,我们可以使用FileSystemWatcher来实现. 二.Demo Co ...
- File--字节流--字符流
File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.构造方法 public File(String pathname) :通过将给定 ...
- Git pull and push
转自:https://blog.csdn.net/qq_41306423/article/details/101701991 关于 git pull 和 git pull origin develop ...