packages feed

sdl3-bindgen-sys-0.0.1.0: src/SDL3/Sys/Bindgen/Hidapi.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- | Header file for SDL HIDAPI functions.
--
--     This is an adaptation of the original HIDAPI interface by Alan Ott, and includes source code licensed under the following license:
--
--     @
--     HIDAPI - Multi-Platform library for
--     communication with HID devices.
--
--     Copyright 2009, Alan Ott, Signal 11 Software.
--     All Rights Reserved.
--
--     This software may be used by anyone for any reason so
--     long as the copyright notice in the source files
--     remains intact.
--     @
--
--     (Note that this license is the same as item three of SDL\'s zlib license, so it adds no new requirements on the user.)
--
--     If you would like a version of SDL without this code, you can build SDL with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. An opaque handle representing an open HID device.
--
--     @since 3.2.0
module SDL3.Sys.Bindgen.Hidapi (
  SDL3.Sys.Bindgen.Hidapi.SDL_hid_device,
  SDL3.Sys.Bindgen.Hidapi.SDL_hid_bus_type (..),
  pattern SDL3.Sys.Bindgen.Hidapi.SDL_HID_API_BUS_UNKNOWN,
  pattern SDL3.Sys.Bindgen.Hidapi.SDL_HID_API_BUS_USB,
  pattern SDL3.Sys.Bindgen.Hidapi.SDL_HID_API_BUS_BLUETOOTH,
  pattern SDL3.Sys.Bindgen.Hidapi.SDL_HID_API_BUS_I2C,
  pattern SDL3.Sys.Bindgen.Hidapi.SDL_HID_API_BUS_SPI,
  SDL3.Sys.Bindgen.Hidapi.SDL_hid_device_info (..),
  SDL3.Sys.Bindgen.Hidapi.sDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER,
)
where

import Prelude (Eq, Int, Ord, Read, Show, pure, (<*>), (>>), type (~))

import HsBindgen.Runtime.CEnum qualified as CEnum
import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.LibC qualified
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.Struct qualified as Struct
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField

-- | [C declaration]: @struct SDL_hid_device@, defined at @SDL3\/SDL_hidapi.h 71:16@
data SDL_hid_device

-- | HID underlying bus types.
--
--     @since 3.2.0
--
--     [C declaration]: @enum SDL_hid_bus_type@, defined at @SDL3\/SDL_hidapi.h 78:14@
newtype SDL_hid_bus_type = SDL_hid_bus_type
  { unwrap :: BG.CUInt
  }
  deriving stock (BG.Generic, Eq, Ord)
  deriving newtype (BG.HasFFIType)

instance Marshal.StaticSize SDL_hid_bus_type where
  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw SDL_hid_bus_type where
  readRaw =
    \ptr0 ->
      pure SDL_hid_bus_type
        <*> Marshal.readRawByteOff ptr0 (0 :: Int)

instance Marshal.WriteRaw SDL_hid_bus_type where
  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          SDL_hid_bus_type unwrap2 ->
            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2

deriving via Marshal.EquivStorable SDL_hid_bus_type instance BG.Storable SDL_hid_bus_type

deriving via BG.CUInt instance BG.Prim SDL_hid_bus_type

instance CEnum.CEnum SDL_hid_bus_type where
  type CEnumZ SDL_hid_bus_type = BG.CUInt

  toCEnum = SDL_hid_bus_type

  fromCEnum = BG.getField @"unwrap"

  declaredValues =
    \_ ->
      CEnum.declaredValuesFromList
        [ (0, BG.singleton "SDL_HID_API_BUS_UNKNOWN")
        , (1, BG.singleton "SDL_HID_API_BUS_USB")
        , (2, BG.singleton "SDL_HID_API_BUS_BLUETOOTH")
        , (3, BG.singleton "SDL_HID_API_BUS_I2C")
        , (4, BG.singleton "SDL_HID_API_BUS_SPI")
        ]

  showsUndeclared =
    CEnum.showsWrappedUndeclared "SDL_hid_bus_type"

  readPrecUndeclared =
    CEnum.readPrecWrappedUndeclared "SDL_hid_bus_type"

  isDeclared = CEnum.seqIsDeclared

  mkDeclared = CEnum.seqMkDeclared

instance CEnum.SequentialCEnum SDL_hid_bus_type where
  minDeclaredValue = SDL_HID_API_BUS_UNKNOWN

  maxDeclaredValue = SDL_HID_API_BUS_SPI

instance Show SDL_hid_bus_type where
  showsPrec = CEnum.shows

instance Read SDL_hid_bus_type where
  readPrec = CEnum.readPrec

  readList = BG.readListDefault

  readListPrec = BG.readListPrecDefault

instance
  (ty ~ BG.CUInt)
  => BG.CompatHasField.HasField "unwrap" SDL_hid_bus_type ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_bus_type{unwrap = y1}
      , BG.getField @"unwrap" x0
      )

