Android Bluetooth Introduction

25
 Android Bluetooth Introduction Erin Yueh 2009/06/26

description

* Android Bluetooth architecture * Related source code * Init Bluetooth * Connect with other BT devices (dbus) * RFCOMM * OBEX (socket)

Transcript of Android Bluetooth Introduction

Page 1: Android Bluetooth Introduction

   

Android Bluetooth Introduction

Erin Yueh2009/06/26

Page 2: Android Bluetooth Introduction

   

Agenda

● Android Bluetooth architecture● Related source code● Init Bluetooth ● Connect with other BT devices (dbus)● RFCOMM● OBEX (socket)

Page 3: Android Bluetooth Introduction

   

Android architecture

Page 4: Android Bluetooth Introduction

   

The diagram above offers a library-oriented view of the Bluetooth stack.

Page 5: Android Bluetooth Introduction

   

Page 6: Android Bluetooth Introduction

   

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)

Page 7: Android Bluetooth Introduction

   

Init Bluetooth ● /root/init.rc 

mkdir /data/misc/hcid (store device info)

service dbus /system/bin/dbus­daemon

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

Page 8: Android Bluetooth Introduction

   

ddms: dalvik debug monitor I.

Page 9: Android Bluetooth Introduction

   

ddms: dalvik debug monitor II.

Page 10: Android Bluetooth Introduction

   

Bluetooth headset

Music player + Dialer 

Page 11: Android Bluetooth Introduction

   

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

Page 12: Android Bluetooth Introduction

   

BlueZ D­Bus Architecture 

Page 13: Android Bluetooth Introduction

   

D­Feet: D­Bus viewer and debugger

Page 14: Android Bluetooth Introduction

   

Dbus­send: send a message to a message bus

Page 15: Android Bluetooth Introduction

   

Scan nearby BT devices in Android

● Bluez utility: hcitool scan

● DiscoverDevices: bluez/util/hcid/dbus­api.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);

Page 16: Android Bluetooth Introduction

   

Signals

Page 17: Android Bluetooth Introduction

   

How to pair with a BT device? I. Register Passkey Agent

Page 18: Android Bluetooth Introduction

   

II. Request PIN code

Page 19: Android Bluetooth Introduction

   

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

Page 20: Android Bluetooth Introduction

   

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

Page 21: Android Bluetooth Introduction

   

OBEX (Object EXchange)

● a communications protocol that facilitates the exchange of binary objects between devices.

● in the protocol stack, OBEX is bound to RFCOMM

Page 22: Android Bluetooth Introduction

   

SOCKET 

● UNIX socket (AF_BLUETOOTH)

● inter­process communication 

● like Internet socket● client­server

recv() send()

Page 23: Android Bluetooth Introduction

   

Receive files via BT in Android

● openobex + obexpushd  ● Run an OBEX data server in Android● > obexpushd● listen RFCOMM connections● File permission

Page 24: Android Bluetooth Introduction

   

Send files via BT in Android

● Openobex + obexftp● Connect to a RFCOMM connection● > obex_test ­b BTADDR CHANNEL● > obexftp ­b BTADDR ­B CHANNEL ­­list

Page 25: Android Bluetooth Introduction

   

Thank You!