C#でのNDEF用クラスライブラリ Simple Ndef Parser
C#のNDEF用クラスライブラリ Simple Ndef Parserを作成しました。適宜ダウンロードしてください。一部Type2 Tag用になっている部分もあるかと思いますが、下記のような流れの中で作成したので、そこらへんはご容赦を。MITライセンスなので、適宜よろしくお願いいたします。
経緯
前回の実践編ではNXP21Xのカードの読み・書きをコードを書いて、実践してみました。
その中でNDEFのコードを探してみたのですが、純粋にNDEFを解析・作成できるライブラリが見つけられず、
NDEFの仕様や参考ページを読んで自分で作成することにしました。
andijakl/ndef-nfc はUWPだったのと、機器での読み書きも含めて作成されたライブラリです。使いたかったのですが、諦めました。
大まかな仕様
- NXP21XはType2 TagのNDEFなので、Lock Control TLVなどを入れていますが、あまり正確な実装ではなく定数として使用。(*1)
- ControlTLV、MessageTLVも実装しています。
- NDEFレコードタイプは”U”のみ解釈できるように実装しています。(*2)
- SR”ショートレコード”のみの対応。
- テストコードで動きを確認しています。使用したデータのサンプルは、仕様書・ページと実際に書き込んだデータから作成。
- MITライセンス。
*1 スマホアプリでNPX213への書き込みから知りました。ただし、あまり正確に使用されていない?ようで。すみません、そこまで追いきれませんでした。
*2 適宜 T等も各自で実装いただけると幸いです。
ダウンロード
下記から、ソースコードをダウンロードしてください。
Gitghubでの公開も考えましたが、どれだけ参照・ダウンロードされてかよくわからないので、こちらでの公開のみとしています。
“Simple Ndef Parser Class Lib v1.0” をダウンロード SimpleNdefParserClass_V1.0.zip – 541 回のダウンロード – 889 KB
ダウンロードしたテストを実行すると、『使用できるテストはありません。テスト探索プログラムと実行プログラムが登録されており、プラットフォームとフレームワークのバージョン設定が適切であることを確認して、もう一度お試しください。』といったメッセージが出る可能性がありますが、方法:.NET Framework の旧バージョンを対象とした単体テストを構成するにて、.Netのバージョンを変更するか、新しいプロジェクトでテストを再構成してください。
参考ページと仕様書
主に以下の仕様書とページを参考にさせていただきました。
- NFC Data Exchange Format (NDEF) Technical Specification NFC ForumTM NDEF 1.0
- Type 2 Tag Operation Specification
- 【NFC】NDEFについて理解する
構造(簡単な解説)
NDEF TLV の中に、NDEF Recordがあり、PayLoadの中にバイト配列化されたデータが存在します。(ただし、LockTLVなどはType2 Tag 専用のようです。)これを一つずつ解析・作成して、読み書きしたデータを扱える形に変えていきます。
クラスの構造は、NDEFの構造を反映した形になっています。
- NDEF TLV – SimpleNP_NdefTLV.cs
- NDEF Record – SimpleNP_NdefRecord.cs
- その他 – SimpleNP_NdefUtility.cs (共通で使用する定数・関数を含んでいます。)
使い方
実際にテストコードをもとに使い方を見ていきます。UnitTest1.cs, UnitTest2.csを参考にご覧ください。
タグからの読み取りで使用
1. NDEFバイト配列から文字列への変換 (NDEF Record)
NdefRecord sample1_record = new NdefRecord(sample1); //① string answer = "http://www.nfc.com"; Assert.AreEqual(answer, sample1_record.URI, "取得したURIデータが異なります。"); //②
①でSample1のバイト配列から、文字列等へ変換します。
②文字列の比較
2. NDEFバイト配列から文字列への変換 (NDEF TLV)
NdefTLV ndefTLV = new NdefTLV(sample4_MyType2Tag); //① Assert.AreEqual("https://office-fun.com", ndefTLV.record.URI, "NdefMeasageの解釈でエラーが発生しました。");
①でNDEF TLVと NDEF Recordを解釈して、正しい文字列として変換できているかを確認します。
タグへの書き込みで使用
元のバイト配列と全要素比較して、すべて同じかをテストコードで比較して、クラス・関数が正しく作成できたかを確認しています。
3.文字列からNDEFバイト配列への変換 (Record)
string orgData = "mms://example.com/download.wmv"; NdefRecord sample_ndefData = new NdefRecord(orgData, UriIdentifierCode.UnAbridgedURI); for (int i = 0; i < sample3.Length; ++i) { Assert.AreEqual(sample3[i], sample_ndefData.RawData[i], i.ToString() + "番目でエラーが発生しました。"); }
4. 文字列からNDEFバイト配列への変換(NDEF TLV)
string orgData = "https://office-fun.com"; NdefTLV ndefTLV = new NdefTLV(orgData, UriIdentifierCode.UnAbridgedURI, TLVBlock.LockControlTLV);
ダウンロード数
100DL (2020 07/20)