14a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh/* Copyright (c) 2015-2017, The Linux Foundataion. All rights reserved. 24a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* 34a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* Redistribution and use in source and binary forms, with or without 44a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* modification, are permitted provided that the following conditions are 54a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* met: 64a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Redistributions of source code must retain the above copyright 74a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* notice, this list of conditions and the following disclaimer. 84a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Redistributions in binary form must reproduce the above 94a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* copyright notice, this list of conditions and the following 104a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* disclaimer in the documentation and/or other materials provided 114a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* with the distribution. 124a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* * Neither the name of The Linux Foundation nor the names of its 134a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* contributors may be used to endorse or promote products derived 144a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* from this software without specific prior written permission. 154a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* 164a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 174a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 184a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 194a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 204a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 214a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 224a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 234a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 244a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 254a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 264a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh* 284a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh*/ 294a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 304a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#ifndef __HWC_COLOR_MANAGER_H__ 314a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define __HWC_COLOR_MANAGER_H__ 324a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 334a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <stdlib.h> 344a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <binder/Parcel.h> 354a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <powermanager/IPowerManager.h> 364a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <binder/BinderService.h> 374a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <core/sdm_types.h> 384a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <utils/locker.h> 394a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#include <utils/sys.h> 404a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 414a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhnamespace sdm { 424a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 434a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// This macro defines name for display APIs interface wrapper library. 444a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// This macro shall be used to load library using dlopen(). 454a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define DISPLAY_API_INTERFACE_LIBRARY_NAME "libsdm-disp-vndapis.so" 464a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 474a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// This macro defines variable name of display color APIs function tables 484a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// This macro shall be used to specify name of the variable in dlsym(). 494a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define DISPLAY_API_FUNC_TABLES "display_color_apis_ftables" 504a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define QDCM_DIAG_CLIENT_LIBRARY_NAME "libsdm-diag.so" 514a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define INIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagInit" 524a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#define DEINIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagDeInit" 534a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 544a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhtypedef int (*QDCMDiagInit)(void *ftables); 554a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 564a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhtypedef int (*QDCMDiagDeInit)(void); 574a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 584a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// Class to encapsulte all details of managing QDCM operating mode. 594a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhclass HWCQDCMModeManager { 604a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh public: 614a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const uint32_t kSocketCMDMaxLength = 4096; 624a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const uint32_t kFullWakeLock = 0x0000001a; 634a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const uint32_t kAcquireCauseWakeup = 0x10000000; 644a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const uint32_t kONAfterRelease = 0x20000000; 654a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh enum ActiveFeatureID { 664a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh kCABLFeature, 674a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh kADFeature, 684a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh kSVIFeature, 694a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh kMaxNumActiveFeature, 704a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh }; 714a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 724a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh struct ActiveFeatureCMD { 734a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh const char *cmd_on = NULL; 744a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh const char *cmd_off = NULL; 754a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh const char *cmd_query_status = NULL; 764a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh const char *running = NULL; 774a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh ActiveFeatureCMD(const char *arg1, const char *arg2, const char *arg3, const char *arg4) 784a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh : cmd_on(arg1), cmd_off(arg2), cmd_query_status(arg3), running(arg4) {} 794a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh }; 804a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 814a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const ActiveFeatureCMD kActiveFeatureCMD[kMaxNumActiveFeature]; 824a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 834a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh public: 844a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static HWCQDCMModeManager *CreateQDCMModeMgr(); 854a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh ~HWCQDCMModeManager(); 864a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int EnableQDCMMode(bool enable, HWCDisplay *hwc_display); 874a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 884a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh protected: 894a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool SendSocketCmd(); 904a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int AcquireAndroidWakeLock(bool enable); 914a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int EnableActiveFeatures(bool enable); 924a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int EnableActiveFeatures(bool enable, const ActiveFeatureCMD &cmds, bool *was_running); 934a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 944a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh private: 954a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool cabl_was_running_ = false; 964a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int socket_fd_ = -1; 974a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh android::sp<android::IBinder> wakelock_token_ = NULL; 984a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh android::sp<android::IPowerManager> power_mgr_ = NULL; 994a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh uint32_t entry_timeout_ = 0; 1004a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const char *const kSocketName; 1014a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const char *const kTagName; 1024a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const char *const kPackageName; 1034a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh}; 1044a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1054a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh// Class to encapsulte all HWC/OS specific behaviours for ColorManager. 1064a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanhclass HWCColorManager { 1074a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh public: 1084a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static const int kNumSolidFillLayers = 2; 1094a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static HWCColorManager *CreateColorManager(); 1104a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static int CreatePayloadFromParcel(const android::Parcel &in, uint32_t *disp_id, 1114a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh PPDisplayAPIPayload *sink); 1124a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static void MarshallStructIntoParcel(const PPDisplayAPIPayload &data, 1134a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh android::Parcel *out_parcel); 1144a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1154a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh ~HWCColorManager(); 1164a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh void DestroyColorManager(); 1174a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int EnableQDCMMode(bool enable, HWCDisplay *hwc_display); 1184a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int SetSolidFill(const void *params, bool enable, HWCDisplay *hwc_display); 1194a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool SolidFillLayersPrepare(hwc_display_contents_1_t **displays, HWCDisplay *hwc_display); 1204a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool SolidFillLayersSet(hwc_display_contents_1_t **displays, HWCDisplay *hwc_display); 1214a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display); 1224a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int SetDetailedEnhancer(void *params, HWCDisplay *hwc_display); 1234a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh void SetColorModeDetailEnhancer(HWCDisplay *hwc_display); 1244a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display); 1254a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1264a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh protected: 1274a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh int CreateSolidFillLayers(HWCDisplay *hwc_display); 1284a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh void DestroySolidFillLayers(); 1294a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh static uint32_t Get8BitsARGBColorValue(const PPColorFillParams ¶ms); 1304a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1314a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh private: 1324a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh DynLib color_apis_lib_; 1334a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh DynLib diag_client_lib_; 1344a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh void *color_apis_ = NULL; 1354a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh QDCMDiagInit qdcm_diag_init_ = NULL; 1364a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh QDCMDiagDeInit qdcm_diag_deinit_ = NULL; 1374a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh HWCQDCMModeManager *qdcm_mode_mgr_ = NULL; 1384a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1394a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh bool solid_fill_enable_ = false; 1404a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh PPColorFillParams solid_fill_params_; 1414a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh hwc_display_contents_1_t *solid_fill_layers_ = NULL; 1424a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh HWCBufferAllocator *buffer_allocator_ = NULL; 1434a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh BufferInfo buffer_info; 1444a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh Locker locker_; 1454a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh}; 1464a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1474a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh} // namespace sdm 1484a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh 1494a1efd0680d2e9b61739e1eaeffd89174d6d2605Alain Vongsouvanh#endif // __HWC_COLOR_MANAGER_H__ 150