From 86213dab21f29d3fa75d5f799f7fc2f5a04e6993 Mon Sep 17 00:00:00 2001 From: TaeminYeom Date: Thu, 29 Sep 2022 13:52:55 +0900 Subject: [PATCH] display: Add rotation angle interface rotation angle means "physical display" direction. Clients can rotate display or check current display angle. dbus method: dbus_getrotationangle path: "/Org/Tizen/System/DeviceD/Display" interace: "org.tizen.system.deviced.display" member: "GetRotationAngle" paremeter: "(i)", display index to get rotation angle. return: "(ii)", 0 on success, negative on error. enum display rotation angle to get. dbus_setrotationangle path: "/Org/Tizen/System/DeviceD/Display" interace: "org.tizen.system.deviced.display" member: "SetRotationAngle" paremeter: "(iii)", display index to set rotation angle. enum display rotation angle to set. enum display rotation direction. return: "(i)", 0 on success, negative on error. Change-Id: I792dd4d68034d511443c3c09c5b37bea220bce81 Signed-off-by: TaeminYeom --- plugins/iot-headless/display/core.c | 38 +++++++++++++++++++++++++++++++++++-- src/display/display-dbus.c | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/plugins/iot-headless/display/core.c b/plugins/iot-headless/display/core.c index fc642eb..288bb45 100644 --- a/plugins/iot-headless/display/core.c +++ b/plugins/iot-headless/display/core.c @@ -18,6 +18,7 @@ #include #include +#include #include static GVariant *dbus_lockstate(GDBusConnection *conn, @@ -34,9 +35,42 @@ static GVariant *dbus_unlockstate(GDBusConnection *conn, return g_variant_new("(i)", 0); } +static GVariant *dbus_getrotationangle(GDBusConnection *conn, + const gchar *sender, const gchar *path, const gchar *iface, const gchar *name, + GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data) +{ + int ret; + int display_index; + enum hal_device_display_rotation_angle angle; + + g_variant_get(param, "(i)", &display_index); + ret = hal_device_display_get_rotation_angle(display_index, &angle); + if (ret < 0) + angle = HAL_DEVICE_DISPLAY_ROTATION_ANGLE_UNKNOWN; + + return g_variant_new("(ii)", ret, angle); +} + +static GVariant *dbus_setrotationangle(GDBusConnection *conn, + const gchar *sender, const gchar *path, const gchar *iface, const gchar *name, + GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data) +{ + int ret; + int display_index; + enum hal_device_display_rotation_angle angle; + enum hal_device_display_rotation_direction direction; + + g_variant_get(param, "(iii)", &display_index, &angle, &direction); + ret = hal_device_display_set_rotation_angle(display_index, angle, direction); + + return g_variant_new("(i)", ret); +} + static const dbus_method_s dbus_methods[] = { - { "lockstate", "sssi", "i", dbus_lockstate }, - { "unlockstate", "ss", "i", dbus_unlockstate }, + { "lockstate", "sssi", "i", dbus_lockstate }, + { "unlockstate", "ss", "i", dbus_unlockstate }, + { "GetRotationAngle", "i", "ii", dbus_getrotationangle }, + { "SetRotationAngle", "iii", "i", dbus_setrotationangle } }; static const dbus_interface_u dbus_interface = { diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c index 197260a..9d97619 100644 --- a/src/display/display-dbus.c +++ b/src/display/display-dbus.c @@ -1245,6 +1245,37 @@ static GVariant *dbus_getwhitebalance(GDBusConnection *conn, return g_variant_new("(i)", ret); } +static GVariant *dbus_getrotationangle(GDBusConnection *conn, + const gchar *sender, const gchar *path, const gchar *iface, const gchar *name, + GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data) +{ + int ret; + int display_index; + enum hal_device_display_rotation_angle angle; + + g_variant_get(param, "(i)", &display_index); + ret = hal_device_display_get_rotation_angle(display_index, &angle); + if (ret < 0) + angle = HAL_DEVICE_DISPLAY_ROTATION_ANGLE_UNKNOWN; + + return g_variant_new("(ii)", ret, angle); +} + +static GVariant *dbus_setrotationangle(GDBusConnection *conn, + const gchar *sender, const gchar *path, const gchar *iface, const gchar *name, + GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data) +{ + int ret = 0; + int display_index; + enum hal_device_display_rotation_angle angle; + enum hal_device_display_rotation_direction direction; + + g_variant_get(param, "(iii)", &display_index, &angle, &direction); + ret = hal_device_display_set_rotation_angle(display_index, angle, direction); + + return g_variant_new("(i)", ret); +} + static const dbus_method_s dbus_methods[] = { { "start", NULL, NULL, dbus_start }, { "stop", NULL, NULL, dbus_stop }, @@ -1284,6 +1315,8 @@ static const dbus_method_s dbus_methods[] = { { "GetBrightnessInfo", NULL, "ii", dbus_getbrightnessinfo}, { "SetWhiteBalance", "ii", "i", dbus_setwhitebalance}, { "GetWhiteBalance", "i", "i", dbus_getwhitebalance}, + { "GetRotationAngle", "i", "ii", dbus_getrotationangle}, + { "SetRotationAngle", "iii", "i", dbus_setrotationangle} /* Add methods here */ }; -- 2.7.4