summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-03-27 19:40:49 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-03-27 19:40:49 +0000
commit99075db33f33272ed59617de9d584d29d342c5a9 (patch)
treee854fe214319b7ac3a98fe3dc9b25e7d946e23c5 /nuttx
parent5d3e1ee2e876b618f11a16753ca1d992260089be (diff)
downloadpx4-nuttx-99075db33f33272ed59617de9d584d29d342c5a9.tar.gz
px4-nuttx-99075db33f33272ed59617de9d584d29d342c5a9.tar.bz2
px4-nuttx-99075db33f33272ed59617de9d584d29d342c5a9.zip
NX console driver is code complete but untested
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4529 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/Documentation/NXGraphicsSubsystem.html57
-rw-r--r--nuttx/configs/sim/README.txt14
-rw-r--r--nuttx/configs/sim/nx/appconfig7
-rw-r--r--nuttx/configs/sim/nx/defconfig54
-rw-r--r--nuttx/configs/sim/nx11/appconfig8
-rw-r--r--nuttx/configs/sim/nx11/defconfig57
-rw-r--r--nuttx/graphics/README.txt49
-rw-r--r--nuttx/graphics/nxconsole/Make.defs5
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_driver.c10
-rw-r--r--nuttx/graphics/nxconsole/nxcon_internal.h36
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_redraw.c131
-rw-r--r--nuttx/graphics/nxconsole/nxcon_register.c4
-rwxr-xr-xnuttx/graphics/nxconsole/nxcon_scroll.c239
13 files changed, 635 insertions, 36 deletions
diff --git a/nuttx/Documentation/NXGraphicsSubsystem.html b/nuttx/Documentation/NXGraphicsSubsystem.html
index be86502ab..81ead3ed2 100644
--- a/nuttx/Documentation/NXGraphicsSubsystem.html
+++ b/nuttx/Documentation/NXGraphicsSubsystem.html
@@ -44,7 +44,8 @@
<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>
+ <i>1.3.5 <a href="#nxwidgets1">NX Widgets (<code>NxWidgets</code>)</a></i><br>
+ <i>1.3.6 <a href="#nxconsole1">NX Console Driver (<code>NxConsole</code>)</a></i>
</ul>
</p>
</ul>
@@ -189,7 +190,8 @@
<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>
+ <i><b>B.6</b> <a href="#nxfpmtsconfig">NXFONTS Configuration Settings</a></i><br>
+ <i><b>B.7</b> <a href="#nxconsoleconfig">NxConsole Configuration Settings</a></i>
</ul>
</p>
<p>
@@ -401,6 +403,13 @@
NxWidgets is built on top of the core NuttX graphics subsystem, but is not a part of the core graphics subystems.
</p>
+<h3>1.3.6 <a name="nxconsole1">NX Console Driver (<code>NxConsole</code>)</a></h3>
+
+<p>
+ NxConsole is a write-only character device (not shown) that is built on top of an NX window.
+ This character device can be used to provide <code>stdout</code> and <code>stderr</code> and, hence, can provide the output side of NuttX console.
+</p>
+
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
@@ -3177,13 +3186,16 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
<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.
+ This toolkit is built on top of NX and works with either the single-user or multi-user NX version.
See <code>include/nuttx/nx/nxtk.h</code>.
<dt><code>nuttx/../nxwidgets</code>
<dd>The <a href="NxWidgets.html">NxWidgets</a> code is provided as a separate package located outside of the
NuttX source tree (probably at this location).
+
+ <dt><code>graphics/nxconsole</code>
+ <dd>The NxConsole driver is built on top of NX and works with either the single-user or multi-user NX version.
+ See <code>include/nuttx/nx/nxconsole.h</code>.
</dl>
</ul>
@@ -3247,7 +3259,7 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
<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.
+ <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
@@ -3337,6 +3349,37 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
</dl>
</ul>
+<h2>B.7 <a name="nxconsoleconfig">NxConsole Configuration Settings</a></h2>
+
+<ul>
+ <dl>
+ <dt><code>CONFIG_NXCONSOLE_BPP</code>:
+ <dd>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 <code>CONFIG_NX_DISABLE_*BPP</code>)
+ <dt><code>CONFIG_NXCONSOLE_NOGETRUN</code>:
+ <dd>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
+ <dt><code>CONFIG_NXCONSOLE_MXCHARS</code>:
+ <dd>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.
+ <dt><code>CONFIG_NXCONSOLE_FONTCACHE</code>:
+ <dd>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 <code>CONFIG_NXCONSOLE_CACHESIZE</code>.
+ Default: No font caching.
+ <dt><code>CONFIG_NXCONSOLE_CACHESIZE</code>:
+ <dd>If <code>CONFIG_NXCONSOLE_FONTCACHE</code>, then this setting will control the size of the font cache (in number of glyphs). Default: 16.
+ <dt><code>CONFIG_NXCONSOLE_LINESEPARATION</code>:
+ <dd>This the space (in rows) between each row of test. Default: 2
+ <dt><code>CONFIG_NXCONSOLE_NOWRAP</code>:
+ <dd>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.
+ </dl>
+</ul>
+
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
@@ -3457,10 +3500,10 @@ genfontsources:
</p>
<ul><pre>
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
</pre></ul>
</li>
diff --git a/nuttx/configs/sim/README.txt b/nuttx/configs/sim/README.txt
index c7005271c..71542a1b4 100644
--- a/nuttx/configs/sim/README.txt
+++ b/nuttx/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/nuttx/configs/sim/nx/appconfig b/nuttx/configs/sim/nx/appconfig
index 12a1f4ac9..de984c1f6 100644
--- a/nuttx/configs/sim/nx/appconfig
+++ b/nuttx/configs/sim/nx/appconfig
@@ -1,8 +1,8 @@
############################################################################
# configs/sim/nx/appconfig
#
-# Copyright (C) 2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+# Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
#
# 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/nuttx/configs/sim/nx/defconfig b/nuttx/configs/sim/nx/defconfig
index d5977f3f5..b301f869b 100644
--- a/nuttx/configs/sim/nx/defconfig
+++ b/nuttx/configs/sim/nx/defconfig
@@ -1,8 +1,8 @@
############################################################################
# sim/nx/defconfig
#
-# Copyright (C) 2008-2010 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+# Copyright (C) 2008-2010, 2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
#
# 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
@@ -415,7 +422,47 @@ 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/nuttx/configs/sim/nx11/appconfig b/nuttx/configs/sim/nx11/appconfig
index d99648abc..ce54b34e4 100644
--- a/nuttx/configs/sim/nx11/appconfig
+++ b/nuttx/configs/sim/nx11/appconfig
@@ -1,8 +1,8 @@
############################################################################
# configs/sim/nx11/appconfig
#
-# Copyright (C) 2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+# Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
#
# 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/nuttx/configs/sim/nx11/defconfig b/nuttx/configs/sim/nx11/defconfig
index 26c26c60d..890e08592 100644
--- a/nuttx/configs/sim/nx11/defconfig
+++ b/nuttx/configs/sim/nx11/defconfig
@@ -1,8 +1,8 @@
############################################################################
# sim/nx11/defconfig
#
-# Copyright (C) 2008, 2010-2011 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+# Copyright (C) 2008, 2010-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
#
# 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
@@ -417,7 +423,47 @@ 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/nuttx/graphics/README.txt b/nuttx/graphics/README.txt
index 356386f84..d5027c1f0 100644
--- a/nuttx/graphics/README.txt
+++ b/nuttx/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/nuttx/graphics/nxconsole/Make.defs b/nuttx/graphics/nxconsole/Make.defs
index e77f9450c..df84d758d 100644
--- a/nuttx/graphics/nxconsole/Make.defs
+++ b/nuttx/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/nuttx/graphics/nxconsole/nxcon_driver.c b/nuttx/graphics/nxconsole/nxcon_driver.c
index 58ad027fe..60ed3242a 100755
--- a/nuttx/graphics/nxconsole/nxcon_driver.c
+++ b/nuttx/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/nuttx/graphics/nxconsole/nxcon_internal.h b/nuttx/graphics/nxconsole/nxcon_internal.h
index 590c169e6..27b963d73 100644
--- a/nuttx/graphics/nxconsole/nxcon_internal.h
+++ b/nuttx/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/nuttx/graphics/nxconsole/nxcon_redraw.c b/nuttx/graphics/nxconsole/nxcon_redraw.c
new file mode 100755
index 000000000..23bebd622
--- /dev/null
+++ b/nuttx/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 <gnutt@nuttx.org>
+ *
+ * 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 <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxglib.h>
+
+#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/nuttx/graphics/nxconsole/nxcon_register.c b/nuttx/graphics/nxconsole/nxcon_register.c
index 9ed42c74d..cc878b239 100644
--- a/nuttx/graphics/nxconsole/nxcon_register.c
+++ b/nuttx/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/nuttx/graphics/nxconsole/nxcon_scroll.c b/nuttx/graphics/nxconsole/nxcon_scroll.c
new file mode 100755
index 000000000..81bd3a7e8
--- /dev/null
+++ b/nuttx/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 <gnutt@nuttx.org>
+ *
+ * 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 <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <semaphore.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/nx/nx.h>
+#include <nuttx/nx/nxfonts.h>
+
+#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