Update example daemons to use the new component/trait APIs
Using AddStateDefinitionsFromJson/AddComponent instead of old and
deprecated AddCommandDefinitions.../AddStateDefinitions... methods.
BUG: 26070118, 25917541
Change-Id: I1f264c737cc19a577a0026e6d6212d63bdc480cf
Reviewed-on: https://weave-review.googlesource.com/1802
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/examples/daemon/ledflasher/ledflasher.cc b/examples/daemon/ledflasher/ledflasher.cc
index 9e4a9e1..e63deac 100644
--- a/examples/daemon/ledflasher/ledflasher.cc
+++ b/examples/daemon/ledflasher/ledflasher.cc
@@ -14,6 +14,43 @@
namespace {
// Supported LED count on this device
const size_t kLedCount = 3;
+
+const char kTraits[] = R"({
+ "_ledflasher": {
+ "commands": {
+ "_set": {
+ "minimalRole": "user",
+ "parameters": {
+ "_led": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 3
+ },
+ "_on": { "type": "boolean" }
+ }
+ },
+ "_toggle": {
+ "minimalRole": "user",
+ "parameters": {
+ "_led": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 3
+ }
+ }
+ }
+ },
+ "state": {
+ "_leds": {
+ "type": "array",
+ "items": { "type": "boolean" }
+ }
+ }
+ }
+})";
+
+const char kComponent[] = "lock";
+
} // namespace
// LedFlasherHandler is a complete command handler example that shows
@@ -24,39 +61,18 @@
void Register(weave::Device* device) {
device_ = device;
- device->AddStateDefinitionsFromJson(R"({
- "_ledflasher": {"_leds": {"type": "array", "items": {"type": "boolean"}}}
- })");
+ device->AddTraitDefinitionsFromJson(kTraits);
+ CHECK(device->AddComponent(kComponent, {"_ledflasher"}, nullptr));
+ UpdateLedState();
- device->SetStatePropertiesFromJson(R"({
- "_ledflasher":{"_leds": [false, false, false]}
- })",
- nullptr);
-
- device->AddCommandDefinitionsFromJson(R"({
- "_ledflasher": {
- "_set":{
- "minimalRole": "user",
- "parameters": {
- "_led": {"type": "integer", "minimum": 1, "maximum": 3},
- "_on": {"type": "boolean"}
- }
- },
- "_toggle":{
- "minimalRole": "user",
- "parameters": {
- "_led": {"type": "integer", "minimum": 1, "maximum": 3}
- }
- }
- }
- })");
device->AddCommandHandler(
- "_ledflasher._toggle",
+ kComponent, "_ledflasher._toggle",
base::Bind(&LedFlasherHandler::OnFlasherToggleCommand,
weak_ptr_factory_.GetWeakPtr()));
device->AddCommandHandler(
- "_ledflasher._set", base::Bind(&LedFlasherHandler::OnFlasherSetCommand,
- weak_ptr_factory_.GetWeakPtr()));
+ kComponent, "_ledflasher._set",
+ base::Bind(&LedFlasherHandler::OnFlasherSetCommand,
+ weak_ptr_factory_.GetWeakPtr()));
}
private:
@@ -118,7 +134,7 @@
for (uint32_t i = 0; i < led_status_.size(); i++)
list.AppendBoolean(led_status_[i] ? true : false);
- device_->SetStateProperty("_ledflasher._leds", list, nullptr);
+ device_->SetStateProperty(kComponent, "_ledflasher._leds", list, nullptr);
}
weave::Device* device_{nullptr};
diff --git a/examples/daemon/light/light.cc b/examples/daemon/light/light.cc
index 7d156ef..611a37d 100644
--- a/examples/daemon/light/light.cc
+++ b/examples/daemon/light/light.cc
@@ -9,6 +9,145 @@
#include <base/bind.h>
#include <base/memory/weak_ptr.h>
+namespace {
+
+const char kTraits[] = R"({
+ "onOff": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "state": {
+ "type": "string",
+ "enum": [ "on", "standby" ]
+ }
+ }
+ }
+ },
+ "state": {
+ "state": {
+ "type": "string",
+ "enum": [ "on", "standby" ]
+ }
+ }
+ },
+ "brightness": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "brightness": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ }
+ }
+ }
+ },
+ "state": { "brightness": { "type": "integer" } }
+ },
+ "colorXY": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "colorSetting": {
+ "type": "object",
+ "required": [
+ "colorX",
+ "colorY"
+ ],
+ "properties": {
+ "colorX": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "colorY": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "state": {
+ "colorSetting": {
+ "properties": {
+ "colorX": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "colorY": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ }
+ },
+ "colorCapRed": {
+ "properties": {
+ "colorX": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "colorY": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ }
+ },
+ "colorCapGreen": {
+ "properties": {
+ "colorX": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "colorY": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ }
+ },
+ "colorCapBlue": {
+ "properties": {
+ "colorX": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ },
+ "colorY": {
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1.0
+ }
+ }
+ }
+ }
+ }
+})";
+
+const char kDefaultState[] = R"({
+ "colorXY": {
+ "colorSetting": {"colorX": 0, "colorY": 0},
+ "colorCapRed": {"colorX": 0.674, "colorY": 0.322},
+ "colorCapGreen":{"colorX": 0.408, "colorY": 0.517},
+ "colorCapBlue": {"colorX": 0.168, "colorY": 0.041}
+ }
+})";
+
+const char kComponent[] = "light";
+
+} // anonymous namespace
+
// LightHandler is a command handler example that shows
// how to handle commands for a Weave light.
class LightHandler {
@@ -17,105 +156,20 @@
void Register(weave::Device* device) {
device_ = device;
- device->AddStateDefinitionsFromJson(R"({
- "onOff": {"state": {"type": "string", "enum": ["on", "standby"]}},
- "brightness": {"brightness": {"type": "integer"}},
- "colorXY": {
- "colorSetting": {
- "properties": {
- "colorX": {"type": "number", "minimum": 0.0, "maximum": 1.0},
- "colorY": {"type": "number", "minimum": 0.0, "maximum": 1.0}
- }
- },
- "colorCapRed": {
- "properties": {
- "colorX": {"type": "number", "minimum": 0.0, "maximum": 1.0},
- "colorY": {"type": "number", "minimum": 0.0, "maximum": 1.0}
- }
- },
- "colorCapGreen": {
- "properties": {
- "colorX": {"type": "number", "minimum": 0.0, "maximum": 1.0},
- "colorY": {"type": "number", "minimum": 0.0, "maximum": 1.0}
- }
- },
- "colorCapBlue": {
- "properties": {
- "colorX": {"type": "number", "minimum": 0.0, "maximum": 1.0},
- "colorY": {"type": "number", "minimum": 0.0, "maximum": 1.0}
- }
- }
- }
- })");
+ device->AddTraitDefinitionsFromJson(kTraits);
+ CHECK(device->AddComponent(kComponent, {"onOff", "brightness", "colorXY"},
+ nullptr));
+ CHECK(device->SetStatePropertiesFromJson(kComponent, kDefaultState,
+ nullptr));
+ UpdateLightState();
- device->SetStatePropertiesFromJson(R"({
- "onOff":{"state": "standby"},
- "brightness":{"brightness": 0},
- "colorXY": {
- "colorSetting": {"colorX": 0, "colorY": 0},
- "colorCapRed": {"colorX": 0.674, "colorY": 0.322},
- "colorCapGreen":{"colorX": 0.408, "colorY": 0.517},
- "colorCapBlue": {"colorX": 0.168, "colorY": 0.041}
- }
- })",
- nullptr);
-
- device->AddCommandDefinitionsFromJson(R"({
- "onOff": {
- "setConfig":{
- "minimalRole": "user",
- "parameters": {
- "state": {"type": "string", "enum": ["on", "standby"]}
- }
- }
- },
- "brightness": {
- "setConfig":{
- "minimalRole": "user",
- "parameters": {
- "brightness": {
- "type": "integer",
- "minimum": 0,
- "maximum": 100
- }
- }
- }
- },
- "colorXY": {
- "setConfig": {
- "minimalRole": "user",
- "parameters": {
- "colorSetting": {
- "type": "object",
- "required": [
- "colorX",
- "colorY"
- ],
- "properties": {
- "colorX": {
- "type": "number",
- "minimum": 0.0,
- "maximum": 1.0
- },
- "colorY": {
- "type": "number",
- "minimum": 0.0,
- "maximum": 1.0
- }
- },
- "additionalProperties": false
- }
- }
- }
- }
- })");
- device->AddCommandHandler("onOff.setConfig",
+ device->AddCommandHandler(kComponent, "onOff.setConfig",
base::Bind(&LightHandler::OnOnOffSetConfig,
weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("brightness.setConfig",
+ device->AddCommandHandler(kComponent, "brightness.setConfig",
base::Bind(&LightHandler::OnBrightnessSetConfig,
weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("colorXY.setConfig",
+ device->AddCommandHandler(kComponent, "colorXY.setConfig",
base::Bind(&LightHandler::OnColorXYSetConfig,
weak_ptr_factory_.GetWeakPtr()));
}
@@ -213,16 +267,15 @@
std::unique_ptr<base::DictionaryValue> colorXY(new base::DictionaryValue());
colorXY->SetDouble("colorX", color_X_);
colorXY->SetDouble("colorY", color_Y_);
- state.Set("colorXY.colorSetting", colorXY.get());
- device_->SetStateProperties(state, nullptr);
- colorXY.release();
+ state.Set("colorXY.colorSetting", colorXY.release());
+ device_->SetStateProperties(kComponent, state, nullptr);
}
weave::Device* device_{nullptr};
// Simulate the state of the light.
- bool light_status_;
- int32_t brightness_state_;
+ bool light_status_{false};
+ int32_t brightness_state_{0};
double color_X_{0.0};
double color_Y_{0.0};
base::WeakPtrFactory<LightHandler> weak_ptr_factory_{this};
diff --git a/examples/daemon/lock/lock.cc b/examples/daemon/lock/lock.cc
index 10bea00..a4bd213 100644
--- a/examples/daemon/lock/lock.cc
+++ b/examples/daemon/lock/lock.cc
@@ -25,6 +25,39 @@
: EnumToStringMap(lockstate::kLockMapMethod) {}
} // namespace weave
+namespace {
+
+const char kTraits[] = R"({
+ "lock": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "lockedState": {
+ "type": "string",
+ "enum": [ "locked", "unlocked" ]
+ }
+ }
+ }
+ },
+ "state": {
+ "lockedState": {
+ "type": "string",
+ "enum": [ "locked", "unlocked", "partiallyLocked" ]
+ },
+ "isLockingSupported": { "type": "boolean" }
+ }
+ }
+})";
+
+const char kDefaultState[] = R"({
+ "lock":{"isLockingSupported": true}
+})";
+
+const char kComponent[] = "lock";
+
+} // anonymous namespace
+
// LockHandler is a command handler example that shows
// how to handle commands for a Weave lock.
class LockHandler {
@@ -33,35 +66,13 @@
void Register(weave::Device* device) {
device_ = device;
- device->AddStateDefinitionsFromJson(R"({
- "lock": {
- "lockedState": {
- "type": "string",
- "enum": ["locked", "unlocked", "partiallyLocked"]
- },
- "isLockingSupported": {"type": "boolean"}
- }
- })");
+ device->AddTraitDefinitionsFromJson(kTraits);
+ CHECK(device->AddComponent(kComponent, {"lock"}, nullptr));
+ CHECK(device->SetStatePropertiesFromJson(kComponent, kDefaultState,
+ nullptr));
+ UpdateLockState();
- device->SetStatePropertiesFromJson(R"({
- "lock":{
- "lockedState": "locked",
- "isLockingSupported": true
- }
- })",
- nullptr);
-
- device->AddCommandDefinitionsFromJson(R"({
- "lock": {
- "setConfig":{
- "minimalRole": "user",
- "parameters": {
- "lockedState": {"type": "string", "enum":["locked", "unlocked"]}
- }
- }
- }
- })");
- device->AddCommandHandler("lock.setConfig",
+ device->AddCommandHandler(kComponent, "lock.setConfig",
base::Bind(&LockHandler::OnLockSetConfig,
weak_ptr_factory_.GetWeakPtr()));
}
@@ -104,10 +115,9 @@
}
void UpdateLockState() {
- base::DictionaryValue state;
std::string updated_state = weave::EnumToString(lock_state_);
- state.SetString("lock.lockedState", updated_state);
- device_->SetStateProperties(state, nullptr);
+ device_->SetStateProperty(kComponent, "lock.lockedState",
+ base::StringValue{updated_state}, nullptr);
}
weave::Device* device_{nullptr};
diff --git a/examples/daemon/sample/sample.cc b/examples/daemon/sample/sample.cc
index 811e9fb..97cef61 100644
--- a/examples/daemon/sample/sample.cc
+++ b/examples/daemon/sample/sample.cc
@@ -10,6 +10,41 @@
#include <base/bind.h>
#include <base/memory/weak_ptr.h>
+namespace {
+
+const char kTraits[] = R"({
+ "_sample": {
+ "commands": {
+ "_hello": {
+ "minimalRole": "user",
+ "parameters": {
+ "_name": { "type": "string" }
+ }
+ },
+ "_ping": {
+ "minimalRole": "user"
+ },
+ "_countdown": {
+ "minimalRole": "user",
+ "parameters": {
+ "_seconds": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 25
+ }
+ }
+ }
+ },
+ "state": {
+ "_ping_count": { "type": "integer" }
+ }
+ }
+})";
+
+const char kComponent[] = "sample";
+
+} // anonymous namespace
+
// SampleHandler is a command handler example.
// It implements the following commands:
// - _hello: handle a command with an argument and set its results.
@@ -22,42 +57,18 @@
void Register(weave::Device* device) {
device_ = device;
- device->AddCommandDefinitionsFromJson(R"({
- "_sample": {
- "_hello": {
- "minimalRole": "user",
- "parameters": {
- "_name": {"type": "string"}
- }
- },
- "_ping": {
- "minimalRole": "user"
- },
- "_countdown": {
- "minimalRole": "user",
- "parameters": {
- "_seconds": {"type": "integer", "minimum": 1, "maximum": 25}
- }
- }
- }
- })");
+ device->AddTraitDefinitionsFromJson(kTraits);
+ CHECK(device->AddComponent(kComponent, {"_sample"}, nullptr));
+ CHECK(device->SetStatePropertiesFromJson(
+ kComponent, R"({"_sample": {"_ping_count": 0}})", nullptr));
- device->AddStateDefinitionsFromJson(R"({
- "_sample": {"_ping_count": {"type": "integer"}}
- })");
-
- device->SetStatePropertiesFromJson(R"({
- "_sample": {"_ping_count": 0}
- })",
- nullptr);
-
- device->AddCommandHandler("_sample._hello",
+ device->AddCommandHandler(kComponent, "_sample._hello",
base::Bind(&SampleHandler::OnHelloCommand,
weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("_sample._ping",
+ device->AddCommandHandler(kComponent, "_sample._ping",
base::Bind(&SampleHandler::OnPingCommand,
weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("_sample._countdown",
+ device->AddCommandHandler(kComponent, "_sample._countdown",
base::Bind(&SampleHandler::OnCountdownCommand,
weak_ptr_factory_.GetWeakPtr()));
}
@@ -91,9 +102,8 @@
return;
LOG(INFO) << "received command: " << cmd->GetName();
- base::DictionaryValue state;
- state.SetInteger("_sample._ping_count", ++ping_count_);
- device_->SetStateProperties(state, nullptr);
+ device_->SetStateProperty(kComponent, "_sample._ping_count",
+ base::FundamentalValue{++ping_count_}, nullptr);
LOG(INFO) << "New state: " << device_->GetState();
base::DictionaryValue result;
diff --git a/examples/daemon/speaker/speaker.cc b/examples/daemon/speaker/speaker.cc
index cd7d62f..8b3e41b 100644
--- a/examples/daemon/speaker/speaker.cc
+++ b/examples/daemon/speaker/speaker.cc
@@ -9,6 +9,51 @@
#include <base/bind.h>
#include <base/memory/weak_ptr.h>
+namespace {
+
+const char kTraits[] = R"({
+ "onOff": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "state": {
+ "type": "string",
+ "enum": [ "on", "standby" ]
+ }
+ }
+ }
+ },
+ "state": {
+ "type": "string",
+ "enum": [ "on", "standby" ]
+ }
+ },
+ "volume": {
+ "commands": {
+ "setConfig": {
+ "minimalRole": "user",
+ "parameters": {
+ "volume": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "isMuted": { "type": "boolean" }
+ }
+ }
+ },
+ "state": {
+ "isMuted": { "type": "boolean" },
+ "volume": { "type": "integer" }
+ }
+ }
+})";
+
+const char kComponent[] = "speaker";
+
+} // anonymous namespace
+
// SpeakerHandler is a command handler example that shows
// how to handle commands for a Weave speaker.
class SpeakerHandler {
@@ -17,50 +62,14 @@
void Register(weave::Device* device) {
device_ = device;
- device->AddStateDefinitionsFromJson(R"({
- "onOff": {"state": {"type": "string", "enum": ["on", "standby"]}},
- "volume": {
- "volume": {"type": "integer"},
- "isMuted": {"type": "boolean"}
- }
- })");
+ device->AddTraitDefinitionsFromJson(kTraits);
+ CHECK(device->AddComponent(kComponent, {"onOff", "volume"}, nullptr));
+ UpdateSpeakerState();
- device->SetStatePropertiesFromJson(R"({
- "onOff":{"state": "standby"},
- "volume":{
- "volume": 100,
- "isMuted": false
- }
- })",
- nullptr);
-
- device->AddCommandDefinitionsFromJson(R"({
- "onOff": {
- "setConfig":{
- "minimalRole": "user",
- "parameters": {
- "state": {"type": "string", "enum": ["on", "standby"]}
- }
- }
- },
- "volume": {
- "setConfig":{
- "minimalRole": "user",
- "parameters": {
- "volume": {
- "type": "integer",
- "minimum": 0,
- "maximum": 100
- },
- "isMuted": {"type": "boolean"}
- }
- }
- }
- })");
- device->AddCommandHandler("onOff.setConfig",
+ device->AddCommandHandler(kComponent, "onOff.setConfig",
base::Bind(&SpeakerHandler::OnOnOffSetConfig,
weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("volume.setConfig",
+ device->AddCommandHandler(kComponent, "volume.setConfig",
base::Bind(&SpeakerHandler::OnVolumeSetConfig,
weak_ptr_factory_.GetWeakPtr()));
}
@@ -132,7 +141,7 @@
state.SetString("onOff.state", speaker_status_ ? "on" : "standby");
state.SetBoolean("volume.isMuted", isMuted_status_);
state.SetInteger("volume.volume", volume_value_);
- device_->SetStateProperties(state, nullptr);
+ device_->SetStateProperties(kComponent, state, nullptr);
}
weave::Device* device_{nullptr};