Neptune 3 UI - 中间件

Neptune 3 UI使用QtIvi,其自动生成工具,QtIviVehicleFunctions,以及QtIviMedia,在一个汽车UI环境中实现中间件API。Neptune 3 UI实现并利用了两种此类API:RemoteSettingsDriveData

Neptune 3 UI连接到相应的远程服务::remotesettings-serverdrivedata-simulation-server。在此情况下,远程服务指的是一个独立的进程,可能运行在不同的主机上。有关QtIvi中间件服务的介绍,请参阅Qt IVI进程间通信集成

为何使用中间件

在Neptune 3 UI中运行的程序与系统UI共享常见的设置,如语言和夜间/日间模式。remotesettings-server维护此接口。

drivedata-simulation-server提供了对仪表盘仪表和指示值的接口以及一个模拟器。将这些建立在网络上的独立进程作为后端,使得从所有前端点(无论是内置应用程序、系统UI还是独立应用程序)统一访问公共信息和功能成为可能。

这些单独的网络进程还使得在不同的主机上运行仪表盘中心控制台显示器成为可能,同时仍然可以平滑且同步地更改语言、主题或UI模式。

这两个API均由Neptune 3 UI伴侣应用程序进一步使用,允许乘客在移动设备上更改设置和查看车辆数据。

启动中间件服务

默认情况下,Neptune 3 UI会自动启动中间件服务。如果需要,您也可以分别运行remotesettings-serverdrivedata-simulation-server可执行文件。这些可执行文件与Neptune 3 UI一起构建和安装。服务器需要一个server.conf文件,这是一个共享设置文件,用于建立连接。此设置文件包含在Neptune 3 UI中,位于根目录。同一设置文件也由内置应用程序加载的后端插件实例读取。

实现

中间件架构基于QtIVI和其ivigenerator工具。Neptune 3 UI的内置应用程序、伴侣应用程序和系统UI都通过自动生成的组件连接到远程服务。中介服务与前端之间的通信使用QtRemoteObjects实现。这是透明实施的;您可以用其他消息机制替换这种通信,而不需要更改API。

基于QtIvi的中间件用.qface文件描述;对于每个文件,QtIVI自动生成以下独特组件:前端、后端插件以及一个独立的服务可执行文件。

drivedata-simulation-server的情况下,服务器中还包含生成的模拟代码。这些生成的组件被分成了单独的项目。

让我们通过 settings-service 作为例子。服务器本身以及所有必要的组件都位于 src/remotesettings 中,在那里我们可以找到以下文件或项目:

  • app
  • backend
  • backend_simulation
  • frontend
  • qml_plugin
  • remotesettings_server
  • 其他文件/remotesettings.qface

如上所述,remotesettings.qface 文件是 ivigenerator 使用的输入接口描述。前端是一个包含我们中间件 C++ 实现以及实现后端的接口的共享库。中间件服务是远程的还是本地的,对使用前端(透明)的代码来说都是隐藏的。例如,前端接口中的所有方法都是异步的。为了方便,前端进一步被封装成一个 qml_plugin,这样我们就可以直接从 QML 代码中使用这些功能。

为了连接到实际的中间件服务,前端加载由 backendbackend_simulation 项目生成的后端插件之一。由 backend 项目编译的 plugin 是与由 remotesettings_server 项目实现并用于生产后端的远程服务连接的。该插件是生产后端。

remotesettings_server 项目生成实际的服务器可执行文件,包含一些生成的代码以及为服务编写的业务逻辑。

backend_simulation 项目生成一个替代的后端插件,提供生成的模拟器。

app 项目包含 Neptune 3 UI 衔接应用的实现。

由于前端透明和可更换的后端插件,服务也可以以完全不同的方式实现。例如,如果 Neptune 3 UI 以单进程模式运行,remotesettings-server 就不需要远程运行,而可以在本地进程运行。

要修改 Neptune 3 UI 中的模拟值和默认数据,您可以更新 simulation.qmldrive-data.yaml 文件。这些文件位于 drivedata 文件夹中。在完成所需的更改后,您需要重新构建 Neptune 3 UI 以使这些更改生效。

©2019 瑞典 Luxoft AB。本文件中包含的文档贡献版权属于其各自的所有者。
本提供的文档许可受 GNU 自由文档许可 v1.3 的条款约束,由自由软件基金会发布。
Qt 和相应的标志是芬兰及/或世界其他国家和地区 Qt 公司的商标。所有其他商标都是其各自所有者的财产。