more input wip

git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@623 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2008-12-30 16:53:18 +00:00
parent 289cd18ef0
commit 34581c95f8
5 changed files with 162 additions and 23 deletions

View file

@ -106,17 +106,17 @@ void menu_draw_end(void);
#include "../gp2x/gp2x.h"
#define PBTN_UP 0
#define PBTN_DOWN 0
#define PBTN_LEFT 0
#define PBTN_RIGHT 0
#define PBTN_UP (1 << 0)
#define PBTN_DOWN (1 << 1)
#define PBTN_LEFT (1 << 2)
#define PBTN_RIGHT (1 << 3)
#define PBTN_NORTH 0
#define PBTN_SOUTH 0
#define PBTN_WEST 0
#define PBTN_EAST 0
#define PBTN_L 0
#define PBTN_R 0
#define PBTN_NORTH (1 << 4)
#define PBTN_SOUTH (1 << 5)
#define PBTN_WEST (1 << 6)
#define PBTN_EAST (1 << 7)
#define PBTN_L (1 << 8)
#define PBTN_R (1 << 9)
unsigned long wait_for_input(unsigned long interesting);
void gp2x_pd_clone_buffer2(void);

View file

@ -3,7 +3,7 @@
#include <string.h>
#include "input.h"
#include "../linux/event.h"
#include "../linux/in_evdev.h"
typedef struct
{
@ -23,10 +23,8 @@ static int in_dev_count = 0;
static int in_bind_count(int drv_id)
{
int count = 0;
#ifdef IN_EVDEV
if (drv_id == IN_DRVID_EVDEV)
count = in_evdev_bind_count();
#endif
if (count <= 0)
printf("input: failed to get bind count for drv %d\n", drv_id);
@ -50,10 +48,8 @@ static int *in_alloc_binds(int drv_id)
static void in_free(in_dev_t *dev)
{
if (dev->probed) {
#ifdef IN_EVDEV
if (dev->drv_id == IN_DRVID_EVDEV)
in_evdev_free(dev->drv_data);
#endif
}
dev->probed = 0;
dev->drv_data = NULL;
@ -128,9 +124,7 @@ void in_probe(void)
for (i = 0; i < in_dev_count; i++)
in_devices[i].probed = 0;
#ifdef IN_EVDEV
in_evdev_probe();
#endif
/* get rid of devs without binds and probes */
for (i = 0; i < in_dev_count; i++) {
@ -163,15 +157,44 @@ int in_update(void)
for (i = 0; i < in_dev_count; i++) {
if (in_devices[i].probed && in_devices[i].binds != NULL) {
#ifdef IN_EVDEV
result |= in_evdev_update(in_devices[i].drv_data, in_devices[i].binds);
#endif
if (in_devices[i].drv_id == IN_DRVID_EVDEV)
result |= in_evdev_update(in_devices[i].drv_data, in_devices[i].binds);
}
}
return result;
}
/*
* update with wait for a press, return bitfield of BTN_*
* only can use 1 drv here..
*/
int in_update_menu(void)
{
int result = 0;
#ifdef IN_EVDEV
void *data[IN_MAX_DEVS];
int i, count = 0;
for (i = 0; i < in_dev_count; i++) {
if (in_devices[i].probed)
data[count++] = in_devices[i].drv_data;
}
if (count == 0) {
/* don't deadlock, fail */
printf("input: failed to find devices to read\n");
exit(1);
}
result = in_evdev_update_menu(data, count);
#else
#error no menu read handlers
#endif
return result;
}
void in_init(void)
{
memset(in_devices, 0, sizeof(in_devices));
@ -180,11 +203,14 @@ void in_init(void)
int main(void)
{
int ret;
in_init();
in_probe();
while (1) {
in_update();
ret = in_update_menu();
printf("%08x\n", ret);
sleep(1);
}

View file

@ -1,4 +1,6 @@
#define IN_DRVID_EVDEV 1
enum {
IN_DRVID_EVDEV = 1,
};
/* to be called by drivers */
void in_register(const char *nname, int drv_id, void *drv_data);