jsr 82 (bluetooth obex)

19
JSR 82

Upload: smijava

Post on 24-Apr-2015

2.832 views

Category:

Documents


0 download

DESCRIPTION

JSR 82 (bluetooth obex)

TRANSCRIPT

Page 1: JSR 82 (bluetooth obex)

JSR 82

Page 2: JSR 82 (bluetooth obex)

Introduction

JSR 82 is an optional package

The current available version is 1.1

JSR 82 provides two optional API’s

Bluetooth API Object Exchange (OBEX) API

The Bluetooth is a low-cost, short-range radio technology intended to

replace data cables connecting electronic devices.

Bluetooth technology consists radio technology, the software stack,

and profiles.

Page 3: JSR 82 (bluetooth obex)

Check Bluetooth API

To determine if the optional API is available and which version is installed you have to call:

String currentVersion = System.getProperty(“bluetooth.api.version”)

orString currentVersion = javax.bluetooth.LocalDevice.getProperty("bluetooth.api.version");

If the API is available a string with the version will be returned

If the API is not available a null value is returned

Currently only version “1.1” has been defined

Page 4: JSR 82 (bluetooth obex)

Bluetooth Stack

Host Controller Interface (HCI) – this is the lowest layer of the Bluetooth Host stack. It interfaces directly with the host controller hardware.

Logical Link Control and Adaptation Layer (L2CAP) – this layer handles packet segmentation and reassembly (SAR), protocol multiplexing, and provides quality of service information.

Service Discovery Protocols (SDP) – as the name implies, applications use this layer to discover Bluetooth services that are available.

RFCOMM – this layer provides serial behavior over Bluetooth, similar to using a standard serial (COM) port.

Object Exchange Protocol – originally defined by the Infrared Data Association (IrDA), this protocol enables the exchange of objects such as vCard and vCalendar synchronization data.

Page 5: JSR 82 (bluetooth obex)

Bluetooth Profiles

To ensure interoperability and consistency between devices,

Bluetooth profiles define vendor-neutral device capabilities.

A profile describes specific functions and features that use

Bluetooth as its transport mechanism

Profiles supply information that makes certain that Bluetooth

devices that claim these capabilities can exchange data with

devices.

The Bluetooth Standard profile are given below:

• Generic Access Profile (GAP) – defines the use of the low-layers of the

Bluetooth protocol stack, including device management functionality. All

Bluetooth implementations implement the GAP.

Page 6: JSR 82 (bluetooth obex)

Bluetooth Profiles

Service Discover Application Profile (SDAP) – describes a specific application and usage of SDP,

the availability and user interface aspects of service discovery, and the use of the L2CAP and low-layer for

service discovery.

Serial Port Profile (SPP) – defines the RFCOMM, L2CAP, SDP, and low-layer layer interoperability

requirements and capabilities, for serial cable emulation.

Dial-up Networking Profile (DUNP) – defines the interoperability requirements for GAP and SPP, and

dialing and control capabilities that allows a device to serve as a dial-up device.

Generic Object Exchange Profile (GOEP) – defines the OBEX, SPP, and GAP interoperability

requirements, and OBEX capabilities for file transfers, object push, and synchronization.

Object Push Profile (OPP) – defines the user interface requirements, use of OBEX and SDP, and the

object push feature to push vCard, vCalendar, vNote, and vMessage content formats.

File Transfer Profile (FTP) – defines the user interface requirements, and the interoperability and use of

GOEP, OBEX, and SDP.

Synchronization Profile (SP) – defines the user interface requirements, and the interoperability and use

of GOEP, OBEX and SDP, as well as IrMC synchronization requirements.

Page 7: JSR 82 (bluetooth obex)

Bluetooth Devices and Network

Bluetooth devices use a unique IEEE 802 48-bit address. When two or more Bluetooth devices connect, they form Piconet

Bluetooth supports one data channel and a maximum of three voice channels.

Data exchanged at a rate of approximately 720 kilobits per second & range for device 10 meters(theoretical range 100)

Page 8: JSR 82 (bluetooth obex)

Bluetooth API- Organization

Bluetooth API and Java ME platform

At the bottom of the stack are hardware,OS,Bluetooth Stack,

followed by configuration, profile, and optional package(in this

case JSR 82)

Page 9: JSR 82 (bluetooth obex)

