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 ... 
随机推荐
- git 的指定参考教程
			https://www.runoob.com/git/git-create-repository.html 
- qt 中的QlistWidget
- 十一:JavaWeb中的监听器(二)
			一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ... 
- (三)air202连接阿里云上传静态数据
			具体步骤跳转–合宙官网 air202luat二次开发设备接入阿里云(一) air202luat二次开发设备接入阿里云(二) air202luat二次开发设备接入阿里云(三) 可能遇到的问题 群文件中有 ... 
- linux(4)----------ssh config详解
			1.概述 ~~ config为了方便我们批量管理多个ssh ~~ config存放在~/.ssh/config .XX代表隐藏目录 ~~ config配置语法 2 ... 
- Executor执行器
			Executors: CachedThreadPool 将为每个任务创建一个线程. public class CachedThreadPool { public static void main(S ... 
- 模拟文件上传(二):使用apache fileupload组件进行文件上传
			其中涉及到的jar包: jsp显示层: <%@ page language="java" import="java.util.*" pageEncodin ... 
- 1.3w字,一文详解死锁!
			死锁(Dead Lock)指的是两个或两个以上的运算单元(进程.线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁. 1.死锁演示 死锁的形成分为两个方面,一个是使用 ... 
- 理解ASP.NET Core - [03] Dependency Injection
			注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 依赖注入 什么是依赖注入 简单说,就是将对象的创建和销毁工作交给DI容器来进行,调用方只需要接 ... 
- 多个mysql同时运行
			一.准备 mysql下载地址 https://dev.mysql.com/downloads/mysql/ 1.下载 2.解压缩 3.创建my.ini [Client] port = 3307 [my ... 
