Home | History | Annotate | Download | only in core
      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 
     41 namespace 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  */
     47 class 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