instance
  (ty ~ BG.CUInt)
  => BG.HasField "unwrap" (BG.Ptr SDL_hid_bus_type) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_hid_bus_type "unwrap" where
  type CFieldType SDL_hid_bus_type "unwrap" = BG.CUInt

  offset# = \_ -> \_ -> 0

-- | Unknown bus type
--
--     [C declaration]: @SDL_HID_API_BUS_UNKNOWN@, defined at @SDL3\/SDL_hidapi.h 80:5@
pattern SDL_HID_API_BUS_UNKNOWN :: SDL_hid_bus_type
pattern SDL_HID_API_BUS_UNKNOWN = SDL_hid_bus_type 0

-- | USB bus Specifications: [https:\/\/usb.org\/hid](https://usb.org/hid)
--
--     [C declaration]: @SDL_HID_API_BUS_USB@, defined at @SDL3\/SDL_hidapi.h 85:5@
pattern SDL_HID_API_BUS_USB :: SDL_hid_bus_type
pattern SDL_HID_API_BUS_USB = SDL_hid_bus_type 1

-- | Bluetooth or Bluetooth LE bus Specifications: [https:\/\/www.bluetooth.com\/specifications\/specs\/human-interface-device-profile-1-1-1\/](https://www.bluetooth.com/specifications/specs/human-interface-device-profile-1-1-1/) [https:\/\/www.bluetooth.com\/specifications\/specs\/hid-service-1-0\/](https://www.bluetooth.com/specifications/specs/hid-service-1-0/) [https:\/\/www.bluetooth.com\/specifications\/specs\/hid-over-gatt-profile-1-0\/](https://www.bluetooth.com/specifications/specs/hid-over-gatt-profile-1-0/)
--
--     [C declaration]: @SDL_HID_API_BUS_BLUETOOTH@, defined at @SDL3\/SDL_hidapi.h 92:5@
pattern SDL_HID_API_BUS_BLUETOOTH :: SDL_hid_bus_type
pattern SDL_HID_API_BUS_BLUETOOTH = SDL_hid_bus_type 2

-- | I2C bus Specifications: [https:\/\/docs.microsoft.com\/previous-versions\/windows\/hardware\/design\/dn642101(v=vs.85)](https://docs.microsoft.com/previous-versions/windows/hardware/design/dn642101(v=vs.85))
--
--     [C declaration]: @SDL_HID_API_BUS_I2C@, defined at @SDL3\/SDL_hidapi.h 97:5@
pattern SDL_HID_API_BUS_I2C :: SDL_hid_bus_type
pattern SDL_HID_API_BUS_I2C = SDL_hid_bus_type 3

-- | SPI bus Specifications: [https:\/\/www.microsoft.com\/download\/details.aspx?id=103325](https://www.microsoft.com/download/details.aspx?id=103325)
--
--     [C declaration]: @SDL_HID_API_BUS_SPI@, defined at @SDL3\/SDL_hidapi.h 102:5@
pattern SDL_HID_API_BUS_SPI :: SDL_hid_bus_type
pattern SDL_HID_API_BUS_SPI = SDL_hid_bus_type 4

-- | hidapi info structure Information about a connected HID device
--
--     @since 3.2.0
--
--     [C declaration]: @struct SDL_hid_device_info@, defined at @SDL3\/SDL_hidapi.h 113:16@
data SDL_hid_device_info = SDL_hid_device_info
  { path :: BG.Ptr BG.CChar
  -- ^ Platform-specific device path
  --
  --          [C declaration]: @path@, defined at @SDL3\/SDL_hidapi.h 116:11@
  , vendor_id :: BG.CUShort
  -- ^ Device Vendor ID
  --
  --          [C declaration]: @vendor_id@, defined at @SDL3\/SDL_hidapi.h 118:20@
  , product_id :: BG.CUShort
  -- ^ Device Product ID
  --
  --          [C declaration]: @product_id@, defined at @SDL3\/SDL_hidapi.h 120:20@
  , serial_number :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
  -- ^ Serial Number
  --
  --          [C declaration]: @serial_number@, defined at @SDL3\/SDL_hidapi.h 122:14@
  , release_number :: BG.CUShort
  -- ^ Device Release Number in binary-coded decimal, also known as Device Version Number
  --
  --          [C declaration]: @release_number@, defined at @SDL3\/SDL_hidapi.h 125:20@
  , manufacturer_string :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
  -- ^ Manufacturer String
  --
  --          [C declaration]: @manufacturer_string@, defined at @SDL3\/SDL_hidapi.h 127:14@
  , product_string :: BG.Ptr HsBindgen.Runtime.LibC.CWchar
  -- ^ Product string
  --
  --          [C declaration]: @product_string@, defined at @SDL3\/SDL_hidapi.h 129:14@
  , usage_page :: BG.CUShort
  -- ^ Usage Page for this Device\/Interface (Windows\/Mac\/hidraw only)
  --
  --          [C declaration]: @usage_page@, defined at @SDL3\/SDL_hidapi.h 132:20@
  , usage :: BG.CUShort
  -- ^ Usage for this Device\/Interface (Windows\/Mac\/hidraw only)
  --
  --          [C declaration]: @usage@, defined at @SDL3\/SDL_hidapi.h 135:20@
  , interface_number :: BG.CInt
  -- ^ The USB interface which this logical device represents.
  --
  --          Valid only if the device is a USB HID device. Set to -1 in all other cases.
  --
  --          [C declaration]: @interface_number@, defined at @SDL3\/SDL_hidapi.h 142:9@
  , interface_class :: BG.CInt
  -- ^ Additional information about the USB interface. Valid on libusb and Android implementations.
  --
  --          [C declaration]: @interface_class@, defined at @SDL3\/SDL_hidapi.h 146:9@
  , interface_subclass :: BG.CInt
  -- ^ [C declaration]: @interface_subclass@, defined at @SDL3\/SDL_hidapi.h 147:9@
  , interface_protocol :: BG.CInt
  -- ^ [C declaration]: @interface_protocol@, defined at @SDL3\/SDL_hidapi.h 148:9@
  , bus_type :: SDL_hid_bus_type
  -- ^ Underlying bus type
  --
  --          [C declaration]: @bus_type@, defined at @SDL3\/SDL_hidapi.h 151:22@
  , next :: BG.Ptr SDL_hid_device_info
  -- ^ Pointer to the next device
  --
  --          [C declaration]: @next@, defined at @SDL3\/SDL_hidapi.h 154:33@
  }
  deriving stock (BG.Generic, Eq, Show)

instance Marshal.StaticSize SDL_hid_device_info where
  staticSizeOf = \_ -> (80 :: Int)

  staticAlignment = \_ -> (8 :: Int)

instance Marshal.ReadRaw SDL_hid_device_info where
  readRaw =
    \ptr0 ->
      pure SDL_hid_device_info
        <*> HasCField.readRaw (BG.Proxy @"path") ptr0
        <*> HasCField.readRaw (BG.Proxy @"vendor_id") ptr0
        <*> HasCField.readRaw (BG.Proxy @"product_id") ptr0
        <*> HasCField.readRaw (BG.Proxy @"serial_number") ptr0
        <*> HasCField.readRaw (BG.Proxy @"release_number") ptr0
        <*> HasCField.readRaw (BG.Proxy @"manufacturer_string") ptr0
        <*> HasCField.readRaw (BG.Proxy @"product_string") ptr0
        <*> HasCField.readRaw (BG.Proxy @"usage_page") ptr0
        <*> HasCField.readRaw (BG.Proxy @"usage") ptr0
        <*> HasCField.readRaw (BG.Proxy @"interface_number") ptr0
        <*> HasCField.readRaw (BG.Proxy @"interface_class") ptr0
        <*> HasCField.readRaw (BG.Proxy @"interface_subclass") ptr0
        <*> HasCField.readRaw (BG.Proxy @"interface_protocol") ptr0
        <*> HasCField.readRaw (BG.Proxy @"bus_type") ptr0
        <*> HasCField.readRaw (BG.Proxy @"next") ptr0

instance Marshal.WriteRaw SDL_hid_device_info where
  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          SDL_hid_device_info
            path2
            vendor_id3
            product_id4
            serial_number5
            release_number6
            manufacturer_string7
            product_string8
            usage_page9
            usage10
            interface_number11
            interface_class12
            interface_subclass13
            interface_protocol14
            bus_type15
            next16 ->
              HasCField.writeRaw (BG.Proxy @"path") ptr0 path2
                >> HasCField.writeRaw (BG.Proxy @"vendor_id") ptr0 vendor_id3
                >> HasCField.writeRaw (BG.Proxy @"product_id") ptr0 product_id4
                >> HasCField.writeRaw (BG.Proxy @"serial_number") ptr0 serial_number5
                >> HasCField.writeRaw (BG.Proxy @"release_number") ptr0 release_number6
                >> HasCField.writeRaw (BG.Proxy @"manufacturer_string") ptr0 manufacturer_string7
                >> HasCField.writeRaw (BG.Proxy @"product_string") ptr0 product_string8
                >> HasCField.writeRaw (BG.Proxy @"usage_page") ptr0 usage_page9
                >> HasCField.writeRaw (BG.Proxy @"usage") ptr0 usage10
                >> HasCField.writeRaw (BG.Proxy @"interface_number") ptr0 interface_number11
                >> HasCField.writeRaw (BG.Proxy @"interface_class") ptr0 interface_class12
                >> HasCField.writeRaw (BG.Proxy @"interface_subclass") ptr0 interface_subclass13
                >> HasCField.writeRaw (BG.Proxy @"interface_protocol") ptr0 interface_protocol14
                >> HasCField.writeRaw (BG.Proxy @"bus_type") ptr0 bus_type15
                >> HasCField.writeRaw (BG.Proxy @"next") ptr0 next16

deriving via Marshal.EquivStorable SDL_hid_device_info instance BG.Storable SDL_hid_device_info

deriving via
  Struct.IsStructViaReadRaw SDL_hid_device_info
  instance
    Struct.IsStruct SDL_hid_device_info

-- | Platform-specific device path
--
--     [C declaration]: @path@, defined at @SDL3\/SDL_hidapi.h 116:11@
instance
  (ty ~ BG.Ptr BG.CChar)
  => BG.CompatHasField.HasField "path" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { path = y1
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"path" x0
      )

instance
  (ty ~ BG.Ptr BG.CChar)
  => BG.HasField "path" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"path")

instance HasCField.HasCField SDL_hid_device_info "path" where
  type
    CFieldType SDL_hid_device_info "path" =
      BG.Ptr BG.CChar

  offset# = \_ -> \_ -> 0

-- | Device Vendor ID
--
--     [C declaration]: @vendor_id@, defined at @SDL3\/SDL_hidapi.h 118:20@
instance
  (ty ~ BG.CUShort)
  => BG.CompatHasField.HasField "vendor_id" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { vendor_id = y1
            , path = BG.getField @"path" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"vendor_id" x0
      )

instance
  (ty ~ BG.CUShort)
  => BG.HasField "vendor_id" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"vendor_id")

instance HasCField.HasCField SDL_hid_device_info "vendor_id" where
  type
    CFieldType SDL_hid_device_info "vendor_id" =
      BG.CUShort

  offset# = \_ -> \_ -> 8

-- | Device Product ID
--
--     [C declaration]: @product_id@, defined at @SDL3\/SDL_hidapi.h 120:20@
instance
  (ty ~ BG.CUShort)
  => BG.CompatHasField.HasField "product_id" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { product_id = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"product_id" x0
      )

instance
  (ty ~ BG.CUShort)
  => BG.HasField "product_id" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"product_id")

instance HasCField.HasCField SDL_hid_device_info "product_id" where
  type
    CFieldType SDL_hid_device_info "product_id" =
      BG.CUShort

  offset# = \_ -> \_ -> 10

-- | Serial Number
--
--     [C declaration]: @serial_number@, defined at @SDL3\/SDL_hidapi.h 122:14@
instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.CompatHasField.HasField "serial_number" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { serial_number = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"serial_number" x0
      )

instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.HasField "serial_number" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"serial_number")

