diff options
| author | Lucas Perlind <perlindluca@gmail.com> | 2025-02-06 14:56:37 +1100 |
|---|---|---|
| committer | Lucas Perlind <perlindluca@gmail.com> | 2025-02-06 14:56:37 +1100 |
| commit | d1d0f0e9b77247e085a519ed9e08e6782bdd67f7 (patch) | |
| tree | ca8bf8ae7aa5c9aab2561280352130002adc0fbb | |
| parent | 9cbbe72f6febc3bab1489465eed18bbec9fe1c2b (diff) | |
Update 4 review
| -rw-r--r-- | vendor/windows/GameInput/windows_game_input.odin | 1129 | ||||
| -rw-r--r-- | vendor/windows_game_input/windows_game_input.odin | 1129 |
2 files changed, 1129 insertions, 1129 deletions
diff --git a/vendor/windows/GameInput/windows_game_input.odin b/vendor/windows/GameInput/windows_game_input.odin new file mode 100644 index 000000000..83477619f --- /dev/null +++ b/vendor/windows/GameInput/windows_game_input.odin @@ -0,0 +1,1129 @@ +#+build windows +/* + Bindings for Windows Game Input GDK: + https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/input/overviews/input-overview + + Windows SDK 10.0.26100.0 is at least required to link with. +*/ +package windows_game_input + +foreign import wgi { + "system:gameinput.lib", +} + +import "core:c" +import "core:sys/windows" + +// Enums +ArcadeStickButtons_Flag :: enum c.int { + Menu = 0, + View = 1, + Up = 2, + Down = 3, + Left = 4, + Right = 5, + Action1 = 6, + Action2 = 7, + Action3 = 8, + Action4 = 9, + Action5 = 10, + Action6 = 11, + Special1 = 12, + Special2 = 13 +} +ArcadeStickButtons :: distinct bit_set[ArcadeStickButtons_Flag; c.int] + +BatteryStatus :: enum c.int { + Unknown = -1, + NotPresent = 0, + Discharging = 1, + Idle = 2, + Charging = 3 +} + +DeviceCapabilities_Flag :: enum c.int { + Audio = 0, + PluginModule = 1, + PowerOff = 2, + Synchronization = 3, + Wireless = 4 +} +DeviceCapabilities :: distinct bit_set[DeviceCapabilities_Flag; c.int] + +DeviceFamily :: enum c.int { + Virtual = -1, + Aggregate = 0, + XboxOne = 1, + Xbox360 = 2, + Hid = 3, + I8042 = 4 +} + +DeviceStatus_Flag :: enum c.int { + Connected = 0, + InputEnabled = 1, + OutputEnabled = 2, + RawIoEnabled = 3, + AudioCapture = 4, + AudioRender = 5, + Synchronized = 6, + Wireless = 7, + UserIdle = 20, +} +DeviceStatus :: distinct bit_set[DeviceStatus_Flag; c.int] + +EnumerationKind :: enum c.int { + NoEnumeration = 0, + AsyncEnumeration = 1, + BlockingEnumeration = 2 +} + +FeedbackAxes_Flag :: enum c.int { + LinearX = 0, + LinearY = 1, + LinearZ = 2, + AngularX = 3, + AngularY = 4, + AngularZ = 5, + Normal = 6 +} +FeedbackAxes :: distinct bit_set[FeedbackAxes_Flag; c.int] + +FeedbackEffectState :: enum c.int { + Stopped = 0, + Running = 1, + Paused = 2 +} + +FlightStickButtons_Flag :: enum c.int { + None = 0, + Menu = 1, + View = 2, + FirePrimary = 3, + FireSecondary = 4 +} +FlightStickButtons :: distinct bit_set[FlightStickButtons_Flag; c.int] + +FocusPolicy_Flag :: enum c.int { + DisableBackgroundInput = 0, + ExclusiveForegroundInput = 1, + DisableBackgroundGuideButton = 2, + ExclusiveForegroundGuideButton = 3, + DisableBackgroundShareButton = 4, + ExclusiveForegroundShareButton = 5 +} +FocusPolicy :: distinct bit_set[FocusPolicy_Flag; c.int] + +ForceFeedbackEffectKind :: enum c.int { + Constant = 0, + Ramp = 1, + SineWave = 2, + SquareWave = 3, + TriangleWave = 4, + SawtoothUpWave = 5, + SawtoothDownWave = 6, + Spring = 7, + Friction = 8, + Damper = 9, + Inertia = 10 +} + +GamepadButtons_Flag :: enum c.int { + Menu = 0, + View = 1, + A = 2, + B = 3, + X = 4, + Y = 5, + DPadUp = 6, + DPadDown = 7, + DPadLeft = 8, + DPadRight = 9, + LeftShoulder = 10, + RightShoulder = 11, + LeftThumbstick = 12, + RightThumbstick = 13 +} +GamepadButtons :: distinct bit_set[GamepadButtons_Flag; c.int] + +KeyboardKind :: enum c.int { + UnknownKeyboard = -1, + AnsiKeyboard = 0, + IsoKeyboard = 1, + KsKeyboard = 2, + AbntKeyboard = 3, + JisKeyboard = 4 +} + +Kind_Flag :: enum c.int { + RawDeviceReport = 0, + ControllerAxis = 1, + ControllerButton = 2, + ControllerSwitch = 3, + Keyboard = 4, + Mouse = 5, + Touch = 8, + Motion = 12, + ArcadeStick = 16, + FlightStick = 17, + Gamepad = 18, + RacingWheel = 19, + UiNavigation = 20 +} +Kind :: distinct bit_set[Kind_Flag; c.int] +Kind_Controller : Kind : { .ControllerAxis, .ControllerButton, .ControllerSwitch } + +Label :: enum c.int { + Unknown = -1, + None = 0, + XboxGuide = 1, + XboxBack = 2, + XboxStart = 3, + XboxMenu = 4, + XboxView = 5, + XboxA = 7, + XboxB = 8, + XboxX = 9, + XboxY = 10, + XboxDPadUp = 11, + XboxDPadDown = 12, + XboxDPadLeft = 13, + XboxDPadRight = 14, + XboxLeftShoulder = 15, + XboxLeftTrigger = 16, + XboxLeftStickButton = 17, + XboxRightShoulder = 18, + XboxRightTrigger = 19, + XboxRightStickButton = 20, + XboxPaddle1 = 21, + XboxPaddle2 = 22, + XboxPaddle3 = 23, + XboxPaddle4 = 24, + LetterA = 25, + LetterB = 26, + LetterC = 27, + LetterD = 28, + LetterE = 29, + LetterF = 30, + LetterG = 31, + LetterH = 32, + LetterI = 33, + LetterJ = 34, + LetterK = 35, + LetterL = 36, + LetterM = 37, + LetterN = 38, + LetterO = 39, + LetterP = 40, + LetterQ = 41, + LetterR = 42, + LetterS = 43, + LetterT = 44, + LetterU = 45, + LetterV = 46, + LetterW = 47, + LetterX = 48, + LetterY = 49, + LetterZ = 50, + Number0 = 51, + Number1 = 52, + Number2 = 53, + Number3 = 54, + Number4 = 55, + Number5 = 56, + Number6 = 57, + Number7 = 58, + Number8 = 59, + Number9 = 60, + ArrowUp = 61, + ArrowUpRight = 62, + ArrowRight = 63, + ArrowDownRight = 64, + ArrowDown = 65, + ArrowDownLLeft = 66, + ArrowLeft = 67, + ArrowUpLeft = 68, + ArrowUpDown = 69, + ArrowLeftRight = 70, + ArrowUpDownLeftRight = 71, + ArrowClockwise = 72, + ArrowCounterClockwise = 73, + ArrowReturn = 74, + IconBranding = 75, + IconHome = 76, + IconMenu = 77, + IconCross = 78, + IconCircle = 79, + IconSquare = 80, + IconTriangle = 81, + IconStar = 82, + IconDPadUp = 83, + IconDPadDown = 84, + IconDPadLeft = 85, + IconDPadRight = 86, + IconDialClockwise = 87, + IconDialCounterClockwise = 88, + IconSliderLeftRight = 89, + IconSliderUpDown = 90, + IconWheelUpDown = 91, + IconPlus = 92, + IconMinus = 93, + IconSuspension = 94, + Home = 95, + Guide = 96, + Mode = 97, + Select = 98, + Menu = 99, + View = 100, + Back = 101, + Start = 102, + Options = 103, + Share = 104, + Up = 105, + Down = 106, + Left = 107, + Right = 108, + LB = 109, + LT = 110, + LSB = 111, + L1 = 112, + L2 = 113, + L3 = 114, + RB = 115, + RT = 116, + RSB = 117, + R1 = 118, + R2 = 119, + R3 = 120, + P1 = 121, + P2 = 122, + P3 = 123, + P4 = 124 +} + +Location :: enum c.int { + Unknown = -1, + Chassis = 0, + Display = 1, + Axis = 2, + Button = 3, + Switch = 4, + Key = 5, + TouchPad = 6 +} + +MotionAccuracy :: enum c.int { + AccuracyUnknown = -1, + Unavailable = 0, + Unreliable = 1, + Approximate = 2, + Accurate = 3 +} + +MouseButtons_Flag :: enum c.int { + LeftButton = 0, + RightButton = 1, + MiddleButton = 2, + Button4 = 3, + Button5 = 4, + WheelTiltLeft = 5, + WheelTiltRight = 6 +} +MouseButtons :: distinct bit_set[MouseButtons_Flag; c.int] + +RacingWheelButtons_Flag :: enum c.int { + Menu = 0, + View = 1, + PreviousGear = 2, + NextGear = 3, + DpadUp = 4, + DpadDown = 5, + DpadLeft = 6, + DpadRight = 7 +} +RacingWheelButtons :: distinct bit_set[RacingWheelButtons_Flag; c.int] + +RawDeviceItemCollectionKind :: enum c.int { + UnknownItemCollection = -1, + PhysicalItemCollection = 0, + ApplicationItemCollection = 1, + LogicalItemCollection = 2, + ReportItemCollection = 3, + NamedArrayItemCollection = 4, + UsageSwitchItemCollection = 5, + UsageModifierItemCollection = 6 +} + +RawDevicePhysicalUnitKind :: enum c.int { + Unknown = -1, + None = 0, + Time = 1, + Frequency = 2, + Length = 3, + Velocity = 4, + Acceleration = 5, + Mass = 6, + Momentum = 7, + Force = 8, + Pressure = 9, + Angle = 10, + AngularVelocity = 11, + AngularAcceleration = 12, + AngularMass = 13, + AngularMomentum = 14, + AngularTorque = 15, + ElectricCurrent = 16, + ElectricCharge = 17, + ElectricPotential = 18, + Energy = 19, + Power = 20, + Temperature = 21, + LuminousIntensity = 22, + LuminousFlux = 23, + Illuminance = 24 +} + +RawDeviceReportItemFlag :: enum c.int { + ConstantItem = 0, + ArrayItem = 1, + RelativeItem = 2, + WraparoundItem = 3, + NonlinearItem = 4, + StableItem = 5, + NullableItem = 6, + VolatileItem = 7, + BufferedItem = 8 +} +RawDeviceReportItemFlags :: distinct bit_set[RawDeviceReportItemFlag; c.int] + +RawDeviceReportKind :: enum c.int { + InputReport = 0, + OutputReport = 1, + FeatureReport = 2 +} + +RumbleMotors_Flag :: enum c.int { + LowFrequency = 0, + HighFrequency = 1, + LeftTrigger = 2, + RightTrigger = 3 +} +RumbleMotors :: distinct bit_set[RumbleMotors_Flag; c.int] + +SwitchKind :: enum c.int { + UnknownSwitchKind = -1, + TwoWaySwitch = 0, + FourWaySwitch = 1, + EightWaySwitch = 2 +} + +SwitchPosition :: enum c.int { + Center = 0, + Up = 1, + UpRight = 2, + Right = 3, + DownRight = 4, + Down = 5, + DownLeft = 6, + Left = 7, + UpLeft = 8 +} + +SystemButtons_Flag :: enum c.int { + Guide = 0, + Share = 1 +} +SystemButtons :: distinct bit_set[SystemButtons_Flag; c.int] + +TouchShape :: enum c.int { + Unknown = -1, + Point = 0, + Shape1DLinear = 1, + Shape1DRadial = 2, + Shape1DIrregular = 3, + Shape2DRectangular = 4, + Shape2DElliptical = 5, + Shape2DIrregular = 6 +} + +UiNavigationButtons_Flag :: enum c.int { + Menu = 0, + View = 1, + Accept = 2, + Cancel = 3, + Up = 4, + Down = 5, + Left = 6, + Right = 7, + Context1 = 8, + Context2 = 9, + Context3 = 10, + Context4 = 11, + PageUp = 12, + PageDown = 13, + PageLeft = 14, + PageRight = 15, + ScrollUp = 16, + ScrollDown = 17, + ScrollLeft = 18, + ScrollRight = 19 +} +UiNavigationButtons :: distinct bit_set[UiNavigationButtons_Flag; c.int] + +// Structs + +APP_LOCAL_DEVICE_ID :: distinct [32]byte + +ArcadeStickInfo :: struct { + menuButtonLabel: Label, + viewButtonLabel: Label, + stickUpLabel: Label, + stickDownLabel: Label, + stickLeftLabel: Label, + stickRightLabel: Label, + actionButton1Label: Label, + actionButton2Label: Label, + actionButton3Label: Label, + actionButton4Label: Label, + actionButton5Label: Label, + actionButton6Label: Label, + specialButton1Label: Label, + specialButton2Label: Label, +} + +ArcadeStickState :: struct { + buttons: ArcadeStickButtons, +} + +BatteryState :: struct { + chargeRate: f32, + maxChargeRate: f32, + remainingCapacity: f32, + fullChargeCapacity: f32, + status: BatteryStatus, +} + +ControllerAxisInfo :: struct { + mappedInputKinds: Kind, + label: Label, + isContinuous: bool, + isNonlinear: bool, + isQuantized: bool, + hasRestValue: bool, + restValue: f32, + resolution: u64, + legacyDInputIndex: u16, + legacyHidIndex: u16, + rawReportIndex: u32, + inputReport: ^RawDeviceReportInfo, + inputReportItem: ^RawDeviceReportItemInfo, +} + +ControllerButtonInfo :: struct { + mappedInputKinds: Kind, + label: Label, + legacyDInputIndex: u16, + legacyHidIndex: u16, + rawReportIndex: u32, + inputReport: ^RawDeviceReportInfo, + inputReportItem: ^RawDeviceReportItemInfo, +} + +ControllerSwitchInfo :: struct { + mappedInputKinds: Kind, + label: Label, + positionLabels: [9]Label, + kind: SwitchKind, + legacyDInputIndex: u16, + legacyHidIndex: u16, + rawReportIndex: u32, + inputReport: ^RawDeviceReportInfo, + inputReportItem: ^RawDeviceReportItemInfo, +} + +DeviceInfo :: struct { + infoSize: u32, + vendorId: u16, + productId: u16, + revisionNumber: u16, + interfaceNumber: u8, + collectionNumber: u8, + usage: Usage, + hardwareVersion: Version, + firmwareVersion: Version, + deviceId: APP_LOCAL_DEVICE_ID, + deviceRootId: APP_LOCAL_DEVICE_ID, + deviceFamily: DeviceFamily, + capabilities: DeviceCapabilities, + supportedInput: Kind, + supportedRumbleMotors: RumbleMotors, + inputReportCount: u32, + outputReportCount: u32, + featureReportCount: u32, + controllerAxisCount: u32, + controllerButtonCount: u32, + controllerSwitchCount: u32, + touchPointCount: u32, + touchSensorCount: u32, + forceFeedbackMotorCount: u32, + hapticFeedbackMotorCount: u32, + deviceStringCount: u32, + deviceDescriptorSize: u32, + inputReportInfo: ^RawDeviceReportInfo, + outputReportInfo: ^RawDeviceReportInfo, + featureReportInfo: ^RawDeviceReportInfo, + controllerAxisInfo: ^ControllerAxisInfo, + controllerButtonInfo: ^ControllerButtonInfo, + controllerSwitchInfo: ^ControllerSwitchInfo, + keyboardInfo: ^KeyboardInfo, + mouseInfo: ^MouseInfo, + touchSensorInfo: ^TouchSensorInfo, + motionInfo: ^MotionInfo, + arcadeStickInfo: ^ArcadeStickInfo, + flightStickInfo: ^FlightStickInfo, + gamepadInfo: ^GamepadInfo, + racingWheelInfo: ^RacingWheelInfo, + uiNavigationInfo: ^UiNavigationInfo, + forceFeedbackMotorInfo: ^ForceFeedbackMotorInfo, + hapticFeedbackMotorInfo: ^HapticFeedbackMotorInfo, + displayName: ^String, + deviceStrings: ^String, + deviceDescriptorData: rawptr, +} + +FlightStickInfo :: struct { + menuButtonLabel: Label, + viewButtonLabel: Label, + firePrimaryButtonLabel: Label, + fireSecondaryButtonLabel: Label, + hatSwitchKind: SwitchKind, +} + +FlightStickState :: struct { + buttons: FlightStickButtons, + hatSwitch: SwitchPosition, + roll: f32, + pitch: f32, + yaw: f32, + throttle: f32, +} + +ForceFeedbackConditionParams :: struct { + magnitude: ForceFeedbackMagnitude, + positiveCoefficient: f32, + negativeCoefficient: f32, + maxPositiveMagnitude: f32, + maxNegativeMagnitude: f32, + deadZone: f32, + bias: f32, +} + +ForceFeedbackConstantParams :: struct { + envelope: ForceFeedbackEnvelope, + magnitude: ForceFeedbackMagnitude, +} + +ForceFeedbackEnvelope :: struct { + attackDuration: u64, + sustainDuration: u64, + releaseDuration: u64, + attackGain: f32, + sustainGain: f32, + releaseGain: f32, + playCount: u32, + repeatDelay: u64, +} + +ForceFeedbackMagnitude :: struct { + linearX: f32, + linearY: f32, + linearZ: f32, + angularX: f32, + angularY: f32, + angularZ: f32, + normal: f32, +} + +ForceFeedbackMotorInfo :: struct { + supportedAxes: FeedbackAxes, + location: Location, + locationId: u32, + maxSimultaneousEffects: u32, + isConstantEffectSupported: bool, + isRampEffectSupported: bool, + isSineWaveEffectSupported: bool, + isSquareWaveEffectSupported: bool, + isTriangleWaveEffectSupported: bool, + isSawtoothUpWaveEffectSupported: bool, + isSawtoothDownWaveEffectSupported: bool, + isSpringEffectSupported: bool, + isFrictionEffectSupported: bool, + isDamperEffectSupported: bool, + isInertiaEffectSupported: bool, +} + +ForceFeedbackParams :: struct { + kind: ForceFeedbackEffectKind, + using _: struct #raw_union { + constant: ForceFeedbackConstantParams, + ramp: ForceFeedbackRampParams, + sineWave: ForceFeedbackPeriodicParams, + squareWave: ForceFeedbackPeriodicParams, + triangleWave: ForceFeedbackPeriodicParams, + sawtoothUpWave: ForceFeedbackPeriodicParams, + sawtoothDownWave: ForceFeedbackPeriodicParams, + spring: ForceFeedbackConditionParams, + friction: ForceFeedbackConditionParams, + damper: ForceFeedbackConditionParams, + inertia: ForceFeedbackConditionParams, + } +} + +ForceFeedbackPeriodicParams :: struct { + envelope: ForceFeedbackEnvelope, + magnitude: ForceFeedbackMagnitude, + frequency: f32, + phase: f32, + bias: f32, +} + +ForceFeedbackRampParams :: struct { + envelope: ForceFeedbackEnvelope, + startMagnitude: ForceFeedbackMagnitude, + endMagnitude: ForceFeedbackMagnitude, +} + +GamepadInfo :: struct { + menuButtonLabel: Label, + viewButtonLabel: Label, + aButtonLabel: Label, + bButtonLabel: Label, + xButtonLabel: Label, + yButtonLabel: Label, + dpadUpLabel: Label, + dpadDownLabel: Label, + dpadLeftLabel: Label, + dpadRightLabel: Label, + leftShoulderButtonLabel: Label, + rightShoulderButtonLabel: Label, + leftThumbstickButtonLabel: Label, + rightThumbstickButtonLabel: Label, +} + +GamepadState :: struct { + buttons: GamepadButtons, + leftTrigger: f32, + rightTrigger: f32, + leftThumbstickX: f32, + leftThumbstickY: f32, + rightThumbstickX: f32, + rightThumbstickY: f32, +} + +HapticFeedbackMotorInfo :: struct { + mappedRumbleMotor: RumbleMotors, + location: Location, + locationId: u32, + waveformCount: u32, + waveformInfo: [^]HapticWaveformInfo `fmt:"v,waveformCount"`, +} + +HapticFeedbackParams :: struct { + waveformIndex: u32, + duration: u64, + intensity: f32, + playCount: u32, + repeatDelay: u64, +} + +HapticWaveformInfo :: struct { + usage: Usage, + isDurationSupported: bool, + isIntensitySupported: bool, + isRepeatSupported: bool, + isRepeatDelaySupported: bool, + defaultDuration: u64, +} + +KeyboardInfo :: struct { + kind: KeyboardKind, + layout: u32, + keyCount: u32, + functionKeyCount: u32, + maxSimultaneousKeys: u32, + platformType: u32, + platformSubtype: u32, + nativeLanguage: ^String, +} + +KeyState :: struct { + scanCode: u32, + codePoint: u32, + virtualKey: u8, + isDeadKey: bool, +} + +MotionInfo :: struct { + maxAcceleration: f32, + maxAngularVelocity: f32, + maxMagneticFieldStrength: f32, +} + +MotionState :: struct { + accelerationX: f32, + accelerationY: f32, + accelerationZ: f32, + angularVelocityX: f32, + angularVelocityY: f32, + angularVelocityZ: f32, + magneticFieldX: f32, + magneticFieldY: f32, + magneticFieldZ: f32, + orientationW: f32, + orientationX: f32, + orientationY: f32, + orientationZ: f32, + accelerometerAccuracy: MotionAccuracy, + gyroscopeAccuracy: MotionAccuracy, + magnetometerAccuracy: MotionAccuracy, + orientationAccuracy: MotionAccuracy, +} + +MouseInfo :: struct { + supportedButtons: MouseButtons, + sampleRate: u32, + sensorDpi: u32, + hasWheelX: bool, + hasWheelY: bool, +} + +MouseState :: struct { + buttons: MouseButtons, + positionX: i64, + positionY: i64, + wheelX: i64, + wheelY: i64, +} + +RacingWheelInfo :: struct { + menuButtonLabel: Label, + viewButtonLabel: Label, + previousGearButtonLabel: Label, + nextGearButtonLabel: Label, + dpadUpLabel: Label, + dpadDownLabel: Label, + dpadLeftLabel: Label, + dpadRightLabel: Label, + hasClutch: bool, + hasHandbrake: bool, + hasPatternShifter: bool, + minPatternShifterGear: i32, + maxPatternShifterGear: i32, + maxWheelAngle: f32, +} + +RacingWheelState :: struct { + buttons: RacingWheelButtons, + patternShifterGear: i32, + wheel: f32, + throttle: f32, + brake: f32, + clutch: f32, + handbrake: f32, +} + +RawDeviceItemCollectionInfo :: struct { + kind: RawDeviceItemCollectionKind, + childCount: u32, + siblingCount: u32, + usageCount: u32, + usages: [^]Usage, + parent: ^RawDeviceItemCollectionInfo, + firstSibling: ^RawDeviceItemCollectionInfo, + previousSibling: ^RawDeviceItemCollectionInfo, + nextSibling: ^RawDeviceItemCollectionInfo, + lastSibling: ^RawDeviceItemCollectionInfo, + firstChild: ^RawDeviceItemCollectionInfo, + lastChild: ^RawDeviceItemCollectionInfo, +} + +RawDeviceReportInfo :: struct { + kind: RawDeviceReportKind, + id: u32, + size: u32, + itemCount: u32, + items: [^]RawDeviceReportItemInfo, +} + +RawDeviceReportItemInfo :: struct { + bitOffset: u32, + bitSize: u32, + logicalMin: i64, + logicalMax: i64, + physicalMin: f64, + physicalMax: f64, + physicalUnits: RawDevicePhysicalUnitKind, + rawPhysicalUnits: u32, + rawPhysicalUnitsExponent: i32, + flags: RawDeviceReportItemFlags, + usageCount: u32, + usages: [^]Usage, + collection: ^RawDeviceItemCollectionInfo, + itemString: ^String, +} + +RumbleParams :: struct { + lowFrequency: f32, + highFrequency: f32, + leftTrigger: f32, + rightTrigger: f32, +} + +String :: struct { + sizeInBytes: u32, + codePointCount: u32, + data: [^]byte, +} + +TouchSensorInfo :: struct { + mappedInputKinds: Kind, + label: Label, + location: Location, + locationId: u32, + resolutionX: u64, + resolutionY: u64, + shape: TouchShape, + aspectRatio: f32, + orientation: f32, + physicalWidth: f32, + physicalHeight: f32, + maxPressure: f32, + maxProximity: f32, + maxTouchPoints: u32, +} + +TouchState :: struct { + touchId: u64, + sensorIndex: u32, + positionX: f32, + positionY: f32, + pressure: f32, + proximity: f32, + contactRectTop: f32, + contactRectLeft: f32, + contactRectRight: f32, + contactRectBottom: f32, +} + +UiNavigationInfo :: struct { + menuButtonLabel: Label, + viewButtonLabel: Label, + acceptButtonLabel: Label, + cancelButtonLabel: Label, + upButtonLabel: Label, + downButtonLabel: Label, + leftButtonLabel: Label, + rightButtonLabel: Label, + contextButton1Label: Label, + contextButton2Label: Label, + contextButton3Label: Label, + contextButton4Label: Label, + pageUpButtonLabel: Label, + pageDownButtonLabel: Label, + pageLeftButtonLabel: Label, + pageRightButtonLabel: Label, + scrollUpButtonLabel: Label, + scrollDownButtonLabel: Label, + scrollLeftButtonLabel: Label, + scrollRightButtonLabel: Label, + guideButtonLabel: Label, +} + +UiNavigationState :: struct { + buttons: UiNavigationButtons, +} + +Usage :: struct { + page: u16, + id: u16, +} + +Version :: struct { + major: u16, + minor: u16, + build: u16, + revision: u16, +} + +// COM Interfaces + +IUnknown :: windows.IUnknown +IUnknown_VTable :: windows.IUnknown_VTable +IID :: windows.GUID + +IGameInput_UUID_STRING :: "11BE2A7E-4254-445A-9C09-FFC40F006918" +IGameInput_UUID := &IID{0x11BE2A7E, 0x4254, 0x445A, {0x9C, 0x09, 0xFF, 0xC4, 0x0F, 0x00, 0x69, 0x18}} +IGameInput :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinput_vtable: ^IGameInput_VTable, +} +IGameInput_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetCurrentTimestamp: proc "system" (this: ^IGameInput) -> u64, + GetCurrentReading: proc "system" (this: ^IGameInput, inputKind: Kind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, + GetNextReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: Kind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, + GetPreviousReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: Kind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, + GetTemporalReading: proc "system" (this: ^IGameInput, timestamp: u64, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, + RegisterReadingCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: Kind, analogThreshold: f32, ctx: rawptr, callbackFunc: ReadingCallback, callbackToken: ^CallbackToken) -> HRESULT, + RegisterDeviceCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: Kind, statusFilter: DeviceStatus, enumerationKind: EnumerationKind, ctx: rawptr, callbackFunc: DeviceCallback, callbackToken: ^CallbackToken) -> HRESULT, + RegisterSystemButtonCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, buttonFilter: SystemButtons, ctx: rawptr, callbackFunc: SystemButtonCallback, callbackToken: ^CallbackToken) -> HRESULT, + RegisterKeyboardLayoutCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, ctx: rawptr, callbackFunc: KeyboardLayoutCallback, callbackToken: ^CallbackToken) -> HRESULT, + StopCallback: proc "system" (this: ^IGameInput, callbackToken: CallbackToken), + UnregisterCallback: proc "system" (this: ^IGameInput, callbackToken: CallbackToken, timeoutInMicroseconds: u64) -> bool, + CreateDispatcher: proc "system" (this: ^IGameInput, dispatcher: ^^IGameInputDispatcher) -> HRESULT, + CreateAggregateDevice: proc "system" (this: ^IGameInput, kind: Kind, device: ^^IGameInputDevice) -> HRESULT, + FindDeviceFromId: proc "system" (this: ^IGameInput, value: ^APP_LOCAL_DEVICE_ID, device: ^^IGameInputDevice) -> HRESULT, + FindDeviceFromObject: proc "system" (this: ^IGameInput, value: ^IUnknown, device: ^^IGameInputDevice) -> HRESULT, + FindDeviceFromPlatformHandle: proc "system" (this: ^IGameInput, value: HANDLE, device: ^^IGameInputDevice) -> HRESULT, + FindDeviceFromPlatformString: proc "system" (this: ^IGameInput, value: windows.LPCWSTR, device: ^^IGameInputDevice) -> HRESULT, + EnableOemDeviceSupport: proc "system" (this: ^IGameInput, vendorId: u16, productId: u16, interfaceNumber: u8, collectionNumber: u8) -> HRESULT, + SetFocusPolicy: proc "system" (this: ^IGameInput, policy: FocusPolicy), +} + +IGameInputReading_UUID_STRING :: "2156947A-E1FA-4DE0-A30B-D812931DBD8D" +IGameInputReading_UUID := &IID{0x2156947A, 0xE1FA, 0x4DE0, {0xA3, 0x0B, 0xD8, 0x12, 0x93, 0x1D, 0x0BD, 0x8D}} +IGameInputReading :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinputreading_vtable: ^IGameInputReading_VTable, +} +IGameInputReading_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetInputKind: proc "system" (this: ^IGameInputReading) -> Kind, + GetSequenceNumber: proc "system" (this: ^IGameInputReading) -> u64, + GetTimestamp: proc "system" (this: ^IGameInputReading) -> u64, + GetDevice: proc "system" (this: ^IGameInputReading, device: ^^IGameInputDevice), + GetRawReport: proc "system" (this: ^IGameInputReading, report: ^^IGameInputRawDeviceReport) -> bool, + GetControllerAxisCount: proc "system" (this: ^IGameInputReading) -> u32, + GetControllerAxisState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]f32) -> u32, + GetControllerButtonCount: proc "system" (this: ^IGameInputReading) -> u32, + GetControllerButtonState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]bool) -> u32, + GetControllerSwitchCount: proc "system" (this: ^IGameInputReading) -> u32, + GetControllerSwitchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]SwitchPosition) -> u32, + GetKeyCount: proc "system" (this: ^IGameInputReading) -> u32, + GetKeyState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]KeyState) -> u32, + GetMouseState: proc "system" (this: ^IGameInputReading, state: ^MouseState) -> bool, + GetTouchCount: proc "system" (this: ^IGameInputReading) -> u32, + GetTouchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]TouchState) -> u32, + GetMotionState: proc "system" (this: ^IGameInputReading, state: ^MotionState) -> bool, + GetArcadeStickState: proc "system" (this: ^IGameInputReading, state: ^ArcadeStickState) -> bool, + GetFlightStickState: proc "system" (this: ^IGameInputReading, state: ^FlightStickState) -> bool, + GetGamepadState: proc "system" (this: ^IGameInputReading, state: ^GamepadState) -> bool, + GetRacingWheelState: proc "system" (this: ^IGameInputReading, state: ^RacingWheelState) -> bool, + GetUiNavigationState: proc "system" (this: ^IGameInputReading, state: ^UiNavigationState) -> bool, +} + +IGameInputDevice_UUID_STRING :: "31DD86FB-4C1B-408A-868F-439B3CD47125" +IGameInputDevice_UUID := &IID{0x31DD86FB, 0x4C1B, 0x408A, {0x86, 0x8F, 0x43, 0x9B, 0x3C, 0xD4, 0x71, 0x25}} +IGameInputDevice :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinputdevice_vtable: ^IGameInputDevice_Vtable, +} +IGameInputDevice_Vtable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDeviceInfo: proc "system" (this: ^IGameInputDevice) -> ^DeviceInfo, + GetDeviceStatus: proc "system" (this: ^IGameInputDevice) -> DeviceStatus, + GetBatteryState: proc "system" (this: ^IGameInputDevice, state: ^BatteryState), + CreateForceFeedbackEffect: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^ForceFeedbackParams, effect: ^^IGameInputForceFeedbackEffect) -> HRESULT, + IsForceFeedbackMotorPoweredOn: proc "system" (this: ^IGameInputDevice, motorIndex: u32) -> bool, + SetForceFeedbackMotorGain: proc "system" (this: ^IGameInputDevice, motorIndex: u32, masterGain: f32), + SetHapticMotorState: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^HapticFeedbackParams) -> HRESULT, + SetRumbleState: proc "system" (this: ^IGameInputDevice, params: ^RumbleParams), + SetInputSynchronizationState: proc "system" (this: ^IGameInputDevice, enabled: bool), + SendInputSynchronizationHint: proc "system" (this: ^IGameInputDevice), + PowerOff: proc "system" (this: ^IGameInputDevice), + CreateRawDeviceReport: proc "system" (this: ^IGameInputDevice, reportId: u32, reportKind: RawDeviceReportKind, report: ^^IGameInputRawDeviceReport) -> HRESULT, + GetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, reportId: u32, report: ^^IGameInputRawDeviceReport) -> HRESULT, + SetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT, + SendRawDeviceOutput: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT, + SendRawDeviceOutputWithResponse: proc "system" (this: ^IGameInputDevice, requestReport: ^IGameInputRawDeviceReport, responseReport: ^^IGameInputRawDeviceReport) -> HRESULT, + ExecuteRawDeviceIoControl: proc "system" (this: ^IGameInputDevice, controlCode: u32, inputBufferSize: c.size_t, inputBuffer: rawptr, outputBufferSize: c.size_t, outputBuffer: rawptr, outputSize: ^c.size_t) -> HRESULT, + AcquireExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice, timeoutInMicroseconds: u64) -> bool, + ReleaseExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice), +} + +IGameInputDispatcher_UUID_STRING :: "415EED2E-98CB-42C2-8F28-B94601074E31" +IGameInputDispatcher_UUID := &IID{0x415EED2E, 0x98CB, 0x42C2, {0x8F, 0x28, 0xB9, 0x46, 0x01, 0x07, 0x4E, 0x31}} +IGameInputDispatcher :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinputdispatcher_vtable: ^IGameInputDispatcher_Vtable, +} +IGameInputDispatcher_Vtable :: struct { + using iunknown_vtable: IUnknown_VTable, + Dispatch: proc "system" (this: ^IGameInputDispatcher, quotaInMicroseconds: u64) -> bool, + OpenWaitHandle: proc "system" (this: ^IGameInputDispatcher, waitHandle: ^HANDLE) -> HRESULT, +} + +IGameInputForceFeedbackEffect_UUID_STRING :: "51BDA05E-F742-45D9-B085-9444AE48381D" +IGameInputForceFeedbackEffect_UUID := &IID{0x51BDA05E, 0xF742, 0x45D9, {0xB0, 0x85, 0x94, 0x44, 0xAE, 0x48, 0x38, 0x1D}} +IGameInputForceFeedbackEffect :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinputforcefeedbackeffect_vtable: ^IGameInputForceFeedbackEffect_Vtable, +} +IGameInputForceFeedbackEffect_Vtable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDevice: proc "system" (this: ^IGameInputForceFeedbackEffect, device: ^^IGameInputDevice), + GetMotorIndex: proc "system" (this: ^IGameInputForceFeedbackEffect) -> u32, + GetGain: proc "system" (this: ^IGameInputForceFeedbackEffect) -> f32, + SetGain: proc "system" (this: ^IGameInputForceFeedbackEffect, gain: f32), + GetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^ForceFeedbackParams), + SetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^ForceFeedbackParams) -> bool, + GetState: proc "system" (this: ^IGameInputForceFeedbackEffect) -> FeedbackEffectState, + SetState: proc "system" (this: ^IGameInputForceFeedbackEffect, state: FeedbackEffectState), +} + +IGameInputRawDeviceReport_UUID_STRING :: "61F08CF1-1FFC-40CA-A2B8-E1AB8BC5B6DC" +IGameInputRawDeviceReport_UUID := &IID{0x61F08CF1, 0x1FFC, 0x40CA, {0xA2, 0xB8, 0xE1, 0xAB, 0x8B, 0xC5, 0xB6, 0xDC}} +IGameInputRawDeviceReport :: struct #raw_union { + #subtype iunknown: IUnknown, + using igameinputrawdevicereport_vtable: ^IGameInputRawDeviceReport_Vtable, +} +IGameInputRawDeviceReport_Vtable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDevice: proc "system" (this: ^IGameInputRawDeviceReport, device: ^^IGameInputDevice), + GetReportInfo: proc "system" (this: ^IGameInputRawDeviceReport) -> ^RawDeviceReportInfo, + GetRawDataSize: proc "system" (this: ^IGameInputRawDeviceReport) -> c.size_t, + GetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> c.size_t, + SetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> bool, + GetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: ^u64) -> bool, + SetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: u64) -> bool, + ResetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32) -> bool, + ResetAllItems: proc "system" (this: ^IGameInputRawDeviceReport) -> bool, +} + +// Functions +HRESULT :: windows.HRESULT +HANDLE :: windows.HANDLE + +DEVICE_DISCONNECTED : HRESULT : -0x7C75FFFF +DEVICE_NOT_FOUND : HRESULT : -0x7C75FFFE +READING_NOT_FOUND : HRESULT : -0x7C75FFFD +REFERENCE_READING_TOO_OLD : HRESULT : -0x7C75FFFC +TIMESTAMP_OUT_OF_RANGE : HRESULT : -0x7C75FFFB +INSUFFICIENT_FORCE_FEEDBACK_RESOURCES : HRESULT : -0x7C75FFFA + +CallbackToken :: distinct u64 + +GAMEINPUT_CURRENT_CALLBACK_TOKEN_VALUE : CallbackToken : 0xFFFFFFFFFFFFFFFF +GAMEINPUT_INVALID_CALLBACK_TOKEN_VALUE : CallbackToken : 0x0000000000000000 + +@(default_calling_convention="system", link_prefix="GameInput") +foreign wgi { + Create :: proc(gameInput: ^^IGameInput) -> HRESULT --- +} + +DeviceCallback :: #type proc "system" (callbackToken: CallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: DeviceStatus, previousState: DeviceStatus) +GuideButtonCallback :: #type proc "system" (callbackToken: CallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, isPressed: bool) +SystemButtonCallback :: #type proc "system" (callbackToken: CallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: DeviceStatus, previousState: DeviceStatus) +ReadingCallback :: #type proc "system" (callbackToken: CallbackToken, ctx: rawptr, reading: ^IGameInputReading, hasOverrunOccured: bool) +KeyboardLayoutCallback :: #type proc "system" (callbackToken: CallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: DeviceStatus, previousState: DeviceStatus) + diff --git a/vendor/windows_game_input/windows_game_input.odin b/vendor/windows_game_input/windows_game_input.odin deleted file mode 100644 index 080591063..000000000 --- a/vendor/windows_game_input/windows_game_input.odin +++ /dev/null @@ -1,1129 +0,0 @@ -#+build windows -/* - Bindings for Windows Game Input GDK: - https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/input/overviews/input-overview - - Windows SDK 10.0.26100.0 is at least required to link with. -*/ -package windows_game_input - -foreign import wgi { - "system:gameinput.lib", -} - -import "core:c" -import "core:sys/windows" - -// Enums -GameInputArcadeStickButtons_Flag :: enum c.int { - Menu = 0, - View = 1, - Up = 2, - Down = 3, - Left = 4, - Right = 5, - Action1 = 6, - Action2 = 7, - Action3 = 8, - Action4 = 9, - Action5 = 10, - Action6 = 11, - Special1 = 12, - Special2 = 13 -} -GameInputArcadeStickButtons :: bit_set[GameInputArcadeStickButtons_Flag; c.int] - -GameInputBatteryStatus :: enum c.int { - Unknown = -1, - NotPresent = 0, - Discharging = 1, - Idle = 2, - Charging = 3 -} - -GameInputDeviceCapabilities_Flag :: enum c.int { - Audio = 0, - PluginModule = 1, - PowerOff = 2, - Synchronization = 3, - Wireless = 4 -} -GameInputDeviceCapabilities :: bit_set[GameInputDeviceCapabilities_Flag; c.int] - -GameInputDeviceFamily :: enum c.int { - Virtual = -1, - Aggregate = 0, - XboxOne = 1, - Xbox360 = 2, - Hid = 3, - I8042 = 4 -} - -GameInputDeviceStatus_Flag :: enum c.int { - Connected = 0, - InputEnabled = 1, - OutputEnabled = 2, - RawIoEnabled = 3, - AudioCapture = 4, - AudioRender = 5, - Synchronized = 6, - Wireless = 7, - UserIdle = 20, -} -GameInputDeviceStatus :: bit_set[GameInputDeviceStatus_Flag; c.int] - -GameInputEnumerationKind :: enum c.int { - NoEnumeration = 0, - AsyncEnumeration = 1, - BlockingEnumeration = 2 -} - -GameInputFeedbackAxes_Flag :: enum c.int { - LinearX = 0, - LinearY = 1, - LinearZ = 2, - AngularX = 3, - AngularY = 4, - AngularZ = 5, - Normal = 6 -} -GameInputFeedbackAxes :: bit_set[GameInputFeedbackAxes_Flag; c.int] - -GameInputFeedbackEffectState :: enum c.int { - Stopped = 0, - Running = 1, - Paused = 2 -} - -GameInputFlightStickButtons_Flag :: enum c.int { - None = 0, - Menu = 1, - View = 2, - FirePrimary = 3, - FireSecondary = 4 -} -GameInputFlightStickButtons :: bit_set[GameInputFlightStickButtons_Flag; c.int] - -GameInputFocusPolicy_Flag :: enum c.int { - DisableBackgroundInput = 0, - ExclusiveForegroundInput = 1, - DisableBackgroundGuideButton = 2, - ExclusiveForegroundGuideButton = 3, - DisableBackgroundShareButton = 4, - ExclusiveForegroundShareButton = 5 -} -GameInputFocusPolicy :: bit_set[GameInputFocusPolicy_Flag; c.int] - -GameInputForceFeedbackEffectKind :: enum c.int { - Constant = 0, - Ramp = 1, - SineWave = 2, - SquareWave = 3, - TriangleWave = 4, - SawtoothUpWave = 5, - SawtoothDownWave = 6, - Spring = 7, - Friction = 8, - Damper = 9, - Inertia = 10 -} - -GameInputGamepadButtons_Flag :: enum c.int { - Menu = 0, - View = 1, - A = 2, - B = 3, - X = 4, - Y = 5, - DPadUp = 6, - DPadDown = 7, - DPadLeft = 8, - DPadRight = 9, - LeftShoulder = 10, - RightShoulder = 11, - LeftThumbstick = 12, - RightThumbstick = 13 -} -GameInputGamepadButtons :: bit_set[GameInputGamepadButtons_Flag; c.int] - -GameInputKeyboardKind :: enum c.int { - UnknownKeyboard = -1, - AnsiKeyboard = 0, - IsoKeyboard = 1, - KsKeyboard = 2, - AbntKeyboard = 3, - JisKeyboard = 4 -} - -GameInputKind_Flag :: enum c.int { - RawDeviceReport = 0, - ControllerAxis = 1, - ControllerButton = 2, - ControllerSwitch = 3, - Keyboard = 4, - Mouse = 5, - Touch = 8, - Motion = 12, - ArcadeStick = 16, - FlightStick = 17, - Gamepad = 18, - RacingWheel = 19, - UiNavigation = 20 -} -GameInputKind :: bit_set[GameInputKind_Flag; c.int] -GameInputKind_Controller : GameInputKind : { .ControllerAxis, .ControllerButton, .ControllerSwitch } - -GameInputLabel :: enum c.int { - Unknown = -1, - None = 0, - XboxGuide = 1, - XboxBack = 2, - XboxStart = 3, - XboxMenu = 4, - XboxView = 5, - XboxA = 7, - XboxB = 8, - XboxX = 9, - XboxY = 10, - XboxDPadUp = 11, - XboxDPadDown = 12, - XboxDPadLeft = 13, - XboxDPadRight = 14, - XboxLeftShoulder = 15, - XboxLeftTrigger = 16, - XboxLeftStickButton = 17, - XboxRightShoulder = 18, - XboxRightTrigger = 19, - XboxRightStickButton = 20, - XboxPaddle1 = 21, - XboxPaddle2 = 22, - XboxPaddle3 = 23, - XboxPaddle4 = 24, - LetterA = 25, - LetterB = 26, - LetterC = 27, - LetterD = 28, - LetterE = 29, - LetterF = 30, - LetterG = 31, - LetterH = 32, - LetterI = 33, - LetterJ = 34, - LetterK = 35, - LetterL = 36, - LetterM = 37, - LetterN = 38, - LetterO = 39, - LetterP = 40, - LetterQ = 41, - LetterR = 42, - LetterS = 43, - LetterT = 44, - LetterU = 45, - LetterV = 46, - LetterW = 47, - LetterX = 48, - LetterY = 49, - LetterZ = 50, - Number0 = 51, - Number1 = 52, - Number2 = 53, - Number3 = 54, - Number4 = 55, - Number5 = 56, - Number6 = 57, - Number7 = 58, - Number8 = 59, - Number9 = 60, - ArrowUp = 61, - ArrowUpRight = 62, - ArrowRight = 63, - ArrowDownRight = 64, - ArrowDown = 65, - ArrowDownLLeft = 66, - ArrowLeft = 67, - ArrowUpLeft = 68, - ArrowUpDown = 69, - ArrowLeftRight = 70, - ArrowUpDownLeftRight = 71, - ArrowClockwise = 72, - ArrowCounterClockwise = 73, - ArrowReturn = 74, - IconBranding = 75, - IconHome = 76, - IconMenu = 77, - IconCross = 78, - IconCircle = 79, - IconSquare = 80, - IconTriangle = 81, - IconStar = 82, - IconDPadUp = 83, - IconDPadDown = 84, - IconDPadLeft = 85, - IconDPadRight = 86, - IconDialClockwise = 87, - IconDialCounterClockwise = 88, - IconSliderLeftRight = 89, - IconSliderUpDown = 90, - IconWheelUpDown = 91, - IconPlus = 92, - IconMinus = 93, - IconSuspension = 94, - Home = 95, - Guide = 96, - Mode = 97, - Select = 98, - Menu = 99, - View = 100, - Back = 101, - Start = 102, - Options = 103, - Share = 104, - Up = 105, - Down = 106, - Left = 107, - Right = 108, - LB = 109, - LT = 110, - LSB = 111, - L1 = 112, - L2 = 113, - L3 = 114, - RB = 115, - RT = 116, - RSB = 117, - R1 = 118, - R2 = 119, - R3 = 120, - P1 = 121, - P2 = 122, - P3 = 123, - P4 = 124 -} - -GameInputLocation :: enum c.int { - Unknown = -1, - Chassis = 0, - Display = 1, - Axis = 2, - Button = 3, - Switch = 4, - Key = 5, - TouchPad = 6 -} - -GameInputMotionAccuracy :: enum c.int { - AccuracyUnknown = -1, - Unavailable = 0, - Unreliable = 1, - Approximate = 2, - Accurate = 3 -} - -GameInputMouseButtons_Flag :: enum c.int { - LeftButton = 0, - RightButton = 1, - MiddleButton = 2, - Button4 = 3, - Button5 = 4, - WheelTiltLeft = 5, - WheelTiltRight = 6 -} -GameInputMouseButtons :: bit_set[GameInputMouseButtons_Flag; c.int] - -GameInputRacingWheelButtons_Flag :: enum c.int { - Menu = 0, - View = 1, - PreviousGear = 2, - NextGear = 3, - DpadUp = 4, - DpadDown = 5, - DpadLeft = 6, - DpadRight = 7 -} -GameInputRacingWheelButtons :: bit_set[GameInputRacingWheelButtons_Flag; c.int] - -GameInputRawDeviceItemCollectionKind :: enum c.int { - UnknownItemCollection = -1, - PhysicalItemCollection = 0, - ApplicationItemCollection = 1, - LogicalItemCollection = 2, - ReportItemCollection = 3, - NamedArrayItemCollection = 4, - UsageSwitchItemCollection = 5, - UsageModifierItemCollection = 6 -} - -GameInputRawDevicePhysicalUnitKind :: enum c.int { - Unknown = -1, - None = 0, - Time = 1, - Frequency = 2, - Length = 3, - Velocity = 4, - Acceleration = 5, - Mass = 6, - Momentum = 7, - Force = 8, - Pressure = 9, - Angle = 10, - AngularVelocity = 11, - AngularAcceleration = 12, - AngularMass = 13, - AngularMomentum = 14, - AngularTorque = 15, - ElectricCurrent = 16, - ElectricCharge = 17, - ElectricPotential = 18, - Energy = 19, - Power = 20, - Temperature = 21, - LuminousIntensity = 22, - LuminousFlux = 23, - Illuminance = 24 -} - -GameInputRawDeviceReportItemFlag :: enum c.int { - ConstantItem = 0, - ArrayItem = 1, - RelativeItem = 2, - WraparoundItem = 3, - NonlinearItem = 4, - StableItem = 5, - NullableItem = 6, - VolatileItem = 7, - BufferedItem = 8 -} -GameInputRawDeviceReportItemFlags :: bit_set[GameInputRawDeviceReportItemFlag; c.int] - -GameInputRawDeviceReportKind :: enum c.int { - InputReport = 0, - OutputReport = 1, - FeatureReport = 2 -} - -GameInputRumbleMotors_Flag :: enum c.int { - LowFrequency = 0, - HighFrequency = 1, - LeftTrigger = 2, - RightTrigger = 3 -} -GameInputRumbleMotors :: bit_set[GameInputRumbleMotors_Flag; c.int] - -GameInputSwitchKind :: enum c.int { - UnknownSwitchKind = -1, - GameInput2WaySwitch = 0, - GameInput4WaySwitch = 1, - GameInput8WaySwitch = 2 -} - -GameInputSwitchPosition :: enum c.int { - Center = 0, - Up = 1, - UpRight = 2, - Right = 3, - DownRight = 4, - Down = 5, - DownLeft = 6, - Left = 7, - UpLeft = 8 -} - -GameInputSystemButtons_Flag :: enum c.int { - Guide = 0, - Share = 1 -} -GameInputSystemButtons :: bit_set[GameInputSystemButtons_Flag; c.int] - -GameInputTouchShape :: enum c.int { - Unknown = -1, - Point = 0, - Shape1DLinear = 1, - Shape1DRadial = 2, - Shape1DIrregular = 3, - Shape2DRectangular = 4, - Shape2DElliptical = 5, - Shape2DIrregular = 6 -} - -GameInputUiNavigationButtons_Flag :: enum c.int { - Menu = 0, - View = 1, - Accept = 2, - Cancel = 3, - Up = 4, - Down = 5, - Left = 6, - Right = 7, - Context1 = 8, - Context2 = 9, - Context3 = 10, - Context4 = 11, - PageUp = 12, - PageDown = 13, - PageLeft = 14, - PageRight = 15, - ScrollUp = 16, - ScrollDown = 17, - ScrollLeft = 18, - ScrollRight = 19 -} -GameInputUiNavigationButtons :: bit_set[GameInputUiNavigationButtons_Flag; c.int] - -// Structs - -APP_LOCAL_DEVICE_ID :: distinct [32]byte - -GameInputArcadeStickInfo :: struct { - menuButtonLabel: GameInputLabel, - viewButtonLabel: GameInputLabel, - stickUpLabel: GameInputLabel, - stickDownLabel: GameInputLabel, - stickLeftLabel: GameInputLabel, - stickRightLabel: GameInputLabel, - actionButton1Label: GameInputLabel, - actionButton2Label: GameInputLabel, - actionButton3Label: GameInputLabel, - actionButton4Label: GameInputLabel, - actionButton5Label: GameInputLabel, - actionButton6Label: GameInputLabel, - specialButton1Label: GameInputLabel, - specialButton2Label: GameInputLabel, -} - -GameInputArcadeStickState :: struct { - buttons: GameInputArcadeStickButtons, -} - -GameInputBatteryState :: struct { - chargeRate: f32, - maxChargeRate: f32, - remainingCapacity: f32, - fullChargeCapacity: f32, - status: GameInputBatteryStatus, -} - -GameInputControllerAxisInfo :: struct { - mappedInputKinds: GameInputKind, - label: GameInputLabel, - isContinuous: bool, - isNonlinear: bool, - isQuantized: bool, - hasRestValue: bool, - restValue: f32, - resolution: u64, - legacyDInputIndex: u16, - legacyHidIndex: u16, - rawReportIndex: u32, - inputReport: ^GameInputRawDeviceReportInfo, - inputReportItem: ^GameInputRawDeviceReportItemInfo, -} - -GameInputControllerButtonInfo :: struct { - mappedInputKinds: GameInputKind, - label: GameInputLabel, - legacyDInputIndex: u16, - legacyHidIndex: u16, - rawReportIndex: u32, - inputReport: ^GameInputRawDeviceReportInfo, - inputReportItem: ^GameInputRawDeviceReportItemInfo, -} - -GameInputControllerSwitchInfo :: struct { - mappedInputKinds: GameInputKind, - label: GameInputLabel, - positionLabels: [9]GameInputLabel, - kind: GameInputSwitchKind, - legacyDInputIndex: u16, - legacyHidIndex: u16, - rawReportIndex: u32, - inputReport: ^GameInputRawDeviceReportInfo, - inputReportItem: ^GameInputRawDeviceReportItemInfo, -} - -GameInputDeviceInfo :: struct { - infoSize: u32, - vendorId: u16, - productId: u16, - revisionNumber: u16, - interfaceNumber: u8, - collectionNumber: u8, - usage: GameInputUsage, - hardwareVersion: GameInputVersion, - firmwareVersion: GameInputVersion, - deviceId: APP_LOCAL_DEVICE_ID, - deviceRootId: APP_LOCAL_DEVICE_ID, - deviceFamily: GameInputDeviceFamily, - capabilities: GameInputDeviceCapabilities, - supportedInput: GameInputKind, - supportedRumbleMotors: GameInputRumbleMotors, - inputReportCount: u32, - outputReportCount: u32, - featureReportCount: u32, - controllerAxisCount: u32, - controllerButtonCount: u32, - controllerSwitchCount: u32, - touchPointCount: u32, - touchSensorCount: u32, - forceFeedbackMotorCount: u32, - hapticFeedbackMotorCount: u32, - deviceStringCount: u32, - deviceDescriptorSize: u32, - inputReportInfo: ^GameInputRawDeviceReportInfo, - outputReportInfo: ^GameInputRawDeviceReportInfo, - featureReportInfo: ^GameInputRawDeviceReportInfo, - controllerAxisInfo: ^GameInputControllerAxisInfo, - controllerButtonInfo: ^GameInputControllerButtonInfo, - controllerSwitchInfo: ^GameInputControllerSwitchInfo, - keyboardInfo: ^GameInputKeyboardInfo, - mouseInfo: ^GameInputMouseInfo, - touchSensorInfo: ^GameInputTouchSensorInfo, - motionInfo: ^GameInputMotionInfo, - arcadeStickInfo: ^GameInputArcadeStickInfo, - flightStickInfo: ^GameInputFlightStickInfo, - gamepadInfo: ^GameInputGamepadInfo, - racingWheelInfo: ^GameInputRacingWheelInfo, - uiNavigationInfo: ^GameInputUiNavigationInfo, - forceFeedbackMotorInfo: ^GameInputForceFeedbackMotorInfo, - hapticFeedbackMotorInfo: ^GameInputHapticFeedbackMotorInfo, - displayName: ^GameInputString, - deviceStrings: ^GameInputString, - deviceDescriptorData: rawptr, -} - -GameInputFlightStickInfo :: struct { - menuButtonLabel: GameInputLabel, - viewButtonLabel: GameInputLabel, - firePrimaryButtonLabel: GameInputLabel, - fireSecondaryButtonLabel: GameInputLabel, - hatSwitchKind: GameInputSwitchKind, -} - -GameInputFlightStickState :: struct { - buttons: GameInputFlightStickButtons, - hatSwitch: GameInputSwitchPosition, - roll: f32, - pitch: f32, - yaw: f32, - throttle: f32, -} - -GameInputForceFeedbackConditionParams :: struct { - magnitude: GameInputForceFeedbackMagnitude, - positiveCoefficient: f32, - negativeCoefficient: f32, - maxPositiveMagnitude: f32, - maxNegativeMagnitude: f32, - deadZone: f32, - bias: f32, -} - -GameInputForceFeedbackConstantParams :: struct { - envelope: GameInputForceFeedbackEnvelope, - magnitude: GameInputForceFeedbackMagnitude, -} - -GameInputForceFeedbackEnvelope :: struct { - attackDuration: u64, - sustainDuration: u64, - releaseDuration: u64, - attackGain: f32, - sustainGain: f32, - releaseGain: f32, - playCount: u32, - repeatDelay: u64, -} - -GameInputForceFeedbackMagnitude :: struct { - linearX: f32, - linearY: f32, - linearZ: f32, - angularX: f32, - angularY: f32, - angularZ: f32, - normal: f32, -} - -GameInputForceFeedbackMotorInfo :: struct { - supportedAxes: GameInputFeedbackAxes, - location: GameInputLocation, - locationId: u32, - maxSimultaneousEffects: u32, - isConstantEffectSupported: bool, - isRampEffectSupported: bool, - isSineWaveEffectSupported: bool, - isSquareWaveEffectSupported: bool, - isTriangleWaveEffectSupported: bool, - isSawtoothUpWaveEffectSupported: bool, - isSawtoothDownWaveEffectSupported: bool, - isSpringEffectSupported: bool, - isFrictionEffectSupported: bool, - isDamperEffectSupported: bool, - isInertiaEffectSupported: bool, -} - -GameInputForceFeedbackParams :: struct { - kind: GameInputForceFeedbackEffectKind, - using _: struct #raw_union { - constant: GameInputForceFeedbackConstantParams, - ramp: GameInputForceFeedbackRampParams, - sineWave: GameInputForceFeedbackPeriodicParams, - squareWave: GameInputForceFeedbackPeriodicParams, - triangleWave: GameInputForceFeedbackPeriodicParams, - sawtoothUpWave: GameInputForceFeedbackPeriodicParams, - sawtoothDownWave: GameInputForceFeedbackPeriodicParams, - spring: GameInputForceFeedbackConditionParams, - friction: GameInputForceFeedbackConditionParams, - damper: GameInputForceFeedbackConditionParams, - inertia: GameInputForceFeedbackConditionParams, - } -} - -GameInputForceFeedbackPeriodicParams :: struct { - envelope: GameInputForceFeedbackEnvelope, - magnitude: GameInputForceFeedbackMagnitude, - frequency: f32, - phase: f32, - bias: f32, -} - -GameInputForceFeedbackRampParams :: struct { - envelope: GameInputForceFeedbackEnvelope, - startMagnitude: GameInputForceFeedbackMagnitude, - endMagnitude: GameInputForceFeedbackMagnitude, -} - -GameInputGamepadInfo :: struct { - menuButtonLabel: GameInputLabel, - viewButtonLabel: GameInputLabel, - aButtonLabel: GameInputLabel, - bButtonLabel: GameInputLabel, - xButtonLabel: GameInputLabel, - yButtonLabel: GameInputLabel, - dpadUpLabel: GameInputLabel, - dpadDownLabel: GameInputLabel, - dpadLeftLabel: GameInputLabel, - dpadRightLabel: GameInputLabel, - leftShoulderButtonLabel: GameInputLabel, - rightShoulderButtonLabel: GameInputLabel, - leftThumbstickButtonLabel: GameInputLabel, - rightThumbstickButtonLabel: GameInputLabel, -} - -GameInputGamepadState :: struct { - buttons: GameInputGamepadButtons, - leftTrigger: f32, - rightTrigger: f32, - leftThumbstickX: f32, - leftThumbstickY: f32, - rightThumbstickX: f32, - rightThumbstickY: f32, -} - -GameInputHapticFeedbackMotorInfo :: struct { - mappedRumbleMotor: GameInputRumbleMotors, - location: GameInputLocation, - locationId: u32, - waveformCount: u32, - waveformInfo: [^]GameInputHapticWaveformInfo, -} - -GameInputHapticFeedbackParams :: struct { - waveformIndex: u32, - duration: u64, - intensity: f32, - playCount: u32, - repeatDelay: u64, -} - -GameInputHapticWaveformInfo :: struct { - usage: GameInputUsage, - isDurationSupported: bool, - isIntensitySupported: bool, - isRepeatSupported: bool, - isRepeatDelaySupported: bool, - defaultDuration: u64, -} - -GameInputKeyboardInfo :: struct { - kind: GameInputKeyboardKind, - layout: u32, - keyCount: u32, - functionKeyCount: u32, - maxSimultaneousKeys: u32, - platformType: u32, - platformSubtype: u32, - nativeLanguage: ^GameInputString, -} - -GameInputKeyState :: struct { - scanCode: u32, - codePoint: u32, - virtualKey: u8, - isDeadKey: bool, -} - -GameInputMotionInfo :: struct { - maxAcceleration: f32, - maxAngularVelocity: f32, - maxMagneticFieldStrength: f32, -} - -GameInputMotionState :: struct { - accelerationX: f32, - accelerationY: f32, - accelerationZ: f32, - angularVelocityX: f32, - angularVelocityY: f32, - angularVelocityZ: f32, - magneticFieldX: f32, - magneticFieldY: f32, - magneticFieldZ: f32, - orientationW: f32, - orientationX: f32, - orientationY: f32, - orientationZ: f32, - accelerometerAccuracy: GameInputMotionAccuracy, - gyroscopeAccuracy: GameInputMotionAccuracy, - magnetometerAccuracy: GameInputMotionAccuracy, - orientationAccuracy: GameInputMotionAccuracy, -} - -GameInputMouseInfo :: struct { - supportedButtons: GameInputMouseButtons, - sampleRate: u32, - sensorDpi: u32, - hasWheelX: bool, - hasWheelY: bool, -} - -GameInputMouseState :: struct { - buttons: GameInputMouseButtons, - positionX: i64, - positionY: i64, - wheelX: i64, - wheelY: i64, -} - -GameInputRacingWheelInfo :: struct { - menuButtonLabel: GameInputLabel, - viewButtonLabel: GameInputLabel, - previousGearButtonLabel: GameInputLabel, - nextGearButtonLabel: GameInputLabel, - dpadUpLabel: GameInputLabel, - dpadDownLabel: GameInputLabel, - dpadLeftLabel: GameInputLabel, - dpadRightLabel: GameInputLabel, - hasClutch: bool, - hasHandbrake: bool, - hasPatternShifter: bool, - minPatternShifterGear: i32, - maxPatternShifterGear: i32, - maxWheelAngle: f32, -} - -GameInputRacingWheelState :: struct { - buttons: GameInputRacingWheelButtons, - patternShifterGear: i32, - wheel: f32, - throttle: f32, - brake: f32, - clutch: f32, - handbrake: f32, -} - -GameInputRawDeviceItemCollectionInfo :: struct { - kind: GameInputRawDeviceItemCollectionKind, - childCount: u32, - siblingCount: u32, - usageCount: u32, - usages: [^]GameInputUsage, - parent: ^GameInputRawDeviceItemCollectionInfo, - firstSibling: ^GameInputRawDeviceItemCollectionInfo, - previousSibling: ^GameInputRawDeviceItemCollectionInfo, - nextSibling: ^GameInputRawDeviceItemCollectionInfo, - lastSibling: ^GameInputRawDeviceItemCollectionInfo, - firstChild: ^GameInputRawDeviceItemCollectionInfo, - lastChild: ^GameInputRawDeviceItemCollectionInfo, -} - -GameInputRawDeviceReportInfo :: struct { - kind: GameInputRawDeviceReportKind, - id: u32, - size: u32, - itemCount: u32, - items: [^]GameInputRawDeviceReportItemInfo, -} - -GameInputRawDeviceReportItemInfo :: struct { - bitOffset: u32, - bitSize: u32, - logicalMin: i64, - logicalMax: i64, - physicalMin: f64, - physicalMax: f64, - physicalUnits: GameInputRawDevicePhysicalUnitKind, - rawPhysicalUnits: u32, - rawPhysicalUnitsExponent: i32, - flags: GameInputRawDeviceReportItemFlags, - usageCount: u32, - usages: [^]GameInputUsage, - collection: ^GameInputRawDeviceItemCollectionInfo, - itemString: ^GameInputString, -} - -GameInputRumbleParams :: struct { - lowFrequency: f32, - highFrequency: f32, - leftTrigger: f32, - rightTrigger: f32, -} - -GameInputString :: struct { - sizeInBytes: u32, - codePointCount: u32, - data: [^]byte, -} - -GameInputTouchSensorInfo :: struct { - mappedInputKinds: GameInputKind, - label: GameInputLabel, - location: GameInputLocation, - locationId: u32, - resolutionX: u64, - resolutionY: u64, - shape: GameInputTouchShape, - aspectRatio: f32, - orientation: f32, - physicalWidth: f32, - physicalHeight: f32, - maxPressure: f32, - maxProximity: f32, - maxTouchPoints: u32, -} - -GameInputTouchState :: struct { - touchId: u64, - sensorIndex: u32, - positionX: f32, - positionY: f32, - pressure: f32, - proximity: f32, - contactRectTop: f32, - contactRectLeft: f32, - contactRectRight: f32, - contactRectBottom: f32, -} - -GameInputUiNavigationInfo :: struct { - menuButtonLabel: GameInputLabel, - viewButtonLabel: GameInputLabel, - acceptButtonLabel: GameInputLabel, - cancelButtonLabel: GameInputLabel, - upButtonLabel: GameInputLabel, - downButtonLabel: GameInputLabel, - leftButtonLabel: GameInputLabel, - rightButtonLabel: GameInputLabel, - contextButton1Label: GameInputLabel, - contextButton2Label: GameInputLabel, - contextButton3Label: GameInputLabel, - contextButton4Label: GameInputLabel, - pageUpButtonLabel: GameInputLabel, - pageDownButtonLabel: GameInputLabel, - pageLeftButtonLabel: GameInputLabel, - pageRightButtonLabel: GameInputLabel, - scrollUpButtonLabel: GameInputLabel, - scrollDownButtonLabel: GameInputLabel, - scrollLeftButtonLabel: GameInputLabel, - scrollRightButtonLabel: GameInputLabel, - guideButtonLabel: GameInputLabel, -} - -GameInputUiNavigationState :: struct { - buttons: GameInputUiNavigationButtons, -} - -GameInputUsage :: struct { - page: u16, - id: u16, -} - -GameInputVersion :: struct { - major: u16, - minor: u16, - build: u16, - revision: u16, -} - -// COM Interfaces - -IUnknown :: windows.IUnknown -IUnknown_VTable :: windows.IUnknown_VTable -IID :: windows.GUID - -IGameInput_UUID_STRING :: "11BE2A7E-4254-445A-9C09-FFC40F006918" -IGameInput_UUID := &IID{0x11BE2A7E, 0x4254, 0x445A, {0x9C, 0x09, 0xFF, 0xC4, 0x0F, 0x00, 0x69, 0x18}} -IGameInput :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinput_vtable: ^IGameInput_VTable, -} -IGameInput_VTable :: struct { - using iunknown_vtable: IUnknown_VTable, - GetCurrentTimestamp: proc "system" (this: ^IGameInput) -> u64, - GetCurrentReading: proc "system" (this: ^IGameInput, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, - GetNextReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, - GetPreviousReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, - GetTemporalReading: proc "system" (this: ^IGameInput, timestamp: u64, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT, - RegisterReadingCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: GameInputKind, analogThreshold: f32, ctx: rawptr, callbackFunc: GameInputReadingCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT, - RegisterDeviceCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: GameInputKind, statusFilter: GameInputDeviceStatus, enumerationKind: GameInputEnumerationKind, ctx: rawptr, callbackFunc: GameInputDeviceCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT, - RegisterSystemButtonCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, buttonFilter: GameInputSystemButtons, ctx: rawptr, callbackFunc: GameInputSystemButtonCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT, - RegisterKeyboardLayoutCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, ctx: rawptr, callbackFunc: GameInputKeyboardLayoutCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT, - StopCallback: proc "system" (this: ^IGameInput, callbackToken: GameInputCallbackToken), - UnregisterCallback: proc "system" (this: ^IGameInput, callbackToken: GameInputCallbackToken, timeoutInMicroseconds: u64) -> bool, - CreateDispatcher: proc "system" (this: ^IGameInput, dispatcher: ^^IGameInputDispatcher) -> HRESULT, - CreateAggregateDevice: proc "system" (this: ^IGameInput, kind: GameInputKind, device: ^^IGameInputDevice) -> HRESULT, - FindDeviceFromId: proc "system" (this: ^IGameInput, value: ^APP_LOCAL_DEVICE_ID, device: ^^IGameInputDevice) -> HRESULT, - FindDeviceFromObject: proc "system" (this: ^IGameInput, value: ^IUnknown, device: ^^IGameInputDevice) -> HRESULT, - FindDeviceFromPlatformHandle: proc "system" (this: ^IGameInput, value: HANDLE, device: ^^IGameInputDevice) -> HRESULT, - FindDeviceFromPlatformString: proc "system" (this: ^IGameInput, value: windows.LPCWSTR, device: ^^IGameInputDevice) -> HRESULT, - EnableOemDeviceSupport: proc "system" (this: ^IGameInput, vendorId: u16, productId: u16, interfaceNumber: u8, collectionNumber: u8) -> HRESULT, - SetFocusPolicy: proc "system" (this: ^IGameInput, policy: GameInputFocusPolicy), -} - -IGameInputReading_UUID_STRING :: "2156947A-E1FA-4DE0-A30B-D812931DBD8D" -IGameInputReading_UUID := &IID{0x2156947A, 0xE1FA, 0x4DE0, {0xA3, 0x0B, 0xD8, 0x12, 0x93, 0x1D, 0x0BD, 0x8D}} -IGameInputReading :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinputreading_vtable: ^IGameInputReading_VTable, -} -IGameInputReading_VTable :: struct { - using iunknown_vtable: IUnknown_VTable, - GetInputKind: proc "system" (this: ^IGameInputReading) -> GameInputKind, - GetSequenceNumber: proc "system" (this: ^IGameInputReading) -> u64, - GetTimestamp: proc "system" (this: ^IGameInputReading) -> u64, - GetDevice: proc "system" (this: ^IGameInputReading, device: ^^IGameInputDevice), - GetRawReport: proc "system" (this: ^IGameInputReading, report: ^^IGameInputRawDeviceReport) -> bool, - GetControllerAxisCount: proc "system" (this: ^IGameInputReading) -> u32, - GetControllerAxisState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]f32) -> u32, - GetControllerButtonCount: proc "system" (this: ^IGameInputReading) -> u32, - GetControllerButtonState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]bool) -> u32, - GetControllerSwitchCount: proc "system" (this: ^IGameInputReading) -> u32, - GetControllerSwitchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputSwitchPosition) -> u32, - GetKeyCount: proc "system" (this: ^IGameInputReading) -> u32, - GetKeyState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputKeyState) -> u32, - GetMouseState: proc "system" (this: ^IGameInputReading, state: ^GameInputMouseState) -> bool, - GetTouchCount: proc "system" (this: ^IGameInputReading) -> u32, - GetTouchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputTouchState) -> u32, - GetMotionState: proc "system" (this: ^IGameInputReading, state: ^GameInputMotionState) -> bool, - GetArcadeStickState: proc "system" (this: ^IGameInputReading, state: ^GameInputArcadeStickState) -> bool, - GetFlightStickState: proc "system" (this: ^IGameInputReading, state: ^GameInputFlightStickState) -> bool, - GetGamepadState: proc "system" (this: ^IGameInputReading, state: ^GameInputGamepadState) -> bool, - GetRacingWheelState: proc "system" (this: ^IGameInputReading, state: ^GameInputRacingWheelState) -> bool, - GetUiNavigationState: proc "system" (this: ^IGameInputReading, state: ^GameInputUiNavigationState) -> bool, -} - -IGameInputDevice_UUID_STRING :: "31DD86FB-4C1B-408A-868F-439B3CD47125" -IGameInputDevice_UUID := &IID{0x31DD86FB, 0x4C1B, 0x408A, {0x86, 0x8F, 0x43, 0x9B, 0x3C, 0xD4, 0x71, 0x25}} -IGameInputDevice :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinputdevice_vtable: ^IGameInputDevice_Vtable, -} -IGameInputDevice_Vtable :: struct { - using iunknown_vtable: IUnknown_VTable, - GetDeviceInfo: proc "system" (this: ^IGameInputDevice) -> ^GameInputDeviceInfo, - GetDeviceStatus: proc "system" (this: ^IGameInputDevice) -> GameInputDeviceStatus, - GetBatteryState: proc "system" (this: ^IGameInputDevice, state: ^GameInputBatteryState), - CreateForceFeedbackEffect: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^GameInputForceFeedbackParams, effect: ^^IGameInputForceFeedbackEffect) -> HRESULT, - IsForceFeedbackMotorPoweredOn: proc "system" (this: ^IGameInputDevice, motorIndex: u32) -> bool, - SetForceFeedbackMotorGain: proc "system" (this: ^IGameInputDevice, motorIndex: u32, masterGain: f32), - SetHapticMotorState: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^GameInputHapticFeedbackParams) -> HRESULT, - SetRumbleState: proc "system" (this: ^IGameInputDevice, params: ^GameInputRumbleParams), - SetInputSynchronizationState: proc "system" (this: ^IGameInputDevice, enabled: bool), - SendInputSynchronizationHint: proc "system" (this: ^IGameInputDevice), - PowerOff: proc "system" (this: ^IGameInputDevice), - CreateRawDeviceReport: proc "system" (this: ^IGameInputDevice, reportId: u32, reportKind: GameInputRawDeviceReportKind, report: ^^IGameInputRawDeviceReport) -> HRESULT, - GetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, reportId: u32, report: ^^IGameInputRawDeviceReport) -> HRESULT, - SetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT, - SendRawDeviceOutput: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT, - SendRawDeviceOutputWithResponse: proc "system" (this: ^IGameInputDevice, requestReport: ^IGameInputRawDeviceReport, responseReport: ^^IGameInputRawDeviceReport) -> HRESULT, - ExecuteRawDeviceIoControl: proc "system" (this: ^IGameInputDevice, controlCode: u32, inputBufferSize: c.size_t, inputBuffer: rawptr, outputBufferSize: c.size_t, outputBuffer: rawptr, outputSize: ^c.size_t) -> HRESULT, - AcquireExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice, timeoutInMicroseconds: u64) -> bool, - ReleaseExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice), -} - -IGameInputDispatcher_UUID_STRING :: "415EED2E-98CB-42C2-8F28-B94601074E31" -IGameInputDispatcher_UUID := &IID{0x415EED2E, 0x98CB, 0x42C2, {0x8F, 0x28, 0xB9, 0x46, 0x01, 0x07, 0x4E, 0x31}} -IGameInputDispatcher :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinputdispatcher_vtable: ^IGameInputDispatcher_Vtable, -} -IGameInputDispatcher_Vtable :: struct { - using iunknown_vtable: IUnknown_VTable, - Dispatch: proc "system" (this: ^IGameInputDispatcher, quotaInMicroseconds: u64) -> bool, - OpenWaitHandle: proc "system" (this: ^IGameInputDispatcher, waitHandle: ^HANDLE) -> HRESULT, -} - -IGameInputForceFeedbackEffect_UUID_STRING :: "51BDA05E-F742-45D9-B085-9444AE48381D" -IGameInputForceFeedbackEffect_UUID := &IID{0x51BDA05E, 0xF742, 0x45D9, {0xB0, 0x85, 0x94, 0x44, 0xAE, 0x48, 0x38, 0x1D}} -IGameInputForceFeedbackEffect :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinputforcefeedbackeffect_vtable: ^IGameInputForceFeedbackEffect_Vtable, -} -IGameInputForceFeedbackEffect_Vtable :: struct { - using iunknown_vtable: IUnknown_VTable, - GetDevice: proc "system" (this: ^IGameInputForceFeedbackEffect, device: ^^IGameInputDevice), - GetMotorIndex: proc "system" (this: ^IGameInputForceFeedbackEffect) -> u32, - GetGain: proc "system" (this: ^IGameInputForceFeedbackEffect) -> f32, - SetGain: proc "system" (this: ^IGameInputForceFeedbackEffect, gain: f32), - GetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^GameInputForceFeedbackParams), - SetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^GameInputForceFeedbackParams) -> bool, - GetState: proc "system" (this: ^IGameInputForceFeedbackEffect) -> GameInputFeedbackEffectState, - SetState: proc "system" (this: ^IGameInputForceFeedbackEffect, state: GameInputFeedbackEffectState), -} - -IGameInputRawDeviceReport_UUID_STRING :: "61F08CF1-1FFC-40CA-A2B8-E1AB8BC5B6DC" -IGameInputRawDeviceReport_UUID := &IID{0x61F08CF1, 0x1FFC, 0x40CA, {0xA2, 0xB8, 0xE1, 0xAB, 0x8B, 0xC5, 0xB6, 0xDC}} -IGameInputRawDeviceReport :: struct #raw_union { - #subtype iunknown: IUnknown, - using igameinputrawdevicereport_vtable: ^IGameInputRawDeviceReport_Vtable, -} -IGameInputRawDeviceReport_Vtable :: struct { - using iunknown_vtable: IUnknown_VTable, - GetDevice: proc "system" (this: ^IGameInputRawDeviceReport, device: ^^IGameInputDevice), - GetReportInfo: proc "system" (this: ^IGameInputRawDeviceReport) -> ^GameInputRawDeviceReportInfo, - GetRawDataSize: proc "system" (this: ^IGameInputRawDeviceReport) -> c.size_t, - GetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> c.size_t, - SetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> bool, - GetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: ^u64) -> bool, - SetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: u64) -> bool, - ResetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32) -> bool, - ResetAllItems: proc "system" (this: ^IGameInputRawDeviceReport) -> bool, -} - -// Functions -HRESULT :: windows.HRESULT -HANDLE :: windows.HANDLE - -DEVICE_DISCONNECTED : HRESULT : -0x7C75FFFF -DEVICE_NOT_FOUND : HRESULT : -0x7C75FFFE -READING_NOT_FOUND : HRESULT : -0x7C75FFFD -REFERENCE_READING_TOO_OLD : HRESULT : -0x7C75FFFC -TIMESTAMP_OUT_OF_RANGE : HRESULT : -0x7C75FFFB -INSUFFICIENT_FORCE_FEEDBACK_RESOURCES : HRESULT : -0x7C75FFFA - -GameInputCallbackToken :: distinct u64 - -GAMEINPUT_CURRENT_CALLBACK_TOKEN_VALUE : GameInputCallbackToken : 0xFFFFFFFFFFFFFFFF -GAMEINPUT_INVALID_CALLBACK_TOKEN_VALUE : GameInputCallbackToken : 0x0000000000000000 - -@(default_calling_convention="system") -foreign wgi { - GameInputCreate :: proc(gameInput: ^^IGameInput) -> HRESULT --- -} - -GameInputDeviceCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus) -GameInputGuideButtonCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, isPressed: bool) -GameInputSystemButtonCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus) -GameInputReadingCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, reading: ^IGameInputReading, hasOverrunOccured: bool) -GameInputKeyboardLayoutCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus) - |