DevCon 2025: Connect | Learn | Build

June 4 - 6, 2025

Amsterdam, Netherlands

Explore Advanced Windows Development for RFID Readers and POS Integration

Presented by Suresh Ramamoorthy, Senior Manager, Software Engineering, Advanced Location Technologies

Agenda

  1. SDK/Tools

    • Architecture
    • Windows
    • RFID.NET SDK
    • 123RFID Desktop
    • JPOS
    • RFID Scanner Driver - Demo App
  2. New Products

    • FXP20 POS Reader
    • RFID Accessory for ET6xW
  3. Technical Resources

  4. Best Practices

RFID System: Physical View

Identify and track objects wirelessly. Operates at a frequency of 860-930 MHz (Ultra High Frequency). Read range up to 20 meters.

Host system: Manages and controls the reader for reading tags or programming tags. Can be a Computer, Server, or Cloud-based platform.

Reader: Transmits radio frequency to activate the tag for receiving, decoding/encoding the tag.

Antenna: Transmits radio frequency to the tag and receives data from the tag. Polarization can be Linear (predictable placement) or Circular (unpredictable placement).

Tag: Attached to the asset/item being tracked. Contains Microchip and antenna. Passive tags rely on reader energy and have a reading range up to 20m. Active tags have an internal power source for longer distances (up to 100m reading range).

RFID Standards (GS1): EPC UHF Gen2 Air interface Protocol. Provides physical and logical requirements for an RFID System. See GS1 UHF Air Interface Protocol.

RFID Tag: Logical View

Memory Bank: USER (optional), TID, EPC, RESERVED.

Target: Inventoried Flag (SO, S1, S2, S3).

Default Persistence: Indefinite, 500ms to 5s.

Not Energized: None, 500ms to 5s, 2s.

Reserved: Kill (1st and 2nd word), Access passwords (3rd and 4th word).

EPC: Identifies the asset/item.

TID: Tag manufacturer specific information (Tag Model, serial number). Permanently locked during tag manufacturing.

USER: Allows user-specific data storage.

Tag States: Sessions support four sessions (S0, S1, S2, S3). Tags participate in one session during inventory. Inventoried flag can be A or B. Select Flag (SL) can be asserted or deasserted.

Manage Tag Population: C1G2 Standard

Select (Pre-filter):

Selects the tag population. Target indicates whether Tag's SL or inventoried flag. Action indicates whether matching tags modify SL (Assert SL or Deassert SL) or inventoried flag (A or B). Memory Bank (EPC, TID or User Memory). Start Location, Length, Mask (bit string that tag compares).

Inventory (Singulation):

Determines which tags to be participated. Sel: which tags to respond based on SL flag (0: ALL, 1: ALL, 2: ~SL, 3: SL). Session: choose the session for the inventory round (0: S0, 1: S1, 2: S2, 3: S3). Target (inventoried flag) (0: A, 1: B). Q: Tag population in the range of antenna.

Access Commands:

Select Tags Matching with EPC "3074":

Target: SO, Action: 4. Mem Bank: EPC. Start Location: 32. Length: 16. Mask: "3074".

Inventory (Singulation)

Sel: 0. Session: SO. Target: B. Q: 8.

Action Matching Non-Matching
0 assert SL or inventoried -> A deassert SL or inventoried -> B
1 Assert SL or inventoried -> A do nothing
2 do nothing deassert SL or inventoried -> B
3 negate SL or (A->B, B->A) do nothing
4 assert SL or inventoried -> B assert SL or inventoried -> A
5 assert SL or inventoried -> B do nothing
6 do nothing assert SL or inventoried -> A
7 do nothing negate SL or A -> B, B->A)

3C Framework: Advance RFID Integration Quickly

RFID API: Structure

Generic Reader

Reader Management

RFID Windows SDK: Architecture

User Application interacts with 123RFID Desktop and RFID Handheld Reader SDK.

The SDK supports various Zebra RFID readers including:

Connectivity options include USB-CDC, USB-CDC/Bluetooth, USB-CDC/Bluetooth/Ethernet, and USB/Bluetooth: Serial Ethernet: TCP/IP.

Requires Windows 11 64-bit and above, .NET Framework 4.8, and Visual Studio.

RFID Handheld Reader SDK: Windows

This SDK supports handheld RFID readers (RFD40/90, RFD8500, ET6xW, FXP20).

