// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "device/gamepad/gamepad_monitor.h" #include #include "base/memory/ptr_util.h" #include "base/memory/shared_memory.h" #include "device/gamepad/gamepad_service.h" #include "device/gamepad/gamepad_shared_buffer.h" #include "mojo/public/cpp/bindings/strong_binding.h" namespace device { GamepadMonitor::GamepadMonitor() : is_started_(false) {} GamepadMonitor::~GamepadMonitor() { if (is_started_) GamepadService::GetInstance()->RemoveConsumer(this); } // static void GamepadMonitor::Create(mojom::GamepadMonitorRequest request) { mojo::MakeStrongBinding(std::make_unique(), std::move(request)); } void GamepadMonitor::OnGamepadConnected(unsigned index, const Gamepad& gamepad) { if (gamepad_observer_) gamepad_observer_->GamepadConnected(index, gamepad); } void GamepadMonitor::OnGamepadDisconnected(unsigned index, const Gamepad& gamepad) { if (gamepad_observer_) gamepad_observer_->GamepadDisconnected(index, gamepad); } void GamepadMonitor::GamepadStartPolling(GamepadStartPollingCallback callback) { DCHECK(!is_started_); is_started_ = true; GamepadService* service = GamepadService::GetInstance(); service->ConsumerBecameActive(this); std::move(callback).Run(service->GetSharedBufferHandle()); } void GamepadMonitor::GamepadStopPolling(GamepadStopPollingCallback callback) { DCHECK(is_started_); is_started_ = false; GamepadService::GetInstance()->ConsumerBecameInactive(this); std::move(callback).Run(); } void GamepadMonitor::SetObserver(mojom::GamepadObserverPtr gamepad_observer) { gamepad_observer_ = std::move(gamepad_observer); } } // namespace device