FeliCaリーダの漠然としたイメージ

朝寝ぼけている時に浮かんできたのでメモ。
今週土曜日は休日らしい休日になりそうな気がするから、土曜にやれるかな。

構成

基本は以前仕事で作ったような、ソケットベースのリーダにしようかな、と。
で、USBのリード部分とソケット送信部分を分けて、シングルプロセス/マルチポート/マルチスレッドでいこうかな、と。
言語はCのライブラリしかなくなっちゃったから、C(一部C++)でいこうかな、と。
DLLにしてC#から読み込んでやってもいいんだが、最近ちょっとC熱が復活してるからCで組みたい。組んでいる時にちとストレスたまりそうではあるが。


で、こんな感じ。

オブジェクト名 機能 関連オブジェクト
メインモジュール 色々やる 全部
設定ファイル 呼び出すUSBポート番号、送信先ソケット情報などを記述。形式は未定だが、CでよさげなXML系ライブラリが見つかればXML。見つけられなければCSVかな。 メインモジュール
USBリーダ PaSoRi君を一定間隔で読み込む。マルチコリジョン*1非対応。メインモジュールから、1USBポートにつき1スレッドとして起動される。カードを読み込んだらIDmをキューに登録 メインモジュール、FeliCa SDK、キュー
キュー 読み込んだIDmを漠然と記録するだけの人。この人がスレッドセーフな作りを全部担当 メインモジュール、USBリーダ、ソケットモジュール
ソケットモジュール キューを読み出して未定の通信方式でIDmをばら撒く人 メインモジュール、キュー

いや、当然設定ファイル読み込みモジュールなどはいるし、ソケットも通信方式と読み取り部を分離したりするかもしれないが、現時点でイメージすべき分割単位はこんな感じだろう。
通信方式は一切未定。UDPが楽なんだけど、どうすっかな。これが決まらないからソケットモジュールのスレッド単位も決められない。
キューからソケットモジュールを駆動させないようにしたのは、キューの部分を共有メモリにすれば別プロセスがソケット処理を担当することも出来るため。
まあ楽な方楽な方に進む感じで。

USBリーダ部

大体固まっている。
PaSoRiとじゃれあいながら細部は詰めていくが、Polling→Polling→Polling→失敗したらClose→Open→Pollingって流れでいいかなと。途中で抜き差しされてもいけるだろう。
Openに失敗したら少し間隔を弱めてOpenを試み続けるか、メッセージを受け取ってから再Openをかけるかは未定。

GUI

GUIなんてなくていいやと思っていたのだが、タスクトレイにアイコンくらいいてもいい気がする。
なんか作るかも。
でもCで作るのはだるいな・・。MFC使っちゃおうか。
ここは明日寝ぼけている時に浮かぶだろと期待する。

キュー部

全部自作する。
でもCにクリティカルセクションなんてあったっけ。大丈夫か俺という感じもするが(笑)
なんか簡単そうなのあるだろ。なければAPIによろしくといこう。

雑記

多分一日目でUSBリーダ部とソケット通信部をこさえて、二日目でキュー部をこさえて結合して、三日目でGUIをこさえて、四日目で設定ファイルをこさえて、五日目で設定ファイルとGUIを連携させるとか仕上げて完了、という流れでいける気がする。
まあのんびりやろう。

*1:うろ覚え。違う名前かも