Display modules from Reach Technology are designed to interact with the outside world using one of many interface options. A common interface is the RS-232 serial port, typically connected to a microcontroller that does the work of controlling the low level I/O.
In order to allow the GUI written in QML to interact with the connected microcontroller, two functions are needed:
- The physical RS-232 port needs to be adapted to internal communications with configurable settings.
- A character string level translation needs to be performed to allow the microcontroller to use terse commands and responses while allowing for the richness of the QML object naming conventions.
A pair of programs, known collectively as “I/O Agents” perform these two tasks. These agents are background processes running on the display module. The SIO Agent exchanges messages between a serial port device and a network socket that connects to the TIO Agent. The TIO Agent then communicates with the QML viewer program over another socket.
The IO agents are designed so that they can run either on the host VM or on the target display module.
This enables the developer to run the same code on both environments for faster development.
A serial port on the host PC can be used in place of the serial port on the target. The entire GUI can be developed and debugged on the host including interaction with the microcontroller. The application can be run on the target at any time to check for performance or target-specific issues.
The I/O Agents are invoked on the host using a script “Start IO Agents Local.sh” or “Start IO Agents USB1”. The Local script does not connect to the serial port and allows the developer to see the monitor and send messages. The USB1 script connects to the physical serial port /dev/ttyUSB1.
The I/O Agents reside on the display module in the /application/bin directory and are normally started automatically by a startup script in /etc/init.d.