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.