Ejemplo n.º 1
0
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()));
	}
}
Ejemplo n.º 2
0
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;
        }    
    }