The document provides an overview of Bluetooth architecture and implementation in Android. It discusses the Bluetooth stack including BlueZ, related source code, initializing Bluetooth, connecting to other devices via D-Bus, using RFCOMM for serial communication, and exchanging objects with OBEX. Methods for pairing with devices, sending/receiving files, and using utilities like hcitool, rfcomm, and obexpushd are also summarized.
7. 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
11. 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
15. 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);
19. 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
20. 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
21. OBEX (Object EXchange)
● a communications
protocol that
facilitates the
exchange of binary
objects between
devices.
● in the protocol stack,
OBEX is bound to
RFCOMM
22. SOCKET
● UNIX socket
(AF_BLUETOOTH)
● interprocess
communication
● like Internet socket
recv() send()
● clientserver
23. Receive files via BT in Android
● openobex + obexpushd
● Run an OBEX data server in Android
● > obexpushd
● listen RFCOMM connections
● File permission
24. Send files via BT in Android
● Openobex + obexftp
● Connect to a RFCOMM connection
● > obex_test b BTADDR CHANNEL
● > obexftp b BTADDR B CHANNEL list