Android Bluetooth Introduction
-
Upload
erin-yueh -
Category
Technology
-
view
106.778 -
download
5
description
Transcript of Android Bluetooth Introduction
Android Bluetooth Introduction
Erin Yueh2009/06/26
Agenda
● Android Bluetooth architecture● Related source code● Init Bluetooth ● Connect with other BT devices (dbus)● RFCOMM● OBEX (socket)
Android architecture
The diagram above offers a library-oriented view of the Bluetooth stack.
Related source code
● Bluez 3.36 (user space and kernel) /mydroid/externel/bluez
/mydroid/kernel/drivers/bluetooth
/mydroid/kernel/net/bluetooth
● Android app framework (java & c++) /mydroid/frameworks/base/core/jni/android_bluetooth_*.cpp
/mydroid/frameworks/base/core/java/android/bluetooth/*.java
/mydroid/frameworks/base/services/java/com/android/server/ (SystemServer)
● Android UI application /mydroid/packages/apps/Phone/src/com/android/phone/ (Phone App)
/mydroid/packages/apps/Settings/src/com/android/settings/bluetooth/ (Settings App)
Init Bluetooth ● /root/init.rc
mkdir /data/misc/hcid (store device info)
service dbus /system/bin/dbusdaemon
service hcid /system/bin/hcid (disabled)
service hfag /system/bin/sdptool add channel=10 HFAG (handsfree, disabled, one shot)
service hsag /system/bin/sdptool add channel=11 HSAG (headset, disabled, one shot)
● /root/init.trout.rc
service hciattach (disabled)
● system server
decice BT power On or Off from settings value
start related services
ddms: dalvik debug monitor I.
ddms: dalvik debug monitor II.
Bluetooth headset
Music player + Dialer
Connect with other BT devices
●Bluez: hcid daemon
●dbus-daemon: connections between hcid and system server
●D-Bus is a simple inter-process communication (IPC) system for software applications to communicate with one another.
●dbus-daemon is the D-Bus message bus daemon. D-Bus is first a library that provides one-to-one communication between any two applications; dbus-daemon is an application that uses this library to implement a message bus daemon. Multiple programs connect to the message bus daemon and can exchange messages with one another.
●debug utility: d-feet, dbus-monitor, dbus-send
BlueZ DBus Architecture
DFeet: DBus viewer and debugger
Dbussend: send a message to a message bus
Scan nearby BT devices in Android
● Bluez utility: hcitool scan
● DiscoverDevices: bluez/util/hcid/dbusapi.txt
This method starts the device discovery procedure. This includes an inquiry procedure and remote device name resolving. On start up this process will generate a DiscoveryStarted signal and then return DeviceFound singals. If the procedure has been finished an DiscoveryCompleted signal will be sent.
● Source code: android_server_BluetoothDeviceService.cpp
/* Compose the command */
msg = dbus_message_new_method_call(BLUEZ_DBUS_BASE_IFC, nat>adapter, DBUS_CLASS_NAME, "DiscoverDevices");
/* Send the command. */
reply = dbus_connection_send_with_reply_and_block(nat>conn, msg, 1, &err);
Signals
How to pair with a BT device? I. Register Passkey Agent
II. Request PIN code
RFCOMM (Radio Frequency Communication)
●The Bluetooth protocol RFCOMM is a simple set of transport protocols.
●RFCOMM is sometimes called Serial Port Emulation.
●The Bluetooth Serial Port Profile is based on this protocol.
●In the protocol stack, RFCOMM is bound to L2CAP
●RFCOMM provides a simple reliable data stream to the user, similar to TCP. It is used directly by many telephony related profiles as a carrier for AT commands
Send AT commands via bluetooth
● Connect with Nokia N73 phone● > sdptool browse 00:18:C5:42:18:78● > sudo rfcomm connect 0 00:18:C5:42:18:78 2● minicom● > AT● > AT+CGMR● > AT+CGMI
OBEX (Object EXchange)
● a communications protocol that facilitates the exchange of binary objects between devices.
● in the protocol stack, OBEX is bound to RFCOMM
SOCKET
● UNIX socket (AF_BLUETOOTH)
● interprocess communication
● like Internet socket● clientserver
recv() send()
Receive files via BT in Android
● openobex + obexpushd ● Run an OBEX data server in Android● > obexpushd● listen RFCOMM connections● File permission
Send files via BT in Android
● Openobex + obexftp● Connect to a RFCOMM connection● > obex_test b BTADDR CHANNEL● > obexftp b BTADDR B CHANNEL list
Thank You!