JVM が入っている指輪型デバイス「Java Ring」 を動かしてみる試み
Java Ring とは
Java Ring とは,1998年に開かれた「Java One」というイベントで配布された指輪型デバイスだ。
この指輪の中には Java Card 技術を利用したアプレットが動く JVM が入っており,楽しいことが出来るはずだ。
参考: https://internet.watch.impress.co.jp/www/article/980528/ring.htm
Java Ring を入手した
某日,闇市にて Java Ring が 3000 円ほどで売っているのを観測して購入した。
非常に備品で,動きそうな予感。
Java Ring が使用するプロトコル
上記参考に挙げた URL の先にある画像を画像検索にかけたところ,iButton なるプロトコルが怪しい。
指輪をハメるデバイスとかなり酷似したものを発見した。
マクニカの記事(https://www.macnica.co.jp/business/semiconductor/articles/analog_devices/144642/ )によると,DS1402D-DR8+ という iButton <-> RJ11(1-Wire) アダプタがあり,これに DS9490R# という RJ11(1-Wire) <-> USB 変換器を挿すようだ。
なお, 1-Wire とは iButton が使用しているプロトコルで,主に産業用温度記録装置で使われるようだ。
GND と 1本の信号線のみで通信できるのが特徴である。
買っちゃった
Digikey という超巨大電子部品ディストリビュータにて,当該製品が流通していることを確認した。
今月は大変なのであるが,好奇心に負けたために購入してしまった。
日本円で 16,000 円ほどであった。
疎通確認
とりあえずこのガイドに従い, 1-Wire Driver なるものをインストールした。
これには,One-Wire Viewer というツールが含まれており,これを用いて疎通を確認できる。
起動して,Java Ring を挿してみる。
よかった。とりあえず動いたので,無事一歩前進。
とりあえず手詰まり
マクニカが公開している One-Wire Viewer のスクリーンショットには,モニタやコンソールなどの最低限のでバッグ情報があった。
一方で,私が撮ったものにはそれがなく,とりあえずつながることが分かった,という状態である。
つまるところ,手詰まりである。
調べる
どうしようもないので,Java Ring の当初の目的である「Java One 参加者の情報やコーヒーの嗜好を記録・提供する」を実現することを目的にする。
インプレスが公開している記事の画像に,「Java Developer Conferenec 98 Tokyo」のものが写っていたので,引用する:
(https://internet.watch.impress.co.jp/www/article/980528/ring.htm より。)
このページをネットの海から探すべく,「"Personalize your JavaTM Ring by entering the information below."」などの厳格検索を試してみる。
発見!
それっぽいものを見つけた。特に,コーヒーの嗜好に関する記述があるのがよい,
他のディレクトリを探索してみると,iButton や OneWire 等の記述があるので,十中八九これで間違いないだろう。
とりあえずローカルに落としてきて,色々試してみる…
あらゆるファイルが破損していた。万事休す!!!
知見まとめ
- Java Ring は「Java-powered iButton」という類のデバイスのようだ。
- iButton は 1-Wire プロトコルの上で動作する(= iButton over 1-Wire protocol)。
iB-IDE なるソフトウェアがあり,これを使うと良いらしい。
しかしながら, iButon の当時のサイトは落ちている上に,Wayback machine を用いても,入手元URL が ftp://
のためにアーカイブが出来てない。
そこで, iB-IDE
で検索をかけていると次のサイトを発見した。
どうやら http://www.ee.usyd.edu.au/~mattb/2003/project/ibutton/
に転がっているらしく,無事アーカイブからゲッツ。
ここでは Java Communications API 2.0 と iB-IDE の両方を配布しているらしい。
後者を落として解凍してみたところ, Setup.jar
と Setup.bat
が析出した。
試しに Setup.bat
の方を走らせたところ,エラーが発生した:
Syntax: SETUP jdkPath
Where jdkPath is the path to your Java executable.
Example: SETUP c:\JDK1.2.2\bin\java.exe
Press any key to continue . . .
なるほど, Java 25 ではやはりダメなようだ。
では, .bat
の正規系の動きを再現するべく java -cp Setup.jar Setup
を試したところ,ウィザードが起動した。
どうやら Dallas の製品だったようだ。
進めてみたところ, Java Communications API なる API が必要ということがわかった。
もう一方のファイルを解凍すると,以下のファイルとディレクトリが析出した。
Readme.md の指示に従って,マシンにすでにある JDK 1.8
にインストールしてみる。
その後,java -cp "<comm.jar のパス>;Setup.jar" Setup
で強引に実行した。
ヨシ!
その後実行して起動した。
CRC が通らない
iB-IDE には APDU を送信する機能があったため,とりあえず「Get Firmware Version ID」をしてみた。
しかしながら, CRC エラーが起きてしまっている事がわかった。
返答が以下のようなバイト列であった。
55 16 94 03 07 00 00 00 D0 E1 FE FF FF FF FF FF
なお,命令の開始が必ず 55
であることが仕様書には明記されており,実際に 55 から始まっているため,私の Java Ring が(回復不可能なほどに)壊れているということはなさそう。
これを Dallas 式の CRC に入れ,得られた結果が 45057
ではないといけないらしい。
なお,CRC の式は次の通りである:
Java iButton
どうやら Java Ring が内蔵している iButton は,そのなかでも特別な Java(-Powered) iButton なるものらしい。
見つけた記事を共有しておく。
- http://static.advonics.com/content/pdfs/46/1477681.pdf : Dallas が出している DS1955B Java™-powered Cryptographic iButton® に関する記述。
- https://www.ijert.org/java-ring : JavaRing の説明と応用の論文
- https://javaring.blogspot.com/ : Java Ring のマーケティング用紹介文
Java Ring が使っているパスワードは 「1!J1」 らしい
デバイス ID
Java Ring の 1-Wire デバイス ID は 16
である。このことは One-Wire Viewer からも読み取れることである。
'00 年代の 1-Wire Java API には,OneWireContainer16
という Java-Powered iButton に対応したハンドラがあったが,最新の API からは何故か削除されている。
このハンドラは, JibComm
という専用のバックエンドを用いて通信をする。
状況把握
- CRC に失敗していたことから,CRC の計算 or Java Ring がぶっ壊れていると思っていた。
- 標準出力を差し挟むなどしてデバッグをしたところ,実際は CRC には成功していることが分かった。
- 実はCRC は計2回実行されており,2回目の CRC のみ失敗している。
CRC の計算は2回あった!
ここで注意しなければいけないことは,CRC シーケンスは2回行われるということだ。
問題を整理すると,現在直面している悪夢はデバイスのステータスを取得する checkStatus
メソッドによって発生している.
このメソッドはデバイスのステータスを確認し,必要な処理(初期化やタイミング合わせ)等を行う。
ここで特筆すべき概念は,Power-On Reset という起動時の特別な処理だ。
これは,マイコンの電源が投入されていから安定するまでに発生した中途半端なデータを破棄して,まっさらな状態で動かすための処理である。
最初の電源投入からエラーまでの流れはこうだ。
まず,Java-Powered iButton(以下単に iButton という)を認識した 1-Wire API は,checkStatus -> getStatus
を用いてステータスを取得する命令を(0x55 - MATCH ROM
を用いて宛先を指定したうえで)発行する
このとき次のようなデータが返答され,これは CRC チェックにパスする。
0x55, 0x16, 0x94, 0x03, 0x07, 0x00, 0x00, 0x00, 0xD0, 0xE1, 0x08, 0x00, 0x40, 0x00, 0x70, 0x49
これは ROMコマンド | ROM ID(シリアル番号のようなもの) | 命令名 | 引数・応答
で構成されており,ステータス命令の応答として 08 00 40 00
が帰ってきている事がわかる。
ステータス 40
が意味することは,即ち「POR を正すためにデバイスをリセットしろ」ということである。
そのために corretPOR
メソッドが呼ばれ,これは reset
, setStatus(試行回数)
, run(試行回数)
を呼び出す。
reset
メソッドはデバイスに 0xDD, 0xBC, 0x92
を送りつけてリセットを要求する。
他2つのメソッドについては調査中である。
これを行った後に,再度 checkStatus
内のステータス取得&環境適合作業が行われる。
このとき,(なぜか)デバイスからは すべてが F になるような値が返ってくる。そうして CRC チェックに失敗する,というのが一連の流れだ。
詳しくはまだ分からないが,調査を続けることにする。
送信・受信ログをすべて出すとこんな感じ:
[22, -108, 3, 7, 0, 0, 0, -48]
TRANSFER JIB DATA:
06 89 00 d0 95 01 00
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 0, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, 95, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[96]STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]This exception occurred: com.dalsemi.onewire.OneWireException: POR of Device is set., Retrying to send the apdu after POR...
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, 95, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 1, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, -97, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[386]55 16 94 3 7 0 0 0 d0 e1 fe ff ff ff ff ff
This exception occurred: com.dalsemi.onewire.adapter.OneWireIOException: Bad CRC on data returned in Read Status method., Retrying to send the apdu after POR...
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, -97, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 2, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, -98, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[676]55 16 94 3 7 0 0 0 d0 e1 fe ff ff ff ff ff
This exception occurred: com.dalsemi.onewire.adapter.OneWireIOException: Bad CRC on data returned in Read Status method., Retrying to send the apdu after POR...
com.dalsemi.onewire.adapter.OneWireIOException: Bad CRC on data returned in Read Status method.
at com.dalsemi.onewire.container.JibComm.getStatus(JibComm.java:578)
at com.dalsemi.onewire.container.JibComm.checkStatus(JibComm.java:621)
at com.dalsemi.onewire.container.JibComm.transferJibData(JibComm.java:426)
at com.dalsemi.onewire.container.OneWireContainer16.sendAPDU(OneWireContainer16.java:2033)
at com.dalsemi.onewire.container.OneWireContainer16.getFirmwareVersionString(OneWireContainer16.java:668)
at com.ibutton.opt.ide.IDEFrame.oneWireArrival(IDEFrame.java:1260)
at com.dalsemi.onewire.utils.OneWireMonitor.notifyOfArrival(OneWireMonitor.java:181)
at com.dalsemi.onewire.utils.OneWireMonitor.pollDevices(OneWireMonitor.java:490)
at com.dalsemi.onewire.utils.OneWireMonitor.run(OneWireMonitor.java:225)
correctPOR
の後に Thread.sleep
を入れてみたら, CRC のエラーが無くなった!!
public void correctPOR() {
if (doDebugMessages) {
System.out.println("Attempting to correct the POR!");
}
this.reset();
this.setStatus(0 + this.POR_ADJUST);
this.run(0 + this.POR_ADJUST);
Thread.sleep(10000L);
}
なお,依然として POR 関連のエラーが残っている模様。
[22, -108, 3, 7, 0, 0, 0, -48]
TRANSFER JIB DATA:
06 89 00 d0 95 01 00
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 0, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, 95, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[96]STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]This exception occurred: com.dalsemi.onewire.OneWireException: POR of Device is set., Retrying to send the apdu after POR...
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, 95, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 1, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, -97, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[386]STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]This exception occurred: com.dalsemi.onewire.OneWireException: POR of Device is set., Retrying to send the apdu after POR...
Sending data to Java iButton.
STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]Attempting to correct the POR!
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -35, -68, -110, -97, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -46, 2, -1, -1, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Sent command:[85, 22, -108, 3, 7, 0, 0, 0, -48, -121, 115, 93, -98, 127, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[676]STAT:
[85, 22, -108, 3, 7, 0, 0, 0, -48, -31, 8, 0, 64, 0, 112, 73]
<8 0 40 0>[0]This exception occurred: com.dalsemi.onewire.OneWireException: POR of Device is set., Retrying to send the apdu after POR...
com.dalsemi.onewire.OneWireException: POR of Device is set.
at com.dalsemi.onewire.container.JibComm.checkStatus(JibComm.java:644)
at com.dalsemi.onewire.container.JibComm.transferJibData(JibComm.java:426)
at com.dalsemi.onewire.container.OneWireContainer16.sendAPDU(OneWireContainer16.java:2033)
at com.dalsemi.onewire.container.OneWireContainer16.getFirmwareVersionString(OneWireContainer16.java:668)
at com.ibutton.opt.ide.IDEFrame.oneWireArrival(IDEFrame.java:1260)
at com.dalsemi.onewire.utils.OneWireMonitor.notifyOfArrival(OneWireMonitor.java:181)
at com.dalsemi.onewire.utils.OneWireMonitor.pollDevices(OneWireMonitor.java:490)
at com.dalsemi.onewire.utils.OneWireMonitor.run(OneWireMonitor.java:225)
これを見た感じ,やはりデバイスが壊れている可能性を捨てきれない…ぐぬぬ