澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:使能notifyBluetooth低功耗设

2019-05-03 作者:澳门新萄京官方网站   |   浏览(193)

星期三, 05. 九月 2018 02:03上午 - beautifulzzzz

Daydream

Key Terms And Concepts

前言

新近求学Linux相关的东西,其中3个思路是看书时用华为平板上的SSH连接Linux主机实验。先是认为台式机耗广播电视大学、噪音大,后来台式机电脑也以为功耗大、噪音大。于是就悟出了欧洲糙莓派,谷歌(谷歌(Google))查了瞬间后通晓未来早正是2016年12月生产的Raspberry Pi 三 Model B型号了。

切实技能参数:

1.2GHz 64-bit quad-core ARMv8 CPU
802.11n Wireless LAN
1GB RAM
4 USB ports/40 GPIO pins/Full HDMI port/Ethernet port
Bluetooth 4.1/Bluetooth Low Energy (BLE)
Combined 3.5mm audio jack and composite video
Camera interface (CSI)
Display interface (DSI)
Micro SD card slot (now push-pull rather than push-push)
VideoCore IV 3D graphics core

澳门新萄京官方网站 1

Raspberry Pi 3 Model B 布局图

澳门新萄京官方网站 2

Raspberry Pi 3 Model B 实物图

澳门新萄京官方网站 3

天猫商城购物到货图

澳门新萄京官方网站 4

设置好外壳图

从日前的才能参数知道马林派CPU是壹.二GHz 6四-bit quad-core A兰德HavalMv八,所以要设置专门为A奥迪Q三M管理器编写翻译的Linux操作系统。先是安装了法定的Raspbian 杰西(Debian 8 杰西的Raspberry PI定制版本)版本Linux系统,但因为是用以学习Linux命令和Wordpress服务器,那几个版本里剩下的东西太多了。后来可比了各个Raspberry PI的Linux版本,选取了Minibian这几个系统(当然也是杰西版本了)。

乔木丛派官方网站(Raspbian 杰西):http://www.raspbian.org

Minibian官网(Raspbian 杰西201陆年二月二七日版本):https://minibianpi.wordpress.com/

澳门新萄京官方网站 5

迷你bian系统运维截图

澳门新萄京官方网站 6

android.bluttooth

根本术语和概念

Here is a summary of key BLE terms and concepts:
以下是有关BLE的重大术语和定义的摘要

  • Generic Attribute Profile (GATT)—The GATT profile is a general specification for sending and receiving short pieces of data known as "attributes" over a BLE link. All current Low Energy application profiles are based on GATT.
    通用属性配置文件(GATT)--通用属性配置文件是三个经过BLE链接发送或收受短小部分数据或被号称“属性”的通用典型。当前颇具的低耗能应用配置文件都基于GATT。

    • The Bluetooth SIG defines many profiles for Low Energy devices. A profile is a specification for how a device works in a particular application. Note that a device can implement more than one profile. For example, a device could contain a heart rate monitor and a battery level detector.
    • 澳门新萄京官方网站,蓝牙五.0技能联盟为低功耗设备定义了不少隶属文件。配置文件是叁个在一定应用中配备怎么着工作的专门的工作。请留意,3个装置得以兑现多少个布局文件。举例:二个配备能够涵盖2个心跳检验器和贰个电量质量评定器
  • Attribute Protocol (ATT)—GATT is built on top of the Attribute Protocol (ATT). This is also referred to as GATT/ATT. ATT is optimized to run on BLE devices. To this end, it uses as few bytes as possible. Each attribute is uniquely identified by a Universally Unique Identifier (UUID), which is a standardized 128-bit format for a string ID used to uniquely identify information. The attributes transported by ATT are formatted as characteristics and services.
    性格协议(ATT)——GATT创立在质量协议(ATT)之上。那也被号称GATT/ATT。ATT经过优化,可在BLE设备上运维。为此,它应用尽恐怕少的字节。每一个属性由通用唯一标记符(UUID)唯壹标记,该标记符是用于唯壹标志消息的标准12八-bit格式的字符串ID。由ATT传输的质量被格式化为特征和劳动

  • Characteristic—A characteristic contains a single value and 0-n descriptors that describe the characteristic's value. A characteristic can be thought of as a type, analogous to a class.
    特点——2个特点包罗3个值和0至八个描述特征的讲述符。叁个特色能够被感觉是1种档期的顺序,类似于四个类。

  • Descriptor—Descriptors are defined attributes that describe a characteristic value. For example, a descriptor might specify a human-readable description, an acceptable range for a characteristic's value, or a unit of measure that is specific to a characteristic's value.
    讲述符——描述符是描述特征值的定义属性。比如:描述符大概能够钦点一个生人可读的叙说,特征值的可接受范围,或特征值特有的单位

  • Service—A service is a collection of characteristics. For example, you could have a service called "Heart Rate Monitor" that includes characteristics such as "heart rate measurement." You can find a list of existing GATT-based profiles and services on bluetooth.org.
    劳务——服务是二个特色的会集。举个例子:你能够运用1个叫作“心跳检查测试器”的劳务,其中囊括“心跳衡量”等特点。你能够在bluetooth.org上找到多个已经存在的依据GATT的布局文件和劳务的列表

安装操作系统

