Add an NxWM console/keyboard thread and eliminate all issues with NxConsole window serial input
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4755 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
2ee17af708
commit
ecc9d07e3d
@ -2790,3 +2790,11 @@
|
||||
will receive its input from stdin (/dev/console). This works great but
|
||||
cannot be shared between different windows. Chaos will ensue if you
|
||||
try to support multiple NxConsole windows without CONFIG_NXCONSOLE_NXKBDIN
|
||||
* graphics/nxmu/nx_kbdin.c: Fix pointer argument. This is a error
|
||||
introduced in changes leading up to the 6.18 release. This error will
|
||||
cause crashes or perhaps simply not work when you try to handle window
|
||||
keyboard data in multi-user mode.
|
||||
* graphics/nxconsole/nxcon_kdbind.c: Fixed unmatched sem_wait and sem_post.
|
||||
Fix some conditional compilation that included a few too many lines of code.
|
||||
|
||||
|
||||
|
@ -244,7 +244,7 @@ ssize_t nxcon_read(FAR struct file *filep, FAR char *buffer, size_t len)
|
||||
|
||||
/* Relinquish the mutual exclusion semaphore */
|
||||
|
||||
sem_post(&priv->exclsem);
|
||||
nxcon_sempost(priv);
|
||||
|
||||
/* Notify all poll/select waiters that they can write to the FIFO */
|
||||
|
||||
@ -400,6 +400,7 @@ void nxcon_kbdin(NXCONSOLE handle, FAR const uint8_t *buffer, uint8_t buflen)
|
||||
ssize_t nwritten;
|
||||
int nexthead;
|
||||
char ch;
|
||||
int ret;
|
||||
|
||||
gvdbg("buflen=%d\n");
|
||||
DEBUGASSERT(handle);
|
||||
@ -408,6 +409,15 @@ void nxcon_kbdin(NXCONSOLE handle, FAR const uint8_t *buffer, uint8_t buflen)
|
||||
|
||||
priv = (FAR struct nxcon_state_s *)handle;
|
||||
|
||||
/* Get exclusive access to the driver structure */
|
||||
|
||||
ret = nxcon_semwait(priv);
|
||||
if (ret < 0)
|
||||
{
|
||||
gdbg("ERROR: nxcon_semwait failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Loop until all of the bytes have been written. This function may be
|
||||
* called from an interrupt handler! Semaphores cannot be used!
|
||||
*
|
||||
@ -451,7 +461,6 @@ void nxcon_kbdin(NXCONSOLE handle, FAR const uint8_t *buffer, uint8_t buflen)
|
||||
|
||||
/* Was anything written? */
|
||||
|
||||
#ifndef CONFIG_DISABLE_POLL
|
||||
if (nwritten > 0)
|
||||
{
|
||||
int i;
|
||||
@ -468,10 +477,11 @@ void nxcon_kbdin(NXCONSOLE handle, FAR const uint8_t *buffer, uint8_t buflen)
|
||||
|
||||
/* Notify all poll/select waiters that they can write to the FIFO */
|
||||
|
||||
#ifndef CONFIG_DISABLE_POLL
|
||||
nxcon_pollnotify(priv, POLLIN);
|
||||
#endif
|
||||
sched_unlock();
|
||||
}
|
||||
#endif
|
||||
|
||||
nxcon_sempost(priv);
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ int nx_kbdin(NXHANDLE handle, uint8_t nch, FAR const uint8_t *ch)
|
||||
outmsg->ch[i] = ch[i];
|
||||
}
|
||||
|
||||
ret = nxmu_sendserver(conn, &outmsg, size);
|
||||
ret = nxmu_sendserver(conn, outmsg, size);
|
||||
|
||||
free(outmsg);
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user