2015-11-05 27 views
2

我正嘗試使用Node.js和https://github.com/nonolith/node-usb NPM模塊與ACR1252U NFC讀卡器(http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/)進行通信。通過Node.js與ACR1252U NFC讀卡器通話

我創建了一個簡單的腳本來獲取閱讀器USB設備並監聽事件。

當NFC卡開始與讀者聯繫我收到一個緩衝區:

<Buffer 50 03> 

當NFC卡從讀帶走我收到一個緩衝區:

<Buffer 50 02> 

這表明我至少能夠與讀者進行一些基本的交流。

我現在的問題是我試圖在與讀卡器接觸時獲取有關NFC卡的信息。我試圖向讀者發送數據,但無法獲得一致的響應(有時我得到緩衝區響應,有時候我不會,一遍又一遍地運行相同的命令)。

我決定簡化命令我會發送到剛剛打開和關閉讀者的內置蜂鳴器,所以我看着它說,激活您發送通過蜂鳴器的API文檔(http://www.acs.com.hk/download-manual/6402/API-ACR1252U-A1-1.07.pdf):

E0h 00h 00h 28h 01h + 1 byte to determine duration of buzzer activation 

考慮到這一點我創建了一個緩衝:

var buf = new Buffer(6); 
buf.write('e00000280108', 'hex'); 

然後使用USB模塊的OUT端點發送的數據:

outEndpoint.transfer(buf, function (err) { 
    console.log('out transfer', err); 
}); 

控制檯記錄「out transfer」沒有錯誤,但沒有收到「in」端點的內容。

如果我創建一個64字節的緩衝區,而不是:

var buf = new Buffer(64); 
buf.write('e00000280108', 'hex'); 

outEndpoint.transfer(buf, function (err) { 
    console.log('out transfer', err); 
}); 

我收到來自「中的」端點的響應:

<Buffer e0 00 00 00 00 01 00 42 ff 00> 

這似乎並不符合什麼期望從該手冊並沒有激活蜂鳴器。

我很新的,直接與這樣的USB設備和我這種類型的上次的經驗進行通信時發送AT命令在天回調制解調器:)

任何人都可以擺脫任何光線就我在做什麼錯誤?我認爲發送64字節而不是6與USB標準需要設置長度或類似的東西有關?!?是否有其他人有過使用Node.js與NFC閱讀器(非HID)通信的經驗?最終,我想要做的就是能夠將一些數據寫入NFC標籤,並在標籤出現後再讀回。

我認爲這將是一個非常簡單的過程,但我很難過!也許我應該以不同的方式編碼數據?也許我沒有正確地終止數據?我只是不知道!

我試圖通過1增加緩衝區大小,並通過添加\ 0終止的緩衝區:

buf.write('\0', 6, 'utf-8'); 

但是,這並沒有什麼差別的。

謝謝!

回答

2

在API說明書中描述的命令是(僞)APDU命令是與讀取器在PC/SC交換。當您通過USB直接訪問閱讀器而沒有PS/SC抽象層(請參閱http://www.pcscworkgroup.com/specifications/overview.php)時,您必須自己實現該抽象。因此,您必須自己實現USB CCID(芯片卡接口設備)類接口。實質上,這意味着您必須在CCID協議中封裝APDU命令。你可以在這裏鰭規格:http://www.usb.org/developers/docs/devclass_docs/

+0

感謝,這是真正有用的,我看完後也...... facepalmed很明顯當你想想看,但由於某種原因,它並沒有越過我的心! –

+1

順便說一下,對於其他人來說,我發現WireShark可以在USB上嗅探CCID數據包,因爲這篇博客文章是這樣的:http://ludovicrousseau.blogspot.co.uk/2014/10/ccid-usb-spy-using -wireshark.html –

+1

然後把我引向WireShark的C代碼,這幫助我爲CCID消息構建了一個基本的通信協議類。其他人也可以找到經過良好評論的使用代碼:http://code.metager.de/source/xref/wireshark/epan/dissectors/packet-usb-ccid.c –