|
- #include "hmi_control_registry.h"
-
- #include <algorithm>
- #include <array>
- #include <cstddef>
-
- namespace {
-
- constexpr std::array kControlDescriptors = {
- HmiControlDescriptor{HmiControlType::Button,
- "button",
- "按钮",
- "button",
- "按钮",
- {0, 0, 120, 40},
- HmiBindingKind::Bit,
- HmiRuntimeValueKind::Bit,
- true},
- HmiControlDescriptor{HmiControlType::Indicator,
- "indicator",
- "指示灯",
- "indicator",
- "指示灯",
- {0, 0, 64, 64},
- HmiBindingKind::Bit,
- HmiRuntimeValueKind::Bit,
- true},
- HmiControlDescriptor{HmiControlType::NumericDisplay,
- "numericDisplay",
- "数值显示",
- "numeric-display",
- "数值显示",
- {0, 0, 120, 40},
- HmiBindingKind::Word,
- HmiRuntimeValueKind::Word,
- true},
- HmiControlDescriptor{HmiControlType::NumericInput,
- "numericInput",
- "数值输入",
- "numeric-input",
- "数值输入",
- {0, 0, 120, 40},
- HmiBindingKind::Word,
- HmiRuntimeValueKind::Word,
- true},
- HmiControlDescriptor{HmiControlType::Label,
- "label",
- "文本",
- "label",
- "文本",
- {0, 0, 120, 40},
- HmiBindingKind::None,
- HmiRuntimeValueKind::None,
- false},
- HmiControlDescriptor{HmiControlType::PageJump,
- "pageJump",
- "页面跳转",
- "page-jump",
- "页面跳转",
- {0, 0, 120, 40},
- HmiBindingKind::None,
- HmiRuntimeValueKind::None,
- false},
- HmiControlDescriptor{HmiControlType::AlarmList,
- "alarmList",
- "报警列表",
- "alarm-list",
- "报警信息",
- {0, 0, 360, 180},
- HmiBindingKind::None,
- HmiRuntimeValueKind::None,
- false},
- HmiControlDescriptor{HmiControlType::ProgressBar,
- "progressBar",
- "进度条",
- "progress-bar",
- "进度",
- {0, 0, 240, 36},
- HmiBindingKind::Word,
- HmiRuntimeValueKind::Word,
- true}
- };
-
- static_assert(
- kControlDescriptors.size()
- == static_cast<std::size_t>(HmiControlType::Count),
- "每个 HMI 控件类型都必须注册描述");
-
- } // namespace
-
- const HmiControlDescriptor *findHmiControlDescriptor(HmiControlType type)
- {
- const auto descriptor = std::find_if(
- kControlDescriptors.cbegin(),
- kControlDescriptors.cend(),
- [type](const HmiControlDescriptor &candidate)
- {
- return candidate.type == type;
- });
- return descriptor == kControlDescriptors.cend() ? nullptr : &*descriptor;
- }
-
- const HmiControlDescriptor *findHmiControlDescriptor(
- std::string_view storage_name)
- {
- const auto descriptor = std::find_if(
- kControlDescriptors.cbegin(),
- kControlDescriptors.cend(),
- [storage_name](const HmiControlDescriptor &candidate)
- {
- return storage_name == candidate.storageName;
- });
- return descriptor == kControlDescriptors.cend() ? nullptr : &*descriptor;
- }
-
- std::optional<RegisterArea> hmiBindingArea(HmiBindingKind binding_kind)
- {
- switch (binding_kind)
- {
- case HmiBindingKind::Bit:
- {
- return RegisterArea::M;
- }
- case HmiBindingKind::Word:
- {
- return RegisterArea::D;
- }
- case HmiBindingKind::None:
- default:
- {
- return std::nullopt;
- }
- }
- }
|