Requirements

Licence

How LumiScan QR Code Reader is licensed depends on where you bought it and where it runs:

Bought from Runs on Licensing

HD Vision Systems

Windows 11 or Ubuntu 24.04

The licence is held on your LumiScan Key. It is a one-time purchase and needs no renewal.

ctrlX Store

Windows 11

The licence is held in ctrlX WORKS. The LumiScan Key is required in addition; it protects the software against reverse engineering.

ctrlX Store

ctrlX OS (ctrlX CORE or IPC)

ctrlX licence SWL-W-XCx-QRxxxCRDSxHDVSx-V1NN, one licence per app instance. Advanced functions additionally need SWL-W-XCx-QRxxxCRDAxHDVSx-V1NN.

Each device on which LumiScan QR Code Reader runs at the same time needs its own LumiScan Key. Keys can be exchanged between devices.

How to install CodeMeter Runtime and how to request, renew and move licences is described in LumiScan Licensing.

On ctrlX OS, the licence is checked for up to ten seconds during start-up; if none becomes available, the reader shuts down and the reason is written to the system log.

If an Advanced licence is available, the application uses it automatically. If none is available, it runs with Standard functions rather than refusing to start.

An image source on the same Data Layer

The application reads its images from another application’s Data Layer image node.

On ctrlX OS: that application must run on the same ctrlX CORE or ctrlX IPC — remote Data Layer access is not supported.

On a PC: that application must be connected to the same LumiScan Keryx broker as the reader (see LumiScan Keryx on a PC).

In practice this is LumiScan Cam Driver, but any application works as long as the node named in input/image-address provides these four children:

Node Type Description

data

array of uint8

Raw, uncompressed pixel data

width

uint64

Image width in pixels

height

uint64

Image height in pixels

pixel-type

string

GenICam pixel format name

Supported pixel formats

Mono8, Mono12, RGB8, RGB12, BGR8, BGR12, Bayer_GR8, Bayer_RG8, Bayer_GR12, Bayer_RG12.

The name is matched without regard to case, and the underscore may be left out of the Bayer names — BayerGR8 and bayer_gr8 are the same format. Bayer images are converted to colour before the search.

Any other pixel format is refused, and the run produces no result.

The image data must be at least width x height x bytes-per-pixel bytes for the declared format. A shorter buffer than the metadata promises is refused rather than read past the end.

Storage

Reading a code stores nothing: there is no reference image and no module list, and the address in input/image-address lives on the Data Layer.

The image stream (experimental) keeps two things in the application’s configuration directory (see Kept in the settings file): its stream mode and what it subscribes to, in qr-code-reader.json, saved there as they change, and what each settings hash stands for, in settings-history/ - one small JSON file per hash, never deleted. See Reading Codes on an Image Stream.

Timing

Reading is synchronous: the write to execute returns when the search has finished. How long that takes depends on the image size, since the whole image is searched for codes on every run.