summaryrefslogtreecommitdiff
path: root/apps/graphics/traveler/src/trv_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/graphics/traveler/src/trv_input.c')
-rw-r--r--apps/graphics/traveler/src/trv_input.c161
1 files changed, 150 insertions, 11 deletions
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