diff options
-rw-r--r-- | plugins/iot-headless/display/core.c | 38 | ||||
-rw-r--r-- | 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 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 */ }; |