设置Minibian的步调(以安装了Microsoft Windows 10X6四的处理器作为扶持平台):
一、策动多个Micro CF卡,容积在1六GB至64GB之间就可以,速度越快越好;
贰、将Micro TF卡以FAT格式化;
③、将下载的“201陆-03-1贰-jessie-minibian.tar.gz”解压缩;
四、使用Win3二 Disk Imager(链接地址:https://sourceforge.net/projects/win32diskimager/)将解压得到的“二〇一四-0三-12-jessie-minibian.img”文件写入Micro SD闪存卡;
5、将写有Minibian系统的Micro microSD闪存卡放入四月泡派的Micro miniSD卡槽(Micro SD Card Slot);
六、悬钩子派加电开机,Minibian的用户名字为“root”,初步密码为“raspberry”(记得登6后第2件事正是应用“passwd root”命令修改root用户的密码)。

相对记得:修改root用户的密码,修改root用户的密码,修改root用户的密码!

1、前言

上1篇讲了何等编译安装逼lueZ-五,本篇首要在于玩BlueZ,用命令行去操作BLE设备:

  • [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B

澳门新萄京官方网站 7

Virtual Reality High Performance

提供管理Bluetooth效率的类,比方对设施的围观,连接装置,和保管设施之间的传输数据。蓝牙5.0API接济优异蓝牙( Bluetooth® )和低耗电蓝牙( Bluetooth® )。

Roles and Responsibilities

安装Wordpress

一、 安装Wordpress从前的操作:改换Micro SDXC卡的Linux数据分区的上空

fdisk /dev/mmcblk0

键入“p”查看当前的分区情况;
先键入“d”再键入“二”删除当前的多寡分区;
次第键入“n”“p”“2”创制新的数额分区,小编动用的201陆-03-1二版本的Minibian是从12505陆上马的分区,这里要专注一下;
键入“w”写入分区表。

分区生效需求采纳“reboot”重启悬钩子派。
起头后键入“resize2fs /dev/mmcblk0p二”命令才算实现。
使用“df -h”查看一下改变后的分区景况。
选取“dpkg-reconfigure tzdata”命令退换时区。

贰、 更新系统

澳门新萄京官方网站:使能notifyBluetooth低功耗设备,虚拟现实。apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get install nano

此间有人推荐修改/etc/apt/sources.list那个文件,修改Minibian的源,因为官方的“deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free”和“deb http://archive.raspberrypi.org/debian jessie main”这多少个源太慢,笔者试了多少个网络给的源,要么版本不对,要么已经失效了,因为须求更新的事物不多,作者仍旧利用官方的源。

凭借自个儿的/etc/apt/sources.list文件:

deb http://archive.raspbian.org/raspbian jessie main contrib non-free
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free
deb http://archive.raspberrypi.org/debian jessie main

三、安装Apache网址服务器

apt-get install apache2 –y

形成后方可在Computer上的浏览器地址栏输入“http://localhost”或许用“hostname -I”得到的IP地址测试。

4、安装PHP

apt-get install php5 libapache2-mod-php5 php5-gd –y

5、安装MySQL

apt-get install mysql-server php5-mysql –y

这里会须求输入数据库管理员的口令,不要忘了!
重启Apache服务:

service apache2 restart

6、安装Wordpress
下载Wordpress。 Wordpress官网:https://wordpress.org/ 查看下载链接地址:https://wordpress.org/latest.tar.gz

cd /var/www/html/
rm *
wget https://wordpress.org/latest.tar.gz

解压缩安装

tar xzf wordpress.org/latest.tar.gz
mv wordpress/* .
rm wordpress.org/latest.tar.gz
chown -R www-data

创建Wordpress数据库

mysql -uroot –p'password'
mysql> create database wordpress;
mysql> quit
service apache2 restart

Wordpress初始化http://YOUR-IP-ADDRESS,点击“Let's go!” 。

澳门新萄京官方网站 8

Wordpress伊始化分界面(依版本和语种不一样只怕两样)

澳门新萄京官方网站 9

填入相应的内容后,点击“提交”,在随后的页面中式点心击“安装”

柒、安装花生壳
花生壳官方网站下载页:http://hsk.oray.com/download/

wget http://hsk.oray.com/download/download?id=25
tar zxvf phddns_raspberry.tgz
cd phddns2
./oraynewph start
oraynewph status

在运转后归来的情节中找到“SN:RAPIxxxxxxxxxxxxxxxxx”类似的SN码,在浏览器地址栏输入:http://b.oray.com

用户名是SN码,开端口令是“admin”

登录后就能够张开花生壳的内网地址映射的设置了。万壹您忘掉了团结的花生壳登入新闻,用那几个命令:

oraynewph reset

澳门新萄京官方网站 10

预备参考的书本,八面驶风,样样稀松,只援引小白购买

二、gatttool —— 老工具趟坑

刚开始接着 Get Started with Bluetooth Low Energy on Linux 操作gatttool,开掘坑太多(主因是工具老了):

采用sudo gatttool -b 4D:69:98:0E:91:5E -I去连接
察觉会报错:Error: connect error: Connection refused (111)
最后参考LINK-11发掘须要加random选项([#1](https://stackoverflow.com/questions/32947807/cannot-connect-to-ble-device-on-raspberry-pi))

➜  ~  sudo gatttool -b 4D:69:98:0E:91:5E -I
[4D:69:98:0E:91:5E][LE]> connect
Attempting to connect to 4D:69:98:0E:91:5E
Error: connect error: Connection refused (111)
[4D:69:98:0E:91:5E][LE]> exit
➜  ~  sudo gatttool  -t random  -b 4D:69:98:0E:91:5E -I
[4D:69:98:0E:91:5E][LE]> connect
Attempting to connect to 4D:69:98:0E:91:5E
Connection successful
[4D:69:98:0E:91:5E][LE]> 
(gatttool:3104): GLib-WARNING **: Invalid file descriptor.

过一次会十S机关断开,英特网说那些工具老了,不建议用了([#2](https://www.spinics.net/lists/linux-bluetooth/msg67617.html)):

There are new tools to use with GATT, bluetoothctl/bluetoothd is the preferred since with that you have GAP, etc, 
but if want to use a stand alone tool then I suggest you use btgatt-client.

澳门新萄京官方网站 11

googlevr

Provides classes that manage Bluetooth functionality, such as scanning for devices, connecting with devices, and managing data transfer between devices. The Bluetooth API supports both "Classic Bluetooth" and Bluetooth Low Energy.

剧中人物和天职

Here are the roles and responsibilities that apply when an Android device interacts with a BLE device:
此处是Android设备与BLE设备交互时适用的剧中人物和天职:

  • Central vs. peripheral. This applies to the BLE connection itself. The device in the central role scans, looking for advertisement, and the device in the peripheral role makes the advertisement.
    中央和外设。那适用于BLE连接自身。大旨设备剧中人物扫描,找寻广告,同时外角色设备创制广告。

  • GATT server vs. GATT client. This determines how two devices talk to each other once they've established the connection.
    GATT服务器和GATT客户端。那决定了五个设备创建连接之后怎样通讯。

To understand the distinction, imagine that you have an Android phone and an activity tracker that is a BLE device. The phone supports the central role; the activity tracker supports the peripheral role (to establish a BLE connection you need one of each—two things that only support peripheral couldn't talk to each other, nor could two things that only support central).
为了驾驭这几个特点,如果你抱有八个Android手提式有线电话机和3个BLE活动追踪器设备。手提式有线电话机担负中心角色;活动追踪器担当外设剧中人物(为了创设BLE连接,你供给有的的这么的器械。只扶助外设剧中人物的三个设施不可能相互通讯,同样,仅辅助大旨角色的四个设备也不可能互相通讯)

Once the phone and the activity tracker have established a connection, they start transferring GATT metadata to one another. Depending on the kind of data they transfer, one or the other might act as the server. For example, if the activity tracker wants to report sensor data to the phone, it might make sense for the activity tracker to act as the server. If the activity tracker wants to receive updates from the phone, then it might make sense for the phone to act as the server.
手提式无线电话机和平运动动追踪器壹旦确立了连年,他们就从头互相传输GATT元数据。正视于她们传输的多寡,在那之中的三个上马出任服务器。比如:假如移动追踪器希望将传感器数据报告给手提式有线电话机,那么活动追踪器大概会担负服务器。怎样运动追踪器想要从手提式有线电话机械收割到更新,那么手提式有线话机恐怕会担负服务器。

In the example used in this document, the Android app (running on an Android device) is the GATT client. The app gets data from the GATT server, which is a BLE heart rate monitor that supports the Heart Rate Profile. But you could alternatively design your Android app to play the GATT server role. See BluetoothGattServer for more information.
那几个文书档案中使用的例证中,Android 应用软件(运维在Android设备上)是GATT客户端。App从1个GATT服务器中获取数据,GATT服务器是1个提供心跳配置文件的BLE心跳检验器。不过你也足以设计你的安卓App充当GATT服务器的剧中人物。有关详细信息,请查看蓝牙( Bluetooth® )GattServer。

三、bluetoothctl——NB的新工具

命令行进入bluetoothctl操作遭逢([#6](https://mcuoneclipse.com/2016/12/19/tutorial-ble-pairing-the-raspberry-pi-3-model-b-with-hexiwear/))

bluetoothctl

本身在手机上用lightblue模拟叁个BLE设备ty_prod,之后对其service进行修改,调用scan on进行寻找照旧老的,
末尾发掘要先用remove移除从前的设施,之后再scan就能够现出[NEW] Device 72:3B:E1:81:4E:4F ty_prod设备
注: 用lightblue模拟的器具的MAC不是定位的
注: 作者开采在lightblue中不管怎么模拟BLE设备,壹旦被连上寻找到的service都以IPone的

[bluetooth]# devices
Device 28:ED:6A:A0:26:B7 ty_prod
Device 58:71:33:00:00:24 Bluetooth Keyboard
Device 00:1A:7D:DA:71:0A SHEN-PC
Device 94:87:E0:B3:AC:6F Mi Phone
[bluetooth]# remove 28:ED:6A:A0:26:B7 
...
[bluetooth]# scan on
Discovery started
[NEW] Device 72:3B:E1:81:4E:4F ty_prod
[bluetooth]# scan off
...
Discovery stopped
[bluetooth]# connect 72:3B:E1:81:4E:4F
Attempting to connect to 72:3B:E1:81:4E:4F
[CHG] Device 72:3B:E1:81:4E:4F Connected: yes
Connection successful
[ty_prod]

大致就用三星手提式无线电话机自带的劳务做测试了~

[ty_prod]# info
Device 28:ED:6A:A0:26:B7 (public)
    Name: tuya_mdev_test
    Alias: tuya_mdev_test
    Appearance: 0x0040
    Icon: phone
    Paired: yes
    Trusted: no
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Fax                       (00001111-0000-1000-8000-00805f9b34fb)
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: Current Time Service      (00001805-0000-1000-8000-00805f9b34fb)
    UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
    UUID: Battery Service           (0000180f-0000-1000-8000-00805f9b34fb)
    UUID: Vendor specific           (7905f431-b5ce-4e99-a40f-4b1e122d00d0)
    UUID: Vendor specific           (89d3502b-0f36-433a-8ef4-c502ad55f8dc)
    UUID: Vendor specific           (9fa480e0-4967-4542-9390-d343dc5d04ae)
    UUID: Vendor specific           (d0611e78-bbb4-4591-a5f8-487910ae4366)
[CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
[CHG] Device 28:ED:6A:A0:26:B7 Connected: no

大家用Current Time Service,列出具备attributes操作如下:

[tuya_mdev_test]# menu gatt
[tuya_mdev_test]# list-attributes 28:ED:6A:A0:26:B7
...
Primary Service
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
    00001805-0000-1000-8000-00805f9b34fb
    Current Time Service
Characteristic
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0045
    00002a0f-0000-1000-8000-00805f9b34fb
    Local Time Information
Characteristic
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
    00002a2b-0000-1000-8000-00805f9b34fb
    Current Time
Descriptor
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042/desc0044
    00002902-0000-1000-8000-00805f9b34fb
    Client Characteristic Configuration
...

上面Current Time Service对应的服务如下图:

澳门新萄京官方网站 12

我们挑选Current Time举行操作UUID:0x二A2B

[ty_prod]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
[tuya_mdev_test:/service0041/char0042]# read
Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042 Value:
  e2 07 09 05 01 24 11 03 f1 02                    .....$....      
  e2 07 09 05 01 24 11 03 f1 02                    .....$.... 
[tuya_mdev_test:/service0041/char0042]# attribute-info
Characteristic - Current Time
    UUID: 00002a2b-0000-1000-8000-00805f9b34fb
    Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
    Value:
  e2 07 09 05 01 2e 01 03 f5 02                    ..........      
    Notifying: yes
    Flags: read
    Flags: notify

读出结果差不离意思应该是:2018-9/5-1:36:17 周三

读取一下0x180A的Device Information:

[tuya_mdev_test:/service0006/char0007]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
[tuya_mdev_test:/service0047/char004a]# attribute-info
Characteristic - Model Number String
    UUID: 00002a24-0000-1000-8000-00805f9b34fb
    Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047
    Flags: read
[tuya_mdev_test:/service0047/char004a]# read
Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a Value:
  69 50 68 6f 6e 65 36 2c 32                       iPhone6,2       
  69 50 68 6f 6e 65 36 2c 32                       iPhone6,2    

自然写、使能notify也非常的粗略,看help就能够。最后断开连接、并脱离!!!

[tuya_mdev_test:/service0047/char004a]# disconnect 28:ED:6A:A0:26:B7
Attempting to disconnect from 28:ED:6A:A0:26:B7
[CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
Successful disconnected
[CHG] Device 28:ED:6A:A0:26:B7 Connected: no
[bluetooth]# quit

澳门新萄京官方网站 13

Google VR for Android

关于多数其余的卓绝蓝牙( Bluetooth® )音讯。能够看Bluetooth( Bluetooth® )指南。有关许多别样的低功耗蓝牙( Bluetooth® )的音讯,能够看BLE指南。

BLE 权限


In order to use Bluetooth features in your application, you must declare the Bluetooth permission BLUETOOTH. You need this permission to perform any Bluetooth communication, such as requesting a connection, accepting a connection, and transferring data.
为了在您的接纳中使用蓝牙( Bluetooth® )特色,你必须求证明Bluetooth权限 BLUETOOTH 。你要此权限技能推行此外Bluetooth通讯,如:请求一个一连,接收一个一连,和传输数据。

If you want your app to initiate device discovery or manipulate Bluetooth settings, you must also declare the BLUETOOTH_ADMIN permission. Note: If you use the BLUETOOTH_ADMIN permission, then you must also have the BLUETOOTH permission.
如若你想要你的app运行设备发现或调控蓝牙5.0设置,你不可能不也要申明BLUETOOTH_ADMIN 权限。注意:借令你用了 BLUETOOTH_ADMIN 权限,则还非得有 BLUETOOTH 权限。

Declare the Bluetooth permission(s) in your application manifest file. For example:
宣称Bluetooth权限在你的使用manifest文件,举例:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

If you want to declare that your app is available to BLE-capable devices only, include the following in your app's manifest:
如若您想要评释你的app仅协助有BLE功效的装置,在您的app的manifest中填上如下内容:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
However, if you want to make your app available to devices that don't support BLE, you should still include this element in your app's manifest, but set required="false". Then at run-time you can determine BLE availability by using PackageManager.hasSystemFeature():
下一场,假诺你想要你的app能够被不支持BLE的器材获得,你照样须要包括那些因素在你的app的manifest文件中,可是,须要设置required为false。然后在你的代码运维时,你能够因此选拔确认PackageManager.hasSystemFeature()方法来认可BLE是不是可获取。

// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    finish();
}

Note: LE Beacons are often associated with location. In order to use BluetoothLeScanner without a filter, you must request the user's permission by declaring either the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission in your app's manifest file. Without these permissions, scans won't return any results.

小心:LE信标平时与地点相关联。
为了在向来可是滤器的景观下行使Bluetooth( Bluetooth® )LeScanner,您必须经过注明应用程序的清单文件中的ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来呼吁用户的权限。

LINKS

[1].Cannot connect to BLE device on Raspberry Pi
[2].Invalid file descriptor gatttool of bluez 5.32
[3].Get Started with Bluetooth Low Energy on Linux
[4].Reverse Engineering a Bluetooth Low Energy Light Bulb
[5].Doing Bluetooth Low Energy on Linux
[6].Tutorial: BLE Pairing the Raspberry Pi 3 Model B with Hexiwear

澳门新萄京官方网站 14

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

GVR SDK and NDK Release Notes

For more information about Classic Bluetooth, see the Bluetooth guide. For more information about Bluetooth Low Energy, see the Bluetooth Low Energy (BLE) guide.

Setting Up BLE

设置BLE
Before your application can communicate over BLE, you need to verify that BLE is supported on the device, and if so, ensure that it is enabled. Note that this check is only necessary if <uses-feature.../> is set to false.
在你选取能够透过BLE通讯在此之前,你须求表达那些装置是不是帮忙BLE,若是能够,确认BLE是使能的。要求留意的是唯有当<uses-feature.../>设置为false这些是检查须要的

If BLE is not supported, then you should gracefully disable any BLE features. If BLE is supported, but disabled, then you can request that the user enable Bluetooth without leaving your application. This setup is accomplished in two steps, using the BluetoothAdapter.
假使BLE不被协助,则你需求优雅的除能全体的BLE天性。假设BLE被帮忙,不过被除能了,则你须求请求用户使能蓝牙5.0而不偏离的利用。该装置使用蓝牙( Bluetooth® )Adapter在多个步骤中成就。

  1. Get the BluetoothAdapter
    获取BluetoothAdapter
    The BluetoothAdapter is required for any and all Bluetooth activity. The BluetoothAdapter represents the device's own Bluetooth adapter (the Bluetooth radio). There's one Bluetooth adapter for the entire system, and your application can interact with it using this object. The snippet below shows how to get the adapter. Note that this approach uses getSystemService() to return an instance of BluetoothManager, which is then used to get the adapter. Android 4.3 (API Level 18) introduces BluetoothManager:
    不无的蓝牙( Bluetooth® )Activity中都亟需蓝牙5.0适配器。蓝牙( Bluetooth® )适配器表示了那个装置自带的蓝牙5.0适配器(蓝牙伍.0有线电)。整个系统有3个蓝牙伍.0适配器,你的采取能够因此那个目的和它交互。上边包车型大巴代码片段展现了怎么拿到那个适配器。须要留意的是以此艺术应用getSystemService()去赢得蓝牙五.0Manager的四个实例,然后用于获取适配器。Android 肆.三(API Level 1八)介绍了BluetoothManager。

    private BluetoothAdapter mBluetoothAdapter;
    ...
    // Initializes Bluetooth adapter.
    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();
    
  2. Enable Bluetooth
    使能蓝牙( Bluetooth® )
    Next, you need to ensure that Bluetooth is enabled. Call isEnabled() to check whether Bluetooth is currently enabled. If this method returns false, then Bluetooth is disabled. The following snippet checks whether Bluetooth is enabled. If it isn't, the snippet displays an error prompting the user to go to Settings to enable Bluetooth:
    接下去,你必要承认蓝牙5.0是使能的。调用isEnable()去反省是不是蓝牙五.0脚下是还是不是使能。倘诺那几个办法再次来到false,则蓝牙5.0是除能的。接下来的代码片段检查是或不是蓝牙( Bluetooth® )是是能的。倘若未有使能,代码片段会显示一个用户去设置开启Bluetooth的荒唐提醒。

    // Ensures Bluetooth is available on the device and it is enabled. If not,
    // displays a dialog requesting user permission to enable Bluetooth.
    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    

Note: The REQUEST_ENABLE_BT constant passed to startActivityForResult(android.content.Intent, int) is a locally-defined integer (which must be greater than 0) that the system passes back to you in your onActivityResult(int, int, android.content.Intent) implementation as the requestCode parameter.

注意:传送给startActivityForResult()的常量REQUEST_ENABLE_BT是二个本土定义的整数(必须大于0),这一个平头系统会促成为requestCode参数,在您的onActivityResult()方法中,回传给你。

http://www.apkmirror.com/apk/google-inc

蓝牙( Bluetooth® ) APIs 能够使得应用具备上面成效:

Finding BLE Devices

寻找BLE设备

To find BLE devices, you use the startLeScan() method. This method takes a BluetoothAdapter.LeScanCallback as a parameter. You must implement this callback, because that is how scan results are returned. Because scanning is battery-intensive, you should observe the following guidelines:
要物色BLE设备,你能够运用startLeScan()方法。那一个措施包罗1个蓝牙( Bluetooth® )Adapter.LeScanCallback作为参数。你必须求落到实处这些回调,因为那是什么回到扫描结果的(因为扫描结果是通过这些重回的)。因为扫描是电池密集型的,你需求依照以下的准则:

  • As soon as you find the desired device, stop scanning.
    即使您一找到了想要的装置,就终止扫描
  • Never scan on a loop, and set a time limit on your scan. A device that was previously available may have moved out of range, and continuing to scan drains the battery.
    切勿在循环里扫描,且要设置2个扫描时限。 四个在此以前能够得到的装置或然已经移出了限定,持续围观消功耗池。

The following snippet shows how to start and stop a scan:
上面包车型客车代码片段浮现了何等初阶和甘休扫描:

/**
 * Activity for scanning and displaying available BLE devices.
 */
public class DeviceScanActivity extends ListActivity {

    private BluetoothAdapter mBluetoothAdapter;
    private boolean mScanning;
    private Handler mHandler;

    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 10000;
    ...
    private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
        ...
    }
...
}

If you want to scan for only specific types of peripherals, you can instead call startLeScan(UUID[], BluetoothAdapter.LeScanCallback), providing an array of UUID objects that specify the GATT services your app supports.
即便您想扫描特定类型的外设,你能够轮换调用startLeScan(UUID[], 蓝牙艾达pter.LeScanCallback),提供三个一定的你的app援救的GATT服务UUID设备数组。

Here is an implementation of the BluetoothAdapter.LeScanCallback, which is the interface used to deliver BLE scan results:
这里有一个蓝牙( Bluetooth® )Adapter.LeScanCallback的兑现,它是2个接口,用来传输BLE扫描结果:

private LeDeviceListAdapter mLeDeviceListAdapter;
...
// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               mLeDeviceListAdapter.addDevice(device);
               mLeDeviceListAdapter.notifyDataSetChanged();
           }
       });
   }
};

