Add handling of base.reboot to weaved
Now that weaved can use binder on Brillo, add a command handler for
base.reboot command and delegate rebooting to native power manager
daemon.
BUG: 23759426
Change-Id: I88f18d953ae3072b154d6cc822d5064207316189
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 27610ec..1323850 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -60,6 +60,8 @@
const char kErrorDomain[] = "buffet";
const char kFileReadError[] = "file_read_error";
+const char kBaseComponent[] = "base";
+const char kRebootCommand[] = "base.reboot";
bool LoadFile(const base::FilePath& file_path,
std::string* data,
@@ -188,6 +190,7 @@
}
void Manager::Start(AsyncEventSequencer* sequencer) {
+ power_manager_client_.Init();
RestartWeave(sequencer);
}
@@ -260,6 +263,10 @@
base::Bind(&Manager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&Manager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr()));
+ device_->AddCommandHandler(kBaseComponent, kRebootCommand,
+ base::Bind(&Manager::OnRebootDevice,
+ weak_ptr_factory_.GetWeakPtr()));
+
CreateServicesForClients();
}
@@ -339,6 +346,21 @@
NotifyServiceManagerChange(ids);
}
+void Manager::OnRebootDevice(const std::weak_ptr<weave::Command>& cmd) {
+ auto command = cmd.lock();
+ if (!command || !command->Complete({}, nullptr))
+ return;
+
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&Manager::RebootDeviceNow, weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(2));
+}
+
+void Manager::RebootDeviceNow() {
+ power_manager_client_.Reboot(android::RebootReason::DEFAULT);
+}
+
android::binder::Status Manager::connect(
const android::sp<android::weave::IWeaveClient>& client) {
pending_clients_.push_back(client);