Tools:

Prerequisites:

Release Package:

RFID .NET SDK: Generic Reader

Connect Configure Control
Discover & Connect
  • Create Reader Instance
  • Transport: USB
  • ReaderType.FXP
  • Connect()
Settings
  • Antenna (Power, Pre-filter, Singulation, RF Mode)
  • Configurations.Antennas[index].Configuration (getter/setter)
  • Transmit PowerIndex
  • RF Mode
  • Singulation Control
  • Setup Event Streaming using .NET event handler (+=)
  • Read Notification
  • Status Notification
  • Profiles (ET6xW)
  • Configurations.GetRFIDProfiles()
  • Configurations.SetRFIDProfile(Profile)
Reading Tags
  • Read tags (Start/Stop Conditions)
  • Inventory.Perform()
  • Continuous Read
  • Inventory.Perform(), Inventory.Stop()
Tag Queue
  • Inventory.GetReadTags(Number of tags)
Programming Tag
  • Write a Tag
  • AccessOperations.TagWrite.Write()
  • Lock a Tag
  • AccessOperation.TagLock.Lock()
  • Kill a Tag
  • AccessOperation.TagKill.Kill()
Events
  • Tag Data Received, InventoryStarted, InventoryStopped
Disconnect
  • Disconnect()

RFID .NET SDK: Reader Management

Connect Configure Monitor Control
Discover & Connect
  • Create Reader Instance
  • Transport: USB
  • ReaderType.FXP
  • Connect()
Region (Persistent)
  • Configurations.RegulatoryConfig (getter/setter)
  • Region
  • Hopping
  • Channels
  • Setup Event Streaming
  • N/A
N/A Software Update
  • Software Update.Update (firmwareFileName)
  • Poll Update progress status
  • SoftwareUpdate.UpdateStatus.Percentage
  • SoftwareUpdate.UpdateStatus.UpdateInfo
Factory Reset
  • ResetFactoryDefaults()
Disconnect
  • Disconnect()

