获取蓝牙设备类型怎么选和打印,目前启动类型bta

蓝牙设备类型怎么选pan就是我们熟知的蓝牙设备类型怎么选网络他在蓝牙设备类型怎么选协议体系中的层次结构见如下图:

BNEP相当于网络协议栈中的链路层,由该层虚拟出┅个网络接口而BNEP层以下就是蓝牙设备类型怎么选核心协议之一的L2CAP。这个是在蓝牙设备类型怎么选协议中的层次结构具体在bluedroid中的层次结構,跟这个有点出入但基本都差不多的。

上图中的BNEP层收到的数据包是以太网格式的需要将他重现拆分打包成适合BNEP over L2CAP来传输,所以在BNEP层需偠将ip层下来的以太网头去掉再加上BNEP的头,当这个BNEP包传输到l2cap层时又会被加上L2cap的头,他们的包头格式的变换如下图所示:

上图中的BNEP Header的格式基本是遵循如下图所示的格式但具体的格式是依赖于BNEP TYPE的,不同的type他们的BNEP header是有所不同的

以上各字段的解析如下:

 以上各种BNEP包类型,重点描述0x01和0x2类型其他的请详见BNEP的协议描述。

上图中的BNEP control type有如下种类他们主要用于BNEP连接的建立和断开,及设置网络滤包但需要注意的是,由於BNEP连接是建立在l2cap连接之上的所以需要先建立l2cap连接。

控制类型的包的解析就到此为止因为其他的控制包类型都是可选的,就不再累述了下面描述第二种包。

至此我们在bluedroid BNEP协议的实现中要用到的主要包类型已经描述完毕下面开始具体的实现环节。

callin接口用来接收上层的命令而callback接口用来给上层返回状态等事件。PAN HAL层以下就是PAN BTA层也就是pan的应用层,而BTA层以下就是pan 的核心stack层包含两部分,一个部分是stack pan一个部分是stack bnep,前者基于后者最后bnep是基于l2cap层。

而层与层之间都是通过callin 和callback来进行交互,最终达到信息在各层次间的交流

具体到每层的实现,基本都昰分为三个子模块:api submodmain submod,utils submod其中api submod提供给上层调用该层的接口,而main submod会提供给上层一个注册函数用于注册上层的回调函数,另外一个主要功能就是状态机的维护和迁移;在有状态机的模块通常还包含一个action submod该模块就是在状态迁移时,需要执行的动作都定义在该模块中;而utils subsys就是笁具和辅助函数

下图再结合上图,你就可以清楚的看到一个命令是如何在上层传递到下层,并且命令的事件是如何通过各层的callback从下层傳递回上层的

前面我们知道,BNEP的连接是建立在l2cap连接之上的从上面的连接时序图中,我们可以清楚的看到BNEP的连接过程的半段就是l2cap的连接(连接情况的发起,链路的配置等)然后才是BNEP链路的连接。上图中箭头从左到右的是上层命令传递到下层的一个流程;而箭头从右箌左就是命令的事件从下层通过回调传递到上层的流程。

上述的过程需要注意以太网的头是如何在这个过程被去掉的,并且BNEP的头是如何被添加进来的最后传递到l2cap层,并由l2cap层添加l2cap的头

数据接收的过程,就是进来的数据一路从下层回调到上层的过程

下图就是bnep连接过程,對应的l2cap连接的过程对应下图包序号的348到355.简单的描述就是链路连接的发起和配置过程。

 下面就是在l2cap连接建立的基础上发起Bnep层的连接的过程,很简单就两个包然后数据在通讯过程中,基本都是使用的compressed ethernet package因为发送和接受放都是l2cap的两端,所以src和dest地址都可以省略掉 

我要回帖

更多关于 拜亚动力bta 的文章

 

随机推荐