com.nttdocomo.device.felica
クラス FreeArea

Object
  拡張com.nttdocomo.device.felica.FreeArea

public final class FreeArea
extends Object
 [iアプリオプションAPI]

内部カードのフリーエリアにアクセスする手段を提供するクラスです。 フリーエリアアクセスはオフライン処理の一種です。

[DoJa-4.1 (902iS) まで]
なお、オンライン処理中や 外部 R/W からのアクセス待ち状態下においては、オフライン処理を行うことはできません。 すなわち、OnlineFelica.start(String) を呼び出してから OnlineFelica.stop() を呼び出すまでの間や、 Felica.activate() を呼び出してから、 Felica.inactivate()Felica.close() を呼び出すまでの間には、 このクラスに用意されているメソッドを呼び出すことはできません。
[DoJa-5.0 (903i) 以降]
なお、オンライン処理中においては、オフライン処理を行うことはできません。 すなわち、OnlineFelica.start(String) を呼び出してから OnlineFelica.stop() を呼び出すまでの間に、 このクラスに用意されているメソッドを呼び出すことはできません。

[DoJa-5.0 (903i) 以降]
フリーエリアのデータ読み書きメソッド( read(), read(int[]), write(byte[]), write(int[], byte[]))呼び出しの過程で、 内部カードに対して「コマンドパケットで使用する属性」の「パケット種別」として 「2 バイトノードコード指定パケット」を設定します。 その結果、OfflineFelica.setParameter(long) で設定した属性値が変更される可能性がありますので注意してください。 これらのメソッド呼び出しで例外が発生した場合でも同様です。

[DoJa-5.0 (903i) 以降]
フリーエリアのデータ読み書き後にリセットを行うかどうかを setReset(boolean) にて指定できます。 リセットは PIN 解除情報をクリアするために行います。 デフォルトではリセットは行いません。 フリーエリアのデータ読み書きメソッド( read(), read(int[]), write(byte[]), write(int[], byte[]))は、 呼び出された時点で isReset() が true を返す場合は、 データを読み/書きした後にリセットを行います。 ただし、これらのメソッドはリセット前の処理が途中で失敗した場合は、 その時点で処理を中断し例外をスローします。

導入されたバージョン:
DoJa-3.0 (506iC)、DoJa-3.5 (900iC)
関連項目:
Felica.getFreeArea()

メソッドの概要
 byte[] getIDm()
          フリー領域のIDmを返します。
 boolean isReset()
          フリーエリアへの読み/書き込み後にリセットを行うかどうかを返します。
 byte[] read()
           フリー領域を使用するアプリケーションに括り付けられた フリーエリアのデータを読み込みます。
 byte[] read(int[] index)
           フリー領域を使用するアプリケーションに括り付けられたフリーエリアの データをブロックインデックスを指定して読み込みます。
 void setReset(boolean flag)
          フリーエリアへの読み/書き込み後にリセットを行うかどうかを設定します。
 void write(byte[] data)
           フリー領域を使用するアプリケーションに括り付けられたフリーエリアに データを書き込みます。
 void write(int[] index, byte[] data)
           フリー領域を使用するアプリケーションに括り付けられたフリーエリアに ブロックインデックスを指定してデータを書き込みます。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

メソッドの詳細

read

public byte[] read()
            throws FelicaException,
                   java.io.IOException

フリー領域を使用するアプリケーションに括り付けられた フリーエリアのデータを読み込みます。 返されるデータの長さは64バイトとなります。

戻り値:
フリーエリアデータ。
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-4.1 (902iS) まで] オンライン処理が既に開始されている場合や、 外部 R/W からのアクセス待ち状態下の場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-5.0 (903i) 以降] オンライン処理が既に開始されている場合に発生します(ILLEGAL_STATE)。
FelicaException - Free Areaの読み出しに失敗した場合に発生します (ID_READ_ERROR, TYPE_FREEAREA_READ_ERROR)。
FelicaException - [DoJa-5.0 (903i) 以降] リセットを行う場合(isReset() が true を返す場合)に、 リセットに失敗した場合に発生します (ID_READ_ERROR, TYPE_FREEAREA_RESET_ERROR)。
java.io.InterruptedIOException - FeliCaカードアクセス中に、 サスペンド状態への遷移によりカードアクセス処理が失敗した場合に発生します。
PortBusyException - [DoJa-5.0 (903i) 以降] ポートビジーエラーが発生した場合に発生します。
java.io.IOException - 入出力エラーが発生した場合に発生します。

read

public byte[] read(int[] index)
            throws FelicaException,
                   java.io.IOException

フリー領域を使用するアプリケーションに括り付けられたフリーエリアの データをブロックインデックスを指定して読み込みます。 ブロックインデックスは0から3までの整数値で、4つまで指定できます。 返されるデータの長さは最大64バイトとなります。