Note: You can only scan for Bluetooth LE devices or scan for Classic Bluetooth devices, as described in Bluetooth. You cannot scan for both Bluetooth LE and classic devices at the same time.

专注:你能够扫描低耗电蓝牙5.0设备或卓绝蓝牙( Bluetooth® )设备,如蓝牙5.0所述。你不能同时扫视低耗能蓝牙( Bluetooth® )设备和经文蓝牙五.0设备。

com.google.vr.vrcore

1.对此别的的蓝牙( Bluetooth® )设备的扫视(包括BLE设备)

Connecting to a GATT Server

连接GATT服务器

The first step in interacting with a BLE device is connecting to it— more specifically, connecting to the GATT server on the device. To connect to a GATT server on a BLE device, you use the connectGatt() method. This method takes three parameters: a Context object, autoConnect (boolean indicating whether to automatically connect to the BLE device as soon as it becomes available), and a reference to a BluetoothGattCallback:
与BLE设备的相互的首先步是连接受它-更实际的说,连接在那么些BLE设备上的GATT服务器。为了连接上在这一个BLE设备上的GATT服务器,你能够行使connectGatt()方法。那个措施有三个参数:一个上下文对象,是还是不是自动三番五次(1个布尔值,证明只要那些BLE设备是可以获得的,是还是不是自动的接连上它),一个指向BluetoothGattCallback的引用。

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

