Skip to content

Commit

Permalink
Applied fixes for coding style and array management
Browse files Browse the repository at this point in the history
  • Loading branch information
lpbeliveau-silabs authored and pull[bot] committed Aug 7, 2023
1 parent 955dc7a commit cf4fd6b
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 141 deletions.
3 changes: 2 additions & 1 deletion src/app/clusters/scenes/ExtensionFieldsSets.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
namespace chip {
namespace scenes {

static constexpr uint8_t kInvalidPosition = 0xff;
static constexpr uint8_t kMaxClusterPerScenes = CHIP_CONFIG_SCENES_MAX_CLUSTERS_PER_SCENES;
static constexpr uint8_t kMaxFieldsPerCluster = CHIP_CONFIG_SCENES_MAX_EXTENSION_FIELDSET_SIZE_PER_CLUSTER;

Expand All @@ -35,7 +36,7 @@ class ExtensionFieldsSets
virtual CHIP_ERROR Serialize(TLV::TLVWriter & writer) const = 0;
virtual CHIP_ERROR Deserialize(TLV::TLVReader & reader) = 0;
virtual void Clear() = 0;
virtual bool is_empty() const = 0;
virtual bool IsEmpty() const = 0;
};
} // namespace scenes
} // namespace chip
80 changes: 40 additions & 40 deletions src/app/clusters/scenes/ExtensionFieldsSetsImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ CHIP_ERROR ExtensionFieldsSetsImpl::Serialize(TLV::TLVWriter & writer) const
TLV::TLVType container;
ReturnErrorOnFailure(writer.StartContainer(TLV::ContextTag(1), TLV::kTLVType_Structure, container));
ReturnErrorOnFailure(writer.Put(TagFieldNum(), static_cast<uint8_t>(this->mFieldNum)));
if (!this->is_empty())
if (!this->IsEmpty())
{
for (uint8_t i = 0; i < kMaxClusterPerScenes; i++)
{
if (!this->mEFS[i].is_empty())
if (!this->mEFS[i].IsEmpty())
{
LogErrorOnFailure(this->mEFS[i].Serialize(writer));
ReturnErrorOnFailure(this->mEFS[i].Serialize(writer));
}
}
}
Expand All @@ -50,7 +50,7 @@ CHIP_ERROR ExtensionFieldsSetsImpl::Deserialize(TLV::TLVReader & reader)
ReturnErrorOnFailure(reader.Next(TagFieldNum()));
ReturnErrorOnFailure(reader.Get(this->mFieldNum));

