Enable keypad input

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1411 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2008-12-04 03:19:59 +00:00
parent 000ac55d04
commit af233cacc6
11 changed files with 82 additions and 68 deletions

View File

@ -342,7 +342,7 @@ CONFIG_NXGLIB_DISABLE_24BPP=y
CONFIG_NXGLIB_DISABLE_32BPP=y CONFIG_NXGLIB_DISABLE_32BPP=y
CONFIG_NXGL_PACKEDMSFIRST=n CONFIG_NXGL_PACKEDMSFIRST=n
CONFIG_NX_MOUSE=y CONFIG_NX_MOUSE=y
CONFIG_NX_KBD=n CONFIG_NX_KBD=y
CONFIG_NX_BLOCKING=y CONFIG_NX_BLOCKING=y
CONFIG_NX_MXSERVERMSGS=32 CONFIG_NX_MXSERVERMSGS=32
CONFIG_NX_MXCLIENTMSGS=16 CONFIG_NX_MXCLIENTMSGS=16

View File

@ -342,7 +342,7 @@ CONFIG_NXGLIB_DISABLE_24BPP=y
CONFIG_NXGLIB_DISABLE_32BPP=n CONFIG_NXGLIB_DISABLE_32BPP=n
CONFIG_NXGL_PACKEDMSFIRST=n CONFIG_NXGL_PACKEDMSFIRST=n
CONFIG_NX_MOUSE=y CONFIG_NX_MOUSE=y
CONFIG_NX_KBD=n CONFIG_NX_KBD=y
CONFIG_NX_BLOCKING=y CONFIG_NX_BLOCKING=y
CONFIG_NX_MXSERVERMSGS=32 CONFIG_NX_MXSERVERMSGS=32
CONFIG_NX_MXCLIENTMSGS=16 CONFIG_NX_MXCLIENTMSGS=16

View File