instance HasCField.HasCField SDL_hid_device_info "serial_number" where
  type
    CFieldType SDL_hid_device_info "serial_number" =
      BG.Ptr HsBindgen.Runtime.LibC.CWchar

  offset# = \_ -> \_ -> 16

-- | Device Release Number in binary-coded decimal, also known as Device Version Number
--
--     [C declaration]: @release_number@, defined at @SDL3\/SDL_hidapi.h 125:20@
instance
  (ty ~ BG.CUShort)
  => BG.CompatHasField.HasField "release_number" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { release_number = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"release_number" x0
      )

instance
  (ty ~ BG.CUShort)
  => BG.HasField "release_number" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"release_number")

instance HasCField.HasCField SDL_hid_device_info "release_number" where
  type
    CFieldType SDL_hid_device_info "release_number" =
      BG.CUShort

  offset# = \_ -> \_ -> 24

-- | Manufacturer String
--
--     [C declaration]: @manufacturer_string@, defined at @SDL3\/SDL_hidapi.h 127:14@
instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.CompatHasField.HasField "manufacturer_string" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { manufacturer_string = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"manufacturer_string" x0
      )

instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.HasField "manufacturer_string" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"manufacturer_string")

instance HasCField.HasCField SDL_hid_device_info "manufacturer_string" where
  type
    CFieldType SDL_hid_device_info "manufacturer_string" =
      BG.Ptr HsBindgen.Runtime.LibC.CWchar

  offset# = \_ -> \_ -> 32

