请教BLE 中的sever和httpclient 缓存问题角色问题

四、BLE(中) - arduino - 博客园
随笔 - 16, 文章 - 0, 评论 - 0, 引用 - 0
1.1&&&&&& GATT Manager
GATT MGR模块管理所有的GATT服务,同时也是连接GATT模块与GATT ServiceS模块的桥梁。
1.1.1&&& 主要功能模块
先来看一张该模块的API关系图,sink_gatt_manager.c里面定义的接口主要供ApplicationLayer调用和回调,如用户(BLE Server)调用sinkGattManagerStartAdvertising()开始进行广播,用户(BLE Client)调用sinkGattManagerStartConnection()开始进行BLE连接。该该部分同时负责接收和处理来自ApplicationLayer的消息——GATT_MANAGER_DISCONNECT_IND,GATT_MANAGER_REGISTER_WITH_GATT_CFM等GATT_MANAGER_XXX系列消息。这些消息主要用来处理注册连接确认,断开连接请求等事件。
&&&&&& Gatt_nanager_handler.c主要定义和实现了内部回调函数gattManagerMessageHandler(),该接口主要接收来自GATT模块的GATT_XXX系列消息,以及GATT MGR内部的消息GATT_MANAGER_INTERNAL_MSG_XXX。处理这些消息的函数接口主要分布在gatt_manager_server.c和gatt_manager_client.c两个函数内部。
&&&&&& 根据BLE工作的角色不同,BLE分别定义了两套接口,分别完成客户和服务的角色的任务。
&&&&&&&& 作为BLE客户主要完成的任务有:
1.连接到服务器。这里包括主导发起连接至服务器,以及接收到服务器连接请求的确认。即:GattManagerConnectToRemoteServer()用来主动发起连接请求,在接收到GATT_CONNECT_CFM消息后,调用gattManagerClientRemoteServerConnected ()接口用于确认连接,完成连接的三次握手过程。
2. GATT支持notification和indication操作,因此客户端需要有着两种请求操作对应的接口。gattManagerClientRemoteServerNotification()和gattManagerClientRemoteServerIndication()就是为了实现这两种操作巍峨设计的。
3. 获取服务器的服务。根据GATT标准,获取服务的服务主要有:获取服务器主要GATT服务,获取某个GATT服务的所有特征值定义,获取某个GATT服务的特征值描述符,读/写某个特征值等。
&&&&&&&& 作为BLE服务器主要完成的任务有:
1.广播,以及处理客户端的连接请求。gattManagerServerAdvertising()开启广播,GattManagerWaitForRemoteClient()等待远程客户发起连接,gattManagerServerConnectInd()处理连接请求。gattManagerServerRemoteClientConnected()处理连接请求确认(三次握手最后一次)消息。
2.注册GATT service。GattManagerRegisterServer()向GATT MGR模块注册一个GATT service。
3.处理来自客户端的GATT操作,如access,indication,notification等。其中indication,notification操作都是由服务器主动对客户端发起的操作,因此客户端和服务器端处理的消息刚好是互为匹配的,即服务器处理的消息有(GATT_ACCESS_IND, GATT_NOTIFICATION_CFM, GATT_INDICATION_CFM),客户端对应的处理消息有(ATT_ACCESS_RSP, GATT_NOTIFICATION_IND, GATT_INDICATION_IND)。
1.1.2&&& GATT数据库
作为GATT的服务器,通常需要存储比较多的数据来支撑多个不同的GATT服务,因此在GATT服务器端,建立一个数据库是必要的。在CSR的BlueCore和CSRμEnergy软件开发工具包(SDK)中使用了一种特殊的数据库目标语言。该数据库通过GATT数据库生成器(CSR提供的gattdbgen.exe)自动生成。这就允许应用程序开发者以一种简单易读,便于维护的方式来创建一个数据库,避免采用诸如SDP这种用复杂的二进制形式表示方式。
数据库的生成
GATT数据库生成器输入一个用jeason语言描述的GATT服务文件foobar.db,输出一个foobar.c和foobar.h文件,这两个文件可以作为ADK工程的一部分进行编译和链接。可见数据库的生产是在整个工程编译前,准确的说是在预编译阶段就已经完成了。显然这样生产的数据是一个准常量的数据库,不能往里面新增记录,即不能动态的添加GATT服务,所有的服务必须在编译前就已经确定好。
例如,在ADK的sink例程中,sink_gatt_db.db作为数据库生成器的输入文件,输出sink_gatt_db.c和sink_gatt_db.h。
其中xxx_db.c文件有const uint16 gattDatabase[] = {}存储数据库记录。并提供两个接口工外部操作数据库,这两个接口分别为:
uint16 *GattGetDatabase(uint16 *len); &/*获取数据库存储区首地址*/
uint16 GattGetDatabaseSize(void);&&&&& /*获取数据库大小*/
在xxx_db.h文件中,除了GattGetDatabase()和GattGetDatabaseSize()接口的声明外,还有数据库中所有ATT记录的句柄(UUID)的宏定义,通常以HANDLE_GAIA_XXX的形式定义。通过该宏,可以快速索引某条ATT记录。
BLE在初始化GATT Manager模块时,对GATT database进行了初始化:
initialiseGattWithServers()-&
GattManagerRegisterConstDB(&gattDatabase[0], GattGetDatabaseSize());
例如某个gaia_db.db内容为:
primary_service {
&&& uuid : 0x01,&
&&& name : "GAIA_SERVICE",
&&& characteristic {
&&&&&&& uuid&&&&&&& : 0x02,
&&&&&&& name&&&&&&& : "GAIA_COMMAND_ENDPOINT",
&&&&&&& flags&&&&&& : [ FLAG_IRQ, FLAG_DYNLEN, FLAG_ENCR_W ],
&&&&&&& properties& : [ write ],
&&&&&&& value&&&&&& : 0x0
则其生成的gaia_db.c文件如下:
/* Static GATT database */
const uint16 gattDatabase[] = {
&&& /* 0001: Primary Service 0001 */
&&& /* 0002: Characteristic Declaration 0002 */
&&& 0x3, 0x0,
&&& /* 0003: . */
&&& 0xdd01, 0x0000,
uint16 *GattGetDatabase(uint16 *len)
&&& uint16 *rc = PanicUnlessMalloc(sizeof(gattDatabase));
&&& *len = sizeof(gattDatabase);
&&& memmove(rc, gattDatabase, sizeof(gattDatabase));
uint16 GattGetDatabaseSize(void)
&&& return sizeof(gattDatabase);
其生成的gaia_db.h文件如下:
#define HANDLE_GAIA_SERVICE&&&&&&&&&&& &(0x0001)
#define HANDLE_GAIA_SERVICE_END&&&&&&&& (0xffff)
#define HANDLE_GAIA_COMMAND_ENDPOINT&&& (0x0003)
uint16 *GattGetDatabase(uint16 *len);
uint16 GattGetDatabaseSize(void);
数据库维护
&&&&&&&& GATT数据库的数据单元是ATT记录,通过某条ATT记录的句柄(handler)可以快速和唯一地访问该条记录,例如,如果希望访问电池服务的电量特征值,该条特征值定义封装在一条句柄为0x0003的ATT记录中,通过句柄0x0003找到该条ATT记录,ATT.value即对应着电池电量值。BLE 蓝牙结构 - langwang2的专栏 - CSDN博客
BLE 蓝牙结构
Bluetooth Smart Ready(双模)、Bluetooth Smart(单模)、以及标准 Bluetooth
蓝牙配置文件位置:/data/misc/bluetooth
蓝牙协议栈结构
协议栈各层次介绍如下
物理层 - 1Mbps自适应跳频GFSK,运行在2.4GHz频段。
链路层- RF控制器, 控制设备的链路状态
- 为接口层, 向上为主机提供软件应用程序接口(API), 对外为外部硬件控制接口, 可以通过串口、SPI、USB来实现设备控制
L2CAP - 负责连接和事件,为上层提供数据封装服务, 允许逻辑上的端到端数据通信
- 负责配对,数据加密。提供配对和密钥分发服务, 实现安全连接和数据交换
- 直接与应用程序或配置文件(Profiles)通信的接口, 处理设备发现和连接相关服务. 另外还处理安全特性的初始化
- 导出特定的数据(称为属性)到其他设备
- 定义了使用ATT的服务框架和配置文件(Profiles)的结构. BLE中所有的数据通信都需要经过GATT
access : 通信
Application
The application, like in all other types of systems, is the highest layer and the one responsible for containing the logic, user interface, and data handling of everything related to the actual use-case that the application implements. The architecture of an application is highly dependent on each particular implementation
Includes the following layers:
Generic Access Profile (GAP)
Generic Attribute Profile (GATT)
Logical Link Control and Adaptation Protocol (L2CAP)
Attribute Protocol (ATT)
Security Manager (SM)
Host Controller Interface (HCI), Host side
Controller
Includes the following layers:
Host Controller Interface (HCI), Controller side
Link Layer (LL)
Physical Layer (PHY)
ATT 的 Client/Server 结构:
GATT 的 Client/Server 结构
只是server 之间差别
星形拓扑结构
蓝牙主设备 从设备的关联:
蓝牙4.1版本后:
A device can act as a central and a peripheral at the same time.
A central can be connected to multiple peripherals.
A peripheral can be connected to multiple centrals.
参考文献:
#### channel :
分配 40 个channel 数据通道,
Advertising Channels : 有3个 (37,38,39)通道用于广播数据,
Data channels : 其他 传输数据
蓝牙角色状态
LL 层 设备状态
Standby状态是初始状态,即不发送数据,也不接收数据。根据上层实体的命令(如位于host软件中GAP),可由其它任何一种状态进入,也可以切换到除Connection状态外的任意一种状态。
Advertising状态是可以通过广播通道发送数据的状态,由Standby状态进入。它广播的数据可以由处于Scanning或者Initiating状态的实体接收。上层实体可通过命令将Advertising状态切换回Standby状态。另外,连接成功后,也可切换为Connection状态。
Scanning状态是可以通过广播通道接收数据的状态,由Standby状态进入。根据Advertiser所广播的数据的类型,有些Scanner还可以主动向Advertiser请求一些额外数据。上层实体可通过命令将Scanning状态切换回Standby状态。
Initiating状态和Scanning状态类似,不过是一种特殊的接收状态,由Standby状态进入,只能接收Advertiser广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。
Connection状态是和某个实体建立了单独通道的状态,在通道建立之后,由Initiating或者Advertising自动切换而来。通道断开后,会重新回到Standby状态。
通道建立后(通常说“已连接”),处于Connection状态的双方,分别有两种角色Master和Slave
主从关系:
01 connect to the ATT client
02 接受数据方式: request to a server and receivers responses ; server-
03 只有扫描后才能够读写特征数据。
01 connet to the ATT server
02 the same time 可以同时为
定义数据权限:
01 数据可读可写 权限
02 需不需要加密 Encryption
03 需不需要认证 Authorization
访问有关的权限(access permissions),Readable、Writeable以及Readable and writable;
加密有关的权限(encryption permissions),Encryption required和No encryption required;
认证有关的权限(authentication permissions),Authentication Required和No Authentication Required;
授权有关的权限(authorization permissions),Authorization Required和No Authorization Required。
数据传输 protocol data units (PDUs, commonly known as packets)
在BLE协议中,广播通信主要有两类使用场景:
1)未链接状态:单一方向的、无连接的数据通信,数据发送者在广播信道上广播数据,数据接收者扫描、接收数据。
2)链接状态:连接的建立。
未链接状态:
Broacaster: 1 次广播有效bytes: 31个字节,协议携带自定数据。 如果31个字节不够,可以两次广播数据。
链接状态:
BLE 正常数据传输。
我的热门文章
即使是一小步也想与你分享网站已改版,请使用新地址访问:
BleAnpServer 一个关于蓝牙ble链接的示例,介绍了如何使 与ble设备 , Java Develop 243万源代码下载-
&文件名称: BleAnpServer& & [
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 134 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:一个关于蓝牙ble链接的示例,介绍了如何使用蓝牙与ble设备链接,-An example about bluetooth ble link, introduces how to use the bluetooth link with ble devices,
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&BleAnpServer\.classpath&&............\.project&&............\.settings\org.eclipse.jdt.core.prefs&&............\Android.mk&&............\AndroidManifest.xml&&............\bin\AndroidManifest.xml&&............\...\BleAnpServer.apk&&............\...\classes\com\samsung\ble\anpserver\ANPServerService$1.class&&............\...\.......\...\.......\...\.........\ANPServerService$2.class&&............\...\.......\...\.......\...\.........\ANPServerService$AnsCategoryId.class&&............\...\.......\...\.......\...\.........\ANPServerService$BluetoothSMSMMSContentObserver.class&&............\...\.......\...\.......\...\.........\ANPServerService$CallContentObserver.class&&............\...\.......\...\.......\...\.........\ANPServerService$IncomingCallUpdateThread.class&&............\...\.......\...\.......\...\.........\ANPServerService$LocalBinder.class&&............\...\.......\...\.......\...\.........\ANPServerService$MissedCallUpdateThread.class&&............\...\.......\...\.......\...\.........\ANPServerService$SMSMMSUpdateThread.class&&............\...\.......\...\.......\...\.........\ANPServerService.class&&............\...\.......\...\.......\...\.........\BuildConfig.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$1$1.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$1.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$2.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$3.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$4.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$5.class&&............\...\.......\...\.......\...\.........\DeviceListActivity$DeviceAdapter.class&&............\...\.......\...\.......\...\.........\DeviceListActivity.class&&............\...\.......\...\.......\...\.........\MainActivity$1$1.class&&............\...\.......\...\.......\...\.........\MainActivity$1$2.class&&............\...\.......\...\.......\...\.........\MainActivity$1.class&&............\...\.......\...\.......\...\.........\MainActivity$2$1.class&&............\...\.......\...\.......\...\.........\MainActivity$2$2.class&&............\...\.......\...\.......\...\.........\MainActivity$2.class&&............\...\.......\...\.......\...\.........\MainActivity$3.class&&............\...\.......\...\.......\...\.........\MainActivity$4.class&&............\...\.......\...\.......\...\.........\MainActivity$5.class&&............\...\.......\...\.......\...\.........\MainActivity$6.class&&............\...\.......\...\.......\...\.........\MainActivity.class&&............\...\.......\...\.......\...\.........\R$attr.class&&............\...\.......\...\.......\...\.........\R$dimen.class&&............\...\.......\...\.......\...\.........\R$id.class&&............\...\.......\...\.......\...\.........\R$layout.class&&............\...\.......\...\.......\...\.........\R$string.class&&............\...\.......\...\.......\...\.........\R$style.class&&............\...\.......\...\.......\...\.........\R.class&&............\...\.......\...\.......\...\.........\SoundManager$LoadListener.class&&............\...\.......\...\.......\...\.........\SoundManager.class&&............\...\classes.dex&&............\...\resources.ap_&&............\gen\com\samsung\ble\anpserver\BuildConfig.java&&............\...\...\.......\...\.........\R.java&&............\project.properties&&............\res\layout\device_element.xml&&............\...\......\device_list.xml&&............\...\......\main1.xml&&............\...\......\title_bar.xml&&............\...\values\strings.xml&&............\...\......-large\dimens.xml&&............\...\.......v11\styles.xml&&............\...\.........4\styles.xml&&............\src\com\samsung\ble\anpserver\ANPServerService.java&&............\...\...\.......\...\.........\DeviceListActivity.java&&............\...\...\.......\...\.........\MainActivity.java&&............\...\...\.......\...\.........\SoundManager.java&&............\bin\classes\com\samsung\ble\anpserver&&............\...\.......\...\.......\ble&&............\gen\com\samsung\ble\anpserver&&............\src\com\samsung\ble\anpserver&&............\bin\classes\com\samsung&&............\gen\com\samsung\ble&&............\src\com\samsung\ble&&............\bin\classes\com&&............\gen\com\samsung&&............\src\com\samsung&&............\bin\classes&&............\...\dexedLibs&&............\...\res&&............\gen\com&&............\res\drawable-hdpi&&............\...\drawable-mdpi&&............\...\drawable-xhdpi&&............\...\layout&&............\...\values&&............\...\values-large&&............\...\values-v11&&............\...\values-v14&&............\src\com&&............\.settings&&............\assets&&............\bin&&............\gen&&............\lib&&............\res&&............\src&&BleAnpServer
&输入关键字,在本站243万海量源码库中尽情搜索:}

我要回帖

更多关于 es的client连接池问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信