コード例 #1
0
ファイル: uterm_video.c プロジェクト: keszybz/kmscon
void uterm_video_sleep(struct uterm_video *video)
{
	if (!video || !video_is_awake(video))
		return;

	VIDEO_CB(video, NULL, UTERM_SLEEP);
	VIDEO_CALL(video->ops->sleep, 0, video);
}
コード例 #2
0
ファイル: uterm_video_dumb.c プロジェクト: microcai/kmscon
static void unbind_display(struct uterm_display *disp)
{
	if (!display_is_conn(disp))
		return;

	VIDEO_CB(disp->video, disp, UTERM_GONE);
	display_deactivate(disp);
	disp->video = NULL;
	disp->flags &= ~DISPLAY_AVAILABLE;
	uterm_display_unref(disp);
}
コード例 #3
0
ファイル: uterm_video.c プロジェクト: Acidburn0zzz/kmscon
SHL_EXPORT
void uterm_video_sleep(struct uterm_video *video)
{
	if (!video || !video_is_awake(video))
		return;

	log_debug("go asleep");

	VIDEO_CB(video, NULL, UTERM_SLEEP);
	video->flags &= ~VIDEO_AWAKE;
	VIDEO_CALL(video->ops->sleep, 0, video);
}
コード例 #4
0
ファイル: uterm_video.c プロジェクト: Acidburn0zzz/kmscon
SHL_EXPORT
void uterm_display_unbind(struct uterm_display *disp)
{
	if (!disp || !disp->video)
		return;

	VIDEO_CB(disp->video, disp, UTERM_GONE);
	uterm_display_deactivate(disp);
	disp->video = NULL;
	shl_dlist_unlink(&disp->list);
	ev_eloop_rm_timer(disp->vblank_timer);
	uterm_display_unref(disp);
}
コード例 #5
0
ファイル: uterm_video.c プロジェクト: keszybz/kmscon
int uterm_video_wake_up(struct uterm_video *video)
{
	int ret;

	if (!video)
		return -EINVAL;
	if (video_is_awake(video))
		return 0;

	ret = VIDEO_CALL(video->ops->wake_up, 0, video);
	if (ret)
		return ret;

	VIDEO_CB(video, NULL, UTERM_WAKE_UP);
	return 0;
}
コード例 #6
0
ファイル: uterm_video.c プロジェクト: Acidburn0zzz/kmscon
SHL_EXPORT
int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video)
{
	int ret;

	if (!disp || !video || disp->video)
		return -EINVAL;

	ret = ev_eloop_add_timer(video->eloop, disp->vblank_timer);
	if (ret)
		return ret;

	shl_dlist_link_tail(&video->displays, &disp->list);
	disp->video = video;
	uterm_display_ref(disp);
	VIDEO_CB(disp->video, disp, UTERM_NEW);

	return 0;
}
コード例 #7
0
ファイル: uterm_video_dumb.c プロジェクト: microcai/kmscon
static void bind_display(struct uterm_video *video, drmModeRes *res,
							drmModeConnector *conn)
{
	struct uterm_display *disp;
	struct uterm_mode *mode;
	int ret, i;

	ret = display_new(&disp, &dumb_display_ops);
	if (ret)
		return;

	for (i = 0; i < conn->count_modes; ++i) {
		ret = mode_new(&mode, &dumb_mode_ops);
		if (ret)
			continue;
		mode->dumb.info = conn->modes[i];
		mode->next = disp->modes;
		disp->modes = mode;

		/* TODO: more sophisticated default-mode selection */
		if (!disp->default_mode)
			disp->default_mode = mode;
	}

	if (!disp->modes) {
		log_warn("no valid mode for display found");
		uterm_display_unref(disp);
		return;
	}

	disp->video = video;
	disp->dumb.conn_id = conn->connector_id;
	disp->flags |= DISPLAY_AVAILABLE;
	disp->next = video->displays;
	video->displays = disp;
	disp->dpms = get_dpms(disp, conn);
	log_info("display %p DPMS is %s", disp,
			uterm_dpms_to_name(disp->dpms));
	VIDEO_CB(video, disp, UTERM_NEW);
}
コード例 #8
0
ファイル: uterm_video.c プロジェクト: Acidburn0zzz/kmscon
SHL_EXPORT
int uterm_video_wake_up(struct uterm_video *video)
{
	int ret;

	if (!video)
		return -EINVAL;
	if (video_is_awake(video))
		return 0;

	log_debug("wake up");

	ret = VIDEO_CALL(video->ops->wake_up, 0, video);
	if (ret) {
		video->flags &= ~VIDEO_AWAKE;
		return ret;
	}

	video->flags |= VIDEO_AWAKE;
	VIDEO_CB(video, NULL, UTERM_WAKE_UP);
	return 0;
}