Skip to content

Commit cae9910

Browse files
committed
Using struct InputData&OuptutData to refine logics
in Chef common/clusters/audio-output/AudioOutputManager.* and common/clusters/media-input/MediaInputManager.*
1 parent 9353b1c commit cae9910

File tree

4 files changed

+82
-55
lines changed

4 files changed

+82
-55
lines changed

examples/chef/common/clusters/audio-output/AudioOutputManager.cpp

+15-20
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,14 @@ using chip::app::AttributeValueEncoder;
2727

2828
AudioOutputManager::AudioOutputManager()
2929
{
30-
const int totalOutput = 4;
30+
struct OutputData outputData1(1, chip::app::Clusters::AudioOutput::OutputTypeEnum::kHdmi, "HDMI 1");
31+
mOutputs.push_back(outputData1);
32+
struct OutputData outputData2(2, chip::app::Clusters::AudioOutput::OutputTypeEnum::kHdmi, "HDMI 2");
33+
mOutputs.push_back(outputData2);
34+
struct OutputData outputData3(3, chip::app::Clusters::AudioOutput::OutputTypeEnum::kHdmi, "HDMI 3");
35+
mOutputs.push_back(outputData3);
3136

32-
for (uint8_t i = 1; i < totalOutput; ++i)
33-
{
34-
OutputInfoType outputInfo;
35-
outputInfo.outputType = chip::app::Clusters::AudioOutput::OutputTypeEnum::kHdmi;
36-
// note: safe only because of use of string literal
37-
outputInfo.name = chip::CharSpan::fromCharString("HDMI");
38-
outputInfo.index = static_cast<uint8_t>(i);
39-
mOutputs.push_back(outputInfo);
40-
}
37+
mCurrentOutput = 1;
4138
}
4239

4340
uint8_t AudioOutputManager::HandleGetCurrentOutput()
@@ -48,23 +45,21 @@ uint8_t AudioOutputManager::HandleGetCurrentOutput()
4845
CHIP_ERROR AudioOutputManager::HandleGetOutputList(AttributeValueEncoder & aEncoder)
4946
{
5047
return aEncoder.EncodeList([this](const auto & encoder) -> CHIP_ERROR {
51-
for (auto const & outputInfo : this->mOutputs)
48+
for (auto const & outputData : mOutputs)
5249
{
53-
ReturnErrorOnFailure(encoder.Encode(outputInfo));
50+
ReturnErrorOnFailure(encoder.Encode(outputData.GetEncodable()));
5451
}
5552
return CHIP_NO_ERROR;
5653
});
5754
}
5855

