# Release 0.1.0rc1 (November 1, 2023)

Refactor of Force Dimension SDK bindings from the `forcedimension` v0.1.6 package. All functionality is maintained from that release as well as some minor typo fixes.

Targets: Force Dimension SDK 3.14.0+

 A summary of implemented functions is shown below.

Implemented DHD Functions:
- `dhd.close()`
- `dhd.configAngularVelocity()`
- `dhd.configGripperVelocity()`
- `dhd.configLinearVelocity()`
- `dhd.emulateButton()`
- `dhd.enableForce()`
- `dhd.enableGripperForce()`
- `dhd.enableSimulator()`
- `dhd.errorGetLast()`
- `dhd.errorGetLastStr()`
- `dhd.errorGetStr()`
- `dhd.getAngularVelocityDeg()`
- `dhd.getAngularVelocityRad()`
- `dhd.getAvailableCount()`
- `dhd.getBaseAngleXDeg()`
- `dhd.getBaseAngleXRad()`
- `dhd.getBaseAngleZDeg()`
- `dhd.getBaseAngleZRad()`
- `dhd.getButton()`
- `dhd.getButtonMask()`
- `dhd.getComFreq()`
- `dhd.getComMode()`
- `dhd.getDeviceAngleDeg()`
- `dhd.getDeviceAngleRad()`
- `dhd.getDeviceCount()`
- `dhd.getDeviceID()`
- `dhd.getEffectorMass()`
- `dhd.getForce()`
- `dhd.getForceAndTorque()`
- `dhd.getForceAndTorqueAndGripperForce()`
- `dhd.getGripperAngleDeg()`
- `dhd.getGripperAngleRad()`
- `dhd.getGripperAngularVelocityDeg()`
- `dhd.getGripperAngularVelocityRad()`
- `dhd.getGripperFingerPos()`
- `dhd.getGripperGap()`
- `dhd.getGripperLinearVelocity()`
- `dhd.getGripperThumbPos()`
- `dhd.getLinearVelocity()`
- `dhd.getMaxForce()`
- `dhd.getMaxGripperForce()`
- `dhd.getMaxTorque()`
- `dhd.getOrientationDeg()`
- `dhd.getOrientationFrame()`
- `dhd.getOrientationRad()`
- `dhd.getPosition()`
- `dhd.getPositionAndOrientationDeg()`
- `dhd.getPositionAndOrientationFrame()`
- `dhd.getPositionAndOrientationRad()`
- `dhd.getSDKVersion()`
- `dhd.getSerialNumber()`
- `dhd.getStatus()`
- `dhd.getSystemName()`
- `dhd.getSystemType()`
- `dhd.getVersion()`
- `dhd.hasActiveGripper()`
- `dhd.hasActiveWrist()`
- `dhd.hasBase()`
- `dhd.hasGripper()`
- `dhd.hasWrist()`
- `dhd.isLeftHanded()`
- `dhd.open()`
- `dhd.openID()`
- `dhd.openSerial()`
- `dhd.openType()`
- `dhd.reset()`
- `dhd.setBaseAngleXDeg()`
- `dhd.setBaseAngleXRad()`
- `dhd.setBaseAngleZDeg()`
- `dhd.setBaseAngleZRad()`
- `dhd.setBrakes()`
- `dhd.setDevice()`
- `dhd.setDeviceAngleDeg()`
- `dhd.setDeviceAngleRad()`
- `dhd.setEffectorMass()`
- `dhd.setForce()`
- `dhd.setForceAndGripperForce()`
- `dhd.setForceAndTorque()`
- `dhd.setForceAndTorqueAndGripperForce()`
- `dhd.setGravityCompensation()`
- `dhd.setMaxForce()`
- `dhd.setMaxGripperForce()`
- `dhd.setMaxTorque()`
- `dhd.setOutput()`
- `dhd.setStandardGravity()`
- `dhd.setVibration()`
- `dhd.stop()`
- `dhd.waitForReset()`