-- | Product string
--
--     [C declaration]: @product_string@, defined at @SDL3\/SDL_hidapi.h 129:14@
instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.CompatHasField.HasField "product_string" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { product_string = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"product_string" x0
      )

instance
  (ty ~ BG.Ptr HsBindgen.Runtime.LibC.CWchar)
  => BG.HasField "product_string" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"product_string")

instance HasCField.HasCField SDL_hid_device_info "product_string" where
  type
    CFieldType SDL_hid_device_info "product_string" =
      BG.Ptr HsBindgen.Runtime.LibC.CWchar

  offset# = \_ -> \_ -> 40

-- | Usage Page for this Device\/Interface (Windows\/Mac\/hidraw only)
--
--     [C declaration]: @usage_page@, defined at @SDL3\/SDL_hidapi.h 132:20@
instance
  (ty ~ BG.CUShort)
  => BG.CompatHasField.HasField "usage_page" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { usage_page = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"usage_page" x0
      )

instance
  (ty ~ BG.CUShort)
  => BG.HasField "usage_page" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"usage_page")

instance HasCField.HasCField SDL_hid_device_info "usage_page" where
  type
    CFieldType SDL_hid_device_info "usage_page" =
      BG.CUShort

  offset# = \_ -> \_ -> 48

