Skip to content

Parameter enum values outside min/max operating range are silently dropped #14854

Description

@DonLakeFlyer

Problem

ParameterMetaData::setEnumFromPairs (src/FirmwarePlugin/ParameterMetaData.cc) validates each enum code with metaData->convertAndValidateRaw(code, false, ...), which checks against the fact's full metadata — including the firmware-declared min/max operating range.

Firmware metadata frequently defines sentinel enum values outside the operating range (e.g. a param with range 0.5..10 plus 0 = Disabled). These legitimate entries fail range validation and are silently dropped from the enum list, so options like "Disabled" never show up in the parameter editor combo box.

Proposed fix

Validate enum codes against the storage type only, not the operating range: construct a bare FactMetaData typeMetaData(metaData->type()) (hoisted outside the loop) and use it for convertAndValidateRaw. This still rejects codes that don't fit the storage type while keeping valid sentinel values.

This complements the existing workaround in APMParameterMetaData.cc (signed conversion of [128..255] byte values so convertAndValidateRaw passes), which addresses the type half of the same class of problem.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions