diff --git a/dc_pad.c b/dc_pad.c index 5eb5ca5..26b461d 100644 --- a/dc_pad.c +++ b/dc_pad.c @@ -1,5 +1,5 @@ -/* Saturn to USB : Sega dc controllers to USB adapter - * Copyright (C) 2011-2013 Raphaël Assénat +/* Dreamcast to USB : Sega dc controllers to USB adapter + * Copyright (C) 2013 Raphaël Assénat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ #include "dc_pad.h" #include "maplebus.h" -#define MAX_REPORT_SIZE 4 +#define MAX_REPORT_SIZE 6 #define NUM_REPORTS 1 // report matching the most recent bytes from the controller @@ -36,7 +36,7 @@ static unsigned char last_built_report[NUM_REPORTS][MAX_REPORT_SIZE]; // the most recently reported bytes static unsigned char last_sent_report[NUM_REPORTS][MAX_REPORT_SIZE]; -static char report_sizes[NUM_REPORTS] = { 4 }; +static char report_sizes[NUM_REPORTS] = { 6 }; static Gamepad dcGamepad; static void dcUpdate(void); @@ -44,8 +44,10 @@ static void dcUpdate(void); /* * [0] X * [1] Y - * [2] Btn 0-7 - * [3] Btn 8-15 + * [2] Ltrig + * [3] Rtrig + * [4] Btn 0-7 + * [5] Btn 8-15 */ static const unsigned char dcPadReport[] PROGMEM = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) @@ -55,10 +57,12 @@ static const unsigned char dcPadReport[] PROGMEM = { 0xa1, 0x00, // COLLECTION (Physical) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) + 0x09, 0x36, // USAGE (Slider) + 0x09, 0x36, 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x02, // REPORT_COUNT (2) + 0x95, 0x04, // REPORT_COUNT (4) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) @@ -105,68 +109,39 @@ static void dcInit(void) #define MAX_ERRORS 10 #define STATE_GET_INFO 0 -#define STATE_WRITE_LCD 1 -#define STATE_READ_PAD 2 +#define STATE_READ_PAD 1 -#define MAPLE_CMD_RQ_DEV_INFO 1 -#define MAPLE_CMD_RESET_DEVICE 3 -#define MAPLE_CMD_GET_CONDITION 9 -#define MAPLE_CMD_BLOCK_WRITE 12 - -#define MAPLE_ADDR_PORT(id) ((id)<<6) -#define MAPLE_ADDR_PORTA MAPLE_ADDR_PORT(0) -#define MAPLE_ADDR_PORTB MAPLE_ADDR_PORT(1) -#define MAPLE_ADDR_PORTC MAPLE_ADDR_PORT(2) -#define MAPLE_ADDR_PORTD MAPLE_ADDR_PORT(3) -#define MAPLE_ADDR_MAIN 0x20 -#define MAPLE_ADDR_SUB(id) ((1)< #include #include "usbdrv.h" diff --git a/maplebus.h b/maplebus.h index e6fbb95..2511d8b 100644 --- a/maplebus.h +++ b/maplebus.h @@ -1,7 +1,36 @@ #ifndef _maplebus_h__ #define _maplebus_h__ -#include +/* Most of the information here is from + * http://mc.pp.se/dc/maplebus.html + */ + +#define MAPLE_CMD_RQ_DEV_INFO 1 +#define MAPLE_CMD_RESET_DEVICE 3 +#define MAPLE_CMD_GET_CONDITION 9 +#define MAPLE_CMD_BLOCK_WRITE 12 + +#define MAPLE_FUNC_CONTROLLER 0x001 +#define MAPLE_FUNC_MEMCARD 0x002 +#define MAPLE_FUNC_LCD 0x004 +#define MAPLE_FUNC_CLOCK 0x008 +#define MAPLE_FUNC_MIC 0x010 +#define MAPLE_FUNC_AR_GUN 0x020 +#define MAPLE_FUNC_KEYBOARD 0x040 +#define MAPLE_FUNC_LIGHT_GUN 0x080 +#define MAPLE_FUNC_PURUPURU 0x100 +#define MAPLE_FUNC_MOUSE 0x200 + +#define MAPLE_ADDR_PORT(id) ((id)<<6) +#define MAPLE_ADDR_PORTA MAPLE_ADDR_PORT(0) +#define MAPLE_ADDR_PORTB MAPLE_ADDR_PORT(1) +#define MAPLE_ADDR_PORTC MAPLE_ADDR_PORT(2) +#define MAPLE_ADDR_PORTD MAPLE_ADDR_PORT(3) +#define MAPLE_ADDR_MAIN 0x20 +#define MAPLE_ADDR_SUB(id) ((1)<