今天看一下Brillo系统中的bluetooth模块。
- Brillo系统Bluetooth框架
由于Brillo系统复用了Android系统相当一部代码,与Bluetooth相关的代码也基本上复用了。在brillo-m10-dev分支中,Bluetooth协议栈的代码存放在system/bt目录下,而bluetoothtbd系统服务相关的代码也是在这个目录中,具体位于system/bt/service目录下,同时在这个目录下,会生成下面这几个模块:
1. bluetoothtbd
2. bluetooth-cli
3. bt-example-hr-server – Heart Rate GATT service example
Android系统bluetooth框架:
图片来自:https://source.android.com/devices/bluetooth.html
由于Brillo系统只有native的代码,所以在图中其实只包含Bluetooth Stack与Vendor Extensions这两个部份。另外还包含bluetoothtbd模块,用于配置bluetooth模块,建立GATT service或者GATT client。
- Bluetooth相关的一些命令
1. 相关的帮助信息:
$ adb shell # bluetooth-cli Fluoride Command-Line Interface Type "help" to see possible commands. [FCLI] help help Display this message disable Disable Bluetooth enable Enable Bluetooth get-state Get the current adapter state is-enabled Return if Bluetooth is enabled get-local-address Get the local adapter address set-local-name Set the local adapter name get-local-name Get the local adapter name adapter-info Print adapter properties supports-multi-adv Whether multi-advertisement is currently supported register-ble Register with the Bluetooth Low Energy interface unregister-ble Unregister from the Bluetooth Low Energy interface unregister-all-ble Unregister all clients from the Bluetooth Low Energy interface register-gatt Register with the Bluetooth GATT Client interface unregister-gatt Unregister from the Bluetooth GATT Client interface connect-le Connect to LE device (-h for options) disconnect-le Disconnect LE device (-h for options) set-mtu Set MTU (-h for options) start-adv Start advertising (-h for options) stop-adv Stop advertising start-le-scan Start LE device scan (-h for options) stop-le-scan Stop LE device scan
2. 查看Bluetooth adapter的相关信息:
[FCLI] adapter-info
Adapter Properties:
Address: 00:00:00:00:A5:AD
State: ADAPTER_STATE_ON
Name: QCOM-BTD
Multi-Adv. supported: true
可以看到设设备是支持Multi-Adv的。
3. 作为一个Bluetooth – Central
通过bluetooth-cli提供的start-le-scan, stop-le-scan, connect-le, disconnect-le去扫描、关连相关的ble外设:
[FCLI] start-le-scan Command status: success [FCLI] stop-le-scan Command status: success [FCLI] start-le-scan -d Command status: success Scan result: [FC:CD:6E:4B:8D:24] - RSSI: -57 - Record: 0201060A0947616C61787920413903030D18[FCLI] [FCLI] connect-le FC:CD:6E:4B:8D:24 Command status: success Connection state: [FC:CD:6E:4B:8D:24 connected: true ] - status: 0 - client_id: 5[FCLI]
4. 能否作为一个Bluetooth Perheral呢:
[FCLI] register-ble Command status: success Registered BLE client with ID: 4[FCLI] [FCLI] start-adv -n -t -c Command status: success Advertising start status: success
如果你的手机支持BLE,可以在蓝牙列表中找到一个名为QCOM_BTD的一个设备。
- 运行sample app – bt-example-hr-server
在system/bt/service/下面有一个bt-example-hr-server的sample app,可以通过它来学习如何开发一个简单的BLE server app。先编译出来push到DragonBoard 410c中看看效果:
$ mmm system/bt/service $ adb remount $ adb sync system $ adb shell bt-example-hr-server [0321/155621:INFO:server_main.cpp(92)] Starting GATT Heart Rate Service sample [0321/155621:INFO:heart_rate_server.cpp(228)] Heart Rate server registered - server_if: 4 [0321/155621:INFO:heart_rate_server.cpp(229)] Populating attributes [0321/155621:INFO:heart_rate_server.cpp(302)] Initiated EndServiceDeclaration request [0321/155621:INFO:heart_rate_server.cpp(325)] Heart Rate service added [0321/155621:INFO:server_main.cpp(128)] Heart Rate service started successfully
做完这些之后,你还需要通过bluetooth-cli开启ble adv(start-adv),不然手机没办法扫描到这个ble外设。
手机相关的app可以使用development/samples/browseable/BluetoothLeGatt @ android-5.1.1_r15中的代码。通过这个App,你可以连接ble设备,查看设备所提供的服务(Heart Rate Service):
- 相关的参考文档:
- https://source.android.com/devices/bluetooth.html
how to transfer file from android mobile to brillo device?
how to transfer file from android mobile to brillo device using bluetooth?
Transfer file using bluetooth need Object Push Profile(OPP), currently it seems only support ble Generic Attribute Profile (GATT) which does not support transfer file directly. You may implement your own file transfer protocol。
Then how we can test bluetooth functinality of brillo?
please can you share me any document about this if availble.
There is an example in the “system/bt/service/example/heart_rate” which will make the bluetooth device acts as a peripheral role(https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothOverview/CoreBluetoothOverview.html#//apple_ref/doc/uid/TP40013257-CH2-SW1). Then you can use the bluetooth-cli command to enable the bluetooth adapter & do advise (adb shell bluetooth-cli),
[FCLI] enable
[FCLI] register-ble
[FCLI] start-adv -n -t -c
As you can see, this will make the brillo device act as a heart rate monitor device, you can use the standard heart rate monitor app to establish connection.
can you tell me, how to provide internet connection to brillo?
Since google did not public announce release Brillo system, and I am not sure the Brillo Device Manager is available now on the google Play. The Brillo Device Manager may able to setup the device./privet/v3/setup.
You can also follow this instructions from https://android.googlesource.com/platform/external/libweave/+/brillo-m10-dev/examples/daemon/README.md to get gcd then setup the brillo device by access http://
Have you tried run bluetooth-cli on Android devices platform adb command?
seems that the native app bluetooth-cli not works on LA devices.
LA是什么设备啊
1