diff --git a/src/drivers/Qt/GamePadConf.cpp b/src/drivers/Qt/GamePadConf.cpp index e55f8ad8..b91dff54 100644 --- a/src/drivers/Qt/GamePadConf.cpp +++ b/src/drivers/Qt/GamePadConf.cpp @@ -26,7 +26,7 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent) QPushButton *saveProfileButton; QPushButton *applyProfileButton; QPushButton *removeProfileButton; - QPushButton *loadDefaultButton; + //QPushButton *loadDefaultButton; QPushButton *clearAllButton; QPushButton *closebutton; QPushButton *clearButton[GAMEPAD_NUM_BUTTONS]; @@ -75,9 +75,17 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent) char stmp[128]; sprintf( stmp, "%i: %s", i, js->getName() ); devSel->addItem( tr(stmp), i ); + } } } + for (int i=0; icount(); i++) + { + if ( devSel->itemData(i).toInt() == GamePad[portNum].getDeviceIndex() ) + { + devSel->setCurrentIndex( i ); + } + } label = new QLabel(tr("GUID:")); guidLbl = new QLabel(); @@ -85,6 +93,8 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent) hbox3->addWidget( label ); hbox3->addWidget( guidLbl ); + guidLbl->setText( GamePad[portNum].getGUID() ); + frame1 = new QGroupBox(tr("Mapping Profile:")); //grid = new QGridLayout(); vbox = new QVBoxLayout(); @@ -171,11 +181,11 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent) } updateCntrlrDpy(); - loadDefaultButton = new QPushButton(tr("Load Defaults")); + //loadDefaultButton = new QPushButton(tr("Load Defaults")); clearAllButton = new QPushButton(tr("Clear All")); closebutton = new QPushButton(tr("Close")); - hbox4->addWidget( loadDefaultButton ); + //hbox4->addWidget( loadDefaultButton ); hbox4->addWidget( clearAllButton ); hbox4->addWidget( closebutton ); @@ -206,7 +216,7 @@ GamePadConfDialog_t::GamePadConfDialog_t(QWidget *parent) connect(saveProfileButton , SIGNAL(clicked()), this, SLOT(saveProfileCallback(void)) ); connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(deleteProfileCallback(void)) ); - connect(loadDefaultButton, SIGNAL(clicked()), this, SLOT(loadDefaults(void)) ); + //connect(loadDefaultButton, SIGNAL(clicked()), this, SLOT(loadDefaults(void)) ); connect(clearAllButton , SIGNAL(clicked()), this, SLOT(clearAllCallback(void)) ); connect(closebutton , SIGNAL(clicked()), this, SLOT(closeWindow(void)) ); @@ -334,6 +344,17 @@ void GamePadConfDialog_t::portSelect(int index) //printf("Port Number:%i \n", index); portNum = index; updateCntrlrDpy(); + + for (int i=0; icount(); i++) + { + if ( devSel->itemData(i).toInt() == GamePad[portNum].getDeviceIndex() ) + { + devSel->setCurrentIndex( i ); + } + } + guidLbl->setText( GamePad[portNum].getGUID() ); + + loadMapList(); } //---------------------------------------------------- void GamePadConfDialog_t::deviceSelect(int index) @@ -377,8 +398,8 @@ void GamePadConfDialog_t::oppDirEna(int state) //---------------------------------------------------- void GamePadConfDialog_t::changeButton(int padNo, int x) { - char buf[256]; - std::string prefix; + //char buf[256]; + //std::string prefix; const char *keyNameStr; if ( buttonConfigStatus == 2 ) @@ -392,28 +413,8 @@ void GamePadConfDialog_t::changeButton(int padNo, int x) button[x]->setText("Waiting" ); - snprintf (buf, sizeof(buf)-1, "SDL.Input.GamePad.%d.", padNo); - prefix = buf; DWaitButton (NULL, &GamePad[padNo].bmap[x], &buttonConfigStatus ); - g_config->setOption (prefix + GamePadNames[x], - GamePad[padNo].bmap[x].ButtonNum); - - if (GamePad[padNo].bmap[x].ButtType == BUTTC_KEYBOARD) - { - g_config->setOption (prefix + "DeviceType", "Keyboard"); - } - else if (GamePad[padNo].bmap[x].ButtType == BUTTC_JOYSTICK) - { - g_config->setOption (prefix + "DeviceType", "Joystick"); - } - else - { - g_config->setOption (prefix + "DeviceType", "Unknown"); - } - g_config->setOption (prefix + "DeviceNum", - GamePad[padNo].bmap[x].DeviceNum); - keyNameStr = ButtonName( &GamePad[padNo].bmap[x] ); keyName[x]->setText( keyNameStr ); @@ -564,55 +565,6 @@ void GamePadConfDialog_t::clearAllCallback(void) } } //---------------------------------------------------- -void GamePadConfDialog_t::loadDefaults(void) -{ - int index, devIdx; - char buf[256]; - std::string prefix; - - index = devSel->currentIndex(); - devIdx = devSel->itemData(index).toInt(); - - //printf("Selected Device:%i : %i \n", index, devIdx ); - - if ( devIdx == -1 ) - { - snprintf (buf, sizeof(buf)-1, "SDL.Input.GamePad.%d.", portNum); - prefix = buf; - - for (int x=0; xsetOption (prefix + GamePadNames[x], - GamePad[portNum].bmap[x].ButtonNum); - - if (GamePad[portNum].bmap[x].ButtType == BUTTC_KEYBOARD) - { - g_config->setOption (prefix + "DeviceType", "Keyboard"); - } - else if (GamePad[portNum].bmap[x].ButtType == BUTTC_JOYSTICK) - { - g_config->setOption (prefix + "DeviceType", "Joystick"); - } - else - { - g_config->setOption (prefix + "DeviceType", "Unknown"); - } - g_config->setOption (prefix + "DeviceNum", - GamePad[portNum].bmap[x].DeviceNum); - } - } - else - { - GamePad[portNum].setDeviceIndex( devIdx ); - GamePad[portNum].loadDefaults(); - } - updateCntrlrDpy(); -} -//---------------------------------------------------- void GamePadConfDialog_t::createNewProfile( const char *name ) { printf("Creating: %s \n", name ); @@ -663,6 +615,13 @@ void GamePadConfDialog_t::loadProfileCallback(void) } if ( ret == 0 ) { + std::string prefix; + sprintf( stmp, "SDL.Input.GamePad.%u.", portNum ); + prefix = stmp; + + g_config->setOption(prefix + "DeviceGUID", GamePad[portNum].getGUID() ); + g_config->setOption(prefix + "Profile" , mapName.c_str() ); + sprintf( stmp, "Mapping Loaded: %s/%s \n", GamePad[portNum].getGUID(), mapName.c_str() ); } else diff --git a/src/drivers/Qt/GamePadConf.h b/src/drivers/Qt/GamePadConf.h index cf6eaa2c..72da9b61 100644 --- a/src/drivers/Qt/GamePadConf.h +++ b/src/drivers/Qt/GamePadConf.h @@ -86,7 +86,7 @@ class GamePadConfDialog_t : public QDialog void clearButton8(void); void clearButton9(void); void clearAllCallback(void); - void loadDefaults(void); + //void loadDefaults(void); void ena4score(int state); void oppDirEna(int state); void portSelect(int index); diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index b357abda..11bbcfea 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -317,10 +317,8 @@ InitConfig() prefix = buf; config->addOption(prefix + "DeviceType", DefaultGamePadDevice[i]); - config->addOption(prefix + "DeviceNum", 0); - for(unsigned int j = 0; j < GAMEPAD_NUM_BUTTONS; j++) { - config->addOption(prefix + GamePadNames[j], DefaultGamePad[i][j]); - } + config->addOption(prefix + "DeviceGUID", ""); + config->addOption(prefix + "Profile" , ""); } // PowerPad 0 - 1 diff --git a/src/drivers/Qt/input.cpp b/src/drivers/Qt/input.cpp index e96f15c0..eef69c71 100644 --- a/src/drivers/Qt/input.cpp +++ b/src/drivers/Qt/input.cpp @@ -1960,7 +1960,7 @@ void InputCfg (const std::string & text) UpdateInput (Config * config) { char buf[64]; - std::string device, prefix; + std::string device, prefix, guid, mapping; InitJoysticks(); @@ -2055,37 +2055,18 @@ UpdateInput (Config * config) snprintf (buf, sizeof(buf)-1, "SDL.Input.GamePad.%u.", i); prefix = buf; - config->getOption (prefix + "DeviceType", &device); - if (device.find ("Keyboard") != std::string::npos) - { - type = BUTTC_KEYBOARD; - } - else if (device.find ("Joystick") != std::string::npos) - { - type = BUTTC_JOYSTICK; - } - else - { - type = 0; - } + config->getOption (prefix + "DeviceType", &device ); + config->getOption (prefix + "DeviceGUID", &guid ); + config->getOption (prefix + "Profile" , &mapping); - //FIXME - //config->getOption (prefix + "DeviceNum", &devnum); - //for (unsigned int j = 0; j < GAMEPAD_NUM_BUTTONS; j++) - //{ - // config->getOption (prefix + GamePadNames[j], &button); - - // GamePadConfig[i][j].ButtType = type; - // GamePadConfig[i][j].DeviceNum = devnum; - // GamePadConfig[i][j].ButtonNum = button; - //} + GamePad[i].init( i, guid.c_str(), mapping.c_str() ); } // PowerPad 0 - 1 for (unsigned int i = 0; i < POWERPAD_NUM_DEVICES; i++) { char buf[64]; - snprintf (buf, 32, "SDL.Input.PowerPad.%u.", i); + snprintf (buf, sizeof(buf)-1, "SDL.Input.PowerPad.%u.", i); prefix = buf; config->getOption (prefix + "DeviceType", &device); diff --git a/src/drivers/Qt/sdl-joystick.cpp b/src/drivers/Qt/sdl-joystick.cpp index 04b46665..44645a93 100644 --- a/src/drivers/Qt/sdl-joystick.cpp +++ b/src/drivers/Qt/sdl-joystick.cpp @@ -55,6 +55,8 @@ jsDev_t::jsDev_t(void) { js = NULL; gc = NULL; + devIdx = 0; + portBindMask = 0; }; //******************************************************************************** @@ -92,6 +94,25 @@ const char *jsDev_t::getGUID(void) return ( guidStr.c_str() ); } +//******************************************************************************** +int jsDev_t::bindPort( int idx ) +{ + portBindMask |= (0x00000001 << idx); + + return portBindMask; +} +//******************************************************************************** +int jsDev_t::unbindPort( int idx ) +{ + portBindMask &= ~(0x00000001 << idx); + + return portBindMask; +} +//******************************************************************************** +int jsDev_t::getBindPorts(void) +{ + return portBindMask; +} //******************************************************************************** bool jsDev_t::isGameController(void) { @@ -243,7 +264,8 @@ int nesGamePadMap_t::parseMapping( const char *map ) //******************************************************************************** GamePad_t::GamePad_t(void) { - devIdx = -1; + devIdx = -1; + portNum = 0; for (int i=0; i= 0 ) + { + jsDev[ devIdx ].unbindPort( portNum ); + } + devIdx = in; + + if ( devIdx >= 0 ) + { + jsDev[ devIdx ].bindPort( portNum ); + } return 0; } //******************************************************************************** @@ -492,7 +595,7 @@ int GamePad_t::getDefaultMap( char *out, const char *guid ) { bmap[x].ButtType = BUTTC_KEYBOARD; bmap[x].DeviceNum = 0; - bmap[x].ButtonNum = DefaultGamePad[0][x]; + bmap[x].ButtonNum = DefaultGamePad[portNum][x]; } } } @@ -505,6 +608,7 @@ int GamePad_t::loadDefaults(void) if ( getDefaultMap( txtMap ) == 0 ) { + //printf("Map:%s\n", txtMap ); setMapping( txtMap ); } diff --git a/src/drivers/Qt/sdl-joystick.h b/src/drivers/Qt/sdl-joystick.h index c4c3ed24..568f736b 100644 --- a/src/drivers/Qt/sdl-joystick.h +++ b/src/drivers/Qt/sdl-joystick.h @@ -39,11 +39,15 @@ struct jsDev_t bool isGameController(void); bool isConnected(void); void print(void); + int bindPort( int idx ); + int unbindPort( int idx ); + int getBindPorts(void); const char *getName(void); const char *getGUID(void); private: int devIdx; + int portBindMask; std::string guidStr; std::string name; }; @@ -52,19 +56,18 @@ class GamePad_t { public: - //int type; - int devIdx; - ButtConfig bmap[GAMEPAD_NUM_BUTTONS]; GamePad_t(void); ~GamePad_t(void); + int init( int port, const char *guid, const char *profile = NULL ); const char *getGUID(void); int loadDefaults(void); int loadProfile( const char *name, const char *guid = NULL ); + int getDeviceIndex(void){ return devIdx; } int setDeviceIndex( int devIdx ); int setMapping( const char *map ); int setMapping( nesGamePadMap_t *map ); @@ -75,6 +78,11 @@ class GamePad_t int saveMappingToFile( const char *filename, const char *txtMap ); int saveCurrentMapToFile( const char *filename ); int deleteMapping( const char *name ); + + private: + int devIdx; + int portNum; + }; extern GamePad_t GamePad[4];