display: Add rotation angle interface 22/282722/11 accepted/tizen/unified/20221226.165753
authorTaeminYeom <taemin.yeom@samsung.com>
Thu, 29 Sep 2022 04:52:55 +0000 (13:52 +0900)
committerTaeminYeom <taemin.yeom@samsung.com>
Thu, 22 Dec 2022 13:04:46 +0000 (22:04 +0900)
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 <taemin.yeom@samsung.com>
plugins/iot-headless/display/core.c
src/display/display-dbus.c

index fc642eb..288bb45 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <shared/common.h>
 #include <shared/devices.h>
+#include <hal/device/hal-display.h>
 #include <libsyscommon/libgdbus.h>
 
 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 = {
index 197260a..9d97619 100644 (file)
@@ -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 */
 };