-- | Usage for this Device\/Interface (Windows\/Mac\/hidraw only)
--
--     [C declaration]: @usage@, defined at @SDL3\/SDL_hidapi.h 135:20@
instance
  (ty ~ BG.CUShort)
  => BG.CompatHasField.HasField "usage" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { usage = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"usage" x0
      )

instance
  (ty ~ BG.CUShort)
  => BG.HasField "usage" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"usage")

instance HasCField.HasCField SDL_hid_device_info "usage" where
  type
    CFieldType SDL_hid_device_info "usage" =
      BG.CUShort

  offset# = \_ -> \_ -> 50

-- | The USB interface which this logical device represents.
--
--     Valid only if the device is a USB HID device. Set to -1 in all other cases.
--
--     [C declaration]: @interface_number@, defined at @SDL3\/SDL_hidapi.h 142:9@
instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "interface_number" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { interface_number = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"interface_number" x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "interface_number" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"interface_number")

instance HasCField.HasCField SDL_hid_device_info "interface_number" where
  type
    CFieldType SDL_hid_device_info "interface_number" =
      BG.CInt

  offset# = \_ -> \_ -> 52

-- | Additional information about the USB interface. Valid on libusb and Android implementations.
--
--     [C declaration]: @interface_class@, defined at @SDL3\/SDL_hidapi.h 146:9@
instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "interface_class" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { interface_class = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"interface_class" x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "interface_class" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"interface_class")

