Developer Change Log

Release 0.4.0

HardwareAbstraction Interface

Changed HardwareAbstraction interface to remove inconsistencies and add new features. Most methods are affected. The changes can be divided into following categories:

  • The Observation returned by the identify method can contain a TagDescriptor for each tag observed with information about the tag type and memory layout.
  • The data of the readBytes and writeBytes methods is stored in a UnsignedByteArray instead of a (signed) byte[].
  • Error reporting has been improved with adding additional declarations for exceptions that can arise in the method implementation. Most notably a parameter check can return a specific ReadPointNotFoundException or OutOfBoundsException if it fails.
  • A (mandantory) getReadPointNames method has been added.
  • Every method that is not required to be implemented provides an additional 'supports'-method. If an optional method is implemented, the associated 'supports'-method returns true. If an optional method is not implemented and returns an UnsupportedOperationException, the associated 'supports'-method returns false.
  • The kill method takes a readPointName argument to be consistent with readBytes and writeBytes methods.
  • Some methods have been renamed. The method programId is now called writeId. Furthermore getAntennaPowerLevel and getAntennaNoiseLevel have been renamed to getReadPointPowerLevel and getReadPointNoiseLevel respectively to be consistent with the startUpReadPoint, shutDownReadPoint and isReadPointReady methods.
  • The methods for asynchronous identify have been changed to allow multiple listeners. Starting and stopping does not require a listener. These are added and removed with separat methods independent of start and stop.

Own Project

The HAL has moved from a module of Fosstrak Reader to an own project. It is subdivided into a module containing the HardwareAbstraction interface with common utilities and modules with implementations of the interface. Each implementation module contains one or more reader controllers of a reader manufacturer or the simulator.

Impinj SPeedway

A HardwareAbstraction implementation for the Impinj Speedway reader has been added. The controller implements nearly all methods of the interface: identify (mandantory), readBytes, writeBytes, writeId, reset, kill, asynchronous identify and parameters. Not supported is shutting down and starting up a read point and getting read point noise level. Some parameters of the reader can be read and set using the getParameter and setParameter methods:

  • ReaderInfo (read only)
  • TxPower
  • SupportedGen2Params (read only)
  • Gen2Params
  • LBTParams
  • RxConfig

See th Impinj Mach1 protocol specification for information about functionality and format of the parameters.

FEIG MR101-A

A HardwareAbstraction implementation for FEIG OBID i-scan ID ISC.MR101-A has been added. The controller implements identify (mandantory), readBytes, writeBytes, reset and kill commands.

The implementation supports the FEIG OBID i-scan ID ISC.ANT.MUX multiplexer with 8 ports. Multiplexers can be cascaded up to a depth of three. This allows a maximum of 512 antennas on a single reader.

FEIG LRU1000

A HardwareAbstraction implementation for FEIG OBID i-scan ID ISC.LRU1000 has been added. The controller implements identify (mandantory), readBytes, writeBytes, reset and kill commands.

XML Configuration Files

All configuration files have been changed to XML format instead of a mix of XML and properties. This increases consistency and XML allows a hierarchical structures which is more readable for complex configurations.

Resource Loading

Resource loading has been completely redesigned. This fixes 1547832.

There were several issues with the previous implementation of resource loading:

  • Resource loading was not done uniformly. Sometimes FileInputStream was used, elsewere Class.getResourceAsStream or Class.getResource. Each of these works at bit different, looks for the file at its own places and needs more or less path adjustments to load a file that is packaged in a Java archive.
  • A path and postfix of the file name was hardcoded sometimes which made it difficult to name the file correctly and extract the corresponding prefix.
  • To adjust a configuration file to its own needs, the Java archive had to be extracted and started in a console by hand instead of just clicking on the executable jar file.

The new implementation fixes these issues in the following way:

  • Locating the resource files is done in a dedicated helper class for all resources.
  • The location search algorithm is sophisticated and works for relativ paths with or without leading slash, files in or outsite Java archives, path relative to various places or absolute and the possibility to give a default file name in case a custom file can not be found.
  • The resource locator first searches for the custom file. If no custom file can be found, the algorithm takes the default file. It is not necessary to extract the Java archive to customize resources such as configuration files.

See the Fosstrak Reader Developer Changlog for a more detailed explanation of the new implementation of the resource loading.

Simulated Tag Memory

Changed the tag memory layout of the simulated tag to match the EPCclass1Gen2 standard. The simulated tag now has 64 bit reserved memory, 256 bit EPC memory including CRC and PC bits, 64 bit TID memory with random 32 bit serial number and 256 bit user memory.

EPCclass1Gen2 Tag Models

An EPCTransponderModel class has been added to represent many different EPCclass1Gen2 tags in software. It provides memory layout information for following tag chips:

  • Impinj Monza
  • Impinj Monaco
  • STMicroelectronics XRAG2
  • TexasInstruments Gen2
  • NXP UCODE EPC G2
  • NXP UCODE G2XM
  • NXP UCODE G2XL
  • Alien H2
  • and the Fosstrak Simulator tag with EPCclass1Gen2 compliant memory layout

These are the most common tag chips also used in tags from other manufacturers. New tag chips can simply be added by writing their TID and memory information to a configuration file. Thereafter they are fully accessible by all reader controllers using the EPCTransponderModel. A default EPCTransponderModels configuration file containing TID and memory description for the tags listed above is shipped with the Fosstrak HAL.

Graphic Simulator Memory Access

The user interface of the graphic simulator has been extended with the possibility to read and write the memory banks of a simulated tag.

memory banks in the graphic simulator

The memory banks can be easily accessed through the context menu of a simulated tag.

memory banks access through the context menu

Tag Descriptor

With the changed HardwareAbstraction interface, the Observation returned by the identify method can contain a TagDescriptor for each tag observed. It contains information about the ID type and memory layout of the tag. All current implementations (Impinj and FEIG readers) including the simulator add a TagDescriptor with according information to the Observation.