다음을 통해 공유


LegacyGipGameControllerProvider 클래스

정의

GIP(게임 입력 프로토콜) 프로토콜을 사용하는 게임 패드 및 헤드셋과 같은 게임 액세서리를 관리하기 위한 속성 및 기능 집합을 노출합니다.

중요

이 클래스에 액세스하려면 xboxAccessoryManagement 기능을 선언해야 합니다.

주의

이러한 API는 시스템의 모든 게임에 영향을 미치며 오용되는 경우 액세서리에 문제가 발생할 수 있습니다. Microsoft는 사용자가 개발한 하드웨어를 관리하기 위해 이러한 API만 사용하는 것이 좋습니다.

public ref class LegacyGipGameControllerProvider sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Gaming.Input.GamingInputPreviewContract, 131072)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class LegacyGipGameControllerProvider final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Gaming.Input.GamingInputPreviewContract), 131072)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class LegacyGipGameControllerProvider
Public NotInheritable Class LegacyGipGameControllerProvider
상속
Object Platform::Object IInspectable LegacyGipGameControllerProvider
특성

Windows 요구 사항

디바이스 패밀리
Windows Desktop Extension SDK (10.0.23665.0에서 도입되었습니다.)
API contract
Windows.Gaming.Input.GamingInputPreviewContract (v2.0에서 도입되었습니다.)

예제

컨트롤러의 속성 읽기

public void EnumerateControllerProperties()
{
    foreach (Gamepad gamepad in Gamepad.Gamepads)
    {
        // Create the provider
        LegacyGipGameControllerProvider legacyGipGameControllerProvider =
            LegacyGipGameControllerProvider.FromGameController(gamepad);
        if (legacyGipGameControllerProvider == null)
        {
            // Not every gamepad is a legacy GIP game controller, continue enumerating
            continue;
        }

        // Check properties
        GameControllerBatteryChargingState chargeState =
            legacyGipGameControllerProvider.BatteryChargingState;
        GameControllerBatteryKind batteryKind =
            legacyGipGameControllerProvider.BatteryKind;
        GameControllerBatteryLevel batteryLevel =
            legacyGipGameControllerProvider.BatteryLevel;
        bool isOldFirmwareCorrupted =
            legacyGipGameControllerProvider.IsFirmwareCorrupted;
        bool isNewFirmwareCorrupted =
            legacyGipGameControllerProvider.GetDeviceFirmwareCorruptionState()
            != GameControllerFirmwareCorruptReason.NotCorrupt;
        bool isSynthetic = legacyGipGameControllerProvider.IsSyntheticDevice;
        byte[] extendedDeviceInfo = legacyGipGameControllerProvider.GetExtendedDeviceInfo();

        // Check for a particular GIP interface
        bool supportsSomeCustomInterface =
            legacyGipGameControllerProvider.IsInterfaceSupported(
                new Guid(
                    0xaaaaaaaa, 0xbbbb, 0xcccc, 0xe, 0xf, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6));

        IReadOnlyList<string> preferredTypes =
            legacyGipGameControllerProvider.PreferredTypes;
        bool isGamepad = preferredTypes.Contains("Windows.Xbox.Input.Gamepad");
        bool isHeadset = preferredTypes.Contains("Windows.Xbox.Input.Headset");

        // Change the LED to half brightness
        legacyGipGameControllerProvider.SetHomeLedIntensity(50);
    }
}

다시 매핑 단추

void RemapButtons(IGameController controller, IGameControllerProvider controllerProvider)
{
    LegacyGipGameControllerProvider legacyGipGameControllerProvider =
        LegacyGipGameControllerProvider.FromGameControllerProvider(controllerProvider);

    // Retrieve all current remappings set for standard controllers
    IReadOnlyDictionary<RemappingButtonCategory, object> currentMappings =
        legacyGipGameControllerProvider.GetStandardControllerButtonRemapping(
            controller.User, false);

    // Swap two of the buttons
    Dictionary<RemappingButtonCategory, object> remaps =
        new Dictionary<RemappingButtonCategory, object>();

    // Duplicates are not allowed. Swap two of the buttons
    UInt64 currentButtonMappings =
       (UInt64)currentMappings[RemappingButtonCategory.ButtonSettings];

    // Isolate the buttons we want to remap
    UInt64 lastButton = (currentButtonMappings & 0xf000000000000000);
    UInt64 secondLastButton = currentButtonMappings & 0x0f00000000000000;

    // Swap their positions
    UInt64 newMapping = (lastButton >> 4) | (secondLastButton << 4);

    // Recombine with the original mappings
    UInt64 newButtonMappings = (currentButtonMappings & 0x00ffffffffffffff) | newMapping;

    // Add the new button remappings to the mapping dictionary
    remaps.Add(RemappingButtonCategory.ButtonSettings, newButtonMappings);

    // Update controller mapping
    legacyGipGameControllerProvider.SetStandardControllerButtonRemapping(
        controller.User, false, newButtonMappings);
}

Copilot 설정

