/* * \brief Connection to frame-buffer service * \author Norman Feske * \date 2008-08-22 */ /* * Copyright (C) 2008-2012 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #ifndef _INCLUDE__FRAMEBUFFER_SESSION__CONNECTION_H_ #define _INCLUDE__FRAMEBUFFER_SESSION__CONNECTION_H_ #include #include #include namespace Framebuffer { class Connection : public Genode::Connection, public Session_client { private: /** * Create session and return typed session capability */ Session_capability _connect(unsigned width, unsigned height, Mode::Format format) { using namespace Genode; enum { ARGBUF_SIZE = 128 }; char argbuf[ARGBUF_SIZE]; /* donate ram quota for storing server-side meta data */ strncpy(argbuf, "ram_quota=8K", sizeof(argbuf)); /* set optional session-constructor arguments */ if (width) Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_width", width); if (height) Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_height", height); if (format != Mode::INVALID) Arg_string::set_arg(argbuf, sizeof(argbuf), "fb_format", format); return session(argbuf); } public: /** * Constructor * * \param width desired frame-buffer width * \param height desired frame-buffer height * \param mode desired pixel format * * The specified values are not enforced. After creating the * session, you should validate the actual frame-buffer attributes * by calling the 'info' function of the frame-buffer interface. */ Connection(unsigned width = 0, unsigned height = 0, Mode::Format format = Mode::INVALID) : Genode::Connection(_connect(width, height, format)), Session_client(cap()) { } }; } #endif /* _INCLUDE__FRAMEBUFFER_SESSION__CONNECTION_H_ */