@ -41,6 +41,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h>
#include <semaphore.h> #include <semaphore.h>
#include <debug.h> #include <debug.h>
#include <errno.h> #include <errno.h>
@ -78,7 +79,7 @@ static void nxeg_mousein(NXEGWINDOW hwnd, FAR const struct nxgl_point_s *pos,
ubyte buttons, FAR void *arg); ubyte buttons, FAR void *arg);
#endif #endif
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxeg_kbdin(NXEGWINDOW hwnd, ubyte nch, const ubyte *ch); static void nxeg_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg);
#endif #endif
#ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS #ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS
@ -93,7 +94,7 @@ static void nxeg_tbmousein(NXEGWINDOW hwnd, FAR const struct nxgl_point_s *pos,
ubyte buttons, FAR void *arg); ubyte buttons, FAR void *arg);
#endif #endif
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxeg_tbkbdin(NXEGWINDOW hwnd, ubyte nch, const ubyte *ch); static void nxeg_tbkbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg);
#endif #endif
#endif #endif
@ -256,11 +257,11 @@ static void nxeg_kbdinfo(ubyte nch, const ubyte *ch)
{ {
if (isprint(ch[i])) if (isprint(ch[i]))
{ {
message(" ch[%d]= (%02x)", i, ch[i]); message(" ch[%d]=%c (%02x)\n", i, ch[i], ch[i]);
} }
else else
{ {
message(" ch[%d]=%c (%02x)", i, ch[i], ch[i]); message(" ch[%d]= (%02x)\n", i, ch[i]);
} }
} }
} }
@ -271,9 +272,9 @@ static void nxeg_kbdinfo(ubyte nch, const ubyte *ch)
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxeg_kbdin(NXEGWINDOW hwnd, ubyte nch, const ubyte *ch) static void nxeg_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg)
{ {
message("nxeg_kbdin: hwnd=%p nch=%d\n", hwnd, nch); message("nxeg_kbdin%d: hwnd=%p nch=%d\n", (int)arg, hwnd, nch);
nxeg_kbdinfo(nch, ch); nxeg_kbdinfo(nch, ch);
} }
#endif #endif
@ -333,44 +334,15 @@ static void nxeg_tbmousein(NXEGWINDOW hwnd, FAR const struct nxgl_point_s *pos,
#ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS #ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxeg_tbkbdin(NXEGWINDOW hwnd, ubyte nch, const ubyte *ch) static void nxeg_tbkbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg)
{ {
message("nxeg_tbkbdin: ERROR -- toolbar should not received keyboard input\n"; message("nxeg_tbkbdin: ERROR -- toolbar should not received keyboard input\n");
message("nxeg_tbkbdin: hwnd=%p nch=%d\n", hwnd, nch); message("nxeg_tbkbdin%d: hwnd=%p nch=%d\n", (int)arg, hwnd, nch);
nxeg_kbdinfo(nch, ch); nxeg_kbdinfo(nch, ch);
} }
#endif #endif
#endif #endif
/****************************************************************************
* Name: nxeg_kbdin2
****************************************************************************/
#ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS
#ifdef CONFIG_NX_KBD
static void nxeg_kbdin2(NXEGWINDOW hwnd, ubyte nch, const ubyte *ch)
{
message("nxeg_kbdin2: hwnd=%p nch=%d\n", hwnd, nch);
nxeg_kbdinfo(nch, ch);
}
#endif
#endif
/****************************************************************************
* Name: nxeg_mousein2
****************************************************************************/
#ifndef CONFIG_EXAMPLES_NX_RAWWINDOWS
#ifdef CONFIG_NX_MOUSE
static void nxeg_mousein2(NXEGWINDOW hwnd, FAR const struct nxgl_point_s *pos,
ubyte buttons, FAR void *arg)
{
message("nxeg_mousein%d: hwnd=%p pos=(%d,%d) button=%02x\n",
(int)arg, hwnd, pos->x, pos->y, buttons);
}
#endif
#endif
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/

View File

@ -43,6 +43,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <string.h>
#include <sched.h> #include <sched.h>
#include <pthread.h> #include <pthread.h>
#include <errno.h> #include <errno.h>
@ -72,6 +73,12 @@
static int g_exitcode = NXEXIT_SUCCESS; static int g_exitcode = NXEXIT_SUCCESS;
#ifdef CONFIG_NX_KBD
static const ubyte g_kbdmsg1[] = "NuttX is cool!";
static const ubyte g_kbdmsg2[] = "NuttX is fun!";
#endif
/**************************************************************************** /****************************************************************************
* Public Data * Public Data
****************************************************************************/ ****************************************************************************/
@ -656,6 +663,23 @@ int user_start(int argc, char *argv[])
/* Sleep a bit */ /* Sleep a bit */
message("user_start: Sleeping\n\n");
sleep(1);
#endif
/* Give keyboard input to the top window -- should be window #2 */
#ifdef CONFIG_NX_KBD
message("user_start: Send keyboard input: %s\n", g_kbdmsg1);
ret = nx_kbdin(g_hnx, strlen((FAR const char *)g_kbdmsg1), g_kbdmsg1);
if (ret < 0)
{
message("user_start: nx_kbdin failed: %d\n", errno);
goto errout_with_hwnd2;
}
/* Sleep a bit */
message("user_start: Sleeping\n\n"); message("user_start: Sleeping\n\n");
sleep(1); sleep(1);
#endif #endif
@ -681,6 +705,23 @@ int user_start(int argc, char *argv[])
/* Sleep a bit */ /* Sleep a bit */
message("user_start: Sleeping\n\n");
sleep(1);
#endif
/* Give keyboard input to the top window -- should be window #1 */
#ifdef CONFIG_NX_KBD
message("user_start: Send keyboard input: %s\n", g_kbdmsg2);
ret = nx_kbdin(g_hnx, strlen((FAR const char *)g_kbdmsg2), g_kbdmsg2);
if (ret < 0)
{
message("user_start: nx_kbdin failed: %d\n", errno);
goto errout_with_hwnd2;
}
/* Sleep a bit */
message("user_start: Sleeping\n\n"); message("user_start: Sleeping\n\n");
sleep(1); sleep(1);
#endif #endif

View File

@ -94,7 +94,7 @@ int nx_kbdchin(NXHANDLE handle, ubyte ch)
outmsg.nch = 1; outmsg.nch = 1;
outmsg.ch[0] = ch; outmsg.ch[0] = ch;
ret = mq_send(conn->c_cwrmq, &outmsg, sizeof(struct nxsvrmsg_kbdin_s), NX_SVRMSG_PRIO); ret = mq_send(conn->cwrmq, &outmsg, sizeof(struct nxsvrmsg_kbdin_s), NX_SVRMSG_PRIO);
if (ret < 0) if (ret < 0)
{ {
gdbg("mq_send failed: %d\n", errno); gdbg("mq_send failed: %d\n", errno);

View File

@ -40,6 +40,7 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <debug.h> #include <debug.h>
@ -82,7 +83,7 @@
* *
****************************************************************************/ ****************************************************************************/
int int nx_kbdin(NXHANDLE handle, ubyte nch const char *ch) int nx_kbdin(NXHANDLE handle, ubyte nch, FAR const ubyte *ch)
{ {
FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle; FAR struct nxfe_conn_s *conn = (FAR struct nxfe_conn_s *)handle;
FAR struct nxsvrmsg_kbdin_s *outmsg; FAR struct nxsvrmsg_kbdin_s *outmsg;
@ -104,15 +105,15 @@ int int nx_kbdin(NXHANDLE handle, ubyte nch const char *ch)
/* Inform the server of the new keypad data */ /* Inform the server of the new keypad data */
outsg->msgid = NX_SVRMSG_KBDIN; outmsg->msgid = NX_SVRMSG_KBDIN;
outmsg->nch = nch; outmsg->nch = nch;
for (i = 0; i < nch; i+) for (i = 0; i < nch; i++)
{ {
outmsg->ch[i] = ch[i]; outmsg->ch[i] = ch[i];
} }
ret = mq_send(conn->c_cwrmq, outmsg, size, NX_SVRMSG_PRIO); ret = mq_send(conn->cwrmq, outmsg, size, NX_SVRMSG_PRIO);
if (ret < 0) if (ret < 0)
{ {
gdbg("mq_send failed: %d\n", errno); gdbg("mq_send failed: %d\n", errno);

View File

@ -237,11 +237,11 @@ struct nxclimsg_mousein_s
/* This message reports a new keypad event to a particular window */ /* This message reports a new keypad event to a particular window */
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
struct nxclimsg_key struct nxclimsg_kbdin_s
{ {
uint32 msgid; /* NX_CLIMSG_KBDIN */ uint32 msgid; /* NX_CLIMSG_KBDIN */
FAR struct nxbe_window_s *wnd; /* The handle of window receiving keypad input */ FAR struct nxbe_window_s *wnd; /* The handle of window receiving keypad input */
ubyte nch /* Number of characters received */ ubyte nch; /* Number of characters received */
ubyte ch[1]; /* Array of received characters */ ubyte ch[1]; /* Array of received characters */
}; };
#endif #endif
@ -408,7 +408,7 @@ struct nxsvrmsg_mousein_s
struct nxsvrmsg_kbdin_s struct nxsvrmsg_kbdin_s
{ {
uint32 msgid; /* NX_SVRMSG_KBDIN */ uint32 msgid; /* NX_SVRMSG_KBDIN */
ubyte nch /* Number of characters received */ ubyte nch ; /* Number of characters received */
ubyte ch[1]; /* Array of received characters */ ubyte ch[1]; /* Array of received characters */
}; };
#endif #endif
@ -613,7 +613,7 @@ EXTERN int nxmu_mousein(FAR struct nxfe_state_s *fe,
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
EXTERN void nxmu_kbdin(FAR struct nxfe_state_s *fe, ubyte nch, ubyte *ch); EXTERN void nxmu_kbdin(FAR struct nxfe_state_s *fe, ubyte nch, FAR ubyte *ch);
#endif #endif
#undef EXTERN #undef EXTERN

View File

@ -40,6 +40,7 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <debug.h> #include <debug.h>
@ -82,10 +83,9 @@
* *
****************************************************************************/ ****************************************************************************/
void nxmu_kbdin(FAR struct nxs_server_s *svr, ubyte nch, ubyte *ch) void nxmu_kbdin(FAR struct nxfe_state_s *fe, ubyte nch, FAR ubyte *ch)
{ {
struct nxbe_window_s *wnd; FAR struct nxclimsg_kbdin_s *outmsg;
FAR struct nxclimgs_kbdin_s *outmsg;
int size; int size;
int ret; int ret;
int i; int i;
@ -94,22 +94,22 @@ void nxmu_kbdin(FAR struct nxs_server_s *svr, ubyte nch, ubyte *ch)
* character data. * character data.
*/ */
size = sizeof(struct nxclimgs_kbdin_s) + nch - 1; size = sizeof(struct nxclimsg_kbdin_s) + nch - 1;
outmsg = (FAR struct nxclimgs_kbdin_s *)malloc(size); outmsg = (FAR struct nxclimsg_kbdin_s *)malloc(size);
if (outmsg) if (outmsg)
{ {
/* Give the keypad input only to the top child */ /* Give the keypad input only to the top child */
outsg->msgid = NX_SVRMSG_KBDIN; outmsg->msgid = NX_CLIMSG_KBDIN;
outmsg->wnd = svr->topwnd; outmsg->wnd = fe->be.topwnd;
outmsg->nch = nch; outmsg->nch = nch;
for (i = 0; i < nch; i+) for (i = 0; i < nch; i++)
{ {
outmsg->ch[i] = ch[i]; outmsg->ch[i] = ch[i];
} }
ret = mq_send(svr->topwnd->conn->swrmq, outmsg, size, NX_SVRMSG_PRIO); ret = mq_send(fe->be.topwnd->conn->swrmq, outmsg, size, NX_SVRMSG_PRIO);
if (ret < 0) if (ret < 0)
{ {
gdbg("mq_send failed: %d\n", errno); gdbg("mq_send failed: %d\n", errno);

View File

@ -81,7 +81,7 @@
* *
****************************************************************************/ ****************************************************************************/
int int nx_kbdin(NXHANDLE handle, ubyte nch const char *ch) int nx_kbdin(NXHANDLE handle, ubyte nch, FAR const ubyte *ch)
{ {
FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle; FAR struct nxfe_state_s *fe = (FAR struct nxfe_state_s *)handle;
FAR struct nxbe_window_s *wnd = fe->be.topwnd; FAR struct nxbe_window_s *wnd = fe->be.topwnd;
@ -92,7 +92,7 @@ int int nx_kbdin(NXHANDLE handle, ubyte nch const char *ch)
if (wnd->cb->kbdin) if (wnd->cb->kbdin)
{ {
wnd->cb->kbdin(wnd, kbd->nch, kbd->ch, wnd->arg); wnd->cb->kbdin(wnd, nch, ch, wnd->arg);
} }
} }

View File

@ -72,7 +72,7 @@ static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
ubyte buttons, FAR void *arg); ubyte buttons, FAR void *arg);
#endif #endif
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch); static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg);
#endif #endif
/**************************************************************************** /****************************************************************************
@ -91,7 +91,7 @@ const struct nx_callback_s g_nxtkcb =
, nxtk_mousein /* mousein */ , nxtk_mousein /* mousein */
#endif #endif
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
, nxtk_kbdin1 /* kbdin */ , nxtk_kbdin /* kbdin */
#endif #endif
}; };
@ -252,7 +252,7 @@ static void nxtk_mousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch) static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg)
{ {
FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd; FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hwnd;
@ -260,7 +260,7 @@ static void nxtk_kbdin(NXWINDOW hwnd, ubyte nch, const ubyte *ch)
if (fwnd->fwcb->kbdin) if (fwnd->fwcb->kbdin)
{ {
fwnd->fwcb->kbdin((NXTKWINDOW)fwnd, nch, ch); fwnd->fwcb->kbdin((NXTKWINDOW)fwnd, nch, ch, fwnd->fwarg);
} }
} }
#endif #endif

View File

@ -177,7 +177,7 @@ struct nx_callback_s
**************************************************************************/ **************************************************************************/
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
void (*kbdin)(NXWINDOW hwnd, ubyte nch, const ubyte *ch, FAR void *arg); void (*kbdin)(NXWINDOW hwnd, ubyte nch, FAR const ubyte *ch, FAR void *arg);
#endif #endif
}; };
@ -687,7 +687,7 @@ EXTERN int nx_bitmap(NXWINDOW hwnd, FAR const struct nxgl_rect_s *dest,
#ifdef CONFIG_NX_KBD #ifdef CONFIG_NX_KBD
EXTERN int nx_kbdchin(NXHANDLE handle, ubyte ch); EXTERN int nx_kbdchin(NXHANDLE handle, ubyte ch);
EXTERN int nx_kbdin(NXHANDLE handle, ubyte nch const char *ch); EXTERN int nx_kbdin(NXHANDLE handle, ubyte nch, FAR const ubyte *ch);
#endif #endif
/**************************************************************************** /****************************************************************************