instance HasCField.HasCField SDL_hid_device_info "interface_class" where
  type
    CFieldType SDL_hid_device_info "interface_class" =
      BG.CInt

  offset# = \_ -> \_ -> 56

-- | [C declaration]: @interface_subclass@, defined at @SDL3\/SDL_hidapi.h 147:9@
instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "interface_subclass" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { interface_subclass = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"interface_subclass" x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "interface_subclass" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"interface_subclass")

instance HasCField.HasCField SDL_hid_device_info "interface_subclass" where
  type
    CFieldType SDL_hid_device_info "interface_subclass" =
      BG.CInt

  offset# = \_ -> \_ -> 60

-- | [C declaration]: @interface_protocol@, defined at @SDL3\/SDL_hidapi.h 148:9@
instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "interface_protocol" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { interface_protocol = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , bus_type = BG.getField @"bus_type" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"interface_protocol" x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "interface_protocol" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField =
    HasCField.fromPtr (BG.Proxy @"interface_protocol")

instance HasCField.HasCField SDL_hid_device_info "interface_protocol" where
  type
    CFieldType SDL_hid_device_info "interface_protocol" =
      BG.CInt

  offset# = \_ -> \_ -> 64

-- | Underlying bus type
--
--     [C declaration]: @bus_type@, defined at @SDL3\/SDL_hidapi.h 151:22@
instance
  (ty ~ SDL_hid_bus_type)
  => BG.CompatHasField.HasField "bus_type" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { bus_type = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , next = BG.getField @"next" x0
            }
      , BG.getField @"bus_type" x0
      )

instance
  (ty ~ SDL_hid_bus_type)
  => BG.HasField "bus_type" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"bus_type")

instance HasCField.HasCField SDL_hid_device_info "bus_type" where
  type
    CFieldType SDL_hid_device_info "bus_type" =
      SDL_hid_bus_type

  offset# = \_ -> \_ -> 68

-- | Pointer to the next device
--
--     [C declaration]: @next@, defined at @SDL3\/SDL_hidapi.h 154:33@
instance
  (ty ~ BG.Ptr SDL_hid_device_info)
  => BG.CompatHasField.HasField "next" SDL_hid_device_info ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_hid_device_info
            { next = y1
            , path = BG.getField @"path" x0
            , vendor_id = BG.getField @"vendor_id" x0
            , product_id = BG.getField @"product_id" x0
            , serial_number = BG.getField @"serial_number" x0
            , release_number = BG.getField @"release_number" x0
            , manufacturer_string = BG.getField @"manufacturer_string" x0
            , product_string = BG.getField @"product_string" x0
            , usage_page = BG.getField @"usage_page" x0
            , usage = BG.getField @"usage" x0
            , interface_number = BG.getField @"interface_number" x0
            , interface_class = BG.getField @"interface_class" x0
            , interface_subclass = BG.getField @"interface_subclass" x0
            , interface_protocol = BG.getField @"interface_protocol" x0
            , bus_type = BG.getField @"bus_type" x0
            }
      , BG.getField @"next" x0
      )

instance
  (ty ~ BG.Ptr SDL_hid_device_info)
  => BG.HasField "next" (BG.Ptr SDL_hid_device_info) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"next")

instance HasCField.HasCField SDL_hid_device_info "next" where
  type
    CFieldType SDL_hid_device_info "next" =
      BG.Ptr SDL_hid_device_info

  offset# = \_ -> \_ -> 72

-- | [C declaration]: @macro SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER@, literal @\"SDL.hidapi.libusb.device.handle\"@, defined at @SDL3\/SDL_hidapi.h 303:9@
sDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER :: BG.ByteString
sDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER =
  BG.pack
    [ 0x53
    , 0x44
    , 0x4C
    , 0x2E
    , 0x68
    , 0x69
    , 0x64
    , 0x61
    , 0x70
    , 0x69
    , 0x2E
    , 0x6C
    , 0x69
    , 0x62
    , 0x75
    , 0x73
    , 0x62
    , 0x2E
    , 0x64
    , 0x65
    , 0x76
    , 0x69
    , 0x63
    , 0x65
    , 0x2E
    , 0x68
    , 0x61
    , 0x6E
    , 0x64
    , 0x6C
    , 0x65
    ]