59-
bool AudioOutputManager::HandleRenameOutput(const uint8_t & index, const chip::CharSpan & name)
56+
bool AudioOutputManager::HandleRenameOutput(const uint8_t & index, const chip::CharSpan & newName)
6057
{
61-
for (OutputInfoType & output : mOutputs)
58+
for (auto & outputData : mOutputs)
6259
{
63-
if (output.index == index)
60+
if (outputData.index == index)
6461
{
65-
const size_t len = std::min(mNameLenMax, name.size());
66-
memcpy(mOutputName[index], name.data(), len);
67-
output.name = mOutputName[index];
62+
outputData.Rename(newName);
6863
return true;
6964
}
7065
}
@@ -74,9 +69,9 @@ bool AudioOutputManager::HandleRenameOutput(const uint8_t & index, const chip::C
7469

7570
bool AudioOutputManager::HandleSelectOutput(const uint8_t & index)
7671
{
77-
for (OutputInfoType & output : mOutputs)
72+
for (auto & outputData : mOutputs)
7873
{
79-
if (output.index == index)
74+
if (outputData.index == index)
8075
{
8176
mCurrentOutput = index;
8277
return true;

examples/chef/common/clusters/audio-output/AudioOutputManager.h

+20-4
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,26 @@ class AudioOutputManager : public chip::app::Clusters::AudioOutput::Delegate
3333
bool HandleRenameOutput(const uint8_t & index, const chip::CharSpan & name) override;
3434
bool HandleSelectOutput(const uint8_t & index) override;
3535

36+
struct OutputData
37+
{
38+
uint8_t index;
39+
chip::app::Clusters::AudioOutput::OutputTypeEnum outputType;
40+
std::string name;
41+
42+
OutputData(uint8_t i, chip::app::Clusters::AudioOutput::OutputTypeEnum t, const char * n) : index(i), outputType(t), name(n)
43+
{}
44+
void Rename(const chip::CharSpan & newName) { name.assign(newName.data(), newName.size()); }
45+
OutputInfoType GetEncodable() const
46+
{
47+
OutputInfoType result;
48+
result.index = index;
49+
result.outputType = outputType;
50+
result.name = chip::CharSpan::fromCharString(name.c_str());
51+
return result;
52+
}
53+
};
54+
3655
protected:
3756
uint8_t mCurrentOutput = 1;
38-
std::vector<OutputInfoType> mOutputs;
39-
// Magic numbers are here on purpose, please allocate memory
40-
static constexpr size_t mNameLenMax = 32;
41-
char mOutputName[10][mNameLenMax];
57+
std::vector<struct OutputData> mOutputs;
4258
};

examples/chef/common/clusters/media-input/MediaInputManager.cpp

+22-26
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,25 @@ using namespace chip::app::Clusters::MediaInput;
2525

2626
MediaInputManager::MediaInputManager()
2727
{
28-
mCurrentInput = 1;
28+
struct InputData inputData1(1, chip::app::Clusters::MediaInput::InputTypeEnum::kHdmi, "HDMI 1",
29+
"High-Definition Multimedia Interface");
30+
mInputs.push_back(inputData1);
31+
struct InputData inputData2(2, chip::app::Clusters::MediaInput::InputTypeEnum::kHdmi, "HDMI 2",
32+
"High-Definition Multimedia Interface");
33+
mInputs.push_back(inputData2);
34+
struct InputData inputData3(3, chip::app::Clusters::MediaInput::InputTypeEnum::kHdmi, "HDMI 3",
35+
"High-Definition Multimedia Interface");
36+
mInputs.push_back(inputData3);
2937

30-
for (int i = 1; i < mTotalInput; ++i)
31-
{
32-
InputInfoType inputInfo;
33-
inputInfo.description = chip::CharSpan::fromCharString("High-Definition Multimedia Interface");
34-
inputInfo.name = chip::CharSpan::fromCharString("HDMI");
35-
inputInfo.inputType = chip::app::Clusters::MediaInput::InputTypeEnum::kHdmi;
36-
inputInfo.index = static_cast<uint8_t>(i);
37-
mInputs.push_back(inputInfo);
38-
}
38+
mCurrentInput = 1;
3939
}
4040

4141
CHIP_ERROR MediaInputManager::HandleGetInputList(chip::app::AttributeValueEncoder & aEncoder)
4242
{
4343
return aEncoder.EncodeList([this](const auto & encoder) -> CHIP_ERROR {
44-
for (auto const & inputInfo : this->mInputs)
44+
for (auto const & inputData : this->mInputs)
4545
{
46-
ReturnErrorOnFailure(encoder.Encode(inputInfo));
46+
ReturnErrorOnFailure(encoder.Encode(inputData.GetEncodable()));
4747
}
4848
return CHIP_NO_ERROR;
4949
});
@@ -56,9 +56,9 @@ uint8_t MediaInputManager::HandleGetCurrentInput()
5656

5757
bool MediaInputManager::HandleSelectInput(const uint8_t index)
5858
{
59-
for (InputInfoType & input : mInputs)
59+
for (auto const & inputData : mInputs)
6060
{
61-
if (input.index == index)
61+
if (inputData.index == index)
6262
{
6363
mCurrentInput = index;
6464
return true;
@@ -71,13 +71,11 @@ bool MediaInputManager::HandleSelectInput(const uint8_t index)
7171
bool MediaInputManager::HandleShowInputStatus()
7272
{
7373
ChipLogProgress(Zcl, " MediaInputManager::HandleShowInputStatus()");
74-
for (auto const & inputInfo : this->mInputs)
74+
for (auto const & inputData : mInputs)
7575
{
76-
string name(inputInfo.name.data(), inputInfo.name.size());
77-
string desc(inputInfo.description.data(), inputInfo.description.size());
78-
ChipLogProgress(Zcl, " [%d] type=%d selected=%d name=%s desc=%s", inputInfo.index,
79-
static_cast<uint16_t>(inputInfo.inputType), (mCurrentInput == inputInfo.index ? 1 : 0), name.c_str(),
80-
desc.c_str());
76+
ChipLogProgress(Zcl, " [%d] type=%d selected=%d name=%s desc=%s", inputData.index,
77+
static_cast<uint16_t>(inputData.inputType), (mCurrentInput == inputData.index ? 1 : 0),
78+
inputData.name.c_str(), inputData.description.c_str());
8179
}
8280
return true;
8381
}
@@ -88,15 +86,13 @@ bool MediaInputManager::HandleHideInputStatus()
8886
return true;
8987
}
9088

91-
bool MediaInputManager::HandleRenameInput(const uint8_t index, const chip::CharSpan & name)
89+
bool MediaInputManager::HandleRenameInput(const uint8_t index, const chip::CharSpan & newName)
9290
{
93-
for (InputInfoType & input : mInputs)
91+
for (auto & inputData : mInputs)
9492
{
95-
if (input.index == index)
93+
if (inputData.index == index)
9694
{
97-
const size_t len = std::min(mNameLenMax, name.size());
98-
memcpy(mInputName[index], name.data(), len);
99-
input.name = mInputName[index];
95+
inputData.Rename(newName);
10096
return true;
10197
}
10298
}

examples/chef/common/clusters/media-input/MediaInputManager.h

+25-5
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,33 @@ class MediaInputManager : public chip::app::Clusters::MediaInput::Delegate
3636
bool HandleHideInputStatus() override;
3737
bool HandleRenameInput(const uint8_t index, const chip::CharSpan & name) override;
3838

39+
struct InputData
40+
{
41+
uint8_t index;
42+
chip::app::Clusters::MediaInput::InputTypeEnum inputType;
43+
std::string name;
44+
std::string description;
45+
46+
InputData(uint8_t i, chip::app::Clusters::MediaInput::InputTypeEnum t, const char * n, const char * d) :
47+
index(i), inputType(t), name(n), description(d)
48+
{}
49+
50+
void Rename(const chip::CharSpan & newName) { name.assign(newName.data(), newName.size()); }
51+
52+
InputInfoType GetEncodable() const
53+
{
54+
InputInfoType result;
55+
result.index = index;
56+
result.inputType = inputType;
57+
result.name = chip::CharSpan::fromCharString(name.c_str());
58+
result.description = chip::CharSpan::fromCharString(description.c_str());
59+
return result;
60+
}
61+
};
62+
3963
protected:
4064
uint8_t mCurrentInput;
41-
std::vector<InputInfoType> mInputs;
42-
// Magic numbers are here on purpose, please allocate memory
43-
static constexpr size_t mNameLenMax = 32;
44-
char mInputName[10][mNameLenMax];
65+
std::vector<InputData> mInputs;
4566

4667
private:
47-
static constexpr int mTotalInput = 3;
4868
};

0 commit comments

Comments
 (0)