Generated from ./.\Source/ with ROBODoc v4.0.18 on Mon Jun 29 10:55:29 2009

### TABLE OF CONTENTS

- Controller.Input.SDK/ControllerInputSDK[1.00.001]
- Controller.Input.SDK/ControllerInput(HWND.hwnd,BOOL.ignoreXInputControllers)
- Controller.Input.SDK/Update()
- Controller.Input.SDK/GetStateDInput(INT.index)
- Controller.Input.SDK/GetStateXInput(INT.index)
- Controller.Input.SDK/GetFriendlyProductName(INT.index)
- Controller.Input.SDK/IsConnected(INT.index)
- Controller.Input.SDK/IsConnected(INT.index,DeviceType.deviceType)
- Controller.Input.SDK/IsConnected(INT.index,ManufacturerName.manufacturerName)
- Controller.Input.SDK/IsConnected(INT.index,ModelName.modelName)
- Controller.Input.SDK/IsXInputDevice(INT.index)
- Controller.Input.SDK/HasForceFeedback(INT.index)
- Controller.Input.SDK/GetVendorID(INT.index)
- Controller.Input.SDK/GetProductID(INT.index)
- Controller.Input.SDK/GetDeviceHandle(INT.index)
- Controller.Input.SDK/GetDeviceXinputID(INT.index)
- Controller.Input.SDK/GenerateNonLinearValues(INT.index,INT.nonLinCoeff)
- Controller.Input.SDK/GetNonLinearValue(INT.index,INT.inputValue)
- Controller.Input.SDK/ButtonIsPressed(INT.index,INT.buttonOrMask)
- Controller.Input.SDK/ButtonTriggered(INT.index,INT.buttonOrMask)
- Controller.Input.SDK/ButtonReleased(INT.index,INT.buttonOrMask)
- Controller.Input.SDK/GetNumberFFAxesDInput(INT.index)

## Controller.Input.SDK/ControllerInputSDK[1.00.001]

NAME

       Logitech Controller Input SDK

COPYRIGHT

       The Logitech Controller Input SDK, including all accompanying
       documentation, is protected by intellectual property laws. All
       rights not expressly granted by Logitech are reserved.

PURPOSE

       The Logitech Controller Input SDK's purpose is to create a
       paradigm shift. Today users must have their controller(s) plugged
       in when launching a PC game, and if they forget, they have to know
       to exit the game, plug in the controller, and start again.
       The Controller Input SDK enables users to hot plug/unplug
       any controllers at any time, mimicking the user-friendly behavior
       of consoles.
       The SDK provides a simple interface for:
           - support of both DirectInput and XInput hot plug/unplug.
           - seamless integration of a total of 4 DInput and XInput
             controllers.
           - getting controller positional information as well as general
             info such as friendly name, VID, PID, connection status
             based on various parameters such as controller type,
             manufacturer, and model name, and whether it supports force
             feedback/rumble.
           - getting hooks to add force feedback or rumble (DirectInput
             device interface and XInput ID).

EXAMPLE

       Build and run the sample program to see some of the code usage, or
       run ControllerInputSDKDemo.exe to quickly see what it can do.

AUTHOR

       Christophe Juncker (cj@wingmanteam.com)

## Controller.Input.SDK/ControllerInput(HWND.hwnd,BOOL.ignoreXInputControllers)

NAME

      ControllerInput(HWND hwnd, BOOL ignoreXInputControllers) -- does
      necessary initialization.

INPUTS

      hwnd - game window handle used to initialize DirectInput.

     ignoreXInputControllers - if set to TRUE, XInput controllers will be
     ignored alltogether.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/Update()

NAME

      VOID Update() -- update controller status (connected or
      disconnected) and read each controller's positional information.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetStateDInput(INT.index)

NAME

      DIJOYSTATE2* GetStateDInput(INT index) -- get a DirectInput
      controller's positional information.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      DIJOYSTATE2 pointer to the most recent information obtained through
      Update() if successful.
      NULL otherwise.

SEE ALSO

      Update()
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetStateXInput(INT.index)

NAME

      XINPUT_STATE* GetStateXInput(INT index) -- get a XInput
      controller's positional information.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      XINPUT_STATE pointer to the most recent information obtained
      through Update() if successful.
      NULL otherwise.

SEE ALSO

      Update()
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetFriendlyProductName(INT.index)

NAME

      LPCTSTR GetFriendlyProductName(INT index) -- get the friendly
      name of a controller (as found in the USB Device Descriptor).

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      String containing friendly name if successful.
      Empy string otherwise.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/IsConnected(INT.index)

