summaryrefslogtreecommitdiff
path: root/apps/graphics
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-12-02 07:34:51 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-12-03 16:48:07 -0600
commit1b3065da9c164337131c10bcad8770925df45602 (patch)
tree69576591df1df9a78966d59cd7678ba957e3b032 /apps/graphics
parent543073e801200b129b6ee011cfb677f10cb3f843 (diff)
downloadnuttx-1b3065da9c164337131c10bcad8770925df45602.tar.gz
nuttx-1b3065da9c164337131c10bcad8770925df45602.tar.bz2
nuttx-1b3065da9c164337131c10bcad8770925df45602.zip
Rethink positional input; Add input configuration logic
Diffstat (limited to 'apps/graphics')
-rw-r--r--apps/graphics/traveler/Kconfig32
-rw-r--r--apps/graphics/traveler/include/trv_input.h45
-rw-r--r--apps/graphics/traveler/src/trv_input.c161
-rw-r--r--apps/graphics/traveler/src/trv_nxbkgd.c15
4 files changed, 208 insertions, 45 deletions
diff --git a/apps/graphics/traveler/Kconfig b/apps/graphics/traveler/Kconfig
index 851ab4ca7..47dd09c1b 100644
--- a/apps/graphics/traveler/Kconfig
+++ b/apps/graphics/traveler/Kconfig
@@ -17,6 +17,38 @@ config GRAPHICS_TRAVELER_RGB32_888
endchoice # Color format
+config GRAPHICS_TRAVELER_JOYSTICK
+ bool
+ default n
+
+choice
+ prompt "Input device"
+ default GRAPHICS_TRAVELER_AJOYSTICK if CONFIG_AJOYSTICK
+ default GRAPHICS_TRAVELER_DJOYSTICK if CONFIG_DJOYSTICK && !CONFIG_AJOYSTICK
+ default GRAPHICS_TRAVELER_NX_XYINPUT if CONFIG_NX_XYINPUT && !CONFIG_AJOYSTICK && !CONFIG_DJOYSTICK
+
+config GRAPHICS_TRAVELER_AJOYSTICK
+ bool "Analog joystick"
+ depends on CONFIG_AJOYSTICK
+ select GRAPHICS_TRAVELER_JOYSTICK
+
+config GRAPHICS_TRAVELER_DJOYSTICK
+ bool "Discrete joystick"
+ depends on CONFIG_DJOYSTICK
+ select GRAPHICS_TRAVELER_JOYSTICK
+
+config GRAPHICS_TRAVELER_NX_XYINPUT
+ bool "NX X/Y input"
+ depends on CONFIG_NX_XYINPUT
+
+endchoice # Input device
+
+config GRAPHICS_TRAVELER_JOYDEV
+ string "Joystick device name"
+ default "/dev/ajoy0" if GRAPHICS_TRAVELER_AJOYSTICK
+ default "/dev/djoy0" if GRAPHICS_TRAVELER_DJOYSTICK
+ depends on GRAPHICS_TRAVELER_JOYSTICK
+
config GRAPHICS_TRAVELER_PERFMON
bool "Performance monitor"
default y
diff --git a/apps/graphics/traveler/include/trv_input.h b/apps/graphics/traveler/include/trv_input.h
index beb3b20a4..1c2e7e724 100644
--- a/apps/graphics/traveler/include/trv_input.h
+++ b/apps/graphics/traveler/include/trv_input.h
@@ -46,44 +46,26 @@
* Pre-processor Definitions
****************************************************************************/
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-/* INPUT */
-
-enum trv_move_event_e
-{
- INPUT_MOVE_NONE = 0,
- INPUT_MOVE_FORWARD,
- INPUT_MOVE_BACKWARD,
- INPUT_MOVE_LEFT,
- INPUT_MOVE_RIGHT
-};
-
-enum trv_turn_event_e
+struct trv_input_s
{
- INPUT_TURN_NONE = 0,
- INPUT_TURN_UP,
- INPUT_TURN_DOWN,
- INPUT_TURN_LEFT,
- INPUT_TURN_RIGHT,
+ int16_t fwdrate; /* Forward motion rate. Negative is backward */
+ int16_t leftrate; /* Left motion rate. Negative is right */
+ int16_t yawrate; /* Yaw turn rate. Positive is to the left */
+ int16_t pitchrate; /* Pitch turn rate. Positive is upward */
+ bool dooropen; /* True: Open a door */
};
-enum trv_door_event_e
-{
- INPUT_DOOR_NONE = 0,
- INPUT_DOOR_OPEN,
-};
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
-extern enum trv_move_event_e g_move_event;
-extern enum trv_turn_event_e g_turn_event;
-extern enum trv_door_event_e g_door_event;
-extern trv_coord_t g_trv_move_rate;
-extern trv_coord_t g_trv_turn_rate;
+/* Report positional inputs */
+
+extern struct trv_input_s g_trv_input;
/****************************************************************************
* Public Function Prototypes
@@ -92,5 +74,8 @@ extern trv_coord_t g_trv_turn_rate;
void trv_input_initialize(void);
void trv_input_read(void);
void trv_input_terminate(void);
+#ifdef CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT
+void trv_input_xyinput(trv_coord_t xpos, trv_coord_t xpos, uint8_t buttons);
+#endif
#endif /* __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_INPUT_H */
diff --git a/apps/graphics/traveler/src/trv_input.c b/apps/graphics/traveler/src/trv_input.c
index 1bc9cbd38..ba8d987e7 100644
--- a/apps/graphics/traveler/src/trv_input.c
+++ b/apps/graphics/traveler/src/trv_input.c
@@ -41,32 +41,86 @@
#include "trv_types.h"
#include "trv_input.h"
+#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
+# include <fcntl.h>
+# include <errno.h>
+
+#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
+# include <nuttx/input/ajoystick.h>
+#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
+# include <nuttx/input/djoystick.h>
+#endif
+
+#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
+#endif
+
+/****************************************************************************
+ * Pre-processor Definitions
+ *************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ *************************************************************************/
+
+struct trv_input_info_s
+{
+#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
+ int fd; /* Open driver descriptor */
+#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
+ int16_t centerx; /* Center X position */
+ int16_t maxleft; /* Maximum left X position */
+ int16_t maxright; /* Maximum right x position */
+ int16_t centery; /* Center Y position */
+ int16_t maxforward; /* Maximum forward Y position */
+ int16_t maxback; /* Maximum backward Y position */
+#endif
+#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
+ trv_coord_t xpos; /* Reported X position */
+ trv_coord_t ypos; /* Reported Y position */
+ uint8_t buttons; /* Report button set */
+#endif
+};
+
/****************************************************************************
* Public Data
*************************************************************************/
-extern enum trv_move_event_e g_move_event;
-extern enum trv_turn_event_e g_turn_event;
-extern enum trv_door_event_e g_door_event;
-extern trv_coord_t g_trv_move_rate;
-extern trv_coord_t g_trv_turn_rate;
+/* Report positional inputs */
+
+struct trv_input_s g_trv_input;
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
+#ifdef CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT
+static struct trv_input_info_s g_trv_input_info;
+#endif
+
/****************************************************************************
* Private Data
*************************************************************************/
-static const char g_default_worldfile[] = "transfrm.wld";
-static FAR struct trv_graphics_info_s g_trv_ginfo;
-
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
+ * Name: trv_joystick_calibrate
+ *
+ * Description:
+ * Calibrate the joystick
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
+static void trv_joystick_calibrate(void)
+{
+#warning Missing logic"
+}
+#endif
+
+/****************************************************************************
* Public Functions
****************************************************************************/
@@ -80,20 +134,82 @@ static FAR struct trv_graphics_info_s g_trv_ginfo;
void trv_input_initialize(void)
{
-#warning Missing Logic
+#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
+ /* Open the joy stick device */
+
+ g_trv_input_info.fd = open(CONFIG_GRAPHICS_TRAVELER_JOYDEV, O_RDONLY);
+ if (g_trv_input_info.fd < 0)
+ {
+ trv_abort("ERROR: Failed to open %s: %d\n",
+ CONFIG_GRAPHICS_TRAVELER_JOYDEV, errno);
+ }
+
+#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
+ /* Calibrate the analog joystick device */
+
+ trv_joystick_calibrate();
+#endif
+
+#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
+ /* Set the position to the center of the display at eye-level */
+#warning Missing logic
+#endif
}
/****************************************************************************
* Name: trv_input_read
*
* Description:
- * Read the next input froom the input device
+ * Read the next input from the input device
*
****************************************************************************/
void trv_input_read(void)
{
-#warning Missing Logic
+#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
+#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
+ struct ajoy_sample_s sample;
+ ssize_t nread;
+
+ /* Read data from the analog joystick */
+
+ nread = read(g_trv_input_info.fd, &sample, sizeof(struct ajoy_sample_s));
+ if (nread < 0)
+ {
+ trv_abort("ERROR: Joystick read error: %d\n", errno);
+ }
+ else if (nread != sizeof(struct ajoy_sample_s))
+ {
+ trv_abort("ERROR: Unexpected joystick read size: %ld\n", (long)nread);
+ }
+
+ /* Determine the input data to return to the POV logic */
+#warning Missing logic
+
+#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
+ struct djoy_sample_s sample;
+ ssize_t nread;
+
+ /* Read data from the discrete joystick */
+
+ nread = read(g_trv_input_info.fd, &sample, sizeof(struct djoy_sample_s));
+ if (nread < 0)
+ {
+ trv_abort("ERROR: Joystick read error: %d\n", errno);
+ }
+ else if (nread != sizeof(struct djoy_sample_s))
+ {
+ trv_abort("ERROR: Unexpected joystick read size: %ld\n", (long)nread);
+ }
+
+ /* Determine the input data to return to the POV logic */
+#warning Missing logic
+
+#endif
+#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
+ /* Make position decision based on last sampled X/Y input data */
+#warning Missing logic
+#endif
}
/****************************************************************************
@@ -106,5 +222,28 @@ void trv_input_read(void)
void trv_input_terminate(void)
{
+#ifdef CONFIG_GRAPHICS_TRAVELER_JOYSTICK
+#endif
#warning Missing Logic
}
+
+/****************************************************************************
+ * Name: trv_input_xyinput
+ *
+ * Description:
+ * Receive X/Y input from NX
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT
+void trv_input_xyinput(trv_coord_t xpos, trv_coord_t xpos, uint8_t buttons)
+{
+ /* Just save the positional data and button presses for now. We will
+ * decide what to do with the data when we are polled for new input.
+ */
+
+ g_trv_input_info.xpos = xpos;
+ g_trv_input_info.ypos = ypos;
+ g_trv_input_info.buttons = buttons;
+}
+#endif
diff --git a/apps/graphics/traveler/src/trv_nxbkgd.c b/apps/graphics/traveler/src/trv_nxbkgd.c
index 4bd8a6997..08a54a834 100644
--- a/apps/graphics/traveler/src/trv_nxbkgd.c
+++ b/apps/graphics/traveler/src/trv_nxbkgd.c
@@ -38,6 +38,9 @@
****************************************************************************/
#include "trv_types.h"
+#ifdef CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT
+# include "trv_input.h"
+#endif
#include <string.h>
#include <semaphore.h>
@@ -122,7 +125,7 @@ static void trv_nxposition(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
/* Report the position */
- gvdbg("hwnd=%p size=(%d,%d) pos=(%d,%d) bounds={(%d,%d),(%d,%d)}\n",
+ trv_vdebug("hwnd=%p size=(%d,%d) pos=(%d,%d) bounds={(%d,%d),(%d,%d)}\n",
hwnd, size->w, size->h, pos->x, pos->y,
bounds->pt1.x, bounds->pt1.y, bounds->pt2.x, bounds->pt2.y);
@@ -141,7 +144,7 @@ static void trv_nxposition(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
g_trv_nxresolution = true;
sem_post(&g_trv_nxevent);
- gvdbg("Have width=%d height=%d\n", ginfo->width, ginfo->height);
+ trv_vdebug("Have width=%d height=%d\n", ginfo->width, ginfo->height);
}
}
@@ -153,8 +156,12 @@ static void trv_nxposition(NXWINDOW hwnd, FAR const struct nxgl_size_s *size,
static void trv_nxmousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
uint8_t buttons, FAR void *arg)
{
- printf("trv_nxmousein: hwnd=%p pos=(%d,%d) button=%02x\n",
+ trv_vdebug("trv_nxmousein: hwnd=%p pos=(%d,%d) button=%02x\n",
hwnd, pos->x, pos->y, buttons);
+
+#ifdef CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT
+ trv_input_xyinput((trv_coord_t)pos->x,(trv_coord_t) pos->y, buttons);
+#endif
}
#endif
@@ -166,7 +173,7 @@ static void trv_nxmousein(NXWINDOW hwnd, FAR const struct nxgl_point_s *pos,
static void trv_nxkbdin(NXWINDOW hwnd, uint8_t nch, FAR const uint8_t *ch,
FAR void *arg)
{
- gvdbg("hwnd=%p nch=%d\n", hwnd, nch);
+ trv_vdebug("hwnd=%p nch=%d\n", hwnd, nch);
}
#endif