1

nfc-p2p、android-beam、snepを介して、Androidフォンからマイクロプロセッサーに大きなファイルを送信しようとしています。

これは、これまでのところです。pn532 (ターゲット) を電話 (イニシエーター) に接続できます。私の Android アプリは setNdefPushMessage を使用して、nfc 経由で NdefMessage を送信します。電話 (Beam-UI) をタップするとすぐに、pn532 で SAP 4 との接続が開始され、readcommand(tgGetData) の後に次のメッセージが表示されます。

00 FF 86 7A D5 87 00 13 20 00 10 02 00 00 03 BD C1 01 00 00 03 B6 54 30 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 31 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 32 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 33 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 34 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74

クリーンアップするには: PN532 ヘッダー: 00 FF 86 7A D5 87 00MI ビットが設定されていません!
LLCP ヘッダー: 13 20 00SAP 32 から 4 への I-Package
SNEP ヘッダー:10 02 00 00 03 BDバージョン 10 要求 PUT len 0x3bd
NDEF ヘッダー: C1 01 00 00 03 B6 54c1: start+EndMessage
メッセージ ... 残り

MUI 128 で接続を完了しました。

私の問題: SNEP パッケージの長さは 0x3BD バイトですが、この短い部分しか受信していません。このメッセージのどこにも、それが分割メッセージであるかどうかを示すものはありません。

残りのデータはどこにありますか? pn532 からさらにパッケージを読み込もうとしましたが、何もありませんでした。

**編集:一晩試した後、ようやくどこかにたどり着きました。少なくとも時々機能したもの:(すべて PN532 の観点から)
receive: Connect
send: Connect complete[MUI=128]
receive: SYMM
send: SYMM
receive: I first Fragmented Data(上記のように)
send: RR
receive: SYMM
送信: I SNEP: 応答 CONTINUE
受信: RR
送信: I SNEP: 要求 CONTINUE
受信: I 2 番目の断片化されたデータ
送信: RR
受信: RR
送信: I SNEP: 要求 CONTINUE
受信: I 3 番目のデータ フラグメント

私が言ったように、これは数回しか機能しません。ほとんどの場合、PN532 はエラー コード 0x29 で応答します -> イニシエータが接続を切断しました。したがって、質問は、タイミングの問題である可能性がありますか、それとも残りのデータを送信する前に接続が切断される他の原因である可能性があります。

4

1 に答える 1

1

SNEP は、LLCP データ リンク接続 (CONNECT で確立された送信元と送信先の SAP のペア) 上で実行される単純な要求/応答プロトコルとして設計されています。クライアントは、サーバーが実行する操作を要求し、サーバーは応答を返します。PUT 操作では、クライアントはデータをリクエストに添付します。要求が LLCP 情報 PDU の最大情報単位サイズを超える場合、クライアントは適切なフラグメントで要求を送信します。最初のフラグメントは、クライアントから受信する準備が必要なオクテット数をサーバーに通知します。サーバーがデータを受信できる場合は、Continue 応答で最初のフラグメントに応答します。データ サイズがサーバーの能力を超えている場合は、Reject 応答で交換を停止できます。クライアントは Continue 応答を受信した後、中間応答を期待せずに残りのすべてのフラグメントを送信します。サーバーは、長さの値で示されているように、すべての要求データを受信した後、最終的に成功応答を送信します。同じ原則が大きな SNEP 応答に適用されますが、Continue または Reject のみが要求メッセージになります (それらはクライアントによって送信されるため)。

于 2015-02-26T12:19:02.423 に答える