Bluetooth/OBEX API- Packages

Packages Name Description

javax.bluetooth.*; Core Bluetooth API, such as Discovery, L2CAP, and device and data interfaces andclasses.

javax.obex.*; Core Object Exchange (OBEX) APIs. Support is optional.

Page 10: JSR 82 (bluetooth obex)

JSR 82-enable MIDlet

All interfaces and classes available to a JSR-82-enabled MIDlet

are shown below:

Page 11: JSR 82 (bluetooth obex)

Bluetooth API & GCF

Page 12: JSR 82 (bluetooth obex)

Using Bluetooth API

Page 13: JSR 82 (bluetooth obex)

Bluetooth Client & Server

Page 14: JSR 82 (bluetooth obex)

Initializing the Bluetooth Application(Client)

...

private LocalDevice localDevice; // local Bluetooth Manager

private DiscoveryAgent discoveryAgent; // discovery agent

...

/** * Initialize */

public void btInit() throws BluetoothStateException {

localDevice = null;

discoveryAgent = null;

// Retrieve the local device to get to the Bluetooth Manager

localDevice = LocalDevice.getLocalDevice();

// Retrieve the discoveryAgent to start inquiry

discoveryAgent = localDevice.getDiscoveryAgent();

// Servers set the discoverable mode to GIAC

discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);

}

...

Page 15: JSR 82 (bluetooth obex)

Discover Bluetooth Enable Device(Client)

public class MyBT implements DiscoveryListener {

public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {

//Retrieve bt enable devices

}

public void inquiryCompleted(int inquiryID) {

//Get inquiry completed notification

}

public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {

//Retrieve the found devices services

}

public void serviceSearchCompleted(int transID, int respCode) {

//Get services search completed notification

}

}

Page 16: JSR 82 (bluetooth obex)

Get BT Services(Client)

public class MyBT implements DiscoveryListener{

private final UUID[] uuidset = {new UUID(0x1105)};

private void getServices(int index){

RemoteDevice remoteDevice = (RemoteDevice) btRemoteDevice.elementAt(index);

discoveryAgent.searchServices(null, uuidset, remoteDevice, this);

}

public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {

//Bt URL found

}

public void serviceSearchCompleted(int transID, int respCode){

//open connection

}

}

Page 17: JSR 82 (bluetooth obex)

Example(Client)

public class MyBT implements DiscoveryListener , Runnable{

private final UUID[] uuidset = {new UUID(0x1105)};

//bt url found

private String btURL = “btgoep://002109D7F9D:9; authenticate=false;encrypt=false;master=false”;

public void run() {

InputStream inputStream = null;

byte[] data=null;

StringBuffer str = new StringBuffer();

try {

int i = 0;

inputStream = getClass().getResourceAsStream("/icon.png");

while ((i = inputStream.read()) != -1) {

str.append((char) i);

}

data = str.toString().getBytes();

//throw exception here

Connection conn = Connector.open(btURL);

ClientSession clientSession = (ClientSession)conn;

HeaderSet header = clientSession.createHeaderSet();

header.setHeader(HeaderSet.NAME,"test.png");

header.setHeader(HeaderSet.TYPE,"image/png");

header.setHeader(HeaderSet.LENGTH,new

Long(data.length));

HeaderSet headerset = clientSession.connect(header);

Operation operation = clientSession.put(header);

OutputStream outStream =

operation.openDataOutputStream();

outStream.write(data);

outStream.close();

operation.close();

clientSession.disconnect(null);

conn.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

Page 18: JSR 82 (bluetooth obex)

Bluetooth(Server)

public class MyBTServer implements DiscoveryListener , Runnable{

private String btURL = “btgoep://002109D7F9D:9; authenticate=false;encrypt=false;master=false”;

public void run() {

try{

String ServiceURL ="btgoep://002109D7F9D:9;authenticate=false;encrypt=false;master=false";

// create a server connection

StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open(ServiceURL);

// accept client connections

StreamConnection connection = notifier.acceptAndOpen();

// prepare to send/receive data

String msg = "hello there, client";

OutputStream os = connection.openOutputStream();

// send data to the client

os.write(msg.getBytes());

//close connection

connection.close();

}catch(Exception ex){

}

}

}

Page 19: JSR 82 (bluetooth obex)

Thank You