diff options
| author | Ethan Chen <intervigil@gmail.com> | 2018-04-25 23:15:06 -0700 |
|---|---|---|
| committer | Ethan Chen <intervigil@gmail.com> | 2018-06-09 12:54:48 -0700 |
| commit | 18f4e8d82033f0f68c64f785f7733e188a7578f0 (patch) | |
| tree | 26daa3760c9e2951a413314ce6c882509c140d59 | |
| parent | f66d76e7affb0685ec86ca1f796790154dc4424f (diff) | |
| download | android_hardware_lineage_interfaces-18f4e8d82033f0f68c64f785f7733e188a7578f0.tar.gz android_hardware_lineage_interfaces-18f4e8d82033f0f68c64f785f7733e188a7578f0.tar.bz2 android_hardware_lineage_interfaces-18f4e8d82033f0f68c64f785f7733e188a7578f0.zip | |
livedisplay: Don't use singletons for the stack
* Rely on plain RAII semantics with object lifetimes to manage resources
instead of singletons.
Change-Id: I5c5a06349574edc534c2814cb30da9cb04f72578
| -rw-r--r-- | livedisplay/1.0/default/controller/LegacyMMController.cpp | 16 | ||||
| -rw-r--r-- | livedisplay/1.0/default/controller/SDMController.cpp | 16 | ||||
| -rw-r--r-- | livedisplay/1.0/default/impl/LegacyMM.cpp | 106 | ||||
| -rw-r--r-- | livedisplay/1.0/default/impl/SDM.cpp | 44 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/Color.h | 14 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/ColorBackend.h | 2 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/controller/LegacyMMController.h | 6 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/controller/SDMController.h | 7 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/impl/LegacyMM.h | 8 | ||||
| -rw-r--r-- | livedisplay/1.0/default/include/impl/SDM.h | 8 | ||||
| -rw-r--r-- | livedisplay/1.0/default/service.cpp | 9 | ||||
| -rw-r--r-- | livedisplay/1.0/default/src/Color.cpp | 60 |
12 files changed, 126 insertions, 170 deletions
diff --git a/livedisplay/1.0/default/controller/LegacyMMController.cpp b/livedisplay/1.0/default/controller/LegacyMMController.cpp index 12a8e13..403692b 100644 --- a/livedisplay/1.0/default/controller/LegacyMMController.cpp +++ b/livedisplay/1.0/default/controller/LegacyMMController.cpp @@ -74,13 +74,6 @@ namespace V1_0 { namespace implementation { LegacyMMController::LegacyMMController() { - mHandle = openlib(); - if (mHandle != nullptr) { - FOR_EACH_FUNCTION(LOAD_MM_FUNCTION) - } -} - -std::shared_ptr<void> LegacyMMController::openlib() { std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) { FOR_EACH_FUNCTION(CLOSE_MM_FUNCTION) if (p != nullptr) { @@ -93,14 +86,11 @@ std::shared_ptr<void> LegacyMMController::openlib() { }); if (handle == nullptr) { LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")"; - return nullptr; + return; } - return handle; -} + mHandle = handle; -LegacyMMController& LegacyMMController::getInstance() { - static LegacyMMController instance{}; - return instance; + FOR_EACH_FUNCTION(LOAD_MM_FUNCTION); } int32_t LegacyMMController::init(int32_t initialize) { diff --git a/livedisplay/1.0/default/controller/SDMController.cpp b/livedisplay/1.0/default/controller/SDMController.cpp index 31e0ec7..1355ce2 100644 --- a/livedisplay/1.0/default/controller/SDMController.cpp +++ b/livedisplay/1.0/default/controller/SDMController.cpp @@ -72,13 +72,6 @@ namespace V1_0 { namespace implementation { SDMController::SDMController() { - mHandle = openlib(); - if (mHandle != nullptr) { - FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION) - } -} - -std::shared_ptr<void> SDMController::openlib() { std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) { FOR_EACH_FUNCTION(CLOSE_SDM_FUNCTION) if (p != nullptr) { @@ -91,14 +84,11 @@ std::shared_ptr<void> SDMController::openlib() { }); if (handle == nullptr) { LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")"; - return nullptr; + return; } - return handle; -} + mHandle = handle; -SDMController& SDMController::getInstance() { - static SDMController instance{}; - return instance; + FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION) } int32_t SDMController::init(uint64_t* hctx, uint32_t flags) { diff --git a/livedisplay/1.0/default/impl/LegacyMM.cpp b/livedisplay/1.0/default/impl/LegacyMM.cpp index c28a593..aa317b6 100644 --- a/livedisplay/1.0/default/impl/LegacyMM.cpp +++ b/livedisplay/1.0/default/impl/LegacyMM.cpp @@ -63,11 +63,52 @@ using android::OK; using android::sp; using android::status_t; +LegacyMM::LegacyMM() { + mController = std::make_unique<LegacyMMController>(); + if (mController == nullptr) { + LOG(ERROR) << "%s: Failed to create LegacyMMController"; + return; + } + + status_t rc = mController->init(0); + if (rc != OK) { + LOG(ERROR) << "%s: Failed to initialize LegacyMMController"; + return; + } + + if (hasFeature(Feature::DISPLAY_MODES)) { + int32_t id; + // Get the initial mode from Utils + rc = Utils::readInitialModeId(&id); + if (rc != OK || id < 0) { + // Get controller default mode and save it + rc = mController->get_default_display_mode(0, &id); + if (rc == OK && id >= 0) { + Utils::writeInitialModeId(id); + } else { + Utils::writeInitialModeId(0); + } + } + + auto mode = getDefaultDisplayMode(); + if (mode != nullptr) { + setDisplayMode(mode->id, false); + } + } +} + +LegacyMM::~LegacyMM() { + status_t rc = mController->init(1); + if (rc != OK) { + LOG(ERROR) << "%s: Failed to deinitialize LegacyMMController"; + } +} + status_t LegacyMM::getColorBalanceRange(Range& range) { struct mm_range r; memset(&r, 0, sizeof(struct mm_range)); - status_t rc = LegacyMMController::getInstance().get_color_balance_range(0, &r); + status_t rc = mController->get_color_balance_range(0, &r); if (rc == OK) { range.min = r.min; range.max = r.max; @@ -76,12 +117,12 @@ status_t LegacyMM::getColorBalanceRange(Range& range) { } status_t LegacyMM::setColorBalance(int32_t balance) { - return LegacyMMController::getInstance().set_color_balance(0, balance); + return mController->set_color_balance(0, balance); } int32_t LegacyMM::getColorBalance() { int32_t value = 0; - if (LegacyMMController::getInstance().get_color_balance(0, &value) != 0) { + if (mController->get_color_balance(0, &value) != 0) { value = 0; } return value; @@ -111,7 +152,7 @@ status_t LegacyMM::getDisplayModes(std::vector<sp<disp_mode>>& profiles) { d_mode tmp[count]; - rc = LegacyMMController::getInstance().get_display_modes(0, 0, tmp, count); + rc = mController->get_display_modes(0, 0, tmp, count); if (rc == 0) { for (uint32_t i = 0; i < count; i++) { const sp<disp_mode> m = new disp_mode; @@ -136,11 +177,11 @@ status_t LegacyMM::setDisplayMode(int32_t modeID, bool makeDefault) { return BAD_VALUE; } - if (LegacyMMController::getInstance().set_active_display_mode(0, modeID) != 0) { + if (mController->set_active_display_mode(0, modeID) != 0) { return BAD_VALUE; } - if (makeDefault && LegacyMMController::getInstance().set_default_display_mode(0, modeID) != 0) { + if (makeDefault && mController->set_default_display_mode(0, modeID) != 0) { return BAD_VALUE; } @@ -156,7 +197,7 @@ sp<disp_mode> LegacyMM::getCurrentDisplayMode() { int32_t id = 0; uint32_t mask = 0; - status_t rc = LegacyMMController::getInstance().get_active_display_mode(0, &id, &mask); + status_t rc = mController->get_active_display_mode(0, &id, &mask); if (rc == OK && id >= 0) { return getDisplayModeById(id); } @@ -174,7 +215,7 @@ sp<disp_mode> LegacyMM::getDefaultDisplayMode() { return getDisplayModeById(id); } - status_t rc = LegacyMMController::getInstance().get_default_display_mode(0, &id); + status_t rc = mController->get_default_display_mode(0, &id); if (rc == OK && id >= 0) { return getDisplayModeById(id); } @@ -186,7 +227,7 @@ status_t LegacyMM::getPictureAdjustmentRanges(HSICRanges& ranges) { struct mm_pa_range r; memset(&r, 0, sizeof(struct mm_pa_range)); - status_t rc = LegacyMMController::getInstance().get_pa_range(0, &r); + status_t rc = mController->get_pa_range(0, &r); if (rc == OK) { ranges.hue.min = r.min.hue; ranges.hue.max = r.max.hue; @@ -211,7 +252,7 @@ status_t LegacyMM::getPictureAdjustment(HSIC& hsic) { struct mm_pa_config config; memset(&config, 0, sizeof(struct mm_pa_config)); - status_t rc = LegacyMMController::getInstance().get_pa_config(0, &config); + status_t rc = mController->get_pa_config(0, &config); if (rc == OK) { hsic.hue = config.data.hue; hsic.saturation = config.data.saturation; @@ -237,46 +278,7 @@ status_t LegacyMM::setPictureAdjustment(const HSIC& hsic) { config.data.contrast = hsic.contrast; config.data.saturationThreshold = hsic.saturationThreshold; - return LegacyMMController::getInstance().set_pa_config(0, &config); -} - -status_t LegacyMM::initialize() { - status_t rc = NO_INIT; - rc = LegacyMMController::getInstance().init(0); - if (rc != OK) { - LOG(ERROR) << "%s: Failed to initialize LegacyMMController"; - return rc; - } - - if (hasFeature(Feature::DISPLAY_MODES)) { - int32_t id; - // Get the initial mode from Utils - rc = Utils::readInitialModeId(&id); - if (rc != OK || id < 0) { - // Get controller default mode and save it - rc = LegacyMMController::getInstance().get_default_display_mode(0, &id); - if (rc == OK && id >= 0) { - Utils::writeInitialModeId(id); - } else { - Utils::writeInitialModeId(0); - } - } - - auto mode = getDefaultDisplayMode(); - if (mode != nullptr) { - setDisplayMode(mode->id, false); - } - } - return OK; -} - -status_t LegacyMM::deinitialize() { - status_t rc = NO_INIT; - rc = LegacyMMController::getInstance().init(1); - if (rc != OK) { - return rc; - } - return OK; + return mController->set_pa_config(0, &config); } bool LegacyMM::hasFeature(Feature feature) { @@ -295,7 +297,7 @@ bool LegacyMM::hasFeature(Feature feature) { return false; } - if (LegacyMMController::getInstance().supported(0, id)) { + if (mController->supported(0, id)) { // display modes and color balance depend on each other if (feature == Feature::DISPLAY_MODES || feature == Feature::COLOR_BALANCE) { if (getNumDisplayModes() > 0) { @@ -322,7 +324,7 @@ bool LegacyMM::hasFeature(Feature feature) { uint32_t LegacyMM::getNumDisplayModes() { uint32_t count = 0; - if (LegacyMMController::getInstance().get_num_display_modes(0, 0, &count) != 0) { + if (mController->get_num_display_modes(0, 0, &count) != 0) { count = 0; } return count; diff --git a/livedisplay/1.0/default/impl/SDM.cpp b/livedisplay/1.0/default/impl/SDM.cpp index 62a7ffe..7a448c6 100644 --- a/livedisplay/1.0/default/impl/SDM.cpp +++ b/livedisplay/1.0/default/impl/SDM.cpp @@ -92,21 +92,23 @@ using ::android::OK; using ::android::sp; using ::android::status_t; -status_t SDM::initialize() { - status_t rc = NO_INIT; +SDM::SDM() : mActiveModeId(-1) { + mController = std::make_unique<SDMController>(); + if (mController == nullptr) { + LOG(ERROR) << "Failed to create SDMController"; + return; + } - rc = SDMController::getInstance().init(&mHandle, 0); + status_t rc = mController->init(&mHandle, 0); if (rc != OK) { - return rc; + return; } - mActiveModeId = -1; - if (hasFeature(Feature::DISPLAY_MODES)) { rc = saveInitialDisplayMode(); if (rc != OK) { LOG(ERROR) << "Failed to save initial display mode! err=" << rc; - return rc; + return; } sp<disp_mode> defMode = getDefaultDisplayMode(); if (defMode != nullptr) { @@ -115,20 +117,16 @@ status_t SDM::initialize() { } mFOSSEnabled = android::base::GetBoolProperty(kFossProperty, false); - - return OK; } -status_t SDM::deinitialize() { - SDMController::getInstance().deinit(mHandle, 0); - mHandle = 0; - return OK; +SDM::~SDM() { + mController->deinit(mHandle, 0); } uint32_t SDM::getNumSDMDisplayModes() { uint32_t flags = 0; int32_t count = 0; - if (SDMController::getInstance().get_num_display_modes(mHandle, 0, 0, &count, &flags)) { + if (mController->get_num_display_modes(mHandle, 0, 0, &count, &flags)) { count = 0; } return count; @@ -172,11 +170,11 @@ status_t SDM::setModeState(sp<disp_mode> mode, bool state) { } } else if (mode->privFlags == PRIV_MODE_FLAG_SDM) { if (state) { - return SDMController::getInstance().set_active_display_mode(mHandle, 0, mode->id, 0); + return mController->set_active_display_mode(mHandle, 0, mode->id, 0); } else { if (Utils::readInitialModeId(&id) == OK) { LOG(VERBOSE) << "set sdm mode to default: id" << id; - return SDMController::getInstance().set_active_display_mode(mHandle, 0, id, 0); + return mController->set_active_display_mode(mHandle, 0, id, 0); } } } @@ -216,7 +214,7 @@ status_t SDM::getDisplayModes(std::vector<sp<disp_mode>>& profiles) { sdm_mode tmp[sdm_count]; uint32_t flags = 0; - rc = SDMController::getInstance().get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags); + rc = mController->get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags); if (rc == 0) { for (uint32_t i = 0; i < sdm_count; i++) { const sp<disp_mode> m = new disp_mode; @@ -283,7 +281,7 @@ status_t SDM::getPictureAdjustmentRanges(HSICRanges& ranges) { hsic_ranges r; memset(&r, 0, sizeof(struct hsic_ranges)); - status_t rc = SDMController::getInstance().get_global_pa_range(mHandle, 0, &r); + status_t rc = mController->get_global_pa_range(mHandle, 0, &r); if (rc == OK) { ranges.hue.min = r.hue.min; ranges.hue.max = r.hue.max; @@ -328,7 +326,7 @@ bool SDM::hasFeature(Feature feature) { return false; } - if (SDMController::getInstance().get_feature_version(mHandle, id, &v, &flags) != OK) { + if (mController->get_feature_version(mHandle, id, &v, &flags) != OK) { return false; } @@ -352,7 +350,7 @@ status_t SDM::saveInitialDisplayMode() { int32_t id = 0; uint32_t flags = 0; if (Utils::readInitialModeId(&id) != OK || id < 0) { - if (SDMController::getInstance().get_default_display_mode(mHandle, 0, &id, &flags) == OK && + if (mController->get_default_display_mode(mHandle, 0, &id, &flags) == OK && id >= 0) { return Utils::writeInitialModeId(id); } else { @@ -367,7 +365,7 @@ status_t SDM::getPictureAdjustment(HSIC& hsic) { hsic_config config; memset(&config, 0, sizeof(struct hsic_config)); - status_t rc = SDMController::getInstance().get_global_pa_config(mHandle, 0, &enable, &config); + status_t rc = mController->get_global_pa_config(mHandle, 0, &enable, &config); if (rc == OK) { hsic.hue = config.data.hue; hsic.saturation = config.data.saturation; @@ -415,7 +413,7 @@ status_t SDM::setDisplayMode(int32_t modeID, bool makeDefault) { return rc; } if (mode->privFlags == PRIV_MODE_FLAG_SDM) { - rc = SDMController::getInstance().set_default_display_mode(mHandle, 0, mode->id, 0); + rc = mController->set_default_display_mode(mHandle, 0, mode->id, 0); if (rc != OK) { LOG(ERROR) << "failed to save mode! err=" << rc; return rc; @@ -470,7 +468,7 @@ status_t SDM::setPictureAdjustment(const HSIC& hsic) { config.data.contrast = hsic.contrast; config.data.saturationThreshold = hsic.saturationThreshold; - return SDMController::getInstance().set_global_pa_config(mHandle, 0, 1, &config); + return mController->set_global_pa_config(mHandle, 0, 1, &config); } HSIC SDM::getDefaultPictureAdjustment() { diff --git a/livedisplay/1.0/default/include/Color.h b/livedisplay/1.0/default/include/Color.h index e6fca65..74d0234 100644 --- a/livedisplay/1.0/default/include/Color.h +++ b/livedisplay/1.0/default/include/Color.h @@ -40,7 +40,7 @@ class ColorBackend; class Color : public IColor { public: - static android::sp<Color> getInstance(); + Color(); Return<Features> getSupportedFeatures() override; @@ -72,18 +72,14 @@ class Color : public IColor { ~Color(); private: - bool connect(); - void reset(); - - Color(); - static android::sp<Color> sInstance; + void connect(); + void disconnect(); uint32_t mFeatures; bool mConnected; - bool check(Feature f) { - return connect() && (mFeatures & (uint32_t)f); - } + bool check(Feature f); + void error(const char* msg = NULL); void addFeature(Feature f) { diff --git a/livedisplay/1.0/default/include/ColorBackend.h b/livedisplay/1.0/default/include/ColorBackend.h index 4abd11b..c5d06fa 100644 --- a/livedisplay/1.0/default/include/ColorBackend.h +++ b/livedisplay/1.0/default/include/ColorBackend.h @@ -49,8 +49,6 @@ class ColorBackend { virtual HSIC getDefaultPictureAdjustment() = 0; virtual android::status_t setPictureAdjustment(const HSIC& hsic) = 0; - virtual android::status_t initialize() = 0; - virtual android::status_t deinitialize() = 0; virtual bool hasFeature(Feature feature) = 0; virtual ~ColorBackend() { diff --git a/livedisplay/1.0/default/include/controller/LegacyMMController.h b/livedisplay/1.0/default/include/controller/LegacyMMController.h index 48bb403..8265001 100644 --- a/livedisplay/1.0/default/include/controller/LegacyMMController.h +++ b/livedisplay/1.0/default/include/controller/LegacyMMController.h @@ -29,7 +29,7 @@ namespace implementation { class LegacyMMController { public: - static LegacyMMController& getInstance(); + LegacyMMController(); int32_t init(int32_t init); int32_t get_color_balance_range(int32_t disp_id, void* range); @@ -47,10 +47,6 @@ class LegacyMMController { int32_t supported(int32_t disp_id, uint32_t feature_id); private: - LegacyMMController(); - - std::shared_ptr<void> openlib(); - typedef int32_t (*disp_api_init)(int32_t); typedef int32_t (*disp_api_get_color_balance_range)(int32_t, void*); typedef int32_t (*disp_api_set_color_balance)(int32_t, int32_t); diff --git a/livedisplay/1.0/default/include/controller/SDMController.h b/livedisplay/1.0/default/include/controller/SDMController.h index e44591a..2e634de 100644 --- a/livedisplay/1.0/default/include/controller/SDMController.h +++ b/livedisplay/1.0/default/include/controller/SDMController.h @@ -28,13 +28,8 @@ namespace V1_0 { namespace implementation { class SDMController { - private: - SDMController(); - - std::shared_ptr<void> openlib(); - public: - static SDMController& getInstance(); + SDMController(); int32_t init(uint64_t* hctx, uint32_t flags); int32_t deinit(uint64_t hctx, uint32_t flags); diff --git a/livedisplay/1.0/default/include/impl/LegacyMM.h b/livedisplay/1.0/default/include/impl/LegacyMM.h index 7484f41..f7bcc41 100644 --- a/livedisplay/1.0/default/include/impl/LegacyMM.h +++ b/livedisplay/1.0/default/include/impl/LegacyMM.h @@ -25,8 +25,13 @@ namespace livedisplay { namespace V1_0 { namespace implementation { +class LegacyMMController; + class LegacyMM : public ColorBackend { public: + LegacyMM(); + ~LegacyMM(); + virtual android::status_t setAdaptiveBacklightEnabled(bool /* enabled */) override { return android::NO_INIT; } @@ -57,14 +62,13 @@ class LegacyMM : public ColorBackend { virtual HSIC getDefaultPictureAdjustment() override; virtual android::status_t setPictureAdjustment(const HSIC& hsic) override; - virtual android::status_t initialize() override; - virtual android::status_t deinitialize() override; virtual bool hasFeature(Feature feature) override; private: uint32_t getNumDisplayModes(); android::sp<disp_mode> getDisplayModeById(int32_t id); + std::unique_ptr<LegacyMMController> mController; HSIC mDefaultPictureAdjustment; }; diff --git a/livedisplay/1.0/default/include/impl/SDM.h b/livedisplay/1.0/default/include/impl/SDM.h index b7fd02b..805172c 100644 --- a/livedisplay/1.0/default/include/impl/SDM.h +++ b/livedisplay/1.0/default/include/impl/SDM.h @@ -28,8 +28,13 @@ namespace livedisplay { namespace V1_0 { namespace implementation { +class SDMController; + class SDM : public ColorBackend { public: + SDM(); + ~SDM(); + virtual android::status_t getDisplayModes(std::vector<android::sp<disp_mode>>& profiles) override; virtual android::sp<disp_mode> getCurrentDisplayMode() override; virtual android::sp<disp_mode> getDefaultDisplayMode() override; @@ -61,8 +66,6 @@ class SDM : public ColorBackend { virtual HSIC getDefaultPictureAdjustment() override; virtual bool hasFeature(Feature f); - virtual android::status_t initialize(); - virtual android::status_t deinitialize(); private: android::status_t saveInitialDisplayMode(); @@ -74,6 +77,7 @@ class SDM : public ColorBackend { android::sp<disp_mode> getLocalSRGBMode(); android::sp<disp_mode> getLocalDCIP3Mode(); + std::unique_ptr<SDMController> mController; uint64_t mHandle; bool mFOSSEnabled; bool mCachedFOSSStatus; diff --git a/livedisplay/1.0/default/service.cpp b/livedisplay/1.0/default/service.cpp index b8f5cb5..026c26c 100644 --- a/livedisplay/1.0/default/service.cpp +++ b/livedisplay/1.0/default/service.cpp @@ -39,21 +39,14 @@ using ::vendor::lineage::livedisplay::V1_0::implementation::Color; int main() { status_t status; - android::sp<IColor> service = nullptr; - LOG(INFO) << "LiveDisplay HAL service is starting."; // The LiveDisplay HAL may communicate to other vendor components via /dev/vndbinder android::ProcessState::initWithDriver("/dev/vndbinder"); - service = Color::getInstance(); - if (service == nullptr) { - LOG(ERROR) << "Can not create an instance of LiveDisplay HAL Iface, exiting."; - goto shutdown; - } - configureRpcThreadpool(1, true /*callerWillJoin*/); + android::sp<IColor> service = new Color(); status = service->registerAsService(); if (status != OK) { LOG(ERROR) << "Could not register service for LiveDisplay HAL Iface (" << status << ")"; diff --git a/livedisplay/1.0/default/src/Color.cpp b/livedisplay/1.0/default/src/Color.cpp index accd1d3..550099e 100644 --- a/livedisplay/1.0/default/src/Color.cpp +++ b/livedisplay/1.0/default/src/Color.cpp @@ -60,51 +60,47 @@ using ::android::OK; using ::android::sp; using ::android::status_t; -sp<Color> Color::sInstance = nullptr; - -Color::Color() : mConnected(false), mBackend(nullptr) { -#if defined(COLOR_BACKEND_SDM) - mBackend = std::make_unique<SDM>(); -#elif defined(COLOR_BACKEND_LEGACYMM) - mBackend = std::make_unique<LegacyMM>(); -#endif - LOG(DEBUG) << "Loaded LiveDisplay native interface"; +Color::Color() : mFeatures(0), mConnected(false), mBackend(nullptr) { + connect(); } Color::~Color() { - reset(); + disconnect(); } -void Color::reset() { +void Color::disconnect() { if (mConnected) { - mBackend->deinitialize(); + mBackend = nullptr; } mFeatures = 0; mConnected = false; } -void Color::error(const char* msg) { - if (msg != NULL) { - LOG(ERROR) << msg; +bool Color::check(Feature f) { + if (!mConnected) { + connect(); } - reset(); + return (mFeatures & (uint32_t)f); } -bool Color::connect() { - if (mConnected) { - return true; +void Color::error(const char* msg) { + if (msg != NULL) { + LOG(ERROR) << msg; } - mFeatures = 0; + disconnect(); +} +void Color::connect() { +#if defined(COLOR_BACKEND_SDM) + mBackend.reset(new SDM()); +#elif defined(COLOR_BACKEND_LEGACYMM) + mBackend.reset(new LegacyMM()); +#endif if (mBackend == nullptr) { - return false; - } - - if (mBackend->initialize() != OK) { LOG(ERROR) << "Failed to initialize backend!"; - return false; + return; } for (uint32_t i = 1; i <= (uint32_t)Feature::MAX; i <<= 1) { @@ -113,20 +109,14 @@ bool Color::connect() { addFeature(f); } } - mConnected = true; - return mFeatures > 0; -} - -sp<Color> Color::getInstance() { - if (sInstance == nullptr) { - sInstance = new Color(); - } - return sInstance; + mConnected = true; } Return<Features> Color::getSupportedFeatures() { - connect(); + if (!mConnected) { + connect(); + } return mFeatures; } |