This connects to the GATT server hosted by the BLE device, and returns a BluetoothGatt instance, which you can then use to conduct GATT client operations. The caller (the Android app) is the GATT client. The BluetoothGattCallback is used to deliver results to the client, such as connection status, as well as any further GATT client operations.
那会连接受由BLE设备管理的GATT服务器,并回到2个蓝牙( Bluetooth® )Gatt实例,然后你能够应用它来开始展览GATT客户端操作。调用者(Android app)是GATT客户端。BluetoothGattCallback用来传送结果给客户端,举个例子连接意况,以及任何更进一步的GATT客户端操作。

In this example, the BLE app provides an activity (DeviceControlActivity) to connect, display data, and display GATT services and characteristics supported by the device. Based on user input, this activity communicates with a Service called BluetoothLeService, which interacts with the BLE device via the Android BLE API:
那几个事例中,这么些BLE应用提供3个运动(DeviceControlActivity)用于连接装置,展现由器具提供的多少,GATT服务和特色。基于用户输入,这几个活动与1个名叫Bluetooth( Bluetooth® )LeService的劳务通讯,该服务通过Android BLE API与BLE设备开始展览互相:

// A service that interacts with the BLE device via the Android BLE API.
public class BluetoothLeService extends Service {
    private final static String TAG = BluetoothLeService.class.getSimpleName();

