# WARNING: Please don't edit this file. It was generated by Python/WinRT v2.2.0

import datetime
import sys
import types
import typing
import uuid as _uuid
from builtins import property as _property

import winrt._winrt
import winrt.system
import winrt.windows.foundation as windows_foundation
import winrt.windows.gaming.input as windows_gaming_input
import winrt.windows.storage.streams as windows_storage_streams

from winrt.windows.gaming.input.custom import GipFirmwareUpdateStatus, GipMessageClass, XusbDeviceSubtype, XusbDeviceType

Self = typing.TypeVar('Self')

@typing.final
class GameControllerVersionInfo:
    major: winrt.system.UInt16
    minor: winrt.system.UInt16
    build: winrt.system.UInt16
    revision: winrt.system.UInt16
    def __init__(self, major: winrt.system.UInt16, minor: winrt.system.UInt16, build: winrt.system.UInt16, revision: winrt.system.UInt16) -> None: ...

@typing.final
class GipFirmwareUpdateProgress:
    percent_completed: winrt.system.Double
    current_component_id: winrt.system.UInt32
    def __init__(self, percent_completed: winrt.system.Double, current_component_id: winrt.system.UInt32) -> None: ...

@typing.final
class GameControllerFactoryManager_Static(type):
    def register_custom_factory_for_gip_interface(cls, factory: typing.Optional[ICustomGameControllerFactory], interface_id: _uuid.UUID, /) -> None: ...
    def register_custom_factory_for_hardware_id(cls, factory: typing.Optional[ICustomGameControllerFactory], hardware_vendor_id: winrt.system.UInt16, hardware_product_id: winrt.system.UInt16, /) -> None: ...
    def register_custom_factory_for_xusb_type(cls, factory: typing.Optional[ICustomGameControllerFactory], xusb_type: XusbDeviceType, xusb_subtype: XusbDeviceSubtype, /) -> None: ...
    def try_get_factory_controller_from_game_controller(cls, factory: typing.Optional[ICustomGameControllerFactory], game_controller: typing.Optional[windows_gaming_input.IGameController], /) -> typing.Optional[windows_gaming_input.IGameController]: ...

@typing.final
class GameControllerFactoryManager(winrt.system.Object, metaclass=GameControllerFactoryManager_Static):
    pass

@typing.final
class GipFirmwareUpdateResult(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> GipFirmwareUpdateResult: ...
    @_property
    def extended_error_code(self) -> winrt.system.UInt32: ...
    @_property
    def final_component_id(self) -> winrt.system.UInt32: ...
    @_property
    def status(self) -> GipFirmwareUpdateStatus: ...

@typing.final
class GipGameControllerProvider(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> GipGameControllerProvider: ...
    def send_message(self, message_class: GipMessageClass, message_id: winrt.system.UInt8, message_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def send_receive_message(self, message_class: GipMessageClass, message_id: winrt.system.UInt8, request_message_buffer: winrt.system.Array[winrt.system.UInt8], response_message_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def update_firmware_async(self, firmware_image: typing.Optional[windows_storage_streams.IInputStream], /) -> windows_foundation.IAsyncOperationWithProgress[GipFirmwareUpdateResult, GipFirmwareUpdateProgress]: ...
    @_property
    def firmware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def hardware_product_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_vendor_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def is_connected(self) -> bool: ...

@typing.final
class HidGameControllerProvider(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> HidGameControllerProvider: ...
    def get_feature_report(self, report_id: winrt.system.UInt8, report_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def send_feature_report(self, report_id: winrt.system.UInt8, report_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def send_output_report(self, report_id: winrt.system.UInt8, report_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    @_property
    def firmware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def hardware_product_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_vendor_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def is_connected(self) -> bool: ...
    @_property
    def usage_id(self) -> winrt.system.UInt16: ...
    @_property
    def usage_page(self) -> winrt.system.UInt16: ...

@typing.final
class XusbGameControllerProvider(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> XusbGameControllerProvider: ...
    def set_vibration(self, low_frequency_motor_speed: winrt.system.Double, high_frequency_motor_speed: winrt.system.Double, /) -> None: ...
    @_property
    def firmware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def hardware_product_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_vendor_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def is_connected(self) -> bool: ...

@typing.final
class ICustomGameControllerFactory(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> ICustomGameControllerFactory: ...
    def create_game_controller(self, provider: typing.Optional[IGameControllerProvider], /) -> typing.Optional[winrt.system.Object]: ...
    def on_game_controller_added(self, value: typing.Optional[windows_gaming_input.IGameController], /) -> None: ...
    def on_game_controller_removed(self, value: typing.Optional[windows_gaming_input.IGameController], /) -> None: ...

@typing.final
class IGameControllerInputSink(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IGameControllerInputSink: ...
    def on_input_resumed(self, timestamp: winrt.system.UInt64, /) -> None: ...
    def on_input_suspended(self, timestamp: winrt.system.UInt64, /) -> None: ...

@typing.final
class IGameControllerProvider(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IGameControllerProvider: ...
    @_property
    def firmware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def hardware_product_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_vendor_id(self) -> winrt.system.UInt16: ...
    @_property
    def hardware_version_info(self) -> GameControllerVersionInfo: ...
    @_property
    def is_connected(self) -> bool: ...

@typing.final
class IGipGameControllerInputSink(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IGipGameControllerInputSink: ...
    def on_input_resumed(self, timestamp: winrt.system.UInt64, /) -> None: ...
    def on_input_suspended(self, timestamp: winrt.system.UInt64, /) -> None: ...
    def on_key_received(self, timestamp: winrt.system.UInt64, key_code: winrt.system.UInt8, is_pressed: bool, /) -> None: ...
    def on_message_received(self, timestamp: winrt.system.UInt64, message_class: GipMessageClass, message_id: winrt.system.UInt8, sequence_id: winrt.system.UInt8, message_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...

@typing.final
class IHidGameControllerInputSink(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IHidGameControllerInputSink: ...
    def on_input_report_received(self, timestamp: winrt.system.UInt64, report_id: winrt.system.UInt8, report_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def on_input_resumed(self, timestamp: winrt.system.UInt64, /) -> None: ...
    def on_input_suspended(self, timestamp: winrt.system.UInt64, /) -> None: ...

@typing.final
class IXusbGameControllerInputSink(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IXusbGameControllerInputSink: ...
    def on_input_received(self, timestamp: winrt.system.UInt64, report_id: winrt.system.UInt8, input_buffer: winrt.system.Array[winrt.system.UInt8], /) -> None: ...
    def on_input_resumed(self, timestamp: winrt.system.UInt64, /) -> None: ...
    def on_input_suspended(self, timestamp: winrt.system.UInt64, /) -> None: ...

