void ControlManager::UpdateControlDevices() { auto lock = _deviceLock.AcquireSafe(); //Reset update flag EmulationSettings::NeedControllerUpdate(); bool hadKeyboard = HasKeyboard(); ControlManager::_controlDevices.clear(); ControlManager::RegisterControlDevice(_systemActionManager); bool fourScore = EmulationSettings::CheckFlag(EmulationFlags::HasFourScore); ConsoleType consoleType = EmulationSettings::GetConsoleType(); ExpansionPortDevice expansionDevice = EmulationSettings::GetExpansionDevice(); if(consoleType != ConsoleType::Famicom) { expansionDevice = ExpansionPortDevice::None; } else if(expansionDevice != ExpansionPortDevice::FourPlayerAdapter) { fourScore = false; } for(int i = 0; i < (fourScore ? 4 : 2); i++) { shared_ptr<BaseControlDevice> device = CreateControllerDevice(GetControllerType(i), i); if(device) { ControlManager::RegisterControlDevice(device); } } if(fourScore && consoleType == ConsoleType::Nes) { //FourScore is only used to provide the signature for reads past the first 16 reads ControlManager::RegisterControlDevice(shared_ptr<FourScore>(new FourScore())); } shared_ptr<BaseControlDevice> expDevice = CreateExpansionDevice(expansionDevice); if(expDevice) { ControlManager::RegisterControlDevice(expDevice); } bool hasKeyboard = HasKeyboard(); if(!hasKeyboard) { EmulationSettings::DisableKeyboardMode(); } else if(!hadKeyboard && hasKeyboard) { EmulationSettings::EnableKeyboardMode(); } if(_mapperControlDevice) { ControlManager::RegisterControlDevice(_mapperControlDevice); } if(std::dynamic_pointer_cast<FamilyBasicKeyboard>(expDevice)) { //Automatically connect the data recorder if the keyboard is connected ControlManager::RegisterControlDevice(shared_ptr<FamilyBasicDataRecorder>(new FamilyBasicDataRecorder())); } }
void CStateParser::PareseState(CTokenizer &tok,CStateManager &StateManager) { std::string ret; while( !tok.CheckToken("[",false) && !tok.AtEndOfFile() ) { if( tok.CheckToken("type") ) { if( !tok.CheckToken("=") ) throw(CError("expected =")); ret = tok.GetToken(); nController=GetControllerType(ret.c_str(),tok ); } else if ( tok.CheckTokenLike("trigger", false) ) { std::string trigger = tok.GetToken(); if( !tok.CheckToken("=") ) Error("expected =",tok); //fix me add triggerall ParseTrigger(tok,StateManager); if (trigger.compare("triggerall") == 0) { StateManager.AddTriggerToState(TRIGGERALL); } else { //½âÎö³öÊÇÄĸötrigger std::string value = trigger.substr(strlen("trigger"), trigger.length() - strlen("trigger")); StateManager.AddTriggerToState(atoi(value.c_str())); } }/*else if( tok.CheckToken("trigger1") || tok.CheckToken("trigger2") || tok.CheckToken("trigger3") || tok.CheckToken("trigger4") || tok.CheckToken("trigger5") || tok.CheckToken("trigger6") || tok.CheckToken("trigger7") || tok.CheckToken("trigger8") || tok.CheckToken("trigger9") || tok.CheckToken("trigger10") || tok.CheckToken("trigger11") || tok.CheckToken("trigger12") || tok.CheckToken("trigger13") || tok.CheckToken("trigger14") || tok.CheckToken("trigger15") || tok.CheckToken("trigger16") || tok.CheckToken("trigger17") || tok.CheckToken("trigger18") || tok.CheckToken("trigger19") || tok.CheckToken("trigger20")) { if( !tok.CheckToken("=") ) Error("expected =",tok); ParseTrigger(tok,StateManager); StateManager.AddTriggerToState(TRIGGERNUM); }*/ else break; } //parse the controller ParserController(tok,StateManager,nController); StateManager.AddTypeToState(nController); }
void CBTControllerServerSession::ServiceL( const RMessage2& aMessage ) { RDebug::Print(_L("CBTControllerServerSession::ServiceL: %d"), aMessage.Function()); if(aMessage.Function() != ECancelAll) iLastFunction = (TServerMessage)aMessage.Function(); switch(aMessage.Function()) { case EStartServer: { iMessage = aMessage; ControllerStart(); }break; case EStopServer: { iMessage = aMessage; ControllerStop(); }break; case EFindAndConnect: { iMessage = aMessage; ControllerDiscover(TControllerDataTypes::ERemoteTypeWii); }break; case EDisconnect: { iMessage = aMessage; iController.DisconnectDevice(); iMessage.Complete(KErrNone); }break; case ESwitchPowerOn: { iMessage = aMessage; SwitchOnPower(); }break; case ELoadKeyConfig: { iMessage = aMessage; iKeyConfigName.Zero(); iMessage.ReadL(0,iKeyConfigName); LoadKeyConfig(iKeyConfigName); }break; case EGetCurrentConfig: { iMessage = aMessage; GetCurrentConfigName(); }break; case EControllerType: { iMessage = aMessage; GetControllerType(); }break; case EBatteryStatus: { iMessage = aMessage; GetBatteryStatus(); }break; case EWiiSpeakerEnabled: { iMessage = aMessage; GetWiiSpeakerStatus(); }break; case ESetWiiSpeakerEnabled: { iMessage = aMessage; TControllerDataTypes::TWiiSpeaker spk; TPtr8 desc(reinterpret_cast<TUint8*>(&spk),sizeof(spk),sizeof(spk)); iMessage.ReadL(0,desc); SetWiiSpeakerStatus(spk); }break; case ESetAccelerometerState: { iMessage = aMessage; TBool state; TPtr8 desc(reinterpret_cast<TUint8*>(&state),sizeof(state),sizeof(state)); iMessage.ReadL(0,desc); EnableWiiAcc(state); }break; case ECancelAll: { switch(iLastFunction) { case EDiscoverController: { iController.CancelDiscovery(); }break; default: break; } if(!iMessage.IsNull()) { iMessage.Complete(KErrCancel); } if(!aMessage.IsNull()) { if(aMessage != iMessage) aMessage.Complete(KErrCancel); } iLastFunction = ECancelAll; }break; case ELoadConfigByUid: { iMessage = aMessage; TBool load; TPtr8 desc(reinterpret_cast<TUint8*>(&load),sizeof(load),sizeof(load)); iMessage.ReadL(0,desc); SetLoadByUid(load); }break; default: { iMessage = aMessage; PanicClient(iMessage,KErrNotSupported); }break; } }