JSR 82 (bluetooth obex)
Upcoming SlideShare
Loading in...5

JSR 82 (bluetooth obex)



JSR 82 (bluetooth obex)

JSR 82 (bluetooth obex)



Total Views
Slideshare-icon Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    JSR 82 (bluetooth obex) JSR 82 (bluetooth obex) Presentation Transcript

      • JSR 82
    • 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.
    • 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”)
      • or
      • String 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
    • 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.
    • 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.
    • 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.
    • 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)
    • 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)
    • Bluetooth/OBEX API- Packages Packages Name Description javax.bluetooth.*; Core Bluetooth API, such as Discovery, L2CAP, and device and data interfaces and classes. javax.obex.*; Core Object Exchange (OBEX) APIs. Support is optional.
    • JSR 82-enable MIDlet
      • All interfaces and classes available to a JSR-82-enabled MIDlet are shown below:
    • Bluetooth API & GCF
    • Using Bluetooth API
    • Bluetooth Client & Server
    • 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); } ...
    • 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
      • }
      • }
    • 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
      • }
      • }
    • 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(); } } }
    • 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){
      • }
      • }
      • }
      • Thank You