trainlib vs trainlib_async
The intelino.trainlib package is very similar in function (and API)
to the intelino.trainlib_async package. They share most of the constants
(via enums), message definitions and also exceptions. In fact, the trainlib
synchronous library is only a wrapper around trainlib_async executing it
in standard threads, thus allowing synchronous calls to the API.
The only two classes the libraries do not share (and are significantly
different) are TrainScanner and Train. So only for these
two classes it is important from which package they are imported:
from intelino.trainlib import TrainScanner, Train
All other classes can be also imported from intelino.trainlib_async.