8void
Parameter::parse(const QJsonValue& jsonValue)
10 label = jsonValue[
"label"].toString();
11 name = jsonValue[
"name"].toString();
12 indexOffset = jsonValue[
"index-offset"].toInt(0);
13 QString displayOptionStr = jsonValue[
"show-as"].toString();
14 if (displayOptionStr ==
"true-if-positive") {
15 displayOption = DisplayOption::BoolTrueIfPositive;
16 }
else if (displayOptionStr ==
"bitset") {
17 displayOption = DisplayOption::Bitset;
18 }
else if (displayOptionStr !=
"") {
19 qCDebug(ActuatorsConfigLog) <<
"Unknown param display option (show-as):" << displayOptionStr;
21 advanced = jsonValue[
"advanced"].toBool(
false);
102 const bool debugEnabled = ActuatorsConfigLog().isDebugEnabled();
105 logPrefix = QStringLiteral(
"Condition");
106 if (!label.isEmpty()) {
107 logPrefix += QStringLiteral(
" [%1]").arg(label);
111 QRegularExpression re(
"^([0-9A-Za-z_-]+)([\\!=<>]+)(-?\\d+)$");
112 QRegularExpressionMatch match = re.match(condition);
113 if (condition.isEmpty()) {
115 _alwaysTrueReason = QStringLiteral(
"empty/default");
117 qCDebug(ActuatorsConfigLog) << logPrefix +
": <empty> (defaults to true)";
119 }
else if (condition ==
"true") {
121 _alwaysTrueReason = QStringLiteral(
"literal true");
123 qCDebug(ActuatorsConfigLog) << logPrefix +
": true";
125 }
else if (condition ==
"false") {
128 qCDebug(ActuatorsConfigLog) << logPrefix +
": false";
130 }
else if (match.hasMatch()) {
131 _parameter = match.captured(1);
132 QString operation = match.captured(2);
133 if (operation ==
">") {
135 }
else if (operation ==
">=") {
137 }
else if (operation ==
"==") {
139 }
else if (operation ==
"!=") {
141 }
else if (operation ==
"<") {
143 }
else if (operation ==
"<=") {
147 _alwaysTrueReason = QStringLiteral(
"unknown operator '%1'").arg(operation);
148 qCWarning(ActuatorsConfigLog) <<
"Unknown condition operation: " << operation;
150 _value = match.captured(3).toInt();
153 qCDebug(ActuatorsConfigLog) << logPrefix + QStringLiteral(
": Param:%1 op:%2 value:%3").arg(_parameter, operation).arg(_value);
161 }
else if (debugEnabled) {
162 qCDebug(ActuatorsConfigLog) << logPrefix + QStringLiteral(
": Unsupported param type:%1").arg((
int)param->type());
164 }
else if (debugEnabled) {
165 qCDebug(ActuatorsConfigLog) << logPrefix + QStringLiteral(
": Param does not exist:%1").arg(_parameter);
168 _alwaysTrueReason = QStringLiteral(
"unrecognized '%1'").arg(condition);
169 qCWarning(ActuatorsConfigLog) <<
"Condition"
170 << (label.isEmpty() ? QString() : QStringLiteral(
" [%1]").arg(label))
171 << QStringLiteral(
": Unrecognized condition string '%1', defaulting to true").arg(condition);
179 if (ActuatorsConfigLog().isDebugEnabled()) {
180 QString logPrefix = _label.isEmpty() ? QStringLiteral(
"Evaluating condition") : QStringLiteral(
"Evaluating [%1]").arg(_label);
181 qCDebug(ActuatorsConfigLog) << logPrefix <<
"-> true (" << _alwaysTrueReason <<
")";
187 if (ActuatorsConfigLog().isDebugEnabled()) {
188 QString logPrefix = _label.isEmpty() ? QStringLiteral(
"Evaluating condition") : QStringLiteral(
"Evaluating [%1]").arg(_label);
189 qCDebug(ActuatorsConfigLog) << logPrefix <<
"-> false (literal false)";
195 if (ActuatorsConfigLog().isDebugEnabled()) {
196 QString logPrefix = _label.isEmpty() ? QStringLiteral(
"Evaluating condition") : QStringLiteral(
"Evaluating [%1]").arg(_label);
197 qCDebug(ActuatorsConfigLog) << logPrefix <<
"-> false (parameter" << _parameter <<
"unavailable for evaluation)";
202 int32_t paramValue = _fact->rawValue().toInt();
206 switch (_operation) {
208 result = paramValue > _value;
212 result = paramValue >= _value;
216 result = paramValue == _value;
220 result = paramValue != _value;
224 result = paramValue < _value;
228 result = paramValue <= _value;
232 qCWarning(ActuatorsConfigLog) <<
"Unexpected operation type in condition evaluation";
236 if (ActuatorsConfigLog().isDebugEnabled()) {
237 QString logPrefix = _label.isEmpty() ? QStringLiteral(
"Evaluating condition") : QStringLiteral(
"Evaluating [%1]").arg(_label);
238 qCDebug(ActuatorsConfigLog) << logPrefix <<
"->" << (result ?
"true" :
"false")
239 <<
"(" << _parameter <<
"=" << paramValue << operation << _value <<
")";