質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
NFC

無線通信

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

20116閲覧

iPhoneのFelicaのIDを読み取りたい

ryo_274

総合スコア7

NFC

無線通信

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/03/19 08:18

編集2018/03/19 08:31

前提・実現したいこと

iPhoneのFelicaのIDを読み取りたいです。

Felicalib.dllを使用してNFC/FelicaのIDを読み取りたいのですが、
PASUMOやnanacoのIDは読み取れて、iPhoneのIDが読み取れません。

発生している問題・エラーメッセージ

iPhoneをリーダーかざすと反応しますが、プログラムがフリーズします。

該当のソースコード

c#

1f.Polling((int)0xFFFF); 2var data = f.IDm(); 3var result = ""; 4for (int i = 0; i < data.Length; i++) 5{ 6 result += data[i].ToString("X2"); 7} 8Console.WriteLine(result); 9 10public byte[] IDm() 11{ 12 if (felicap == IntPtr.Zero) 13 { 14 throw new Exception("no polling executed."); 15 } 16 byte[] buf = new byte[8]; 17 felica_getidm(felicap, buf); 18 return buf; 19}

試したこと

システムコードを0xFFFF以外にも0xFE00などで試してみましたが、できませんでした。

システムコード0xFFFFを使用すると、すべてのNFC/FelicaのIDを取得できると思っていたのですが、
別のシステムコードを使用するべきなのでしょうか。

それとも、ほかに何か問題があるのでしょうか。

以下のサイトのツールを使用したところ正常に表示されたので、
NFC/Felicaリーダーやドライバーに問題があるわけではないようです。

https://www.vector.co.jp/soft/winnt/hardware/se493348.html

補足情報(FW/ツールのバージョンなど)

Windows 10
Visual Studio 2017
.NET Framework 3.5
felicalib.dll
RC-380
ドライバーは最新のものを使用しています

ソースコードは一部抜粋しています。

他言語の経験は多少ありますが、c#は初心者です。
また、質問の投稿も初めてなので、質問の仕方に何かご指摘があればお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2018/03/19 08:51

> 以下のサイトのツールを使用したところ正常に表示されたので、 とありますが、そのサイトのツールを使ったらiPhoneのFeliCaのIDmを読めたんだけど、自分で作ったご提示のソースではダメだった、と言うことですか?
ryo_274

2018/03/19 08:53

おっしゃる通りです。
guest

回答1

1

ベストアンサー

FeliCa対応iPhoneを持っていない為に、推測で申し訳ないのですが。

ご提示のツールFeliCa IDM表示ツールではiPhoneのFeliCaのIDmが読めた、と言うことですので、質問者様が書かれているように基本的な環境は大丈夫なように思います。

felicalib.dll はSONY提供のfelica.dllをほぼダイレクトに呼び出すラッパーなので、その辺は問題無いはずです。

あと違うのはアプリですので、やはりコードに問題があるかもしれません。フリーズするとのことですが、felicalibのAPIを呼び出したところ、例えばPollingで停まっている/返ってこないのでしょうか。

iPhone側は反応(Walletが表示?)するものの、質問者様のアプリで停まっているのであれば、RC-S380からのポーリングコマンドはiPhone側へ到達しています。FeliCaカードとして振舞っているiPhoneから返されるレスポンスの受信とその処理で停まっているかもしれません。フリーズしている部分(コードの場所)を特定してみてください。

また、コード中の不正な処理でExceptionが発生していると言うことはありませんか。

システムコード0xFFFFを使用すると、すべてのNFC/FelicaのIDを取得できると思っていたのですが、
別のシステムコードを使用するべきなのでしょうか。

システムコード0xFFFFはワイルドカードと呼ばれて、一般的にはどのFeliCaカードも応答を返します。
Qiitaの記事ですが、確認されている方がいらっしゃいました。FeliCaのPollingによるApplePayのWalletの動作

ただ、あくまで一般的にと言うだけで、0xFFFFのシステムコードに応答を返さない特殊なデバイスがあってもおかしくは無いように思います。iPhoneはそうではないと思いますが。

あと、少し気になったのは FeliCa IDM表示ツールはMicrosoft .NET Framework 4.0 が動作条件であるところ、質問者様のアプリは3.5対応、と言う点です。Windows10 では 3.5 は別途インストールするものなので、不整合があるかもしれないと思いました。が、PASUMOやnanacoは読めていると言うことですので、原因としての可能性は恐らく低いでしょう。ただ、疑わしい部分をつぶしていく、と言う程度の意味で動作条件を合わせてみる価値はあると思います。

投稿2018/03/19 10:19

dodox86

総合スコア9170

ryo_274👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_274

2018/03/19 10:48 編集

ご回答ありがとうございます。 特にコードは変更していないのですが、 iPhoneをロック画面の状態でリーダーにかざすと読み取ることができました。 しかし、その後指紋認証を行うとフリーズします。 また、指紋認証後のiPhoneをリーダーにかざすと、読み取れずフリーズします。 自分でもまた試行錯誤してみようと思います。 また何かお気づきのことがあれば、よろしくお願いします。
dodox86

2018/03/19 11:19

iPhone側の状態によって、ポーリングコマンドを一時的に受け付けなくなったり、iPhoneからRC-S380へのレスポンスが極端に遅くなったりして、Pollingのメソッドがうまく処理できないケースなどがあるのかもしれません。(タイムアウトして、リトライするなど)Polling周りの挙動に注意してみると何か分かるかも、です。
ryo_274

2018/03/19 11:21

ご回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

NFC

無線通信

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。