summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-11-30 16:46:21 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-11-30 16:46:21 +0000
commit9560a9c61336f114585563c55bf5fc64522710ef (patch)
tree201af1bfe304382a915caeb43e732051d4246552
parentdfe8da156b2a2e0da650805c425af00ec4ed1d55 (diff)
downloadnuttx-9560a9c61336f114585563c55bf5fc64522710ef.tar.gz
nuttx-9560a9c61336f114585563c55bf5fc64522710ef.tar.bz2
nuttx-9560a9c61336f114585563c55bf5fc64522710ef.zip
Add X11 simulated framebuffer
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1359 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/arch/sim/src/Makefile4
-rw-r--r--nuttx/arch/sim/src/up_framebuffer.c31
-rw-r--r--nuttx/arch/sim/src/up_x11framebuffer.c413
-rw-r--r--nuttx/configs/ntosd-dm320/README.txt30
-rw-r--r--nuttx/configs/sim/README.txt17
-rw-r--r--nuttx/configs/sim/nx/defconfig1
-rw-r--r--nuttx/configs/sim/nx/defconfig-x11458
7 files changed, 937 insertions, 17 deletions
diff --git a/nuttx/arch/sim/src/Makefile b/nuttx/arch/sim/src/Makefile
index 765a92aa1..6897f2f63 100644
--- a/nuttx/arch/sim/src/Makefile
+++ b/nuttx/arch/sim/src/Makefile
@@ -45,7 +45,7 @@ CSRCS = up_initialize.c up_idle.c up_interruptcontext.c \
up_releasepending.c up_reprioritizertr.c \
up_exit.c up_schedulesigaction.c up_allocateheap.c \
up_devconsole.c up_framebuffer.c
-HOSTSRCS = up_stdio.c
+HOSTSRCS = up_stdio.c up_x11framebuffer.c
ifeq ($(CONFIG_FS_FAT),y)
CSRCS += up_blockdevice.c up_deviceimage.c
endif
@@ -63,7 +63,7 @@ SRCS = $(ASRCS) $(CSRCS) $(HOSTSRCS)
OBJS = $(AOBJS) $(COBJS) $(HOSTOBJS)
LDFLAGS = $(ARCHSCRIPT)
-STDLIBS = -lc
+STDLIBS = -lX11 -lXext -lc
ifeq ($(CONFIG_FS_FAT),y)
STDLIBS += -lz
endif
diff --git a/nuttx/arch/sim/src/up_framebuffer.c b/nuttx/arch/sim/src/up_framebuffer.c
index 31bb1d459..f81a5512b 100644
--- a/nuttx/arch/sim/src/up_framebuffer.c
+++ b/nuttx/arch/sim/src/up_framebuffer.c
@@ -114,6 +114,21 @@ static int up_setcursor(FAR struct fb_vtable_s *vtable, FAR struct fb_setcursor_
#endif
/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#ifdef CONFIG_SIM_X11FB
+extern int up_x11initialize(unsigned short width, unsigned short height,
+ void **fbmem, unsigned int *fblen, unsigned char *bpp,
+ unsigned short *stride);
+#ifdef CONFIG_FB_CMAP
+extern int up_x11cmap(unsigned short first, unsigned short len,
+ unsigned char *red, unsigned char *green,
+ unsigned char *blue, unsigned char *transp)
+#endif
+#endif
+
+/****************************************************************************
* Private Data
****************************************************************************/
@@ -129,6 +144,7 @@ static const struct fb_videoinfo_s g_videoinfo =
.nplanes = 1,
};
+#ifndef CONFIG_SIM_X11FB
/* This structure describes the single, simulated color plane */
static const struct fb_planeinfo_s g_planeinfo =
@@ -138,6 +154,11 @@ static const struct fb_planeinfo_s g_planeinfo =
.stride = FB_WIDTH,
.bpp = CONFIG_SIM_FBBPP,
};
+#else
+/* This structure describes the single, X11 color plane */
+
+static struct fb_planeinfo_s g_planeinfo;
+#endif
/* Simulated RGB mapping */
@@ -224,6 +245,9 @@ static int up_getplaneinfo(FAR struct fb_vtable_s *vtable, int planeno,
#ifdef CONFIG_FB_CMAP
static int up_getcmap(FAR struct fb_vtable_s *vtable, FAR struct fb_cmap_s *cmap)
{
+#ifdef CONFIG_SIM_X11FB
+ return up_x11cmap(cmap->start, cmap->len, cmap->red, cmap->green, cmap->blue, cmap->transp);
+#else
int len
int i;
@@ -244,6 +268,7 @@ static int up_getcmap(FAR struct fb_vtable_s *vtable, FAR struct fb_cmap_s *cmap
}
dbg("Returning EINVAL\n");
return -EINVAL;
+#endif
}
#endif
@@ -345,7 +370,13 @@ static int up_setcursor(FAR struct fb_vtable_s *vtable,
int up_fbinitialize(void)
{
+#ifdef CONFIG_SIM_X11FB
+ return up_x11initialize(CONFIG_SIM_FBWIDTH, CONFIG_SIM_FBHEIGHT,
+ &g_planeinfo.fbmem, &g_planeinfo.fblen,
+ &g_planeinfo.bpp, &g_planeinfo.stride);
+#else
return OK;
+#endif
}
/****************************************************************************
diff --git a/nuttx/arch/sim/src/up_x11framebuffer.c b/nuttx/arch/sim/src/up_x11framebuffer.c
new file mode 100644
index 000000000..d19a56f80
--- /dev/null
+++ b/nuttx/arch/sim/src/up_x11framebuffer.c
@@ -0,0 +1,413 @@
+/****************************************************************************
+ * arch/sim/src/up_framebuffer.c
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#define CONFIG_SIM_X11NOSHM 1
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <sys/ipc.h>
+
+#ifndef CONFIG_SIM_X11NOSHM
+# include <sys/shm.h>
+# include <X11/extensions/XShm.h>
+#endif
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Type Declarations
+ ***************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+static Display *g_display;
+static int g_screen;
+static Window g_window;
+static GC g_gc;
+#ifndef CONFIG_SIM_X11NOSHM
+static XShmSegmentInfo g_xshminfo;
+static int g_xerror;
+#endif
+static XImage *g_image;
+static unsigned char *g_framebuffer;
+static unsigned short g_fbpixelwidth;
+static unsigned short g_fbpixelheight;
+static int g_shmcheckpoint = 0;
+static int b_useshm;
+
+/****************************************************************************
+ * Name: up_x11createframe
+ ***************************************************************************/
+
+static inline int up_x11createframe(void)
+{
+ XGCValues gcval;
+ char *argv[2] = { "nuttx", NULL };
+ char *winName = "NuttX";
+ char *iconName = "NX";
+ XTextProperty winprop;
+ XTextProperty iconprop;
+ XSizeHints hints;
+
+ g_display = XOpenDisplay(NULL);
+ if (g_display == NULL)
+ {
+ printf("Unable to open display.\n");
+ return -1;
+ }
+
+ g_screen = DefaultScreen(g_display);
+ g_window = XCreateSimpleWindow(g_display, DefaultRootWindow(g_display),
+ 0, 0, g_fbpixelwidth, g_fbpixelheight, 2,
+ BlackPixel(g_display, g_screen),
+ BlackPixel(g_display, g_screen));
+
+ XStringListToTextProperty(&winName, 1, &winprop);
+ XStringListToTextProperty(&iconName, 1, &iconprop);
+
+ hints.flags = PSize | PMinSize | PMaxSize;
+ hints.width = hints.min_width = hints.max_width = g_fbpixelwidth;
+ hints.height= hints.min_height = hints.max_height = g_fbpixelheight;
+
+ XSetWMProperties(g_display, g_window, &winprop, &iconprop, argv, 1,
+ &hints, NULL, NULL);
+
+ XMapWindow(g_display, g_window);
+ XSelectInput(g_display, g_window,
+ ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask | KeyPressMask | ExposureMask);
+ gcval.graphics_exposures = 0;
+ g_gc = XCreateGC(g_display, g_window, GCGraphicsExposures, &gcval);
+ return 0;
+}
+
+/****************************************************************************
+ * Name: up_x11errorhandler
+ ***************************************************************************/
+
+#ifndef CONFIG_SIM_X11NOSHM
+static int up_x11errorhandler(Display *display, XErrorEvent *event)
+{
+ g_xerror = 1;
+ return 0;
+}
+#endif
+
+/****************************************************************************
+ * Name: up_x11traperrors
+ ***************************************************************************/
+
+#ifndef CONFIG_SIM_X11NOSHM
+static void up_x11traperrors(void)
+{
+ g_xerror = 0;
+ XSetErrorHandler(up_x11errorhandler);
+}
+#endif
+
+/****************************************************************************
+ * Name: up_x11untraperrors
+ ***************************************************************************/
+
+#ifndef CONFIG_SIM_X11NOSHM
+static int up_x11untraperrors(void)
+{
+ XSync(g_display,0);
+ XSetErrorHandler(NULL);
+ return g_xerror;
+}
+#endif
+
+/****************************************************************************
+ * Name: up_x11uninitialize
+ ***************************************************************************/
+
+void up_x11uninitialize(void)
+{
+ fprintf(stderr, "Uninitalizing\n");
+#ifndef CONFIG_SIM_X11NOSHM
+ if (g_shmcheckpoint > 4)
+ {
+ XShmDetach(g_display, &g_xshminfo);
+ }
+
+ if (g_shmcheckpoint > 3)
+ {
+ shmdt(g_xshminfo.shmaddr);
+ }
+
+ if (g_shmcheckpoint > 2)
+ {
+ shmctl(g_xshminfo.shmid, IPC_RMID, 0);
+ }
+#endif
+
+ if (g_shmcheckpoint > 1)
+ {
+ XDestroyImage(g_image);
+ if (!b_useshm)
+ {
+ free(g_framebuffer);
+ }
+ }
+
+ if (g_shmcheckpoint > 0)
+ {
+ g_shmcheckpoint = 1;
+ }
+ XCloseDisplay(g_display);
+}
+
+/****************************************************************************
+ * Name: up_x11mapsharedmem
+ ***************************************************************************/
+
+static inline int up_x11mapsharedmem(int bpp, unsigned int fblen)
+{
+#ifndef CONFIG_SIM_X11NOSHM
+ Status result;
+#endif
+
+ atexit(up_x11uninitialize);
+ g_shmcheckpoint = 1;
+ b_useshm = 0;
+
+#ifndef CONFIG_SIM_X11NOSHM
+ if (XShmQueryExtension(g_display))
+ {
+ b_useshm = 1;
+ printf("Using shared memory.\n");
+
+ up_x11traperrors();
+ g_image = XShmCreateImage(g_display, DefaultVisual(g_display, g_screen),
+ bpp, ZPixmap, NULL, &g_xshminfo,
+ g_fbpixelwidth, g_fbpixelheight);
+ if (up_x11untraperrors())
+ {
+ up_x11uninitialize();
+ goto shmerror;
+ }
+ if (!g_image)
+ {
+ fprintf(stderr,"Unable to create g_image.");
+ return -1;
+ }
+ g_shmcheckpoint++;
+
+ g_xshminfo.shmid = shmget(IPC_PRIVATE,
+ g_image->bytes_per_line * g_image->height,
+ IPC_CREAT | 0777);
+ if (g_xshminfo.shmid < 0)
+ {
+ up_x11uninitialize();
+ goto shmerror;
+ }
+ g_shmcheckpoint++;
+
+ g_image->data = (char *) shmat(g_xshminfo.shmid, 0, 0);
+ if (g_image->data == ((char *) -1))
+ {
+ up_x11uninitialize();
+ goto shmerror;
+ }
+ g_shmcheckpoint++;
+
+ g_xshminfo.shmaddr = g_image->data;
+ g_xshminfo.readOnly = 0;
+
+ up_x11traperrors();
+ result = XShmAttach(g_display, &g_xshminfo);
+ if (up_x11untraperrors() || !result)
+ {
+ up_x11uninitialize();
+ goto shmerror;
+ }
+
+ g_shmcheckpoint++;
+
+ }
+ else
+#endif
+ if (!b_useshm)
+ {
+#ifndef CONFIG_SIM_X11NOSHM
+shmerror:
+#endif
+ b_useshm = 0;
+
+ g_framebuffer = (unsigned char*)malloc(fblen);
+
+ g_image = XCreateImage(g_display, DefaultVisual(g_display,g_screen), bpp,
+ ZPixmap, 0, (char *) g_framebuffer, g_fbpixelwidth, g_fbpixelheight,
+ 8, 0);
+
+ if (g_image == NULL)
+ {
+ fprintf(stderr, "Unable to create g_image\n");
+ return -1;
+ }
+
+ g_shmcheckpoint++;
+ }
+ return 0;
+}
+
+/****************************************************************************
+ * Name: up_x11update
+ ***************************************************************************/
+
+static void up_x11update(void)
+{
+#ifndef CONFIG_SIM_X11NOSHM
+ if (b_useshm)
+ {
+ XShmPutImage(g_display, g_window, g_gc, g_image, 0, 0, 0, 0,
+ g_fbpixelwidth, g_fbpixelheight, 0);
+ }
+ else
+#endif
+ {
+ XPutImage(g_display, g_window, g_gc, g_image, 0, 0, 0, 0,
+ g_fbpixelwidth, g_fbpixelheight);
+ }
+ XSync(g_display, 0);
+}
+
+/****************************************************************************
+ * Public Functions
+ ***************************************************************************/
+
+/****************************************************************************
+ * Name: up_x11initialize
+ *
+ * Description:
+ * Make an X11 window look like a frame buffer.
+ *
+ ***************************************************************************/
+
+int up_x11initialize(unsigned short width, unsigned short height,
+ void **fbmem, unsigned int *fblen, unsigned char *bpp,
+ unsigned short *stride)
+{
+ XWindowAttributes windowAttributes;
+ int ret;
+
+ /* Save inputs */
+
+ g_fbpixelwidth = width;
+ g_fbpixelheight = height;
+
+ /* Create the X11 window */
+
+ ret = up_x11createframe();
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ /* Determine the supported pixel bpp of the current window */
+
+ XGetWindowAttributes(g_display, DefaultRootWindow(g_display), &windowAttributes);
+ printf("Pixel bpp is %d bits\n", windowAttributes.depth);
+
+ *bpp = windowAttributes.depth;
+ *stride = (windowAttributes.depth * width / 8);
+ *fbmem = (void*)g_framebuffer;
+ *fblen = (*stride * height);
+
+ /* Map the window to shared memory */
+
+ up_x11mapsharedmem(windowAttributes.depth, *fblen);
+ return 0;
+}
+
+/****************************************************************************
+ * Name: up_x11cmap
+ ***************************************************************************/
+
+int up_x11cmap(unsigned short first, unsigned short len,
+ unsigned char *red, unsigned char *green,
+ unsigned char *blue, unsigned char *transp)
+{
+ Colormap cMap;
+ int ndx;
+
+ printf("Creating Colormap\n");
+
+ /* Convert each color to X11 scaling */
+
+ cMap = DefaultColormap(g_display, g_screen);
+ for (ndx = first; ndx < first + len; ndx++)
+ {
+ XColor color;
+
+ /* Convert to RGB. In the NuttX cmap, each component
+ * ranges from 0-255; for X11 the range is 0-65536 */
+
+ color.red = (short)(*red++) << 8;
+ color.green = (short)(*green++) << 8;
+ color.blue = (short)(*blue++) << 8;
+ color.flags = DoRed | DoGreen | DoBlue;
+
+ /* Then allocate a color for this selection */
+
+ if (!XAllocColor(g_display, cMap, &color))
+ {
+ fprintf(stderr, "Failed to allocate color%d\n", ndx);
+ return -1;
+ }
+ }
+
+ return 0;
+}
diff --git a/nuttx/configs/ntosd-dm320/README.txt b/nuttx/configs/ntosd-dm320/README.txt
index 268f1732c..7158e34e2 100644
--- a/nuttx/configs/ntosd-dm320/README.txt
+++ b/nuttx/configs/ntosd-dm320/README.txt
@@ -118,11 +118,12 @@ can be selected as follow:
Where <subdir> is one of the following:
-ostest
-^^^^^^
+nettest
+^^^^^^^
-This configuration directory, performs a simple OS test using
-examples/ostest.
+This alternative configuration directory may be used to
+enable networking using the OSDs DM9000A Ethernet interface.
+It uses examples/nettest to excercise the TCP/IP network.
nsh
^^^
@@ -130,12 +131,11 @@ nsh
Configures the NuttShell (nsh) located at examples/nsh. The
Configuration enables both the serial and telnetd NSH interfaces.
-nettest
-^^^^^^^
+ostest
+^^^^^^
-This alternative configuration directory may be used to
-enable networking using the OSDs DM9000A Ethernet interface.
-It uses examples/nettest to excercise the TCP/IP network.
+This configuration directory, performs a simple OS test using
+examples/ostest.
poll
^^^^
@@ -143,18 +143,18 @@ poll
This configuration exercises the poll()/select() text at
examples/poll
-uip
-^^^
-
-This configuration file demonstrates the tiny webserver
-at examples/uip.
-
udp
^^^
This alternative configuration directory is similar to nettest
except that is use examples/upd to exercise UDP.
+uip
+^^^
+
+This configuration file demonstrates the tiny webserver
+at examples/uip.
+
Configuration Options
^^^^^^^^^^^^^^^^^^^^^
diff --git a/nuttx/configs/sim/README.txt b/nuttx/configs/sim/README.txt
index 511a3b80f..8e8fe42f1 100644
--- a/nuttx/configs/sim/README.txt
+++ b/nuttx/configs/sim/README.txt
@@ -34,6 +34,23 @@ nx
cd <nuttx-directory>/tools
./Configure.sh sim/nx
+ Special simulated framebuffer configuration options:
+
+ CONFIG_SIM_X11FB - Use X11 window for framebuffer
+ CONFIG_SIM_FBHEIGHT - Height of the framebuffer in pixels
+ CONFIG_SIM_FBWIDTH - Width of the framebuffer in pixels.
+ CONFIG_SIM_FBBPP - Pixel depth in bits
+
+ NOTES:
+ - If CONFIG_SIM_X11FB is selected then CONFIG_SIM_FBBPP must
+ match the resolution of the display.
+ - For whatever value of CONFIG_SIM_FBBPP is selected, then
+ the corresponing CONFIG_NXGLIB_DISABLE_*BPP setting must
+ not be disabled.
+ - The default in defconfig is to use a generic memory buffer
+ for the framebuffer. defconfig-x11 is an example with X11
+ support enabled.
+
ostest
The "standard" NuttX examples/ostest configuration. This
diff --git a/nuttx/configs/sim/nx/defconfig b/nuttx/configs/sim/nx/defconfig
index 126727b5a..1eaa2ca54 100644
--- a/nuttx/configs/sim/nx/defconfig
+++ b/nuttx/configs/sim/nx/defconfig
@@ -51,6 +51,7 @@ CONFIG_ARCH_BOARD_SIM=y
#
# Simulated framebuffer configuration
+CONFIG_SIM_X11FB=n
CONFIG_SIM_FBWIDTH=480
CONFIG_SIM_FBHEIGHT=240
CONFIG_SIM_FBBPP=8
diff --git a/nuttx/configs/sim/nx/defconfig-x11 b/nuttx/configs/sim/nx/defconfig-x11
new file mode 100644
index 000000000..58ae6a81d
--- /dev/null
+++ b/nuttx/configs/sim/nx/defconfig-x11
@@ -0,0 +1,458 @@
+############################################################################
+# sim/nx/defconfig
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+#
+# Architecture selection
+#
+# CONFIG_ARCH - identifies the arch subdirectory and, hence, the
+# processor architecture.
+# CONFIG_ARCH_name - for use in C code. This identifies the particular
+# processor architecture (CONFIG_ARCH_SIM).
+# CONFIG_ARCH_BOARD - identifies the configs subdirectory and, hence,
+# the board that supports the particular chip or SoC.
+# CONFIG_ARCH_BOARD_name - for use in C code
+# CONFIG_ENDIAN_BIG - define if big endian (default is little endian)
+#
+CONFIG_ARCH=sim
+CONFIG_ARCH_SIM=y
+CONFIG_ARCH_BOARD=sim
+CONFIG_ARCH_BOARD_SIM=y
+
+#
+# Simulated framebuffer configuration
+CONFIG_SIM_X11FB=y
+CONFIG_SIM_FBWIDTH=480
+CONFIG_SIM_FBHEIGHT=240
+CONFIG_SIM_FBBPP=24
+
+#
+# General OS setup
+#
+# CONFIG_EXAMPLE - identifies the subdirectory in examples
+# that will be used in the build
+# CONFIG_DEBUG - enables built-in debug options
+# CONFIG_DEBUG_VERBOSE - enables verbose debug output
+# CONFIG_MM_REGIONS - If the architecture includes multiple
+# regions of memory to allocate from, this specifies the
+# number of memory regions that the memory manager must
+# handle and enables the API mm_addregion(start, end);
+# CONFIG_ARCH_LOWPUTC - architecture supports low-level, boot
+# time console output
+# CONFIG_TICKS_PER_MSEC - The default system timer is 100Hz
+# or TICKS_PER_MSEC=10. This setting may be defined to
+# inform NuttX that the processor hardware is providing
+# system timer interrupts at some interrupt interval other
+# than 10 msec.
+# CONFIG_RR_INTERVAL - The round robin timeslice will be set
+# this number of milliseconds; Round robin scheduling can
+# be disabled by setting this value to zero.
+# CONFIG_SCHED_INSTRUMENTATION - enables instrumentation in
+# scheduler to monitor system performance
+# CONFIG_TASK_NAME_SIZE - Spcifies that maximum size of a
+# task name to save in the TCB. Useful if scheduler
+# instrumentation is selected. Set to zero to disable.
+# CONFIG_JULIAN_TIME - Enables Julian time conversions
+# CONFIG_START_YEAR, CONFIG_START_MONTH, CONFIG_START_DAY -
+# Used to initialize the internal time logic.
+# CONFIG_DEV_CONSOLE - Set if architecture-specific logic
+# provides /dev/console. Enables stdout, stderr, stdin.
+# CONFIG_DEV_LOWCONSOLE - Use the simple, low-level serial console
+# driver (minimul support)
+#
+CONFIG_EXAMPLE=nx
+CONFIG_DEBUG=y
+CONFIG_DEBUG_VERBOSE=y
+CONFIG_DEBUG_GRAPHICS=y
+CONFIG_MM_REGIONS=1
+CONFIG_ARCH_LOWPUTC=y
+CONFIG_RR_INTERVAL=0
+CONFIG_SCHED_INSTRUMENTATION=n
+CONFIG_TASK_NAME_SIZE=32
+CONFIG_START_YEAR=2008
+CONFIG_START_MONTH=11
+CONFIG_START_DAY=28
+CONFIG_JULIAN_TIME=n
+CONFIG_DEV_CONSOLE=y
+CONFIG_DEV_LOWCONSOLE=n
+
+#
+# The following can be used to disable categories of
+# APIs supported by the OS. If the compiler supports
+# weak functions, then it should not be necessary to
+# disable functions unless you want to restrict usage
+# of those APIs.
+#
+# There are certain dependency relationships in these
+# features.
+#
+# o mq_notify logic depends on signals to awaken tasks
+# waiting for queues to become full or empty.
+# o pthread_condtimedwait() depends on signals to wake
+# up waiting tasks.
+#
+CONFIG_DISABLE_CLOCK=n
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_DISABLE_PTHREAD=y
+CONFIG_DISABLE_SIGNALS=y
+CONFIG_DISABLE_MQUEUE=y
+CONFIG_DISABLE_MOUNTPOINT=y
+CONFIG_DISABLE_ENVIRON=y
+CONFIG_DISABLE_POLL=y
+
+#
+# Misc libc settings
+#
+# CONFIG_NOPRINTF_FIELDWIDTH - sprintf-related logic is a
+# little smaller if we do not support fieldwidthes
+#
+CONFIG_NOPRINTF_FIELDWIDTH=n
+
+#
+# Allow for architecture optimized implementations
+#
+# The architecture can provide optimized versions of the
+# following to improve sysem performance
+#
+CONFIG_ARCH_MEMCPY=n
+CONFIG_ARCH_MEMCMP=n
+CONFIG_ARCH_MEMMOVE=n
+CONFIG_ARCH_MEMSET=n
+CONFIG_ARCH_STRCMP=n
+CONFIG_ARCH_STRCPY=n
+CONFIG_ARCH_STRNCPY=n
+CONFIG_ARCH_STRLEN=n
+CONFIG_ARCH_BZERO=n
+CONFIG_ARCH_KMALLOC=n
+CONFIG_ARCH_KZMALLOC=n
+CONFIG_ARCH_KFREE=n
+
+#
+# General build options
+#
+# CONFIG_RRLOAD_BINARY - make the rrload binary format used with
+# BSPs from www.ridgerun.com using the tools/mkimage.sh script
+# CONFIG_INTELHEX_BINARY - make the Intel HEX binary format
+# used with many different loaders using the GNU objcopy program
+# Should not be selected if you are not using the GNU toolchain.
+# CONFIG_RAW_BINARY - make a raw binary format file used with many
+# different loaders using the GNU objcopy program. This option
+# should not be selected if you are not using the GNU toolchain.
+# CONFIG_HAVE_LIBM - toolchain supports libm.a
+#
+CONFIG_RRLOAD_BINARY=n
+CONFIG_INTELHEX_BINARY=n
+CONFIG_RAW_BINARY=n
+CONFIG_HAVE_LIBM=y
+
+#
+# Sizes of configurable things (0 disables)
+#
+# CONFIG_MAX_TASKS - The maximum number of simultaneously
+# active tasks. This value must be a power of two.
+# CONFIG_MAX_TASK_ARGS - This controls the maximum number of
+# of parameters that a task may receive (i.e., maxmum value
+# of 'argc')
+# CONFIG_NPTHREAD_KEYS - The number of items of thread-
+# specific data that can be retained
+# CONFIG_NFILE_DESCRIPTORS - The maximum number of file
+# descriptors (one for each open)
+# CONFIG_NFILE_STREAMS - The maximum number of streams that
+# can be fopen'ed
+# CONFIG_NAME_MAX - The maximum size of a file name.
+# CONFIG_STDIO_BUFFER_SIZE - Size of the buffer to allocate
+# on fopen. (Only if CONFIG_NFILE_STREAMS > 0)
+# CONFIG_NUNGET_CHARS - Number of characters that can be
+# buffered by ungetc() (Only if CONFIG_NFILE_STREAMS > 0)
+# CONFIG_PREALLOC_MQ_MSGS - The number of pre-allocated message
+# structures. The system manages a pool of preallocated
+# message structures to minimize dynamic allocations
+# CONFIG_MQ_MAXMSGSIZE - Message structures are allocated with
+# a fixed payload size given by this settin (does not include
+# other message structure overhead.
+# CONFIG_MAX_WDOGPARMS - Maximum number of parameters that
+# can be passed to a watchdog handler
+# CONFIG_PREALLOC_WDOGS - The number of pre-allocated watchdog
+# structures. The system manages a pool of preallocated
+# watchdog structures to minimize dynamic allocations
+# CONFIG_PREALLOC_TIMERS - The number of pre-allocated POSIX
+# timer structures. The system manages a pool of preallocated
+# timer structures to minimize dynamic allocations. Set to
+# zero for all dynamic allocations.
+#
+CONFIG_MAX_TASKS=16
+CONFIG_MAX_TASK_ARGS=4
+CONFIG_NPTHREAD_KEYS=4
+CONFIG_NFILE_DESCRIPTORS=16
+CONFIG_NFILE_STREAMS=16
+CONFIG_NAME_MAX=32
+CONFIG_STDIO_BUFFER_SIZE=1024
+CONFIG_NUNGET_CHARS=2
+CONFIG_PREALLOC_MQ_MSGS=32
+CONFIG_MQ_MAXMSGSIZE=32
+CONFIG_MAX_WDOGPARMS=4
+CONFIG_PREALLOC_WDOGS=32
+CONFIG_PREALLOC_TIMERS=8
+
+#
+# FAT filesystem configuration
+# CONFIG_FS_FAT - Enable FAT filesystem support
+# CONFIG_FAT_SECTORSIZE - Max supported sector size
+# CONFIG_FS_ROMFS - Enable ROMFS filesystem support
+CONFIG_FS_FAT=n
+CONFIG_FS_ROMFS=n
+
+#
+# TCP/IP and UDP support via uIP
+# CONFIG_NET - Enable or disable all network features
+# CONFIG_NET_IPv6 - Build in support for IPv6
+# CONFIG_NSOCKET_DESCRIPTORS - Maximum number of socket descriptors per task/thread.
+# CONFIG_NET_SOCKOPTS - Enable or disable support for socket options
+# CONFIG_NET_BUFSIZE - uIP buffer size
+# CONFIG_NET_TCP - TCP support on or off
+# CONFIG_NET_TCP_CONNS - Maximum number of TCP connections (all tasks)
+# CONFIG_NET_TCP_READAHEAD_BUFSIZE - Size of TCP read-ahead buffers
+# CONFIG_NET_NTCP_READAHEAD_BUFFERS - Number of TCP read-ahead buffers (may be zero)
+# CONFIG_NET_TCPBACKLOG - Incoming connections pend in a backlog until
+# accept() is called. The size of the backlog is selected when listen() is called.
+# CONFIG_NET_MAX_LISTENPORTS - Maximum number of listening TCP ports (all tasks)
+# CONFIG_NET_UDP - UDP support on or off
+# CONFIG_NET_UDP_CHECKSUMS - UDP checksums on or off
+# CONFIG_NET_UDP_CONNS - The maximum amount of concurrent UDP connections
+# CONFIG_NET_ICMP - ICMP ping response support on or off
+# CONFIG_NET_ICMP_PING - ICMP ping request support on or off
+# CONFIG_NET_PINGADDRCONF - Use "ping" packet for setting IP address
+# CONFIG_NET_STATISTICS - uIP statistics on or off
+# CONFIG_NET_RECEIVE_WINDOW - The size of the advertised receiver's window
+# CONFIG_NET_ARPTAB_SIZE - The size of the ARP table
+# CONFIG_NET_BROADCAST - Broadcast support
+# CONFIG_NET_LLH_LEN - The link level header length
+# CONFIG_NET_FWCACHE_SIZE - number of packets to remember when looking for duplicates
+CONFIG_NET=n
+CONFIG_NET_IPv6=n
+CONFIG_NSOCKET_DESCRIPTORS=0
+CONFIG_NET_SOCKOPTS=y
+CONFIG_NET_BUFSIZE=420
+CONFIG_NET_TCP=n
+CONFIG_NET_TCP_CONNS=40
+CONFIG_NET_MAX_LISTENPORTS=40
+CONFIG_NET_UDP=n
+CONFIG_NET_UDP_CHECKSUMS=y
+#CONFIG_NET_UDP_CONNS=10
+CONFIG_NET_ICMP=n
+CONFIG_NET_ICMP_PING=n
+#CONFIG_NET_PINGADDRCONF=0
+CONFIG_NET_STATISTICS=y
+#CONFIG_NET_RECEIVE_WINDOW=
+#CONFIG_NET_ARPTAB_SIZE=8
+CONFIG_NET_BROADCAST=n
+#CONFIG_NET_LLH_LEN=14
+#CONFIG_NET_FWCACHE_SIZE=2
+
+#
+# UIP Network Utilities
+# CONFIG_NET_DHCP_LIGHT - Reduces size of DHCP
+# CONFIG_NET_RESOLV_ENTRIES - Number of resolver entries
+CONFIG_NET_DHCP_LIGHT=n
+CONFIG_NET_RESOLV_ENTRIES=4
+
+#
+# Graphics related configuration settings
+#
+# CONFIG_NXGRAPHICS
+# Enables overall support for graphics library and NX
+# CONFIG_NX_MULTIUSER
+# Configures NX in multi-user mode
+# CONFIG_NX_NPLANES
+# 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
+# CONFIG_NXGLIB_DISABLE_1BPP, CONFIG_NXGLIB_DISABLE_2BPP,
+# CONFIG_NXGLIB_DISABLE_4BPP, CONFIG_NXGLIB_DISABLE_8BPP,
+# CONFIG_NXGLIB_DISABLE_16BPP, CONFIG_NXGLIB_DISABLE_24BPP, and
+# CONFIG_NXGLIB_DISABLE_32BPP
+# NX supports a variety of pixel depths. You can save some
+# memory by disabling support for unused color depths.
+# CONFIG_NXGL_PACKEDMSFIRST
+# 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
+# CONFIG_NX_MOUSE
+# Build in support for mouse input
+# CONFIG_NX_KBD
+# Build in support of keypad/keyboard input
+#
+# NX Multi-user only options:
+#
+# CONFIG_NX_BLOCKING
+# Open the client message queues in blocking mode. In this case,
+# nx_eventhandler() will never return.
+# CONFIG_NX_MXSERVERMSGS and CONFIG_NX_MXCLIENTMSGS
+# 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 (CONFIG_PREALLOC_MQ_MSGS controls how many
+# messages are pre-allocated).
+CONFIG_NXGRAPHICS=y
+CONFIG_NX_MULTIUSER=n
+CONFIG_NX_NPLANES=1
+CONFIG_NXGLIB_DISABLE_1BPP=y
+CONFIG_NXGLIB_DISABLE_2BPP=y
+CONFIG_NXGLIB_DISABLE_4BPP=y
+CONFIG_NXGLIB_DISABLE_8BPP=y
+CONFIG_NXGLIB_DISABLE_16BPP=y
+CONFIG_NXGLIB_DISABLE_24BPP=n
+CONFIG_NXGLIB_DISABLE_32BPP=y
+CONFIG_NXGL_PACKEDMSFIRST=n
+CONFIG_NX_MOUSE=n
+CONFIG_NX_KBD=n
+CONFIG_NX_BLOCKING=n
+CONFIG_NX_MXSERVERMSGS=32
+CONFIG_NX_MXCLIENTMSGS=16
+
+#
+# Settings for examples/uip
+CONFIG_EXAMPLE_UIP_IPADDR=(192<<24|168<<16|0<<8|128)
+CONFIG_EXAMPLE_UIP_DRIPADDR=(192<<24|168<<16|0<<8|1)
+CONFIG_EXAMPLE_UIP_NETMASK=(255<<24|255<<16|255<<8|0)
+CONFIG_EXAMPLE_UIP_SMTP=n
+CONFIG_EXAMPLE_UIP_TELNETD=n
+CONFIG_EXAMPLE_UIP_WEBSERVER=y
+CONFIG_EXAMPLE_UIP_DHCPC=n
+CONFIG_EXAMPLE_UIP_WEBCLIENT=n
+
+#
+# Settings for examples/nettest
+CONFIG_EXAMPLE_NETTEST_SERVER=n
+CONFIG_EXAMPLE_NETTEST_PERFORMANCE=n
+CONFIG_EXAMPLE_NETTEST_NOMAC=n
+CONFIG_EXAMPLE_NETTEST_IPADDR=(192<<24|168<<16|0<<8|128)
+CONFIG_EXAMPLE_NETTEST_DRIPADDR=(192<<24|168<<16|0<<8|1)
+CONFIG_EXAMPLE_NETTEST_NETMASK=(255<<24|255<<16|255<<8|0)
+CONFIG_EXAMPLE_NETTEST_CLIENTIP=(192<<24|168<<16|0<<8|106)
+
+#
+# Settings for examples/ostest
+CONFIG_EXAMPLES_OSTEST_LOOPS=100
+CONFIG_EXAMPLES_OSTEST_STACKSIZE=8192
+
+#
+# Settings for examples/nsh
+#
+# CONFIG_EXAMPLES_NSH_FILEIOSIZE - Size of a static I/O buffer
+# CONFIG_EXAMPLES_NSH_STRERROR - Use strerror(errno)
+# CONFIG_EXAMPLES_NSH_LINELEN - Maximum length of one command line
+# CONFIG_EXAMPLES_NSH_STACKSIZE - Stack size to use for new threads.
+# CONFIG_EXAMPLES_NSH_NESTDEPTH - Max number of nested if-then[-else]-fi
+# CONFIG_EXAMPLES_NSH_DISABLESCRIPT - Disable scripting support
+# CONFIG_EXAMPLES_NSH_DISABLEBG - Disable background commands
+# CONFIG_EXAMPLES_NSH_ROMFSETC - Use startup script in /etc
+# CONFIG_EXAMPLES_NSH_CONSOLE - Use serial console front end
+# CONFIG_EXAMPLES_NSH_TELNET - Use telnetd console front end
+#
+# If CONFIG_EXAMPLES_NSH_TELNET is selected:
+# CONFIG_EXAMPLES_NSH_IOBUFFER_SIZE -- Telnetd I/O buffer size
+# CONFIG_EXAMPLES_NSH_DHCPC - Obtain address using DHCP
+# CONFIG_EXAMPLES_NSH_IPADDR - Provides static IP address
+# CONFIG_EXAMPLES_NSH_DRIPADDR - Provides static router IP address
+# CONFIG_EXAMPLES_NSH_NETMASK - Provides static network mask
+# CONFIG_EXAMPLES_NSH_NOMAC - Use a bogus MAC address
+#
+# If CONFIG_EXAMPLES_NSH_ROMFSETC is selected:
+# CONFIG_EXAMPLES_NSH_ROMFSMOUNTPT - ROMFS mountpoint
+# CONFIG_EXAMPLES_NSH_INITSCRIPT - Relative path to init script
+# CONFIG_EXAMPLES_NSH_ROMFSDEVNO - ROMFS RAM device minor
+# CONFIG_EXAMPLES_NSH_ROMFSSECTSIZE - ROMF sector size
+# CONFIG_EXAMPLES_NSH_FATDEVNO - FAT FS RAM device minor
+# CONFIG_EXAMPLES_NSH_FATSECTSIZE - FAT FS sector size
+# CONFIG_EXAMPLES_NSH_FATNSECTORS - FAT FS number of sectors
+# CONFIG_EXAMPLES_NSH_FATMOUNTPT - FAT FS mountpoint
+CONFIG_EXAMPLES_NSH_FILEIOSIZE=1024
+CONFIG_EXAMPLES_NSH_STRERROR=n
+CONFIG_EXAMPLES_NSH_LINELEN=80
+CONFIG_EXAMPLES_NSH_STACKSIZE=4096
+CONFIG_EXAMPLES_NSH_NESTDEPTH=3
+CONFIG_EXAMPLES_NSH_DISABLESCRIPT=n
+CONFIG_EXAMPLES_NSH_DISABLEBG=n
+CONFIG_EXAMPLES_NSH_ROMFSETC=y
+CONFIG_EXAMPLES_NSH_CONSOLE=y
+CONFIG_EXAMPLES_NSH_TELNET=n
+CONFIG_EXAMPLES_NSH_IOBUFFER_SIZE=512
+CONFIG_EXAMPLES_NSH_DHCPC=n
+CONFIG_EXAMPLES_NSH_NOMAC=n
+CONFIG_EXAMPLES_NSH_IPADDR=(10<<24|0<<16|0<<8|2)
+CONFIG_EXAMPLES_NSH_DRIPADDR=(10<<24|0<<16|0<<8|1)
+CONFIG_EXAMPLES_NSH_NETMASK=(255<<24|255<<16|255<<8|0)
+CONFIG_EXAMPLES_NSH_ROMFSMOUNTPT="/etc"
+CONFIG_EXAMPLES_NSH_INITSCRIPT="init.d/rcS"
+CONFIG_EXAMPLES_NSH_ROMFSDEVNO=1
+CONFIG_EXAMPLES_NSH_ROMFSSECTSIZE=64
+CONFIG_EXAMPLES_NSH_FATDEVNO=2
+CONFIG_EXAMPLES_NSH_FATSECTSIZE=512
+CONFIG_EXAMPLES_NSH_FATNSECTORS=1024
+CONFIG_EXAMPLES_NSH_FATMOUNTPT=/tmp
+
+#
+# Settings for examples/mount
+CONFIG_EXAMPLES_MOUNT_DEVNAME="/dev/ram0"
+#CONFIG_EXAMPLES_MOUNT_NSECTORS=2048
+#CONFIG_EXAMPLES_MOUNT_SECTORSIZE=512
+#CONFIG_EXAMPLES_MOUNT_RAMDEVNO=1
+
+#
+# Stack and heap information
+#
+# CONFIG_BOOT_FROM_FLASH - Some configurations support XIP
+# operation from FLASH.
+# CONFIG_CUSTOM_STACK - The up_ implementation will handle
+# all stack operations outside of the nuttx model.
+# CONFIG_STACK_POINTER - The initial stack pointer
+# CONFIG_IDLETHREAD_STACKSIZE - The size of the initial stack.
+# This is the thread that (1) performs the inital boot of the system up
+# to the point where user_start() is spawned, and (2) there after is the
+# IDLE thread that executes only when there is no other thread ready to
+# run.
+# CONFIG_USERMAIN_STACKSIZE - The size of the stack to allocate
+# for the main user thread that begins at the user_start() entry point.
+# CONFIG_PTHREAD_STACK_MIN - Minimum pthread stack size
+# CONFIG_PTHREAD_STACK_DEFAULT - Default pthread stack size
+# CONFIG_HEAP_BASE - The beginning of the heap
+# CONFIG_HEAP_SIZE - The size of the heap
+#
+CONFIG_BOOT_FROM_FLASH=n
+CONFIG_CUSTOM_STACK=n
+CONFIG_IDLETHREAD_STACKSIZE=4096
+CONFIG_USERMAIN_STACKSIZE=4096
+CONFIG_PTHREAD_STACK_MIN=256
+CONFIG_PTHREAD_STACK_DEFAULT=8192
+CONFIG_HEAP_BASE=
+CONFIG_HEAP_SIZE=