NAME

      BOOL IsConnected(INT index) -- check if specified game controller
      is currently connected.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      TRUE if connected.
      FALSE otherwise.

SEE ALSO

      IsConnected(INT.index,DeviceType.deviceType)
      IsConnected(INT.index,ManufacturerName.manufacturerName)
      IsConnected(INT.index,ModelName.modelName)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/IsConnected(INT.index,DeviceType.deviceType)

NAME

      BOOL IsConnected(INT index, DeviceType deviceType) -- check if
      specified game controller is currently connected.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      deviceType - type of the device. Possible types are:
        - LG_DEVICE_TYPE_WHEEL
        - LG_DEVICE_TYPE_JOYSTICK
        - DEVICE_TYPE_GAMEPAD
        - LG_DEVICE_TYPE_OTHER

RETURN VALUE

      TRUE if device is connected.
      FALSE otherwise.

SEE ALSO

      IsConnected(INT.index)
      IsConnected(INT.index,ManufacturerName.manufacturerName)
      IsConnected(INT.index,ModelName.modelName)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/IsConnected(INT.index,ManufacturerName.manufacturerName)

NAME

      BOOL IsConnected(INT index, ManufacturerName manufacturerName) --
      check if specified game controller is currently connected.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      manufacturerName - name of the manufacturer of the device. Possible
      names are:
        - LG_MANUFACTURER_LOGITECH
        - LG_MANUFACTURER_MICROSOFT
        - LG_MANUFACTURER_OTHER

RETURN VALUE

      TRUE if device is connected.
      FALSE otherwise.

SEE ALSO

      IsConnected(INT.index)
      IsConnected(INT.index,DeviceType.deviceType)
      IsConnected(INT.index,ModelName.modelName)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/IsConnected(INT.index,ModelName.modelName)

NAME

      BOOL IsConnected(INT index, ModelName modelName) -- check if
      specified game controller is currently connected.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      modelName - model name of the device. Possible names are:
        - LG_MODEL_G27
        - LG_MODEL_DRIVING_FORCE_GT
        - LG_MODEL_G25
        - LG_MODEL_MOMO_RACING
        - LG_MODEL_MOMO_FORCE
        - LG_MODEL_DRIVING_FORCE_PRO
        - LG_MODEL_DRIVING_FORCE
        - LG_MODEL_NASCAR_RACING_WHEEL
        - LG_MODEL_FORMULA_FORCE
        - LG_MODEL_FORMULA_FORCE_GP
        - LG_MODEL_FORCE_3D_PRO
        - LG_MODEL_EXTREME_3D_PRO
        - LG_MODEL_FREEDOM_24
        - LG_MODEL_ATTACK_3
        - LG_MODEL_FORCE_3D
        - LG_MODEL_STRIKE_FORCE_3D
        - LG_MODEL_G940_JOYSTICK
        - LG_MODEL_G940_THROTTLE
        - LG_MODEL_G940_PEDALS
        - LG_MODEL_RUMBLEPAD
        - LG_MODEL_RUMBLEPAD_2
        - LG_MODEL_CORDLESS_RUMBLEPAD_2
        - LG_MODEL_CORDLESS_GAMEPAD
        - LG_MODEL_DUAL_ACTION_GAMEPAD
        - LG_MODEL_PRECISION_GAMEPAD_2
        - LG_MODEL_CHILLSTREAM

RETURN VALUE

      TRUE if device is connected.
      FALSE otherwise.

SEE ALSO

      IsConnected(INT.index)
      IsConnected(INT.index,DeviceType.deviceType)
      IsConnected(INT.index,ManufacturerName.manufacturerName)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/IsXInputDevice(INT.index)

NAME

      BOOL IsXInputDevice(INT index) -- check if the controller is a
      XInput device or a DirectInput device.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      TRUE if controller is a XInput device.
      FALSE otherwise.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/HasForceFeedback(INT.index)

NAME

      BOOL HasForceFeedback(INT index) -- check if the controller can
      do force feedback or rumble.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      TRUE if controller is force feedback/rumble capable.
      FALSE otherwise.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetVendorID(INT.index)

NAME

      DWORD GetVendorID(INT index) -- Get controller's Vendor ID.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      Vendor ID if successful.
      0 otherwise.

SEE ALSO

      GetProductID(INT.index)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetProductID(INT.index)

NAME

      DWORD GetProductID(INT index) -- Get controller's Product ID.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      Product ID if successful.
      0 otherwise.

