diff options
author | Connor O'Brien <connoro@google.com> | 2016-10-10 12:31:37 -0700 |
---|---|---|
committer | Connor O'Brien <connoro@google.com> | 2016-10-19 14:43:36 -0700 |
commit | fe25fd88c80f033470e1851dde779a49f76bae44 (patch) | |
tree | d5ac6d0f2b747ff35861d1a65e38a80138dcb99e | |
parent | 6e0c0102aeb382f3fde5772361d291a26f687292 (diff) |
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 <connoro@google.com>
-rw-r--r-- | boot/1.0/default/Android.mk | 17 | ||||
-rw-r--r-- | boot/1.0/default/BootControl.cpp | 98 | ||||
-rw-r--r-- | boot/1.0/default/BootControl.h | 46 |
3 files changed, 161 insertions, 0 deletions
diff --git a/boot/1.0/default/Android.mk b/boot/1.0/default/Android.mk new file mode 100644 index 0000000000..563f1883ee --- /dev/null +++ b/boot/1.0/default/Android.mk @@ -0,0 +1,17 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := android.hardware.boot@1.0-impl +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SRC_FILES := \ + BootControl.cpp \ + +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libhidl \ + libhwbinder \ + libhardware \ + libutils \ + android.hardware.boot@1.0 \ + +include $(BUILD_SHARED_LIBRARY) 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 <utils/Log.h> + +#include <hardware/hardware.h> +#include <hardware/boot_control.h> +#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<uint32_t> BootControl::getNumberSlots() { + return mModule->getNumberSlots(mModule); +} + +Return<uint32_t> BootControl::getCurrentSlot() { + return mModule->getCurrentSlot(mModule); +} + +Return<void> 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<void> 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<void> 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<BoolResult> 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<BoolResult> 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<void> 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<hw_module_t**>(&module); + ret = hw_get_module(hal, const_cast<const hw_module_t**>(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 diff --git a/boot/1.0/default/BootControl.h b/boot/1.0/default/BootControl.h new file mode 100644 index 0000000000..73af4f4f11 --- /dev/null +++ b/boot/1.0/default/BootControl.h @@ -0,0 +1,46 @@ +#ifndef HIDL_GENERATED_android_hardware_boot_V1_0_BootControl_H_ +#define HIDL_GENERATED_android_hardware_boot_V1_0_BootControl_H_ + +#include <android/hardware/boot/1.0/IBootControl.h> +#include <hidl/Status.h> + +#include <hidl/MQDescriptor.h> +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::boot::V1_0::BoolResult; +using ::android::hardware::boot::V1_0::CommandResult; +using ::android::hardware::boot::V1_0::IBootControl; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::hidl_vec; +using ::android::hardware::hidl_string; +using ::android::sp; + +struct BootControl : public IBootControl { + BootControl(boot_control_module_t* module); + // Methods from ::android::hardware::boot::V1_0::IBootControl follow. + Return<uint32_t> getNumberSlots() override; + Return<uint32_t> getCurrentSlot() override; + Return<void> markBootSuccessful(markBootSuccessful_cb _hidl_cb) override; + Return<void> setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override; + Return<void> setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override; + Return<BoolResult> isSlotBootable(uint32_t slot) override; + Return<BoolResult> isSlotMarkedSuccessful(uint32_t slot) override; + Return<void> getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override; +private: + boot_control_module_t* mModule; +}; + +extern "C" IBootControl* HIDL_FETCH_IBootControl(const char* name); + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android + +#endif // HIDL_GENERATED_android_hardware_boot_V1_0_BootControl_H_ |