-rw-r--r-- | hwc2/common/devices/PhysicalDevice.cpp | 18 | ||||
-rw-r--r-- | hwc2/common/devices/PrimaryDevice.cpp | 48 | ||||
-rw-r--r-- | hwc2/common/hdmi/DisplayHdmi.cpp | 16 | ||||
-rw-r--r-- | hwc2/common/hdmi/DisplayHdmi.h | 1 | ||||
-rw-r--r-- | hwc2/common/utils/SysTokenizer.cpp | 180 | ||||
-rw-r--r-- | hwc2/common/utils/SysTokenizer.h | 135 | ||||
-rw-r--r-- | hwc2/include/PhysicalDevice.h | 4 | ||||
-rw-r--r-- | hwc2/include/PrimaryDevice.h | 14 | ||||
-rw-r--r-- | hwc2/platforms/Android.mk | 3 |
9 files changed, 407 insertions, 12 deletions
diff --git a/hwc2/common/devices/PrimaryDevice.cpp b/hwc2/common/devices/PrimaryDevice.cpp index c6a82e2..da28b8e 100644 --- a/hwc2/common/devices/PrimaryDevice.cpp +++ b/hwc2/common/devices/PrimaryDevice.cpp @@ -20,13 +20,19 @@ #include <Hwcomposer.h> #include <PrimaryDevice.h> #include <Utils.h> +#include <SysTokenizer.h> + namespace android { namespace amlogic { PrimaryDevice::PrimaryDevice(Hwcomposer& hwc, IComposeDeviceFactory * controlFactory) - : PhysicalDevice(DEVICE_PRIMARY, hwc, controlFactory) + : PhysicalDevice(DEVICE_PRIMARY, hwc, controlFactory), + pConfigPath(DISPLAY_CFG_FILE), + mDisplayType(DISPLAY_TYPE_MBOX) { + DTRACE("display mode config path: %s", pConfigPath); + CTRACE(); } @@ -37,6 +43,9 @@ PrimaryDevice::~PrimaryDevice() bool PrimaryDevice::initialize() { + parseConfigFile(); + updateDisplayInfo(mDefaultMode); + if (!PhysicalDevice::initialize()) { DEINIT_AND_RETURN_FALSE("failed to initialize physical device"); } @@ -78,5 +87,42 @@ void PrimaryDevice::hotplugListener(bool connected) onHotplug(getDisplayId(), connected); } +int PrimaryDevice::parseConfigFile() +{ + const char* WHITESPACE = " \t\r"; + + SysTokenizer* tokenizer; + int status = SysTokenizer::open(pConfigPath, &tokenizer); + if (status) { + ETRACE("Error %d opening display config file %s.", status, pConfigPath); + } else { + while (!tokenizer->isEof()) { + ITRACE("Parsing %s: %s", tokenizer->getLocation(), tokenizer->peekRemainderOfLine()); + + tokenizer->skipDelimiters(WHITESPACE); + if (!tokenizer->isEol() && tokenizer->peekChar() != '#') { + + char *token = tokenizer->nextToken(WHITESPACE); + if (!strcmp(token, DEVICE_STR_MBOX)) { + mDisplayType = DISPLAY_TYPE_MBOX; + } else if (!strcmp(token, DEVICE_STR_TV)) { + mDisplayType = DISPLAY_TYPE_TV; + } else { + DTRACE("%s: Expected keyword, got '%s'.", tokenizer->getLocation(), token); + break; + } + tokenizer->skipDelimiters(WHITESPACE); + tokenizer->nextToken(WHITESPACE); + tokenizer->skipDelimiters(WHITESPACE); + strcpy(mDefaultMode, tokenizer->nextToken(WHITESPACE)); + } + + tokenizer->nextLine(); + } + delete tokenizer; + } + return status; +} + } // namespace amlogic } // namespace android |