---
title: "v2.1.0 - not yet released"
product: "LumiScan Calibration"
component: "lumiscan-calibration"
version: "2.0.0"
display_version: "2.0.0.8"
latest_version: true
language: "en"
url: "https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/release-notes/v2-1-0.html"
---

# v2.1.0 - not yet released – LumiScan Calibration

**Added:**

- **Execute methods.** `control/transform/execute` and `control/reset/execute` run a transform or a reset with a single write, and return when it has finished. They answer `DL_TOO_MANY_OPERATIONS` while another transform or reset of the module runs, and `DL_INVALID_OPERATION_MODE` without a lookup table or a licence. See [Execute methods](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/functionalities.html#execute).
- **Transforming a stream (experimental).** A module subscribes to one Data Layer node, its source, and transforms every update of it as it arrives: `address` in the `stream` section of its configuration file names the folder, and the step in the section’s `onEntry` list the node in it. The node holds either the points themselves (a float array, for example from a PLC), or another application’s result, such as the objects AI Object Matching finds on an image stream. The step says which: none, or `plain`, for an array; `remap` for a result, with the list in it (`array`) and each element’s `x` and `y` - or no list, for one point per update. A stream result is read inside its result, as on the application’s regular output. The other keys of the section are those of every LumiScan application’s stream. The points are published on `control/subscribe/output/stream/points` with their lineage - the camera image an AI result was inferred on, or the PLC node they came from - and as a plain `x0,y0,z0,x1,y1,z1,…` array on `control/subscribe/output/stream/plain-points`, with `NaN` for a point outside the lookup table. `setting/settings-hash` identifies the lookup table and settings they are transformed with, and the module’s `tag` - its name unless `stream.tag` gives another - marks them as its own. With `keep-latest-output`, each update’s points are also written to the regular outputs. Transforming on request keeps working while the stream runs. See [Transforming a Stream (Experimental)](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/streams.html).
- **What a source may hold.** `hdvisionsystems/lumiscan-calibration/system/meta/subscription-schema` describes it as a JSON Schema: a plain array of numbers, a `stream_points` or a `stream_detections`. See [What a source may hold](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/streams.html#subscription-schema).
- **Subscribing at run time.** `control/subscribe/execute` applies the inputs under `control/subscribe/input/…` - stream mode, the source, the queue size, `keep-latest-output` - while the application runs, with no restart; `control/unsubscribe/execute` drops the source. Every module has the stream nodes, so adding a `stream` section needs a reset only, and a module without one gets one when it subscribes. See [Subscribing at run time](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/streams.html#subscribing).
- **Stream mode and the source kept in the module configuration file.** The methods save them in the `stream` section before they apply them: the module starts with both again after a restart. See [Kept in the module configuration file](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/streams.html#kept).
- **Several modules at once.** Each module listed in the application settings is served on its own, so a module waiting for its client never holds up another.
- **Settings on the Data Layer.** `hdvisionsystems/lumiscan-calibration/system/settings` shows the settings the application was started with: the application’s settings file, each module file inlined in its `modules` list, passwords as `***`. Writing it changes the files. The application checks the change as at start, saves it (the previous file as `.bak`), and then refuses all work until it is restarted: `restart-required`, status `-5`. `hdvisionsystems/lumiscan-calibration/system/control/restart/execute` restarts it. See [Settings on the Data Layer](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/settings-on-the-data-layer.html).

**Changed:**

- **The example module is `example`, and it reads AI Object Matching.** The example module file is now `example.json`, so the module is `hdvisionsystems/lumiscan-calibration/example`, no longer `.../lumiscan-calibration-example-module`. Its `stream` section, with a `remap` step, reads the results of AI Object Matching’s example module, also `example`, from the start, and writes the points to the regular output too. A settings folder that already has its files keeps them. See [Module Configuration File](https://docs.hdvisionsystems.com/en/lumiscan-calibration/2.0.0/lumiscan-calibration/module-configuration-file.html).
- **`reset` reloads the module.** A reset reads the module configuration file and its TIFF file again, so a corrected file takes effect without a restart. If it cannot be loaded, the module reports `-2` and has no lookup table until a reset succeeds, instead of transforming with the old one.
- **An error status stays until the next request.** It used to be replaced by `0` within about 100 ms, before a client could read it.
- The `bilateralInterpolation` interpolation method is now accepted by the settings schema.
- Module configuration files may contain comments, as the application settings file may.

**Bugfix:**

- **A missing TIFF file no longer crashes the application at start.** The module is served and reports status `-2` (`invalidSetting`), and `control/transform/ready` stays `false`, until its files are corrected and it is reset.
- **The application no longer waits for ever on a client that does not lower `request`** when it is asked to stop, and a reset requested meanwhile is served.
- `control/reset/request` was never acknowledged. A reset now follows the handshake.
- An invalid application settings file is written to the log, and the application stops, instead of crashing.