public void CopilotSample(GipGameControllerProvider pilotProvider,
                                    GipGameControllerProvider copilotProvider)
{
    // Establish a copilot pairing for the given pilot and copilot providers
    string pilotId = GameControllerProviderInfo.GetProviderId(pilotProvider);
    string copilotId = GameControllerProviderInfo.GetProviderId(copilotProvider);
    User user = User.GetDefault();
    LegacyGipGameControllerProvider.PairPilotToCopilot(user, pilotId,
        copilotId);

    // Read copilot properties
    LegacyGipGameControllerProvider.IsPilot(user, pilotId); // Returns copilotId
    LegacyGipGameControllerProvider.IsPilot(user, copilotId); // Returns null
    LegacyGipGameControllerProvider.IsCopilot(user, pilotId); // Returns null
    LegacyGipGameControllerProvider.IsCopilot(user, copilotId); // Returns pilotId

    // Removes the pairing for both controllers
    LegacyGipGameControllerProvider.ClearPairing(user, pilotId);
    // Also removes the pairing for both controllers (unnecessary since the pairing was already removed)
    LegacyGipGameControllerProvider.ClearPairing(user, copilotId);
}

헤드셋 관리

public void SetupHeadset(IGameControllerProvider headsetProvider)
{
    LegacyGipGameControllerProvider legacyGipGameControllerProvider =
        LegacyGipGameControllerProvider.FromGameControllerProvider(headsetProvider);

    // Reset the device
    legacyGipGameControllerProvider.ExecuteCommand(DeviceCommand.Reset);

    // Check the smart mute level
    byte[] smartMuteBuffer =
        legacyGipGameControllerProvider.GetHeadsetOperation(HeadsetOperation.SmartMute);
    HeadsetLevel smartMuteValue = (HeadsetLevel)smartMuteBuffer[0];

    // Set bass boost to 3db
    byte[] bassBuffer = BitConverter.GetBytes((UInt32)3);
    legacyGipGameControllerProvider.SetHeadsetOperation(HeadsetOperation.BassBoostGain,
        bassBuffer);
}

속성

AppCompatVersion

GIP(게임 입력 프로토콜) 드라이버에서 보고한 앱 호환 버전을 가져옵니다.

BatteryChargingState

컨트롤러의 배터리 충전 상태를 가져옵니다.

BatteryKind

컨트롤러의 배터리 종류를 가져옵니다.

BatteryLevel

컨트롤러의 배터리 충전 수준을 가져옵니다.

IsFirmwareCorrupted

컨트롤러 펌웨어가 손상되었는지 여부를 반환합니다.

IsSyntheticDevice

컨트롤러가 가상 디바이스인지 물리적 디바이스인지를 반환합니다.

PreferredTypes

컨트롤러에서 보고하는 GIP(게임 입력 프로토콜) 형식 집합을 가져옵니다.

메서드

ClearPairing(User, String)

지정된 사용자에 대한 controllerId에 대한 모든 부조종사 페어링을 제거합니다.

ExecuteCommand(DeviceCommand)

레거시 GIP(게임 입력 프로토콜) 헤드셋에서 명령을 실행합니다.

FromGameController(IGameController)

지정된 컨트롤러에 대한 LegacyGipGameControllerProvider 를 생성합니다.

FromGameControllerProvider(IGameControllerProvider)

지정된 컨트롤러 공급자에 대한 LegacyGipGameControllerProvider 를 생성합니다.

GetDeviceFirmwareCorruptionState()

디바이스의 펌웨어가 손상되었는지 여부와 손상된 경우 어떤 방식으로 상태를 검색합니다.

GetExtendedDeviceInfo()

디바이스에 대한 식별 정보를 검색합니다.

GetHeadsetOperation(HeadsetOperation)

에 따라 헤드셋 설정을 검색합니다 operation.

GetStandardControllerButtonRemapping(User, Boolean)

사용자에 대한 표준 게임 패드의 단추 및 축 매핑을 검색합니다.

IsCopilot(User, String)

이 컨트롤러가 부조종사인 경우 파일럿 컨트롤러의 ID를 검색합니다.

IsInterfaceSupported(Guid)

지정된 GIP(게임 입력 프로토콜) 인터페이스 GUID가 컨트롤러에서 지원되는지 여부를 쿼리합니다.

IsPilot(User, String)

이 컨트롤러가 파일럿인 경우 부조종사 컨트롤러의 ID를 검색합니다.

PairPilotToCopilot(User, String, String)

지정된 사용자에 대해 지정된 파일럿 및 부조종사 컨트롤러를 페어링합니다.

SetHeadsetOperation(HeadsetOperation, Byte[])

헤드셋 작업을 설정합니다.

SetHomeLedIntensity(Byte)

컨트롤러의 홈 단추에서 LED의 밝기를 설정합니다.

SetStandardControllerButtonRemapping(User, Boolean, IMapView<RemappingButtonCategory,Object>)

사용자에 대한 표준 게임 패드의 단추 및 축 매핑을 변경합니다.

적용 대상

추가 정보