270 likes | 283 Views
JSR82:Java APIs for Bluetooth. 02k1035 増田玲子. 目次. Bluetooth JSR82:Java APIs for Bluetooth J2ME Wireless Toolkit 2.2 デモ. 1. Bluetooth. 「狭い範囲にある電子機器および携帯端末間をワイヤレス接続するための技術」 2.45GHz 帯の ISM ( Industry Science Medical )バンドの電波を利用 最大通信距離 10m 通信速度 1Mps 音声、データの通信. Bluetooth とは. Bluetooth の特徴.
E N D
JSR82:Java APIs for Bluetooth 02k1035 増田玲子
目次 • Bluetooth • JSR82:Java APIs for Bluetooth • J2ME Wireless Toolkit 2.2デモ
「狭い範囲にある電子機器および携帯端末間をワイヤレス接続するための技術」「狭い範囲にある電子機器および携帯端末間をワイヤレス接続するための技術」 2.45GHz帯のISM(Industry Science Medical)バンドの電波を利用 最大通信距離10m 通信速度1Mps 音声、データの通信 Bluetoothとは
Bluetoothの特徴 モバイル 「小型・軽量・低消費電力」を実現 無指向性 遮断物があっても通信可能 音声とデータの通信 音声とデータの双方を併用して利用可能
Bluetoothの特徴 任意ネットワーク ピコネット ・ 1対多のワイヤレスネットワークを 構築し、同時通信を行うことが出来る。 ・ 制御機能を担う端末「マスター」、その他は「スレーブ」 ピコネット スキャターネット ・ 複数の独立したピコネットが存在し、それぞれのピコネット同士がマスターまたはスレーブを介して相互接続されている。 スキャターネット
Bluetoothの特徴 双方向性 双方向に情報のやり取りが可能 エリア限定 限られた範囲内において通信エリアを提供 全世界共通仕様 世界中で使用可能
Bluetoothプロトコルスタック • アプリケーションとハードウェアの間に入りBluetoothの基本処理を行うファームウェア L2CAP : Logical Link Control and Adaptation Protocol HCI : Host Controller Interface
Bluetoothの技術仕様 • コア(Core) • ワイヤレス接続の物理的、論理的な基礎を定義 • プロファイル(Profiles) • 組み込まれる各機能ごとの相互接続性を保障するため、従わなければならない技術要件 • 機器固有の通信手順(プロトコル)をデバイスの特性ごとに標準化したもの アプリケーションを提供する複数のプロファイルの組み合わせがコアと共に製品に実装される
Bluetoothのプロファイル仕様 すべての機器が実装しなければならない基本プロファイル: GAP(Generic Access Profile)とSDP(Service Discovery Profile ) 各デバイス用のプロファイル:その他のプロファイル
JSR82:Java APIs for Bluetoothとは • Bluetooth通信機能をJavaアプリケーションから制御するためのJava APIの標準化セット • Bluetoothバージョン1.1仕様に基く • Bluetoothプロトコルスタックの複雑さを隠す → 低レベルのBluetoothの細部でなくアプリケーション開発に集中できる
JSR82の概要 • Bluetooth通信の基本機能とOBEX(Object Exchange)通信機能に関して定義された • J2MEのオプショナルパッケージ • CLDC以上のコンフィグレーション環境を対象としている • GCF(Generic Connection Framework)のフレームワークの仕組みを利用
JSR82の仕様 • javax.bluetooth 通信の基本機能であるL2CAP,RFCOMM,SPP,SDPを扱う • javax.obex 汎用的なOBEX通信機能(ファイル転送など)を扱う 汎用的なOBEX機能 Bluetooth通信に特化した機能
JSR82で定義されている機能 Bluetoothのアプリケーション構造 • 初期化(JSR82では定義されていない) • デバイス管理 各デバイスがどのような属性を持っているかを定義・参照する • デバイス、サービス検索(クライアント) デバイスを検索し、そのデバイスで提供されているサービスを検索する • サービス登録(サーバ) • 通信
デバイスの管理 • javax.bluetoothパッケージ • LocalDeviceクラス • RemoteDeviceクラス ... // retrieve the local Bluetooth device object LocalDevice local = LocalDevice.getLocalDevice(); // retrieve the Bluetooth address of the local device String address = local.getBluetoothAddress(); // retrieve the name of the local Bluetooth device String name = local.getFriendlyName(); ... // retrieve the device that is at the other end of //the Bluetooth Serial Port Profileconnection, // L2CAP connection, or OBEX over RFCOMM connection RemoteDevice remote = RemoteDevice.getRemoteDevice( javax.microedition.io.Connection c); // retrieve the Bluetooth address of the remote device String remoteAddress = remote.getBluetoothAddress(); // retrieve the name of the remote Bluetooth device String remoteName = local.getFriendlyName(true); ...
デバイス、サービスの検索 • デバイスの検索 • javax.bluetoothパッケージ • DiscoveryListenerインターフェース • DiscoveryAgentクラス ... // retrieve the discovery agent DiscoveryAgent agent 1= local.getDiscoveryAgent(); // place the device in inquiry mode boolean complete = agent1.startInquiry(); ... DiscoveryAgent agent2 = local.getDiscoveryAgent(); // return an array of pre-known devices RemoteDevice[] devices = agent2.retrieveDevices(DiscoveryAgent.PREKNOWN); ... DiscoveryAgent agent 3= local.getDiscoveryAgent(); // return an array of devices found in a previous inquiry RemoteDevice[] devices = agent3.retrieveDevices(DiscoveryAgent.CACHED); ...
サービスの検索 • デバイスが検出された後に行う • javax.bluetoothパッケージ • UUID • DataElement • ServiceRecord
サービス登録(サーバ側のみ) • MIDP/CLDC API • StreamConnectionNotifierクラス • StreamConnectionクラス • JSR82 API (javax.bluetoothパッケージ) • ServiceRecordクラス ... // create a server connection StreamConnectionNotifier service = (StreamConnectionNotifier)Connector.open("someURL"); // obtain the service record created by the server device ServiceRecord sr = local.getRecord(service); //accept a client connection StreamConnection connection = (StreamConnection)service.acceptAndOpen(); //close the connection and remove the service record service.close(); ...
通信 • 通信プロトコル層ごとに可能となるAPIがある • OBEX以外の通信用APIはjavax.bluetoothパッケージ • OBEXはjavax.obexパッケージ • 通信の開始はGCFの流儀に従う • javax.microedition.io.Connector#open(接続先のURI) クライアント:プロトコル識別名+接続先アドレス サーバ:プロトコル識別名+ローカルホストアドレス Bluetooth APIのプロトコル識別名とコネクションインターフェース
SPPプロトコル通信サーバ側 ... // assuming the service UID has been retrieved String serviceURL = "btspp://localhost:"+serviceUID.toString()); // more explicitly: String ServiceURL = "btspp://localhost:10203040607040A1B1C1DE100; name=SPP Server1"; try { // create a server connection StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open(serviceURL); // accept client connections StreamConnection connection = notifier.acceptAndOpen(); // prepare to send/receive data byte buffer[] = new byte[100]; String msg = "hello there, client"; InputStream is = connection.openInputStream(); OutputStream os = connection.openOutputStream(); // send data to the client os.write(msg.getBytes()); // read data from client is.read(buffer); connection.close(); } catch(IOException e) { e.printStackTrace(); } ...
SPPプロトコル通信クライアント側 ... // (assuming we have the service record) // use record to retrieve a connection URL String url = record.getConnectionURL( record.NOAUTHENTICATE_NOENCRYPT, false); // open a connection to the server StreamConnection connection = (StreamConnection) Connector.open(url); // Send/receive data try { byte buffer[] = new byte[100]; String msg = "hello there, server"; InputStream is = connection.openInputStream(); OutputStream os = connection.openOutputStream(); // send data to the server os. write(msg.getBytes); // read data from the server is.read(buffer); connection.close(); } catch(IOException e) { e.printStackTrace(); } ...
javax.bluetooth コアとなるJava Bluetooth APIの全体のアーキテクチャとコンテキスト • Discovery Manager アプリケーションが端末やサービスを探すときに使用 • Generic Connection Framework(GCF) • Bluetooth Manager Bluetoothスタックの様々な機能にアクセスする
Java Bluetooth Development Kits • Complete Development Kits ハードウェアとソフトウェアを提供 • Software Only Development Kits 実際のBluetooth搭載機として互換できる • Simulation Development Kits シミュレーションのみが出来る → J2ME Wireless Toolkit (参考) http://www.javabluetooth.com/development_kits.html
参考文献 • http://developers.sun.com/techtopics/mobility/midp/articles/bluetooth1/ • http://developers.sun.com/techtopics/mobility/midp/articles/bluetooth2/ • http://developers.sun.com/techtopics/mobility/apis/articles/bluetoothintro/index.html • http://developers.sun.com/techtopics/mobility/apis/articles/bluetoothcore/index.html • http://www.nokia.co.jp/forum/developer/tech_doc/ • Bluetoothガイドブック、宮津和弘、日刊工業新聞社 • Javaモバイルアプリケーション、立川敬行、ソフトリサーチセンター