Skip to content

Commit a1f47ae

Browse files
committed
Removed server handling of measured value and added allcluster command to simulate measured value
1 parent f154a33 commit a1f47ae

File tree

4 files changed

+37
-23
lines changed

4 files changed

+37
-23
lines changed

examples/all-clusters-app/linux/AllClustersCommandDelegate.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <app/clusters/refrigerator-alarm-server/refrigerator-alarm-server.h>
2626
#include <app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.h>
2727
#include <app/clusters/software-diagnostics-server/software-diagnostics-server.h>
28+
#include <app/clusters/soil-measurement-server/soil-measurement-server.h>
2829
#include <app/clusters/switch-server/switch-server.h>
2930
#include <app/server/Server.h>
3031
#include <app/util/attribute-storage.h>
@@ -555,6 +556,24 @@ void AllClustersAppCommandHandler::HandleCommand(intptr_t context)
555556
{
556557
SetRefrigeratorDoorStatusHandler(self->mJsonValue);
557558
}
559+
else if (name == "SetSimulatedSoilMoisture")
560+
{
561+
uint8_t soilMoisture = static_cast<uint8_t>(self->mJsonValue["SoilMoistureValue"].asUInt());
562+
EndpointId endpoint = static_cast<EndpointId>(self->mJsonValue["EndpointId"].asUInt());
563+
564+
if (endpoint != 1)
565+
{
566+
ChipLogError(NotSpecified, "Invalid EndpointId to set Soil Moisture value.");
567+
}
568+
else if (soilMoisture < 0 || soilMoisture > 100)
569+
{
570+
ChipLogError(NotSpecified, "Invalid Soil Moisture value to set.");
571+
}
572+
else
573+
{
574+
self->OnSoilMoistureChange(endpoint, soilMoisture);
575+
}
576+
}
558577
else
559578
{
560579
ChipLogError(NotSpecified, "Unhandled command '%s': this should never happen", name.c_str());
@@ -917,6 +936,19 @@ void AllClustersAppCommandHandler::OnAirQualityChange(uint32_t aNewValue)
917936
}
918937
}
919938

939+
void AllClustersAppCommandHandler::OnSoilMoistureChange(EndpointId endpointId, uint8_t soilMoisture)
940+
{
941+
Protocols::InteractionModel::Status status =
942+
SoilMeasurement::Attributes::SoilMoistureMeasuredValue::Set(endpointId, soilMoisture);
943+
ChipLogDetail(NotSpecified, "Set Soil Moisture value to %u", soilMoisture);
944+
945+
if (status != Protocols::InteractionModel::Status::Success)
946+
{
947+
ChipLogDetail(NotSpecified, "Invalid value/endpoint to set.");
948+
return;
949+
}
950+
}
951+
920952
void AllClustersAppCommandHandler::HandleSetOccupancyChange(EndpointId endpointId, uint8_t newOccupancyValue)
921953
{
922954
BitMask<chip::app::Clusters::OccupancySensing::OccupancyBitmap> currentOccupancy;

examples/all-clusters-app/linux/AllClustersCommandDelegate.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ class AllClustersAppCommandHandler
101101
*/
102102
void OnAirQualityChange(uint32_t aEnum);
103103

104+
/**
105+
* Should be called when it is necessary to change the measured moisture value.
106+
*/
107+
void OnSoilMoistureChange(chip::EndpointId endpointId, uint8_t soilMoisture);
108+
104109
/**
105110
* Should be called when it is necessary to change the operational state as a manual operation.
106111
*/

src/app/clusters/soil-measurement-server/soil-measurement-server.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ CHIP_ERROR SoilMeasurementAttrAccess::Init()
5252
// Initialize the soil moisture measurement limits to default values
5353
for (auto & measurement : gMeasurements)
5454
{
55-
measurement.soilMoistureMeasuredValue.SetNull();
5655
measurement.soilMoistureMeasurementLimits = { .measurementType = MeasurementTypeEnum::kSoilMoisture,
5756
.measured = true,
5857
.minMeasuredValue = 0,
@@ -80,12 +79,6 @@ CHIP_ERROR SoilMeasurementAttrAccess::Read(const ConcreteReadAttributePath & aPa
8079
case Attributes::SoilMoistureMeasurementLimits::Id: {
8180
return aEncoder.Encode(data->soilMoistureMeasurementLimits);
8281
}
83-
case Attributes::SoilMoistureMeasuredValue::Id: {
84-
return aEncoder.Encode(data->soilMoistureMeasuredValue);
85-
}
86-
case ClusterRevision::Id: {
87-
return aEncoder.Encode(kClusterRevision);
88-
}
8982
default: {
9083
break;
9184
}
@@ -111,18 +104,6 @@ MeasurementData * SoilMeasurementDataForEndpoint(EndpointId endpointId)
111104
return &gMeasurements[index];
112105
}
113106

114-
CHIP_ERROR SetSoilMoistureMeasuredValue(EndpointId endpointId, const DataModel::Nullable<uint16_t> & soilMoistureMeasuredValue)
115-
{
116-
MeasurementData * data = SoilMeasurementDataForEndpoint(endpointId);
117-
VerifyOrReturnError(data != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
118-
119-
data->soilMoistureMeasuredValue = soilMoistureMeasuredValue;
120-
121-
MatterReportingAttributeChangeCallback(endpointId, SoilMeasurement::Id, SoilMoistureMeasuredValue::Id);
122-
123-
return CHIP_NO_ERROR;
124-
}
125-
126107
// This function is intended for the application to set the soil measurement accuracy limits to the proper values during init.
127108
// Given the limits are fixed, it is not intended to be changes at runtime, hence why this function does not report the change.
128109
// The application should call this function only once during init.

src/app/clusters/soil-measurement-server/soil-measurement-server.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,8 @@ namespace SoilMeasurement {
3333
struct MeasurementData
3434
{
3535
Structs::MeasurementAccuracyStruct::Type soilMoistureMeasurementLimits;
36-
chip::app::DataModel::Nullable<uint16_t> soilMoistureMeasuredValue;
3736
};
3837

39-
inline constexpr uint16_t kClusterRevision = 1;
40-
4138
class SoilMeasurementAttrAccess : public AttributeAccessInterface
4239
{
4340
public:
@@ -54,7 +51,6 @@ class SoilMeasurementAttrAccess : public AttributeAccessInterface
5451
};
5552

5653
CHIP_ERROR SetSoilMeasurementAccuracy(EndpointId endpointId, const Structs::MeasurementAccuracyStruct::Type & accuracy);
57-
CHIP_ERROR SetSoilMoistureMeasuredValue(EndpointId endpointId, const DataModel::Nullable<uint16_t> & soilMoistureMeasuredValue);
5854

5955
MeasurementData * SoilMeasurementDataForEndpoint(EndpointId endpointId);
6056

0 commit comments

Comments
 (0)