from ctypes import (
Structure,
c_bool,
c_char,
c_char_p,
c_double,
c_float,
c_int,
c_long,
c_uint,
c_ulong,
)
# Defining base HD data types
HDint = c_int
HDuint = c_uint
HDboolean = c_bool
HDulong = c_ulong
HDfloat = c_float
HDdouble = c_double
HDlong = c_long
HDchar = c_char
HDerror = c_uint
HDenum = c_uint
HDstring = c_char_p
HHD = c_uint
HDCallbackCode = c_uint
[docs]
class HDErrorInfo(Structure):
_fields_ = [("errorCode", HDerror), ("internalErrorCode", c_int), ("hHD", HHD)]
# Callback
HD_CALLBACK_DONE = 0
HD_CALLBACK_CONTINUE = 1
# Boolean
HD_TRUE = 1
HD_FALSE = 0
# Version information
HD_VERSION_MAJOR_NUMBER = 3
HD_VERSION_MINOR_NUMBER = 30
HD_VERSION_BUILD_NUMBER = 0
############################################
############## ERROR CODES #################
############################################
HD_SUCCESS = 0x000
# Function errors
HD_INVALID_ENUM = 0x0100
HD_INVALID_VALUE = 0x0101
HD_INVALID_OPERATION = 0x0103
HD_BAD_HANDLE = 0x0104
# Force errors
HD_WARM_MOTORS = 0x0200
HD_EXCEED_MAX_FORCE = 0x0201
HD_EXCEEDED_MAX_FORCE_IMPULSE = 0x0202
HD_EXCEEDED_MAX_VELOCITY = 0x0203
HD_FORCE_ERROR = 0x0204
# Device errors
HD_DEVICE_FAULT = 0x0300
HD_DEVICE_ALREADY_INITIATED = 0x0301
HD_COMM_ERROR = 0x0302
HD_COMM_CONFIG_ERROR = 0x0303
HD_TIMER_ERROR = 0x0304
# Haptic rendering context
HD_ILLEGAL_BEGIN = 0x0400
HD_ILLEGAL_END = 0x0401
HD_FRAME_ERROR = 0x0402
# Scheduler errors
HD_INVALID_PRIORITY = 0x0500
HD_SCHEDULER_FULL = 0x0501
# Licensing errors
HD_INVALID_LICENSE = 0x0600
############################################
############# GET PARAMETERS ###############
############################################
# Raw values
HD_CURRENT_BUTTONS = 0x2000
HD_CURRENT_SAFETY_SWITCH = 0x2001
HD_CURRENT_INKWELL_SWITCH = 0x2002
HD_CURRENT_ENCODER_VALUES = 0x2010
HD_CURRENT_PINCH_VALUE = 0x2011
HD_LAST_PINCH_VALUE = 0x2012
# Cartesian space values
HD_CURRENT_POSITION = 0x2050
HD_CURRENT_VELOCITY = 0x2051
HD_CURRENT_TRANSFORM = 0x2052
HD_CURRENT_ANGULAR_VELOCITY = 0x2053
HD_CURRENT_JACOBIAN = 0x2054
# Joint space values
HD_CURRENT_JOINT_ANGLES = 0x2100
HD_CURRENT_GIMBAL_ANGLES = 0x2150
HD_LAST_BUTTONS = 0x2200
HD_LAST_SAFETY_SWITCH = 0x2201
HD_LAST_INKWELL_SWITCH = 0x2202
HD_LAST_ENCODER_VALUES = 0x2210
HD_LAST_POSITION = 0x2250
HD_LAST_VELOCITY = 0x2251
HD_LAST_TRANSFORM = 0x2252
HD_LAST_ANGULAR_VELOCITY = 0x2253
HD_LAST_JACOBIAN = 0x2254
HD_LAST_JOINT_ANGLES = 0x2300
HD_LAST_GIMBAL_ANGLES = 0x2350
# Identification
HD_VERSION = 0x2500
HD_DEVICE_MODEL_TYPE = 0x2501
HD_DEVICE_DRIVER_VERSION = 0x2502
HD_DEVICE_VENDOR = 0x2503
HD_DEVICE_SERIAL_NUMBER = 0x2504
HD_DEVICE_FIRMWARE_VERSION = 0x2505
# Device hardware properties
HD_MAX_WORKSPACE_DIMENSIONS = 0x2550
HD_USABLE_WORKSPACE_DIMENSIONS = 0x2551
HD_TABLETOP_OFFSET = 0x2552
HD_INPUT_DOF = 0x2553
HD_OUTPUT_DOF = 0x2554
HD_CALIBRATION_STYLE = 0x2555
# Device forces and measurements
HD_UPDATE_RATE = 0x2600
HD_INSTANTANEOUS_UPDATE_RATE = 0x2601
HD_NOMINAL_MAX_STIFFNESS = 0x2602
HD_NOMINAL_MAX_DAMPING = 0x2609
HD_NOMINAL_MAX_FORCE = 0x2603
HD_NOMINAL_MAX_CONTINUOUS_FORCE = 0x2604
HD_MOTOR_TEMPERATURE = 0x2605
HD_SOFTWARE_VELOCITY_LIMIT = 0x2606
HD_SOFTWARE_FORCE_IMPULSE_LIMIT = 0x2607
HD_FORCE_RAMPING_RATE = 0x2608
HD_NOMINAL_MAX_TORQUE_STIFFNESS = 0x2620
HD_NOMINAL_MAX_TORQUE_DAMPING = 0x2621
HD_NOMINAL_MAX_TORQUE_FORCE = 0x2622
HD_NOMINAL_MAX_TORQUE_CONTINUOUS_FORCE = 0x2623
# Cartesian space values
HD_CURRENT_FORCE = 0x2700
HD_CURRENT_TORQUE = 0x2701
HD_JOINT_ANGLE_REFERENCES = 0x2702
# Joint space values
HD_CURRENT_JOINT_TORQUE = 0x2703
HD_CURRENT_GIMBAL_TORQUE = 0x2704
# Motor space values
HD_LAST_FORCE = 0x2800
HD_LAST_TORQUE = 0x2801
HD_LAST_JOINT_TORQUE = 0x2802
HD_LAST_GIMBAL_TORQUE = 0x2803
# LED status light
HD_USER_STATUS_LIGHT = 0x2900
############################################
############# SET PARAMETERS ###############
############################################
# Enable/Disable capabilities
HD_FORCE_OUTPUT = 0x4000
HD_MAX_FORCE_CLAMPING = 0x4001
HD_FORCE_RAMPING = 0x4002
HD_SOFTWARE_FORCE_LIMIT = 0x4003
HD_ONE_FRAME_LIMIT = 0x4004
############################################
############## MISCELLANEOUS ###############
############################################
# Scheduler priority ranges
HD_MAX_SCHEDULER_PRIORITY = (1 << 16) - 1
HD_MIN_SCHEDULER_PRIORITY = 0
HD_DEFAULT_SCHEDULER_PRIORITY = (
HD_MAX_SCHEDULER_PRIORITY + HD_MIN_SCHEDULER_PRIORITY
) / 2
# Calibration return values
HD_CALIBRATION_OK = 0x5000
HD_CALIBRATION_NEEDS_UPDATE = 0x5001
HD_CALIBRATION_NEEDS_MANUAL_INPUT = 0x5002
# Calibration styles
HD_CALIBRATION_ENCODER_RESET = 1 << 0
HD_CALIBRATION_AUTO = 1 << 1
HD_CALIBRATION_INKWELL = 1 << 2
# Button Masks
HD_DEVICE_BUTTON_1 = 1 << 0
HD_DEVICE_BUTTON_2 = 1 << 1
HD_DEVICE_BUTTON_3 = 1 << 2
HD_DEVICE_BUTTON_4 = 1 << 3
# Null device handle
HD_INVALID_HANDLE = 0xFFFFFFFF
# Used by device initialization
HD_DEFAULT_DEVICE = None
# LED status light states
LED_MASK = 0x07
LED_STATUS_FAST_GRNYEL = 0x00
LED_STATUS_SLOW_YEL = 0x01
LED_STATUS_SLOW_GRN = 0x02
LED_STATUS_FAST_GRN = 0x03
LED_STATUS_SOLID_GRNYEL = 0x04
LED_STATUS_SOLID_YEL = 0x05
LED_STATUS_SOLID_GRN = 0x06
LED_STATUS_FAST_YEL = 0x07