From 99075db33f33272ed59617de9d584d29d342c5a9 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 27 Mar 2012 19:40:49 +0000 Subject: 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 --- nuttx/Documentation/NXGraphicsSubsystem.html | 57 ++++++- nuttx/configs/sim/README.txt | 14 ++ nuttx/configs/sim/nx/appconfig | 7 +- nuttx/configs/sim/nx/defconfig | 54 +++++- nuttx/configs/sim/nx11/appconfig | 8 +- nuttx/configs/sim/nx11/defconfig | 57 ++++++- nuttx/graphics/README.txt | 49 +++++- nuttx/graphics/nxconsole/Make.defs | 5 +- nuttx/graphics/nxconsole/nxcon_driver.c | 10 ++ nuttx/graphics/nxconsole/nxcon_internal.h | 36 +++- nuttx/graphics/nxconsole/nxcon_redraw.c | 131 +++++++++++++++ nuttx/graphics/nxconsole/nxcon_register.c | 4 +- nuttx/graphics/nxconsole/nxcon_scroll.c | 239 +++++++++++++++++++++++++++ 13 files changed, 635 insertions(+), 36 deletions(-) create mode 100755 nuttx/graphics/nxconsole/nxcon_redraw.c create mode 100755 nuttx/graphics/nxconsole/nxcon_scroll.c (limited to 'nuttx') 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 @@ 1.3.2 NX (NXSU and NXMU)
1.3.3 NX Tool Kit (NXTK)
1.3.4 NX Fonts Support (NXFONTS)
- 1.3.5 NX Widgets (NxWidgets) + 1.3.5 NX Widgets (NxWidgets)
+ 1.3.6 NX Console Driver (NxConsole)

@@ -189,7 +190,8 @@ B.3 NX Configuration Settings
B.4 NX Multi-User (Only) Configuration Settings
B.5 NXTK Configuration Settings
- B.6 NXFONTS Configuration Settings + B.6 NXFONTS Configuration Settings
+ B.7 NxConsole Configuration Settings

@@ -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.

+

1.3.6 NX Console Driver (NxConsole)

+ +

+ 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 stdout and stderr and, hence, can provide the output side of NuttX console. +

+
@@ -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, +

B.7 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. +
    +
+
@@ -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/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 +# 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/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 +# 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/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 +# 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/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 +# 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/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 + * + * 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/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 + * + * 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 -- cgit v1.2.3