summaryrefslogtreecommitdiff
path: root/services/config/src/client_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'services/config/src/client_impl.h')
-rw-r--r--services/config/src/client_impl.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/services/config/src/client_impl.h b/services/config/src/client_impl.h
new file mode 100644
index 00000000..48b543af
--- /dev/null
+++ b/services/config/src/client_impl.h
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided
+* with the distribution.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __CLIENT_IMPL_H__
+#define __CLIENT_IMPL_H__
+
+#define VALIDATE_CONFIG_SWITCH 1
+
+#include <vendor/display/config/2.0/IDisplayConfig.h>
+#include <hidl/HidlSupport.h>
+#include <log/log.h>
+#include <config/client_interface.h>
+#include <string>
+#include <vector>
+
+#include "opcode_types.h"
+
+namespace DisplayConfig {
+
+using vendor::display::config::V2_0::IDisplayConfig;
+using vendor::display::config::V2_0::IDisplayConfigCallback;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_vec;
+
+typedef hidl_vec<uint8_t> ByteStream;
+typedef hidl_vec<hidl_handle> HandleStream;
+
+class ClientCallback: public IDisplayConfigCallback {
+ public:
+ ClientCallback(ConfigCallback *cb) {
+ callback_ = cb;
+ }
+
+ private:
+ virtual Return<void> perform(uint32_t op_code, const ByteStream &input_params,
+ const HandleStream &input_handles);
+ void ParseNotifyCWBBufferDone(const ByteStream &input_params, const HandleStream &input_handles);
+ void ParseNotifyQsyncChange(const ByteStream &input_params);
+ void ParseNotifyIdleStatus(const ByteStream &input_params);
+ ConfigCallback *callback_ = nullptr;
+};
+
+class ClientImpl : public ClientInterface {
+ public:
+ int Init(std::string client_name, ConfigCallback *callback);
+ void DeInit();
+
+ virtual int IsDisplayConnected(DisplayType dpy, bool *connected);
+ virtual int SetDisplayStatus(DisplayType dpy, ExternalStatus status);
+ virtual int ConfigureDynRefreshRate(DynRefreshRateOp op, uint32_t refresh_rate);
+ virtual int GetConfigCount(DisplayType dpy, uint32_t *count);
+ virtual int GetActiveConfig(DisplayType dpy, uint32_t *config);
+ virtual int SetActiveConfig(DisplayType dpy, uint32_t config);
+ virtual int GetDisplayAttributes(uint32_t config_index, DisplayType dpy, Attributes *attributes);
+ virtual int SetPanelBrightness(uint32_t level);
+ virtual int GetPanelBrightness(uint32_t *level);
+ virtual int MinHdcpEncryptionLevelChanged(DisplayType dpy, uint32_t min_enc_level);
+ virtual int RefreshScreen();
+ virtual int ControlPartialUpdate(DisplayType dpy, bool enable);
+ virtual int ToggleScreenUpdate(bool on);
+ virtual int SetIdleTimeout(uint32_t value);
+ virtual int GetHDRCapabilities(DisplayType dpy, HDRCapsParams *caps);
+ virtual int SetCameraLaunchStatus(uint32_t on);
+ virtual int DisplayBWTransactionPending(bool *status);
+ virtual int SetDisplayAnimating(uint64_t display_id, bool animating);
+ virtual int ControlIdlePowerCollapse(bool enable, bool synchronous);
+ virtual int GetWriteBackCapabilities(bool *is_wb_ubwc_supported);
+ virtual int SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start, uint32_t h_end,
+ uint32_t v_start, uint32_t v_end, uint32_t factor_in,
+ uint32_t factor_out);
+ virtual int UpdateVSyncSourceOnPowerModeOff();
+ virtual int UpdateVSyncSourceOnPowerModeDoze();
+ virtual int SetPowerMode(uint32_t disp_id, PowerMode power_mode);
+ virtual int IsPowerModeOverrideSupported(uint32_t disp_id, bool *supported);
+ virtual int IsHDRSupported(uint32_t disp_id, bool *supported);
+ virtual int IsWCGSupported(uint32_t disp_id, bool *supported);
+ virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id);
+ virtual int GetDebugProperty(const std::string prop_name, std::string *value);
+ virtual int GetActiveBuiltinDisplayAttributes(Attributes *attr);
+ virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum, float max_lum);
+ virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin);
+ virtual int IsAsyncVDSCreationSupported(bool *supported);
+ virtual int CreateVirtualDisplay(uint32_t width, uint32_t height, int format);
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks);
+ virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk);
+ virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk);
+ virtual int SetCWBOutputBuffer(uint32_t disp_id, const Rect rect, bool post_processed,
+ const native_handle_t *buffer);
+ virtual int SetQsyncMode(uint32_t disp_id, QsyncMode mode);
+ virtual int IsSmartPanelConfig(uint32_t disp_id, uint32_t config_id, bool *is_smart);
+ virtual int IsRotatorSupportedFormat(int hal_format, bool ubwc, bool *supported);
+ virtual int ControlQsyncCallback(bool enable);
+ virtual int SendTUIEvent(DisplayType dpy, TUIEventType event_type);
+ virtual int GetDisplayHwId(uint32_t disp_id, uint32_t *display_hw_id);
+ virtual int GetSupportedDisplayRefreshRates(DisplayType dpy,
+ std::vector<uint32_t> *supported_refresh_rates);
+ virtual int IsRCSupported(uint32_t disp_id, bool *supported);
+ virtual int ControlIdleStatusCallback(bool enable);
+ virtual int IsSupportedConfigSwitch(uint32_t disp_id, uint32_t config, bool *supported);
+ virtual int GetDisplayType(uint64_t physical_disp_id, DisplayType *disp_type);
+ virtual int AllowIdleFallback();
+ virtual int DummyDisplayConfigAPI();
+
+ private:
+ android::sp<IDisplayConfig> display_config_ = nullptr;
+ uint64_t client_handle_ = 0;
+};
+
+} // namespace DisplayConfig
+
+#endif // __CLIENT_IMPL_H__