パラメータ:
index - ブロックインデックスの配列。
戻り値:
フリーエリアデータ。
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-4.1 (902iS) まで] オンライン処理が既に開始されている場合や、 外部 R/W からのアクセス待ち状態下の場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-5.0 (903i) 以降] オンライン処理が既に開始されている場合に発生します(ILLEGAL_STATE)。
NullPointerException - 引数 index に null が指定された場合に発生します。
IllegalArgumentException - 引数 index に長さが 0、または 4 より大きいブロックインデックスの配列が指定された場合に発生します。
IndexOutOfBoundsException - 引数 index に 0〜3 以外の要素を含むブロックインデックスの配列が指定された場合に発生します。
FelicaException - Free Areaの読み出しに失敗した場合に発生します (ID_READ_ERROR, TYPE_FREEAREA_READ_ERROR)。
FelicaException - [DoJa-5.0 (903i) 以降] リセットを行う場合(isReset() が true を返す場合)に、 リセットに失敗した場合に発生します (ID_READ_ERROR, TYPE_FREEAREA_RESET_ERROR)。
java.io.InterruptedIOException - FeliCaカードアクセス中に、 サスペンド状態への遷移によりカードアクセス処理が失敗した場合に発生します。
PortBusyException - [DoJa-5.0 (903i) 以降] ポートビジーエラーが発生した場合に発生します。
java.io.IOException - 入出力エラーが発生した場合に発生します。

write

public void write(byte[] data)
           throws FelicaException,
                  java.io.IOException

フリー領域を使用するアプリケーションに括り付けられたフリーエリアに データを書き込みます。データ長が64バイトに満たない場合はゼロで パディングされます。64バイトを越える場合は切り捨てられます。

パラメータ:
data - フリーエリアデータ。
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-4.1 (902iS) まで] オンライン処理が既に開始されている場合や、 外部 R/W からのアクセス待ち状態下の場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-5.0 (903i) 以降] オンライン処理が既に開始されている場合に発生します(ILLEGAL_STATE)。
NullPointerException - 引数 data に null が指定された場合に発生します。
FelicaException - Free Areaの書き込みに失敗した場合に発生します (ID_WRITE_ERROR, TYPE_FREEAREA_WRITE_ERROR)。
FelicaException - [DoJa-5.0 (903i) 以降] リセットを行う場合(isReset() が true を返す場合)に、 リセットに失敗した場合に発生します (ID_WRITE_ERROR, TYPE_FREEAREA_RESET_ERROR)。
java.io.InterruptedIOException - FeliCaカードアクセス中に、 サスペンド状態への遷移によりカードアクセス処理が失敗した場合に発生します。
PortBusyException - [DoJa-5.0 (903i) 以降] ポートビジーエラーが発生した場合に発生します。
java.io.IOException - 入出力エラーが発生した場合に発生します。

write

public void write(int[] index,
                  byte[] data)
           throws FelicaException,
                  java.io.IOException

フリー領域を使用するアプリケーションに括り付けられたフリーエリアに ブロックインデックスを指定してデータを書き込みます。 ブロックインデックスは0から3までの整数値で、4つまで指定できます。 指定されたフリーエリアデータの長さが (インデックスの配列の長さ × 16バイト) よりも短い場合、足りない部分はゼロパディングされます。 また、 (インデックスの配列の長さ × 16バイト) バイトを越える部分は無視されます。

パラメータ:
index - ブロックインデックスの配列。
data - フリーエリアデータ。
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-4.1 (902iS) まで] オンライン処理が既に開始されている場合や、 外部 R/W からのアクセス待ち状態下の場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-5.0 (903i) 以降] オンライン処理が既に開始されている場合に発生します(ILLEGAL_STATE)。
NullPointerException - 引数 index または data に null が指定された場合に発生します。
IllegalArgumentException - 引数 index に長さが 0 、または 4 より大きいブロックインデックスの配列が指定された場合に発生します。
IndexOutOfBoundsException - 引数 index に 0〜3 以外の要素を含むブロックインデックスの配列が指定された場合に発生します。
FelicaException - Free Areaの書き込みに失敗した場合に発生します (ID_WRITE_ERROR, TYPE_FREEAREA_WRITE_ERROR)。
FelicaException - [DoJa-5.0 (903i) 以降] リセットを行う場合(isReset() が true を返す場合)に、 リセットに失敗した場合に発生します (ID_WRITE_ERROR, TYPE_FREEAREA_RESET_ERROR)。
java.io.InterruptedIOException - FeliCaカードアクセス中に、 サスペンド状態への遷移によりカードアクセス処理が失敗した場合に発生します。
PortBusyException - [DoJa-5.0 (903i) 以降] ポートビジーエラーが発生した場合に発生します。
java.io.IOException - 入出力エラーが発生した場合に発生します。

getIDm

public byte[] getIDm()
              throws FelicaException,
                     java.io.IOException
フリー領域のIDmを返します。

このメソッドを呼び出すと、フリー領域に対してポーリングを行ない IDm を取得します。 フリー領域へのポーリングに成功し、内部カード内でシステム切り替えが発生すると、 それまで利用していたシステムのPINの解除情報がクリアされます。

戻り値:
IDmを返します。(8byte)
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - オンライン処理が既に開始されている場合に発生します(ILLEGAL_STATE)。
FelicaException - Free Areaのポーリングに失敗した場合に発生します (ID_POLLING_ERROR, TYPE_FREEAREA_POLLING_ERROR)。
java.io.InterruptedIOException - FeliCaカードアクセス中に、 サスペンド状態への遷移によりカードアクセス処理が失敗した場合に発生します。
PortBusyException - ポートビジーエラーが発生した場合に発生します。
java.io.IOException - 入出力エラーが発生した場合に発生します。
導入されたバージョン:
DoJa-5.0 (903i)

isReset

public boolean isReset()
フリーエリアへの読み/書き込み後にリセットを行うかどうかを返します。

このオブジェクトが生成された直後では、デフォルト値として false を返します。

戻り値:
リセットを行う場合は true、行わない場合は false を返します。
例外:
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。