Rethink positional input; Add input configuration logic
This commit is contained in:
parent
36c24cd665
commit
2ca7d8bb0e
@ -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
|
||||
|
@ -46,44 +46,26 @@
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
struct trv_input_s
|
||||
{
|
||||
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 */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* 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
|
||||
{
|
||||
INPUT_TURN_NONE = 0,
|
||||
INPUT_TURN_UP,
|
||||
INPUT_TURN_DOWN,
|
||||
INPUT_TURN_LEFT,
|
||||
INPUT_TURN_RIGHT,
|
||||
};
|
||||
|
||||
enum trv_door_event_e
|
||||
{
|
||||
INPUT_DOOR_NONE = 0,
|
||||
INPUT_DOOR_OPEN,
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* 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 */
|
||||
|
@ -41,31 +41,85 @@
|
||||
#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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user