// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include "common/common_types.h" #include "core/hle/result.h" #include "hid_core/hid_types.h" namespace Service::HID { struct AppletResourceHolder; class NpadAbstractedPadHolder; class NpadAbstractPropertiesHandler; class NpadGcVibrationDevice; class NpadVibrationDevice; class NpadN64VibrationDevice; class NpadVibration; /// Keeps track of battery levels and updates npad battery shared memory values class NpadAbstractVibrationHandler final { public: explicit NpadAbstractVibrationHandler(); ~NpadAbstractVibrationHandler(); void SetAbstractPadHolder(NpadAbstractedPadHolder* holder); void SetAppletResource(AppletResourceHolder* applet_resource); void SetPropertiesHandler(NpadAbstractPropertiesHandler* handler); void SetN64Vibration(NpadN64VibrationDevice* n64_device); void SetVibration(std::span device); void SetGcVibration(NpadGcVibrationDevice* gc_device); Result IncrementRefCounter(); Result DecrementRefCounter(); void UpdateVibrationState(); private: AppletResourceHolder* applet_resource_holder{nullptr}; NpadAbstractedPadHolder* abstract_pad_holder{nullptr}; NpadAbstractPropertiesHandler* properties_handler{nullptr}; NpadN64VibrationDevice* n64_vibration_device{nullptr}; std::array vibration_device{}; NpadGcVibrationDevice* gc_vibration_device{nullptr}; NpadVibration* vibration_handler{nullptr}; s32 ref_counter{}; }; } // namespace Service::HID