SEE ALSO

      GetVendorID(INT.index)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetDeviceHandle(INT.index)

NAME

      LPDIRECTINPUTDEVICE8 GetDeviceHandle(INT index) -- Get handle to
      controller's corresponding DirectInput device. This handle can be
      used to do force feedback.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      Device handle if successful.
      NULL otherwise.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetDeviceXinputID(INT.index)

NAME

      INT GetDeviceXinputID(INT index) -- Get ID of XInput
      controller. This ID can be used as the dwUserIndex parameter to use
      any of the XInput functions.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      XInput ID if successful ( 0 to 3).
      LG_XINPUT_ID_NONE otherwise.

SEE ALSO

      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GenerateNonLinearValues(INT.index,INT.nonLinCoeff)

NAME

      HRESULT GenerateNonLinearValues(int index, int nonLinCoeff) --
      Generate non-linear values for the game controller's axis.

FUNCTION

      Gaming wheels/joysticks/game pads have very different behavior from
      real steering wheels. The reason for single-turn wheels is that
      they only do up to three quarters of a turn lock to lock, compared
      to about 3 turns for a real car.
      This directly affects the steering ratio (15:1 to 20:1 for a real
      car, but only 4:1 for a gaming wheel!). Joysticks and game pads
      have a much shorter range of movement than a real steering wheel as
      well.
      Because of this very short steering ratio or short range, the
      gaming wheel/joystick/game pad will feel highly sensitive which may
      make game play very difficult.
      Especially it may be difficult to drive in a straight line at speed
      (tendency to swerve back and forth).
      One way to get around this problem is to use a sensitivity
      curve. This is a curve that defines the sensitivity of the game
      controller depending on speed. This type of curve is usually used
      for game pads to make up for their low physical range. The result
      of applying such a curve is that at high speed the car's wheels
      will physically turn less than if the car is moving very slowly.
      For example the car's wheels may turn 60 degrees lock to lock at
      low speed but only 10 degrees lock to lock at higher speeds.  If
      you calculate the resulting steering ratio for 10 degrees lock to
      lock you find that if you use a steering wheel that turns 180
      degrees lock to lock the ratio is equal to 180/10 = 18, which
      corresponds to a real car's steering ratio.
      If the sensitivity curve has been implemented for the
      wheel/joystick, adding a non-linear curve probably is not
      necessary. But you may find that even after applying a sensitivity
      curve, the car still feels a little twitchy on a straight line when
      driving fast. This may be because in your game you need more than
      10 degrees lock to lock even at high speeds. Or maybe the car is
      moving at very high speeds where even a normal steering ratio is
      not good enough to eliminate high sensitivity.
      The best way at this point is to add a non-linear curve on top of
      the sensitivity curve.
      The effect of the non-linear curve with positive nonLinCoeff is
      that around center position the wheel/joystick will be less
      sensitive.  Yet at locked position left or right the car's wheels
      will turn the same amount of degrees as without the non-linear
      response curve.  Therefore the car will become more controllable on
      a straight line and game-play will be improved.
      There can sometimes be cases where the wheel does not feel
      sensitive enough. In that case it is possible to add a non-linear
      curve with the inverse effect (makes the steering more sensitive
      around center position) by using negative values for
      nonLinCoeff. This method lets you define a non-linearity
      coefficient which will determine how strongly non-linear the curve
      will be. When running the method it will generate a mapping table
      in the form of an array. For each of the 1024 entries in this array
      there will be a corresponding non-linear value which can be used as
      the wheel/joystick's axis position instead of the original
      value. See Sample_In-game_Implementation.cs for an example.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      nonLinCoeff - value representing how much non-linearity should be
      applied. Range is -100 to 100. 0 = linear curve, 100 = maximum
      non-linear curve with less sensitivity around center, -100 =
      maximum non-linearity with more sensitivity around center position.

SEE ALSO

      GetNonLinearValue(INT.index,INT.inputValue)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetNonLinearValue(INT.index,INT.inputValue)

NAME

      INT GetNonLinearValue(INT index, INT inputValue) -- Get a
      non-linear value from a table previously generated. This can be
      used for the response of a steering wheel.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      inputValue - value between LG_DINPUT_RANGE_MIN and
      LG_DINPUT_RANGE_MAX corresponding to original value of an axis.

RETURN VALUE

      Value between LG_DINPUT_RANGE_MIN and LG_DINPUT_RANGE_MAX
      corresponding to the level of non-linearity previously set with
      GenerateNonLinearValues(...).

