The NX console appears to be fully functional
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4536 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
0c4acf3a3f
commit
31bc31d063
@ -2598,3 +2598,7 @@
|
||||
DAC. Contriburted by by Lzzy.
|
||||
* graphics/nxconsole: Add a character driver that can be used as a console output
|
||||
device for text output (still under development on initial check-in).
|
||||
* graphics/nxmu: Fix several compilation errors that have crept into the multi-
|
||||
user NX server because of lack of use.
|
||||
* graphics/nxconsole: The NX text console is basically function (in multi-
|
||||
user NX mode only).
|
||||
|
@ -387,6 +387,8 @@ nx11
|
||||
-#CONFIGURED_APPS += examples/nxconsole
|
||||
+CONFIGURED_APPS += examples/nxconsole
|
||||
|
||||
See apps/examples/README.txt for further details.
|
||||
|
||||
ostest
|
||||
|
||||
Description
|
||||
|
@ -457,7 +457,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=8
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -458,7 +458,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=32
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -17,6 +17,7 @@ Contents
|
||||
- Temperature Sensor
|
||||
- RTC
|
||||
- STM3210E-EVAL-specific Configuration Options
|
||||
- NxConsole
|
||||
- Configurations
|
||||
|
||||
Development Environment
|
||||
@ -350,6 +351,28 @@ RTC
|
||||
overflow interrupt may be lost even if the STM32 is powered down only momentarily.
|
||||
Therefore hi-res solution is only useful in systems where the power is always on.
|
||||
|
||||
NxConsole
|
||||
=========
|
||||
|
||||
Several of the graphic-releted configurations are set to use the
|
||||
examples/nxconsole test. To enable this configuration,
|
||||
First, select NX Multi-User mode:
|
||||
|
||||
CONFG_NX_MULTIUSER=y
|
||||
CONFIG_DISABLE_MQUEUE=n
|
||||
|
||||
Then add the following definition to the defconfig file to enable
|
||||
the NxConsole driver:
|
||||
|
||||
CONFIG_NXCONSOLE=y
|
||||
|
||||
Make sure the that following is in place the appconfig file (perhaps
|
||||
eliminating other examples):
|
||||
|
||||
CONFIGURED_APPS += examples/nxconsole
|
||||
|
||||
See apps/examples/README.txt for further details.
|
||||
|
||||
STM3210E-EVAL-specific Configuration Options
|
||||
============================================
|
||||
|
||||
|
@ -1076,7 +1076,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=16
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -926,7 +926,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=16
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -925,7 +925,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=16
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -925,7 +925,7 @@ CONFIG_NX_MXCLIENTMSGS=16
|
||||
CONFIG_NXCONSOLE=n
|
||||
CONFIG_NXCONSOLE_BPP=16
|
||||
# CONFIG_NXCONSOLE_NOGETRUN
|
||||
# CONFIG_NXCONSOLE_MXCHARS
|
||||
CONFIG_NXCONSOLE_MXCHARS=256
|
||||
# CONFIG_NXCONSOLE_FONTCACHE
|
||||
# CONFIG_NXCONSOLE_CACHESIZE
|
||||
# CONFIG_NXCONSOLE_LINESEPARATION
|
||||
|
@ -47,6 +47,8 @@
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/kmalloc.h>
|
||||
|
||||
#include <nuttx/nx/nx.h>
|
||||
#include <nuttx/nx/nxtk.h>
|
||||
#include <nuttx/nx/nxfonts.h>
|
||||
@ -103,14 +105,16 @@
|
||||
* Name: nxcon_freeglyph
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
static void nxcon_freeglyph(FAR struct nxcon_glyph_s *glyph)
|
||||
{
|
||||
if (glyph->bitmap)
|
||||
{
|
||||
free(glyph->bitmap);
|
||||
kfree(glyph->bitmap);
|
||||
}
|
||||
memset(glyph, 0, sizeof(struct nxcon_glyph_s));
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nxcon_allocglyph
|
||||
@ -183,9 +187,6 @@ nxcon_allocglyph(FAR struct nxcon_state_s *priv)
|
||||
luglyph->usecnt = 1;
|
||||
return luglyph;
|
||||
#else
|
||||
/* TODO: Instead allocating an freeing, just allocate the max glyph once */
|
||||
|
||||
nxcon_freeglyph(&priv->glyph);
|
||||
return &priv->glyph;
|
||||
#endif
|
||||
}
|
||||
@ -236,7 +237,6 @@ nxcon_renderglyph(FAR struct nxcon_state_s *priv,
|
||||
#if CONFIG_NXCONSOLE_BPP < 8
|
||||
nxgl_mxpixel_t pixel;
|
||||
#endif
|
||||
int bmsize;
|
||||
int row;
|
||||
int col;
|
||||
int ret;
|
||||
@ -255,29 +255,50 @@ nxcon_renderglyph(FAR struct nxcon_state_s *priv,
|
||||
glyph->width = fbm->metric.width + fbm->metric.xoffset;
|
||||
glyph->height = fbm->metric.height + fbm->metric.yoffset;
|
||||
|
||||
/* Allocate memory to hold the glyph with its offsets */
|
||||
/* Get the physical width of the glyph in bytes */
|
||||
|
||||
glyph->stride = (glyph->width * CONFIG_NXCONSOLE_BPP + 7) / 8;
|
||||
bmsize = glyph->stride * glyph->height;
|
||||
glyph->bitmap = (FAR uint8_t *)malloc(bmsize);
|
||||
|
||||
/* Allocate memory to hold the glyph with its offsets */
|
||||
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
{
|
||||
DEBUGASSERT(glyph->bitmap == NULL);
|
||||
int bmsize = glyph->stride * glyph->height;
|
||||
glyph->bitmap = (FAR uint8_t *)kmalloc(bmsize);
|
||||
}
|
||||
#else
|
||||
DEBUGASSERT(glyph->bitmap != NULL);
|
||||
#endif
|
||||
|
||||
if (glyph->bitmap)
|
||||
{
|
||||
/* Initialize the glyph memory to the background color */
|
||||
/* Initialize the glyph memory to the background color using the
|
||||
* hard-coded bits-per-pixel (BPP).
|
||||
*
|
||||
* TODO: The rest of NX is configured to support multiple devices
|
||||
* with differing BPP. They logic should be extended to support
|
||||
* differing BPP's as well.
|
||||
*/
|
||||
|
||||
#if CONFIG_NXCONSOLE_BPP < 8
|
||||
pixel = priv->wcolor[0];
|
||||
|
||||
# if CONFIG_NXCONSOLE_BPP == 1
|
||||
|
||||
/* Pack 1-bit pixels into a 2-bits */
|
||||
|
||||
pixel &= 0x01;
|
||||
pixel = (pixel) << 1 |pixel;
|
||||
pixel = (pixel) << 1 | pixel;
|
||||
|
||||
# endif
|
||||
# if CONFIG_NXCONSOLE_BPP < 4
|
||||
|
||||
/* Pack 2-bit pixels into a nibble */
|
||||
|
||||
pixel &= 0x03;
|
||||
pixel = (pixel) << 2 |pixel;
|
||||
pixel = (pixel) << 2 | pixel;
|
||||
|
||||
# endif
|
||||
|
||||
/* Pack 4-bit nibbles into a byte */
|
||||
@ -323,7 +344,9 @@ nxcon_renderglyph(FAR struct nxcon_state_s *priv,
|
||||
/* Actually, the RENDERER never returns a failure */
|
||||
|
||||
gdbg("nxcon_renderglyph: RENDERER failed\n");
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
nxcon_freeglyph(glyph);
|
||||
#endif
|
||||
glyph = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -55,53 +55,6 @@
|
||||
/****************************************************************************
|
||||
* Definitions
|
||||
****************************************************************************/
|
||||
/* Configuration ************************************************************/
|
||||
/* The maximum number of characters that can be remembered */
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_MXCHARS
|
||||
# define CONFIG_NXCONSOLE_MXCHARS 128
|
||||
#endif
|
||||
|
||||
/* Font cache -- this is the number or pre-rendered font glyphs that can be
|
||||
* remembered.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
# ifndef CONFIG_NXCONSOLE_CACHESIZE
|
||||
# define CONFIG_NXCONSOLE_CACHESIZE 16
|
||||
# endif
|
||||
#else
|
||||
# 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 */
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_LINESEPARATION
|
||||
# define CONFIG_NXCONSOLE_LINESEPARATION 2
|
||||
#endif
|
||||
|
||||
/* NxConsole Definitions ****************************************************/
|
||||
/* Bitmap flags */
|
||||
|
||||
|
@ -41,6 +41,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <semaphore.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
@ -112,6 +113,25 @@ void nxcon_redraw(NXCONSOLE handle, FAR const struct nxgl_rect_s *rect, bool mor
|
||||
|
||||
priv = (FAR struct nxcon_state_s *)handle;
|
||||
|
||||
/* Get exclusive access to the state structure */
|
||||
|
||||
do
|
||||
{
|
||||
ret = sem_wait(&priv->exclsem);
|
||||
|
||||
/* Check for errors */
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
/* The only expected error is if the wait failed because of it
|
||||
* was interrupted by a signal.
|
||||
*/
|
||||
|
||||
DEBUGASSERT(errno == EINTR);
|
||||
}
|
||||
}
|
||||
while (ret < 0);
|
||||
|
||||
/* Fill the rectangular region with the window background color */
|
||||
|
||||
ret = priv->ops->fill(priv, rect, priv->wndo.wcolor);
|
||||
@ -128,4 +148,5 @@ void nxcon_redraw(NXCONSOLE handle, FAR const struct nxgl_rect_s *rect, bool mor
|
||||
{
|
||||
nxcon_fillchar(priv, rect, &priv->bm[i]);
|
||||
}
|
||||
ret = sem_post(&priv->exclsem);
|
||||
}
|
||||
|
@ -120,13 +120,32 @@ FAR struct nxcon_state_s *
|
||||
priv->fwidth = fontset->mxwidth;
|
||||
priv->spwidth = fontset->spwidth;
|
||||
|
||||
/* Set up the text caches */
|
||||
/* Set up the text cache */
|
||||
|
||||
priv->maxchars = CONFIG_NXCONSOLE_MXCHARS;
|
||||
|
||||
/* Set up the font glyph bitmap cache (if enabled) */
|
||||
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
priv->maxglyphs = CONFIG_NXCONSOLE_CACHESIZE;
|
||||
#endif
|
||||
|
||||
/* Pre-allocate maximal sized glyph bitmap memory (only if we are not
|
||||
* using the glyph cache.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_FONTCACHE
|
||||
{
|
||||
int allocsize = (priv->fheight * priv->fwidth * CONFIG_NXCONSOLE_BPP + 7) >> 3;
|
||||
priv->glyph.bitmap = (FAR uint8_t *)kmalloc(allocsize);
|
||||
if (!priv->glyph.bitmap)
|
||||
{
|
||||
gdbg("Failed to allocate glyph memory\n");
|
||||
goto errout;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set the initial display position */
|
||||
|
||||
nxcon_home(priv);
|
||||
|
@ -97,6 +97,12 @@ void nxcon_unregister(NXCONSOLE handle)
|
||||
priv = (FAR struct nxcon_state_s *)handle;
|
||||
sem_destroy(&priv->exclsem);
|
||||
|
||||
/* Free the pre-allocated glyph bitmap */
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_FONTCACHE
|
||||
kfree(priv->glyph.bitmap);
|
||||
#endif
|
||||
|
||||
/* Unregister the driver */
|
||||
|
||||
snprintf(devname, NX_DEVNAME_SIZE, NX_DEVNAME_FORMAT, priv->minor);
|
||||
|
@ -94,7 +94,7 @@ void nx_disconnect(NXHANDLE handle)
|
||||
|
||||
/* Inform the server that this client no longer exists */
|
||||
|
||||
msg.msgid = NX_SVRMSG_CONNECT;
|
||||
msg.msgid = NX_SVRMSG_DISCONNECT;
|
||||
msg.conn = conn;
|
||||
|
||||
ret = mq_send(conn->cwrmq, &msg, sizeof(struct nxsvrmsg_s), NX_SVRMSG_PRIO);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* graphics/nxmu/nx_releasebkgd.c
|
||||
*
|
||||
* Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -129,31 +129,6 @@ static inline void nxmu_connect(FAR struct nxfe_conn_s *conn)
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nxmu_release
|
||||
****************************************************************************/
|
||||
|
||||
static int nxmu_release(FAR struct nxfe_state_s *fe)
|
||||
{
|
||||
FAR struct nxbe_window_s *wnd;
|
||||
struct nxclimsg_s outmsg;
|
||||
int ret;
|
||||
|
||||
/* Don't want windows to close while we do this */
|
||||
|
||||
for (wnd = fe->be.topwnd; wnd; wnd = wnd->below)
|
||||
{
|
||||
outmsg.msgid = NX_CLIMSG_DISCONNECTED;
|
||||
ret = mq_send(wnd->conn->swrmq, &outmsg, sizeof(struct nxclimsg_s), NX_CLIMSG_PRIO);
|
||||
if (ret < 0)
|
||||
{
|
||||
gdbg("mq_send failed: %d\n", errno);
|
||||
}
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nxmu_shutdown
|
||||
****************************************************************************/
|
||||
|
@ -94,6 +94,52 @@
|
||||
* that the text is simply truncated until a new line is encountered.
|
||||
*/
|
||||
|
||||
/* The maximum number of characters that can be remembered */
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_MXCHARS
|
||||
# define CONFIG_NXCONSOLE_MXCHARS 128
|
||||
#endif
|
||||
|
||||
/* Font cache -- this is the number or pre-rendered font glyphs that can be
|
||||
* remembered.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_NXCONSOLE_FONTCACHE
|
||||
# ifndef CONFIG_NXCONSOLE_CACHESIZE
|
||||
# define CONFIG_NXCONSOLE_CACHESIZE 16
|
||||
# endif
|
||||
#else
|
||||
# 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 */
|
||||
|
||||
#ifndef CONFIG_NXCONSOLE_LINESEPARATION
|
||||
# define CONFIG_NXCONSOLE_LINESEPARATION 2
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
****************************************************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user