AdvanPay-500
Introduction
AdvanPay-500 features:
AdvanPay-500 is an RFID conditional detacher of hard-tags for self-checkout in retailstores
AdvanPay-500 removes the hard tags from garments easily and quickly, avoiding queues in the payment process while offering the maximum security for the retailer.
AdvanPay-500 is compatible with Concept Tags. Concept hard tags have a very robust locking mechanism that achieves higher theft reduction than magnetic hard tags.
Introduction
AdvanPay-500 features a Jadak's RFID UHF M6e-Nano module that is used to control the deactivation of tags, by using its GPIO lines.
The connection with the RFID module is a uart over USB.
Jadak's Mercury SDK is required to control operation of AdvanPay-500. The following development languages are supported:
Java (including Android)
C#
C/C++
The most common work flow is as defined in the below diagram
Getting Started
Helpful downloads:
Download Datasheet (see download files section)
These are the minimum steps to start using AdvanPay-500
1. Power AdvanPay unit
Follow these steps:
Connect the provided USB mini-B cable to a computer.
Connect the provided 12 V(DC) power supply to the unit.
2. Operation
AdvanPay-500 is fully operated through Jadak's Mercury API. It is fully compatible with any application developed with Mercury API.
In particular Jadak's Universal Reader Assistant (URA) can be used for easy validation of the unit. URA can be downloaded freely from
https://www.jadaktech.com/product/thingmagic-universal-reader-assistant/
Once installed, connect one AdvanPay-500 unit and launch URA.
AdvanPay-500 will be automatically detected. Click on Next
The next page allows you to select a region and to enable the ony available antenna (1). The region selection must be done according to the model (EU/US) and the current country/region of operation.
EU model covers country/regions using ETSI or regions in the same frequency band
US model covers country/regions using FCC or regions in the same frequency band
Note: because it uses Jadak's API, Java development is restricted to JDK 8.
After selecting the region and antenna, click on Next
RFID operation
Click on Connect
Adjust the Read Power to 12.5 dBm
Click on Read, on the left side pane
Approach a tag and you should see the TAG EPC onscreen.
Deactivation
Deactivation is done controlling GPIO#2 of the RFID module. As GPIO lines are bidirectional, we have to make sure GPIO#2 is configured as an output.
Stop RFID operation, after that go to Read&Write options to configure the GPIO
Select GPIO#2
Change direction to Output
Place a Concept Tag in position in AdvanPay-500
Select High level. If the Tag is in the right position it will be deactivated and it can be easily detached in two parts
Select Low level again, otherwise AdvanPay-500 will keep deactivating the tag.
Note AdvanPay-500 will only deactivate tags if they are detected at the right spot. try removing the tag and enabling the GPIO#2, nothing happens.
Beeper
The beeper works exactly the same as the deactivation, but at line GPIO#1
Define GPIO#1 as an Output
Change the status to High to hear the beep.
Tag detection
Tag detection is managed automatically during normal operation. However, it is important to understand how it works.
Tag detection uses GPIO#3, in this cased used as an input:
Select GPIO#3
Place and remove a tag to see hoe the status changes from High (Tag In Place) to Low (Tag not in Place)
(Unselectand select back the GPIO#3 to see Logic Level changes)
Integration
As mentioned previously, AdvanPay-500 is fully operated through Jadak's Mercury API.
Before hurrying into develop some code it is paramount to understand the desired flow of events. There are many approaches, we present one, which can be used without much change, or just as an inspiration for your own approach.
HW control
AdvanPay-500 featrures 4 basic HW components:
RFID module: this is a Jadak's M6e-Nano module
Deactivator: this is a step-by-step motor and the required HW and FW to control it
Tag sensor: when a tag is in place, a sensor switches to 'high' state.
Beeper: it is possible to use an embedded beeper
Parts 2, 3 and 4 are controlled using the GPIO lines from the Nano module:
GPIO1 (OUT): controls the beeper. High value enable the beeper
GPIO2 (OUT): controls the deactivator. A short High pulse enables the deactivaor to detach the tag.
GPIO3 (IN): tag position sensor. High value means the tag is in place.
Tag life cycle
The suggested approach has three fundamental principles:
It is based on a simple state machine, the active tag being detected can be in 4 different states.
RESET: start state
READ: the tag is being read.
VALIDATING: the tag is under validation. This is normally a task performed against a 3rd party system: sql, HTTP request, remote call procedure, etc.
DEACTIVATION: the tag has been validated and deactivation will take place as soon as the tag is in place.
Every state has a time window, failing completion in the time windows, forces a reset.
Reading an EPC different than the one being process, automatically resets the state machine.
The following diagram explains the life cycle of a detected item
Please visit Keonn's GitHub account for the complete Java code
https://github.com/Keonn-Technologies/AdvanPay-500-Java-Examples
The code example is provided as is, as a starting point, not as a production-ready application:
It lacks error management
It lacks a re-connection feature to the unit in case of disconnects.
It lacks the logic for validating tags
Etc
Other
Security
The most common tricks to deceive the system is to pay for a cheap product and try deactivating an expensive one. For this to work the following has to happen:
The cheap product is bought legitimately.
The cheap product is approach, so that it is detected. Verification on a bought product works and the EPC is validated.
Just before placing the cheap product into is final place, a swap is made with an expensive one.
How to avoid it
To avoid or minimize common deception tricks please take into account:
Adjust RF power to the minimum, so that tags are only read when really close to its final position.
Adjust the different timing parameters in the code examples.
Additionally, the example in github already offers protection strategies.
Reset system if more than one tag is detected
Reset system if the tag being deactivated is moved away from the detachment position
Allow only deactivation in case the tag is read before being placed in detachment position