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.
Problem
ParameterMetaData::setEnumFromPairs(src/FirmwarePlugin/ParameterMetaData.cc) validates each enum code withmetaData->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..10plus0 = 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 forconvertAndValidateRaw. 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 soconvertAndValidateRawpasses), which addresses the type half of the same class of problem.