All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
SurgSim::Device::WdkHidDeviceHandle Class Reference

Access to an input/HID device using the HID API from the Windows Driver Kit. More...

#include <SurgSim/Devices/MultiAxis/win32/WdkHidDeviceHandle.h>

Inheritance diagram for SurgSim::Device::WdkHidDeviceHandle:
Inheritance graph
[legend]
Collaboration diagram for SurgSim::Device::WdkHidDeviceHandle:
Collaboration graph
[legend]

Classes

struct  State
 

Public Member Functions

 ~WdkHidDeviceHandle ()
 Destructor. More...
 
virtual std::string getDeviceName () const override
 Gets the name returned by the operating system for this device. More...
 
virtual bool getDeviceIds (int *vendorId, int *productId) const override
 Gets the device identifiers. More...
 
virtual bool hasTranslationAndRotationAxes () const override
 Queries if this device has 3 translation and 3 rotation axes. More...
 
virtual bool updateStates (AxisStates *axisStates, ButtonStates *buttonStates, bool *updated) override
 Updates the axis and states from the device input, if any. More...
 
virtual void prepareForShutdown () override
 Prepares the handle for sampling thread shutdown. More...
 
- Public Member Functions inherited from SurgSim::Device::SystemInputDeviceHandle
virtual ~SystemInputDeviceHandle ()
 Destructor. More...
 

Static Public Member Functions

static std::vector< std::string > enumeratePaths (SurgSim::Framework::Logger *logger)
 Enumerates input devices. More...
 
static std::unique_ptr
< WdkHidDeviceHandle
open (const std::string &path, std::shared_ptr< SurgSim::Framework::Logger > logger)
 Opens the given path and creates an access wrapper for the device. More...
 

Private Member Functions

 WdkHidDeviceHandle (std::shared_ptr< SurgSim::Framework::Logger > &&logger)
 Constructor. More...
 
 WdkHidDeviceHandle (const WdkHidDeviceHandle &other)
 
WdkHidDeviceHandleoperator= (const WdkHidDeviceHandle &other)
 
bool getCapabilities (struct _HIDP_CAPS *capabilities) const
 Gets the device capabilities. More...
 
bool startAsynchronousRead ()
 Starts an asynchronous read from the device. More...
 
bool finishAsynchronousRead (size_t *numBytesRead)
 Checks if an asynchronous read from the device has completed. More...
 
void cancelAsynchronousRead ()
 Cancels an asynchronous read from the device. More...
 
void decodeStateUpdates (const unsigned char *rawData, size_t rawDataSize, AxisStates *axisStates, ButtonStates *buttonStates, bool *updated)
 Decode the raw state update data received from the device. More...
 

Private Attributes

std::unique_ptr< Statem_state
 

Additional Inherited Members

- Public Types inherited from SurgSim::Device::SystemInputDeviceHandle
typedef std::array< int,
MAX_NUM_AXES
AxisStates
 Type used to store axis states. More...
 
typedef std::array< bool,
MAX_NUM_BUTTONS
ButtonStates
 Type used to store button states. More...
 
- Static Public Attributes inherited from SurgSim::Device::SystemInputDeviceHandle
static const size_t MAX_NUM_AXES = 6
 The maximum number of axes supported by any device object. More...
 
static const size_t MAX_NUM_BUTTONS = 4
 The maximum number of buttons supported by any device object. More...
 
- Protected Member Functions inherited from SurgSim::Device::SystemInputDeviceHandle
 SystemInputDeviceHandle ()
 Default constructor. More...
 

Detailed Description

Access to an input/HID device using the HID API from the Windows Driver Kit.

See also
SystemInputDeviceHandle

Constructor & Destructor Documentation

SurgSim::Device::WdkHidDeviceHandle::~WdkHidDeviceHandle ( )

Destructor.

SurgSim::Device::WdkHidDeviceHandle::WdkHidDeviceHandle ( std::shared_ptr< SurgSim::Framework::Logger > &&  logger)
explicitprivate

Constructor.

Cannot be called directly.

See also
open
SurgSim::Device::WdkHidDeviceHandle::WdkHidDeviceHandle ( const WdkHidDeviceHandle other)
private

Member Function Documentation

void SurgSim::Device::WdkHidDeviceHandle::cancelAsynchronousRead ( )
private

Cancels an asynchronous read from the device.

Should be executed in the context of the thread that called startAsynchronousRead.

