Java APIs for Bluetooth Wireless Technology:
While Bluetooth hardware has advanced, there has been no standardized way to
develop Bluetooth applications - until JSR 82 came into play. It is the first
open, non-proprietary standard for developing Bluetooth applications using the
Java programming language. It hides the complexity of the Bluetooth protocol
stack behind a set of Java APIs that allow you to focus on application
development rather than the low-level details of Bluetooth. JSR 82 is based on
version 1.1 of the Bluetooth Specification.
Like all JSRs, the Java APIs for Bluetooth are being developed through the Java
Community Process. Its expert group has members representing 20 companies. The
final specification is available for download.
JSR 82 consists of two optional packages: the core Bluetooth API and the Object
Exchange (OBEX) API. The latter is transport-independent and can be used without
the former.
Note: The Java APIs for Bluetooth do not implement the Bluetooth
specification, but rather provide a set of APIs to access and control a
Bluetooth-enabled device. JSR 82 concerns itself primarily with providing
Bluetooth capabilities to J2ME-enabled devices. .
The Java APIs for Bluetooth target devices with the following
characteristics:
512K minimum of total memory available (ROM and RAM) (application memory
requirements are additional)
Bluetooth wireless network connection
Compliant implementation of the J2ME Connected Limited Device Configuration (CLDC)
Bluetooth System Requirements
The underlying Bluetooth system upon which the Java APIs will be built must also
meet certain requirements:
The underlying system must be "qualified," in accordance with the Bluetooth
Qualification Program, for at least the Generic Access Profile, Service
Discovery Application Profile, and Serial Port Profile.
The system must support three communication layers or protocols as defined in
the 1.1 Bluetooth Specification, and the implementation of this API must have
access to them: Service Discovery Protocol (SDP), Radio Frequency Communications
Protocol (RFCOMM), and Logical Link Control and Adaptation Protocol (L2CAP).
The system must provide a Bluetooth Control Center (BCC), a control panel much
like the application that allows a user or OEM to define specific values for
certain configuration parameters in a stack.
OBEX support can be provided in the underlying Bluetooth system or by the
implementation of the API. The OBEX protocol provides support for object
exchanges, and forms the basis for Bluetooth profiles such as the
Synchronization Profile and the File Transfer Profile.
About BCC:
Bluetooth devices that implement this API may allow multiple applications to
execute concurrently. The BCC prevents any application from harming another. The
BCC is a set of capabilities that allow a user or OEM to resolve conflicting
application requests by defining specific values for certain configuration
parameters in a Bluetooth stack. It is the central authority for local Bluetooth
device settings. The BCC might be a native application, an application with a
separate API, or simply a group of settings that are specified by the
manufacturer and cannot be changed by the user. Note that the BCC is not a class
or an interface defined in this specification but an important part of its
security architecture.
Capabilities of JSR 82
The API is intended to provide the following capabilities:
Register services
Discover devices and services
Establish RFCOMM, L2CAP, and OBEX connections between devices
Using those connections, send and receive data (voice communication not
supported)
Manage and control the communication connections
Provide security for these activities
The API Architecture
The goal of the specification was to define an open, non-proprietary standard
API that can be used by all J2ME-enabled devices. Therefore, it was designed
using standard J2ME APIs and CLDC/MIDP's Generic Connection Framework. Some
important features:
The specification provides basic support for Bluetooth protocols and profiles.
It doesn't include specific APIs for all Bluetooth profiles simply because the
number of profiles is growing.
The specification incorporates the OBEX, L2CAP, and RFCOMM communication
protocols in the JSR 82 APIs, primarily because all current Bluetooth profiles
are designed to use these communication protocols.
The JSR 82 specification addresses the Generic Access Profile, Service Discovery
Application Profile, Serial Port Profile, and Generic Object Exchange Profile.
The Service Discovery protocol is also supported. JSR 82 defines service
registration in detail in order to standardize the registration process for the
application programmer.
JSR 82 requires that the Bluetooth stack underlying a JSR 82 implementation be
qualified for the Generic Access Profile, the Service Discovery Application
Profile, and the Serial Port Profile. The stack must also provide access to its
Service Discovery Protocol, and to the RFCOMM and L2CAP layers.
The APIs are designed in such a way that developers can use the Java programming
language to build new Bluetooth profiles on top of this API as long as the core
layer specification does not change. To promote this flexibility and
extensibility, the specification is not restricted to APIs that implement
Bluetooth profiles. JSR 82 includes APIs for OBEX and L2CAP so that future
Bluetooth profiles can be implemented in Java, and these are already being used
for that purpose. Figure 1 shows where the APIs defined in this specification
fit in a CLDC/MIDP architecture.
The JSR 82 APIs can work with both native Bluetooth stacks and Java Bluetooth
stacks. In the latter case the APIs call the stack directly; in the former case
the APIs go through the virtual machine, which will interface with the native
stack. As I already noted, Java developers can expand their options by creating
new profiles.
JSR 82 standardizes the programming interface. Its two optional packages can be
used with any of the J2ME profiles. The minimum configuration is CLDC. Because
CLDC is a subset of CDC, applications using these APIs should work on CDC
devices. If the Generic Connection Framework Optional Package for J2SE (JSR 197)
is implemented, the JSR 82 APIs should work smoothly with J2SE.
Packages
The Java APIs for Bluetooth define two packages that depend on the CLDC
javax.microedition.io package:
javax.bluetooth: core Bluetooth API
javax.obex: APIs for the Object Exchange (OBEX) protocol
Again, the OBEX APIs are defined independently of the Bluetooth transport layer
and packaged separately. Each of the above packages represents a separate
optional package, which means that a CLDC implementation can include either
package or both. MIDP-enabled devices are expected to be the kind of devices to
incorporate this specification