blob: 2ad0f0674d9d776d809df54b138f065eea68323b [file] [log] [blame]
/*
*
* Copyright (c) 2024 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "service-area-cluster-objects.h"
namespace chip {
namespace app {
namespace Clusters {
namespace ServiceArea {
/**
* ServiceArea::StorageDelegate Defines methods for implementing target/application-specific
* logic for managing the storage of some Service Area cluster attributes.
*/
class StorageDelegate
{
public:
StorageDelegate() = default;
virtual ~StorageDelegate() = default;
/**
* @brief This method will be called during the ServiceArea server initialization after the Instance information has been
* validated and the Instance has been registered. This can be used to initialise the memory required.
*/
virtual CHIP_ERROR Init() { return CHIP_NO_ERROR; };
//*************************************************************************
// Supported Areas accessors and manipulators
virtual uint32_t GetNumberOfSupportedAreas() = 0;
/**
* @brief Get a supported area using the position in the list.
* @param[in] listIndex the position in the list.
* @param[out] aSupportedArea a copy of the area contents, if found.
* @return true if an area is found, false otherwise.
*/
virtual bool GetSupportedAreaByIndex(uint32_t listIndex, AreaStructureWrapper & aSupportedArea) = 0;
/**
* @brief Get a supported area that matches a areaID.
* @param[in] aAreaId the areaID to search for.
* @param[out] listIndex the area's index in the list, if found.
* @param[out] aSupportedArea a copy of the area contents, if found.
* @return true if an area is found, false otherwise.
*
* @note may be overloaded in device implementation for optimization, if desired.
*/
virtual bool GetSupportedAreaById(uint32_t aAreaId, uint32_t & listIndex, AreaStructureWrapper & aSupportedArea);
/**
* @return true if an area with the aAreaId ID exists in the supported areas attribute. False otherwise.
*/
virtual bool IsSupportedArea(uint32_t aAreaId);
/**
* This method is called by the server instance to add a new area to the list.
* The server instance will ensure that the newArea is a valid, unique area.
* @param [in] newArea new area to add.
* @param [out] listIndex filled with the list index for the new area, if successful.
* @return true if successful, false otherwise.
* @note this method SHOULD double check that the added area won't exceed the maximum list size.
*/
virtual bool AddSupportedAreaRaw(const AreaStructureWrapper & newArea, uint32_t & listIndex) = 0;
/**
* This method is called by the server instance to modify an existing area in the list.
* The server instance will ensure that the modifiedArea is a valid, unique area.
* @param[in] listIndex The index of the area being modified.
* @param[in] modifiedArea An area with the modified contents.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that newArea's areaID matches the object at listIndex.
*/
virtual bool ModifySupportedAreaRaw(uint32_t listIndex, const AreaStructureWrapper & modifiedArea) = 0;
/**
* @return true if supported locations was not already null, false otherwise.
*/
virtual bool ClearSupportedAreasRaw() = 0;
/**
* @param areaId the ID af the area to be removed.
* @return true if the area was removed, false otherwise.
*/
virtual bool RemoveSupportedAreaRaw(uint32_t areaId);
//*************************************************************************
// Supported Maps accessors and manipulators
virtual uint32_t GetNumberOfSupportedMaps() = 0;
/**
* @brief Get a supported map using the position in the list.
* @param[in] listIndex the position in the list.
* @param[out] aSupportedMap copy of the map contents, if found.
* @return true if a supported map is found, false otherwise.
*/
virtual bool GetSupportedMapByIndex(uint32_t listIndex, MapStructureWrapper & aSupportedMap) = 0;
/**
* @brief Get a supported map that matches a mapID.
* @param[in] aMapId the mapID to search for.
* @param[out] listIndex the map's index in the list, if found.
* @param[out] aSupportedMap copy of the location contents, if found.
* @return true if a supported map is found, false otherwise.
*
* @note may be overloaded in device implementation for optimization, if desired.
*/
virtual bool GetSupportedMapById(uint32_t aMapId, uint32_t & listIndex, MapStructureWrapper & aSupportedMap);
/**
* @return true if a map with the aMapId ID exists in the supported maps attribute. False otherwise.
*/
bool IsSupportedMap(uint32_t aMapId);
/**
* This method is called by the server instance to add a new map to the list.
* The server instance will ensure that the newMap is a valid, unique map.
* @param[in] newMap The new map to add.
* @param[out] listIndex filled with the list index of the new map, if successful.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that the added map won't exceed the maximum list size
*/
virtual bool AddSupportedMapRaw(const MapStructureWrapper & newMap, uint32_t & listIndex) = 0;
/**
* This method is called by the server instance to modify an existing map in the list.
* The server instance will ensure that the modifiedMap is a valid, unique map.
* @param[in] listIndex The index of the map being modified.
* @param[in] modifiedMapA map with the modified contents.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that modifiedMap's mapID matches the object at listIndex.
*/
virtual bool ModifySupportedMapRaw(uint32_t listIndex, const MapStructureWrapper & modifiedMap) = 0;
/**
* @return true if supported maps was not already null, false otherwise.
*/
virtual bool ClearSupportedMapsRaw() = 0;
/**
* @param mapId the ID of the map to be removed.
* @return true if a map is removed. False otherwise.
*/
virtual bool RemoveSupportedMapRaw(uint32_t mapId);
//*************************************************************************
// Selected Areas accessors and manipulators
virtual uint32_t GetNumberOfSelectedAreas() = 0;
/**
* @brief Get a selected area using the position in the list.
* @param[in] listIndex the position in the list.
* @param[out] selectedArea the selected area value, if found.
* @return true if a selected area is found, false otherwise.
*/
virtual bool GetSelectedAreaByIndex(uint32_t listIndex, uint32_t & selectedArea) = 0;
/**
* @return true if the aAreaId areaID is found in the SelectedAreas list, false otherwise.
*
* @note may be overloaded in device implementation for optimization, if desired.
*/
virtual bool IsSelectedArea(uint32_t aAreaId);
/**
* This method is called by the server instance to add a new selected area to the list.
* The server instance will ensure that the aAreaId references a SUPPORTED area, and is unique within selected
* areas.
* @param[in] aAreaId The new areaID to add.
* @param[out] listIndex filled with the list index of the new area, if successful.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that the added area won't exceed the maximum list size.
*/
virtual bool AddSelectedAreaRaw(uint32_t aAreaId, uint32_t & listIndex) = 0;
/**
* @return true if selected locations was not already null, false otherwise.
*/
virtual bool ClearSelectedAreasRaw() = 0;
/**
* @param areaId the area ID to be removed from the SelectedAreas attribute.
* @return ture if this ID was removed, false otherwise.
*/
virtual bool RemoveSelectedAreasRaw(uint32_t areaId) = 0;
//*************************************************************************
// Progress accessors and manipulators
virtual uint32_t GetNumberOfProgressElements() = 0;
/**
* @brief Get a progress element using the position in the list.
* @param[in] listIndex the position in the list.
* @param[out] aProgressElement copy of the progress element contents, if found.
* @return true if a progress element is found, false otherwise.
*/
virtual bool GetProgressElementByIndex(uint32_t listIndex, Structs::ProgressStruct::Type & aProgressElement) = 0;
/**
* @brief Get a progress element that matches a areaID.
* @param[in] aAreaId the areaID to search for.
* @param[out] listIndex the location's index in the list, if found.
* @param[out] aProgressElement copy of the progress element contents, if found.
* @return true if a progress element is found, false otherwise.
*
* @note may be overloaded in device implementation for optimization, if desired.
*/
virtual bool GetProgressElementById(uint32_t aAreaId, uint32_t & listIndex, Structs::ProgressStruct::Type & aProgressElement);
/**
* @brief Is the progress element in the progress list?
* @param[in] aAreaId location id of the progress element.
* @return true if the progress element identified by Id is in the progress list.
*/
virtual bool IsProgressElement(uint32_t aAreaId);
/**
* This method is called by the server instance to add a new progress element to the list.
* The server instance will ensure that the newProgressElement is a valid, unique progress element.
* @param[in] newProgressElement The new element to add.
* @param[out] listIndex is filled with the list index for the new element, if successful.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that the added element won't exceed the maximum list size.
*/
virtual bool AddProgressElementRaw(const Structs::ProgressStruct::Type & newProgressElement, uint32_t & listIndex) = 0;
/**
* This method is called by the server instance to modify an existing progress element in the list.
* The server instance will ensure that the modifiedProgressElement is a valid and unique progress element.
* @param[in] listIndex The list index of the progress element being modified.
* @param[in] modifiedProgressElement modified element's contents.
* @return true if successful, false otherwise.
*
* @note this function SHOULD double check that modifiedProgressElement's areaID matches the object at listIndex
*/
virtual bool ModifyProgressElementRaw(uint32_t listIndex, const Structs::ProgressStruct::Type & modifiedProgressElement) = 0;
/**
* @return true if progress list was not already null, false otherwise.
*/
virtual bool ClearProgressRaw() = 0;
/**
* @param areaId the area ID of the progress element to be removed.
* @return ture if the progress element was removed, false otherwise.
*/
virtual bool RemoveProgressElementRaw(uint32_t areaId) = 0;
};
} // namespace ServiceArea
} // namespace Clusters
} // namespace app
} // namespace chip