Implements the EPCglobal Reader Protocol Version 1.1. and Reader Management Version 1.0 in Java.
Elements of the protocol implemented include:
At the moment, the following readers that are not Reader Protocol compliant do allready have a Fosstrak HAL implementation:
Similar readers might work, but are not tested.
New modules with an implementation of the HardwareAbstraction interface for other readers can be added to the Fosstrak HAL Project by anyone. See the Fosstrak HAL Project website for more information.
The following instructions show how to install the Fosstrak Reader:
Start the reader instance in one of the following ways:
java -jar <path-to>/reader-rprm-core-<version>.jar
java -cp <path-to>/reader-rprm-core-<version>.jar org.fosstrak.reader.rprm.core.ReaderDevice
The reader is now listening for incoming http requests on port 8000, incoming tcp requests on port 5566, and incoming snmp requests on port 161. To communicate with the reader instance, you might want to consider using the Fosstrak Reader RP Proxy, Fosstrak Reader RP Client or a SNMP Manager such as MIB Explorer.
For more information, on how to use theses tools, please see the Fosstrak Reader project website.
You might also want to consider adjusting the settings in the ReaderDevice.xml file (see below).
The reader can be configured by setting properties in the ReaderDevice.xml file (see below).
Properties of the messaging layer of the reader are set in the 'Information about the messaging' section of the configuration file. The properties tcpServerConnection and tcpPort specify if the command channel via TCP is active and which port the reader is listening for incoming TCP connections. Likewise, the properties httpServerConnection and httpPort define if the HTTP command channel is active and which port is used. The property notificationListenTimeout sets the time in ms a notification connection waits in listen mode. The properties threadPoolSize, startPattern and stopPattern must not be changed to ensure correct operation of the reader.
The reader specific properties such as readpoints, sources, triggers, and reader management information can also be set in the ReaderDevice.xml file. The information about the reader are properties describing the reader including the epc, name and manufacturer of the reader. The properties maxSourceNumber, maxTagSelectorNumber and maxTriggerNumber set a limit for the number of sources, tag selectors and triggers which a client can define.
In the reader section the different instances of the Fosstrak HAL with their read points are given. In this case the SimulatorController is used with the four read points Shelf1, Shelf2, Shelf3 and Shelf4 which correspond to the four antennas of the simulated reader. The sources of the reader are specified by their name and the read points through which they acquire the RFID data. In our example the reader has four sources wheras each source has one read point that has the same name as the source. In another reader setting one source could have more than one read point. The class name of each implemented controller can be found on the website of the corresponding Fosstrak HAL module.
If the reader provides IO edge triggers or IO value triggers the classes that implement the functionalities to access the IO ports are specified by the two properties IOEdgeTriggerPortManager and IOValueTriggerPortManager.
The remaining properties define the information used for the reader management. The properties description, locationDescription, contact and serialNumber specify additional information about the reader. The SNMP agent is specified by the properties mgmtAgentType, mgmtAgentAddress, mgmtAgentPort, macAddress and mgmtSimulatorStart. Alarm channels can be defined using the properties alarmChannels.
<?xml version="1.0" encoding="UTF-8"?> <properties> <!-- Information about the reader --> <epc>ReaderEPC</epc> <name>MyReader</name> <manufacturer>ReaderManufacturer</manufacturer> <manufacturerDescription>ReaderManufacturerDescription</manufacturerDescription> <model>ReaderModel</model> <handle>0</handle> <role>ReaderRole</role> <!-- End --> <!-- More Information --> <maxSourceNumber>10</maxSourceNumber> <maxTagSelectorNumber>10</maxTagSelectorNumber> <maxTriggerNumber>10</maxTriggerNumber> <!-- End --> <!-- All readers (HardwareAbstractions) used --> <readers> <reader> <name>SimulatorController</name> <class>org.fosstrak.reader.hal.impl.sim.SimulatorController</class> <properties>/props/SimulatorController.xml</properties> <readpoint>Shelf1</readpoint> <readpoint>Shelf2</readpoint> <readpoint>Shelf3</readpoint> <readpoint>Shelf4</readpoint> </reader> </readers> <!-- End --> <!-- List of all sources --> <currentSource>Shelf1</currentSource> <sources> <source> <name>Shelf1</name> <fixed>true</fixed> <readpoint>Shelf1</readpoint> </source> <source> <name>Shelf2</name> <fixed>true</fixed> <readpoint>Shelf2</readpoint> </source> <source> <name>Shelf3</name> <fixed>true</fixed> <readpoint>Shelf3</readpoint> </source> <source> <name>Shelf4</name> <fixed>true</fixed> <readpoint>Shelf4</readpoint> </source> </sources> <!-- End --> <!-- The io trigger classes --> <IOEdgeTriggerPortManager> <port>org.fosstrak.reader.rprm.core.triggers.KeyIOEdgeTriggerPortManager</port> </IOEdgeTriggerPortManager> <IOValueTriggerPortManager> </IOValueTriggerPortManager> <!-- End --> <!-- Information used for the reader management implementation --> <description>Description</description> <locationDescription>LocationDescription</locationDescription> <contact>Contact</contact> <serialNumber>SerialNumber</serialNumber> <mgmtAgentType>SNMP</mgmtAgentType> <mgmtAgentAddress>localhost</mgmtAgentAddress> <mgmtAgentPort>161</mgmtAgentPort> <macAddress>00-14-A4-2F-2D-73</macAddress> <mgmtSimulatorStart>false</mgmtSimulatorStart> <!-- End --> <!-- List of all alarm channels --> <alarmChannels> <alarmChannel> <name>alarmChannel1</name> <host>localhost</host> <port>162</port> </alarmChannel> </alarmChannels> <!-- End --> <!-- Information about the messaging --> <tcpServerConnection>true</tcpServerConnection> <tcpPort>5566</tcpPort> <httpServerConnection>true</httpServerConnection> <httpPort>8000</httpPort> <notificationListenTimeout>30000</notificationListenTimeout> <threadPoolSize>16</threadPoolSize> <!-- End --> <!-- Information about the source defaults --> <isFixed>false</isFixed> <glimpsedTimeout>2000</glimpsedTimeout> <observedThreshold>0</observedThreshold> <observedTimeout>1000</observedTimeout> <lostTimeout>0</lostTimeout> <readCyclesPerTrigger>1</readCyclesPerTrigger> <maxReadDutyCycles>100</maxReadDutyCycles> <readTimeout>0</readTimeout> <!-- End --> </properties>