if (!this->is_empty())
if (!this->IsEmpty())
{
for (uint8_t i = 0; i < this->mFieldNum; i++)
{
Expand All @@ -60,9 +60,10 @@ CHIP_ERROR ExtensionFieldsSetsImpl::Deserialize(TLV::TLVReader & reader)

return reader.ExitContainer(container);
}

void ExtensionFieldsSetsImpl::Clear()
{
if (!this->is_empty())
if (!this->IsEmpty())
{
for (uint8_t i = 0; i < kMaxClusterPerScenes; i++)
{
Expand All @@ -72,76 +73,75 @@ void ExtensionFieldsSetsImpl::Clear()
this->mFieldNum = 0;
}

bool ExtensionFieldsSetsImpl::is_empty() const
bool ExtensionFieldsSetsImpl::IsEmpty() const
{
return (this->mFieldNum <= 0);
return (this->mFieldNum == 0);
}

/// @brief Inserts a field set into the array of extension field sets for a scene entry if the same ID is present in the EFS array,
/// it will overwrite it
/// @param field field set to be inserted
/// @return CHIP_NO_ERROR if insertion worked, CHIP_ERROR_BUFFER_TOO_SMALL if the array is already full
CHIP_ERROR ExtensionFieldsSetsImpl::insertField(ExtensionFieldsSet & field)
/// @brief Inserts a field Set set into the array of extension field Set sets for a scene entry.
/// If the same ID is present in the EFS array, it will overwrite it.
/// @param fieldSet field set to be inserted
/// @return CHIP_NO_ERROR if insertion worked, CHIP_ERROR_NO_MEMORY if the array is already full
CHIP_ERROR ExtensionFieldsSetsImpl::InsertFieldSet(ExtensionFieldsSet & fieldSet)
{
CHIP_ERROR err = CHIP_ERROR_INVALID_LIST_LENGTH;
uint8_t idPosition = 0xff, fisrtEmptyPosition = 0xff;
CHIP_ERROR err = CHIP_ERROR_NO_MEMORY;
uint8_t idPosition = kInvalidPosition;
uint8_t firstEmptyPosition = kInvalidPosition;
for (uint8_t i = 0; i < kMaxClusterPerScenes; i++)
{
if (this->mEFS[i].mID == field.mID)
if (this->mEFS[i].mID == fieldSet.mID)
{
idPosition = i;
break;
}

if (this->mEFS[i].is_empty() && fisrtEmptyPosition == 0xFF)
if (this->mEFS[i].IsEmpty() && firstEmptyPosition == 0xFF)
{
fisrtEmptyPosition = i;
firstEmptyPosition = i;
}
}

// if found, insert at found position, otherwise at first free possition, otherwise return error
// if found, replace at found position, otherwise at insert first free position, otherwise return error
if (idPosition < kMaxClusterPerScenes)
{
ReturnErrorOnFailure(this->mEFS[idPosition] = field);
ReturnErrorOnFailure(this->mEFS[idPosition] = fieldSet);
err = CHIP_NO_ERROR;
}
else if (fisrtEmptyPosition < kMaxClusterPerScenes)
else if (firstEmptyPosition < kMaxClusterPerScenes)
{
ReturnErrorOnFailure(this->mEFS[fisrtEmptyPosition] = field);
ReturnErrorOnFailure(this->mEFS[firstEmptyPosition] = fieldSet);
this->mFieldNum++;
err = CHIP_NO_ERROR;
}

return err;
}

CHIP_ERROR ExtensionFieldsSetsImpl::getFieldAtPosition(ExtensionFieldsSet & field, uint8_t position)
CHIP_ERROR ExtensionFieldsSetsImpl::GetFieldSetAtPosition(ExtensionFieldsSet & fieldSet, uint8_t position)
{
if (position < kMaxClusterPerScenes)
if (position < this->mFieldNum)
{
ReturnErrorOnFailure(field = this->mEFS[position]);
ReturnErrorOnFailure(fieldSet = this->mEFS[position]);
}

return CHIP_NO_ERROR;
}

CHIP_ERROR ExtensionFieldsSetsImpl::removeFieldAtPosition(uint8_t position)
CHIP_ERROR ExtensionFieldsSetsImpl::RemoveFieldAtPosition(uint8_t position)
{
if (!this->is_empty())
{
if (position < kMaxClusterPerScenes)
{
if (!this->mEFS[position].is_empty())
{
this->mEFS[position].Clear();
this->mFieldNum--;
}
}
else
{
return CHIP_ERROR_ACCESS_DENIED;
}
}

VerifyOrReturnError(position < kMaxClusterPerScenes, CHIP_ERROR_INVALID_ARGUMENT);
VerifyOrReturnValue(!this->IsEmpty() && !this->mEFS[position].IsEmpty(), CHIP_NO_ERROR);

uint8_t next = position + 1;
uint8_t moveNum = kMaxClusterPerScenes - next;

// Compress array after removal
memmove(&this->mEFS[position], &this->mEFS[next], sizeof(ExtensionFieldsSet) * moveNum);

this->mFieldNum--;
// Clear last occupied position
this->mEFS[mFieldNum].Clear(); //

return CHIP_NO_ERROR;
}
Expand Down
20 changes: 7 additions & 13 deletions src/app/clusters/scenes/ExtensionFieldsSetsImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,8 @@ struct ExtensionFieldsSet

ReturnErrorOnFailure(reader.Next(TagEFS()));
ReturnErrorOnFailure(reader.Get(buffer));
if (buffer.size() > kMaxFieldsPerCluster)
{
this->mUsedBytes = kMaxFieldsPerCluster;
}
else
{
this->mUsedBytes = static_cast<uint8_t>(buffer.size());
}
VerifyOrReturnError(buffer.size() <= kMaxFieldsPerCluster, CHIP_ERROR_BUFFER_TOO_SMALL);
this->mUsedBytes = static_cast<uint8_t>(buffer.size());
memcpy(this->mBytesBuffer, buffer.data(), this->mUsedBytes);

return reader.ExitContainer(container);
Expand All @@ -85,7 +79,7 @@ struct ExtensionFieldsSet
this->mUsedBytes = 0;
}

bool is_empty() const { return (this->mUsedBytes == 0); }
bool IsEmpty() const { return (this->mUsedBytes == 0); }

bool operator==(const ExtensionFieldsSet & other)
{
Expand Down Expand Up @@ -120,12 +114,12 @@ class ExtensionFieldsSetsImpl : public ExtensionFieldsSets
CHIP_ERROR Serialize(TLV::TLVWriter & writer) const override;
CHIP_ERROR Deserialize(TLV::TLVReader & reader) override;
void Clear() override;
bool is_empty() const override;
bool IsEmpty() const override;

// implementation
CHIP_ERROR insertField(ExtensionFieldsSet & field);
CHIP_ERROR getFieldAtPosition(ExtensionFieldsSet & field, uint8_t position);
CHIP_ERROR removeFieldAtPosition(uint8_t position);
CHIP_ERROR InsertFieldSet(ExtensionFieldsSet & field);
CHIP_ERROR GetFieldSetAtPosition(ExtensionFieldsSet & field, uint8_t position);
CHIP_ERROR RemoveFieldAtPosition(uint8_t position);

bool operator==(const ExtensionFieldsSetsImpl & other)
{
Expand Down
48 changes: 24 additions & 24 deletions src/app/clusters/scenes/SceneTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,20 @@ typedef uint16_t SceneTransitionTime;
typedef uint8_t TransitionTime100ms;

static constexpr uint8_t kMaxScenePerFabric = CHIP_CONFIG_SCENES_MAX_PER_FABRIC;
static constexpr size_t kIteratorsMax = CHIP_CONFIG_MAX_SCENES_CONCURRENT_ITERATORS;
static constexpr size_t kSceneNameMax = CHIP_CONFIG_SCENES_CLUSTER_MAXIMUM_NAME_LENGTH;

class SceneTable
{
public:
static constexpr size_t kIteratorsMax = CHIP_CONFIG_MAX_SCENES_CONCURRENT_ITERATORS;
static constexpr size_t kSceneNameMax = CHIP_CONFIG_SCENES_CLUSTER_MAXIMUM_NAME_LENGTH;

/// @brief struct used to identify a scene in storage by 3 ids, endpoint, group and scene
struct SceneStorageId
{
static constexpr TLV::Tag TagFirstSceneEndpointID() { return TLV::ContextTag(1); }
static constexpr TLV::Tag TagFirstSceneGroupID() { return TLV::ContextTag(2); }
static constexpr TLV::Tag TagFirstSceneID() { return TLV::ContextTag(3); }

// Identifies endpoint to which this scene applies to
// Identifies endpoint to which this scene applies
EndpointId mSceneEndpointId = kInvalidEndpointId;
// Identifies group within the scope of the given fabric
SceneGroupID mSceneGroupId = kGlobalGroupSceneId;
Expand Down Expand Up @@ -113,28 +112,28 @@ class SceneTable
char mName[kSceneNameMax] = { 0 };
size_t mNameLength = 0;
SceneTransitionTime mSceneTransitionTime = 0;
ExtensionFieldsSetsImpl mExtentsionFieldsSets;
TransitionTime100ms mTransitionTime100 = 0;
ExtensionFieldsSetsImpl mExtensionFieldsSets;
TransitionTime100ms mTransitionTime100ms = 0;
CharSpan mNameSpan;

SceneData(const CharSpan & sceneName = CharSpan(), SceneTransitionTime time = 0, TransitionTime100ms time100ms = 0) :
mSceneTransitionTime(time), mTransitionTime100(time100ms)
mSceneTransitionTime(time), mTransitionTime100ms(time100ms)
{
this->SetName(sceneName);
}
SceneData(ExtensionFieldsSetsImpl fields, const CharSpan & sceneName = CharSpan(), SceneTransitionTime time = 0,
TransitionTime100ms time100ms = 0) :
mSceneTransitionTime(time),
mTransitionTime100(time100ms)
mTransitionTime100ms(time100ms)
{
this->SetName(sceneName);
mExtentsionFieldsSets = fields;
mExtensionFieldsSets = fields;
}
SceneData(const SceneData & other) :
mSceneTransitionTime(other.mSceneTransitionTime), mTransitionTime100(other.mTransitionTime100)
mSceneTransitionTime(other.mSceneTransitionTime), mTransitionTime100ms(other.mTransitionTime100ms)
{
this->SetName(other.mNameSpan);
mExtentsionFieldsSets = other.mExtentsionFieldsSets;
mExtensionFieldsSets = other.mExtensionFieldsSets;
}
~SceneData(){};

Expand All @@ -150,8 +149,8 @@ class SceneTable
}

ReturnErrorOnFailure(writer.Put(TagSceneTransitionTime(), static_cast<uint16_t>(this->mSceneTransitionTime)));
ReturnErrorOnFailure(writer.Put(TagSceneTransitionTime100(), static_cast<uint8_t>(this->mTransitionTime100)));
ReturnErrorOnFailure(this->mExtentsionFieldsSets.Serialize(writer));
ReturnErrorOnFailure(writer.Put(TagSceneTransitionTime100(), static_cast<uint8_t>(this->mTransitionTime100ms)));
ReturnErrorOnFailure(this->mExtensionFieldsSets.Serialize(writer));

return writer.EndContainer(container);
}
Expand All @@ -175,8 +174,8 @@ class SceneTable

ReturnErrorOnFailure(reader.Get(this->mSceneTransitionTime));
ReturnErrorOnFailure(reader.Next(TagSceneTransitionTime100()));
ReturnErrorOnFailure(reader.Get(this->mTransitionTime100));
ReturnErrorOnFailure(this->mExtentsionFieldsSets.Deserialize(reader));
ReturnErrorOnFailure(reader.Get(this->mTransitionTime100ms));
ReturnErrorOnFailure(this->mExtensionFieldsSets.Deserialize(reader));

return reader.ExitContainer(container);
}
Expand All @@ -190,8 +189,9 @@ class SceneTable
}
else
{
Platform::CopyString(mName, sceneName);
mNameLength = sceneName.size();
size_t maxChars = std::min(sceneName.size(), kSceneNameMax);
memcpy(mName, sceneName.data(), maxChars);
mNameLength = maxChars;
}
mNameSpan = CharSpan(mName, mNameLength);
}
Expand All @@ -200,23 +200,23 @@ class SceneTable
{
this->SetName(CharSpan());
mSceneTransitionTime = 0;
mTransitionTime100 = 0;
mExtentsionFieldsSets.Clear();
mTransitionTime100ms = 0;
mExtensionFieldsSets.Clear();
}

bool operator==(const SceneData & other)
{
return (this->mNameSpan.data_equal(other.mNameSpan) && (this->mSceneTransitionTime == other.mSceneTransitionTime) &&
(this->mTransitionTime100 == other.mTransitionTime100) &&
(this->mExtentsionFieldsSets == other.mExtentsionFieldsSets));
(this->mTransitionTime100ms == other.mTransitionTime100ms) &&
(this->mExtensionFieldsSets == other.mExtensionFieldsSets));
}

void operator=(const SceneData & other)
{
this->SetName(other.mNameSpan);
this->mExtentsionFieldsSets = other.mExtentsionFieldsSets;
this->mSceneTransitionTime = other.mSceneTransitionTime;
this->mTransitionTime100 = other.mTransitionTime100;
this->mExtensionFieldsSets = other.mExtensionFieldsSets;
this->mSceneTransitionTime = other.mSceneTransitionTime;
this->mTransitionTime100ms = other.mTransitionTime100ms;
}
};

Expand Down
Loading

0 comments on commit cf4fd6b

Please sign in to comment.