diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index a3f2937276d4a9..1b36447f308ba8 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -256,7 +256,7 @@ jobs:
- name: Check for use of %zu, which are not supported on some libcs.
if: always()
run: |
- git grep -n "%zu" -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
+ git grep -I -n "%zu" -- './*' ':(exclude).github/workflows/lint.yml' && exit 1 || exit 0
# Comments like '{{! ... }}' should be used in zap files
- name: Do not allow TODO in generated files
diff --git a/examples/rvc-app/README.md b/examples/rvc-app/README.md
index fa723f24d35712..2943f54103f828 100644
--- a/examples/rvc-app/README.md
+++ b/examples/rvc-app/README.md
@@ -48,16 +48,14 @@ Below are the PIXIT definitions required for the different python tests.
#### TC 1.2
-PIXIT: `PIXIT_ENDPOINT:1`
Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCCLEANM_1_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1"`
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCCLEANM_1_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint=1"`
#### TC 2.1
-PIXIT:
-`PIXIT_ENDPOINT:1 PIXIT.RVCCLEANM.MODE_CHANGE_FAIL:1 PIXIT.RVCCLEANM.MODE_CHANGE_OK:2`
+PIXIT: `PIXIT.RVCCLEANM.MODE_CHANGE_FAIL:1 PIXIT.RVCCLEANM.MODE_CHANGE_OK:2`
Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCCLEANM_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1 PIXIT.RVCCLEANM.MODE_CHANGE_FAIL:1 PIXIT.RVCCLEANM.MODE_CHANGE_OK:2"`
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCCLEANM_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1 --int-arg PIXIT.RVCCLEANM.MODE_CHANGE_FAIL:1 PIXIT.RVCCLEANM.MODE_CHANGE_OK:2"`
When asked "Manually put the device in a state from which it will FAIL to
transition to mode 1", set the `RvcRunMode` to 1.
@@ -67,24 +65,23 @@ When asked "Manually put the device in a state from which it will SUCCESSFULLY
transition to mode 2", set the `RvcRunMode` to 0.
`chip-tool rvcrunmode change-to-mode 0`
-#### TC 3.2
+#### TC 2.2
-This is not applicable because this RVC device does not support the
-`StartUpMode` attribute.
+Example command:
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCCLEANM_2_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint=1"`
### RVC Run Mode cluster
#### TC 1.2
-PIXIT: `PIXIT_ENDPOINT:1` Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCRUNM_1_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1"`
+Example command:
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCRUNM_1_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint=1"`
#### TC 2.1
-PIXIT:
-`PIXIT_ENDPOINT:1 PIXIT.RVCRUNM.MODE_CHANGE_FAIL:2 PIXIT.RVCRUNM.MODE_CHANGE_OK:0`
+PIXIT: `PIXIT.RVCRUNM.MODE_CHANGE_FAIL:2 PIXIT.RVCRUNM.MODE_CHANGE_OK:0`
Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCRUNM_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1 PIXIT.RVCRUNM.MODE_CHANGE_FAIL:2 PIXIT.RVCRUNM.MODE_CHANGE_OK:0"`
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCRUNM_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1 --int-arg PIXIT.RVCRUNM.MODE_CHANGE_OK:0 PIXIT.RVCRUNM.MODE_CHANGE_FAIL:2"`
When asked "Manually put the device in a state from which it will FAIL to
transition to mode 2", set the `RvcRunMode` to 1.
@@ -93,27 +90,34 @@ transition to mode 2", set the `RvcRunMode` to 1.
When asked "Manually put the device in a state from which it will SUCCESSFULLY
transition to mode 0", do nothing.
-#### TC 3.2
+#### TC 2.2
-This is not applicable because this RVC device does not support the
-`StartUpMode` attribute.
+PIXIT: `PIXIT.RVCRUNM.MODE_A:1 PIXIT.RVCRUNM.MODE_B:2`
+Example command:
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCRUNM_2_2.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1 --int-arg PIXIT.RVCRUNM.MODE_A:1 PIXIT.RVCRUNM.MODE_B:2"`
### RVC Operational State cluster
#### TC 2.1
-PIXIT: `PIXIT_ENDPOINT:1`
Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCOPSTATE_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1"`
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCOPSTATE_2_1.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1"`
Use the out-of-band messages, chip-tool messages and the state machine diagram
to navigate to the required states.
#### TC 2.3
-PIXIT: `PIXIT_ENDPOINT:1`
Example command:
-`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCOPSTATE_2_3.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt --int-arg PIXIT_ENDPOINT:1"`
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCOPSTATE_2_3.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1"`
+
+Use the out-of-band messages, chip-tool messages and the state machine diagram
+to transition to the required states.
+
+#### TC 2.4
+
+Example command:
+`./scripts/tests/run_python_test.py --script src/python_testing/TC_RVCOPSTATE_2_4.py --script-args "--storage-path admin_storage.json --PICS examples/rvc-app/rvc-common/pics/rvc-app-pics-values --endpoint 1"`
Use the out-of-band messages, chip-tool messages and the state machine diagram
to transition to the required states.
diff --git a/examples/rvc-app/RVC_app_state_diagram.png b/examples/rvc-app/RVC_app_state_diagram.png
index a7cf3175aa87ba..dcef2ed731f18b 100644
Binary files a/examples/rvc-app/RVC_app_state_diagram.png and b/examples/rvc-app/RVC_app_state_diagram.png differ
diff --git a/examples/rvc-app/RVC_app_state_diagram_drawio.xml b/examples/rvc-app/RVC_app_state_diagram_drawio.xml
index d4f9479b557658..52c256b79ccefa 100644
--- a/examples/rvc-app/RVC_app_state_diagram_drawio.xml
+++ b/examples/rvc-app/RVC_app_state_diagram_drawio.xml
@@ -1,2 +1,2 @@
-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
\ No newline at end of file
+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
\ No newline at end of file
diff --git a/examples/rvc-app/linux/RvcAppCommandDelegate.cpp b/examples/rvc-app/linux/RvcAppCommandDelegate.cpp
index da2908cf65e6ec..87eb1ee0f75e0b 100644
--- a/examples/rvc-app/linux/RvcAppCommandDelegate.cpp
+++ b/examples/rvc-app/linux/RvcAppCommandDelegate.cpp
@@ -91,6 +91,10 @@ void RvcAppCommandHandler::HandleCommand(intptr_t context)
{
self->OnClearErrorHandler();
}
+ else if (name == "Reset")
+ {
+ self->OnResetHandler();
+ }
else
{
ChipLogError(NotSpecified, "Unhandled command: Should never happens");
@@ -145,6 +149,11 @@ void RvcAppCommandHandler::OnClearErrorHandler()
mRvcDevice->HandleClearErrorMessage();
}
+void RvcAppCommandHandler::OnResetHandler()
+{
+ mRvcDevice->HandleResetMessage();
+}
+
void RvcAppCommandDelegate::SetRvcDevice(chip::app::Clusters::RvcDevice * aRvcDevice)
{
mRvcDevice = aRvcDevice;
diff --git a/examples/rvc-app/linux/RvcAppCommandDelegate.h b/examples/rvc-app/linux/RvcAppCommandDelegate.h
index 8be8943172b37a..ad7c283bb85f59 100644
--- a/examples/rvc-app/linux/RvcAppCommandDelegate.h
+++ b/examples/rvc-app/linux/RvcAppCommandDelegate.h
@@ -56,6 +56,8 @@ class RvcAppCommandHandler
void OnErrorEventHandler(const std::string & error);
void OnClearErrorHandler();
+
+ void OnResetHandler();
};
class RvcAppCommandDelegate : public NamedPipeCommandDelegate
diff --git a/examples/rvc-app/run_all_yaml_tests.sh b/examples/rvc-app/run_all_yaml_tests.sh
index 4bf9e7261a7f9e..82f3461492f207 100755
--- a/examples/rvc-app/run_all_yaml_tests.sh
+++ b/examples/rvc-app/run_all_yaml_tests.sh
@@ -8,7 +8,7 @@
NODEID=$1
RVC_DEVICE_ENDPOINT=1
-RVC_DEVICE_PICS="examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt"
+RVC_DEVICE_PICS="examples/rvc-app/rvc-common/pics/rvc-app-pics-values"
if [ -z "$NODEID" ]; then
echo "Usage: run_all_yaml_tests [Node ID]"
@@ -20,7 +20,6 @@ fi
# RVC Operational State cluster
./scripts/tests/yaml/chiptool.py tests Test_TC_RVCOPSTATE_1_1 --PICS "$RVC_DEVICE_PICS" --nodeId "$NODEID" --endpoint "$RVC_DEVICE_ENDPOINT" &&
- ./scripts/tests/yaml/chiptool.py tests Test_TC_RVCOPSTATE_2_2 --PICS "$RVC_DEVICE_PICS" --nodeId "$NODEID" --endpoint "$RVC_DEVICE_ENDPOINT" &&
# RVC Run Mode cluster
./scripts/tests/yaml/chiptool.py tests Test_TC_RVCRUNM_1_1 --PICS "$RVC_DEVICE_PICS" --nodeId "$NODEID" --endpoint "$RVC_DEVICE_ENDPOINT" &&
diff --git a/examples/rvc-app/rvc-common/include/rvc-device.h b/examples/rvc-app/rvc-common/include/rvc-device.h
index e77c86aa6a1fb2..f2db0a75a5a23e 100644
--- a/examples/rvc-app/rvc-common/include/rvc-device.h
+++ b/examples/rvc-app/rvc-common/include/rvc-device.h
@@ -48,6 +48,7 @@ class RvcDevice
mCleanModeDelegate.SetHandleChangeToMode(&RvcDevice::HandleRvcCleanChangeToMode, this);
mOperationalStateDelegate.SetPauseCallback(&RvcDevice::HandleOpStatePauseCallback, this);
mOperationalStateDelegate.SetResumeCallback(&RvcDevice::HandleOpStateResumeCallback, this);
+ mOperationalStateDelegate.SetGoHomeCallback(&RvcDevice::HandleOpStateGoHomeCallback, this);
}
/**
@@ -81,6 +82,11 @@ class RvcDevice
*/
void HandleOpStateResumeCallback(Clusters::OperationalState::GenericOperationalError & err);
+ /**
+ * Handles the RvcOperationalState GoHome command.
+ */
+ void HandleOpStateGoHomeCallback(Clusters::OperationalState::GenericOperationalError & err);
+
/**
* Updates the state machine when the device becomes fully-charged.
*/
@@ -105,6 +111,8 @@ class RvcDevice
void HandleErrorEvent(const std::string & error);
void HandleClearErrorMessage();
+
+ void HandleResetMessage();
};
} // namespace Clusters
diff --git a/examples/rvc-app/rvc-common/include/rvc-mode-delegates.h b/examples/rvc-app/rvc-common/include/rvc-mode-delegates.h
index f1c3d7b22586a7..af5e2c451abb83 100644
--- a/examples/rvc-app/rvc-common/include/rvc-mode-delegates.h
+++ b/examples/rvc-app/rvc-common/include/rvc-mode-delegates.h
@@ -45,7 +45,7 @@ class RvcRunModeDelegate : public ModeBase::Delegate
using ModeTagStructType = detail::Structs::ModeTagStruct::Type;
ModeTagStructType ModeTagsIdle[1] = { { .value = to_underlying(ModeTag::kIdle) } };
ModeTagStructType ModeTagsCleaning[1] = { { .value = to_underlying(ModeTag::kCleaning) } };
- ModeTagStructType ModeTagsMapping[1] = { { .mfgCode = MakeOptional(TestVendor1), .value = 0x8001 } };
+ ModeTagStructType ModeTagsMapping[1] = { { .value = to_underlying(ModeTag::kMapping) } };
const detail::Structs::ModeOptionStruct::Type kModeOptions[3] = {
detail::Structs::ModeOptionStruct::Type{ .label = CharSpan::fromCharString("Idle"),
diff --git a/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h b/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
index e40ba64fbf7f3a..3081a27ea3e625 100644
--- a/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
+++ b/examples/rvc-app/rvc-common/include/rvc-operational-state-delegate.h
@@ -53,6 +53,8 @@ class RvcOperationalStateDelegate : public RvcOperationalState::Delegate
HandleOpStateCommand mPauseCallback;
RvcDevice * mResumeRvcDeviceInstance;
HandleOpStateCommand mResumeCallback;
+ RvcDevice * mGoHomeRvcDeviceInstance;
+ HandleOpStateCommand mGoHomeCallback;
public:
/**
@@ -99,6 +101,12 @@ class RvcOperationalStateDelegate : public RvcOperationalState::Delegate
*/
void HandleResumeStateCallback(Clusters::OperationalState::GenericOperationalError & err) override;
+ /**
+ * Handle Command Callback in application: GoHome
+ * @param[out] get operational error after callback.
+ */
+ void HandleGoHomeCommandCallback(Clusters::OperationalState::GenericOperationalError & err) override;
+
void SetPauseCallback(HandleOpStateCommand aCallback, RvcDevice * aInstance)
{
mPauseCallback = aCallback;
@@ -110,6 +118,12 @@ class RvcOperationalStateDelegate : public RvcOperationalState::Delegate
mResumeCallback = aCallback;
mResumeRvcDeviceInstance = aInstance;
};
+
+ void SetGoHomeCallback(HandleOpStateCommand aCallback, RvcDevice * aInstance)
+ {
+ mGoHomeCallback = aCallback;
+ mGoHomeRvcDeviceInstance = aInstance;
+ };
};
void Shutdown();
diff --git a/examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt b/examples/rvc-app/rvc-common/pics/rvc-app-pics-values
similarity index 88%
rename from examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt
rename to examples/rvc-app/rvc-common/pics/rvc-app-pics-values
index d0c8529a83d2e0..6b094132ed5c22 100644
--- a/examples/rvc-app/rvc-common/pics/RVC_App_Test_Plan.txt
+++ b/examples/rvc-app/rvc-common/pics/rvc-app-pics-values
@@ -1,10 +1,8 @@
RVCCLEANM.S=1
RVCCLEANM.S.A0000=1
RVCCLEANM.S.A0001=1
-RVCCLEANM.S.A0002=0
-RVCCLEANM.S.A0003=0
-RVCCLEANM.S.C01.Tx=1
RVCCLEANM.S.C00.Rsp=1
+RVCCLEANM.S.C01.Tx=1
RVCCLEANM.S.F00=0
RVCCLEANM.S.M.CAN_TEST_MODE_FAILURE=1
@@ -17,11 +15,10 @@ RVCOPSTATE.S.A0004=1
RVCOPSTATE.S.A0005=1
RVCOPSTATE.S.E00=1
RVCOPSTATE.S.E01=1
-RVCOPSTATE.S.C04.Tx=1
RVCOPSTATE.S.C00.Rsp=1
-RVCOPSTATE.S.C01.Rsp=0
-RVCOPSTATE.S.C02.Rsp=0
RVCOPSTATE.S.C03.Rsp=1
+RVCOPSTATE.S.C04.Tx=1
+RVCOPSTATE.S.C128.Rsp=1
RVCOPSTATE.S.M.ST_STOPPED=1
RVCOPSTATE.S.M.ST_RUNNING=1
RVCOPSTATE.S.M.ST_PAUSED=1
@@ -45,9 +42,8 @@ RVCOPSTATE.S.M.ERR_MOP_CLEANING_PAD_MISSING=1
RVCRUNM.S=1
RVCRUNM.S.A0000=1
RVCRUNM.S.A0001=1
-RVCRUNM.S.A0002=0
-RVCRUNM.S.A0003=0
-RVCRUNM.S.C01.Tx=1
RVCRUNM.S.C00.Rsp=1
+RVCRUNM.S.C01.Tx=1
RVCRUNM.S.F00=0
-RVCRUNM.S.M.CAN_TEST_MODE_FAILURE=1
\ No newline at end of file
+RVCRUNM.S.M.CAN_TEST_MODE_FAILURE=1
+RVCRUNM.S.M.CAN_MANUALLY_CONTROLLED=1
diff --git a/examples/rvc-app/rvc-common/rvc-app.matter b/examples/rvc-app/rvc-common/rvc-app.matter
index 937e342b7e2624..2de29e1783296b 100644
--- a/examples/rvc-app/rvc-common/rvc-app.matter
+++ b/examples/rvc-app/rvc-common/rvc-app.matter
@@ -1240,6 +1240,10 @@ endpoint 0 {
callback attribute windowStatus;
callback attribute adminFabricIndex;
callback attribute adminVendorId;
+ callback attribute generatedCommandList;
+ callback attribute acceptedCommandList;
+ callback attribute eventList;
+ callback attribute attributeList;
ram attribute featureMap default = 0;
ram attribute clusterRevision default = 0x0001;
diff --git a/examples/rvc-app/rvc-common/rvc-app.zap b/examples/rvc-app/rvc-common/rvc-app.zap
index d5c1431dded75b..95baba55bc5986 100644
--- a/examples/rvc-app/rvc-common/rvc-app.zap
+++ b/examples/rvc-app/rvc-common/rvc-app.zap
@@ -1484,6 +1484,70 @@
"maxInterval": 65534,
"reportableChange": 0
},
+ {
+ "name": "GeneratedCommandList",
+ "code": 65528,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AcceptedCommandList",
+ "code": 65529,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "EventList",
+ "code": 65530,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "AttributeList",
+ "code": 65531,
+ "mfgCode": null,
+ "side": "server",
+ "type": "array",
+ "included": 1,
+ "storageOption": "External",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": null,
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
{
"name": "FeatureMap",
"code": 65532,
@@ -2831,5 +2895,6 @@
"endpointId": 1,
"networkId": 0
}
- ]
+ ],
+ "log": []
}
\ No newline at end of file
diff --git a/examples/rvc-app/rvc-common/src/rvc-device.cpp b/examples/rvc-app/rvc-common/src/rvc-device.cpp
index 3e62b5f1e6f701..b4e79d673880be 100644
--- a/examples/rvc-app/rvc-common/src/rvc-device.cpp
+++ b/examples/rvc-app/rvc-common/src/rvc-device.cpp
@@ -41,7 +41,7 @@ void RvcDevice::HandleRvcRunChangeToMode(uint8_t newMode, ModeBase::Commands::Ch
{
response.status = to_underlying(ModeBase::StatusCode::kInvalidInMode);
response.statusText.SetValue(
- chip::CharSpan::fromCharString("Change to the mapping or cleaning mode is only allowed from idle."));
+ chip::CharSpan::fromCharString("Change to the mapping or cleaning mode is only allowed from idle"));
return;
}
@@ -58,7 +58,7 @@ void RvcDevice::HandleRvcRunChangeToMode(uint8_t newMode, ModeBase::Commands::Ch
{
response.status = to_underlying(ModeBase::StatusCode::kInvalidInMode);
response.statusText.SetValue(
- chip::CharSpan::fromCharString("Change to the mapping or cleaning mode is only allowed from idle."));
+ chip::CharSpan::fromCharString("Change to the mapping or cleaning mode is only allowed from idle"));
return;
}
@@ -72,7 +72,7 @@ void RvcDevice::HandleRvcRunChangeToMode(uint8_t newMode, ModeBase::Commands::Ch
// If we fall through at any point, it's because the change is not supported in the current state.
response.status = to_underlying(ModeBase::StatusCode::kInvalidInMode);
- response.statusText.SetValue(chip::CharSpan::fromCharString("This change is not allowed at this time."));
+ response.statusText.SetValue(chip::CharSpan::fromCharString("This change is not allowed at this time"));
}
void RvcDevice::HandleRvcCleanChangeToMode(uint8_t newMode, ModeBase::Commands::ChangeToModeResponse::Type & response)
@@ -81,7 +81,7 @@ void RvcDevice::HandleRvcCleanChangeToMode(uint8_t newMode, ModeBase::Commands::
if (rvcRunCurrentMode != RvcRunMode::ModeIdle)
{
- response.status = to_underlying(RvcCleanMode::StatusCode::kCleaningInProgress);
+ response.status = to_underlying(ModeBase::StatusCode::kInvalidInMode);
response.statusText.SetValue(chip::CharSpan::fromCharString("Change of the cleaning mode is only allowed in Idle."));
return;
}
@@ -123,7 +123,7 @@ void RvcDevice::HandleOpStateResumeCallback(Clusters::OperationalState::GenericO
break;
default:
// This method is only called if the device is in a resume-compatible state, i.e. `Charging`, `Docked` or
- // `Paused`. Therefor, we do not expect to ever enter this branch.
+ // `Paused`. Therefore, we do not expect to ever enter this branch.
err.Set(to_underlying(OperationalState::ErrorStateEnum::kCommandInvalidInState));
return;
}
@@ -134,6 +134,30 @@ void RvcDevice::HandleOpStateResumeCallback(Clusters::OperationalState::GenericO
: to_underlying(OperationalState::ErrorStateEnum::kUnableToCompleteOperation));
}
+void RvcDevice::HandleOpStateGoHomeCallback(Clusters::OperationalState::GenericOperationalError & err)
+{
+ switch (mOperationalStateInstance.GetCurrentOperationalState())
+ {
+ case to_underlying(OperationalState::OperationalStateEnum::kStopped): {
+ if (mRunModeInstance.GetCurrentMode() != RvcRunMode::ModeIdle)
+ {
+ err.Set(to_underlying(OperationalState::ErrorStateEnum::kCommandInvalidInState));
+ return;
+ }
+
+ auto error = mOperationalStateInstance.SetOperationalState(
+ to_underlying(RvcOperationalState::OperationalStateEnum::kSeekingCharger));
+
+ err.Set((error == CHIP_NO_ERROR) ? to_underlying(OperationalState::ErrorStateEnum::kNoError)
+ : to_underlying(OperationalState::ErrorStateEnum::kUnableToCompleteOperation));
+ }
+ break;
+ default:
+ err.Set(to_underlying(OperationalState::ErrorStateEnum::kCommandInvalidInState));
+ return;
+ }
+}
+
void RvcDevice::HandleChargedMessage()
{
if (mOperationalStateInstance.GetCurrentOperationalState() !=
@@ -301,3 +325,10 @@ void RvcDevice::HandleClearErrorMessage()
mRunModeInstance.UpdateCurrentMode(RvcRunMode::ModeIdle);
SetDeviceToIdleState();
}
+
+void RvcDevice::HandleResetMessage()
+{
+ mRunModeInstance.UpdateCurrentMode(RvcRunMode::ModeIdle);
+ mOperationalStateInstance.SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped));
+ mCleanModeInstance.UpdateCurrentMode(RvcCleanMode::ModeQuick);
+}
diff --git a/examples/rvc-app/rvc-common/src/rvc-operational-state-delegate.cpp b/examples/rvc-app/rvc-common/src/rvc-operational-state-delegate.cpp
index 568fa870a9e860..496d6b178cb936 100644
--- a/examples/rvc-app/rvc-common/src/rvc-operational-state-delegate.cpp
+++ b/examples/rvc-app/rvc-common/src/rvc-operational-state-delegate.cpp
@@ -51,3 +51,8 @@ void RvcOperationalStateDelegate::HandleResumeStateCallback(OperationalState::Ge
{
(mResumeRvcDeviceInstance->*mResumeCallback)(err);
}
+
+void RvcOperationalStateDelegate::HandleGoHomeCommandCallback(OperationalState::GenericOperationalError & err)
+{
+ (mGoHomeRvcDeviceInstance->*mGoHomeCallback)(err);
+}