summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/iot-headless/display/core.c38
-rw-r--r--src/display/display-dbus.c33
2 files changed, 69 insertions, 2 deletions
diff --git a/plugins/iot-headless/display/core.c b/plugins/iot-headless/display/core.c
index fc642eb6..288bb453 100644
--- a/plugins/iot-headless/display/core.c
+++ b/plugins/iot-headless/display/core.c
@@ -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 = {
diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c
index 197260ae..9d97619d 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 */
};