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
|
will receive its input from stdin (/dev/console). This works great but
|
||||||
cannot be shared between different windows. Chaos will ensue if you
|
cannot be shared between different windows. Chaos will ensue if you
|
||||||
try to support multiple NxConsole windows without CONFIG_NXCONSOLE_NXKBDIN
|
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 */
|
/* Relinquish the mutual exclusion semaphore */
|
||||||
|
|
||||||
sem_post(&priv->exclsem);
|
nxcon_sempost(priv);
|
||||||
|
|
||||||
/* Notify all poll/select waiters that they can write to the FIFO */
|
/* 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;
|
ssize_t nwritten;
|
||||||
int nexthead;
|
int nexthead;
|
||||||
char ch;
|
char ch;
|
||||||
|
int ret;
|
||||||
|
|
||||||
gvdbg("buflen=%d\n");
|
gvdbg("buflen=%d\n");
|
||||||
DEBUGASSERT(handle);
|
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;
|
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
|
/* Loop until all of the bytes have been written. This function may be
|
||||||
* called from an interrupt handler! Semaphores cannot be used!
|
* 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? */
|
/* Was anything written? */
|
||||||
|
|
||||||
#ifndef CONFIG_DISABLE_POLL
|
|
||||||
if (nwritten > 0)
|
if (nwritten > 0)
|
||||||
{
|
{
|
||||||
int i;
|
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 */
|
/* Notify all poll/select waiters that they can write to the FIFO */
|
||||||
|
|
||||||
|
#ifndef CONFIG_DISABLE_POLL
|
||||||
nxcon_pollnotify(priv, POLLIN);
|
nxcon_pollnotify(priv, POLLIN);
|
||||||
|
#endif
|
||||||
sched_unlock();
|
sched_unlock();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
nxcon_sempost(priv);
|
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];
|
outmsg->ch[i] = ch[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = nxmu_sendserver(conn, &outmsg, size);
|
ret = nxmu_sendserver(conn, outmsg, size);
|
||||||
|
|
||||||
free(outmsg);
|
free(outmsg);
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user