summaryrefslogtreecommitdiffstats
path: root/impl/SDM.h
blob: f6db03990d4d7ef6742b5ae3337a5b1043eb976c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef CYNGN_LIVEDISPLAYSDM_H
#define CYNGN_LIVEDISPLAYSDM_H

#include <LiveDisplayBackend.h>

#define SDM_DISP_LIB "libsdm-disp-vndapis.so"
#define SDM_DISP_LEGACY_LIB "libsdm-disp-apis.so"

#define DPPS_BUF_SIZE 64

#define FOSS_SUPPORTED "foss:support"
#define FOSS_ON "foss:on"
#define FOSS_OFF "foss:off"
#define FOSS_STATUS "foss:status"

// For use when only sysfs modes are available
#define STANDARD_NODE_ID 600

#define SRGB_NODE "/sys/class/graphics/fb0/srgb"
#define SRGB_NODE_ID 601

#define DCI_P3_NODE "/sys/class/graphics/fb0/dci_p3"
#define DCI_P3_NODE_ID 602

#define PRIV_MODE_FLAG_SDM 1
#define PRIV_MODE_FLAG_SYSFS 2

namespace android {

struct hsic_data {
    int32_t hue;
    float saturation;
    float intensity;
    float contrast;
    float saturationThreshold;
};

struct hsic_config {
    uint32_t unused;
    hsic_data data;
};

struct hsic_int_range {
    int32_t max;
    int32_t min;
    uint32_t step;
};

struct hsic_float_range {
    float max;
    float min;
    float step;
};

struct hsic_ranges {
    uint32_t unused;
    struct hsic_int_range hue;
    struct hsic_float_range saturation;
    struct hsic_float_range intensity;
    struct hsic_float_range contrast;
    struct hsic_float_range saturationThreshold;
};

class SDM : public LiveDisplayBackend {
  public:
    virtual status_t initialize();
    virtual status_t deinitialize();
    virtual bool hasFeature(Feature feature);

    virtual status_t setAdaptiveBacklightEnabled(bool enabled);
    virtual bool isAdaptiveBacklightEnabled();

    virtual status_t setOutdoorModeEnabled(bool /* enabled */) {
        return NO_INIT;
    }
    virtual bool isOutdoorModeEnabled() {
        return false;
    }

    virtual status_t getColorBalanceRange(Range& range);
    virtual status_t setColorBalance(int32_t balance);
    virtual int32_t getColorBalance();

    virtual status_t getDisplayModes(List<sp<DisplayMode>>& profiles);
    virtual status_t setDisplayMode(int32_t modeID, bool makeDefault);
    virtual sp<DisplayMode> getCurrentDisplayMode();
    virtual sp<DisplayMode> getDefaultDisplayMode();

    virtual status_t getPictureAdjustmentRanges(HSICRanges& ranges);
    virtual status_t getPictureAdjustment(HSIC& hsic);
    virtual status_t getDefaultPictureAdjustment(HSIC& hsic);
    virtual status_t setPictureAdjustment(HSIC hsic);

    virtual ~SDM();

  private:
    status_t loadVendorLibrary();

    sp<DisplayMode> getLocalSRGBMode();
    sp<DisplayMode> getLocalDCIP3Mode();
    sp<DisplayMode> getDisplayModeById(int32_t id);
    status_t setModeState(sp<DisplayMode> mode, bool state);
    status_t saveInitialDisplayMode();
    uint32_t getNumDisplayModes();
    uint32_t getNumSDMDisplayModes();

    int64_t mHandle;
    bool mCachedFOSSStatus;
    int32_t mActiveModeId;

    HSIC mDefaultPictureAdjustment;

    void* mLibHandle;

    int32_t (*disp_api_init)(int64_t*, uint32_t);
    int32_t (*disp_api_deinit)(int64_t, uint32_t);
    int32_t (*disp_api_get_global_color_balance_range)(int64_t, uint32_t, void*);
    int32_t (*disp_api_set_global_color_balance)(int64_t, uint32_t, int32_t, uint32_t);
    int32_t (*disp_api_get_global_color_balance)(int64_t, uint32_t, int32_t*, uint32_t*);
    int32_t (*disp_api_get_num_display_modes)(int64_t, uint32_t, int32_t, int32_t*, uint32_t*);
    int32_t (*disp_api_get_display_modes)(int64_t, uint32_t, int32_t, void*, int32_t, uint32_t*);
    int32_t (*disp_api_get_active_display_mode)(int64_t, uint32_t, int32_t*, uint32_t*, uint32_t*);
    int32_t (*disp_api_set_active_display_mode)(int64_t, uint32_t, int32_t, uint32_t);
    int32_t (*disp_api_set_default_display_mode)(int64_t, uint32_t, int32_t, uint32_t);
    int32_t (*disp_api_get_default_display_mode)(int64_t, uint32_t, int32_t*, uint32_t*);
    int32_t (*disp_api_get_global_pa_range)(int64_t, uint32_t, void*);
    int32_t (*disp_api_get_global_pa_config)(int64_t, uint32_t, uint32_t*, void*);
    int32_t (*disp_api_set_global_pa_config)(int64_t, uint32_t, uint32_t, void*);
    int32_t (*disp_api_get_feature_version)(int64_t, uint32_t, void*, uint32_t*);
};
};

#endif