NeoGeo adapter supports buttons on pins 2 and 10.
This commit is contained in:
parent
3d7f0480e6
commit
d66327698c
|
@ -33,16 +33,12 @@ static const uint8_t _hidReportDescriptor[] PROGMEM = {
|
||||||
|
|
||||||
0x05, 0x09, // USAGE_PAGE (Button)
|
0x05, 0x09, // USAGE_PAGE (Button)
|
||||||
0x19, 0x01, // USAGE_MINIMUM (Button 1)
|
0x19, 0x01, // USAGE_MINIMUM (Button 1)
|
||||||
0x29, 0x0c, // USAGE_MAXIMUM (Button 12)
|
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
|
||||||
0x15, 0x00, // LOGICAL_MINIMUM (0)
|
0x15, 0x00, // LOGICAL_MINIMUM (0)
|
||||||
0x25, 0x01, // LOGICAL_MAXIMUM (1)
|
0x25, 0x01, // LOGICAL_MAXIMUM (1)
|
||||||
0x95, 0x0c, // REPORT_COUNT (12)
|
0x95, 0x08, // REPORT_COUNT (8)
|
||||||
0x75, 0x01, // REPORT_SIZE (1)
|
0x75, 0x01, // REPORT_SIZE (1)
|
||||||
0x81, 0x02, // INPUT (Data,Var,Abs)
|
0x81, 0x02, // INPUT (Data,Var,Abs)
|
||||||
|
|
||||||
0x95, 0x01, // REPORT_COUNT (1) ; pad out the bits into a number divisible by 8
|
|
||||||
0x75, 0x04, // REPORT_SIZE (4)
|
|
||||||
0x81, 0x03, // INPUT (Const,Var,Abs)
|
|
||||||
|
|
||||||
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
|
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
|
||||||
0x09, 0x01, // USAGE (pointer)
|
0x09, 0x01, // USAGE (pointer)
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
extern const char* gp_serial;
|
extern const char* gp_serial;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t buttons : 12;
|
uint8_t buttons;
|
||||||
int8_t X;
|
int8_t X;
|
||||||
int8_t Y;
|
int8_t Y;
|
||||||
} GamepadReport;
|
} GamepadReport;
|
||||||
|
|
|
@ -41,10 +41,10 @@ uint8_t axesPrev = 0x0f;
|
||||||
uint8_t axesBits[4] = {0x10,0x20,0x40,0x80};
|
uint8_t axesBits[4] = {0x10,0x20,0x40,0x80};
|
||||||
uint32_t axesMillis[4];
|
uint32_t axesMillis[4];
|
||||||
|
|
||||||
uint16_t buttonsDirect = 0;
|
uint8_t buttonsDirect = 0;
|
||||||
uint16_t buttons = 0;
|
uint8_t buttons = 0;
|
||||||
uint16_t buttonsPrev = 0;
|
uint8_t buttonsPrev = 0;
|
||||||
uint16_t buttonsBits[12] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800};
|
uint8_t buttonsBits[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
|
||||||
uint32_t buttonsMillis[12];
|
uint32_t buttonsMillis[12];
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -63,6 +63,8 @@ void setup()
|
||||||
PORTD |= B10011111; // Enable internal pull-up resistors
|
PORTD |= B10011111; // Enable internal pull-up resistors
|
||||||
DDRB &= ~B01111110; // Set PB1-PB6 as inputs
|
DDRB &= ~B01111110; // Set PB1-PB6 as inputs
|
||||||
PORTB |= B01111110; // Enable internal pull-up resistors
|
PORTB |= B01111110; // Enable internal pull-up resistors
|
||||||
|
DDRC &= ~B01000000; // Set PC6 as input
|
||||||
|
PORTC |= B01000000; // Enable internal pull-up resistors
|
||||||
|
|
||||||
// Debounce selector switch (currently disabled)
|
// Debounce selector switch (currently disabled)
|
||||||
DDRE &= ~B01000000; // Pin 7 as input
|
DDRE &= ~B01000000; // Pin 7 as input
|
||||||
|
@ -88,7 +90,7 @@ void loop()
|
||||||
{
|
{
|
||||||
// Read axis and button inputs (bitwise NOT results in a 1 when button/axis pressed)
|
// Read axis and button inputs (bitwise NOT results in a 1 when button/axis pressed)
|
||||||
axesDirect = ~(PINF & B11110000);
|
axesDirect = ~(PINF & B11110000);
|
||||||
buttonsDirect = ~((PIND & B00011111) | ((PIND & B10000000) << 4) | ((PINB & B01111110) << 4));
|
buttonsDirect = ~((PIND & B10011111) | (PINC & B01000000) | ((PINB & B00000010) << 4));
|
||||||
|
|
||||||
if(debounce)
|
if(debounce)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +108,7 @@ void loop()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debounce buttons
|
// Debounce buttons
|
||||||
for(pin=0; pin<12; pin++)
|
for(pin=0; pin<8; pin++)
|
||||||
{
|
{
|
||||||
// Check if the current pin state is different to the stored state and that enough time has passed since last change
|
// Check if the current pin state is different to the stored state and that enough time has passed since last change
|
||||||
if((buttonsDirect & buttonsBits[pin]) != (buttons & buttonsBits[pin]) && (millisNow - buttonsMillis[pin]) > DEBOUNCE_TIME)
|
if((buttonsDirect & buttonsBits[pin]) != (buttons & buttonsBits[pin]) && (millisNow - buttonsMillis[pin]) > DEBOUNCE_TIME)
|
||||||
|
|
Loading…
Reference in New Issue