| <html> |
| <head> |
| <title>NX Graphics Subsystem</title> |
| <meta name="author" content="Gregory Nutt"> |
| </head> |
| |
| <body background="backgd.gif"> |
| <hr><hr> |
| <table width ="100%"> |
| <tr align="center" bgcolor="#e4e4e4"> |
| <td> |
| <h1><big><font color="#3c34ec"> |
| <i>NX Graphics Subsystem</i> |
| </font></big></h1> |
| <p>Last Updated: July 27, 2010</p> |
| </td> |
| </tr> |
| </table> |
| <hr><hr> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>Table of Contents</h1> |
| </td> |
| </tr> |
| </table> |
| |
| <table width="100%"> |
| <tr> |
| <td align="left" valign="top"> |
| <p> |
| <big><b>1.0</b> <a href="#Introduction">Introduction</a></big> |
| </p> |
| <ul> |
| <p> |
| <i><b>1.1</b> <a href="#Overview">Overview</a><br></i> |
| <i><b>1.2</b> <a href="#Objectives">Objectives</a></i><br> |
| <i><b>1.3</b> <a href="#Organization">Organization</a></i> |
| </p> |
| <p> |
| <ul> |
| <i>1.3.1 <a href="#nxgl1">NX Graphics Library (<code>NXGL</code>)</a></i><br> |
| <i>1.3.2 <a href="#nx1">NX (NXSU and NXMU)</a></i><br> |
| <i>1.3.3 <a href="#nxtk1">NX Tool Kit (<code>NXTK</code>)</a></i><br> |
| <i>1.3.4 <a href="#nxfonts1">NX Fonts Support (<code>NXFONTS</code>)</a></i><br> |
| <i>1.3.5 <a href="#nxwidgets1">NX Widgets (<code>NXWIDGETS</code>)</a></i> |
| </ul> |
| </p> |
| </ul> |
| <p> |
| <big><b>2.0</b> <a href="#nxapis">NX User APIs</a></big> |
| </p> |
| <ul> |
| <p> |
| <i><b>2.1</b> <a href="#nxheaders">NX Header Files</a></i><br> |
| <i><b>2.2</b> <a href="#nxgl2">NX Graphics Library (<code>NXGL</code>)</a></i> |
| </p> |
| <p> |
| <ul> |
| <i>2.2.1 <a href="#nxgltypes">NXGL Types</a></i><br> |
| <i>2.2.1 <a href="#nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></i><br> |
| <i>2.2.2 <a href="#nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></i><br> |
| <i>2.2.3 <a href="#nxglrectcopy"><code>nxgl_rectcopy()</code></a></i><br> |
| <i>2.2.4 <a href="#nxglrectoffset"><code>nxgl_rectoffset()</code></a></i><br> |
| <i>2.2.5 <a href="#nxglvectoradd"><code>nxgl_vectoradd()</code></a></i><br> |
| <i>2.2.6 <a href="#nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></i><br> |
| <i>2.2.7 <a href="#nxglrectintersect"><code>nxgl_rectintersect()</code></a></i><br> |
| <i>2.2.8 <a href="#nxglrectunion"><code>nxgl_rectunion()</code></a></i><br> |
| <i>2.2.9 <a href="#nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></i><br> |
| <i>2.2.10 <a href="#nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></i><br> |
| <i>2.2.11 <a href="#nxglrectinside"><code>nxgl_rectinside()</code></a></i><br> |
| <i>2.2.12 <a href="#nxglrectsize"><code>nxgl_rectsize()</code></a></i><br> |
| <i>2.2.13 <a href="#nxglnullrect"><code>nxgl_nullrect()</code></a></i><br> |
| <i>2.2.14 <a href="#nxglrunoffset"><code>nxgl_runoffset()</code></a></i><br> |
| <i>2.2.15 <a href="#nxglruncopy"><code>nxgl_runcopy()</code></a></i><br> |
| <i>2.2.16 <a href="#nxgltrapoffset"><code>nxgl_trapoffset()</code></a></i><br> |
| <i>2.2.17 <a href="#nxgltrapcopy"><code>nxgl_trapcopy()</code></a></i><br> |
| <i>2.2.18 <a href="#nxglcolorcopy"><code>nxgl_colorcopy</code></a></i> |
| </ul> |
| </p> |
| <p> |
| <i><b>2.3</b> <a href="#nx2">NX</a></i> |
| </p> |
| <p> |
| <ul> |
| <i>2.3.1 <a href="#nxppdefs">Pre-Processor Definitions</a></i><br> |
| <i>2.3.2 <a href="#nxtypes">NX Types</a></i><br> |
| <i>2.3.3 <a href="#nxtypes">NX Server Callbacks</a></i> |
| <p> |
| <ul> |
| <i>2.3.3.1 <a href="#nxcbredraw"><code>redraw()</code></a></i><br> |
| <i>2.3.3.2 <a href="#nxcbposition"><code>position()</code></a></i><br> |
| <i>2.3.3.3 <a href="#nxcbmousein"><code>mousein()</code></a></i><br> |
| <i>2.3.3.4 <a href="#nxcbkbdin"><code>kbdin()</code></a></i> |
| </ul> |
| <p> |
| <i>2.3.4 <a href="#nxruninstance"><code>nx_runinstance()</code> (and <code>nx_run()<code> macro)</a></i><br> |
| <i>2.3.5 <a href="#nxconnectinstance"><code>nx_connectinstance()</code> (and <code>nx_connect()</code> macro)</a></i><br> |
| <i>2.3.6 <a href="#nxopen"><code>nx_open()</code></a></i><br> |
| <i>2.3.7 <a href="#nxdisconnect"><code>nx_disconnect()</code></a></i><br> |
| <i>2.3.8 <a href="#nxclose"><code>nx_close()</code></a></i><br> |
| <i>2.3.9 <a href="#nxeventhandler"><code>nx_eventhandler()</code></a></i><br> |
| <i>2.3.10 <a href="#nxeventnotify"><code>nx_eventnotify()</code></a></i><br> |
| <i>2.3.11 <a href="#nxopenwindow"><code>nx_openwindow()</code></a></i><br> |
| <i>2.3.12 <a href="#nxclosewindow"><code>nx_closewindow()</code></a></i><br> |
| <i>2.3.13 <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a></i><br> |
| <i>2.3.14 <a href="#nxreleasebkgd"><code>nx_releasebkgd()</code></a></i><br> |
| <i>2.3.15 <a href="#nxgetposition"><code>nx_getposition()</code></a></i><br> |
| <i>2.3.16 <a href="#nxsetposition"><code>nx_setposition()</code></a></i><br> |
| <i>2.3.17 <a href="#nxsetsize"><code>nx_setsize()</code></a></i><br> |
| <i>2.3.18 <a href="#nxraise"><code>nx_raise()</code></a></i><br> |
| <i>2.3.19 <a href="#nxlower"><code>nx_lower()</code></a></i><br> |
| <i>2.3.20 <a href="#nxfill"><code>nx_fill()</code></a></i><br> |
| <i>2.3.21 <a href="#nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></i><br> |
| <i>2.3.22 <a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></i><br> |
| <i>2.3.23 <a href="#nxmove"><code>nx_move()</code></a></i><br> |
| <i>2.3.24 <a href="#nxbitmap"><code>nx_bitmap()</code></a></i><br> |
| <i>2.3.25 <a href="#nxkbdin"><code>nx_kbdin()</code></a></i><br> |
| <i>2.3.26 <a href="#nxmousein"><code>nx_mousein()</code></a></i><br> |
| </ul> |
| </p> |
| </td> |
| <td align="left" valign="top"> |
| <p> |
| <i><b>2.4</b> <a href="#nxtk2">NX Tool Kit (<code>NXTK</code>)</a></i> |
| </p> |
| <p> |
| <ul> |
| <i>2.4.1 <a href="#nxtktypes"><code>NXTK Types()</code></a></i><br> |
| <i>2.4.2 <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a></i><br> |
| <i>2.4.3 <a href="#nxtkclosewindow"><code>nxtk_closewindow()</code></a></i><br> |
| <i>2.4.4 <a href="#nxtkgetposition"><code>nxtk_getposition()</code></a></i><br> |
| <i>2.4.5 <a href="#nxtksetposition"><code>nxtk_setposition()</code></a></i><br> |
| <i>2.4.6 <a href="#nxtksetsize"><code>nxtk_setsize()</code></a></i><br> |
| <i>2.4.7 <a href="#nxtkraise"><code>nxtk_raise()</code></a></i><br> |
| <i>2.4.8 <a href="#nxtklower"><code>nxtk_lower()</code></a></i><br> |
| <i>2.4.9 <a href="#nxtkfillwindow"><code>nxtk_fillwindow()</code></a></i><br> |
| <i>2.4.10 <a href="#nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></i><br> |
| <i>2.4.11 <a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></i><br> |
| <i>2.4.12 <a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></i><br> |
| <i>2.4.13 <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></i><br> |
| <i>2.4.14 <a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></i><br> |
| <i>2.4.15 <a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></i><br> |
| <i>2.4.16 <a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></i><br> |
| <i>2.4.17 <a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></i><br> |
| <i>2.4.18 <a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></i> |
| </ul> |
| </p> |
| <p> |
| <i><b>2.5</b> <a href="#nxfonts2">NX Fonts Support (<code>NXFONTS</code>)</a></i> |
| </p> |
| <p> |
| <ul> |
| <i>2.5.1 <a href="#nxfontstypes"><code>NXFONTS Types()</code></a></i><br> |
| <i>2.5.2 <a href="#nxfgetfontset"><code>nxf_getfontset()</code></a></i><br> |
| <i>2.5.3 <a href="#nxfgetbitmap"><code>nxf_getbitmap()</code></a></i><br> |
| <i>2.5.4 <a href="#nxfconvertbpp"><code>nxf_convert_*bpp()</code></a></i> |
| </ul> |
| </p> |
| <p> |
| <i><b>2.6</b> <a href="#samplecode">Sample Code</a></i> |
| </p> |
| </ul> |
| <p> |
| <big><b>Appendix A</b> <a href="#grapicsdirs"><code>graphics/</code> Directory Structure</a></big><br> |
| <big><b>Appendix B</b> <a href="#nxconfigs">NX Configuration Options</a></big> |
| </p> |
| <p> |
| <ul> |
| <i><b>B.1</b> <a href="#nxgenconfig">General Configuration Settings</a></i><br> |
| <i><b>B.2</b> <a href="#nxglconfig">NXGL Configuration Settings</a></i><br> |
| <i><b>B.3</b> <a href="#nxconfig">NX Configuration Settings</a></i><br> |
| <i><b>B.4</b> <a href="#nxmuconfig">NX Multi-User (Only) Configuration Settings</a></i><br> |
| <i><b>B.5</b> <a href="#nxtkconfig">NXTK Configuration Settings</a></i><br> |
| <i><b>B.6</b> <a href="#nxfpmtsconfig">NXFONTS Configuration Settings</a></i> |
| </ul> |
| </p> |
| <p> |
| <big><b>Appendix C</b> <a href="#testcoverage">NX Test Coverage</a></big> |
| </p> |
| <ul> |
| <i><b>Table C.1:</b> <a href="#nxglibcoverage">NXGLIB API Test Coverage</a></i><br> |
| <i><b>Table C.2:</b> <a href="#nxcbcoverage">NX Server Callbacks Test Coverage</a></i><br> |
| <i><b>Table C.3:</b> <a href="#nxcoverage">NX API Test Coverage</a></i><br> |
| <i><b>Table C.4:</b> <a href="#nxtkcoverage">NXTK API Test Coverage</a></i><br> |
| <i><b>Table C.5:</b> <a href="#nxfontscoverage">NXFONTS API Test Coverage</a></i><br> |
| </ul> |
| </td> |
| </tr> |
| </table> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>1.0 <a name="Introduction">Introduction</a></h1> |
| </td> |
| </tr> |
| </table> |
| |
| <h2>1.1 <a name="Overview">Overview</a></h2> |
| <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> |
| |
| <center><table width="480"> |
| <tr> |
| <td><a name="screenshot"><img src="NuttXScreenShot.jpg"></a></td> |
| </tr> |
| <tr> |
| <td><small>Figure 1. |
| This scren shot shows the final frame for the NuttX example at <code>examples/nx</code> |
| running on the simulated, Linux x86 platform with simulated framebuffer output to |
| an X window. |
| This picture shows to framed windows 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. |
| </small> |
| </tr> |
| </table></center> |
| |
| |
| <h2>1.2 <a name="Objectives">Objectives</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> |
| <li><b>Virtual Vertical Graphics Space</b>. |
| Windows that reside in a virtual, <i>vertical</i> space so that it makes |
| sense to talk about one window being on top of another and obcuring the |
| window below it. |
| </li> |
| <li><b>Client/Server Model</b>. |
| A standard client server/model was adopted. NX may be considered a server |
| and other logic that presents the windows are NX clients. |
| </li> |
| <li><b>Single- and Multi-User Support</b>. |
| NX includes <i>front-end</i> logic to either a simple single-thread/single-user |
| architecture or a separate NX server thread that can serve multiple NX client threads. |
| In the single-user case, the NX <i>server</i> is simply a set of library |
| calls; in the multi-user case, NX is a server thread/daemon the serializes |
| graphics operations from multiple clients. |
| Other some unique start-up/connection logic, the APIs supported by the single-user |
| and multi-user front-ends are identical. |
| Providing both front-ends is consistent with the NuttX commitment to scalability. |
| </li> |
| <li><b>Minimal Graphics Toolset</b>. |
| The actual implementation of the graphics operations is performed by common, |
| <i>back-end</i> logic. This back-end supports only a primitive set of graphic |
| and rendering operations. |
| </li> |
| <li><b>Device Interface</b>. |
| NX supports any graphics device either of two device interfaces: |
| <ul> |
| <li> |
| Any device with random accesss video memory using the NuttX framebuffer driver interface |
| (see <code>include/nuttx/fb.h</code>). |
| </li> |
| <li> |
| Any LCD-like device than can accept raster line <i>runs</i> through a parallel or serial interface |
| (see <code>include/nuttx/lcd/lcd.h</code>). |
| By default, NX is configured to use the frame buffer driver unless <code>CONFIG_NX_LCDDRIVER</code> is defined =y in your NuttX configuration file. |
| </li> |
| </ul> |
| </li> |
| <li><b>Transparent to NX Client</b>. |
| 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 <i>redraw</i> requests from NX when needed). |
| </li> |
| <li><b>Framed Windows and Toolbars</b>. |
| 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 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. |
| </li> |
| <li><b>Mouse Support</b>. |
| 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. |
| </li> |
| <li><b>Keyboard input</b>. |
| 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 <i>focus</i>) via a callback function. |
| </li> |
| </ul> |
| |
| <h2>1.3 <a name="Organization">Organization</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 href="#grapicsdirs">Appendix B</a> of this document. |
| The logic modules are discussed in the following sub-paragraphs. |
| </p> |
| |
| <p> |
| <center><img src="NXOrganization.gif" width="60%"></center> |
| </p> |
| |
| <h3>1.3.1 <a name="nxgl1">NX Graphics Library (<code>NXGL</code>)</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> |
| |
| <h3>1.3.2 <a name="nx1">NX (<code>NXSU</code> and <code>NXMU</code>)</a></h3> |
| |
| <p> |
| NX is the tiny NuttX windowing system for raw windows (i.e., simple regions of |
| graphics memory). |
| NX includes both a small-footprint, single user implementaton (NXSU) and a somewhat |
| larger multi-user implentation (NXMU as described below). |
| Both conform to the same APIs as defined in <code>include/nuttx/nx.h</code> and, hence, |
| are interchangable<sup>1</sup>. |
| NX can be used without NXWIDGETS and without NXTOOLKIT for raw window displays. |
| </p> |
| |
| <p> |
| <sup>1</sup><small>NXMU and NXSU are interchangeable other than (1) certain start-up |
| and intialization 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.</small> |
| </p> |
| |
| <p><b>NXNULL?</b> |
| At one time, I also envisoned a <i>NULL</i> 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 |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> 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> |
| |
| <h3>1.3.3 <a name="nxtk1">NX Tool Kit (<code>NXTK</code>)</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> |
| |
| <h3>1.3.4 <a name="nxfonts1">NX Fonts Support (<code>NXFONTS</code>)</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> |
| |
| <h3>1.3.5 <a name="nxwidgets1">NX Widgets (<code>NXWIDGETS</code>)</a></h3> |
| |
| <p> |
| I had originally planned a high level, C++, object-oriented library for |
| object-oriented access to graphics <i>widgets</i>. |
| However, C++ compilers are not available for some of the targets supported by NuttX. |
| So I have decided to implement the entire solution in C. |
| That decision makes the solution somewhat more difficult to work with, but supports all platforms. |
| </p> |
| <p> |
| At this point, the amount of C in the implementation would make conversion to C++ a |
| more difficult job. |
| I leave the C++ widget interface to any contributor who may have an interest in such things. |
| </p> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>2.0 <a name="nxapis">NX User APIs</a></h1> |
| </td> |
| </tr> |
| </table> |
| |
| <h2>2.1 <a name="nxheaders">NX Header Files</a></h2> |
| |
| <ul><dl> |
| <dt><code>include/nuttx/nxglib.h |
| <dd>Describes the NXGLIB C interfaces |
| <dt><code>include/nuttx/nx.h |
| <dd>Describes the NX C interfaces |
| <dt><code>include/nutt/nxtk.h |
| <dd>Describe the NXTOOLKIT C interfaces |
| <dt><code>include/nutt/nxfont.h |
| <dd>Describe sthe NXFONT C interfaces |
| <dt><code>include/nuttx/nxwidgets.h |
| <dd>Will describe the NXWIDGETS classes (no longer planned) |
| </dl></ul> |
| |
| <h2>2.2 <a name="nxgl2">NX Graphics Library (<code>NXGL</code>)</a></h2> |
| |
| <p> |
| NXGL provides many APIs, some available for use internally by NX and |
| others for use by applications as well. |
| Only those APIs intended for application usage are documented here |
| See <code>include/nuttx/nxglib.h</code> for the full set of APIs; |
| those APIs might be of interest if you are rendering directly into |
| framebuffer or LCD memory. |
| </p> |
| |
| <h3>2.2.1 <a name="nxgltypes">NXGL Types</a></h3> |
| |
| <p> |
| <code>nxgl_mxpixel_t</code>. |
| Holds one device pixel. |
| NXGLIB will select the smallest size for the <code>nxgl_mxpixel_t</code> |
| that just contains the pixel: <code>byte</code> if 16, 24, and 32 resolution |
| support is disabled, <code>uint16_t</code> if 24, and 32 resolution |
| support is disabled, or <code>uint32_t</code>. |
| </p> |
| |
| <p> |
| <code>nxgl_coord_t</b> |
| A given coordinate is limited to the screen height an width. If either |
| of those values exceed 32,767 pixels, then the following will have to need |
| to change: |
| </p> |
| <ul><pre> |
| typedef int16_t nxgl_coord_t; |
| </pre></ul> |
| |
| <p> |
| <code>struct nxgl_point_s</code>. Describes a point on the display: |
| </p> |
| <ul><pre> |
| struct nxgl_point_s |
| { |
| nxgl_coord_t x; /* X position, range: 0 to screen width - 1 */ |
| nxgl_coord_t y; /* Y position, range: 0 to screen height - 1 */ |
| }; |
| </pre></ul> |
| |
| <p> |
| <code>struct nxgl_size_s</code>. Describes the size of a rectangular region. |
| </p> |
| <ul><pre> |
| struct nxgl_size_s |
| { |
| nxgl_coord_t w; /* Width in pixels */ |
| nxgl_coord_t h; /* Height in rows */ |
| }; |
| </pre></ul> |
| |
| <p> |
| <code>struct nxgl_rect_s</code>. Describes a positioned rectangle on the display. |
| </p> |
| <ul><pre> |
| struct nxgl_rect_s |
| { |
| struct nxgl_point_s pt1; /* Upper, left-hand corner */ |
| struct nxgl_point_s pt2; /* Lower, right-hand corner */ |
| }; |
| </pre></ul> |
| |
| <p> |
| <code>struct nxgl_run_s</code>. |
| Describes a run, i.e., a horizontal line. Note that the start/end positions |
| have fractional precision. This is necessary for good joining of trapezoids |
| when a more complex shape is decomposed into trapezoids |
| </p> |
| <ul><pre> |
| struct nxgl_run_s |
| { |
| b16_t x1; /* Left X position, range: 0 to x2 */ |
| b16_t x2; /* Right X position, range: x1 to screen width - 1 */ |
| nxgl_coord_t y; /* Top Y position, range: 0 to screen height - 1 */ |
| }; |
| </pre></ul> |
| |
| <p> |
| <code>struct nxgl_trapezoid_s</code>. |
| Describes a horizontal trapezoid on the display in terms the run at the |
| top of the trapezoid and the run at the bottom |
| </p> |
| <ul><pre> |
| struct nxgl_trapezoid_s |
| { |
| struct nxgl_run_s top; /* Top run */ |
| struct nxgl_run_s bot; /* bottom run */ |
| }; |
| </pre></ul> |
| |
| <h3>2.2.1 <a name="nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rgb2yuv(uint8_t r, uint8_t g, uint8_t b, uint8_t *y, uint8_t *u, uint8_t *v); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Convert 8-bit RGB triplet to 8-bit YUV triplet. |
| </p> |
| |
| <h3>2.2.2 <a name="nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_yuv2rgb(uint8_t y, uint8_t u, uint8_t v, uint8_t *r, uint8_t *g, uint8_t *b); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Convert 8-bit RGB triplet to 8-bit YUV triplet. |
| </p> |
| |
| <h3>2.2.3 <a name="nxglrectcopy"><code>nxgl_rectcopy()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rectcopy(FAR struct nxgl_rect_s *dest, |
| FAR const struct nxgl_rect_s *src); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| This is essentially <code>memcpy()</code>for rectangles. We don't do structure |
| assignments because some compilers are not good at that. |
| </p> |
| |
| <h3>2.2.4 <a name="nxglrectoffset"><code>nxgl_rectoffset()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rectoffset(FAR struct nxgl_rect_s *dest, |
| FAR const struct nxgl_rect_s *src, |
| nxgl_coord_t dx, nxgl_coord_t dy); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Offset the rectangle position by the specified dx, dy values. |
| </p> |
| |
| <h3>2.2.5 <a name="nxglvectoradd"><code>nxgl_vectoradd()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_vectoradd(FAR struct nxgl_point_s *dest, |
| FAR const struct nxgl_point_s *v1, |
| FAR const struct nxgl_point_s *v2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Add two 2x1 vectors and save the result to a third. |
| </p> |
| |
| <h3>2.2.6 <a name="nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_vectsubtract(FAR struct nxgl_point_s *dest, |
| FAR const struct nxgl_point_s *v1, |
| FAR const struct nxgl_point_s *v2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Add subtract vector <code>v2</code> from vector <code>v1</code> and return the result in vector dest. |
| </p> |
| |
| <h3>2.2.7 <a name="nxglrectintersect"><code>nxgl_rectintersect()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rectintersect(FAR struct nxgl_rect_s *dest, |
| FAR const struct nxgl_rect_s *src1, |
| FAR const struct nxgl_rect_s *src2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return the rectangle representing the intersection of the two rectangles. |
| </p> |
| |
| <h3>2.2.8 <a name="nxglrectunion"><code>nxgl_rectunion()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rectunion(FAR struct nxgl_rect_s *dest, |
| FAR const struct nxgl_rect_s *src1, |
| FAR const struct nxgl_rect_s *src2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Given two rectanges, <code>src1</code> and <code>src2</code>, return the larger rectangle that |
| contains both, <code>dest</code>. |
| </p> |
| |
| <h3>2.2.9 <a name="nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| nxgl_nonintersecting(FAR struct nxgl_rect_s result[4], |
| FAR const struct nxgl_rect_s *rect1, |
| FAR const struct nxgl_rect_s *rect2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return the regions of rectangle <code>rect1</code> that do not intersect with |
| <code>rect2</code>. This will four rectangles, some of which may be |
| degenerate (and can be picked off with <a href="#nxglnullrect"><code>nxgl_nullrect()<code></a>). |
| </p> |
| |
| <h3>2.2.10 <a name="nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| bool nxgl_rectoverlap(FAR struct nxgl_rect_s *rect1, |
| FAR struct nxgl_rect_s *rect2); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return true if the two rectangles overlap. |
| </p> |
| |
| <h3>2.2.11 <a name="nxglrectinside"><code>nxgl_rectinside()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| bool nxgl_rectinside(FAR const struct nxgl_rect_s *rect, |
| FAR const struct nxgl_point_s *pt); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return true if the point <code>pt</code> lies within <code>rect</code>. |
| </p> |
| |
| <h3>2.2.12 <a name="nxglrectsize"><code>nxgl_rectsize()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_rectsize(FAR struct nxgl_size_s *size, |
| FAR const struct nxgl_rect_s *rect); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return the size of the specified rectangle. |
| </p> |
| |
| <h3>2.2.13 <a name="nxglnullrect"><code>nxgl_nullrect()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| bool nxgl_nullrect(FAR const struct nxgl_rect_s *rect); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return true if the area of the retangle is <= 0. |
| </p> |
| |
| <h3>2.2.14 <a name="nxglrunoffset"><code>nxgl_runoffset()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_runoffset(FAR struct nxgl_run_s *dest, |
| FAR const struct nxgl_run_s *src, |
| nxgl_coord_t dx, nxgl_coord_t dy); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Offset the run position by the specified <code>dx</code>, <code>dy</code> values. |
| </p> |
| |
| <h3>2.2.15 <a name="nxglruncopy"><code>nxgl_runcopy()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_runcopy(FAR struct nxgl_run_s *dest, |
| FAR const struct nxgl_run_s *src); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| This is essentially <code>memcpy()</code>for runs. We don't do structure assignments |
| because some compilers are not good at that. |
| </p> |
| |
| <h3>2.2.16 <a name="nxgltrapoffset"><code>nxgl_trapoffset()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_trapoffset(FAR struct nxgl_trapezoid_s *dest, |
| FAR const struct nxgl_trapezoid_s *src, |
| nxgl_coord_t dx, nxgl_coord_t dy); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Offset the trapezoid position by the specified <code>dx</code>, <code>dy</code> values. |
| </p> |
| |
| <h3>2.2.1 <a name="nxgltrapcopy"><code>nxgl_trapcopy()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| void nxgl_trapcopy(FAR struct nxgl_trapezoid_s *dest, |
| FAR const struct nxgl_trapezoid_s *src); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| This is essentially <code>memcpy()</code>for trapezoids. We don't do structure |
| assignments because some compilers are not good at that. |
| </p> |
| |
| <h3>2.2.1 <a name="nxglcolorcopy"><code>nxgl_colorcopy</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| nxgl_colorcopy(nxgl_mxpixel_t dest[CONFIG_NX_NPLANES], |
| const nxgl_mxpixel_t src[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| This is essentially <code>memcpy()</code>for colors. This does very little for us |
| other than hide all of the conditional compilation for planar colors |
| in one place. |
| </p> |
| |
| <h2>2.3 <a name="nx2">NX</a></h2> |
| |
| <h3>2.3.1 <a name="nxppdefs">Pre-Processor Definitions</a></h3> |
| |
| <p> |
| The default server message queue name used by the |
| <a href="#nxruninstance"><code>nx_run()</code></a> macro: |
| </p> |
| <ul><pre> |
| #define NX_DEFAULT_SERVER_MQNAME "/dev/nxs" |
| </pre></ul> |
| |
| <p> |
| Mouse button bits: |
| </p> |
| <ul><pre> |
| #define NX_MOUSE_NOBUTTONS 0x00 |
| #define NX_MOUSE_LEFTBUTTON 0x01 |
| #define NX_MOUSE_CENTERBUTTON 0x02 |
| #define NX_MOUSE_RIGHTBUTTON 0x04 |
| </pre></ul> |
| |
| <h3>2.3.2 <a name="nxtypes">NX Types</a></h3> |
| |
| <p> |
| The interface to the NX server is managed using a opaque handle: |
| </p> |
| <ul><pre> |
| typedef FAR void *NXHANDLE; |
| </pre></ul> |
| |
| <p> |
| The interface to a specific window is managed using an opaque handle: |
| </p> |
| <ul><pre> |
| typedef FAR void *NXWINDOW; |
| </pre></ul> |
| |
| <p> |
| These define callbacks that must be provided to |
| <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| In the multi-user model, these callbacks will be invoked as part of the |
| processing performed by |
| <a href="#nxeventhandler"><code>nx_eventhandler()</code></a>. |
| </p> |
| <ul><pre> |
| struct nx_callback_s |
| { |
| void (*redraw)(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect, |
| bool more, FAR void *arg); |
| void (*position)(NXWINDOW hwnd, FAR const struct nxgl_size_s *size, |
| FAR const struct nxgl_point_s *pos, |
| FAR const struct nxgl_rect_s *bounds, |
| FAR void *arg); |
| #ifdef CONFIG_NX_MOUSE |
| void (*mousein)(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos, |
| uint8_t buttons, FAR void *arg); |
| #endif |
| #ifdef CONFIG_NX_KBD |
| void (*kbdin)(NXWINDOW hwnd, uint8_t nch, FAR const uint8_t *ch, FAR void *arg); |
| #endif |
| }; |
| </pre></ul> |
| |
| <h3>2.3.3 <a name="nxtypes">NX Server Callbacks</a></h3> |
| |
| <h4>2.3.3.1 <a name="nxcbredraw"><code>redraw()</code></a></h4> |
| <p><b>Callback Function Prototype:</b></p> |
| <ul><pre> |
| void redraw(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect, |
| bool more, FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| NX requests that the client re-draw the portion of the window within |
| with rectangle. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>rect</code> |
| <dd>The rectangle that needs to be re-drawn (in window relative coordinates) |
| <dt><code>more</code> |
| <dd>true: More re-draw requests will follow |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> None |
| </p> |
| |
| <h4>2.3.3.2 <a name="nxcbposition"><code>position()</code></a></h4> |
| <p><b>Callback Function Prototype:</b></p> |
| <ul><pre> |
| void position(NXWINDOW hwnd, FAR const struct nxgl_size_s *size, |
| FAR const struct nxgl_point_s *pos, |
| FAR const struct nxgl_rect_s *bounds, |
| FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| The size or position of the window has changed (or the window was |
| just created with zero size. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>size</code> |
| <dd>The size of the window |
| <dt><code>pos</code> |
| <dd>The position of the upper left hand corner of the window on |
| the overall display |
| <dt><code>bounds</code> |
| <dd>The bounding rectangle that the describes the entire display |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> None |
| </p> |
| |
| <h4>2.3.3.3 <a name="nxcbmousein"><code>mousein()</code></a></h4> |
| <p><b>Callback Function Prototype:</b></p> |
| <ul><pre> |
| #ifdef CONFIG_NX_MOUSE |
| void mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos, |
| uint8_t buttons, FAR void *arg); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| New mouse data is available for the window |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>pos</code> |
| <dd>The (x,y) position of the mouse |
| <dt><code>buttons</code> |
| <dd>See <code>NX_MOUSE_*</code> definitions |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> None |
| </p> |
| |
| <h4>2.3.3.4 <a name="nxcbkbdin"><code>kbdin()</code></a></h4> |
| <p><b>Callback Function Prototype:</b></p> |
| <ul><pre> |
| #ifdef CONFIG_NX_KBD |
| void (*kbdin)(NXWINDOW hwnd, uint8_t nch, FAR const uint8_t *ch, FAR void *arg); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| New keyboard/keypad data is available for the window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>nch</code> |
| <dd>The number of characters that are available in ch[] |
| <dt><code>ch</code> |
| <dd>The array of characters |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> NOne |
| </p> |
| |
| <h3>2.3.4 <a name="nxruninstance"><code>nx_runinstance()</code> (and <code>nx_run()<code> macro)</a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_MULTIUSER |
| int nx_runinstance(FAR const char *mqname, FAR struct fb_vtable_s *fb); |
| #define nx_run(fb) nx_runinstance(NX_DEFAULT_SERVER_MQNAME, dev) |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| This is the server entry point. It does not return; the calling thread |
| is dedicated to supporting NX server. |
| </p> |
| <p> |
| NOTE that multiple instances of the NX server may run at the same time, |
| with different callback and message queue names. <code>nx_run()</code> is simply |
| a macro that can be used when only one server instance is required. In |
| that case, a default server name is used. |
| </p> |
| <p> |
| Multiple user mode only! |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>mqname</code> |
| <dd> |
| - The name for the server incoming message queue |
| <dt><code>dev</code> |
| <dd>Framebuffer or LCD driver "object" to be used |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| This function usually does not return. If it does return, it will |
| return <code>ERROR</code> and <code>errno</code> will be set appropriately. |
| </p> |
| |
| <h3>2.3.5 <a name="nxconnectinstance"><code>nx_connectinstance()</code> (and <code>nx_connect()</code> macro)</a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_MULTIUSER |
| NXHANDLE nx_connectinstance(FAR const char *svrmqname); |
| #define nx_connect(cb) nx_connectinstance(NX_DEFAULT_SERVER_MQNAME) |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Open a connection from a client to the NX server. One one client |
| connection is normally needed per thread as each connection can host |
| multiple windows. |
| </p> |
| <p> |
| NOTES: |
| </p> |
| <ul> |
| <li> |
| This function returns before the connection is fully instantiated. |
| it is necessary to wait for the connection event before using the |
| returned handle. |
| </li> |
| <li> |
| Multiple instances of the NX server may run at the same time, |
| each with different message queue names. |
| </li> |
| <li> |
| <code>nx_connect()</code> is simply a macro that can be used when only one |
| server instance is required. In that case, a default server name |
| is used. |
| </li> |
| </ul> |
| <p> |
| Multiple user mode only! |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>svrmqname</code> |
| <dd>The name for the server incoming message queue |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| </p> |
| <ul> |
| Success: A non-NULL handle used with subsequent NX accesses<br> |
| Failure: NULL is returned and <code>errno</code> is set appropriately. |
| </ul> |
| |
| <h3>2.3.6 <a name="nxopen"><code>nx_open()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifndef CONFIG_NX_MULTIUSER |
| NXHANDLE nx_open(FAR struct fb_vtable_s *dev); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Create, initialize and return an NX handle for use in subsequent |
| NX API calls. <code>nx_open()</code> is the single user equivalent of |
| <a href="#nxconnectinstance"><code>nx_connect()</code></a> plus |
| <a href="#nxruninstance"><code>nx_run()</code></a>. |
| </p> |
| <p> |
| Single user mode only! |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>dev</code> |
| <dd>Frame buffer or LCD driver "object" to be used. |
| <dt><code>cb</code> |
| <dd>Callbacks used to process received NX server messages |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| </p> |
| <ul> |
| Success: A non-NULL handle used with subsequent NX accesses<br> |
| Failure: NULL is returned and <code>errno</code> is set appropriately. |
| </ul> |
| |
| <h3>2.3.7 <a name="nxdisconnect"><code>nx_disconnect()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_MULTIUSER |
| void nx_disconnect(NXHANDLE handle); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Disconnect a client from the NX server and/or free resources reserved |
| by <a href="#nxconnectinstance"><code>nx_connect()</code>/<code>nx_connectinstance()</code></a>. |
| <code>nx_disconnect()</code> is muliti-user equivalent of |
| <a href="#nxclose"><code>nx_close()</code></a>. |
| </p> |
| <p> |
| Multiple user mode only! |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> None. |
| </p> |
| |
| <h3>2.3.8 <a name="nxclose"><code>nx_close()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifndef CONFIG_NX_MULTIUSER |
| void nx_close(NXHANDLE handle); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Close the single user NX interface. nx_close is single-user equivalent |
| of <a href="#nxdisconnect"><code>nx_disconnect()</code></a>. |
| </p> |
| <p> |
| Single user mode only! |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxopen"><code>nx_open()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> None |
| </p> |
| |
| <h3>2.3.9 <a name="nxeventhandler"><code>nx_eventhandler()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_MULTIUSER |
| int nx_eventhandler(NXHANDLE handle); |
| #else |
| # define nx_eventhandler(handle) (OK) |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| The client code must call this function periodically to process |
| incoming messages from the server. If <code>CONFIG_NX_BLOCKING</code> is defined, |
| then this function not return until a server message is received. |
| </p> |
| <p> |
| When <code>CONFIG_NX_BLOCKING</code> is not defined, the client must exercise |
| caution in the looping to assure that it does not eat up all of |
| the CPU bandwidth calling nx_eventhandler repeatedly. |
| <a href="#nxeventnotify"><code>nx_eventnotify()</code></a> |
| may be called to get a signal event whenever a new incoming server |
| event is avaiable. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| </p> |
| <ul> |
| <li> |
| <code>OK</code>: No errors occurred. If <code>CONFIG_NX_BLOCKING</code> is defined, |
| then one or more server messages were processed. |
| </li> |
| <li> |
| <code>ERROR</code>: An error occurred and <code>errno</code> has been set appropriately. |
| Of particular interest, it will return <code>errno == EHOSTDOWN</code> when the |
| server is disconnected. After that event, the handle can no longer be used. |
| </li> |
| </ul> |
| |
| <h3>2.3.10 <a name="nxeventnotify"><code>nx_eventnotify()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #if defined(CONFIG_NX_MULTIUSER) && !defined(CONFIG_DISABLE_SIGNALS) |
| int nx_eventnotify(NXHANDLE handle, int signo); |
| #else |
| # define nx_eventnotify(handle, signo) (OK) |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Rather than calling <a href="#nxeventhandler"><code>nx_eventhandler()</code></a> periodically, |
| the client may register to receive a signal when a server event is available. |
| The client can then call <a href="#nxeventhandler"><code>nv_eventhandler()</code></a> only when |
| incoming events are available. |
| </p> |
| <p> |
| The underlying implementation used <code>mq_notifiy()</code> and, as a result, |
| the client must observe the rules for using <code>mq_notifiy()</code>: |
| <ul> |
| <li> |
| Only one event is signaled. Upon receipt of the signal, if the client |
| wishes further notifications, it must call <code>nx_eventnotify()</code> again. |
| </li> |
| <li> |
| The signal will only be issued when the message queue transitions from empty to |
| not empty. |
| </li> |
| </ul> |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.11 <a name="nxopenwindow"><code>nx_openwindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| NXWINDOW nx_openwindow(NXHANDLE handle, |
| FAR const struct nx_callback_s *cb, |
| FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Create a new window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a> |
| or <a href="#nxopen"><code>nx_open()</code></a>. |
| <dt><code>cb</code> |
| <dd>Callbacks used to process window events |
| <dt><code>arg</code> |
| <dd>User provided value that will be returned with NX callbacks. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| </p> |
| <ul> |
| Success: A non-NULL handle used with subsequent NX accesses<br> |
| Failure: NULL is returned and <code>errno</code> is set appropriately. |
| </ul> |
| |
| <h3>2.3.12 <a name="nxclosewindow"><code>nx_closewindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_closewindow(NXWINDOW hwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Destroy a window created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| that identifies the window to be destroyed. |
| This handle must not have been one returned by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.13 <a name="nxrequestbkgd"><code>nx_requestbkgd()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_requestbkgd(NXHANDLE handle, |
| FAR const struct nx_callback_s *cb, |
| FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| NX normally controls a separate window called the background window. |
| It repaints the window as necessary using only a solid color fill. The |
| background window always represents the entire screen and is always |
| below other windows. It is useful for an application to control the |
| background window in the following conditions: |
| </p> |
| <ul> |
| <li> |
| If you want to implement a windowless solution. The single screen |
| can be used to creat a truly simple graphic environment. In this |
| case, you should probably also de-select <code>CONFIG_NX_MULTIUSER</code> as well. |
| </li> |
| <li> |
| When you want more on the background than a solid color. For |
| example, if you want an image in the background, or animations in the |
| background, or live video, etc. |
| </li> |
| </ul> |
| <p> |
| This API only requests the handle of the background window. That |
| handle will be returned asynchronously in a subsequent position and |
| redraw callbacks. |
| </p> |
| <p> |
| Cautions: |
| </p> |
| <ul> |
| <li> |
| The following should never be called using the background window. |
| They are guaranteed to cause severe crashes: |
| <a href="#nxsetposition"><code>nx_setposition()</code></a>, |
| <a href="#nxsetsize"><code>nx_setsize()</code></a>, |
| <a href="#nxraise"><code>nx_raise()</code></a>, or |
| <a href="#nxlower"><code>nx_lower()</code></a>. |
| </li> |
| <li> |
| Neither <code>nx_requestbkgd()</code> nor |
| <a href="#nxreleasebkgd"><code>nx_releasebkgd ()</code></a> should be called more than once. |
| Multiple instances of the background window are not supported. |
| </li> |
| </ul> |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a> |
| or <a href="#nxopen"><code>nx_open()</code></a>. |
| <dt><code>cb</code> |
| <dd>Callbacks to use for processing background window events |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.14 <a name="nxreleasebkgd"><code>nx_releasebkgd()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_releasebkgd(NXWINDOW hwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Release the background window previously acquired using |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| and return control of the background to NX. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle returned indirectly by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| This handle must not have been one created by |
| <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.15 <a name="nxgetposition"><code>nx_getposition()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_getposition(NXWINDOW hwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Request the position and size information for the selected window. The |
| values will be return asynchronously through the client callback function |
| pointer. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> or |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.16 <a name="nxsetposition"><code>nx_setposition()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_setposition(NXWINDOW hwnd, FAR struct nxgl_point_s *pos); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Set the position and size for the selected window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| This handle must not have been created by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| <dt><code>pos</code> |
| <dd>The new position of the window |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.17 <a name="nxsetsize"><code>nx_setsize()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_setsize(NXWINDOW hwnd, FAR struct nxgl_size_s *size); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Set the size of the selected window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| This handle must not have been created by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| <dt><code>size</code> |
| <dd>The new size of the window (in pixels). |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.18 <a name="nxraise"><code>nx_raise()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_raise(NXWINDOW hwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Bring the specified window to the top of the display. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| This handle must not have been created by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| <dt><code></code> |
| <dd> |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.19 <a name="nxlower"><code>nx_lower()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_lower(NXWINDOW hwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Lower the specified window to the bottom of the display. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a>. |
| This handle must not have been created by |
| <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a>. |
| <dt><code></code> |
| <dd> |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.20 <a name="nxfill"><code>nx_fill()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_fill(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified rectangle in the window with the specified color. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>rect</code> |
| <dd>The location to be filled |
| <dt><code>color</code> |
| <dd>The color to use in the fill |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.21 <a name="nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, |
| FAR const struct nxgl_trapezoid_s *trap, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified trapezoidal region in the window with the specified color. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>clip</code> |
| <dd>Clipping rectangle relative to window (may be null) |
| <dt><code>trap</code> |
| <dd>The trapezoidal region to be filled |
| <dt><code>color</code> |
| <dd>The color to use in the fill |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.22 <a name="nxglrgb2yuv"><code>nx_setbgcolor()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_setbgcolor(NXHANDLE handle, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Set the color of the background. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>handle</code> |
| <dd>The handle created by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> |
| <dt><code>color</code> |
| <dd>The color to use in the background |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.23 <a name="nxmove"><code>nx_move()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_move(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect, |
| FAR const struct nxgl_point_s *offset); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Move a rectangular region within the window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> that specifies |
| the window within which the move is to be done |
| <dt><code>rect</code> |
| <dd>Describes the (source) rectangular region to move |
| <dt><code>offset</code> |
| <dd>The offset to move the region |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.24 <a name="nxbitmap"><code>nx_bitmap()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest, |
| FAR const void *src[CONFIG_NX_NPLANES], |
| FAR const struct nxgl_point_s *origin, |
| unsigned int stride); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Copy a rectangular region of a larger image into the rectangle in the |
| specified window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>hwnd</code> |
| <dd>The handle returned by <a href="#nxopenwindow"><code>nx_openwindow()</code></a> |
| or <a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a> that specifies the |
| window that will receive the bitmap image. |
| <dt><code>dest</code> |
| <dd> Describes the rectangular on the display that will receive the bit map. |
| <dt><code>src</code> |
| <dd>The start of the source image. This is an array source images of size |
| <code>CONFIG_NX_NPLANES</code> (probably 1). |
| <dt><code>origin</code> |
| <dd>The origin of the upper, left-most corner of the full bitmap. |
| Both dest and origin are in window coordinates, however, the origin |
| may lie outside of the display. |
| <dt><code>stride</code> |
| <dd>The width of the full source image in bytes. |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.25 <a name="nxkbdin"><code>nx_kbdin()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_KBD |
| int nx_kbdchin(NXHANDLE handle, uint8_t ch); |
| int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Used by a thread or interrupt handler that manages some kind of keypad |
| hardware to report text information to the NX server. That text |
| data will be routed by the NX server to the appropriate window client. |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.3.26 <a name="nxmousein"><code>nx_mousein()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| |
| #ifdef CONFIG_NX_MOUSE |
| int nx_mousein(NXHANDLE handle, nxgl_coord_t x, nxgl_coord_t y, uint8_t buttons); |
| #endif |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Used by a thread or interrupt handler that manages some kind of pointing |
| hardware to report new positional data to the NX server. That positional |
| data will be routed by the NX server to the appropriate window client. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code></code> |
| <dd> |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h2>2.4 <a name="nxtk2">NX Tool Kit (<code>NXTK</code>)</a></h2> |
| |
| <p> |
| NXTK implements where the <i>framed window</i>. |
| NX framed windows consist of three components within one NX window: |
| </p> |
| <ol> |
| <li>The window <i>border</i>,</li> |
| <li>The main <i>client window</i> area, and</li> |
| <li>A <i>toolbar</i> area</li> |
| </ol> |
| |
| <p> |
| Each sub-window represents a region within one window. |
| <a href="#screenshot">Figure 1</a> shows some simple NX framed windows. |
| NXTK allows these sub-windows to be managed more-or-less independently: |
| </p> |
| <ul> |
| <li> |
| Each component has its own callbacks for redraw and position events |
| as well as mouse and keyboard inputs. |
| The client sub-window callbacks are registered when the framed window is |
| created with a call to <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>; |
| Separate toolbar sub-window callbakcs are reigistered when the toolbar |
| is added using <a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a>. |
| (NOTES: (1) only the client sub-window receives keyboard input and, |
| (2) border callbacks are not currently accessible by the user). |
| <li> |
| </li> |
| All position informational provided within the callback is relative |
| to the specific sub-window. |
| That is, the origin (0,0) of the coordinate system for each sub-window |
| begins at the top left corner of the subwindow. |
| This means that toolbar logic need not be concerned about client window |
| geometry (and vice versa) and, for example, common toolbar logic can |
| be used with different windows. |
| </li> |
| </ul> |
| |
| <h3>2.4.1 <a name="nxtktypes"><code>NXTK Types()</code></a></h3> |
| |
| <p> |
| This is the handle that can be used to access the window data region. |
| </p> |
| <ul><pre> |
| typedef FAR void *NXTKWINDOW; |
| </pre></ul> |
| |
| <h3>2.4.2 <a name="nxtkopenwindow"><code>nxtk_openwindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| NXTKWINDOW nxtk_openwindow(NXHANDLE handle, |
| FAR const struct nx_callback_s *cb, |
| FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Create a new, framed window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>handle</code> |
| <dd>The handle returned by <a href="#nxconnectinstance"><code>nx_connect()</code></a> |
| or <a href="#nxopen"><code>nx_open()</code></a>. |
| <dt><code>cb</code> |
| <dd>Callbacks used to process window events |
| <dt><code>arg</code> |
| <dd>User provided argument (see <a href="#nxopenwindow"><code>nx_openwindow()</code></a>) |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| </p> |
| <ul> |
| Success: A non-NULL handle used with subsequent NXTK window accesses<br> |
| Failure: NULL is returned and <code>errno</code> is set appropriately. |
| </ul> |
| |
| <h3>2.4.3 <a name="nxtkclosewindow"><code>nxtk_closewindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_closewindow(NXTKWINDOW hfwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Close the window opened by <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.4 <a name="nxtkgetposition"><code>nxtk_getposition()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_getposition(NXTKWINDOW hfwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Request the position and size information for the selected framed window. |
| The size/position for the client window and toolbar will be return |
| asynchronously through the client callback function pointer. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.5 <a name="nxtksetposition"><code>nxtk_setposition()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_setposition(NXTKWINDOW hfwnd, FAR struct nxgl_point_s *pos); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Set the position for the selected client window. This position does not |
| include the offsets for the borders nor for any toolbar. Those offsets |
| will be added in to set the full window position. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>pos</code> |
| <dd>The new position of the client sub-window |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.6 <a name="nxtksetsize"><code>nxtk_setsize()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_setsize(NXTKWINDOW hfwnd, FAR struct nxgl_size_s *size); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Set the size for the selected client window. This size does not |
| include the sizes of the borders nor for any toolbar. Those sizes |
| will be added in to set the full window size. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>size</code> |
| <dd>The new size of the client sub-window. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.7 <a name="nxtkraise"><code>nxtk_raise()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_raise(NXTKWINDOW hfwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Bring the window containing the specified client sub-window to the top |
| of the display. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a> |
| specifying the window to be raised. |
| <dt><code></code> |
| <dd> |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.8 <a name="nxtklower"><code>nxtk_lower()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_lower(NXTKWINDOW hfwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Lower the window containing the specified client sub-window to the |
| bottom of the display. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a> |
| specifying the window to be lowered. |
| <dt><code></code> |
| <dd> |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.9 <a name="nxtkfillwindow"><code>nxtk_fillwindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_fillwindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified rectangle in the client window with the specified color. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>rect</code> |
| <dd>The location within the client window to be filled |
| <dt><code>color</code> |
| <dd>The color to use in the fill |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.10 <a name="nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_filltrapwindow(NXTKWINDOW hfwnd, |
| FAR const struct nxgl_trapezoid_s *trap, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified trapezoid in the client window with the specified color |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>trap</code> |
| <dd>The trapezoidal region to be filled. |
| <dt><code>color</code> |
| <dd>The color to use in the fill. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.11 <a name="nxtkmovewindow"><code>nxtk_movewindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_movewindow(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect, |
| FAR const struct nxgl_point_s *offset); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Move a rectangular region within the client sub-window of a framed window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a> |
| specifying the client sub-window within which the move is to be done. |
| <dt><code>rect</code> |
| <dd>Describes the rectangular region relative to the client sub-window to move. |
| <dt><code>offset</code> |
| <dd>The offset to move the region |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.12 <a name="nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_bitmapwindow(NXTKWINDOW hfwnd, |
| FAR const struct nxgl_rect_s *dest, |
| FAR const void *src[CONFIG_NX_NPLANES], |
| FAR const struct nxgl_point_s *origin, |
| unsigned int stride); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Copy a rectangular region of a larger image into the rectangle in the |
| specified client sub-window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a> |
| specifying the client sub-window that will receive the bitmap. |
| <dt><code>dest</code> |
| <dd>Describes the rectangular region on in the client sub-window |
| will receive the bit map. |
| <dt><code>src</code> |
| <dd>The start of the source image(s). This is an array source |
| images of size <code>CONFIG_NX_NPLANES</code> (probably 1). |
| <dt><code>origin</code> |
| <dd>The origin of the upper, left-most corner of the full bitmap. |
| Both dest and origin are in sub-window coordinates, however, the |
| origin may lie outside of the sub-window display. |
| <dt><code>stride</code> |
| <dd>The width of the full source image in pixels. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.13 <a name="nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_opentoolbar(NXTKWINDOW hfwnd, nxgl_coord_t height, |
| FAR const struct nx_callback_s *cb, |
| FAR void *arg); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Create a tool bar at the top of the specified framed window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>height</code> |
| <dd>The requested height of the toolbar in pixels. |
| <dt><code>cb</code> |
| <dd>Callbacks used to process toolbar events. |
| <dt><code>arg</code> |
| <dd>User provided value that will be returned with toolbar callbacks. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.14 <a name="nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_closetoolbar(NXTKWINDOW hfwnd); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Remove the tool bar at the top of the specified framed window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code></code> |
| <dd> |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.15 <a name="nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified rectangle in the toolbar sub-window with the specified color. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>rect</code> |
| <dd>The location within the toolbar window to be filled. |
| <dt><code>color</code> |
| <dd>The color to use in the fill. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.16 <a name="nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_filltraptoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_trapezoid_s *trap, |
| nxgl_mxpixel_t color[CONFIG_NX_NPLANES]); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Fill the specified trapezoid in the toolbar sub-window with the specified color. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>trap</code> |
| <dd>The trapezoidal region to be filled |
| <dt><code>color</code> |
| <dd>The color to use in the fill |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.17 <a name="nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_movetoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect, |
| FAR const struct nxgl_point_s *offset); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Move a rectangular region within the toolbar sub-window of a framed window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle identifying sub-window containing the toolbar within which the move is |
| to be done. |
| This handle must have previously been returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>rect</code> |
| <dd>Describes the rectangular region relative to the toolbar sub-window to move. |
| <dt><code>offset</code> |
| <dd>The offset to move the region |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h3>2.4.18 <a name="nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nx.h> |
| #include <nuttx/nxtk.h> |
| |
| int nxtk_bitmaptoolbar(NXTKWINDOW hfwnd, |
| FAR const struct nxgl_rect_s *dest, |
| FAR const void *src[CONFIG_NX_NPLANES], |
| FAR const struct nxgl_point_s *origin, |
| unsigned int stride); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Copy a rectangular region of a larger image into the rectangle in the |
| specified toolbar sub-window. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <dl> |
| <dt><code>hfwnd</code> |
| <dd>A handle previously returned by |
| <a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a>. |
| <dt><code>dest</code> |
| <dd>Describes the rectangular region on in the toolbar sub-window |
| will receive the bit map. |
| <dt><code>src</code> |
| <dd>The start of the source image. |
| <dt><code>origin</code> |
| <dd>The origin of the upper, left-most corner of the full bitmap. |
| Both dest and origin are in sub-window coordinates, however, the |
| origin may lie outside of the sub-window display. |
| <dt><code>stride</code> |
| <dd>The width of the full source image in bytes. |
| </dl> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately |
| </p> |
| |
| <h2>2.5 <a name="nxfonts2">NX Fonts Support (<code>NXFONTS</code>)</a></h2> |
| |
| <h3>2.5.1 <a name="nxfontstypes"><code>NXFONTS Types()</code></a></h3> |
| <p> |
| This structures provides the metrics for one glyph: |
| </p> |
| <ul><pre> |
| struct nx_fontmetic_s |
| { |
| uint32_t stride : 2; /* Width of one font row in bytes */ |
| uint32_t width : 6; /* Width of the font in bits */ |
| uint32_t height : 6; /* Height of the font in rows */ |
| uint32_t xoffset : 6; /* Top, left-hand corner X-offset in pixels */ |
| uint32_t yoffset : 6; /* Top, left-hand corner y-offset in pixels */ |
| uint32_t unused : 6; |
| }; |
| </pre></ul> |
| |
| <p> |
| This structure binds the glyph metrics to the glyph bitmap: |
| </p> |
| <ul><pre> |
| struct nx_fontbitmap_s |
| { |
| struct nx_fontmetic_s metric; /* Character metrics */ |
| FAR const uint8_t *bitmap; /* Pointer to the character bitmap */ |
| }; |
| </pre></ul> |
| |
| <p> |
| This structure describes one contiguous grouping of glyphs that |
| can be described by an array starting with encoding <code>first</code> and |
| extending through (<code>first</code> + <code>nchars</code> - 1). |
| </p> |
| <ul><pre> |
| struct nx_fontset_s |
| { |
| uint8_t first; /* First bitmap character code */ |
| uint8_t nchars; /* Number of bitmap character codes */ |
| FAR const struct nx_fontbitmap_s *bitmap; |
| }; |
| </pre></ul> |
| |
| <p> |
| This structure describes the overall fontset: |
| </p> |
| <ul><pre> |
| struct nx_font_s |
| { |
| uint8_t mxheight; /* Max height of one glyph in rows */ |
| uint8_t mxwidth; /* Max width of any glyph in pixels */ |
| uint8_t mxbits; /* Max number of bits per character code */ |
| uint8_t spwidth; /* The width of a space in pixels */ |
| }; |
| </pre></ul> |
| |
| <h3>2.5.2 <a name="nxfgetfontset"><code>nxf_getfontset()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nxfonts.h> |
| |
| FAR const struct nx_font_s *nxf_getfontset(void); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return information about the current font set. |
| </p> |
| <p> |
| <b>Input Parameters:</b> None |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| An instance of <code>struct nx_font_s</code> describing the font set. |
| </p> |
| |
| <h3>2.5.3 <a name="nxfgetbitmap"><code>nxf_getbitmap()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nxfonts.h> |
| |
| FAR const struct nx_fontbitmap_s *nxf_getbitmap(uint16_t ch); |
| </pre></ul> |
| <p> |
| <b>Description:</b> |
| Return font bitmap information for the selected character encoding. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code></code> |
| <dd> |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| An instance of <code>struct nx_fontbitmap_s</code> describing the glyph. |
| </p> |
| |
| <h3>2.5.4 <a name="nxfconvertbpp"><code>nxf_convert_*bpp()</code></a></h3> |
| <p><b>Function Prototype:</b></p> |
| <ul><pre> |
| #include <nuttx/nxglib.h> |
| #include <nuttx/nxfonts.h> |
| |
| int nxf_convert_2bpp(FAR uint8_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| int nxf_convert_4bpp(FAR uint8_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| int nxf_convert_8bpp(FAR uint8_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| int nxf_convert_16bpp(FAR uint16_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| int nxf_convert_24bpp(FAR uint32_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height, |
| uint16_t width, uint16_t stride, |
| FAR const struct nx_fontbitmap_s *bm, |
| nxgl_mxpixel_t color); |
| </pre></ul> |
| <p> |
| <b>Description:</b> Convert the 1BPP font to a new pixel depth. |
| </p> |
| <p> |
| <b>Input Parameters:</b> |
| <ul><dl> |
| <dt><code>dest</code> |
| <dd>The destination buffer provided by the caller. |
| <dt><code>height</code> |
| <dd>The max height of the returned char in rows. |
| <dt><code>width</code> |
| <dd>The max width of the returned char in pixels. |
| <dt><code>stride</code> |
| <dd>The width of the destination buffer in bytes. |
| <dt><code>bm</code> |
| <dd>Describes the character glyph to convert |
| <dt><code>color</code> |
| <dd>The color to use for '1' bits in the font bitmap (0 bits are transparent). |
| </dl></ul> |
| </p> |
| <p> |
| <b>Returned Value:</b> |
| <code>OK</code> on success; |
| <code>ERROR</code> on failure with <code>errno</code> set appropriately. |
| </p> |
| |
| <h2>2.6 <a name="samplecode">Sample Code</a></h2> |
| |
| <p><b><code>examples/nx</code></b>. |
| No sample code is provided in this document. |
| However, an example can be found in the NuttX source tree at <code>examples/nx</code>. |
| That code is intended to test NX. |
| Since it is test code, it is designed to exercise functionality and does not necessarily |
| represent best NX coding practices. |
| </p> |
| |
| <p> |
| In its current form, the NX graphics system provides a low level of graphics and window |
| support. |
| Most of the complexity of manage redrawing and handling mouse and keyboard events must |
| be implemented by the NX client code. |
| </p> |
| |
| <p><b>Building <code>examples/nx</code></b>. |
| Testing was performed using the Linux/Cygwin-based NuttX simulator. |
| Instructions are provided for building that simulation are provided in |
| <a href="#testcoverage">Appendix C</a> of this document. |
| </p> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>Appendix A <a name="grapicsdirs"><code>graphics/</code> Directory Structure</a></h1> |
| </td> |
| </tr> |
| </table> |
| |
| <ul> |
| <dl> |
| <dt><code>graphics/nxglib</code> |
| <dd>The NuttX tiny graphics library. |
| The directory contains generic utilities support operations on primitive graphics objects |
| and logic to rasterize directly into a framebuffer or through an LCD driver interface. |
| It has no concept of windows (other than the one, framebuffer or LCD window). |
| |
| <dt><code>graphics/nxbe</code> |
| <dd>This is the <i>back-end</i> of a tiny windowing system. |
| It can be used with either of two front-ends to complete a windowing system (see |
| <code>nxmu</code> and <code>nxsu/<code> below). |
| It contains most of the important window management logic: clipping, window controls, |
| window drawing, etc. |
| |
| <dt><code>graphics/nxsu</code> |
| <dd>This is the NX single user <i>front end</i>. |
| When combined with the generic <i>back-end</i> (<code>nxbe</code>), it implements a |
| single threaded, single user windowing system. |
| The files in this directory present the window APIs described in |
| <code>include/nuttx/nx.h</code>. |
| The single user front-end is selected when <code>CONFIG_NX_MULTIUSER</code> is not |
| defined in the NuttX configuration file. |
| |
| <dt><code>graphics/nxsu</code> |
| <dd>This is the NX multi user <i>front end</i>. |
| When combined with the generic <i>back-end</i> (<code>nxbe</code>), it implements a |
| multi-threaded, multi-user windowing system. |
| The files in this directory present the window APIs described in |
| <code>include/nuttx/nx.h</code>. |
| The multi-user front end includes a graphics server that executes on its own thread; |
| multiple graphics clients then communicate with the server via a POSIX message |
| queue to serialize window operations from many threads. |
| The multi-user front-end is selected when <code>CONFIG_NX_MULTIUSER</code> is defined |
| in the NuttX configuration file. |
| |
| <dt><code>graphics/nxfonts</code> |
| <dd>This is where the NXFONTS implementation resides. |
| This is a relatively low-level set of charset set/glyph management APIs. |
| See <code>include/nuttx/nxfonts.h</code>. |
| |
| <dt><code>graphics/nxtk</code> |
| <dd>This is where the NXTOOLKIT implementation resides. |
| This toolkit is built on top of NX and works with either the single-user or |
| multi-user NX version. |
| See <code>include/nuttx/nxtk.h</code>. |
| |
| <dt><code>graphics/nxwidgets</code> |
| <dd>At one time, I planned to put NXWIDGETS implementation here, but not anymore. |
| </dl> |
| </ul> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>Appendix B <a name="nxconfigs">NX Configuration Options</a></h1> |
| </td> |
| </tr> |
| </table> |
| |
| <h2>B.1 <a name="nxgenconfig">General Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NX</code> |
| Enables overall support for graphics library and NX |
| </dl> |
| </ul> |
| |
| <h2>B.2 <a name="nxglconfig">NXGL Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NX_NPLANES</code>: |
| <dd>Some YUV color formats requires support for multiple planes, |
| one for each color component. Unless you have such special |
| hardware, this value should be undefined or set to 1. |
| <dt><code>CONFIG_NX_DISABLE_1BPP</code>, <code>CONFIG_NX_DISABLE_2BPP</code>, |
| <code>CONFIG_NX_DISABLE_4BPP</code>, <code>CONFIG_NX_DISABLE_8BPP</code> |
| <code>CONFIG_NX_DISABLE_16BPP</code>, <code>CONFIG_NX_DISABLE_24BPP</code>, and |
| <code>CONFIG_NX_DISABLE_32BPP</code>: |
| <dd>NX supports a variety of pixel depths. You can save some |
| memory by disabling support for unused color depths. |
| <dt><code>CONFIG_NX_PACKEDMSFIRST</code>: |
| <dd>If a pixel depth of less than 8-bits is used, then NX needs |
| to know if the pixels pack from the MS to LS or from LS to MS |
| <dt><code>CONFIG_NX_LCDDRIVER</code>: |
| <dd>By default, NX builds to use a framebuffer driver (see <code>include/nuttx/fb.h</code>). |
| If this option is defined, NX will build to use an LCD driver (see <code>include/nuttx/lcd/lcd.h</code>). |
| </li> |
| </dl> |
| </ul> |
| |
| <h2>B.3 <a name="nxconfig">NX Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NX_MOUSE</code>: |
| <dd>Build in support for mouse input. |
| <dt><code>CONFIG_NX_KBD</code>: |
| <dd>Build in support of keypad/keyboard input. |
| </dl> |
| </ul> |
| |
| <h2>B.4 <a name="nxmuconfig">NX Multi-User (Only) Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NX_MULTIUSER</code>: |
| <dd>Configures NX in multi-user mode. |
| <dt><code>CONFIG_NX_BLOCKING</code> |
| <dd>Open the client message queues in blocking mode. In this case, |
| <dt><code>nx_eventhandler()</code> will not return until a message is received and processed. |
| <dt><code>CONFIG_NX_MXSERVERMSGS</code> and <code>CONFIG_NX_MXCLIENTMSGS</code> |
| <dd>Specifies the maximum number of messages that can fit in |
| the message queues. No additional resources are allocated, but |
| this can be set to prevent flooding of the client or server with |
| too many messages (<code>CONFIG_PREALLOC_MQ_MSGS</code> controls how many |
| messages are pre-allocated). |
| </dl> |
| </ul> |
| |
| <h2>B.5 <a name="nxtkconfig">NXTK Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NXTK_BORDERWIDTH</code>: |
| <dd>Specifies with with of the border (in pixels) used with |
| framed windows. The default is 4. |
| <dt><code>CONFIG_NXTK_BORDERCOLOR1</code> and <code>CONFIG_NXTK_BORDERCOLOR2</code>: |
| <dd>Specify the colors of the border used with framed windows. |
| <dt><code>CONFIG_NXTK_BORDERCOLOR2</code> is the shadow side color and so |
| <dd>is normally darker. The default is medium and dark grey, |
| respectively |
| <dt><code>CONFIG_NXTK_AUTORAISE</code>: |
| <dd>If set, a window will be raised to the top if the mouse position |
| is over a visible portion of the window. Default: A mouse |
| button must be clicked over a visible portion of the window. |
| </dl> |
| </ul> |
| |
| <h2>B.6 <a name="nxfpmtsconfig">NXFONTS Configuration Settings</a></h2> |
| |
| <ul> |
| <dl> |
| <dt><code>CONFIG_NXFONTS_CHARBITS</code>: |
| <dd>The number of bits in the character set. Current options are |
| only 7 and 8. The default is 7. |
| <dt><code>CONFIG_NXFONT_SANS</code>: |
| <dd>At present, there is only one font. But if there were were more, |
| then this option would select the sans serif font. |
| </dl> |
| </ul> |
| |
| <table width ="100%"> |
| <tr bgcolor="#e4e4e4"> |
| <td> |
| <h1>Appendix C <a name="testcoverage">NX Test Coverage</a></h1> |
| </td> |
| </tr> |
| </table> |
| |
| <p><b><code>examples/nx</code></b>. |
| The primary test tool for debugging NX resides at <code>examples/nx</code>. |
| </p> |
| <p><b>Building <code>examples/nx</code></b>. |
| NX testing was performed using <code>examples/nx</code> with the |
| Linux/Cygwin-based NuttX simulator. |
| Configuration files for building this test can be found in <code>configs/sim/nx</code>. |
| There are two alternative configurations for building the simulation: |
| </p> |
| <ol> |
| <li> |
| The default configuration using the configuration file at |
| <code>configs/sim/nx/defconfig</code>. |
| This default configuration exercises the NX logic a 8 BPP but provides no visual feedback. |
| In this configuration, a very simple, simulated framebuffer driver is used that is |
| based upon a simple region of memory posing as video memory. |
| That default configuration can be built as follows: |
| <ul><pre> |
| cd <NuttX-Directory>/tools |
| ./configure sim/nx |
| cd <NuttX-Directory> |
| make |
| ./nuttx |
| </pre></ul> |
| </li> |
| <li> |
| <p> |
| A preferred configuration extends the test with a simulated framebuffer driver |
| that uses an X window as a framebuffer. |
| This configuration uses the configuration file at <code>configs/sim/nx/defconfig-x11</code>. |
| This is a superior test configuration because the X window appears at your desktop |
| and you can see the NX output. |
| This preferred configuration can be built as follows: |
| </p> |
| <ul><pre> |
| cd <NuttX-Directory>/tools |
| ./configure sim/nx |
| cd <NuttX-Directory> |
| cp <NuttX-Directory>/configs/sim/nx/defconfig-x11 .config |
| make |
| ./nuttx |
| </pre></ul> |
| <p> |
| <i>Update:</i> |
| The sim target has suffered some bit-rot over the years and so the following caveats need to be added: |
| <ul> |
| <li> |
| The X target does not build under recent Cygwin configurations. |
| </li> |
| <li> |
| The X target does not build under current Ubuntu distributions; |
| it fails to locate the X header files. |
| </li> |
| <li> |
| The sim target itself is broken under 64-bit Linux. |
| This is because the sim target is based upon some assembly language setjmp/longjmp logic that only works on 32-bit systems. |
| <p><small><b>NOTE</b>: There is a workaround in this case: |
| You can build for 32-bit execution on a 64-bit machine by adding <code>-m3</code> to the <code>CFLAGS</code> and <code>-m32 -m elf_i386</code> to the <code>LDFLAGS</code>. |
| See the patch file <code>0001-Quick-hacks-to-build-sim-nsh-ostest-on-x86_64-as-32-.patch</code> |
| that can be found in NuttX <a href="http://tech.groups.yahoo.com/group/nuttx/files">files</a>. |
| </small></p> |
| </li> |
| </ul> |
| </p> |
| </li> |
| </ol> |
| <p> |
| Why isn't this configuration the default? Because not all systems the use NX support X. |
| </p> |
| |
| <p><b>Test Coverage</b>. |
| At present, <code>examples/nx</code>t only exercises a subset of NX; |
| the remainder is essentially untested. |
| The following table describes the testing performed on each NX API: |
| </p> |
| |
| <center><h2>Table C.1: <a name="nxglibcoverage">NXGLIB API Test Coverage</a></h2></center> |
| <center><table border="1" width="80%"> |
| <tr> |
| <th width="40%">Function</th> |
| <th width="60%">Special Setup/Notes</th> |
| <th width="5%">Verified</th></tr> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrgb2yuv"><code>nxgl_rgb2yuv()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglyuv2rgb"><code>nxgl_yuv2rgb()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectcopy"><code>nxgl_rectcopy()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectoffset"><code>nxgl_rectoffset()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglvectoradd"><code>nxgl_vectoradd()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglvectorsubtract"><code>nxgl_vectorsubtract()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectintersect"><code>nxgl_rectintersect()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectunion"><code>nxgl_rectunion()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglnonintersecting"><code>nxgl_nonintersecting()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectoverlap"><code>nxgl_rectoverlap()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectinside"><code>nxgl_rectinside()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrectsize"><code>nxgl_rectsize()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglnullrect"><code>nxgl_nullrect()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrunoffset"><code>nxgl_runoffset()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglruncopy"><code>nxgl_runcopy()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxgltrapoffset"><code>nxgl_trapoffset()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxgltrapcopy"><code>nxgl_trapcopy()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglcolorcopy"><code>nxgl_colorcopy</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| </table></center> |
| |
| |
| <center><h2>Table C.2: <a name="nxcbcoverage">NX Server Callbacks Test Coverage</a></h2></center> |
| <center><table border="1" width="80%"> |
| <tr> |
| <th width="40%">Function</th> |
| <th width="60%">Special Setup/Notes</th> |
| <th width="5%">Verified</th></tr> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxcbredraw"><code>redraw()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxcbposition"><code>position()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxcbmousein"><code>mousein()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxcbkbdin"><code>kbdin()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| </table></center> |
| |
| <center><h2>Table C.3: <a name="nxcoverage">NX API Test Coverage</a></h2></center> |
| <center><table border="1" width="80%"> |
| <tr> |
| <th width="40%">Function</th> |
| <th width="60%">Special Setup/Notes</th> |
| <th width="5%">Verified</th></tr> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxruninstance"><code>nx_runinstance()</code></a></td> |
| <td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the |
| <code><NuttX-Directory>/.config</code> file </td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxconnectinstance"><code>nx_connectinstance()</code></a></td> |
| <td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the |
| <code><NuttX-Directory>/.config</code> file </td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxopen"><code>nx_open()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxdisconnect"><code>nx_disconnect()</code></a></td> |
| <td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the |
| <code><NuttX-Directory>/.config</code> file </td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxclose"><code>nx_close()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxeventhandler"><code>nx_eventhandler()</code></a></td> |
| <td>Change to <code>CONFIG_NX_MULTIUSER=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxeventnotify"><code>nx_eventnotify()</code></a></td> |
| <td>This is not used in the current version of <code>examples/nx</code>, |
| was tested in a previous version)</td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxopenwindow"><code>nx_openwindow()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| </td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxclosewindow"><code>nx_closewindow()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxrequestbkgd"><code>nx_requestbkgd()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxreleasebkgd"><code>nx_releasebkgd()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxgetposition"><code>nx_getposition()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxsetposition"><code>nx_setposition()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxsetsize"><code>nx_setsize()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxraise"><code>nx_raise()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxlower"><code>nx_lower()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfill"><code>nx_fill()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfilltrapezoid"><code>nx_filltrapezoid()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxglrgb2yuv"><code>nx_setbgcolor()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxmove"><code>nx_move()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file</td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxbitmap"><code>nx_bitmap()</code></a></td> |
| <td>Change to <code>CONFIG_EXAMPLES_NX_RAWWINDOWS=y</code> in the |
| <code><NuttX-Directory>/.config</code> file.</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxkbdin"><code>nx_kbdin()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxmousein"><code>nx_mousein()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| </table></center> |
| |
| |
| <center><h2>Table C.4: <a name="nxtkcoverage">NXTK API Test Coverage</a></h2></center> |
| <center><table border="1" width="80%"> |
| <tr> |
| <th width="40%">Function</th> |
| <th width="60%">Special Setup/Notes</th> |
| <th width="5%">Verified</th></tr> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkopenwindow"><code>nxtk_openwindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkclosewindow"><code>nxtk_closewindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkgetposition"><code>nxtk_getposition()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtksetposition"><code>nxtk_setposition()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtksetsize"><code>nxtk_setsize()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkraise"><code>nxtk_raise()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtklower"><code>nxtk_lower()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkfillwindow"><code>nxtk_fillwindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkfilltrapwindow"><code>nxtk_filltrapwindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkmovewindow"><code>nxtk_movewindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkbitmapwindow"><code>nxtk_bitmapwindow()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkopentoolbar"><code>nxtk_opentoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkclosetoolbar"><code>nxtk_closetoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkfilltoolbar"><code>nxtk_filltoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkfilltraptoolbar"><code>nxtk_filltraptoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkmovetoolbar"><code>nxtk_movetoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxtkbitmaptoolbar"><code>nxtk_bitmaptoolbar()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| </table></center> |
| |
| <center><h2>Table C.5: <a name="nxfontscoverage">NXFONTS API Test Coverage</a></h2></center> |
| <center><table border="1" width="80%"> |
| <tr> |
| <th width="40%">Function</th> |
| <th width="60%">Special Setup/Notes</th> |
| <th width="5%">Verified</th></tr> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfgetfontset"><code>nxf_getfontset()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfgetbitmap"><code>nxf_getbitmap()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_2bpp()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_4bpp()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_8bpp()</code></a></td> |
| <td>Use <code>defconfig</code> when building.</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_16bpp()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_24bpp()</code></a></td> |
| <td><br></td> |
| <td align="center" bgcolor="lightgrey">NO</td> |
| </tr> |
| <tr> |
| <td align="left" valign="top"><a href="#nxfconvertbpp"><code>nxf_convert_32bpp()</code></a></td> |
| <td>Use <code>defconfig-x11</code> when building.</td> |
| <td align="center" bgcolor="skyblue">YES</td> |
| </tr> |
| </table></center> |
| |
| </body> |
| </html> |
| |