diff --git a/graphics/nxterm/Make.defs b/graphics/nxterm/Make.defs index 24673b2a72..58d78edd17 100644 --- a/graphics/nxterm/Make.defs +++ b/graphics/nxterm/Make.defs @@ -1,7 +1,7 @@ ############################################################################ # graphics/nxterm/Make.defs # -# Copyright (C) 2012 Gregory Nutt. All rights reserved. +# Copyright (C) 2012, 2019 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -36,7 +36,7 @@ ifeq ($(CONFIG_NXTERM),y) CSRCS += nx_register.c nxterm_driver.c nxterm_font.c nxterm_putc.c -CSRCS += nxterm_redraw.c nxterm_register.c nxterm_scroll.c +CSRCS += nxterm_redraw.c nxterm_resize.c nxterm_register.c nxterm_scroll.c CSRCS += nxterm_vt100.c nxtk_register.c nxtool_register.c nxterm_clear.c ifneq ($(CONFIG_DISABLE_PSEUDOFS_OPERATIONS),y) diff --git a/graphics/nxterm/nxterm.h b/graphics/nxterm/nxterm.h index cd63a7adf1..07c4d70759 100644 --- a/graphics/nxterm/nxterm.h +++ b/graphics/nxterm/nxterm.h @@ -226,6 +226,7 @@ void nxterm_redraw(NXTERM handle, FAR const struct nxgl_rect_s *rect, #ifdef CONFIG_NXTERM_NXKBDIN void nxterm_kbdin(NXTERM handle, FAR const uint8_t *buffer, uint8_t buflen); #endif +int nxterm_resize(NXTERM handle, FAR const struct nxgl_size_s *size); /* VT100 Terminal emulation */ diff --git a/graphics/nxterm/nxterm_driver.c b/graphics/nxterm/nxterm_driver.c index 07c00d720f..4ed9b68ebd 100644 --- a/graphics/nxterm/nxterm_driver.c +++ b/graphics/nxterm/nxterm_driver.c @@ -409,7 +409,6 @@ int nxterm_ioctl_tap(int cmd, uintptr_t arg) * ARG: A reference readable instance of struct * nxtermioc_redraw_s * CONFIGURATION: CONFIG_NXTERM - * DEPENDENCIES: Base NX terminal logic provides nxterm_redraw() */ case NXTERMIOC_NXTERM_REDRAW: @@ -427,7 +426,6 @@ int nxterm_ioctl_tap(int cmd, uintptr_t arg) * ARG: A reference readable instance of struct * nxtermioc_kbdin_s * CONFIGURATION: CONFIG_NXTERM_NXKBDIN - * DEPENDENCIES: Base NX terminal logic provides nxterm_kbdin() */ case NXTERMIOC_NXTERM_KBDIN: @@ -444,6 +442,22 @@ int nxterm_ioctl_tap(int cmd, uintptr_t arg) } break; + /* CMD: NXTERMIOC_NXTERM_RESIZE + * DESCRIPTION: Inform NxTerm keyboard the the size of the window has + * changed + * ARG: A reference readable instance of struct nxtermioc_resize_s + * CONFIGURATION: CONFIG_NXTERM + */ + + case NXTERMIOC_NXTERM_RESIZE: + { + FAR struct nxtermioc_resize_s *resize = + (FAR struct nxtermioc_resize_s *)((uintptr_t)arg); + + ret = nxterm_resize(resize->handle, &resize->size); + } + break; + default: ret = -ENOTTY; break; diff --git a/graphics/nxterm/nxterm_redraw.c b/graphics/nxterm/nxterm_redraw.c index 5d76d1c1d6..22aaafa87e 100644 --- a/graphics/nxterm/nxterm_redraw.c +++ b/graphics/nxterm/nxterm_redraw.c @@ -1,5 +1,5 @@ /**************************************************************************** - * nuttx/graphics/nxterm/nxterm_bkgd.c + * nuttx/graphics/nxterm/nxterm_redraw.c * * Copyright (C) 2012 Gregory Nutt. All rights reserved. * Author: Gregory Nutt diff --git a/graphics/nxterm/nxterm_resize.c b/graphics/nxterm/nxterm_resize.c new file mode 100644 index 0000000000..c4730fa413 --- /dev/null +++ b/graphics/nxterm/nxterm_resize.c @@ -0,0 +1,108 @@ +/**************************************************************************** + * nuttx/graphics/nxterm/nxterm_resize.c + * + * Copyright (C) 2019 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 "nxterm.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: nxterm_resize + * + * Description: + * This function handles the IOCTL resize command. It indicates that the + * size of the NxTerm window has changed and needs to be updated. + * + * Input Parameters: + * handle - A handle previously returned by nx_register, nxtk_register, or + * nxtool_register. + * size - The new window size + * + * Returned Value: + * None + * + ****************************************************************************/ + +int nxterm_resize(NXTERM handle, FAR const struct nxgl_size_s *size) +{ + FAR struct nxterm_state_s *priv; + int ret; + + DEBUGASSERT(handle != NULL && size != NULL); + ginfo("size={%d,%d)\n", size->w, size->h); + + /* Recover our private state structure */ + + priv = (FAR struct nxterm_state_s *)handle; + + /* Get exclusive access to the state structure */ + + ret = nxterm_semwait(priv); + if (ret < 0) + { + /* The only expected error is if the wait failed because of it was + * interrupted by a signal or if the thread was canceled. + */ + + DEBUGASSERT(ret == -EINTR || ret == -ECANCELED); + return ret; + } + + /* Set the new window size. + * REVISIT: Should other things be reset as well? + */ + + priv->wndo.wsize.w = size->w; + priv->wndo.wsize.h = size->h; + + (void)nxterm_sempost(priv); + return true; +} diff --git a/include/nuttx/nx/nxterm.h b/include/nuttx/nx/nxterm.h index dc2261c638..a5676cb173 100644 --- a/include/nuttx/nx/nxterm.h +++ b/include/nuttx/nx/nxterm.h @@ -202,19 +202,23 @@ * ARG: A reference readable instance of struct * nxtermioc_redraw_s * CONFIGURATION: CONFIG_NXTERM - * DEPENDENCIES: Base NX terminal logic provides nxterm_redraw() * * CMD: NXTERMIOC_NXTERM_KBDIN * DESCRIPTION: Provide NxTerm keyboard input to NX. - * ARG: A reference readable instance of struct - * nxtermioc_kbdin_s + * ARG: A reference readable instance of struct nxtermioc_kbdin_s * CONFIGURATION: CONFIG_NXTERM_NXKBDIN - * DEPENDENCIES: Base NX terminal logic provides nxterm_kbdin() + * + * CMD: NXTERMIOC_NXTERM_RESIZE + * DESCRIPTION: Inform NxTerm keyboard the the size of the window has + * changed + * ARG: A reference readable instance of struct nxtermioc_resize_s + * CONFIGURATION: CONFIG_NXTERM */ #define _NXTERMIOC(nr) _IOC(_NXTERMBASE,nr) -#define NXTERMIOC_NXTERM_REDRAW _NXTERMIOC(0x000c) -#define NXTERMIOC_NXTERM_KBDIN _NXTERMIOC(0x000d) +#define NXTERMIOC_NXTERM_REDRAW _NXTERMIOC(0x0000) +#define NXTERMIOC_NXTERM_KBDIN _NXTERMIOC(0x0001) +#define NXTERMIOC_NXTERM_RESIZE _NXTERMIOC(0x0002) /**************************************************************************** * Public Types @@ -257,6 +261,14 @@ struct nxtermioc_kbdin_s }; #endif +/* Arguments passed with the NXTERMIOC_NXTERM_RESIZE command */ + +struct nxtermioc_resize_s +{ + NXTERM handle; /* NxTerm handle */ + struct nxgl_size_s size; /* New Window Size */ +}; + /**************************************************************************** * Public Data ****************************************************************************/