ebiten/internal/gamepad/api_hid_darwin.go

133 lines
5.9 KiB
Go
Raw Normal View History

// Copyright 2022 The Ebitengine Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package gamepad
import (
"unsafe"
"github.com/ebitengine/purego"
)
const kIOReturnSuccess = 0
const kIOHIDOptionsTypeNone _IOOptionBits = 0
const (
kIOHIDElementTypeInput_Misc = 1
kIOHIDElementTypeInput_Button = 2
kIOHIDElementTypeInput_Axis = 3
)
const (
kHIDPage_GenericDesktop = 0x1
kHIDPage_Simulation = 0x2
kHIDPage_Button = 0x9
kHIDPage_Consumer = 0x0C
)
const (
kHIDUsage_GD_Joystick = 0x4
kHIDUsage_GD_GamePad = 0x5
kHIDUsage_GD_MultiAxisController = 0x8
kHIDUsage_GD_X = 0x30
kHIDUsage_GD_Y = 0x31
kHIDUsage_GD_Z = 0x32
kHIDUsage_GD_Rx = 0x33
kHIDUsage_GD_Ry = 0x34
kHIDUsage_GD_Rz = 0x35
kHIDUsage_GD_Slider = 0x36
kHIDUsage_GD_Dial = 0x37
kHIDUsage_GD_Wheel = 0x38
kHIDUsage_GD_Hatswitch = 0x39
kHIDUsage_GD_Start = 0x3D
kHIDUsage_GD_Select = 0x3E
kHIDUsage_GD_SystemMainMenu = 0x85
kHIDUsage_GD_DPadUp = 0x90
kHIDUsage_GD_DPadDown = 0x91
kHIDUsage_GD_DPadRight = 0x92
kHIDUsage_GD_DPadLeft = 0x93
kHIDUsage_Sim_Rudder = 0xBA
kHIDUsage_Sim_Throttle = 0xBB
kHIDUsage_Sim_Accelerator = 0xC4
kHIDUsage_Sim_Brake = 0xC5
kHIDUsage_Sim_Steering = 0xC8
)
var (
kIOHIDVendorIDKey = []byte("VendorID\x00")
kIOHIDProductIDKey = []byte("ProductID\x00")
kIOHIDVersionNumberKey = []byte("VersionNumber\x00")
kIOHIDProductKey = []byte("Product\x00")
kIOHIDDeviceUsagePageKey = []byte("DeviceUsagePage\x00")
kIOHIDDeviceUsageKey = []byte("DeviceUsage\x00")
)
2023-02-02 14:31:56 +01:00
type (
_IOOptionBits uint32
_IOHIDManagerRef uintptr
_IOHIDDeviceRef uintptr
_IOHIDElementRef uintptr
_IOHIDValueRef uintptr
_IOReturn int32
_IOHIDElementType uint32
)
type _IOHIDDeviceCallback func(context unsafe.Pointer, result _IOReturn, sender unsafe.Pointer, device _IOHIDDeviceRef)
func initializeIOKit() error {
iokit, err := purego.Dlopen("/System/Library/Frameworks/IOKit.framework/IOKit", purego.RTLD_LAZY|purego.RTLD_GLOBAL)
if err != nil {
return err
}
purego.RegisterLibFunc(&_IOHIDElementGetTypeID, iokit, "IOHIDElementGetTypeID")
purego.RegisterLibFunc(&_IOHIDManagerCreate, iokit, "IOHIDManagerCreate")
purego.RegisterLibFunc(&_IOHIDDeviceGetProperty, iokit, "IOHIDDeviceGetProperty")
purego.RegisterLibFunc(&_IOHIDManagerOpen, iokit, "IOHIDManagerOpen")
purego.RegisterLibFunc(&_IOHIDManagerSetDeviceMatchingMultiple, iokit, "IOHIDManagerSetDeviceMatchingMultiple")
purego.RegisterLibFunc(&_IOHIDManagerRegisterDeviceMatchingCallback, iokit, "IOHIDManagerRegisterDeviceMatchingCallback")
purego.RegisterLibFunc(&_IOHIDManagerRegisterDeviceRemovalCallback, iokit, "IOHIDManagerRegisterDeviceRemovalCallback")
purego.RegisterLibFunc(&_IOHIDManagerScheduleWithRunLoop, iokit, "IOHIDManagerScheduleWithRunLoop")
purego.RegisterLibFunc(&_IOHIDElementGetType, iokit, "IOHIDElementGetType")
purego.RegisterLibFunc(&_IOHIDElementGetUsage, iokit, "IOHIDElementGetUsage")
purego.RegisterLibFunc(&_IOHIDElementGetUsagePage, iokit, "IOHIDElementGetUsagePage")
purego.RegisterLibFunc(&_IOHIDElementGetLogicalMin, iokit, "IOHIDElementGetLogicalMin")
purego.RegisterLibFunc(&_IOHIDElementGetLogicalMax, iokit, "IOHIDElementGetLogicalMax")
purego.RegisterLibFunc(&_IOHIDDeviceGetValue, iokit, "IOHIDDeviceGetValue")
purego.RegisterLibFunc(&_IOHIDValueGetIntegerValue, iokit, "IOHIDValueGetIntegerValue")
purego.RegisterLibFunc(&_IOHIDDeviceCopyMatchingElements, iokit, "IOHIDDeviceCopyMatchingElements")
return nil
}
2023-02-02 14:31:56 +01:00
var (
_IOHIDElementGetTypeID func() _CFTypeID
_IOHIDManagerCreate func(allocator _CFAllocatorRef, options _IOOptionBits) _IOHIDManagerRef
_IOHIDDeviceGetProperty func(device _IOHIDDeviceRef, key _CFStringRef) _CFTypeRef
_IOHIDManagerOpen func(manager _IOHIDManagerRef, options _IOOptionBits) _IOReturn
_IOHIDManagerSetDeviceMatchingMultiple func(manager _IOHIDManagerRef, multiple _CFArrayRef)
_IOHIDManagerRegisterDeviceMatchingCallback func(manager _IOHIDManagerRef, callback _IOHIDDeviceCallback, context unsafe.Pointer)
_IOHIDManagerRegisterDeviceRemovalCallback func(manager _IOHIDManagerRef, callback _IOHIDDeviceCallback, context unsafe.Pointer)
_IOHIDManagerScheduleWithRunLoop func(manager _IOHIDManagerRef, runLoop _CFRunLoopRef, runLoopMode _CFStringRef)
_IOHIDElementGetType func(element _IOHIDElementRef) _IOHIDElementType
_IOHIDElementGetUsage func(element _IOHIDElementRef) uint32
_IOHIDElementGetUsagePage func(element _IOHIDElementRef) uint32
_IOHIDElementGetLogicalMin func(element _IOHIDElementRef) _CFIndex
_IOHIDElementGetLogicalMax func(element _IOHIDElementRef) _CFIndex
_IOHIDDeviceGetValue func(device _IOHIDDeviceRef, element _IOHIDElementRef, pValue *_IOHIDValueRef) _IOReturn
_IOHIDValueGetIntegerValue func(value _IOHIDValueRef) _CFIndex
_IOHIDDeviceCopyMatchingElements func(device _IOHIDDeviceRef, matching _CFDictionaryRef, options _IOOptionBits) _CFArrayRef
)