2015-09-09 9 views
5

मैं Chromebook पर वेबपैप बनाने का प्रयास कर रहा हूं, मुझे इसे एसीआर 122 यू एनएफसी के साथ आरएफआईडी कार्ड सीरियल नंबर पढ़ने की आवश्यकता है। मैं chrome-nfc का उपयोग कर रहा हूं।जब कोई एनएफसी कार्ड प्रस्तुत किया जाता है तो एक घटना को फायर करें

मैं खुशी से कार्ड पढ़ रहा हूं, लेकिन मुझे नहीं पता कि कार्ड कब प्रस्तुत किया जाता है।

क्रोम-एनएफसी में कोई घटना है क्या मैं यह जानने के लिए उपयोग कर सकता हूं कि पाठक को कार्ड कब प्रस्तुत किया गया है?

संपादित करें: मैं chrome.nfc.wait_for_tag का उपयोग करने का प्रयास कर रहा हूं, लेकिन जैसा कि मैं अपेक्षा करता हूं, व्यवहार नहीं करता है।

// With a card on the reader 
chrome.nfc.wait_for_tag(device, 10000, function(tag_type, tag_id){ 
    var CSN = new Uint32Array(tag_id)[0]; 
    console.log ("CSN: " + CSN); 
}); 

[DEBUG] acr122_set_timeout(round up to 1275 secs) 
DEBUG: InListPassiveTarget SENS_REQ(ATQA)=0x4, SEL_RES(SAK)=0x8 
DEBUG: tag_id: B6CA9B6B 
DEBUG: found Mifare Classic 1K (106k type A) 
[DEBUG] nfc.wait_for_passive_target: mifare_classic with ID: B6CA9B6B 
CSN: 1805372086 



// with no card on the reader 
chrome.nfc.wait_for_tag(device, 10000, function(tag_type, tag_id){ 
    var CSN = new Uint32Array(tag_id)[0]; 
    console.log ("CSN: " + CSN); 
}); 

[DEBUG] acr122_set_timeout(round up to 1275 secs) 
DEBUG: found 0 target, tg=144 

दोनों ठीक उसके ऊपर के रूप में परिणाम देते हैं, यह क्या संख्या मैं एक समय समाप्ति के लिए उपयोग करें ...

बात अगर मैं पाठक पर कोई कार्ड के साथ समारोह फोन तो तुरंत नहीं लगता है, और फ़ंक्शन कॉल के बाद कार्ड को रीडर पर रखें, मुझे कंसोल में कोई आउटपुट नहीं मिलता है।

उत्तर

2

मैं क्रोम एनएफसी से परिचित नहीं हूँ, लेकिन रिवर्स source इंजीनियरिंग द्वारा अंधेरे में एक शॉट ले, ऐसा लगता है आप wait_for_tag विधि, की तरह उपयोग करना चाहते हैं जैसे:

chrome.nfc.wait_for_tag(device, 3000, function(tag_type, tag_id) { 
    // Do your magic here. 
}); 

.. जहां device आपका पाठक है, 3000 प्रतीक्षा करने के लिए अधिकतम समय (एमएस में) है, और 0 वांछित तर्क के साथ // Do your magic here. को प्रतिस्थापित कर रहा है। यदि यह समय समाप्त हो जाता है, तो tag_type और tag_id दोनों null होंगे।

यदि आप अनिश्चित काल तक प्रतीक्षा करना चाहते हैं, तो आप उपर्युक्त कोड के साथ एक फ़ंक्शन को फिर से कॉल कर सकते हैं। उदाहरण:

function waitAllDay(device) { 
    chrome.nfc.wait_for_tag(device, 1000, function(tag_type, tag_id) { 
     if(tag_type !== null && tag_id !== null) 
     { 
      // Do your magic here. 
     } 
     waitAllDay(device); 
    }); 
} 

ऐसा लगता है कि आप टैग को प्रस्तुत करने के बाद भी प्रतीक्षा करना जारी रखना चाहते हैं। एक else में waitAllDay(device); को लपेटें यदि आप टैग पढ़ने के बाद इसे रोकना चाहते हैं।

अद्यतन: ऐसा लगता है कि wait_for_tag विधि इरादे से काम नहीं करती है, इसलिए मैं दूसरा समाधान प्रस्तावित कर रहा हूं। यदि क्रोम-एनएफसी के डेवलपर्स द्वारा विधि तय की जाती है तो मैं मौजूदा समाधान को जगह में छोड़ रहा हूं।

chrome.nfc.read का उपयोग करने के लिए timeout विकल्प में window.setInterval के अंदर उपयोग करने का प्रयास करने का एक और तरीका है।

var timer = window.setInterval(function() { 
     chrome.nfc.read(device, { timeout: 1000 }, function(type, ndef) { 
      if(!!type && !!ndef) { 
       // Do your magic here. 
       // Uncomment the next line if you want it to stop once found. 
       // window.clearInterval(timer); 
      } 
     }); 
    }, 1000); 

सुनिश्चित करें और window.clearInterval(timer) फोन जब भी आप यह टैग के लिए देखना बंद करना चाहते हैं।

+0

धन्यवाद आपके सुझाव के लिए @Grinn। हालांकि मुझे समस्याएं आ रही हैं, कि वास्तव में यह कोई इंतजार नहीं कर रहा है, यह हमेशा सीधे लौटता है। मैंने आउटपुट के उदाहरण के साथ प्रश्न अपडेट किया है। – Hank

+0

@Hank पाठक में कोई कार्ड नहीं होने पर 'tag_id' का मूल्य क्या है? – Grinn

+0

यह अपरिभाषित है ...जैसे कि फ़ंक्शन रद्द कर दिया गया है और यह इसे मेरे कॉलबैक – Hank

0

जबकि मैं इसे एक उचित समाधान नहीं मानता; यहां एक कामकाज है जिसका मैं समय के लिए उपयोग कर रहा हूं।

function listen_for_tag(callback, listen_timeout){ 

    var poll_delay = 400; //ms 
    var listen_loop = null; 
    if(!listen_timeout){ 
    listen_timeout = 99999999; 
    } 

    function check_for_tag(){ 
    if(listen_timeout < 0) { 
     clearInterval(listen_loop); 
     console.log("we didnt find a tag. finished"); 
    } 
    chrome.nfc.wait_for_tag(dev_manager.devs[0].clients[0], 10, function(tag_type, tag_id){ 
     console.log ("FOUND A TAG!!"); 
     clearInterval(listen_loop); 

     // handle the callback (call it now) 
     var C = callback; 
     if (C) { 
     callback = null; 
     window.setTimeout(function() { 
     C(tag_type, tag_id); 
     }, 0); 
     } 
    }); 
    listen_timeout -= poll_delay; 
    } 
    listen_loop = setInterval(check_for_tag, poll_delay); 
} 
संबंधित मुद्दे