@@ -3177,13 +3186,16 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
graphics/nxtk
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.
+ This toolkit is built on top of NX and works with either the single-user or multi-user NX version.
See include/nuttx/nx/nxtk.h .
nuttx/../nxwidgets
The NxWidgets code is provided as a separate package located outside of the
NuttX source tree (probably at this location).
+
+ graphics/nxconsole
+ The NxConsole driver is built on top of NX and works with either the single-user or multi-user NX version.
+ See include/nuttx/nx/nxconsole.h .
@@ -3247,7 +3259,7 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
Configures NX in multi-user mode.
CONFIG_NX_BLOCKING
Open the client message queues in blocking mode. In this case,
- nx_eventhandler() will not return until a message is received and processed.
+ nx_eventhandler() will not return until a message is received and processed.
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
@@ -3337,6 +3349,37 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
+
+
+
+
+ CONFIG_NXCONSOLE_BPP :
+ - Currently, NxConsole supports only a single pixel depth.
+ This configuration setting must be provided to support that single pixel depth.
+ Default: The smallest enabled pixel depth. (see
CONFIG_NX_DISABLE_*BPP )
+ CONFIG_NXCONSOLE_NOGETRUN :
+ - NxConsole needs to know if it can read from the LCD or not.
+ If reading from the LCD is supported, then NxConsole can do more efficient scrolling.
+ Default: Supported
+
CONFIG_NXCONSOLE_MXCHARS :
+ - NxConsole needs to remember every character written to the console so that it can redraw the window.
+ This setting determines the size of some internal memory allocations used to hold the character data.
+ Default: 128.
+
CONFIG_NXCONSOLE_FONTCACHE :
+ - If this setting is defined, then caching of fonts will be supported by NxConsole.
+ Each font must be rendered from the tiny font storage format to the full display size and pixel depth.
+ If this setting is defined, then the more recently used font glyphs will be retained in a cache of size
CONFIG_NXCONSOLE_CACHESIZE .
+ Default: No font caching.
+ CONFIG_NXCONSOLE_CACHESIZE :
+ - If
CONFIG_NXCONSOLE_FONTCACHE , then this setting will control the size of the font cache (in number of glyphs). Default: 16.
+ CONFIG_NXCONSOLE_LINESEPARATION :
+ - This the space (in rows) between each row of test. Default: 2
+
CONFIG_NXCONSOLE_NOWRAP :
+ - By default, lines will wrap when the test reaches the right hand side of the window.
+ This setting can be defining to change this behavior so that the text is simply truncated until a new line is encountered.
+
+
+
@@ -3457,10 +3500,10 @@ genfontsources:
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
-NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
+NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
endif
ifeq ($(CONFIG_NXFONT_MYFONT),y)
-NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
+NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
endif
diff --git a/configs/sim/README.txt b/configs/sim/README.txt
index c7005271cf..71542a1b4e 100644
--- a/configs/sim/README.txt
+++ b/configs/sim/README.txt
@@ -364,6 +364,20 @@ nx11
CONFG_NX_MULTIUSER=y
CONFIG_DISABLE_MQUEUE=n
+ examples/nxconsole
+ ------------------
+ This configuration is also set up to use the examples/nxconsole
+ test instead of examples/nx. Simply comment out the following
+ in the appconfig file:
+
+ -CONFIGURED_APPS += examples/nx
+ +#CONFIGURED_APPS += examples/nx
+
+ And uncomment the following:
+
+ -#CONFIGURED_APPS += examples/nxconsole
+ +CONFIGURED_APPS += examples/nxconsole
+
ostest
Description
diff --git a/configs/sim/nx/appconfig b/configs/sim/nx/appconfig
index 12a1f4ac9c..de984c1f62 100644
--- a/configs/sim/nx/appconfig
+++ b/configs/sim/nx/appconfig
@@ -1,8 +1,8 @@
############################################################################
# configs/sim/nx/appconfig
#
-# Copyright (C) 2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt
+# Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -34,6 +34,9 @@
############################################################################
# Path to example in apps/examples containing the user_start entry point
+# Various NX tests can be supported, simply comment-out examples/nx and
+# uncomment the test you wish to perform
CONFIGURED_APPS += examples/nx
+#CONFIGURED_APPS += examples/nxconsole
diff --git a/configs/sim/nx/defconfig b/configs/sim/nx/defconfig
index d5977f3f55..b301f869b7 100644
--- a/configs/sim/nx/defconfig
+++ b/configs/sim/nx/defconfig
@@ -1,8 +1,8 @@
############################################################################
# sim/nx/defconfig
#
-# Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt
+# Copyright (C) 2008-2010, 2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -51,6 +51,7 @@ CONFIG_ARCH_BOARD_SIM=y
#
# Simulated framebuffer configuration
+#
CONFIG_SIM_X11FB=n
CONFIG_SIM_FBWIDTH=480
CONFIG_SIM_FBHEIGHT=240
@@ -269,6 +270,7 @@ CONFIG_PREALLOC_TIMERS=8
#
# Framebuffer driver options
+#
CONFIG_FB_CMAP=n
CONFIG_FB_HWCURSOR=n
CONFIG_FB_HWCURSORIMAGE=n
@@ -277,14 +279,17 @@ CONFIG_FB_HWCURSORIMAGE=n
#
# 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.
@@ -331,8 +336,10 @@ CONFIG_NET_BROADCAST=n
#
# 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
@@ -414,8 +421,48 @@ CONFIG_NX_BLOCKING=y
CONFIG_NX_MXSERVERMSGS=32
CONFIG_NX_MXCLIENTMSGS=16
+#
+# NxConsole Configuration Settings:
+#
+# CONFIG_NXCONSOLE_BPP
+# Currently, NxConsole supports only a single pixel depth. This
+# configuration setting must be provided to support that single pixel depth.
+# Default: The smallest enabled pixel depth. (see CONFIG_NX_DISABLE_*BPP)
+# CONFIG_NXCONSOLE_NOGETRUN
+# NxConsole needs to know if it can read from the LCD or not. If reading
+# from the LCD is supported, then NxConsole can do more efficient
+# scrolling. Default: Supported
+# CONFIG_NXCONSOLE_MXCHARS
+# NxConsole needs to remember every character written to the console so
+# that it can redraw the window. This setting determines the size of some
+# internal memory allocations used to hold the character data. Default: 128.
+# CONFIG_NXCONSOLE_FONTCACHE
+# If this setting is defined, then caching of fonts will be supported by
+# NxConsole. Each font must be rendered from the tiny font storage format
+# to the full display size and pixel depth. If this setting is defined, then
+# the more recently used font glyphs will be retained in a cache of size
+# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
+# CONFIG_NXCONSOLE_CACHESIZE
+# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
+# of the font cache (in number of glyphs). Default: 16.
+# CONFIG_NXCONSOLE_LINESEPARATION
+# This the space (in rows) between each row of test. Default: 2
+# CONFIG_NXCONSOLE_NOWRAP
+# By default, lines will wrap when the test reaches the right hand side
+# of the window. This setting can be defining to change this behavior so
+# that the text is simply truncated until a new line is encountered.
+#
+CONFIG_NXCONSOLE_BPP=8
+# CONFIG_NXCONSOLE_NOGETRUN
+# CONFIG_NXCONSOLE_MXCHARS
+# CONFIG_NXCONSOLE_FONTCACHE
+# CONFIG_NXCONSOLE_CACHESIZE
+# CONFIG_NXCONSOLE_LINESEPARATION
+# CONFIG_NXCONSOLE_NOWRAP
+
#
# 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)
@@ -423,6 +470,7 @@ CONFIG_EXAMPLE_UIP_DHCPC=n
#
# Settings for examples/nettest
+#
CONFIG_EXAMPLE_NETTEST_SERVER=n
CONFIG_EXAMPLE_NETTEST_PERFORMANCE=n
CONFIG_EXAMPLE_NETTEST_NOMAC=n
@@ -433,6 +481,7 @@ 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
@@ -466,6 +515,7 @@ CONFIG_EXAMPLES_OSTEST_STACKSIZE=8192
# CONFIG_NSH_FATSECTSIZE - FAT FS sector size
# CONFIG_NSH_FATNSECTORS - FAT FS number of sectors
# CONFIG_NSH_FATMOUNTPT - FAT FS mountpoint
+#
CONFIG_NSH_FILEIOSIZE=1024
CONFIG_NSH_STRERROR=n
CONFIG_NSH_LINELEN=80
diff --git a/configs/sim/nx11/appconfig b/configs/sim/nx11/appconfig
index d99648abcc..ce54b34e44 100644
--- a/configs/sim/nx11/appconfig
+++ b/configs/sim/nx11/appconfig
@@ -1,8 +1,8 @@
############################################################################
# configs/sim/nx11/appconfig
#
-# Copyright (C) 2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt
+# Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -34,6 +34,8 @@
############################################################################
# Path to example in apps/examples containing the user_start entry point
+# Various NX tests can be supported, simply comment-out examples/nx and
+# uncomment the test you wish to perform
CONFIGURED_APPS += examples/nx
-
+#CONFIGURED_APPS += examples/nxconsole
diff --git a/configs/sim/nx11/defconfig b/configs/sim/nx11/defconfig
index 26c26c60d6..890e08592b 100644
--- a/configs/sim/nx11/defconfig
+++ b/configs/sim/nx11/defconfig
@@ -1,8 +1,8 @@
############################################################################
# sim/nx11/defconfig
#
-# Copyright (C) 2008, 2010-2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt
+# Copyright (C) 2008, 2010-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -271,6 +271,7 @@ CONFIG_PREALLOC_TIMERS=8
#
# Framebuffer driver options
+#
CONFIG_FB_CMAP=y
CONFIG_FB_HWCURSOR=n
CONFIG_FB_HWCURSORIMAGE=n
@@ -279,14 +280,17 @@ CONFIG_FB_HWCURSORIMAGE=n
#
# 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.
@@ -333,8 +337,10 @@ CONFIG_NET_BROADCAST=n
#
# 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
@@ -416,8 +422,48 @@ CONFIG_NX_BLOCKING=y
CONFIG_NX_MXSERVERMSGS=32
CONFIG_NX_MXCLIENTMSGS=16
+#
+# NxConsole Configuration Settings:
+#
+# CONFIG_NXCONSOLE_BPP
+# Currently, NxConsole supports only a single pixel depth. This
+# configuration setting must be provided to support that single pixel depth.
+# Default: The smallest enabled pixel depth. (see CONFIG_NX_DISABLE_*BPP)
+# CONFIG_NXCONSOLE_NOGETRUN
+# NxConsole needs to know if it can read from the LCD or not. If reading
+# from the LCD is supported, then NxConsole can do more efficient
+# scrolling. Default: Supported
+# CONFIG_NXCONSOLE_MXCHARS
+# NxConsole needs to remember every character written to the console so
+# that it can redraw the window. This setting determines the size of some
+# internal memory allocations used to hold the character data. Default: 128.
+# CONFIG_NXCONSOLE_FONTCACHE
+# If this setting is defined, then caching of fonts will be supported by
+# NxConsole. Each font must be rendered from the tiny font storage format
+# to the full display size and pixel depth. If this setting is defined, then
+# the more recently used font glyphs will be retained in a cache of size
+# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
+# CONFIG_NXCONSOLE_CACHESIZE
+# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
+# of the font cache (in number of glyphs). Default: 16.
+# CONFIG_NXCONSOLE_LINESEPARATION
+# This the space (in rows) between each row of test. Default: 2
+# CONFIG_NXCONSOLE_NOWRAP
+# By default, lines will wrap when the test reaches the right hand side
+# of the window. This setting can be defining to change this behavior so
+# that the text is simply truncated until a new line is encountered.
+#
+CONFIG_NXCONSOLE_BPP=32
+# CONFIG_NXCONSOLE_NOGETRUN
+# CONFIG_NXCONSOLE_MXCHARS
+# CONFIG_NXCONSOLE_FONTCACHE
+# CONFIG_NXCONSOLE_CACHESIZE
+# CONFIG_NXCONSOLE_LINESEPARATION
+# CONFIG_NXCONSOLE_NOWRAP
+
#
# 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)
@@ -425,6 +471,7 @@ CONFIG_EXAMPLE_UIP_DHCPC=n
#
# Settings for examples/nettest
+#
CONFIG_EXAMPLE_NETTEST_SERVER=n
CONFIG_EXAMPLE_NETTEST_PERFORMANCE=n
CONFIG_EXAMPLE_NETTEST_NOMAC=n
@@ -435,6 +482,7 @@ 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
@@ -468,6 +516,7 @@ CONFIG_EXAMPLES_OSTEST_STACKSIZE=8192
# CONFIG_NSH_FATSECTSIZE - FAT FS sector size
# CONFIG_NSH_FATNSECTORS - FAT FS number of sectors
# CONFIG_NSH_FATMOUNTPT - FAT FS mountpoint
+#
CONFIG_NSH_FILEIOSIZE=1024
CONFIG_NSH_STRERROR=n
CONFIG_NSH_LINELEN=80
@@ -517,6 +566,7 @@ CONFIG_NSH_FATMOUNTPT=/tmp
# CONFIG_EXAMPLES_NX_SERVERPRIO -- The server priority. Default: 120
# CONFIG_EXAMPLES_NX_NOTIFYSIGNO -- The signal number to use with
# nx_eventnotify(). Default: 4
+#
CONFIG_EXAMPLES_NX_VPLANE=0
#CONFIG_EXAMPLES_NX_BGCOLOR
#CONFIG_EXAMPLES_NX_COLOR1
@@ -532,6 +582,7 @@ CONFIG_EXAMPLES_NX_NOTIFYSIGNO=4
#
# Settings for examples/mount
+#
CONFIG_EXAMPLES_MOUNT_DEVNAME="/dev/ram0"
#CONFIG_EXAMPLES_MOUNT_NSECTORS=2048
#CONFIG_EXAMPLES_MOUNT_SECTORSIZE=512
@@ -563,7 +614,7 @@ CONFIG_BOOT_RUNFROMFLASH=n
CONFIG_BOOT_COPYTORAM=n
CONFIG_CUSTOM_STACK=n
CONFIG_IDLETHREAD_STACKSIZE=4096
-CONFIG_USERMAIN_STACKSIZE=4096
+CONFIG_USERMAIN_STACKSIZE=16384
CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=8192
CONFIG_HEAP_BASE=
diff --git a/graphics/README.txt b/graphics/README.txt
index 356386f84d..d5027c1f0c 100644
--- a/graphics/README.txt
+++ b/graphics/README.txt
@@ -34,6 +34,9 @@ at the present, but here is the longer term roadmap:
and without NXTOOLKIT for raw access to window memory.
NXGLIB - Low level graphics utilities and direct framebuffer rendering logic.
NX is built on top of NXGLIB.
+ NxConsole - NxConsole is a write-only character device that is built on top of
+ an NX window. This character device can be used to provide stdout
+ and stderr and, hence, can provide the output side of NuttX console.
Related Header Files
^^^^^^^^^^^^^^^^^^^^
@@ -150,10 +153,10 @@ Installing New Fonts
genfontsources:
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
- @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
endif
ifeq ($(CONFIG_NXFONT_MYFONT),y)
- @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
+ @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
endif
6. nuttx/graphics/nxfonts/Make.defs. Set the make variable NXFSET_CSRCS.
@@ -161,10 +164,10 @@ Installing New Fonts
NXFONTS_FONTID=2:
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
- NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
+ NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
endif
ifeq ($(CONFIG_NXFONT_MYFONT),y)
- NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
+ NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
endif
7. nuttx/graphics/nxfonts/Makefile.sources. This is the Makefile used
@@ -175,12 +178,12 @@ Installing New Fonts
was used in nuttx/graphics/nxfonts/Make.defs):
ifeq ($(NXFONTS_FONTID),1)
- NXFONTS_PREFIX := g_sans23x27_
- GEN_CSRC = nxfonts_bitmaps_sans23x27.c
+ NXFONTS_PREFIX := g_sans23x27_
+ GEN_CSRC = nxfonts_bitmaps_sans23x27.c
endif
ifeq ($(NXFONTS_FONTID),2)
- NXFONTS_PREFIX := g_myfont_
- GEN_CSRC = nxfonts_bitmaps_myfont.c
+ NXFONTS_PREFIX := g_myfont_
+ GEN_CSRC = nxfonts_bitmaps_myfont.c
endif
8. graphics/nxfonts/nxfonts_bitmaps.c. This is the file that contains
@@ -314,6 +317,36 @@ CONFIG_NXFONT_SERIF38X49B
This option enables support for a large, 38x49 bold font (with serifs)
(font ID FONTID_SERIF38X49B == 13).
+NxConsole Configuration Settings:
+
+CONFIG_NXCONSOLE_BPP
+ Currently, NxConsole supports only a single pixel depth. This
+ configuration setting must be provided to support that single pixel depth.
+ Default: The smallest enabled pixel depth. (see CONFIG_NX_DISABLE_*BPP)
+CONFIG_NXCONSOLE_NOGETRUN
+ NxConsole needs to know if it can read from the LCD or not. If reading
+ from the LCD is supported, then NxConsole can do more efficient
+ scrolling. Default: Supported
+CONFIG_NXCONSOLE_MXCHARS
+ NxConsole needs to remember every character written to the console so
+ that it can redraw the window. This setting determines the size of some
+ internal memory allocations used to hold the character data. Default: 128.
+CONFIG_NXCONSOLE_FONTCACHE
+ If this setting is defined, then caching of fonts will be supported by
+ NxConsole. Each font must be rendered from the tiny font storage format
+ to the full display size and pixel depth. If this setting is defined, then
+ the more recently used font glyphs will be retained in a cache of size
+ CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
+CONFIG_NXCONSOLE_CACHESIZE
+ If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
+ of the font cache (in number of glyphs). Default: 16.
+CONFIG_NXCONSOLE_LINESEPARATION
+ This the space (in rows) between each row of test. Default: 2
+CONFIG_NXCONSOLE_NOWRAP
+ By default, lines will wrap when the test reaches the right hand side
+ of the window. This setting can be defining to change this behavior so
+ that the text is simply truncated until a new line is encountered.
+
NX Multi-user only options:
CONFIG_NX_BLOCKING
diff --git a/graphics/nxconsole/Make.defs b/graphics/nxconsole/Make.defs
index e77f9450c0..df84d758dd 100644
--- a/graphics/nxconsole/Make.defs
+++ b/graphics/nxconsole/Make.defs
@@ -34,5 +34,6 @@
############################################################################
NXCON_ASRCS =
-NXCON_CSRCS = nx_register.c nxcon_driver.c nxcon_font.c nxcon_register.c
-NXCON_CSRCS += nxcon_unregister.c nxtk_register.c nxtool_register.c
+NXCON_CSRCS = nx_register.c nxcon_driver.c nxcon_font.c nxcon_redraw.c
+NXCON_CSRCS += nxcon_register.c nxcon_scroll.c nxcon_unregister.c
+NXCON_CSRCS += nxtk_register.c nxtool_register.c
diff --git a/graphics/nxconsole/nxcon_driver.c b/graphics/nxconsole/nxcon_driver.c
index 58ad027fe6..60ed3242a2 100755
--- a/graphics/nxconsole/nxcon_driver.c
+++ b/graphics/nxconsole/nxcon_driver.c
@@ -126,12 +126,21 @@ static ssize_t nxcon_write(FAR struct file *filep, FAR const char *buffer,
FAR struct nxcon_state_s *priv;
char ch;
int lineheight;
+ int ret;
/* Recover our private state structure */
DEBUGASSERT(filep && filep->f_priv);
priv = (FAR struct nxcon_state_s *)filep->f_priv;
+ /* Get exclusive access */
+
+ ret = sem_wait(&priv->exclsem);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
/* Loop writing each character to the display */
lineheight = (priv->fheight + CONFIG_NXCONSOLE_LINESEPARATION);
@@ -185,6 +194,7 @@ static ssize_t nxcon_write(FAR struct file *filep, FAR const char *buffer,
nxcon_putc(priv, (uint8_t)ch);
}
+ sem_post(&priv->exclsem);
return buflen;
}
diff --git a/graphics/nxconsole/nxcon_internal.h b/graphics/nxconsole/nxcon_internal.h
index 590c169e69..27b963d735 100644
--- a/graphics/nxconsole/nxcon_internal.h
+++ b/graphics/nxconsole/nxcon_internal.h
@@ -58,8 +58,8 @@
/* Configuration ************************************************************/
/* The maximum number of characters that can be remembered */
-#ifndef CONFIG_NXCONSOLE_BMCACHE
-# define CONFIG_NXCONSOLE_BMCACHE 128
+#ifndef CONFIG_NXCONSOLE_MXCHARS
+# define CONFIG_NXCONSOLE_MXCHARS 128
#endif
/* Font cache -- this is the number or pre-rendered font glyphs that can be
@@ -67,11 +67,33 @@
*/
#ifdef CONFIG_NXCONSOLE_FONTCACHE
-# ifndef CONFIG_NXCONSOLE_GLCACHE
-# define CONFIG_NXCONSOLE_GLCACHE 16
+# ifndef CONFIG_NXCONSOLE_CACHESIZE
+# define CONFIG_NXCONSOLE_CACHESIZE 16
# endif
#else
-# undef CONFIG_NXCONSOLE_GLCACHE
+# undef CONFIG_NXCONSOLE_CACHESIZE
+#endif
+
+/* Pixel depth */
+
+#ifndef CONFIG_NXCONSOLE_BPP
+# if !defined(CONFIG_NX_DISABLE_1BPP)
+# define CONFIG_NXCONSOLE_BPP 1
+# elif !defined(CONFIG_NX_DISABLE_2BPP)
+# define CONFIG_NXCONSOLE_BPP 2
+# elif !defined(CONFIG_NX_DISABLE_4BPP)
+# define CONFIG_NXCONSOLE_BPP 4
+# elif !defined(CONFIG_NX_DISABLE_8BPP)
+# define CONFIG_NXCONSOLE_BPP 8
+# elif !defined(CONFIG_NX_DISABLE_16BPP)
+# define CONFIG_NXCONSOLE_BPP 16
+//#elif !defined(CONFIG_NX_DISABLE_24BPP)
+//# define CONFIG_NXCONSOLE_BPP 24
+# elif !defined(CONFIG_NX_DISABLE_32BPP)
+# define CONFIG_NXCONSOLE_BPP 32
+# else
+# error "No pixel depth provided"
+# endif
#endif
/* Space (in rows) between lines */
@@ -164,12 +186,12 @@ struct nxcon_state_s
/* Font cache data storage */
- struct nxcon_bitmap_s bm[CONFIG_NXCONSOLE_BMCACHE];
+ struct nxcon_bitmap_s bm[CONFIG_NXCONSOLE_MXCHARS];
/* Glyph cache data storage */
#ifdef CONFIG_NXCONSOLE_FONTCACHE
- struct nxcon_glyph_s glyph[CONFIG_NXCONSOLE_GLCACHE];
+ struct nxcon_glyph_s glyph[CONFIG_NXCONSOLE_CACHESIZE];
#else
/* A glyph cache of size one -- all fonts will be re-rendered on each use */
diff --git a/graphics/nxconsole/nxcon_redraw.c b/graphics/nxconsole/nxcon_redraw.c
new file mode 100755
index 0000000000..23bebd6225
--- /dev/null
+++ b/graphics/nxconsole/nxcon_redraw.c
@@ -0,0 +1,131 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_bkgd.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+ ****************************************************************************/
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_redraw
+ *
+ * Description:
+ * Re-draw a portion of the NX console. This function should be called
+ * from the appropriate window callback logic.
+ *
+ * Input Parameters:
+ * handle - A handle previously returned by nx_register, nxtk_register, or
+ * nxtool_register.
+ * rect - The rectangle that needs to be re-drawn (in window relative
+ * coordinates)
+ * more - true: More re-draw requests will follow
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+void nxcon_redraw(NXCONSOLE handle, FAR const struct nxgl_rect_s *rect, bool more)
+{
+ FAR struct nxcon_state_s *priv;
+ int ret;
+ int i;
+
+ DEBUGASSERT(handle && rect);
+ gvdbg("rect={(%d,%d),(%d,%d)} more=%s\n",
+ rect->pt1.x, rect->pt1.y, rect->pt2.x, rect->pt2.y,
+ more ? "true" : "false");
+
+ /* Recover our private state structure */
+
+ priv = (FAR struct nxcon_state_s *)handle;
+
+ /* Fill the rectangular region with the window background color */
+
+ ret = priv->ops->fill(priv, rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("fill failed: %d\n", errno);
+ }
+
+ /* Then redraw each character on the display (Only the characters within
+ * the rectangle will actually be redrawn).
+ */
+
+ for (i = 0; i < priv->nchars; i++)
+ {
+ nxcon_fillchar(priv, rect, &priv->bm[i]);
+ }
+}
diff --git a/graphics/nxconsole/nxcon_register.c b/graphics/nxconsole/nxcon_register.c
index 9ed42c74de..cc878b2399 100644
--- a/graphics/nxconsole/nxcon_register.c
+++ b/graphics/nxconsole/nxcon_register.c
@@ -122,9 +122,9 @@ FAR struct nxcon_state_s *
/* Set up the text caches */
- priv->maxchars = CONFIG_NXCONSOLE_BMCACHE;
+ priv->maxchars = CONFIG_NXCONSOLE_MXCHARS;
#ifdef CONFIG_NXCONSOLE_FONTCACHE
- priv->maxglyphs = CONFIG_NXCONSOLE_GLCACHE;
+ priv->maxglyphs = CONFIG_NXCONSOLE_CACHESIZE;
#endif
/* Set the initial display position */
diff --git a/graphics/nxconsole/nxcon_scroll.c b/graphics/nxconsole/nxcon_scroll.c
new file mode 100755
index 0000000000..81bd3a7e85
--- /dev/null
+++ b/graphics/nxconsole/nxcon_scroll.c
@@ -0,0 +1,239 @@
+/****************************************************************************
+ * nuttx/graphics/nxconsole/nxcon_scroll.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+ ****************************************************************************/
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "nxcon_internal.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_movedisplay
+ *
+ * Description:
+ * This function implements the data movement for the scroll operation. If
+ * we can read the displays framebuffer memory, then the job is pretty
+ * easy. However, many displays (such as SPI-based LCDs) are often read-
+ * only.
+ ****************************************************************************/
+
+#ifndef CONFIG_NXCONSOLE_NOGETRUN
+static inline void nxcon_movedisplay(FAR struct nxcon_state_s *priv,
+ int bottom, int scrollheight)
+{
+ FAR struct nxcon_bitmap_s *bm;
+ struct nxgl_rect_s rect;
+ nxgl_coord_t row;
+ int ret;
+ int i;
+
+ /* Move each row, one at a time. They could all be moved at once (by calling
+ * nxcon_redraw), but the since the region is cleared, then re-written, the
+ * effect would not be good. Below the region is also cleared and re-written,
+ * however, in much smaller chunks.
+ */
+
+ rect.pt1.x = 0;
+ rect.pt2.x = priv->wndo.wsize.w - 1;
+
+ for (row = CONFIG_NXCONSOLE_LINESEPARATION; row < bottom; row += scrollheight)
+ {
+ /* Create a bounding box the size of one row of characters */
+
+ rect.pt1.y = row;
+ rect.pt2.y = row + scrollheight - 1;
+
+ /* Clear the region */
+
+ ret = priv->ops->fill(priv, &rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("fill failed: %d\n", errno);
+ }
+
+ /* Fill each character that might lie within in the bounding box */
+
+ for (i = 0; i < priv->nchars; i++)
+ {
+ bm = &priv->bm[i];
+ if (bm->pos.y <= rect.pt2.y && bm->pos.y + priv->fheight >= rect.pt1.y)
+ {
+ nxcon_fillchar(priv, &rect, bm);
+ }
+ }
+ }
+
+ /* Finally, clear the bottom part of the display */
+
+ rect.pt1.y = bottom;
+ rect.pt2.y = priv->wndo.wsize.h- 1;
+
+ ret = priv->ops->fill(priv, &rect, priv->wndo.wcolor);
+ if (ret < 0)
+ {
+ gdbg("nxcon_movedisplay: fill failed: %d\n", errno);
+ }
+}
+#else
+static inline void nxcon_movedisplay(FAR struct nxcon_state_s *priv,
+ int bottom, int scrollheight)
+{
+ struct nxgl_rect_s rect;
+ struct nxgl_point_s offset;
+ int ret;
+
+ /* Move the display in the range of 0-height up one scrollheight. The
+ * line at the bottom will be reset to the background color automatically.
+ *
+ * The source rectangle to be moved.
+ */
+
+ rect.pt1.x = 0;
+ rect.pt1.y = scrollheight + CONFIG_NXCONSOLE_LINESEPARATION;
+ rect.pt2.x = priv->wndo.wsize.w - 1;
+ rect.pt2.y = priv->wndo.wsize.h - 1;
+
+ /* The offset that determines how far to move the source rectangle */
+
+ offset.x = 0;
+ offset.y = -scrollheight;
+
+ /* Move the source rectangle */
+
+ ret = priv->move(priv, &rect, &offset);
+ if (ret < 0)
+ {
+ gdbg("move failed: %d\n", errno);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxcon_scroll
+ ****************************************************************************/
+
+void nxcon_scroll(FAR struct nxcon_state_s *priv, int scrollheight)
+{
+ int i;
+ int j;
+
+ /* Adjust the vertical position of each character */
+
+ for (i = 0; i < priv->nchars; )
+ {
+ FAR struct nxcon_bitmap_s *bm = &priv->bm[i];
+
+ /* Has any part of this character scrolled off the screen? */
+
+ if (bm->pos.y < scrollheight + CONFIG_NXCONSOLE_LINESEPARATION)
+ {
+ /* Yes... Delete the character by moving all of the data */
+
+ for (j = i; j < priv->nchars-1; j++)
+ {
+ memcpy(&priv->bm[j], &priv->bm[j+1], sizeof(struct nxcon_bitmap_s));
+ }
+
+ /* Decrement the number of cached characters ('i' is not incremented
+ * in this case because it already points to the next character)
+ */
+
+ priv->nchars--;
+ }
+
+ /* No.. just decrement its vertical position (moving it "up" the
+ * display by one line).
+ */
+
+ else
+ {
+ bm->pos.y -= scrollheight;
+
+ /* We are keeping this one so increment to the next character */
+
+ i++;
+ }
+ }
+
+ /* And move the next display position up by one line as well */
+
+ priv->fpos.y -= scrollheight;
+
+ /* Move the display in the range of 0-height up one scrollheight. */
+
+ nxcon_movedisplay(priv, priv->fpos.y, scrollheight);
+}
\ No newline at end of file
| |