configs/boardctl.c and include/sys/boardctl.h: Add support for BOARDIOC_NXTERM which can be used to create an NxTerm terminal.

This commit is contained in:
Gregory Nutt 2019-03-06 09:17:19 -06:00
parent c8004c7e00
commit ddf7f32158
3 changed files with 109 additions and 4 deletions

View File

@ -424,6 +424,57 @@ int boardctl(unsigned int cmd, uintptr_t arg)
break;
#endif
#ifdef CONFIG_NXTERM
/* CMD: BOARDIOC_NXTERM
* DESCRIPTION: Create an NX terminal device
* ARG: A reference readable/writable instance of struct
* boardioc_nxterm_create_s
* CONFIGURATION: CONFIG_NXTERM
* DEPENDENCIES: Base NX terminal logic provides nx_register() and
* nxtk_register()
*/
case BOARDIOC_NXTERM:
{
FAR struct boardioc_nxterm_create_s *nxterm =
(FAR struct boardioc_nxterm_create_s *)arg;
if (nxterm == NULL)
{
ret = -EINVAL;
}
else if (nxterm->type == BOARDIOC_XTERM_RAW)
{
nxterm->nxterm = nx_register((NXWINDOW)nxterm->hwnd,
&nxterm->wndo,
(int)nxterm->minor);
ret = nxterm->nxterm == NULL ? -ENODEV : OK;
}
else if (nxterm->type == BOARDIOC_XTERM_FRAMED)
{
nxterm->nxterm = nxtk_register((NXTKWINDOW)nxterm->hwnd,
&nxterm->wndo,
(int)nxterm->minor);
ret = nxterm->nxterm == NULL ? -ENODEV : OK;
}
else if (nxterm->type == BOARDIOC_XTERM_TOOLBAR)
{
nxterm->nxterm = nxtool_register((NXTKWINDOW)nxterm->hwnd,
&nxterm->wndo,
(int)nxterm->minor);
ret = nxterm->nxterm == NULL ? -ENODEV : OK;
}
else
{
ret = -EINVAL;
}
}
break;
#endif
#ifdef CONFIG_BOARDCTL_TESTSET
/* CMD: BOARDIOC_TESTSET
* DESCRIPTION: Access architecture-specific up_testset() operation

View File

@ -1,7 +1,7 @@
/****************************************************************************
* include/nuttx/nx/nxterm.h
*
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
* Copyright (C) 2012, 2019 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -221,6 +221,10 @@ extern "C"
* Register a console device on a raw NX window. The device will be
* registered at /dev/nxtermN where N is the provided minor number.
*
* This is an internal NuttX interface and should not be called directly
* from applications. Application access is supported only indirectly via
* the boardctl(BOARDIOC_NXTERM) interface.
*
* Input Parameters:
* hwnd - A handle that will be used to access the window. The window must
* persist and this handle must be valid for the life of the NX console.
@ -244,6 +248,10 @@ NXTERM nx_register(NXWINDOW hwnd, FAR struct nxterm_window_s *wndo,
* Register a console device on a framed NX window. The device will be
* registered at /dev/nxtermN where N is the provided minor number.
*
* This is an internal NuttX interface and should not be called directly
* from applications. Application access is supported only indirectly via
* the boardctl(BOARDIOC_NXTERM) interface.
*
* Input Parameters:
* hfwnd - A handle that will be used to access the window. The window must
* persist and this handle must be valid for the life of the NX console.
@ -266,7 +274,12 @@ NXTERM nxtk_register(NXTKWINDOW hfwnd, FAR struct nxterm_window_s *wndo,
* Description:
* Register a console device on a toolbar of a framed NX window. The
* device will be registered at /dev/nxtermN where N is the provided minor
* number.
* number. Application access is supported only indirectly via
* the boardctl(BOARDIOC_NXTERM) interface.
*
* This is an internal NuttX interface and should not be called directly
* from applications. Application access is supported only indirectly via
* the boardctl(BOARDIOC_NXTERM) interface.
*
* Input Parameters:
* hfwnd - A handle that will be used to access the toolbar. The toolbar
@ -291,6 +304,9 @@ NXTERM nxtool_register(NXTKWINDOW hfwnd, FAR struct nxterm_window_s *wndo,
* Description:
* Un-register to NX console device.
*
* This is an internal NuttX interface and should not be called directly
* from applications.
*
* Input Parameters:
* handle - A handle previously returned by nx_register, nxtk_register, or
* nxtool_register.
@ -309,6 +325,9 @@ void nxterm_unregister(NXTERM handle);
* Re-draw a portion of the NX console. This function should be called
* from the appropriate window callback logic.
*
* This is an internal NuttX interface and should not be called directly
* from applications.
*
* Input Parameters:
* handle - A handle previously returned by nx_register, nxtk_register, or
* nxtool_register.
@ -339,6 +358,9 @@ void nxterm_redraw(NXTERM handle, FAR const struct nxgl_rect_s *rect,
* cannot be shared between different windows. Chaos will ensue if you
* try to support multiple NxTerm windows without CONFIG_NXTERM_NXKBDIN
*
* This is an internal NuttX interface and should not be called directly
* from applications.
*
* Input Parameters:
* handle - A handle previously returned by nx_register, nxtk_register, or
* nxtool_register.

View File

@ -45,6 +45,10 @@
#include <nuttx/fs/ioctl.h>
#ifdef CONFIG_NXTERM
# include <nuttx/nx/nxterm.h>
#endif
#ifdef CONFIG_LIB_BOARDCTL
/****************************************************************************
@ -115,6 +119,14 @@
* CONFIGURATION: CONFIG_NX
* DEPENDENCIES: Base graphics logic provides nxmu_start()
*
* CMD: BOARDIOC_NXTERM
* DESCRIPTION: Create an NX terminal device
* ARG: A reference readable/writable instance of struct
* boardioc_nxterm_create_s
* CONFIGURATION: CONFIG_NXTERM
* DEPENDENCIES: Base NX terminal logic provides nx_register() and
* nxtk_register()
*
* CMD: BOARDIOC_TESTSET
* DESCRIPTION: Access architecture-specific up_testset() operation
* ARG: A pointer to a write-able spinlock object. On success
@ -133,7 +145,8 @@
#define BOARDIOC_OS_SYMTAB _BOARDIOC(0x0007)
#define BOARDIOC_USBDEV_CONTROL _BOARDIOC(0x0008)
#define BOARDIOC_NX_START _BOARDIOC(0x0009)
#define BOARDIOC_TESTSET _BOARDIOC(0x000a)
#define BOARDIOC_NXTERM _BOARDIOC(0x000a)
#define BOARDIOC_TESTSET _BOARDIOC(0x000b)
/* If CONFIG_BOARDCTL_IOCTL=y, then board-specific commands will be support.
* In this case, all commands not recognized by boardctl() will be forwarded
@ -142,7 +155,7 @@
* User defined board commands may begin with this value:
*/
#define BOARDIOC_USER _BOARDIOC(0x000b)
#define BOARDIOC_USER _BOARDIOC(0x000c)
/****************************************************************************
* Public Type Definitions
@ -240,6 +253,25 @@ struct boardioc_usbdev_ctrl_s
};
#endif /* CONFIG_BOARDCTL_USBDEVCTRL */
#ifdef CONFIG_NXTERM
enum boardioc_termtype_e
{
BOARDIOC_XTERM_RAW = 0, /* Raw NX terminal window */
BOARDIOC_XTERM_FRAMED, /* Framed NxTK terminal window */
BOARDIOC_XTERM_TOOLBAR /* Tooolbar of framed NxTK terminal window */
};
struct boardioc_nxterm_create_s
{
NXTERM nxterm; /* Returned NXTERM handle */
FAR void *hwnd; /* Window handle (NXWINDOW or NXTKWINDOW). */
struct nxterm_window_s wndo; /* Describes the initial window: color, size, font */
enum boardioc_termtype_e type; /* Terminal window type */
uint8_t minor; /* Terminal device minor number, N, in
* /dev/nxtermN. 0 <= N <= 255 */
};
#endif /* CONFIG_NXTERM */
/****************************************************************************
* Public Data
****************************************************************************/