// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_GAMEPAD_NINTENDO_CONTROLLER_H_ #define DEVICE_GAMEPAD_NINTENDO_CONTROLLER_H_ #include <memory> #include <optional> #include <vector> #include "base/cancelable_callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "device/gamepad/abstract_haptic_gamepad.h" #include "device/gamepad/gamepad_id_list.h" #include "device/gamepad/gamepad_standard_mappings.h" #include "device/gamepad/public/cpp/gamepad.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/hid.mojom.h" namespace device { // NintendoController represents a gaming input for a Nintendo console. In some // cases, multiple discrete devices can be associated to form one logical // input. A single NintendoController instance may represent a discrete device, // or may represent two devices associated to form a composite input. (For // instance, a pair of matched Joy-Cons may be treated as a single gamepad.) // // Switch devices must be initialized in order to provide a good experience. // Devices that connect over Bluetooth (Joy-Cons and the Pro Controller) default // to a HID interface that exposes only partial functionality. Devices that // connect over USB (Pro Controller and Charging Grip) send no controller data // reports until the initialization sequence is started. In both cases, // initialization is necessary in order to configure device LEDs, enable and // disable device features, and fetch calibration data. // // After initialization, the Joy-Con or Pro Controller should be in the // following state: // * Faster baud rate, if connected over USB. // * Player indicator light 1 is lit, others are unlit. // * Home light is 100% on. // * Accelerometer and gyroscope inputs are enabled with default sensitivity. // * Vibration is enabled. // * NFC is disabled. // * Configured to send controller data reports with report ID 0x30. // // Joy-Cons and the Pro Controller provide uncalibrated joystick input. The // devices store factory calibration data for scaling the joystick axes and // applying deadzones. // // Dual-rumble vibration effects are supported for both discrete devices and for // composite devices. Joy-Cons and the Pro Controller use linear resonant // actuators (LRAs) instead of the traditional eccentric rotating mass (ERM) // vibration actuators. The LRAs are controlled using frequency and amplitude // pairs rather than a single magnitude value. To simulate a dual-rumble effect, // the left and right LRAs are set to vibrate at different frequencies as though // they were the strong and weak ERM actuators. The amplitudes are set to the // strong and weak effect magnitudes. When a vibration effect is played on a // composite device, the effect is split so that each component receives one // channel of the dual-rumble effect. class NintendoController final : public AbstractHapticGamepad { … }; } // namespace device #endif // DEVICE_GAMEPAD_NINTENDO_CONTROLLER_H_