Function get_disoutputs is added in order to provide display port information embedded on the machine.
Signed-off-by: Quanxian Wang <quanxian.w...@intel.com> Reviewed-by: Zhang, Xiong Y <xiong.y.zh...@intel.com> --- src/compositor-drm.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 154e15e..1f43071 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -2222,6 +2222,54 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector, } static void +get_disoutputs(struct weston_compositor *ec, + char *ret_str) +{ + struct drm_compositor *drm_ec = + container_of(ec, struct drm_compositor, base); + drmModeConnector *connector; + drmModeRes *resources; + char name[128]; + const char *type_name; + int i; + + if (!ret_str) + return; + memset(ret_str, 0x0, strlen(ret_str)); + + resources = drmModeGetResources(drm_ec->drm.fd); + if (!resources) { + weston_log("drmModeGetResources failed\n"); + return; + } + + /* Collect disconnected connects */ + for (i = 0; i < resources->count_connectors; i++) { + int connector_id = resources->connectors[i]; + + connector = drmModeGetConnector(drm_ec->drm.fd, connector_id); + if (connector == NULL) + continue; + + if (connector->connection != DRM_MODE_CONNECTED) { + type_name = + connector_type_names[connector->connector_type]; + if (connector->connector_type >= + ARRAY_LENGTH(connector_type_names)) + type_name = "UNKNOWN"; + + snprintf(name, 128, "%s%d disconnected.\n", + type_name, connector->connector_type_id); + strcat(ret_str, name); + + drmModeFreeConnector(connector); + } + } + + return; +} + +static void update_outputs(struct drm_compositor *ec, struct udev_device *drm_device) { drmModeConnector *connector; @@ -2652,6 +2700,22 @@ renderer_switch_binding(struct weston_seat *seat, uint32_t time, uint32_t key, switch_to_gl_renderer(c); } +static void +randr_init(struct weston_compositor *ec) +{ + /* Initialize randr */ + ec->randr = zalloc(sizeof *(ec->randr)); + if (!ec->randr) + return; + + ec->randr->get_disoutputs = get_disoutputs; + + if (weston_randr_init(ec->randr, ec) < 0) { + free(ec->randr); + weston_log("Failed to initialize randr interface.\n"); + } +} + static struct weston_compositor * drm_compositor_create(struct wl_display *display, struct drm_parameters *param, @@ -2769,6 +2833,9 @@ drm_compositor_create(struct wl_display *display, goto err_sprite; } + /* Initialize randr */ + randr_init(&ec->base); + loop = wl_display_get_event_loop(ec->base.wl_display); ec->drm_source = wl_event_loop_add_fd(loop, ec->drm.fd, -- 1.8.1.2 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel