[Development] [Proposal] Future QtSerialPort with plugins architecture
Denis Shienkov
denis.shienkov at gmail.com
Sat Feb 13 12:24:38 CET 2016
Hi, folks,
I would like to discuss new idea of transition of QtSerialPort to
an architecture with the plug-ins/backends.
The reason is that we can use different approaches on different
platforms to enumerating a list of available devices, and to
implementing a code of I/O engine.
It will simplify a code and its maintenance for developers,
and also will provide flexibility for users.
= QSerialPortInfo =
For example QSerialPortInfo::availablePorts() can be made with,
different ways, which I suggest to divide into plug-ins/backends:
* on Windows : [setupapi], wmi, generic
* on WinCE : [devmgr]
* on Linux : [udev], sysfs, generic
* on OSX : [iokit], generic
* on FreeBSD : [sysctl], generic
* on QNX : [generic?]
* other Unix : [generic]
where [...] means that this plugin is preferred/default for this platform.
The user can use/change desired plugin, e.g. via the
QT_SERIALPORTINFO_PLUGIN environment, or via command line e.g.:
{code}
set QT_SERIALPORTINFO_PLUGIN=wmi // on windows
myapp.exe
{code}
{code}
export QT_SERIALPORTINFO_PLUGIN=sysfs // on linux
myapp
{code}
{code}
myapp -qspi sysfs // on linux
{code}
and so on, similar to the Qt's platform backends, like this:
* http://doc.qt.io/qt-5/embedded-linux.html
Currently we have mess-up (mixing-up) multiple approaches in one
implementation file, via ifdefs and so on, that is looks funny/hard, e.g,:
* on Windows : setupapi + generic
* on Unix : udev + sysfs + generic
= QSerialPort =
Here also can be divided to the plugins/backends. E.g. some vendors
provides own HW chips which is RS232/485/TTL on the physical layer,
but has own vendor-specific API. An example it is FTDI chip with the
D2XX API, that is non-standard "serial port" API.
In this case the user can choose desired plugins via other
QT_SERIALPOR_PLUGIN environment, or via other command line, e.g.:
{code}
set QT_SERIALPORTINFO_PLUGIN=ftdi
set QT_SERIALPOR_PLUGIN=ftdi
myapp.exe
{code}
{code}
myapp.exe -qspi ftdi -qsp ftdi
{code}
Currently, I don't like the current implementation of internal architecture
of QtSserialPort where the code contains mix from different approaches
and so on, that is hard and ugly, IMHO.
So, dear community/developers/gurus, what do you think about? :)
BR,
Denis
More information about the Development
mailing list