Skip to content

Commit

Permalink
Move the constraint check for number of presets not to exceed the num… (
Browse files Browse the repository at this point in the history
#35167)

* Move the constraint check for number of presets not to exceed the number of presets supported from the atomic write commit command handling to the write request

* Minor fix

* Do not check if totalExpectedCount > 0 since its an unsigned integer

- Also no need to check if numberOfPresetsSupported is 0.

* Update src/app/clusters/thermostat-server/thermostat-server-presets.cpp

* Update src/app/clusters/thermostat-server/thermostat-server-presets.cpp

---------

Co-authored-by: Boris Zbarsky <[email protected]>
  • Loading branch information
nivi-apple and bzbarsky-apple authored Aug 26, 2024
1 parent a296b66 commit acba7f8
Showing 1 changed file with 14 additions and 19 deletions.
33 changes: 14 additions & 19 deletions src/app/clusters/thermostat-server/thermostat-server-presets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,20 @@ CHIP_ERROR ThermostatAttrAccess::AppendPendingPreset(Thermostat::Delegate * dele
return CHIP_IM_GLOBAL_STATUS(ConstraintError);
}

// Before adding this preset to the pending presets, if the expected length of the pending presets' list
// exceeds the total number of presets supported, return RESOURCE_EXHAUSTED. Note that the preset has not been appended yet.

uint8_t numberOfPendingPresets = CountNumberOfPendingPresets(delegate);

// We will be adding one more preset, so reject if the length is already at max.
if (numberOfPendingPresets >= delegate->GetNumberOfPresets())
{
return CHIP_IM_GLOBAL_STATUS(ResourceExhausted);
}

// TODO #34556 : Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
// scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.

return delegate->AppendToPendingPresetList(preset);
}

Expand Down Expand Up @@ -504,25 +518,6 @@ Status ThermostatAttrAccess::PrecommitPresets(EndpointId endpoint)
}
}

uint8_t totalCount = CountNumberOfPendingPresets(delegate);

uint8_t numberOfPresetsSupported = delegate->GetNumberOfPresets();

if (numberOfPresetsSupported == 0)
{
ChipLogError(Zcl, "emberAfThermostatClusterCommitPresetsSchedulesRequestCallback: Failed to get NumberOfPresets");
return Status::InvalidInState;
}

// If the expected length of the presets attribute with the applied changes exceeds the total number of presets supported,
// return RESOURCE_EXHAUSTED. Note that the changes are not yet applied.
if (numberOfPresetsSupported > 0 && totalCount > numberOfPresetsSupported)
{
return Status::ResourceExhausted;
}

// TODO: Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
// scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.
return Status::Success;
}

Expand Down

0 comments on commit acba7f8

Please sign in to comment.