    private BluetoothManager mBluetoothManager;
    private BluetoothAdapter mBluetoothAdapter;
    private String mBluetoothDeviceAddress;
    private BluetoothGatt mBluetoothGatt;
    private int mConnectionState = STATE_DISCONNECTED;

    private static final int STATE_DISCONNECTED = 0;
    private static final int STATE_CONNECTING = 1;
    private static final int STATE_CONNECTED = 2;

    public final static String ACTION_GATT_CONNECTED =
            "com.example.bluetooth.le.ACTION_GATT_CONNECTED";
    public final static String ACTION_GATT_DISCONNECTED =
            "com.example.bluetooth.le.ACTION_GATT_DISCONNECTED";
    public final static String ACTION_GATT_SERVICES_DISCOVERED =
            "com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED";
    public final static String ACTION_DATA_AVAILABLE =
            "com.example.bluetooth.le.ACTION_DATA_AVAILABLE";
    public final static String EXTRA_DATA =
            "com.example.bluetooth.le.EXTRA_DATA";

    public final static UUID UUID_HEART_RATE_MEASUREMENT =
            UUID.fromString(SampleGattAttributes.HEART_RATE_MEASUREMENT);

    // Various callback methods defined by the BLE API.
    private final BluetoothGattCallback mGattCallback =
            new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                intentAction = ACTION_GATT_CONNECTED;
                mConnectionState = STATE_CONNECTED;
                broadcastUpdate(intentAction);
                Log.i(TAG, "Connected to GATT server.");
                Log.i(TAG, "Attempting to start service discovery:"  
                        mBluetoothGatt.discoverServices());

            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                intentAction = ACTION_GATT_DISCONNECTED;
                mConnectionState = STATE_DISCONNECTED;
                Log.i(TAG, "Disconnected from GATT server.");
                broadcastUpdate(intentAction);
            }
        }

        @Override
        // New services discovered
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
            } else {
                Log.w(TAG, "onServicesDiscovered received: "   status);
            }
        }

        @Override
        // Result of a characteristic read operation
        public void onCharacteristicRead(BluetoothGatt gatt,
                BluetoothGattCharacteristic characteristic,
                int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
            }
        }
     ...
    };
