1/* Copyright (c) 2015-2017, The Linux Foundataion. All rights reserved.
2*
3* Redistribution and use in source and binary forms, with or without
4* modification, are permitted provided that the following conditions are
5* met:
6*     * Redistributions of source code must retain the above copyright
7*       notice, this list of conditions and the following disclaimer.
8*     * Redistributions in binary form must reproduce the above
9*       copyright notice, this list of conditions and the following
10*       disclaimer in the documentation and/or other materials provided
11*       with the distribution.
12*     * Neither the name of The Linux Foundation nor the names of its
13*       contributors may be used to endorse or promote products derived
14*       from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*
28*/
29
30#ifndef __COLOR_MANAGER_H__
31#define __COLOR_MANAGER_H__
32
33#include <stdlib.h>
34#include <core/sdm_types.h>
35#include <utils/locker.h>
36#include <private/color_interface.h>
37#include <utils/sys.h>
38#include <utils/debug.h>
39#include "hw_interface.h"
40
41namespace sdm {
42
43/*
44 * ColorManager proxy to maintain necessary information to interact with underlying color service.
45 * Each display object has its own proxy.
46 */
47class ColorManagerProxy {
48 public:
49  static DisplayError Init(const HWResourceInfo &hw_res_info);
50  static void Deinit();
51
52  /* Create ColorManagerProxy for this display object, following things need to be happening
53   * 1. Instantiates concrete ColorInerface implementation.
54   * 2. Pass all display object specific informations into it.
55   * 3. Populate necessary resources.
56   * 4. Need get panel name for hw_panel_info_.
57   */
58  static ColorManagerProxy *CreateColorManagerProxy(DisplayType type, HWInterface *hw_intf,
59                                                    const HWDisplayAttributes &attribute,
60                                                    const HWPanelInfo &panel_info);
61
62  /* need reverse the effect of CreateColorManagerProxy. */
63  ~ColorManagerProxy();
64
65  DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
66                                    PPDisplayAPIPayload *out_payload,
67                                    PPPendingParams *pending_action);
68  DisplayError ApplyDefaultDisplayMode();
69  DisplayError ColorMgrGetNumOfModes(uint32_t *mode_cnt);
70  DisplayError ColorMgrGetModes(uint32_t *mode_cnt, SDEDisplayMode *modes);
71  DisplayError ColorMgrSetMode(int32_t color_mode_id);
72  DisplayError ColorMgrGetModeInfo(int32_t mode_id, AttrVal *query);
73  DisplayError ColorMgrSetColorTransform(uint32_t length, const double *trans_data);
74  DisplayError ColorMgrGetDefaultModeID(int32_t *mode_id);
75  bool NeedsPartialUpdateDisable();
76  DisplayError Commit();
77
78 protected:
79  ColorManagerProxy() {}
80  ColorManagerProxy(DisplayType type, HWInterface *intf, const HWDisplayAttributes &attr,
81                    const HWPanelInfo &info);
82
83 private:
84  static DynLib color_lib_;
85  static CreateColorInterface create_intf_;
86  static DestroyColorInterface destroy_intf_;
87  static HWResourceInfo hw_res_info_;
88
89  DisplayType device_type_;
90  PPHWAttributes pp_hw_attributes_;
91  HWInterface *hw_intf_;
92  ColorInterface *color_intf_;
93  PPFeaturesConfig pp_features_;
94};
95
96}  // namespace sdm
97
98#endif  // __COLOR_MANAGER_H__
99