From fe25fd88c80f033470e1851dde779a49f76bae44 Mon Sep 17 00:00:00 2001 From: Connor O'Brien Date: Mon, 10 Oct 2016 12:31:37 -0700 Subject: Add boot_control HIDL default implementation Create basic implementation that passes commands through to the old HAL implementation. Bug: 31864052 Test: Ran and compared output to old implementation Change-Id: I01f4450dc3a1893e13b8fb325ea40cf9c98297be Signed-off-by: Connor O'Brien --- boot/1.0/default/BootControl.cpp | 98 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 boot/1.0/default/BootControl.cpp (limited to 'boot/1.0/default/BootControl.cpp') diff --git a/boot/1.0/default/BootControl.cpp b/boot/1.0/default/BootControl.cpp new file mode 100644 index 0000000000..4c34168696 --- /dev/null +++ b/boot/1.0/default/BootControl.cpp @@ -0,0 +1,98 @@ +#define LOG_TAG "android.hardware.boot@1.0-impl" +#include + +#include +#include +#include "BootControl.h" + +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +BootControl::BootControl(boot_control_module_t *module) : mModule(module){ +} + +// Methods from ::android::hardware::boot::V1_0::IBootControl follow. +Return BootControl::getNumberSlots() { + return mModule->getNumberSlots(mModule); +} + +Return BootControl::getCurrentSlot() { + return mModule->getCurrentSlot(mModule); +} + +Return BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) { + int ret = mModule->markBootSuccessful(mModule); + struct CommandResult cr; + cr.success = (ret == 0); + cr.errMsg = strerror(-ret); + _hidl_cb(cr); + return Void(); +} + +Return BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) { + int ret = mModule->setActiveBootSlot(mModule, slot); + struct CommandResult cr; + cr.success = (ret == 0); + cr.errMsg = strerror(-ret); + _hidl_cb(cr); + return Void(); +} + +Return BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) { + int ret = mModule->setSlotAsUnbootable(mModule, slot); + struct CommandResult cr; + cr.success = (ret == 0); + cr.errMsg = strerror(-ret); + _hidl_cb(cr); + return Void(); +} + +Return BootControl::isSlotBootable(uint32_t slot) { + int32_t ret = mModule->isSlotBootable(mModule, slot); + if (ret < 0) { + return BoolResult::INVALID_SLOT; + } + return ret ? BoolResult::TRUE : BoolResult::FALSE; +} + +Return BootControl::isSlotMarkedSuccessful(uint32_t slot) { + int32_t ret = mModule->isSlotMarkedSuccessful(mModule, slot); + if (ret < 0) { + return BoolResult::INVALID_SLOT; + } + return ret ? BoolResult::TRUE : BoolResult::FALSE; +} + +Return BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) { + hidl_string ans; + const char *suffix = mModule->getSuffix(mModule, slot); + if (suffix) { + ans = suffix; + } + _hidl_cb(ans); + return Void(); +} + + +IBootControl* HIDL_FETCH_IBootControl(const char* hal) { + int ret = 0; + boot_control_module_t* module = NULL; + hw_module_t **hwm = reinterpret_cast(&module); + ret = hw_get_module(hal, const_cast(hwm)); + if (ret) + { + ALOGE("hw_get_module %s failed: %d", hal, ret); + return nullptr; + } + module->init(module); + return new BootControl(module); +} + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android -- cgit v1.2.3