...
}

When a particular callback is triggered, it calls the appropriate broadcastUpdate() helper method and passes it an action. Note that the data parsing in this section is performed in accordance with the Bluetooth Heart Rate Measurement profile specifications:
当特定的回调被触发时,它调用相应的broadcastUpdate()帮助方法并传递二个动作。请留意,本节中的数据解析是依赖蓝牙五.0心率测量配置文件标准实行的:

private void broadcastUpdate(final String action) {
    final Intent intent = new Intent(action);
    sendBroadcast(intent);
}

private void broadcastUpdate(final String action,
                             final BluetoothGattCharacteristic characteristic) {
    final Intent intent = new Intent(action);

    // This is special handling for the Heart Rate Measurement profile. Data
    // parsing is carried out as per profile specifications.
    if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
        int flag = characteristic.getProperties();
        int format = -1;
        if ((flag & 0x01) != 0) {
            format = BluetoothGattCharacteristic.FORMAT_UINT16;
            Log.d(TAG, "Heart rate format UINT16.");
        } else {
            format = BluetoothGattCharacteristic.FORMAT_UINT8;
            Log.d(TAG, "Heart rate format UINT8.");
        }
        final int heartRate = characteristic.getIntValue(format, 1);
        Log.d(TAG, String.format("Received heart rate: %d", heartRate));
        intent.putExtra(EXTRA_DATA, String.valueOf(heartRate));
    } else {
        // For all other profiles, writes the data formatted in HEX.
        final byte[] data = characteristic.getValue();
        if (data != null && data.length > 0) {
            final StringBuilder stringBuilder = new StringBuilder(data.length);
            for(byte byteChar : data)
                stringBuilder.append(String.format("X ", byteChar));
            intent.putExtra(EXTRA_DATA, new String(data)   "n"  
                    stringBuilder.toString());
        }
    }
    sendBroadcast(intent);
}

Back in DeviceControlActivity, these events are handled by a BroadcastReceiver:
回到DeviceControlActivity,这个事件都被1个布罗兹castReceiver接收管理:

// Handles various events fired by the Service.
// ACTION_GATT_CONNECTED: connected to a GATT server.
// ACTION_GATT_DISCONNECTED: disconnected from a GATT server.
// ACTION_GATT_SERVICES_DISCOVERED: discovered GATT services.
// ACTION_DATA_AVAILABLE: received data from the device. This can be a
// result of read or notification operations.
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
            mConnected = true;
            updateConnectionState(R.string.connected);
            invalidateOptionsMenu();
        } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {
            mConnected = false;
            updateConnectionState(R.string.disconnected);
            invalidateOptionsMenu();
            clearUI();
        } else if (BluetoothLeService.
                ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
            // Show all the supported services and characteristics on the
            // user interface.
            displayGattServices(mBluetoothLeService.getSupportedGattServices());
        } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
            displayData(intent.getStringExtra(BluetoothLeService.EXTRA_DATA));
        }
    }
};

com.google.android.vr.home

二.为配对的蓝牙( Bluetooth® )设备查询本地蓝牙伍.0适配器

Reading BLE Attributes

读取BLE属性

Once your Android app has connected to a GATT server and discovered services, it can read and write attributes, where supported. For example, this snippet iterates through the server's services and characteristics and displays them in the UI:
假定您的Android应用连接到GATT服务器并开采了服务,要是GATT服务器扶助,它就足以读取和写入属性了。比方:这一片段代码遍历了那几个服务器的服务和特色,,并将其出示在UI中:

