1.1 --- a/src/maple/controller.c Mon Jul 14 07:44:42 2008 +0000
1.2 +++ b/src/maple/controller.c Sat Aug 09 07:39:47 2008 +0000
1.9 #include "dreamcast.h"
1.10 #include "display.h"
1.12 #include "maple/controller.h"
1.14 -#define CONTROLLER_CONFIG_ENTRIES 16
1.15 +#define CONTROLLER_CONFIG_ENTRIES 15
1.17 -void controller_attach( maple_device_t dev );
1.18 -void controller_detach( maple_device_t dev );
1.19 -void controller_destroy( maple_device_t dev );
1.20 -maple_device_t controller_clone( maple_device_t dev );
1.21 -maple_device_t controller_new();
1.22 -lxdream_config_entry_t controller_get_config( maple_device_t dev );
1.23 -int controller_get_cond( maple_device_t dev, int function, unsigned char *outbuf,
1.24 +static void controller_attach( maple_device_t dev );
1.25 +static void controller_detach( maple_device_t dev );
1.26 +static void controller_destroy( maple_device_t dev );
1.27 +static maple_device_t controller_clone( maple_device_t dev );
1.28 +static maple_device_t controller_new();
1.29 +static lxdream_config_entry_t controller_get_config( maple_device_t dev );
1.30 +static void controller_set_config_value( maple_device_t dev, unsigned int key, const gchar *value );
1.31 +static int controller_get_cond( maple_device_t dev, int function, unsigned char *outbuf,
1.32 unsigned int *outlen );
1.34 typedef struct controller_device {
1.35 struct maple_device dev;
1.36 uint32_t condition[2];
1.37 - struct lxdream_config_entry config[CONTROLLER_CONFIG_ENTRIES];
1.38 + struct lxdream_config_entry config[CONTROLLER_CONFIG_ENTRIES+1];
1.39 } *controller_device_t;
1.41 struct maple_device_class controller_class = { "Sega Controller", controller_new };
1.43 static struct controller_device base_controller = {
1.44 { MAPLE_DEVICE_TAG, &controller_class, CONTROLLER_IDENT, CONTROLLER_VERSION,
1.45 - controller_get_config, controller_attach, controller_detach, controller_destroy,
1.46 + controller_get_config, controller_set_config_value,
1.47 + controller_attach, controller_detach, controller_destroy,
1.48 controller_clone, NULL, NULL, controller_get_cond, NULL, NULL, NULL },
1.49 {0x0000FFFF, 0x80808080},
1.50 {{ "dpad left", N_("Dpad left"), CONFIG_TYPE_KEY },
1.52 { "start", N_("Start button"), CONFIG_TYPE_KEY },
1.53 { NULL, CONFIG_TYPE_NONE }} };
1.55 +static int config_button_map[] = {
1.56 + BUTTON_DPAD_LEFT, BUTTON_DPAD_RIGHT, BUTTON_DPAD_UP, BUTTON_DPAD_DOWN,
1.57 + JOY_LEFT, JOY_RIGHT, JOY_UP, JOY_DOWN, BUTTON_X, BUTTON_Y, BUTTON_A,
1.58 + BUTTON_B, BUTTON_LEFT_TRIGGER, BUTTON_RIGHT_TRIGGER, BUTTON_START };
1.60 #define CONTROLLER(x) ((controller_device_t)(x))
1.62 -maple_device_t controller_new( )
1.63 +static maple_device_t controller_new( )
1.65 controller_device_t dev = malloc( sizeof(struct controller_device) );
1.66 memcpy( dev, &base_controller, sizeof(base_controller) );
1.67 return MAPLE_DEVICE(dev);
1.70 -maple_device_t controller_clone( maple_device_t srcdevice )
1.71 +static maple_device_t controller_clone( maple_device_t srcdevice )
1.73 controller_device_t src = (controller_device_t)srcdevice;
1.74 controller_device_t dev = (controller_device_t)controller_new();
1.79 -void controller_key_callback( void *mdev, uint32_t value, uint32_t pressure, gboolean isKeyDown )
1.80 +static void controller_key_callback( void *mdev, uint32_t value, uint32_t pressure, gboolean isKeyDown )
1.82 controller_device_t dev = (controller_device_t)mdev;
1.84 @@ -129,13 +137,23 @@
1.88 -lxdream_config_entry_t controller_get_config( maple_device_t mdev )
1.89 +static lxdream_config_entry_t controller_get_config( maple_device_t mdev )
1.91 controller_device_t dev = (controller_device_t)mdev;
1.95 -void controller_destroy( maple_device_t mdev )
1.96 +static void controller_set_config_value( maple_device_t mdev, unsigned int key, const gchar *value )
1.98 + controller_device_t dev = (controller_device_t)mdev;
1.99 + assert( key < CONTROLLER_CONFIG_ENTRIES );
1.101 + input_unregister_key( dev->config[key].value, controller_key_callback, dev, config_button_map[key] );
1.102 + lxdream_set_config_value( &dev->config[key], value );
1.103 + input_register_key( dev->config[key].value, controller_key_callback, dev, config_button_map[key] );
1.106 +static void controller_destroy( maple_device_t mdev )
1.110 @@ -144,49 +162,27 @@
1.111 * Device is being attached to the bus. Go through the config and reserve the
1.114 -void controller_attach( maple_device_t mdev )
1.115 +static void controller_attach( maple_device_t mdev )
1.117 controller_device_t dev = (controller_device_t)mdev;
1.118 - input_register_key( dev->config[0].value, controller_key_callback, dev, BUTTON_DPAD_LEFT );
1.119 - input_register_key( dev->config[1].value, controller_key_callback, dev, BUTTON_DPAD_RIGHT );
1.120 - input_register_key( dev->config[2].value, controller_key_callback, dev, BUTTON_DPAD_UP );
1.121 - input_register_key( dev->config[3].value, controller_key_callback, dev, BUTTON_DPAD_DOWN );
1.122 - input_register_key( dev->config[4].value, controller_key_callback, dev, JOY_LEFT );
1.123 - input_register_key( dev->config[5].value, controller_key_callback, dev, JOY_RIGHT );
1.124 - input_register_key( dev->config[6].value, controller_key_callback, dev, JOY_UP );
1.125 - input_register_key( dev->config[7].value, controller_key_callback, dev, JOY_DOWN );
1.126 - input_register_key( dev->config[8].value, controller_key_callback, dev, BUTTON_X );
1.127 - input_register_key( dev->config[9].value, controller_key_callback, dev, BUTTON_Y );
1.128 - input_register_key( dev->config[10].value, controller_key_callback, dev, BUTTON_A );
1.129 - input_register_key( dev->config[11].value, controller_key_callback, dev, BUTTON_B );
1.130 - input_register_key( dev->config[12].value, controller_key_callback, dev, BUTTON_LEFT_TRIGGER );
1.131 - input_register_key( dev->config[13].value, controller_key_callback, dev, BUTTON_RIGHT_TRIGGER );
1.132 - input_register_key( dev->config[14].value, controller_key_callback, dev, BUTTON_START );
1.134 + for( i=0; i<CONTROLLER_CONFIG_ENTRIES; i++ ) {
1.135 + input_register_key( dev->config[i].value, controller_key_callback, dev, config_button_map[i] );
1.139 -void controller_detach( maple_device_t mdev )
1.140 +static void controller_detach( maple_device_t mdev )
1.142 controller_device_t dev = (controller_device_t)mdev;
1.143 - input_unregister_key( dev->config[0].value, controller_key_callback, dev, BUTTON_DPAD_LEFT );
1.144 - input_unregister_key( dev->config[1].value, controller_key_callback, dev, BUTTON_DPAD_RIGHT );
1.145 - input_unregister_key( dev->config[2].value, controller_key_callback, dev, BUTTON_DPAD_UP );
1.146 - input_unregister_key( dev->config[3].value, controller_key_callback, dev, BUTTON_DPAD_DOWN );
1.147 - input_unregister_key( dev->config[4].value, controller_key_callback, dev, JOY_LEFT );
1.148 - input_unregister_key( dev->config[5].value, controller_key_callback, dev, JOY_RIGHT );
1.149 - input_unregister_key( dev->config[6].value, controller_key_callback, dev, JOY_UP );
1.150 - input_unregister_key( dev->config[7].value, controller_key_callback, dev, JOY_DOWN );
1.151 - input_unregister_key( dev->config[8].value, controller_key_callback, dev, BUTTON_X );
1.152 - input_unregister_key( dev->config[9].value, controller_key_callback, dev, BUTTON_Y );
1.153 - input_unregister_key( dev->config[10].value, controller_key_callback, dev, BUTTON_A );
1.154 - input_unregister_key( dev->config[11].value, controller_key_callback, dev, BUTTON_B );
1.155 - input_unregister_key( dev->config[12].value, controller_key_callback, dev, BUTTON_LEFT_TRIGGER );
1.156 - input_unregister_key( dev->config[13].value, controller_key_callback, dev, BUTTON_RIGHT_TRIGGER );
1.157 - input_unregister_key( dev->config[14].value, controller_key_callback, dev, BUTTON_START );
1.159 + for( i=0; i<CONTROLLER_CONFIG_ENTRIES; i++ ) {
1.160 + input_unregister_key( dev->config[i].value, controller_key_callback, dev, config_button_map[i] );
1.166 -int controller_get_cond( maple_device_t mdev, int function, unsigned char *outbuf,
1.167 +static int controller_get_cond( maple_device_t mdev, int function, unsigned char *outbuf,
1.168 unsigned int *outlen )
1.170 controller_device_t dev = (controller_device_t)mdev;