sdm: Align qdutils display id indexes to hwcomposer_defs.h.
- Add tertiary display id definition.
- Check for valid display object while processing binder calls.
Change-Id: I8a1fbf035d717bdd49fc3b325643f80034bbe491
CRs-Fixed: 907009
diff --git a/libqdutils/display_config.h b/libqdutils/display_config.h
index 8e3fa78..101e230 100644
--- a/libqdutils/display_config.h
+++ b/libqdutils/display_config.h
@@ -49,6 +49,7 @@
enum {
DISPLAY_PRIMARY = 0,
DISPLAY_EXTERNAL,
+ DISPLAY_TERTIARY,
DISPLAY_VIRTUAL,
};
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 98444e1..1a65735 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -559,8 +559,9 @@
case qService::IQService::SET_DISPLAY_MODE:
status = SetDisplayMode(input_parcel);
break;
+
case qService::IQService::SET_SECONDARY_DISPLAY_STATUS:
- status = SetSecondaryDisplayStatus(input_parcel);
+ status = SetSecondaryDisplayStatus(input_parcel, output_parcel);
break;
case qService::IQService::CONFIGURE_DYN_REFRESH_RATE:
@@ -803,17 +804,28 @@
return error;
}
-android::status_t HWCSession::SetSecondaryDisplayStatus(const android::Parcel *input_parcel) {
+android::status_t HWCSession::SetSecondaryDisplayStatus(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int ret = -EINVAL;
+
uint32_t display_id = UINT32(input_parcel->readInt32());
uint32_t display_status = UINT32(input_parcel->readInt32());
- DLOGI("Display %d Status %d", display_id, display_status);
- if (display_id < HWC_DISPLAY_EXTERNAL || display_id > HWC_DISPLAY_VIRTUAL) {
- DLOGW("Not supported for display %d", display_id);
- return -EINVAL;
+ DLOGI("Display = %d, Status = %d", display_id, display_status);
+
+ if (display_id >= HWC_NUM_DISPLAY_TYPES) {
+ DLOGE("Invalid display_id");
+ } else if (display_id == HWC_DISPLAY_PRIMARY) {
+ DLOGE("Not supported for this display");
+ } else if (!hwc_display_[display_id]) {
+ DLOGW("Display is not connected");
+ } else {
+ ret = hwc_display_[display_id]->SetDisplayStatus(display_status);
}
- return hwc_display_[display_id]->SetDisplayStatus(display_status);
+ output_parcel->writeInt32(ret);
+
+ return ret;
}
android::status_t HWCSession::ConfigureRefreshRate(const android::Parcel *input_parcel) {
@@ -1025,10 +1037,13 @@
uint32_t display_id = UINT32(input_parcel->readInt32());
DLOGI("Display %d", display_id);
- if (display_id != HWC_DISPLAY_EXTERNAL) {
- DLOGW("Not supported for display %d", display_id);
+
+ if (display_id >= HWC_NUM_DISPLAY_TYPES) {
+ DLOGE("Invalid display_id");
+ } else if (display_id != HWC_DISPLAY_EXTERNAL) {
+ DLOGE("Not supported for display");
} else if (!hwc_display_[display_id]) {
- DLOGE("Display %d is not connected", display_id);
+ DLOGW("Display is not connected");
} else {
ret = hwc_display_[display_id]->OnMinHdcpEncryptionLevelChange();
}
diff --git a/sdm/libs/hwc/hwc_session.h b/sdm/libs/hwc/hwc_session.h
index 22574dc..8fca8e3 100644
--- a/sdm/libs/hwc/hwc_session.h
+++ b/sdm/libs/hwc/hwc_session.h
@@ -90,7 +90,8 @@
void SetFrameDumpConfig(const android::Parcel *input_parcel);
android::status_t SetMaxMixerStages(const android::Parcel *input_parcel);
android::status_t SetDisplayMode(const android::Parcel *input_parcel);
- android::status_t SetSecondaryDisplayStatus(const android::Parcel *input_parcel);
+ android::status_t SetSecondaryDisplayStatus(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
android::status_t ToggleScreenUpdates(const android::Parcel *input_parcel,
android::Parcel *output_parcel);
android::status_t ConfigureRefreshRate(const android::Parcel *input_parcel);