public class DeviceControlActivity extends Activity {
    ...
    // Demonstrates how to iterate through the supported GATT
    // Services/Characteristics.
    // In this sample, we populate the data structure that is bound to the
    // ExpandableListView on the UI.
    private void displayGattServices(List<BluetoothGattService> gattServices) {
        if (gattServices == null) return;
        String uuid = null;
        String unknownServiceString = getResources().
                getString(R.string.unknown_service);
        String unknownCharaString = getResources().
                getString(R.string.unknown_characteristic);
        ArrayList<HashMap<String, String>> gattServiceData =
                new ArrayList<HashMap<String, String>>();
        ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData
                = new ArrayList<ArrayList<HashMap<String, String>>>();
        mGattCharacteristics =
                new ArrayList<ArrayList<BluetoothGattCharacteristic>>();

        // Loops through available GATT Services.
        for (BluetoothGattService gattService : gattServices) {
            HashMap<String, String> currentServiceData =
                    new HashMap<String, String>();
            uuid = gattService.getUuid().toString();
            currentServiceData.put(
                    LIST_NAME, SampleGattAttributes.
                            lookup(uuid, unknownServiceString));
            currentServiceData.put(LIST_UUID, uuid);
            gattServiceData.add(currentServiceData);

            ArrayList<HashMap<String, String>> gattCharacteristicGroupData =
                    new ArrayList<HashMap<String, String>>();
            List<BluetoothGattCharacteristic> gattCharacteristics =
                    gattService.getCharacteristics();
            ArrayList<BluetoothGattCharacteristic> charas =
                    new ArrayList<BluetoothGattCharacteristic>();
           // Loops through available Characteristics.
            for (BluetoothGattCharacteristic gattCharacteristic :
                    gattCharacteristics) {
                charas.add(gattCharacteristic);
                HashMap<String, String> currentCharaData =
                        new HashMap<String, String>();
                uuid = gattCharacteristic.getUuid().toString();
                currentCharaData.put(
                        LIST_NAME, SampleGattAttributes.lookup(uuid,
                                unknownCharaString));
                currentCharaData.put(LIST_UUID, uuid);
                gattCharacteristicGroupData.add(currentCharaData);
            }
            mGattCharacteristics.add(charas);
            gattCharacteristicData.add(gattCharacteristicGroupData);
         }
    ...
    }
...
}

Google Inc. Daydream (Daydream)

3.建立RFCOMM channels/sockets.

Receiving GATT Notifications

Google Inc. Google VR Services (Daydream)

四.一而再在其余设施上钦点的sockets

接收GATT通知

It's common for BLE apps to ask to be notified when a particular characteristic changes on the device. This snippet shows how to set a notification for a characteristic, using the setCharacteristicNotification() method:
当设备上二个一定的天性发生转移时,BLE应用去须要被通报很普遍。那段代码显示了如何通过行使setCharacteristicNotification()方法,去为1个特征设置八个公告:

private BluetoothGatt mBluetoothGatt;
BluetoothGattCharacteristic characteristic;
boolean enabled;
...
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
...
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
        UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);

Once notifications are enabled for a characteristic, an onCharacteristicChanged() callback is triggered if the characteristic changes on the remote device:
若是2个风味被使能布告,要是远程设备上的那一个性情爆发了改观,二个onCharacteristicChanged()回调被触发。

@Override
// Characteristic notification
public void onCharacteristicChanged(BluetoothGatt gatt,
        BluetoothGattCharacteristic characteristic) {
    broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}

What is Google Daydream

伍.与别的道具之间数据传输

Closing the Client App

Daydream Performance HUD

6.与BLE设备调换。比方类似传感器,心率监视器,健身设备,等等

闭馆客户端app

Once your app has finished using a BLE device, it should call close() so the system can release resources appropriately:
如果您的应用程序完毕使用BLE设备,它应该调用close(),以便系统能够准确释放能源:

public void close() {
    if (mBluetoothGatt == null) {
        return;
    }
    mBluetoothGatt.close();
    mBluetoothGatt = null;
}

后记:本文翻译自google开荒者网址。链接如下:
https://developer.android.google.cn/guide/topics/connectivity/bluetooth-le.html
接待转发,但请尊敬小编专业,留下本文后记
作者:Jaesoon
邮箱:jayyuz@163.com
日期:2017-09-17

Daydream Controller手柄数据的辨析

7.作为GATTclient或GATT服务端

How do I fix my Daydream controller

选用这么些APIs来终结蓝牙( Bluetooth® )之间的调换,叁个应用程序必须注明BLUETOOTH权力。对于一些外加的机能。如请求设备发掘,也必须BLUETOOTH_ADMIN权限。

Google Daydream Controller Teardown

提醒:不是成套的Android设备都提供了蓝牙( Bluetooth® )效能。

Daydream controller : Comprehensive guide

The Bluetooth APIs let applications:

Use the Daydream View controller and headset

  • Scan for other Bluetooth devices (including BLE devices).
  • Query the local Bluetooth adapter for paired Bluetooth devices.
  • Establish RFCOMM channels/sockets.
  • Connect to specified sockets on other devices.
  • Transfer data to and from other devices.
  • Communicate with BLE devices, such as proximity sensors, heart rate monitors, fitness devices, and so on.
  • Act as a GATT client or a GATT server (BLE).

谷歌(谷歌)Daydream V奥德赛平台应用必要:怎么样准备V卡宴应用

To perform Bluetooth communication using these APIs, an application must declare the BLUETOOTH permission. Some additional functionality, such as requesting device discovery, also requires the BLUETOOTH_ADMIN permission.

 

Note: Not all Android-powered devices provide Bluetooth functionality.

Algorithm

接口:

BluetoothAdapter.LeScanCallback :用来提供LE扫描结果的回调接口

BluetoothProfile:Bluetooth Profiles的公共APIs

BluetoothProfile.ServiceListener:蓝牙伍.0Profile IPC client与service的接连和断开时的2个布告接口