Implemented DHD Expert Mode Functions:
- `dhd.expert.deltaEncoderToPosition()`
- `dhd.expert.deltaEncodersToJointAngles()`
- `dhd.expert.deltaForceToMotor()`
- `dhd.expert.deltaGravityJointTorques()`
- `dhd.expert.deltaJointAnglesToEncoders()`
- `dhd.expert.deltaJointAnglesToJacobian()`
- `dhd.expert.deltaJointTorquesExtrema()`
- `dhd.expert.deltaMotorToForce()`
- `dhd.expert.deltaPositionToEncoder()`
- `dhd.expert.disableExpertMode()`
- `dhd.expert.enableExpertMode()`
- `dhd.expert.getDeltaEncoders()`
- `dhd.expert.getDeltaJacobian()`
- `dhd.expert.getDeltaJointAngles()`
- `dhd.expert.getEnc()`
- `dhd.expert.getEncRange()`
- `dhd.expert.getEncVelocities()`
- `dhd.expert.getEncoder()`
- `dhd.expert.getGripperEncoder()`
- `dhd.expert.getJointAngles()`
- `dhd.expert.getJointVelocities()`
- `dhd.expert.getVelocityThreshold()`
- `dhd.expert.getWatchdog()`
- `dhd.expert.getWristEncoders()`
- `dhd.expert.getWristJacobian()`
- `dhd.expert.getWristJointAngles()`
- `dhd.expert.gripperAngleRadToEncoder()`
- `dhd.expert.gripperEncoderToAngleRad()`
- `dhd.expert.gripperEncoderToGap()`
- `dhd.expert.gripperForceToMotor()`
- `dhd.expert.gripperGapToEncoder()`
- `dhd.expert.gripperMotorToForce()`
- `dhd.expert.jointAnglesToIntertiaMatrix()`
- `dhd.expert.preloadMot()`
- `dhd.expert.preset()`
- `dhd.expert.setBrk()`
- `dhd.expert.setComMode()`
- `dhd.expert.setDeltaJointTorques()`
- `dhd.expert.setDeltaMotor()`
- `dhd.expert.setForceAndWristJointTorques()`
- `dhd.expert.setForceAndWristJointTorquesAndGripperForce()`
- `dhd.expert.setGripperMotor()`
- `dhd.expert.setMot()`
- `dhd.expert.setMotor()`
- `dhd.expert.setTimeGuard()`
- `dhd.expert.setVelocityThreshold()`
- `dhd.expert.setWatchdog()`
- `dhd.expert.setWristJointTorques()`
- `dhd.expert.setWristMotor()`
- `dhd.expert.updateEncoders()`
- `dhd.expert.wristEncoderToOrientation()`
- `dhd.expert.wristEncodersToJointAngles()`
- `dhd.expert.wristGravityJointTorques()`
- `dhd.expert.wristJointAnglesToEncoders()`
- `dhd.expert.wristJointAnglesToJacobian()`
- `dhd.expert.wristJointTorquesExtrema()`
- `dhd.expert.wristMotorToTorque()`
- `dhd.expert.wristOrientationToEncoder()`
- `dhd.expert.wristTorqueToMotor()`

Implemented DHD OS Independent Functions:
- `dhd.os_independent.getTime()`
- `dhd.os_independent.kbGet()`
- `dhd.os_independent.kbHit()`
- `dhd.os_independent.sleep()`
- `dhd.os_independent.startThread()`

Implemented DRD Functions:
- `drd.autoInit()`
- `drd.checkInit()`
- `drd.close()`
- `drd.enableFilter()`
- `drd.enableSimulator()`
- `drd.getComFreq()`
- `drd.getDeviceID()`
- `drd.getEncDGain()`
- `drd.getEncIGain()`
- `drd.getEncMoveParam()`
- `drd.getEncPGain()`
- `drd.getEncTrackParam()`
- `drd.getLinearVelocity()`
- `drd.getMotRatioMax()`
- `drd.getPosMoveParam()`
- `drd.getPosTrackParam()`
- `drd.getPositionAndOrientation()`
- `drd.getPriorities()`
- `drd.hold()`
- `drd.isFiltering()`
- `drd.isInitialized()`
- `drd.isMoving()`
- `drd.isRunning()`
- `drd.isSupported()`
- `drd.moveTo()`
- `drd.moveToAllEnc()`
- `drd.moveToEnc()`
- `drd.moveToGrip()`
- `drd.moveToPos()`
- `drd.moveToRot()`
- `drd.open()`
- `drd.openID()`
- `drd.regulateGrip()`
- `drd.regulatePos()`
- `drd.regulateRot()`
- `drd.setDevice()`
- `drd.setEncDGain()`
- `drd.setEncIGain()`
- `drd.setEncMoveParam()`
- `drd.setEncPGain()`
- `drd.setEncTrackParam()`
- `drd.setMotRatioMax()`
- `drd.setPosMoveParam()`
- `drd.setPosTrackParam()`
- `drd.setPriorities()`
- `drd.start()`
- `drd.stop()`
