2021年4月1日木曜日

EPCの謎に迫る その4

 このシリーズもかなり間が空いてしまいました。前回の「EPCの謎に迫る その3」は2016年ですから何と5年も! お久しぶりです。大変恐縮でございます。

しかしだからといって謎が無いわけではありません。いっぱいあります。今回は謎の多いマスクについて迫りたいと思います。

マスク機能は標準で付いてる機能で、例えばEPCがXXXXで始まるものだけ応答させるとかそんな風に使います。わけのわからないタグがいっぱいあるところで、必要なタグだけ読みたいという感じですね。もちろん全部読んじゃって、受け取ったあとでソフトウェア側で無視するということもできますがタグがワサワサあるところでは使った方がいいんじゃないかと思われます。

マスク機能がどのように働いているのかは結構謎だったりしますよね。しかも結構複雑だったりします。

例えばこれ









RF-BlasterというUHFリーダのデモ用アプリでマスクの設定をしようとするとこんな画面が出てきます。Bank とか Offset とか Mask とかは何となくわかりますが、Selection Flag とか Action とか、は?って言うのが出てきます。Action に至っては A / B とか Not / A とかおいおーい!って感じの選択を迫られるわけです。

タグは2つのフラグを持っています。1つは Inventoriedフラグと呼ばれるもので、AまたはBの状態を持ちます。もう1つは SLフラグと呼ばれるもので、セットまたはリセットの状態を持ちます。

この2つのフラグ、動作的にはすごく似ていて同じでもいいんじゃないかという気もしますがいちおう分かれているようです。

リーダがタグを読み取るとき、SDKとかでは Inventory コマンド一発とかで読取りしますが、実際は Select コマンドを投げてから読取りをしています。この Select コマンドのときに上のフラグを操作して、読取りの際に特定のフラグのものだけ読み取るという動作になっています。

Inventoriedフラグはインベントリのときに利用して、SLフラグをマスクの用途で利用するという棲み分けになっているようです。

そんなわけでマスクの動作とは簡単に言うと、Select で対象のタグの SLフラグをセットの状態にする→インベントリで SLフラグがセットされたものだけを読み取るという流れになります。

じゃぁこの Action は何なんだということになるわけですが、Selectコマンド時に各タグが自分のフラグをどう変更するかの指示になってます。まず / で左と右に別れますが、これは左が「マスクにヒットするタグ」で右が「マスクにヒットしないタグ」の動作になります。Aは Inventoriedフラグだったら A にして、SLフラグだったらセットにします(Inventoried と SL のどっちを変えるかは一番上の Target で指定します)。Bは Inventoriedフラグは B にして SLフラグはリセットにします。Not は何もしない、Negate はフラグを反転します。

通常は A / B でいいと思いますが、他の設定がどんな使い方を想定しているのか大変気になるところでもあります。

マスクなので SLフラグだけ変えればいいと思うのですが、Inventoriedフラグも変えることができるのでこれはいったい何に使うのかという妄想が膨らみますねー。謎です。