-

Conversion Quaternion to Euler

Interfaces


BluetoothAdapter.LeScanCallback Callback interface used to deliver LE scan results. 
BluetoothProfile Public APIs for the Bluetooth Profiles. 
BluetoothProfile.ServiceListener An interface for notifying BluetoothProfile IPC clients when they have been connected or disconnected to the service. 

Conversion Euler to Quaternion

类:

BluetoothA2dp:这几个类提供调整BluetoothA2DP profile的公共APIs

BluetoothAdapter:代表本地设备的蓝牙( Bluetooth® )adapter.
BluetoothAssignedNumbers:蓝牙( Bluetooth® )分配号码

BluetoothClass:代表二个Bluetooth类。它形容叙述了设备的相似特征(characteristics)和力量(capabilities)

BluetoothClass.Device:定义全体设施类的常量

BluetoothClass.Device.Major:定义全部重要器具类的常量

BluetoothClass.Service:定义全体服务类的常量

BluetoothDevice:代表一个远道蓝牙5.0设备

=============================================================================================

BluetoothGatt:蓝牙GATT Profile的公共APIs

BluetoothGattCallback:那些抽象类用于落实蓝牙( Bluetooth® )Gatt回调

BluetoothGattCharacteristic:代表3个蓝牙( Bluetooth® )GATT Characteristic.

                                              3个GATT Characteristic是用来组织贰个GATT service,BluetoothGattService的主干数据成分

BluetoothGattDescriptor:代表叁个蓝牙5.0GATT Descriptor.

                                           GATT Descriptor包涵1个GATT characteristic,BluetoothGattCharacteristic的附加音讯和属性.

Classes


BluetoothA2dp This class provides the public APIs to control the Bluetooth A2DP profile. 
BluetoothAdapter Represents the local device Bluetooth adapter. 
BluetoothAssignedNumbers Bluetooth Assigned Numbers. 
BluetoothClass Represents a Bluetooth class, which describes general characteristics and capabilities of a device. 
BluetoothClass.Device Defines all device class constants. 
BluetoothClass.Device.Major Defines all major device class constants. 
BluetoothClass.Service Defines all service class constants. 
BluetoothDevice Represents a remote Bluetooth device. 
BluetoothGatt Public API for the Bluetooth GATT Profile. 
BluetoothGattCallback This abstract class is used to implement BluetoothGatt callbacks. 
BluetoothGattCharacteristic Represents a Bluetooth GATT Characteristic

A GATT characteristic is a basic data element used to construct a GATT service,BluetoothGattService

BluetoothGattDescriptor Represents a Bluetooth GATT Descriptor

GATT Descriptors contain additional information and attributes of a GATT characteristic,BluetoothGattCharacteristic

BluetoothGattServer Public API for the Bluetooth GATT Profile server role. 
BluetoothGattServerCallback This abstract class is used to implement BluetoothGattServer callbacks. 
BluetoothGattService Represents a Bluetooth GATT Service

Gatt Service contains a collection of BluetoothGattCharacteristic, as well as referenced services. 

BluetoothHeadset Public API for controlling the Bluetooth Headset Service. 
BluetoothHealth Public API for Bluetooth Health Profile. 
BluetoothHealthAppConfiguration The Bluetooth Health Application Configuration that is used in conjunction with the BluetoothHealthclass. 
BluetoothHealthCallback This abstract class is used to implement BluetoothHealth callbacks. 
BluetoothManager High level manager used to obtain an instance of an BluetoothAdapter and to conduct overall Bluetooth Management. 
BluetoothServerSocket A listening Bluetooth socket. 
BluetoothSocket A connected or connecting Bluetooth socket. 

BluetoothGattServer:BluetoothGATT Profileserver剧中人物的公共APIs.

BluetoothGattServerCallback:那些抽象类用于落到实处BluetoothGattServer回调.

BluetoothGattService:代表1个蓝牙( Bluetooth® )GATT Service.

================================================================================

BluetoothHeadset:调控蓝牙伍.0动铁耳机(Headset)服务的公共API.

BluetoothHealth:蓝牙Health Profile的公共API.

BluetoothHealthAppConfiguration:The Bluetooth Health Application Configuration(配置)用来与BluetoothHealth类结合.

BluetoothHealthCallback:用于落到实处BluetoothHealth回调的抽象类

BluetoothManager:用来取得BluetoothAdapter的实例的公司主,进行完善的蓝牙处理

BluetoothServerSocket:二个监听Bluetooth的socket

BluetoothSocket:三个已连接或正在连接的蓝牙5.0socket.

 

ATW

Timewarp

Asynchronous timewarp

How Does Time Warping Work

Difference_between_ATW_ASW_and_Reprojection 

 

Bluetooth

Bluetooth Core Specification

HID-over-GATT

NordicSemiconductor

Dialog-semiconductor

SmartBond™ DA14681

Android Bluetooth Low Energy

Nordic SDK and Documentation

Calculate throughput for a BLE link

Introduction to Bluetooth Low Energy

Android Lollipop: Bluetooth LE Matures

Bluetooth Low Energy vs. Classic Bluetooth

Getting Started with Bluetooth Low Energy

Maximizing BLE Throughput on iOS and Android

How different BLE packet types influence throughput

Analysis of Latency Performance of Bluetooth Low Energy (BLE) Networks

FTS4BT™ Bluetooth® Protocol Analyzer and Packet Sniffer

CPAS-11(Frontline_16.10.12321.12610)

 

Latency

Front Buffer Rendering

Reducing latency in mobile VR by using single buffered strip rendering

The importance of fine-grained GPU preemption support for VR

 

Tools

dotPeek

 

Touch

IQS525-B000

 

Unity

Unity Editor and Android Runtime for Daydream

Unity Download

GVR-Unity-SDK

Unity3d Quaternion

Unity优化才具

四元数(Quaternion)和旋转

 

Qualcomm

依附骁龙 V普拉多 SDK的V安德拉图形优化

 

EGL

EGL10

Tracer for OpenGL ES

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:澳门新萄京官方网站:使能notifyBluetooth低功耗设

关键词: