writeじゃなくてcontrolか!
PaSoRiにコマンドが送れなくて困っていたわけだが解決! 今まではwriteInterruptを使っていたのだが、これをcontrolMsgにしたら動作しそうだ。
API(Java)とサンプルコード(C)をじっくり読んだら納得。 writeInterruptってUSBポートにパケットをwriteするものだと思い込んでいたが、実はカードにwriteするものらしい。 カードにwrite・・・わかりやすく言うと、Suicaの金額を増やすとか、ほんとにデータを書き込むときに使うらしい。 当然、Suicaに書き込めるわけはないので、動くわけが無い。
controlMsgは設定の取得とか、そういうサブっぽい動きをすると思っていたら大間違い。 制御用のメッセージを送るような意味合いらしい。 わかってしまえばcontrolMsgの直訳に近いのだが😳 このcontrolMsg、具体的にどんなメッセージを飛ばすかというと、
- IDをくれ
- Suicaの履歴をくれ
って感じ。 ほんとに制御用のメッセージを送るだけで、中にあるデータに触れることはしない。 その制御メッセージを受け、PaSoRiは情報を返してくる。 返ってきたデータはreadInterruptで読み取る・・・と。 大まかはそんな流れ。
これで進められそうだ。 ちょっと面倒そうなのがパケットの種類。 PaSoRiの機器に送るパケットとFelica(SuicaやPASMOの規格・・・というのか?)のパケットが似ている・・・けど違う。 ここはもう一度クラスの構成を考えなくては。