int PERLIBRETROInit(void) { void *controller; uint32_t i, j; PortData_struct* portdata = NULL; //1 multitap + 1 peripherial players = 7; if(!multitap[0] && !multitap[1]) players = 2; else if(multitap[0] && multitap[1]) players = 12; PerPortReset(); for(i = 0; i < players; i++) { //Ports can handle 6 peripherals, fill port 1 first. if((players > 2 && i < 6) || i == 0) portdata = &PORTDATA1; else portdata = &PORTDATA2; switch(pad_type[i]) { case RETRO_DEVICE_NONE: controller = NULL; break; case RETRO_DEVICE_ANALOG: controller = (void*)Per3DPadAdd(portdata); for(j = PERPAD_UP; j <= PERPAD_Z; j++) PerSetKey((i << 8) + j, j, controller); for(j = PERANALOG_AXIS1; j <= PERANALOG_AXIS7; j++) PerSetKey((i << 8) + j, j, controller); break; case RETRO_DEVICE_JOYPAD: default: controller = (void*)PerPadAdd(portdata); for(j = PERPAD_UP; j <= PERPAD_Z; j++) PerSetKey((i << 8) + j, j, controller); break; } } return 0; }
void YabauseThread::reloadControllers() { PerPortReset(); QtYabause::clearPadsBits(); Settings* settings = QtYabause::settings(); for ( uint port = 1; port < 3; port++ ) { settings->beginGroup( QString( "Input/Port/%1/Id" ).arg( port ) ); QStringList ids = settings->childGroups(); settings->endGroup(); ids.sort(); foreach ( const QString& id, ids ) { uint type = settings->value( QString( UIPortManager::mSettingsType ).arg( port ).arg( id ) ).toUInt(); switch ( type ) { case PERPAD: { PerPad_struct* padbits = PerPadAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList padKeys = settings->childKeys(); settings->endGroup(); padKeys.sort(); foreach ( const QString& padKey, padKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( padKey ) ).toString(); PerSetKey( key.toUInt(), padKey.toUInt(), padbits ); } break; } case PERWHEEL: QtYabause::mainWindow()->appendLog( "Wheel controller type is not yet supported" ); break; case PER3DPAD: { PerAnalog_struct* analogbits = Per3DPadAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList analogKeys = settings->childKeys(); settings->endGroup(); analogKeys.sort(); foreach ( const QString& analogKey, analogKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( analogKey ) ).toString(); PerSetKey( key.toUInt(), analogKey.toUInt(), analogbits ); } break; } case PERGUN: QtYabause::mainWindow()->appendLog( "Gun controller type is not yet supported" ); break; case PERKEYBOARD: QtYabause::mainWindow()->appendLog( "Keyboard controller type is not yet supported" ); break; case PERMOUSE: { PerMouse_struct* mousebits = PerMouseAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList mouseKeys = settings->childKeys(); settings->endGroup(); mouseKeys.sort(); foreach ( const QString& mouseKey, mouseKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( mouseKey ) ).toString(); PerSetKey( key.toUInt(), mouseKey.toUInt(), mousebits ); } break; } case 0: // Unconnected break; default: QtYabause::mainWindow()->appendLog( "Invalid controller type" ); break; } } }