LabDash is an application build on top of the WAS runtime framework.
Basically spoken, it connects a User Interface designed as webpage with a powerful UI handler on one side and to hardware interfaces (like CAN Bus) on the other side to allow the programmer to design use-case specific diagnostic applications, which are connected to a vehicle hardware and can be driven (remotely) by the user with a web browser.
To allow that, LabDash provides several extensions to the original WAS framework, like
- the abstract
LDMClass, which is a child of the original WAS plugin,is extended with some functions to generate a User UI page and to place some UI elements on it.
So basically each application, which the user is selecting on the initial selection screen, runs as a WAS plugin.
The example in web\examples\UICreation.epd shows how this mechanism works
This is a javascript library on client side which handles the web socket communication with the webserver which is part of the WAS component. It provides methods to add elements dynamically, reacts on element events when the user does some actions and returns the result back to the trigger element.
When a application is made, the LDMClass provides only the UI handling. But to communicate on a field bus like CAN, each application is resposible by itself to handle these communications.
To ease this communication, there are some classes included to use the CAN bus (and which can be used as blueprint for other communication mechanisms). There's one base class for raw can bus communication (LDMClass), and some classes and functions are made on top of it for CANopen or ISOTP communication.
When using LabDash, there are many use cases where the user wants to control a dedicated electronic module. Such a communication normally bases on a protocol and some commands. To not always re-program all low level stuff again, Labdash provides a generic LDModule interface. This class provides some standard module functions. When adapted once to a module, that module can be used everywhere without reprogramming the function.
This LDModule base class combined with a dynamic class loader is also the base for some applications, where the user can select the wanted module out of the list of available module and load this on-the-fly without the need of adjust the program to the different modules.