mozilla::ipc::IPCResult GamepadTestChannelParent::RecvGamepadTestEvent(const uint32_t& aID, const GamepadChangeEvent& aEvent) { mozilla::ipc::AssertIsOnBackgroundThread(); RefPtr<GamepadPlatformService> service = GamepadPlatformService::GetParentService(); MOZ_ASSERT(service); if (aEvent.type() == GamepadChangeEvent::TGamepadAdded) { const GamepadAdded& a = aEvent.get_GamepadAdded(); nsCString gamepadID; LossyCopyUTF16toASCII(a.id(), gamepadID); uint32_t index = service->AddGamepad(gamepadID.get(), static_cast<GamepadMappingType>(a.mapping()), a.hand(), a.num_buttons(), a.num_axes(), a.num_haptics()); if (!mShuttingdown) { Unused << SendReplyGamepadIndex(aID, index); } return IPC_OK(); } if (aEvent.type() == GamepadChangeEvent::TGamepadRemoved) { const GamepadRemoved& a = aEvent.get_GamepadRemoved(); service->RemoveGamepad(a.index()); return IPC_OK(); } if (aEvent.type() == GamepadChangeEvent::TGamepadButtonInformation) { const GamepadButtonInformation& a = aEvent.get_GamepadButtonInformation(); service->NewButtonEvent(a.index(), a.button(), a.pressed(), a.touched(), a.value()); return IPC_OK(); } if (aEvent.type() == GamepadChangeEvent::TGamepadAxisInformation) { const GamepadAxisInformation& a = aEvent.get_GamepadAxisInformation(); service->NewAxisMoveEvent(a.index(), a.axis(), a.value()); return IPC_OK(); } if (aEvent.type() == GamepadChangeEvent::TGamepadPoseInformation) { const GamepadPoseInformation& a = aEvent.get_GamepadPoseInformation(); service->NewPoseEvent(a.index(), a.pose_state()); return IPC_OK(); } NS_WARNING("Unknown event type."); return IPC_FAIL_NO_REASON(this); }
void GamepadManager::Update(const GamepadChangeEvent& aEvent) { if (aEvent.type() == GamepadChangeEvent::TGamepadAdded) { const GamepadAdded& a = aEvent.get_GamepadAdded(); AddGamepad(a.index(), a.id(), static_cast<GamepadMappingType>(a.mapping()), static_cast<GamepadHand>(a.hand()), a.service_type(), a.num_buttons(), a.num_axes()); return; } if (aEvent.type() == GamepadChangeEvent::TGamepadRemoved) { const GamepadRemoved& a = aEvent.get_GamepadRemoved(); RemoveGamepad(a.index(), a.service_type()); return; } if (aEvent.type() == GamepadChangeEvent::TGamepadButtonInformation) { const GamepadButtonInformation& a = aEvent.get_GamepadButtonInformation(); NewButtonEvent(a.index(), a.service_type(), a.button(), a.pressed(), a.value()); return; } if (aEvent.type() == GamepadChangeEvent::TGamepadAxisInformation) { const GamepadAxisInformation& a = aEvent.get_GamepadAxisInformation(); NewAxisMoveEvent(a.index(), a.service_type(), a.axis(), a.value()); return; } if (aEvent.type() == GamepadChangeEvent::TGamepadPoseInformation) { const GamepadPoseInformation& a = aEvent.get_GamepadPoseInformation(); NewPoseEvent(a.index(), a.service_type(), a.pose_state()); return; } MOZ_CRASH("We shouldn't be here!"); }