blob: 191390771e561d37be2eb4e067f236cd5fdd6f61 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NX Graphics Subsystem &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/sphinx_collapse.css" />
<link rel="stylesheet" type="text/css" href="../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../_static/custom.css" />
<link rel="shortcut icon" href="../../_static/favicon.ico"/>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/design-tabs.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="NX Graphics Library (NXGL)" href="nxgl.html" />
<link rel="prev" title="NXFLAT" href="../nxflat.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../latest" selected="selected">latest</option>
<option value="../../../10.0.0" >10.0.0</option>
<option value="../../../10.0.1" >10.0.1</option>
<option value="../../../10.1.0" >10.1.0</option>
<option value="../../../10.2.0" >10.2.0</option>
<option value="../../../10.3.0" >10.3.0</option>
<option value="../../../11.0.0" >11.0.0</option>
<option value="../../../12.0.0" >12.0.0</option>
<option value="../../../12.1.0" >12.1.0</option>
<option value="../../../12.2.0" >12.2.0</option>
<option value="../../../12.2.1" >12.2.1</option>
<option value="../../../12.3.0" >12.3.0</option>
<option value="../../../12.4.0" >12.4.0</option>
<option value="../../../12.5.0" >12.5.0</option>
<option value="../../../12.5.1" >12.5.1</option>
<option value="../../../12.6.0" >12.6.0</option>
<option value="../../../12.7.0" >12.7.0</option>
<option value="../../../12.8.0" >12.8.0</option>
<option value="../../../12.9.0" >12.9.0</option>
<option value="../../../12.10.0" >12.10.0</option>
<option value="../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../binfmt.html">Binary Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../drivers/index.html">Device Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nxflat.html">NXFLAT</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">NX Graphics Subsystem</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a></li>
<li class="toctree-l3"><a class="reference internal" href="#organization">Organization</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#nx-graphics-library-nxgl">NX Graphics Library (<code class="docutils literal notranslate"><span class="pre">NXGL</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#nx-nxsu-and-nxmu">NX (<code class="docutils literal notranslate"><span class="pre">NXSU</span></code> and <code class="docutils literal notranslate"><span class="pre">NXMU</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#nx-tool-kit-nxtk">NX Tool Kit (<code class="docutils literal notranslate"><span class="pre">NXTK</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#nx-fonts-support-nxfonts">NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#nx-widgets-nxwidgets">NX Widgets (<code class="docutils literal notranslate"><span class="pre">NxWidgets</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#terminal-driver-nxterm">Terminal Driver (<code class="docutils literal notranslate"><span class="pre">NxTerm</span></code>)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#nx-header-files">NX Header Files</a><ul>
<li class="toctree-l4"><a class="reference internal" href="nxgl.html">NX Graphics Library (<code class="docutils literal notranslate"><span class="pre">NXGL</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nx.html">NX</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxtk.html">NX Tool Kit (<code class="docutils literal notranslate"><span class="pre">NXTK</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxfonts.html">NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxcursor.html">NX Cursor Support (<code class="docutils literal notranslate"><span class="pre">NXCURSOR</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxwm_threading.html">NxWM Threading</a></li>
<li class="toctree-l4"><a class="reference internal" href="framebuffer_char_driver.html">Framebuffer Character Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="sample.html">Sample Code</a></li>
<li class="toctree-l4"><a class="reference internal" href="appendix.html">Appendix</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../paging.html">On-Demand Paging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../audio/index.html">Audio Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mm/index.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../syscall.html">Syscall Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="../arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../wireless.html">Wireless Subsystem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../debugging/index.html">Debugging</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../standards/index.html">Standards</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../logos/index.html">NuttX Logos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../_tags/tagsindex.html">Tags</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">OS Components</a></li>
<li class="breadcrumb-item active">NX Graphics Subsystem</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/components/nxgraphics/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="nx-graphics-subsystem">
<span id="nxgraphics"></span><h1>NX Graphics Subsystem<a class="headerlink" href="#nx-graphics-subsystem" title="Permalink to this heading"></a></h1>
<p>This document describes the tiny graphics support included in NuttX. It
includes an overview description of that graphics support, detailed
descriptions of the NuttX graphics APIs, and discussion of code
organization, and OS configuration options.</p>
<figure class="align-center" id="id1">
<img alt="../../_images/NuttXScreenShot.jpg" src="../../_images/NuttXScreenShot.jpg" />
<figcaption>
<p><span class="caption-text"><strong>Figure 1</strong>. This screenshot shows the final frame for the NuttX example
at <code class="docutils literal notranslate"><span class="pre">apps/examples/nx</span></code> running on the simulated, Linux x86 platform with
simulated framebuffer output to an X window. This picture shows to framed window
with (blank) toolbars. Each window has displayed text as received from the
NX keyboard interface The second window has just been raised to the top of the display.</span><a class="headerlink" href="#id1" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<p>The objective of this development was to provide a tiny windowing system
in the spirit of X, but greatly scaled down and appropriate for most
resource-limited embedded environments. The current NX implementation
supports the general following, high-level features:</p>
<ul class="simple">
<li><p><strong>Virtual Vertical Graphics Space</strong>. Windows that reside in a
virtual, <em>vertical</em> space so that it makes sense to talk about one
window being on top of another and obscuring the window below it.</p></li>
<li><p><strong>Client/Server Model</strong>. A standard client server/model was adopted.
NX may be considered a server and other logic that presents the
windows are NX clients.</p></li>
<li><p><strong>Multi-User Support</strong>. NX includes <em>front-end</em> logic to support a
separate NX server thread that can serve multiple NX client threads.
The NX is a server thread/daemon the serializes graphics operations
from multiple clients.</p></li>
<li><p><strong>Minimal Graphics Toolset</strong>. The actual implementation of the
graphics operations is performed by common, <em>back-end</em> logic. This
back-end supports only a primitive set of graphic and rendering
operations.</p></li>
<li><p><strong>Device Interface</strong>. NX supports any graphics device either of two
device interfaces:</p>
<ul>
<li><p>Any device with random access video memory using the NuttX
framebuffer driver interface (see <code class="docutils literal notranslate"><span class="pre">include/nuttx/video/fb.h</span></code>).</p></li>
<li><p>Any LCD-like device than can accept raster line <em>runs</em> through a
parallel or serial interface (see <code class="docutils literal notranslate"><span class="pre">include/nuttx/lcd/lcd.h</span></code>). By
default, NX is configured to use the frame buffer driver unless
<code class="docutils literal notranslate"><span class="pre">CONFIG_NX_LCDDRIVER</span></code> is defined =y in your NuttX configuration
file.</p></li>
</ul>
</li>
<li><p><strong>Transparent to NX Client</strong>. The window client on “sees” the
sub-window that is operates in and does not need to be concerned with
the virtual, vertical space (other that to respond to <em>redraw</em>
requests from NX when needed).</p></li>
<li><p><strong>Framed Windows and Toolbars</strong>. NX also adds the capability to
support windows with frames and toolbars on top of the basic
windowing support. These are windows such as those shown in the
<a class="reference external" href="#screenshot">screenshot</a> above. These framed windows sub-divide
one one window into three relatively independent subwindows: A frame,
the contained window and an (optional) toolbar window.</p></li>
<li><p><strong>Mouse Support</strong>. NX provides support for a mouse or other X/Y
pointing devices. APIs are provided to allow external devices to give
X/Y position information and mouse button presses to NX. NX will then
provide the mouse input to the relevant window clients via callbacks.
Client windows only receive the mouse input callback if the mouse is
positioned over a visible portion of the client window; X/Y position
is provided to the client in the relative coordinate system of the
client window.</p></li>
<li><p><strong>Keyboard input</strong>. NX also supports keyboard/keypad devices. APIs
are provided to allow external devices to give keypad information to
NX. NX will then provide the mouse input to the top window on the
display (the window that has the <em>focus</em>) via a callback function.</p></li>
</ul>
</section>
<section id="organization">
<h2>Organization<a class="headerlink" href="#organization" title="Permalink to this heading"></a></h2>
<p>NX is organized into 6 (and perhaps someday 7 or 8) logical modules.
These logical modules also correspond to the directory organization.
That NuttX directory organization is discussed in <a class="reference external" href="#grapicsdirs">Appendix
B</a> of this document. The logic modules are discussed in
the following sub-paragraphs.</p>
<figure class="align-center">
<img alt="../../_images/NXOrganization.png" src="../../_images/NXOrganization.png" />
</figure>
<section id="nx-graphics-library-nxgl">
<h3>NX Graphics Library (<code class="docutils literal notranslate"><span class="pre">NXGL</span></code>)<a class="headerlink" href="#nx-graphics-library-nxgl" title="Permalink to this heading"></a></h3>
<p>NXGLIB is a standalone library that contains low-level graphics
utilities and direct framebuffer or LCD rendering logic. NX is built on
top NXGLIB.</p>
</section>
<section id="nx-nxsu-and-nxmu">
<h3>NX (<code class="docutils literal notranslate"><span class="pre">NXSU</span></code> and <code class="docutils literal notranslate"><span class="pre">NXMU</span></code>)<a class="headerlink" href="#nx-nxsu-and-nxmu" title="Permalink to this heading"></a></h3>
<p>NX is the tiny NuttX windowing system for raw windows (i.e., simple
regions of graphics memory). NX includes a small-footprint, multi-user
implementation (NXMU as described below). NX can be used without
NxWidgets and without NXTOOLKIT for raw window displays.</p>
<p><sup>1</sup>NXMU and NXSU are interchangeable other than (1) certain
start-up and initialization APIs (as described below), and (2) timing.
With NXSU, NX APIs execute immediately; with NXMU, NX APIs defer and
serialize the operations and, hence, introduce different timing and
potential race conditions that you would not experience with NXSU.</p>
<p><strong>NXNULL?</strong> At one time, I also envisioned a <em>NULL</em> front-end that did
not support windowing at all but, rather, simply provided the entire
framebuffer or LCD memory as one dumb window. This has the advantage
that the same NX APIs can be used on the one dumb window as for the
other NX windows. This would be in the NuttX spirit of scalability.</p>
<p>However, the same end result can be obtained by using the
<code class="docutils literal notranslate"><span class="pre">`nx_requestbkgd()</span></code> &lt;#nxrequestbkgd&gt;`__ API. It still may be possible
to reduce the footprint in this usage case by developing and even
thinner NXNULL front-end. That is a possible future development.</p>
</section>
<section id="nx-tool-kit-nxtk">
<h3>NX Tool Kit (<code class="docutils literal notranslate"><span class="pre">NXTK</span></code>)<a class="headerlink" href="#nx-tool-kit-nxtk" title="Permalink to this heading"></a></h3>
<p>NXTK is a s set of C graphics tools that provide higher-level window
drawing operations. This is the module where the framed windows and
toolbar logic is implemented. NXTK is built on top of NX and does not
depend on NxWidgets.</p>
</section>
<section id="nx-fonts-support-nxfonts">
<h3>NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)<a class="headerlink" href="#nx-fonts-support-nxfonts" title="Permalink to this heading"></a></h3>
<p>A set of C graphics tools for present (bitmap) font images. The font
implementation is at a very low level or graphics operation, comparable
to the logic in NXGLIB. NXFONTS does not depend on any NX module other
than some utilities and types from NXGLIB.</p>
</section>
<section id="nx-widgets-nxwidgets">
<h3>NX Widgets (<code class="docutils literal notranslate"><span class="pre">NxWidgets</span></code>)<a class="headerlink" href="#nx-widgets-nxwidgets" title="Permalink to this heading"></a></h3>
<p><a class="reference internal" href="../../applications/graphics/nxwidgets/index.html#nxwidgets"><span class="std std-ref">NxWidgets</span></a> is a higher level, C++, object-oriented
library for object-oriented access to graphical “widgets.” NxWidgets is
provided as a separate library in the <code class="docutils literal notranslate"><span class="pre">apps/</span></code> repository NxWidgets is
built on top of the core NuttX graphics subsystem, but is part of the
application space rather than part of the core OS graphics subsystems.</p>
</section>
<section id="terminal-driver-nxterm">
<h3>Terminal Driver (<code class="docutils literal notranslate"><span class="pre">NxTerm</span></code>)<a class="headerlink" href="#terminal-driver-nxterm" title="Permalink to this heading"></a></h3>
<p>NxTerm is a write-only character device (not shown) that is built on top
of an NX window. This character device can be used to provide <code class="docutils literal notranslate"><span class="pre">stdout</span></code>
and <code class="docutils literal notranslate"><span class="pre">stderr</span></code> and, hence, can provide the output side of NuttX console.
).</p>
</section>
</section>
<section id="nx-header-files">
<h2>NX Header Files<a class="headerlink" href="#nx-header-files" title="Permalink to this heading"></a></h2>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">include/nuttx/nx/nxglib.h</span></code></dt><dd><p>Describes the NXGLIB C interfaces</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">include/nuttx/nx/nx.h</span></code></dt><dd><p>Describes the NX C interfaces</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">include/nutt/nxtk.h</span></code></dt><dd><p>Describe the NXTOOLKIT C interfaces</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">include/nutt/nxfont.h</span></code></dt><dd><p>Describe sthe NXFONT C interfaces</p>
</dd>
</dl>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">User APIs</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="nxgl.html">NX Graphics Library (<code class="docutils literal notranslate"><span class="pre">NXGL</span></code>)</a><ul>
<li class="toctree-l2"><a class="reference internal" href="nxgl.html#nxgl-types">NXGL Types</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="nx.html">NX</a><ul>
<li class="toctree-l2"><a class="reference internal" href="nx.html#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="nx.html#pre-processor-definitions">Pre-Processor Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="nx.html#nx-types">NX Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="nx.html#starting-the-nx-server">Starting the NX Server</a></li>
<li class="toctree-l2"><a class="reference internal" href="nx.html#nx-server-callbacks">NX Server Callbacks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="nxtk.html">NX Tool Kit (<code class="docutils literal notranslate"><span class="pre">NXTK</span></code>)</a></li>
<li class="toctree-l1"><a class="reference internal" href="nxfonts.html">NX Fonts Support (<code class="docutils literal notranslate"><span class="pre">NXFONTS</span></code>)</a><ul>
<li class="toctree-l2"><a class="reference internal" href="nxfonts.html#nxfonts-types">NXFONTS types</a></li>
<li class="toctree-l2"><a class="reference internal" href="nxfonts.html#wide-font-support">Wide Font Support</a><ul>
<li class="toctree-l3"><a class="reference internal" href="nxfonts.html#adding-16-bit-font-support">Adding 16-Bit Font support</a><ul>
<li class="toctree-l4"><a class="reference internal" href="nxfonts.html#current-7-8-bit-font-implementation">Current 7/8-bit Font Implementation</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxfonts.html#adding-wide-fonts">Adding Wide Fonts</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="nxfonts.html#font-storage-issues">Font Storage Issues</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="nxcursor.html">NX Cursor Support (<code class="docutils literal notranslate"><span class="pre">NXCURSOR</span></code>)</a></li>
<li class="toctree-l1"><a class="reference internal" href="nxwm_threading.html">NxWM Threading</a></li>
<li class="toctree-l1"><a class="reference internal" href="framebuffer_char_driver.html">Framebuffer Character Driver</a><ul>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#nx-graphics">NX Graphics</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#figure-1">Figure 1</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#framebuffer-character-driver-details">Framebuffer Character Driver details</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#posix-interfaces">POSIX Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#ioctl-commands">IOCTL Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#mmap"><code class="docutils literal notranslate"><span class="pre">mmap()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#framebuffer-vs-lcd-graphics-drivers">Framebuffer vs. LCD Graphics Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#lcd-framebuffer-front-end">LCD Framebuffer Front-End</a></li>
<li class="toctree-l2"><a class="reference internal" href="framebuffer_char_driver.html#framebuffer-graphics-library">Framebuffer Graphics Library</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="sample.html">Sample Code</a></li>
<li class="toctree-l1"><a class="reference internal" href="appendix.html">Appendix</a><ul>
<li class="toctree-l2"><a class="reference internal" href="appendix.html#graphics-directory-structure"><code class="docutils literal notranslate"><span class="pre">graphics/</span></code> Directory Structure</a></li>
<li class="toctree-l2"><a class="reference internal" href="appendix.html#nx-configuration-options">NX Configuration Options</a><ul>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#general-configuration-settings">General Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxgl-configuration-settings">NXGL Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#configuration-settings">Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nx-server-configuration-settings">NX Server Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxtk-configuration-settings">NXTK Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxfonts-configuration-settings">NXFONTS Configuration Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxterm-configuration-settings">NxTerm Configuration Settings</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="appendix.html#installing-new-fonts">Installing New Fonts</a></li>
<li class="toctree-l2"><a class="reference internal" href="appendix.html#nx-test-coverage">NX Test Coverage</a><ul>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxglib-api-test-coverage">NXGLIB API Test Coverage</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nx-server-callbacks-test-coverage">NX Server Callbacks Test Coverage</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nx-api-test-coverage">NX API Test Coverage</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxtk-api-test-coverage">NXTK API Test Coverage</a></li>
<li class="toctree-l3"><a class="reference internal" href="appendix.html#nxfonts-api-test-coverage">NXFONTS API Test Coverage</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../nxflat.html" class="btn btn-neutral float-left" title="NXFLAT" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="nxgl.html" class="btn btn-neutral float-right" title="NX Graphics Library (NXGL)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>