CNxServer: Remove NX server task. Instead, call nx_start (indirectly via boardctl(BOARDIOC_NX_START) to start the NX server as a kernel thread.
This commit is contained in:
parent
c5f8817904
commit
7e7b6a5e4c
@ -618,4 +618,8 @@
|
|||||||
large line spacings built-in. From Petteri Aimonen (2016-09-22).
|
large line spacings built-in. From Petteri Aimonen (2016-09-22).
|
||||||
* libnxwidgets: Allow setting line spacing in NxWidgets::CMultiLineTextBox.
|
* libnxwidgets: Allow setting line spacing in NxWidgets::CMultiLineTextBox.
|
||||||
From Petteri Aimonen (2016-09-22).
|
From Petteri Aimonen (2016-09-22).
|
||||||
|
* CNxServer: Remove NX server task. Now calls nx_start (indirectly through
|
||||||
|
boardctrl(BOARDIOC_NX_START) to start the NX Server kernel thread
|
||||||
|
(2016-12-01).
|
||||||
|
|
||||||
|
|
||||||
|
30
Kconfig
30
Kconfig
@ -39,7 +39,7 @@ config NXWIDGETS_EXTERNINIT
|
|||||||
config NXWIDGETS_DEVNO
|
config NXWIDGETS_DEVNO
|
||||||
int "LCD Device Number"
|
int "LCD Device Number"
|
||||||
default 0
|
default 0
|
||||||
depends on NXWIDGETS_EXTERNINIT || NX_LCDDRIVER
|
depends on (NXWIDGETS_EXTERNINIT || NX_LCDDRIVER) && !NX_MULTIUSER
|
||||||
---help---
|
---help---
|
||||||
LCD device number (in case there are more than one LCDs connected).
|
LCD device number (in case there are more than one LCDs connected).
|
||||||
Default: 0
|
Default: 0
|
||||||
@ -47,7 +47,7 @@ config NXWIDGETS_DEVNO
|
|||||||
config NXWIDGETS_VPLANE
|
config NXWIDGETS_VPLANE
|
||||||
int "Plane Number"
|
int "Plane Number"
|
||||||
default 0
|
default 0
|
||||||
depends on !NX_LCDDRIVER && !NXWIDGETS_EXTERNINIT
|
depends on !NX_LCDDRIVER && !NXWIDGETS_EXTERNINIT && !NX_MULTIUSER
|
||||||
---help---
|
---help---
|
||||||
Only a single video plane is supported. Default: 0
|
Only a single video plane is supported. Default: 0
|
||||||
|
|
||||||
@ -65,28 +65,6 @@ config NXWIDGET_SERVERINIT
|
|||||||
by other, external logic and will simply attempt to connect to the
|
by other, external logic and will simply attempt to connect to the
|
||||||
server.
|
server.
|
||||||
|
|
||||||
if NXWIDGET_SERVERINIT
|
|
||||||
|
|
||||||
config NXWIDGETS_SERVERPRIO
|
|
||||||
int "NX Server priority"
|
|
||||||
default 110
|
|
||||||
---help---
|
|
||||||
Priority of the NX server. This applies only if NX is configured in
|
|
||||||
multi-user mode (NX_MULTIUSER=y). Default: 110.
|
|
||||||
|
|
||||||
NOTE: Of the three priority definitions here, NXWIDGETS_SERVERPRIO
|
|
||||||
should have the highest priority to avoid data overrun race conditions.
|
|
||||||
Such errors would most likely appear as duplicated rows of data on the
|
|
||||||
display.
|
|
||||||
|
|
||||||
config NXWIDGETS_SERVERSTACK
|
|
||||||
int "NX Server Stack Size"
|
|
||||||
default 2048
|
|
||||||
---help---
|
|
||||||
NX server thread stack size (in multi-user mode). Default 2048
|
|
||||||
|
|
||||||
endif # NXWIDGET_SERVERINIT
|
|
||||||
|
|
||||||
config NXWIDGETS_CLIENTPRIO
|
config NXWIDGETS_CLIENTPRIO
|
||||||
int "NX Client Priority"
|
int "NX Client Priority"
|
||||||
default 100
|
default 100
|
||||||
@ -673,7 +651,7 @@ config NXWM_STARTWINDOW_PRIO
|
|||||||
---help---
|
---help---
|
||||||
Priority of the StartWindow task. Default: 100.
|
Priority of the StartWindow task. Default: 100.
|
||||||
|
|
||||||
NOTE: This priority should be less than NXWIDGETS_SERVERPRIO or else
|
NOTE: This priority should be less than NXSTART_SERVERPRIO or else
|
||||||
there may be data overrun errors. Such errors would most likely appear
|
there may be data overrun errors. Such errors would most likely appear
|
||||||
as duplicated rows of data on the display.
|
as duplicated rows of data on the display.
|
||||||
|
|
||||||
@ -703,7 +681,7 @@ config NXWM_NXTERM_PRIO
|
|||||||
---help---
|
---help---
|
||||||
Priority of the NxTerm task. Default: 100.
|
Priority of the NxTerm task. Default: 100.
|
||||||
|
|
||||||
NOTE: This priority should be less than NXWIDGETS_SERVERPRIO or
|
NOTE: This priority should be less than NXSTART_SERVERPRIO or
|
||||||
else there may be data overrun errors. Such errors would most likely
|
else there may be data overrun errors. Such errors would most likely
|
||||||
appear as duplicated rows of data on the display.
|
appear as duplicated rows of data on the display.
|
||||||
|
|
||||||
|
@ -90,15 +90,6 @@ namespace NXWidgets
|
|||||||
#endif
|
#endif
|
||||||
static uint8_t m_nServers; /**< The number of NX server instances */
|
static uint8_t m_nServers; /**< The number of NX server instances */
|
||||||
|
|
||||||
/**
|
|
||||||
* NX server thread. This is the entry point into the server thread that
|
|
||||||
* serializes the multi-threaded accesses to the display.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(CONFIG_NX_MULTIUSER) && defined(CONFIG_NXWIDGET_SERVERINIT)
|
|
||||||
static int server(int argc, char *argv[]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NX listener thread. This is the entry point of a thread that listeners for and
|
* NX listener thread. This is the entry point of a thread that listeners for and
|
||||||
* dispatches events from the NX server.
|
* dispatches events from the NX server.
|
||||||
|
@ -66,10 +66,10 @@
|
|||||||
* CONFIG_NXWIDGETS_DEVNO - LCD device number (in case there are more than
|
* CONFIG_NXWIDGETS_DEVNO - LCD device number (in case there are more than
|
||||||
* one LCDs connected. Default: 0
|
* one LCDs connected. Default: 0
|
||||||
* CONFIG_NXWIDGETS_VPLANE - Only a single video plane is supported. Default: 0
|
* CONFIG_NXWIDGETS_VPLANE - Only a single video plane is supported. Default: 0
|
||||||
* CONFIG_NXWIDGETS_SERVERPRIO - Priority of the NX server. This applies
|
* CONFIG_NXSTART_SERVERPRIO - Priority of the NX server. This applies
|
||||||
* only if NX is configured in multi-user mode (CONFIG_NX_MULTIUSER=y).
|
* only if NX is configured in multi-user mode (CONFIG_NX_MULTIUSER=y).
|
||||||
* Default: (SCHED_PRIORITY_DEFAULT+10). NOTE: Of the three priority
|
* Default: (SCHED_PRIORITY_DEFAULT+10). NOTE: Of the three priority
|
||||||
* definitions here, CONFIG_NXWIDGETS_SERVERPRIO should have the highest
|
* definitions here, CONFIG_NXSTART_SERVERPRIO should have the highest
|
||||||
* priority to avoid data overrun race conditions. Such errors would most
|
* priority to avoid data overrun race conditions. Such errors would most
|
||||||
* likely appear as duplicated rows of data on the display.
|
* likely appear as duplicated rows of data on the display.
|
||||||
* CONFIG_NXWIDGETS_CLIENTPRIO - The thread that calls CNxServer::connect()
|
* CONFIG_NXWIDGETS_CLIENTPRIO - The thread that calls CNxServer::connect()
|
||||||
@ -81,8 +81,6 @@
|
|||||||
* (CONFIG_NX_MULTIUSER=y). Default: SCHED_PRIORITY_DEFAULT
|
* (CONFIG_NX_MULTIUSER=y). Default: SCHED_PRIORITY_DEFAULT
|
||||||
* CONFIG_NXWIDGETS_EXTERNINIT - Define to support external display
|
* CONFIG_NXWIDGETS_EXTERNINIT - Define to support external display
|
||||||
* initialization.
|
* initialization.
|
||||||
* CONFIG_NXWIDGETS_SERVERSTACK - NX server thread stack size (in multi-user
|
|
||||||
* mode). Default 2048
|
|
||||||
* CONFIG_NXWIDGETS_LISTENERSTACK - NX listener thread stack size (in multi-user
|
* CONFIG_NXWIDGETS_LISTENERSTACK - NX listener thread stack size (in multi-user
|
||||||
* mode). Default 2048
|
* mode). Default 2048
|
||||||
* CONFIG_NXWIDGET_EVENTWAIT - Build in support for external window event, modal
|
* CONFIG_NXWIDGET_EVENTWAIT - Build in support for external window event, modal
|
||||||
@ -213,27 +211,15 @@
|
|||||||
* Priority of the NX server (in multi-user mode)
|
* Priority of the NX server (in multi-user mode)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIG_NXWIDGETS_SERVERPRIO
|
|
||||||
# define CONFIG_NXWIDGETS_SERVERPRIO (SCHED_PRIORITY_DEFAULT+10)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_NXWIDGETS_CLIENTPRIO
|
#ifndef CONFIG_NXWIDGETS_CLIENTPRIO
|
||||||
# define CONFIG_NXWIDGETS_CLIENTPRIO SCHED_PRIORITY_DEFAULT
|
# define CONFIG_NXWIDGETS_CLIENTPRIO SCHED_PRIORITY_DEFAULT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWIDGETS_CLIENTPRIO
|
#if CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWIDGETS_CLIENTPRIO
|
||||||
# warning "CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWIDGETS_CLIENTPRIO"
|
# warning "CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWIDGETS_CLIENTPRIO"
|
||||||
# warning" -- This can result in data overrun errors"
|
# warning" -- This can result in data overrun errors"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* NX server thread stack size (in multi-user mode)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CONFIG_NXWIDGETS_SERVERSTACK
|
|
||||||
# define CONFIG_NXWIDGETS_SERVERSTACK 2048
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Priority of the NX event listener thread (in multi-user mode)
|
* Priority of the NX event listener thread (in multi-user mode)
|
||||||
*/
|
*/
|
||||||
@ -242,8 +228,8 @@
|
|||||||
# define CONFIG_NXWIDGETS_LISTENERPRIO SCHED_PRIORITY_DEFAULT
|
# define CONFIG_NXWIDGETS_LISTENERPRIO SCHED_PRIORITY_DEFAULT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWIDGETS_LISTENERPRIO
|
#if CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWIDGETS_LISTENERPRIO
|
||||||
# warning "CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWIDGETS_LISTENERPRIO"
|
# warning "CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWIDGETS_LISTENERPRIO"
|
||||||
# warning" -- This can result in data overrun errors"
|
# warning" -- This can result in data overrun errors"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -246,24 +246,16 @@ bool CNxServer::connect(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NXWIDGET_SERVERINIT
|
#ifdef CONFIG_NXWIDGET_SERVERINIT
|
||||||
// Start the server task
|
// Start the NX server kernel thread
|
||||||
|
|
||||||
ginfo("CNxServer::connect: Starting server task\n");
|
printf("CNxServer::connect: Starting NX server\n");
|
||||||
pid_t serverId = task_create("NX Server", CONFIG_NXWIDGETS_SERVERPRIO,
|
ret = boardctl(BOARDIOC_NX_START, 0);
|
||||||
CONFIG_NXWIDGETS_SERVERSTACK, server,
|
if (ret < 0)
|
||||||
(FAR char * const *)0);
|
|
||||||
if (serverId < 0)
|
|
||||||
{
|
{
|
||||||
gerr("ERROR: NxServer::connect: Failed to create nx_servertask task: %d\n", errno);
|
printf("ERROR: CNxServer::connect: Failed to start the NX server: %d\n", errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait a bit to let the server get started
|
|
||||||
|
|
||||||
usleep(50*1000);
|
|
||||||
|
|
||||||
#endif // CONFIG_NXWIDGET_SERVERINIT
|
|
||||||
|
|
||||||
// Connect to the server
|
// Connect to the server
|
||||||
|
|
||||||
m_hNxServer = nx_connect();
|
m_hNxServer = nx_connect();
|
||||||
@ -388,87 +380,6 @@ void CNxServer::disconnect(void)
|
|||||||
}
|
}
|
||||||
#endif // CONFIG_NX_MULTIUSER
|
#endif // CONFIG_NX_MULTIUSER
|
||||||
|
|
||||||
/**
|
|
||||||
* NX server thread. This is the entry point into the server thread that
|
|
||||||
* serializes the multi-threaded accesses to the display.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(CONFIG_NX_MULTIUSER) && defined(CONFIG_NXWIDGET_SERVERINIT)
|
|
||||||
int CNxServer::server(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
FAR NX_DRIVERTYPE *dev;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
#if defined(CONFIG_NXWIDGETS_EXTERNINIT)
|
|
||||||
struct boardioc_graphics_s devinfo;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
// Use external graphics driver initialization
|
|
||||||
|
|
||||||
printf("nxtext_initialize: Initializing external graphics device\n");
|
|
||||||
|
|
||||||
devinfo.devno = CONFIG_NXWIDGETS_DEVNO;
|
|
||||||
devinfo.dev = NULL;
|
|
||||||
|
|
||||||
ret = boardctl(BOARDIOC_GRAPHICS_SETUP, (uintptr_t)&devinfo);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
gerr("ERROR: boardctl failed, devno=%d: %d\n", CONFIG_NXWIDGETS_DEVNO, errno);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev = devinfo.dev;
|
|
||||||
|
|
||||||
#elif defined(CONFIG_NX_LCDDRIVER)
|
|
||||||
// Initialize the LCD device
|
|
||||||
|
|
||||||
ret = board_lcd_initialize();
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
gerr("ERROR: board_lcd_initialize failed: %d\n", -ret);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the device instance
|
|
||||||
|
|
||||||
dev = board_lcd_getdev(CONFIG_NXWIDGETS_DEVNO);
|
|
||||||
if (!dev)
|
|
||||||
{
|
|
||||||
gerr("ERROR: board_lcd_getdev failed, devno=%d\n", CONFIG_NXWIDGETS_DEVNO);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn the LCD on at 75% power
|
|
||||||
|
|
||||||
(void)dev->setpower(dev, ((3*CONFIG_LCD_MAXPOWER + 3)/4));
|
|
||||||
|
|
||||||
#else // CONFIG_NX_LCDDRIVER
|
|
||||||
// Initialize the frame buffer device
|
|
||||||
|
|
||||||
ret = up_fbinitialize(0);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
gerr("ERROR: nxterm_server: up_fbinitialize failed: %d\n", -ret);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev = up_fbgetvplane(0, CONFIG_NXWIDGETS_VPLANE);
|
|
||||||
if (!dev)
|
|
||||||
{
|
|
||||||
gerr("ERROR: up_fbgetvplane failed, vplane=%d\n", CONFIG_NXWIDGETS_VPLANE);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // CONFIG_NX_LCDDRIVER
|
|
||||||
|
|
||||||
// Then start the server
|
|
||||||
|
|
||||||
ret = nx_run(dev);
|
|
||||||
ginfo("nx_run returned: %d\n", errno);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
#endif // CONFIG_NX_MULTIUSER && CONFIG_NXWIDGET_SERVERINIT
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the entry point of a thread that listeners for and dispatches
|
* This is the entry point of a thread that listeners for and dispatches
|
||||||
* events from the NX server.
|
* events from the NX server.
|
||||||
|
@ -307,7 +307,7 @@
|
|||||||
* CONFIG_NXWM_STARTWINDOW_MXMPRIO - The message priority. Default: 42.
|
* CONFIG_NXWM_STARTWINDOW_MXMPRIO - The message priority. Default: 42.
|
||||||
* CONFIG_NXWM_STARTWINDOW_PRIO - Priority of the StartWindoW task. Default:
|
* CONFIG_NXWM_STARTWINDOW_PRIO - Priority of the StartWindoW task. Default:
|
||||||
* SCHED_PRIORITY_DEFAULT. NOTE: This priority should be less than
|
* SCHED_PRIORITY_DEFAULT. NOTE: This priority should be less than
|
||||||
* CONFIG_NXWIDGETS_SERVERPRIO or else there may be data overrun errors.
|
* CONFIG_NXSTART_SERVERPRIO or else there may be data overrun errors.
|
||||||
* Such errors would most likely appear as duplicated rows of data on the
|
* Such errors would most likely appear as duplicated rows of data on the
|
||||||
* display.
|
* display.
|
||||||
* CONFIG_NXWM_STARTWINDOW_STACKSIZE - The stack size to use when starting the
|
* CONFIG_NXWM_STARTWINDOW_STACKSIZE - The stack size to use when starting the
|
||||||
@ -354,8 +354,8 @@
|
|||||||
# define CONFIG_NXWM_STARTWINDOW_PRIO SCHED_PRIORITY_DEFAULT
|
# define CONFIG_NXWM_STARTWINDOW_PRIO SCHED_PRIORITY_DEFAULT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWM_STARTWINDOW_PRIO
|
#if CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWM_STARTWINDOW_PRIO
|
||||||
# warning "CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWM_STARTWINDOW_PRIO"
|
# warning "CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWM_STARTWINDOW_PRIO"
|
||||||
# warning" -- This can result in data overrun errors"
|
# warning" -- This can result in data overrun errors"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -369,7 +369,7 @@
|
|||||||
*
|
*
|
||||||
* CONFIG_NXWM_NXTERM_PRIO - Priority of the NxTerm task. Default:
|
* CONFIG_NXWM_NXTERM_PRIO - Priority of the NxTerm task. Default:
|
||||||
* SCHED_PRIORITY_DEFAULT. NOTE: This priority should be less than
|
* SCHED_PRIORITY_DEFAULT. NOTE: This priority should be less than
|
||||||
* CONFIG_NXWIDGETS_SERVERPRIO or else there may be data overrun errors.
|
* CONFIG_NXSTART_SERVERPRIO or else there may be data overrun errors.
|
||||||
* Such errors would most likely appear as duplicated rows of data on the
|
* Such errors would most likely appear as duplicated rows of data on the
|
||||||
* display.
|
* display.
|
||||||
* CONFIG_NXWM_NXTERM_STACKSIZE - The stack size to use when starting the
|
* CONFIG_NXWM_NXTERM_STACKSIZE - The stack size to use when starting the
|
||||||
@ -388,8 +388,8 @@
|
|||||||
# define CONFIG_NXWM_NXTERM_PRIO SCHED_PRIORITY_DEFAULT
|
# define CONFIG_NXWM_NXTERM_PRIO SCHED_PRIORITY_DEFAULT
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWM_NXTERM_PRIO
|
# if CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWM_NXTERM_PRIO
|
||||||
# warning "CONFIG_NXWIDGETS_SERVERPRIO <= CONFIG_NXWM_NXTERM_PRIO"
|
# warning "CONFIG_NXSTART_SERVERPRIO <= CONFIG_NXWM_NXTERM_PRIO"
|
||||||
# warning" -- This can result in data overrun errors"
|
# warning" -- This can result in data overrun errors"
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user