我们正在尝试通过 nfc-p2p、android-beam 和 snep 将一个大文件从 android 手机发送到 mikroprocessor。
这就是我们目前所拥有的。我可以将 pn532(目标)与电话(启动器)连接。我的 android 应用程序使用 setNdefPushMessage 通过 nfc 发送 NdefMessage。 只要我点击电话 (Beam-UI),它就会开始与我的 pn532 上的 SAP 4 连接,并且在读取命令 (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 6 5 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 7 4 65 73 74
要清理它:
PN532 header :00 FF 86 7A D5 87 00
未设置 MI 位!
LLCP header :13 20 00
I-Package 从 SAP 32 到 4
SNEP header :10 02 00 00 03 BD
版本 10 请求 PUT len 0x3bd
NDEF header :C1 01 00 00 03 B6 54
c1: start+EndMessage
留言……剩下的
我用 MUI 128 完成了连接。
我的问题: 它说 SNEP 包的长度为 0x3BD 字节,但我只收到了这一小部分。 此消息中没有任何地方表明它是否是拆分消息。
我的其余数据在哪里? 我试图从 pn532 读取更多包,但没有。
** 编辑:
经过一夜的尝试,我终于到了某个地方。至少有时有效的方法:(全部来自 PN532 的观点)
接收:连接
发送:连接完成[MUI=128]
收到:SYMM
发送:SYMM
接收:我先 fragment 数据(如上图)
发送:RR
收到:SYMM
发送:我SNEP:响应继续
收到:RR
发送:我SNEP:请求继续
接收:我第二个 fragment 数据
发送:RR
收到:RR
发送:我SNEP:请求继续
收到:我第三个数据 fragment
就像我说的,这只在某些时候有效。大多数时候,我的 PN532 只是响应错误代码 0x29 -> 启动器断开了连接。所以问题是它可能是时间问题还是什么导致连接在发送其余数据之前被丢弃。
最佳答案
SNEP 被设计为在 LLCP 数据链路连接(一对使用 CONNECT 建立的源和目标 SAP)之上运行的简单请求/响应协议(protocol)。客户端请求服务器执行一个操作,服务器返回响应。通过 PUT 操作,客户端将数据附加到请求中。如果请求随后超过 LLCP 信息 PDU 的最大信息单元大小,则客户端以适当的 fragment 传输请求。第一个 fragment 通知服务器它应该准备从客户端接收的八位字节数。如果服务器能够接收数据,它会用 Continue 响应回答第一个 fragment ,如果数据大小超过服务器的能力,它会用 Reject 响应停止交换。在客户端收到 Continue 响应后,它将发送所有剩余的 fragment 而不期望中间响应。服务器在收到所有请求数据后最终发送成功响应,如长度值所示。同样的原则适用于大型 SNEP 响应,只是 Continue 或 Reject 是请求消息(因为它们是由客户端发送的)。
关于Android Beam 和 SNEP 到 pn532,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28718434/