2012-03-02 45 views
2

我一直在使用javax.cardio包來從我的Nexus S通過ACR122U接收NDEF消息。我創建了一個Android Beam應用程序,它發送一個簡單的文本「Hello!」當意圖過濾NDEF_DISCOVERED標記時。當使用TgGetData(0x86可以)命令我似乎得到:試圖使用ACR122連接到com.android.npp,但得到錯誤說[NFCSTATUS_INVALID_STATE]

NfcP2pLinkManager(7588): Sending ndef via SNEP 
NFC JNI(7588): Socket not connected 
NFC JNI(7588): LLCP Link deactivated 
NFC JNI(7588): LLCP Connect request failed 
NfcService(7588): LLCP Link Deactivated message. Restart polling loop. 
NFC JNI(7588): phLibNfc_Llcp_Close() returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 
NfcP2pLinkManager(7588): Failed to connect over SNEP, trying NPP 
NdefPushClient(7588): about to create socket 
NfcP2pLinkManager(7588): LLCP deactivated. 
NdefPushClient(7588): about to connect to service com.android.npp 
NFC JNI(7588): phLibNfc_Llcp_ConnectByUri() returned 0x0011[NFCSTATUS_INVALID_STATE] 
NdefPushClient(7588): couldn't send tag 
NdefPushClient(7588): exception: 
NdefPushClient(7588): java.io.IOException 
NdefPushClient(7588): at 
com.android.nfc.nxp.NativeLlcpSocket.connectToService(NativeLlcpSocket.java:47) 

我下面的ACR122的APDU工作流程基本上是:

1) TgInitAsTarget = 0xD4, 0x8c 
2) TgGetData = 0xD4, 0x86 
3) TgSetData = 0xD4, 0x85, 0x81 
4) TgGetData = 0xD4, 0x86 

有誰知道爲什麼我不能連接到「 com.android.npp「服務的Nexus S?

回答

0

我發現了爲什麼我的問題正在發生。一旦我通過TgGetData接收到來自手機的第一組字節,就不需要發送CONNECT APDU。在第一個字節流之後,發送一個CC APDU或一個CONNECTION COMPLETE。對於那些誰需要幫助,APDU的應該是:

1) TgInitAsTarget 0xD4 0x8C 
2) TgGetData 0xD4 0x86 
3) TgSetData (CC) 0xD4 0x8E - no need to send the service name. Simple the DSAP-CC-SSAP bytes. That's it. 
4) TgGetData 0xD4 0x86 - you should get your data in this byte stream. 
5) TgRelease 0xD4 0x8E 

記住:您必須切換你從手機四周得到您的TgSetData使用DSAP和SSAP。祝你好運!

+0

請你可以複製/粘貼你的通信的所有字節序列?我花了一個星期的時間嘗試從我的手機發送一個NDEF消息到我的ACR122U閱讀器,但一直不可能:( – OverMind 2017-03-06 14:07:17

+0

@OverMind,因爲我從這個項目中移除了,我不再有這些序列了,我會快速瀏覽我的檔案找到它們,當時我正在研究Nexus S,因此這些序列對於您的手機和/或操作系統可能不一定相同。 – codedawg82 2017-03-07 22:15:49

-1

請參閱this ACP122的核電廠實施如何實現。

+0

這個人有我非常相似的代碼。我使用了以下ADPU: (字節)0xd4,(字節)0x8e --- TgSetData (字節)0x05,(字節)0x21,(字節)0x06,(字節)0x0f, (字節)0x63,(字節) 0x6f,(字節)0x6d,(字節)0x2e,(字節)0x61, (字節)0x6e,(字節)0x64,(字節)0x72,(字節)0x6f,(字節)0x69, (字節)0x64,(字節)0x2e,(字節)0x6e,(字節)0x70,(字節)0x70 這連接到服務,我收到ndefmessage,但它仍然沒有完成梁。它拋出了一個名爲「NdefPushServer:錯誤格式化的NDEF消息,忽略」的錯誤 - 一個IOException,我懷疑梁失敗了。任何想法爲什麼? – codedawg82 2012-03-03 21:50:57

+0

難道是你的「你好!」消息未封裝在NDEF消息中(即使用文本RTD)? – 2012-03-04 20:03:13

+0

我試圖從我的手機收到Hello消息,Android SDK足以提供API轉換爲NDEF。我已經使用了Nexus的Nexus和其他Nexus,並且信息正確。我想知道是否需要爲手機可以連接的ACR本身創建一個com.android.npp服務...我說這是由於以下調試行的唯一原因 - NdefPushClient(7588):about連接到服務com.android.npp – codedawg82 2012-03-05 00:35:08

相關問題