Read Tags Demo (C# Example)

This C# code demonstrates how to connect to a reader, configure it, and read tags.


using Symbol.RFID.SDK.Domain.Reader;
using Symbol.RFID.SDK;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Threading;

//CONNECT: Discover and connect to the reader
Console.WriteLine("Finding readers....");
var readerInfoList = new List();
var readerManager = RfidSdk.ReaderManagementServicesFactory.Create(ReaderCommunicationMode.USB);
readerInfoList = readerManager.GetReaders (ReaderSearchOptions.AllReaders);
List readerList = new List();
foreach (IRfidReaderInfo readerInfo in readerInfoList.OrderBy(o => o.FriendlyName))
{
    var reader = RfidSdk.RfidReaderFactory.Create(readerInfo);
    Console.WriteLine("Found reader:-"+ reader.FriendlyName);
    readerList.Add(reader);
}

if(readerList!=null && readerList.Count>0)
{
    var fxp20Reader=readerList.FirstOrDefault(ee=>ee.ReaderType==ReaderType.FXP);
    if(fxp20Reader!=null)
    {
        Console.WriteLine("Connecting FXP20 reader-" + fxp20Reader.FriendlyName);
        fxp20Reader.Connect();
        Console.WriteLine("Connected-"+ fxp20Reader. FriendlyName+ "\n");
        // CONFIG: Setup Events
        fxp20Reader.Inventory.AttachTagDataWithTagDataReceivedEvent = false;
        fxp20Reader.Inventory.InventoryStarted += Inventory_InventoryStarted;
        fxp20Reader.Inventory.InventoryStopped += Inventory_InventoryStopped;
        // CONTROL: Read tags for 2s
        Console.WriteLine("Performing Inventory for 2 sec...");
        fxp20Reader. Inventory. Perform();
        Thread.Sleep(2000);
        fxp20Reader.Inventory.Stop();
        var tagDataArr = fxp20Reader. Inventory.GetReadTags (1000);
        foreach (ITagData dataReceived in tagDataArr)
            Console.WriteLine("Tag ID: "+ dataReceived.EPCId);
        // Disconnect reader
        fxp20Reader. Disconnect();
    }
}

// Event Notifications
private static void Inventory_InventoryStarted(object sender, EventArgs e)
{
    Console.WriteLine("Event: Inventory started.\n");
}
private static void Inventory_InventoryStopped(object sender, EventArgs e)
{
    Console.WriteLine("Event: Inventory stopped.\n");
}
  

123RFID Desktop: Demo

123RFID Desktop is a simple setup and optimization tool for Zebra's passive RFID readers. Supported models include FX7500, FX9600, RE40, ATR7000, RFD40, FXR90, RFD90, ET6xW and FXP20.

What you can do:

  1. Read Tags: 3-clicks from launch to reading tags.
  2. Optimize Reader: Configuration wizard streamlines setup, 1-click Start/Stop starts and stops inventory. Filter by Reader, EPC, RSSI or Asset Tag list file helps with trend analysis.
  3. Write Tags: Perform tag memory access operations including writing to EPC and User Memory bank.
  4. Program GPIO accessory: Setup a proof of concept demonstrating solutions using GPIO accessories.
  5. Update Firmware: Update firmware on multiple readers (20 max) at once.
  6. Built-in Help: Screen-by-screen explanation of capabilities and how-to videos.

JPOS Driver for FXP20

POS Standards Overview:

JPOS/UnifiedPOS: Architecture

The architecture involves a POS Application interacting with a UnifiedPOS Device, which includes UnifiedPOS Control (Javapos-controls.jar) and Unified POS Service (jpos-rfidscanner-svc-3.0.2 (Zebra)). This communicates with the Physical (or logical) Device (FXP20) via USB CDC. JPOS.XML (Logical Name: ZebraRFIDScanners) is used for configuration.

JPOS RFID Scanner: Capabilities

The RFID Scanner can fire events such as DataEvent, OutputCompleteEvent, and ErrorEvent to indicate the status of operations.

JPOS RFID Driver: Windows

RFID Reader: Generic Reader

Connect Configure Control
Discover & Connect
  • Open()
  • Claim()
Settings
  • Read Timer Interval
  • Setup Event Streaming
    • addDataListener
    • addOutputCompleteListener
    • addErrorListener
Reading Tags
  • readTags (filter, timeout, password)
  • Continuous Read
  • StartReadTags(), StopReadTags()
Tag Queue
  • firstTag(), nextTag(), PreviousTag()
Write a Tag
  • writeTagID(), writeTagData()
Lock a Tag
  • lockTag (tagID, password)
Kill a Tag
  • disableTag (tagID, password)
Events
  • DataEvent, ErrorEvent, OutputCompleteEvent
Disconnect
  • Release(), Close()

RFID Reader: Reader Management

Connect Configure Monitor Control
Discover & Connect
  • Open()
  • Claim()
Setup Event Streaming
  • addStatusUpdateListener for firmware update
  • JPOS.XML
  • Default Transmit Power
checkHealth Software Update
  • updateFirmware (firmwareFileName)
Disconnect
  • Release(), Close()

Read Tags Demo (Java Example)

This Java code demonstrates how to connect to a reader, configure it, and read tags using JPOS.


import jpos. JposException;
import jpos.RFIDScanner;
import jpos.events.*;

public class JavaPosReadTagsDemo {
    static String logicalName = "ZebraRFIDScanners";
    static RFIDScanner reader = null;
    static private DataListener dataListener;

    public static void main(String[] args) throws JposException {
        reader = new RFIDScanner();
        // 1. CONNECT
        reader.open(logicalName);
        reader.claim(1000);
        // 2. CONFIGURE
        reader.setDeviceEnabled(true);
        reader.addDataListener(dataEventListener);
        // 3. CONTROL
        reader.readTags(RFID_RT_ID, new byte[0], new byte[0], 0, 0, 5000, new byte[0]);

        try {
            Thread.sleep(1000);
        } catch (InterruptedException jposException) {
            jposException.printStackTrace();
        }

        try {
            reader.firstTag();
            for (int index = 0; index < reader.getTagCount() - 1; index++) {
                String tagID = new String(reader.getCurrentTagID());
                System.out.println("Tag ID " + tagID);
                reader.nextTag();
            }
        } catch (JposException e) {
            e.printStackTrace();
        }

        // Dispose Reader
        reader.release();
        reader.close();
    }

    static DataListener dataEventListener = new DataListener() {
        @Override
        public void dataOccurred(DataEvent dataEvent) {
            System.out.println("dataOccurred STATUS : " + dataEvent.getStatus());
        }
    };
}
  

JPOS Sample App: Demo: Run JavaPOSTest.bat

This demonstrates the functionality of the JPOS Sample App by running the JavaPOSTest.bat file.

FXP20 POS Reader

FXP20 Fixed RFID Reader: Specification

FXP20 Fixed RFID Reader: External Interfaces

Front View: Includes RFID Reading Area, Power LED, COM LED, RFID LED, Internal buzzer, ABS UL94V0 case.

Side View: Includes DC Power connector, GPI connector, USB connector, Reset Button, Antenna Port 2, Antenna Port 3, Antenna Port 4.

ET6xW Tablet: Specification

Smart Inventory: Profiles

Profile Description Transmit power Duty Cycle Session Tag Population Link Profile
Optimal Battery For Best battery life 20dBm 15% RF ON: 100ms Period: 667ms S0 3 0
Balanced Performance (Default) Maintains Balance between performance and battery life 20dBm 25% RF ON: 150ms Period: 600ms S0 3 0
Max range Reads as many tags as fast as possible in longer range 24dBm 30% RF ON: 150ms Period: 500ms S0 10 2
Fastest Read Reads as many tags as fast as possible in shorter range 20dBm 35% RF ON: 175ms Period: 500ms S0 10 2
Cycle Count Reads unique tags 24dBm 30% RF ON: 150ms Period: 500ms S2 50 0

Link Profile table:
0: M=4/240, PIE=2, Tari=25us
1: M=2/320, PIE=2, Tari=18.8us
2: M=4/320, PIE=2, Tari=18.8us

Technical Resources

Resources: SDK/Tools/Documentation

RFID: Best Practices

SDK/Tool: Upcoming features (FXP20)

Questions?

Thank You

©2025 Zebra Technologies Corp. and/or its affiliates. All rights reserved.

PDF preview unavailable. Download the PDF instead.

av11-presentation-customer-facing-devcon2025-en-us

Related Documents

Preview Developing for Zebra RFID: A Comprehensive Guide for Handheld and Fixed Readers
This guide provides a comprehensive overview of developing for Zebra RFID readers, covering APIs, frameworks, use cases, and best practices for both handheld and fixed readers. It details connection methods, reader management, and various application scenarios like inventory, location tracking, bulk encoding, and conveyor belt reading.
Preview Mastering Zebra RFID: Optimizing Reader Performance with Real-Time Health Monitoring and Gen2X Extensions
A guide to mastering Zebra RFID technology, focusing on optimizing reader performance through real-time health monitoring and leveraging Gen2X extensions. Covers device status, API overview, health monitoring, IoT connector configurations for fixed readers and sleds, MDM integration, handheld SDK usage, Gen2x features, and best practices for RFID implementation.
Preview 123RFID Desktop User Guide - Zebra Technologies
Comprehensive user guide for Zebra's 123RFID Desktop software, detailing how to connect, read, configure, and manage Zebra RFID readers like the FX7500, FX9600, RFD40, and RFD90.
Preview Zebra FX Series 3.8.22 Firmware Release Notes and Update Guide
Comprehensive release notes for Zebra FX Series RFID readers (FX7500, FX9600) firmware version 3.8.22, detailing new features, installation, known issues, and software components.
Preview Zebra RFD40 RFID Sled Quick Start Guide
A concise guide to setting up and using the Zebra RFD40 RFID Sled with the TC20 Mobile Computer, covering features, installation, charging, software, and optimal usage.
Preview Zebra Workabout Pro 4 RFID Modules: Hardware and Software Guide
Comprehensive guide to Zebra Workabout Pro 4 RFID modules, detailing UHF, HF, and LF hardware specifications, software compatibility, and options. Includes model numbers WA9901 through WA9906.
Preview Zebra FX Series Embedded Java SDK User Guide for Windows
Guide for developers on using the Zebra FX Series Embedded Java SDK for Windows. Learn to develop, debug, and package Java applications for FX9600/FX7500 RFID readers, covering SDK installation, remote debugging, JAR creation, and deployment.
Preview Zebra RFID SDK for Android v2.0.2.125 Release Notes and Overview
Summary of Zebra RFID SDK for Android v2.0.2.125, detailing updates, bug fixes, device compatibility, and developer system requirements for integrating RFID functionality into Android applications.