我正嘗試使用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');
但是,這並沒有什麼差別的。
謝謝!
感謝,這是真正有用的,我看完後也...... facepalmed很明顯當你想想看,但由於某種原因,它並沒有越過我的心! –
順便說一下,對於其他人來說,我發現WireShark可以在USB上嗅探CCID數據包,因爲這篇博客文章是這樣的:http://ludovicrousseau.blogspot.co.uk/2014/10/ccid-usb-spy-using -wireshark.html –
然後把我引向WireShark的C代碼,這幫助我爲CCID消息構建了一個基本的通信協議類。其他人也可以找到經過良好評論的使用代碼:http://code.metager.de/source/xref/wireshark/epan/dissectors/packet-usb-ccid.c –