npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@taptrack/tappy-basicnfcfamily

v1.3.0

Published

Basic NFC command family for TCMP Tappies

Downloads

1,133

Readme

Tappy Communication Messaging Protocol (TCMP) command family for performing basic tag detection, reading, emulating, and writing operations.

Installation

Bower

bower install tappy-basicnfcfamily

NPM

npm install @taptrack/tappy-basicnfcfamily

Commands

Tag Detection Commands

var BasicNfc = require('tappy-basicnfcfamily');
var Commands = BasicNfc.Commands;

// All scan/stream commands take two parameters:
// timeout: number of seconds to scan for (0 disables, max 255)
// pollingMode: one of BasicNfc.PollingModes, defaults to GENERAL.
//     It is necessary to change to TYPE1 to detect NFC Forum Type 1
//     tags, while GENERAL covers Type 2 and 4.
// Scan commands detect a single tag and then quit. Stream commands continue
// until manually stopped or a fatal error occurs.

// Tag detection only detects the UID and type of the tag entering the field
var scanTag = new Commands.ScanTag(timeout, BasicNfc.PollingModes.TYPE1);
var streamTags = new Commands.StreamTags(timeout);

// NDEF detection only reports tags containing an NFC Forum compilant NDEF 
// message
var scanNdef = new Commands.ScanNdef(timeout, BasicNfc.PollingModes.GENERAL);
var streamNdef = new Commands.StreamNdef(timeout);

Tag Writing Commands

// All write commands have the same first two parameters:
// timeout: number of seconds to wait for a tag to be presented, 0->255
// lock: boolean determining if the tag should be locked after writing

// Writes a custom NDEF message to the tag. The data parameter should
// be a Uint8Array containing the bytes of a full NDEF message, excluding
// any tag technology-specific information
var writeCustom = new Commands.WriteNdefCustom(timeout, lockTag, ndefData);

// Writes an NDEF message with a single text record to the tag. The data 
// should be a string containing the text to be written.
var writeText = new Commands.WriteNdefText(timeout, lockTag, textData);

// Writes an NDEF message with a single URI record to the tag.
// The last data parameter is an NDEF URI record prefix code, while
// the URI data parameter contains the full URI without the prefix.
var writeUri = new Commands.WriteNdefUri(timeout, lockTag, uri, uriCode);

Tag Emulation Commands

// Emulation commands cause the Tappy to emulate a type 4 tag containing
// user-specified NDEF data.
// All emulate commands have the same first two parameters:
// timeout: number of seconds to emulate for, 0->255 (0 disables)
// maxScans: number of scans to emulate for, 0->255 (0 disables)

// Causes the Tappy to emulate a type 4 tag containing a user-defined
// NDEF message. The ndefData parameter should be a Uint8Array containing
// all the bytes of a full NDEF message, excluding any tag technology-specific
// information.
var emulateCustom = new Commands.EmulateNdefCustom(timeout, maxScans, ndefData);

// Causes the Tappy to emulate a type 4 tag containing an NDEF message
// with a single text record. 
// The textData should be a string containing the text you wish the
// emulated record to contain.
var emulateText = new Commands.EmulateNdefText(timeout, maxScans, textData);

// Causes the Tappy to emulate a type 4 tag containing an NDEF message
// with a single URI record. 
// The last data parameter is an NDEF URI record prefix code, while
// the uri data parameter contains the full uri without the prefix.
var emulateUri = new Commands.EmulateNdefUri(timeout, maxScans, uri, uriCode);

Utility Commands

// Cancel any operation. Primarily used for stopping operations with a 
// long or indefinite timeout.
var stop = new Commands.Stop();

// Request that the tappy return the version of the BasicNfc
// library that it supports.
var getLibraryVersion = new Commands.GetLibraryVersion();

Responses

Note: You should only manually construct responses as below for testing purposes. in practice, please use the resolver described later to convert raw TCMP messages received from the tappy into their corresponding concrete response types with the payloads parsed appropriately.

Utility Responses

// An error occured during a BasicNfc operation, has methods
var applicationError = new Responses.ApplicationError();
// retrieve the command family-specific error code as per BasicNfc.ErrorCodes 
applicationError.getErrorCode();
// retrieve the internal-use error code 
applicationError.getInternalErrorCode();
// retrieve the status reported by the Tappy's NFC Controller
applicationError.getReaderStatusCode();
// retrieve the text message describing the error (may be empty string)
applicationError.getErrorMessage();

// Response reporting the version of the BasicNfc command family on
// the tappy
var libVersion = new Responses.LibraryVersion();
libVersion.getMajorVersion();
libVersion.getMinorVersion();

Tag Detection Responses

// Response notifying the client of an Ndef-containing tag being detected
var ndefFound = new Responses.NdefFound();
// retrieve Tappy standard tag type code
ndefFound.getTagType();
// retrieve Uint8Array of the tag's UID
ndefFound.getTagCode();
// retrieve Uint8Array of the tag's Ndef message
ndefFound.getMessage();

// Response notifying the client that an operation timed out without detecting
// a tag
var scanTimeout = new Responses.ScanTimeout();

// Response notifying the client of a tag being detected
var tagFound = new Responses.TagFound();
// retrieve Tappy standard tag type code
tagFound.getTagType();
// retrieve Uint8Array of the tag's UID
tagFound.getTagCode();

Tag Writing Responses

// Response notifying the client that a tag was successfully written
var tagWritten = new Responses.TagWritten();
// retrieve Tappy standard tag type code
tagWritten.getTagType();
// retrieve Uint8Array of the tag's UID
tagWritten.getTagCode();

Tag Emulation Responses

// Response notifying that someone has scanned the emulated tag
var emulationScanSuccess = new Responses.EmulationScanSuccess()

// Response notifying that emulation has ended 
var emulationComplete = new Responses.EmulationComplete();
// retrieve the reason emulation completed, the
// value is a single byte as below:
// 0x01: timeout reached 
// 0x02: max scans reached
// 0x03: new instruction was received
emulationComplete.getReasonCode();
// retrieve the number of times the emulated tag was scanned
emulationComplete.getScanCount();

Resolver

While you can manually resolve raw TCMP messages received from the Tappy using getCommandFamily(), getCommandCode(), getPayload(), and parsePayload(), it is much more convenient to use the built-in resolvers and isTypeOf().

var resolver = new BasicNfc.Resolver();

// First, check to see if the family is the Basic NFC command family.
// This can be used to multiplex multiple resolvers from different families.
if(resolver.checkFamily(responseMsg)) {
    // This will throw if the command family doesn't match, so please check that
    // first. Additionally, this will return null if it does not recognize the
    // command code.
    var resolved = resolver.resolveResponse(responseMsg);
    if(resolved !== null && BasicNfc.Responses.LibraryVersion.isTypeOf(resolved)) {
        console.log("BasicNfc version v" + resolved.getMajorVersion() + "." + 
            resolved.getMinorVersion());
    }
}

There is a corresponding resolveCommand function for commands in case you are storing commands in a raw form. Note that commands and responses have overlapping commandCode space, so you'll need to keep track of whether the message was sent to the Tappy or received from it, and use the appropriate resolution function.