Neptune 3 UI - Qt 安全渲染器集成
在 Neptune 3 UI 中,Qt 安全渲染器以两种方式包含在内:
- 常规 UI 部分作为 QML 组件
- 关键安全 UI 部分作为一个示例应用,neptune3-ui-qsr-cluster
下方的图示说明了这两个集成是如何完成的。
启用 Qt 安全渲染器支持
要在这些 开发环境中使用 Qt 安全渲染器,请按照安装 Qt 安全渲染器中描述的步骤构建和安装 Qt 安全渲染器。
使用 Qt 安全渲染器构建 Neptune 3 UI 完成以下操作
- 包括
neptune3-ui-qsr-cluster
到构建树中 - 在
neptune3-ui.pro
文件中启用 Qt 安全布局工具,它将在BUILD_FOLDER/qsr-safelayout
位置生成布局文件,包括一个SafeTelltalesPanel.srl
文件,这是neptune3-ui-qsr-cluster
使用的
注意:如果 qmake
找不到已安装的 qtsaferenderer,则在构建步骤中将显示以下警告信息:"qtsaferenderer 模块不可用:请确保 QtSafeRenderer 已正确安装和配置"
Neptune 向 中间件的客户端提供安全 UI 的值来源:指示器状态、速度等。 neptune3-ui-qsr-cluster
应用连接到相同的远程中间件服务,并利用与 Neptune 3 UI 相同的自自动生成的 QtIVI 接口和机制。 neptune3-ui-qsr-cluster
应用期望在相同的地址上运行这两个服务。默认情况下,它假定 tcp://127.0.0.1
地址,驱动数据模拟服务器端口为 9998,遥远设置服务器端口为 9999。要覆盖这些默认参数,修改应用设置文件以添加地址和端口的值,如下所示。 [lastUrls]
组中的第一个 url
属性用于连接。
[lastUrls] 1\url=tcp://127.0.0.1:9999 2\url=tcp://192.168.0.1:1111 size=2 [ports] remoteSettingsPort=9999 driveDataPort=9998
这些设置基于 QSettings,公司名称为 "Luxoft Sweden AB",应用程序名称为 "NeptuneCompanionApp";有关定位文件的说明,请参阅QSettings 平台特定说明。
为了使 neptune3-ui-qsr-cluster
和 neptune3-ui
应用进行通信,我们使用 TCP 连接。TCP 客户端位于非安全分区,服务器位于安全 UI 部分。TCP 客户端是 Qt 安全渲染器 QML 插件的一部分。Qt 安全渲染器需要设置以下环境变量以进行通信
QT_SAFERENDER_IPADDRESS=127.0.0.1 QT_SAFERENDER_PORT=1111
它们在 neptune3-ui
中设置,使用下表中描述的 am-config-...
相关文件中的公共系统属性
参数名称 | 类型 | 说明 |
---|---|---|
qsrEnabled | bool | 如果设置为 yes ,则启用在 Cluster 应用程序内加载 Safe Telltales(《SafeTellatales.qml》)。默认情况下是禁用的。 |
qsrServerAddress | 字符串 | neptune3-ui-qsr-cluster 服务器地址 |
qsrServerPort | 字符串 | neptune3-ui-qsr-cluster 服务器端口 |
以下是在 {am-config-...} 相关文件中 Qt Safe Renderer 设置的示例
systemProperties: public: qsrEnabled: yes qsrServerAddress: '127.0.0.1' qsrServerPort: '1111'
对于 neptune3-ui-qsr-cluster
应用程序,TCP 服务器监听端口在基于 QSettings 的设置文件中设置,公司名称为 "Luxoft Sweden AB",应用程序名称为 "QSRCluster";要找到该文件,请参阅QSettings 平台特定说明。默认端口为 1111
。
[connection] listen_port=1111
NUC 目标上的非安全到安全 UI 切换
在 NUC 目标上,您可以通过使用 OnFailure
属性的系统服务监控来在非安全和安全 UI 之间切换。当 neptune3-ui
停止时,systemd 会启动 neptune3-ui-qsr-cluster
应用程序。
以下代码显示了位于 /lib/systemd/system/neptune.service
的 Neptune 3 UI
服务文件的 "OnFailure" 部分
[Unit] Conflicts=neptune-qsr.service Before=neptune-qsr.service OnFailure=neptune-qsr.service
位于 /lib/systemd/system/neptune-qsr.service
的 Safe UI
服务文件包含
[Service] ExecStart=/opt/neptune3/neptune3-ui-qsr-cluster workingDirectory=/opt/neptune3 Environment=QT_QPA_EGLFS_KMS_CONFIG=/etc/kms-qsr.conf Environment=QSR_SHOW_TEXT_ON_STARTUP=1 Environment=QSR_FILL_BLACK_BACKGROUND=1
相应的 EGLFS 设置 JSON 文件(/etc/kms-qsr.conf
)包含
{ "hwcursor": false, "outputs": [ { "name": "DP3", "virtualIndex": 0, "primary": true } ] }
安全 UI 应用程序
neptune3-ui-qsr-cluster
是 Qt Safe Renderer 在 Neptune 3 UI 项目的 "安全 UI 部分" 的示例实现。它基于 Qt Safe Renderer 示例的桌面部分《Telltales:渲染关键安全 UI》(Telltales: Rendering Safety-Critical UI),该示例说明了如何在桌面环境中使用 Qt Safe Renderer 进行开发。
注意:由于该样本依赖于 Qt 类,因此没有按照Misra C++ 2008 或 ISO26262 功能安全标准实现。
本样本介绍了 Qt Safe Renderer 工作的各个方面
- 加载生成于 QML 文件中的布局,其中包含告警图像、速度、功率和警告文本
- 通过继承自 Qt Safe Renderer 的 AbstractWindow 和基本的 QWindow 与 Qt Safe Renderer 库交互以渲染到缓冲区
- 使用 StateManager 控制 UI 元素的状态
- 通过 心跳消息 与
非安全分区
通信并接收关于主 UI
即将关闭的通知。我们使用简单的 Qt TCP 服务器(TcpMsgHandler
)来完成此操作。 - 与 Neptune 的 中间件 通信以获取安全 UI 元素状态的值。与 Neptune 的 Neptune 3 UI - Companion App 一样,使用相同的 Qt IVI 自动生成的客户端。
应用程序的工作流程如下
- 从
BUILD_FOLDER/qsr-safelayout/SafeTelltalesPanel.srl
加载生成的布局 - 创建窗口并将其连接到 Qt Safe Renderer 的 StateManager
- 启动 TCP 服务器以处理来自非安全分区的心跳并显示警告;在新心跳中隐藏它们
- 启动 中间件 客户端以接收安全 UI 元素可见性和文本值的值
在桌面上运行
要在桌面上运行 Qt Safe Renderer,首先启动 中间件 服务:`remotesettings-server` 和 `drivedata-simulation-server`。
注意:如果这些服务在Neptune 3 UI应用程序之前没有启动,则在应用程序关闭后它们将被停止。
然后启动neptune3-ui
应用,之后启动neptune3-ui-qsr-cluster
应用。透明的Safe UI窗口将显示与Neptune 3 UI集群相同的速度和功率指示器和文字值。在桌面版本中,可以直接在Neptune 3 UI的集群窗口上放置Qt Safe Renderer窗口,以证明指示器在安全和非安全部分具有相同的位置和比例。如果启用了Qt Safe Renderer支持,则集群窗口的位置将从非安全分区发送到安全部分。对于neptune3-ui-qsr-cluster
,Neptune 3 UI集群窗口的覆盖默认启用,可以通过修改设置文件中的布尔键来关闭,基于QSettings,公司名为“Luxoft Sweden AB”,应用名为“QSRCluster”。
[gui] stick_to_cluster=false
此键用于演示整个集群的形态:底部的Neptune 3 UI和顶部的安全元素,就像集群在一个具有硬件分层的实际目标上渲染一样。然而,在桌面版中,没有硬件分层,所以我们手动将一个窗口放置在另一个窗口上方。我们还使该窗口跟随另一个窗口的坐标,以同步它们在屏幕上的位置。
针对目标设备的特定选项
在目标设备上运行neptune3-ui-qsr-cluster
应用,例如Intel NUC,可能需要应用程序窗口具有不透明背景。为了使应用程序能够自动填充背景,设置环境变量QSR_FILL_BLACK_BACKGROUND
为1
。
当neptune3-ui-qsr-cluster
应用无法访问存活消息,且在Main UI
应用程序停止或崩溃后启动时,您可能需要在启动时显示警告消息、速度值和功率。为了启用此功能,设置环境变量QSR_SHOW_TEXT_ON_STARTUP
为1
。
©2019 Luxoft Sweden AB。此处包含的文档贡献的版权属于各自的拥有者。
提供的文档根据自由软件基金会发布的GNU自由文档许可1.3版的条款获得许可。
Qt和相应的标志是芬兰的Qt Company Ltd.和/或其他国家和地区的商标。所有其他商标都是其各自所有者的财产。