SEE ALSO

      GenerateNonLinearValues(INT.index,INT.nonLinCoeff)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/ButtonIsPressed(INT.index,INT.buttonOrMask)

NAME

      BOOL ButtonIsPressed(CONST INT index, CONST INT buttonOrMask) --
      check if the button is currently pressed.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      buttonOrMask - button number between 0 and 127 for DInput, one of
      the following bitmasks for XInput: XINPUT_GAMEPAD_DPAD_UP,
      XINPUT_GAMEPAD_DPAD_DOWN, XINPUT_GAMEPAD_DPAD_LEFT,
      XINPUT_GAMEPAD_DPAD_RIGHT, XINPUT_GAMEPAD_START,
      XINPUT_GAMEPAD_BACK, XINPUT_GAMEPAD_LEFT_THUMB,
      XINPUT_GAMEPAD_RIGHT_THUMB, XINPUT_GAMEPAD_LEFT_SHOULDER,
      XINPUT_GAMEPAD_RIGHT_SHOULDER, XINPUT_GAMEPAD_A, XINPUT_GAMEPAD_B,
      XINPUT_GAMEPAD_X, XINPUT_GAMEPAD_Y

RETURN VALUE

      TRUE if buttons is currently pressed.
      FALSE otherwise.

SEE ALSO

      ButtonTriggered(INT.index,INT.buttonOrMask)
      ButtonReleased(INT.index,INT.buttonOrMask)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/ButtonTriggered(INT.index,INT.buttonOrMask)

NAME

      BOOL ButtonTriggered(CONST INT index, CONST INT buttonOrMask) --
      check if the button has been triggered.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      buttonOrMask - button number between 0 and 127 for DInput, one of
      the following bitmasks for XInput: XINPUT_GAMEPAD_DPAD_UP,
      XINPUT_GAMEPAD_DPAD_DOWN, XINPUT_GAMEPAD_DPAD_LEFT,
      XINPUT_GAMEPAD_DPAD_RIGHT, XINPUT_GAMEPAD_START,
      XINPUT_GAMEPAD_BACK, XINPUT_GAMEPAD_LEFT_THUMB,
      XINPUT_GAMEPAD_RIGHT_THUMB, XINPUT_GAMEPAD_LEFT_SHOULDER,
      XINPUT_GAMEPAD_RIGHT_SHOULDER, XINPUT_GAMEPAD_A, XINPUT_GAMEPAD_B,
      XINPUT_GAMEPAD_X, XINPUT_GAMEPAD_Y

RETURN VALUE

      TRUE if button was triggered.
      FALSE otherwise.

SEE ALSO

      ButtonIsPressed(INT.index,INT.buttonOrMask)
      ButtonReleased(INT.index,INT.buttonOrMask)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/ButtonReleased(INT.index,INT.buttonOrMask)

NAME

      BOOL ButtonReleased(CONST INT index, CONST INT buttonOrMask) --
      check if the button has been released.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

      buttonOrMask - button number between 0 and 127 for DInput, one of
      the following bitmasks for XInput: XINPUT_GAMEPAD_DPAD_UP,
      XINPUT_GAMEPAD_DPAD_DOWN, XINPUT_GAMEPAD_DPAD_LEFT,
      XINPUT_GAMEPAD_DPAD_RIGHT, XINPUT_GAMEPAD_START,
      XINPUT_GAMEPAD_BACK, XINPUT_GAMEPAD_LEFT_THUMB,
      XINPUT_GAMEPAD_RIGHT_THUMB, XINPUT_GAMEPAD_LEFT_SHOULDER,
      XINPUT_GAMEPAD_RIGHT_SHOULDER, XINPUT_GAMEPAD_A, XINPUT_GAMEPAD_B,
      XINPUT_GAMEPAD_X, XINPUT_GAMEPAD_Y

RETURN VALUE

      TRUE if button was released.
      FALSE otherwise.

SEE ALSO

      ButtonIsPressed(INT.index,INT.buttonOrMask)
      ButtonTriggered(INT.index,INT.buttonOrMask)
      SampleInGameImplementation.cpp to see an example.

## Controller.Input.SDK/GetNumberFFAxesDInput(INT.index)

NAME

      INT GetNumberFFAxesDInput(INT index) -- find out how many force
      feedback axes the controller has.

INPUTS

      index - index of the controller (between 0 and
      LG_MAX_CONTROLLERS).

RETURN VALUE

      Number of FF axes.