Code source: intelino-code/intelino-trainlib-async-py
Repository: https://github.com/intelino-code/intelino-trainlib-async-py
Commit: 298e1fd4091e069180c30f338b4c285b13accbd0
License: Intelino Public License Agreement, Version 1.0. See LICENSE.txt.

This software is made available by Innokind, Inc. DBA Intelino, under the
terms of the Intelino Public License Agreement, Version 1.0 located at
https://intelino.com/intelino-public-license. BY INSTALLING, DOWNLOADING,
ACCESSING, USING OR DISTRIBUTING ANY OF THE SOFTWARE, YOU AGREE TO THE TERMS OF
SUCH LICENSE AGREEMENT.

Matrain modifications (2026-10-13):
- Distribution/source notices are added to each .py copy.
- scan.py uses BleakScanner.discover(return_adv=True) and AdvertisementData.rssi.
- The two raw connection examples use asyncio.run(..., debug=True).
- two_trains_with_trainlib.py imports TrainMsg from its messages module.
- Algorithm, timing, colors and track conditions are otherwise retained.
See SOURCE-MANIFEST.json and the individual page descriptions.
The local requirements file pins the publication's SDK and dependencies,
including aioconsole, which the source repository lists as a development dependency.

This is not MIT-licensed code. The license excludes commercial software
provision and competing services and restricts use to approved hardware.
A free download does not grant a separate commercial permission.
There is no claim of hardware/Bluetooth validation or collision safety.