void SurgSim::Device::WdkHidDeviceHandle::decodeStateUpdates ( const unsigned char *  rawData,
size_t  rawDataSize,
AxisStates axisStates,
ButtonStates buttonStates,
bool *  updated 
)
private

Decode the raw state update data received from the device.

Parameters
rawDataRaw state update data.
rawDataSizeSize of the raw state update data.
[in,out]axisStatesThe states for each axis of the device.
[in,out]buttonStatesThe states for each device button.
[out]updatedTrue if any states were actually updated. (Note that even if this value is true, the states may not have changed value; one or more states could have been updated to the same value.)
std::vector< std::string > SurgSim::Device::WdkHidDeviceHandle::enumeratePaths ( SurgSim::Framework::Logger logger)
static

Enumerates input devices.

Parameters
loggerThe logger to be used during enumeration.
Returns
A list of device paths.
bool SurgSim::Device::WdkHidDeviceHandle::finishAsynchronousRead ( size_t *  numBytesRead)
private

Checks if an asynchronous read from the device has completed.

Updates the internal flags to indicate the state of the device I/O.

Parameters
[out]numBytesReadIf the function returns true, the number of bytes read from the device.
Returns
true if data has been received; false if the asynchronous read is still pending or an error has occurred.
bool SurgSim::Device::WdkHidDeviceHandle::getCapabilities ( struct _HIDP_CAPS *  capabilities) const
private

Gets the device capabilities.

Parameters
[out]capabilitiesThe capabilities data for the device.
Returns
true if it succeeds.
bool SurgSim::Device::WdkHidDeviceHandle::getDeviceIds ( int *  vendorId,
int *  productId 
) const
overridevirtual

Gets the device identifiers.

Parameters
[out]vendorIdThe USB or PCI vendor identifier.
[out]productIdThe USB or PCI product identifier.
Returns
true if it succeeds.

Implements SurgSim::Device::SystemInputDeviceHandle.

std::string SurgSim::Device::WdkHidDeviceHandle::getDeviceName ( ) const
overridevirtual

Gets the name returned by the operating system for this device.

Returns
The reported name, or "???" if no name information could be found.

Implements SurgSim::Device::SystemInputDeviceHandle.

bool SurgSim::Device::WdkHidDeviceHandle::hasTranslationAndRotationAxes ( ) const
overridevirtual

Queries if this device has 3 translation and 3 rotation axes.

Returns
true if the desired axes are present.

Implements SurgSim::Device::SystemInputDeviceHandle.

std::unique_ptr< WdkHidDeviceHandle > SurgSim::Device::WdkHidDeviceHandle::open ( const std::string &  path,
std::shared_ptr< SurgSim::Framework::Logger logger 
)
static

Opens the given path and creates an access wrapper for the device.

Parameters
pathFull pathname for the device.
loggerThe logger to be used by the device.
Returns
The created device object, or an empty unique_ptr on failure.
WdkHidDeviceHandle& SurgSim::Device::WdkHidDeviceHandle::operator= ( const WdkHidDeviceHandle other)
private
void SurgSim::Device::WdkHidDeviceHandle::prepareForShutdown ( )
overridevirtual

Prepares the handle for sampling thread shutdown.

Should be called from the same thread that was calling updateStates, after the calls to updateStates have been stopped, but before object destruction.

Reimplemented from SurgSim::Device::SystemInputDeviceHandle.

bool SurgSim::Device::WdkHidDeviceHandle::startAsynchronousRead ( )
private

Starts an asynchronous read from the device.

Updates the internal flags to indicate the state of the device I/O.

Returns
true if an asynchronous read has been started, or the read has already completed synchronously.
bool SurgSim::Device::WdkHidDeviceHandle::updateStates ( AxisStates axisStates,
ButtonStates buttonStates,
bool *  updated 
)
overridevirtual

Updates the axis and states from the device input, if any.

Parameters
[in,out]axisStatesThe states for each axis of the device.
[in,out]buttonStatesThe states for each device button.
[out]updatedTrue if any states were actually updated. (Note that even if this value is true, the states may not have changed value; one or more states could have been updated to the same value.)
Returns
true if the operation was successful; false if the device is no longer in a usable state.

Implements SurgSim::Device::SystemInputDeviceHandle.

Member Data Documentation

std::unique_ptr<State> SurgSim::Device::WdkHidDeviceHandle::m_state
private

The documentation for this class was generated from the following files: