File ManusSDKTypes.h
File List > api > cppSDK > SDKClient > ManusSDKTypes.h
Go to the documentation of this file
#ifndef __MANUS_SDK_TYPES_H__
#define __MANUS_SDK_TYPES_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
/******************************************************************************
* Preprocessor defines.
*****************************************************************************/
#define NUM_FINGERS_ON_HAND 5
#define NUM_FLEX_SEGMENTS_PER_FINGER 2
#define MAX_NUM_IMUS_ON_GLOVE (NUM_FINGERS_ON_HAND + 1)
#define MAX_USERS 8 // we should never reach that
#define MAX_NUM_CHARS_IN_USERNAME 64
#define MAX_NUM_CHARS_IN_MEASUREMENT 64
#define MAX_NUM_CHARS_IN_HOST_NAME 256
#define MAX_NUM_CHARS_IN_IP_ADDRESS 40
#define MAX_NUM_CHARS_IN_TRACKER_ID 32
#define MAX_NUM_CHARS_IN_TRACKER_MANUFACTURER 32
#define MAX_NUM_CHARS_IN_TRACKER_PRODUCTNAME 32
#define MAX_NUM_CHARS_IN_TARGET_ID 32
#define MAX_NUM_CHARS_IN_VERSION 16
#define UNINITIALIZED_ID 0
#define MAX_NUMBER_OF_HOSTS 100
#define MAX_NUMBER_OF_DONGLES 16 // we only have 35 radio channels available. if we got 16 dongles, expect wireless issues! and no 16 usb ports is also not likely.
#define MAX_NUM_CHARS_IN_LICENSE_TYPE 64
#define MAX_NUMBER_OF_GLOVES (MAX_NUMBER_OF_DONGLES* 2)
#define MAX_NUMBER_OF_HAPTICS_DONGLES MAX_NUMBER_OF_DONGLES
#define MAX_NUMBER_OF_SKELETONS 32
#define MAX_NUMBER_OF_USERS MAX_NUMBER_OF_DONGLES
#define NUMBER_OF_TRACKERS_PER_POLYGON_SKELETON 8
#define MAX_NUMBER_OF_TRACKERS (MAX_NUMBER_OF_USERS * NUMBER_OF_TRACKERS_PER_POLYGON_SKELETON)
#define MAX_NUM_CHARS_IN_NODE_NAME 256 // this is for a UTF8 string , NOT an ASCII CHAR array (same base type though)
#define MAX_CHAIN_LENGTH 32
#define MAX_NUM_FINGER_IDS 10
#define MAX_NUM_TOE_IDS 10
#define MAX_NUM_CHARS_IN_SYSTEM_ERROR_MESSAGE 256
#define MAX_NUM_CHAR_DEBUGGING_ID 64
#define MAX_NUMBER_OF_ERGONOMICS_DATA MAX_NUMBER_OF_GLOVES
#define MAX_NUMBER_OF_SESSIONS 8 // this is not the real limit for Core but just for the SDKClient to handle
#define MAX_NUMBER_OF_SKELETONS_PER_SESSION 32
#define MAX_NUM_CHARS_IN_SKELETON_NAME 256 // we already encountered 34 char names in unreal, but its utf8 so enbiggen even more!
#define MAX_NUM_CHARS_IN_TIMECODE_INTERFACE_STRINGS 64
#define MAX_NUMBER_OF_AUDIO_INTERFACES 32
#define MAX_BONE_WEIGHTS_PER_VERTEX 4
#define MAX_NUMBER_OF_NODES_PER_ESTIMATION_SKELETON 40
#define MAX_GESTURE_DATA_CHUNK_SIZE 64
#define MAX_NUM_CHARS_IN_OPENXR_FEATURE_STRING 64
#define MAX_NUMBER_OF_NETDEVICES MAX_NUMBER_OF_DONGLES
#define BROADCAST_ADDRESS "255.255.255.255"
#define BROADCAST_PORT "62687"
#define SECONDS_TO_FIND_HOSTS 2
#define SECONDS_TO_FIND_LOCAL_HOSTS 2
#define DEFAULT_BUFFER_SIZE 512
/******************************************************************************
* Enums.
*****************************************************************************/
typedef enum SDKReturnCode
{
SDKReturnCode_Success,
SDKReturnCode_Error,
SDKReturnCode_InvalidArgument,
SDKReturnCode_ArgumentSizeMismatch,
SDKReturnCode_UnsupportedStringSizeEncountered,
SDKReturnCode_SdkNotAvailable,
SDKReturnCode_HostFinderNotAvailable,
SDKReturnCode_DataNotAvailable,
SDKReturnCode_MemoryError,
SDKReturnCode_InternalError,
SDKReturnCode_FunctionCalledAtWrongTime,
SDKReturnCode_NotConnected,
SDKReturnCode_ConnectionTimeout,
SDKReturnCode_InvalidID,
SDKReturnCode_NullPointer,
SDKReturnCode_InvalidSequence,
SDKReturnCode_NoCoordinateSystemSet,
SDKReturnCode_SdkIsTerminating,
SDKReturnCode_StubNullPointer,
SDKReturnCode_SkeletonNotLoaded,
SDKReturnCode_FunctionNotAvailable,
SDKReturnCode_MAX_SIZE
} SDKReturnCode;
typedef enum SessionType
{
SessionType_Unknown,
SessionType_UnityPlugin,
SessionType_UnrealPlugin,
SessionType_CoreSDK,
SessionType_Xsens,
SessionType_Optitrack,
SessionType_MotionBuilder,
SessionType_VRED,
SessionType_OpenXR,
SessionType_Qualisys
} SessionType;
typedef enum TrackerType
{
TrackerType_Unknown,
TrackerType_Head,
TrackerType_Waist,
TrackerType_LeftHand,
TrackerType_RightHand,
TrackerType_LeftFoot,
TrackerType_RightFoot,
TrackerType_LeftUpperArm,
TrackerType_RightUpperArm,
TrackerType_LeftUpperLeg,
TrackerType_RightUpperLeg,
TrackerType_Controller,
TrackerType_Camera,
TrackerType_MAX_SIZE
} TrackerType;
typedef enum TrackingQuality
{
TrackingQuality_Untrackable,
TrackingQuality_BadTracking,
TrackingQuality_Trackable,
} TrackerQuality;
typedef enum TrackerSystemType
{
TrackerSystemType_Unknown,
TrackerSystemType_Antilatency,
TrackerSystemType_ART,
TrackerSystemType_OpenVR,
TrackerSystemType_Optitrack,
TrackerSystemType_Vicon,
TrackerSystemType_OpenXR,
} TrackerSystemType;
typedef enum DevicePairedState
{
DevicePairedState_Unknown,
DevicePairedState_Paired,
DevicePairedState_Unpaired,
DevicePairedState_Pairing,
} DevicePairedState;
typedef enum DeviceClassType
{
DeviceClassType_Unknown,
DeviceClassType_Dongle,
DeviceClassType_Glove,
DeviceClassType_Glongle
} DeviceClassType;
typedef enum DeviceFamilyType
{
DeviceFamilyType_Unknown,
DeviceFamilyType_Prime1,
DeviceFamilyType_Prime2,
DeviceFamilyType_PrimeX, // TODO obsolete?
DeviceFamilyType_Quantum,
DeviceFamilyType_Prime3,
DeviceFamilyType_Virtual
} DeviceFamilyType;
typedef enum ProfileType
{
ProfileType_Hands,
ProfileType_FullBody,
ProfileType_MAX_SIZE
} ProfileType;
typedef enum MeasurementType
{
MeasurementType_Unknown,
MeasurementType_PlayerHeight,
MeasurementType_SpineLength,
MeasurementType_NeckLength,
MeasurementType_UpperArmLength,
MeasurementType_LowerArmLength,
MeasurementType_ArmLength,
MeasurementType_ArmSpan,
MeasurementType_UpperLegLength,
MeasurementType_LowerLegLength,
MeasurementType_LegLength,
MeasurementType_HandLength,
MeasurementType_FootLength,
MeasurementType_HipWidth,
MeasurementType_ShoulderWidth,
MeasurementType_ShoulderHeight,
MeasurementType_HeadLength,
MeasurementType_Thickness,
MeasurementType_ArmRatio,
MeasurementType_LegRatio,
MeasurementType_MAX_SIZE // Warning, this value is used to define the UserProfile.Measurement[SIZE]
} MeasurementType;
typedef enum TrackerOffsetType
{
TrackerOffsetType_Unknown,
TrackerOffsetType_HeadTrackerToHead,
TrackerOffsetType_HeadTrackerToTopOfHead,
TrackerOffsetType_LeftHandTrackerToWrist,
TrackerOffsetType_RightHandTrackerToWrist,
TrackerOffsetType_LeftFootTrackerToAnkle,
TrackerOffsetType_RightFootTrackerToAnkle,
TrackerOffsetType_HipTrackerToHip,
TrackerOffsetType_HipTrackerToLeftLeg,
TrackerOffsetType_HipTrackerToRightLeg,
TrackerOffsetType_LeftUpperArmTrackerToElbow,
TrackerOffsetType_RightUpperArmTrackerToElbow,
TrackerOffsetType_LeftUpperArmTrackerToShoulder,
TrackerOffsetType_RightUpperArmTrackerToShoulder,
TrackerOffsetType_MAX_SIZE // Warning, this value is used to define the UserProfile.TrackerOffset[SIZE]
} TrackerOffsetType;
typedef enum ExtraTrackerOffsetType
{
ExtraTrackerOffsetType_Unknown,
ExtraTrackerOffsetType_HeadForward,
ExtraTrackerOffsetType_HipForward,
ExtraTrackerOffsetType_HipHeight,
ExtraTrackerOffsetType_MAX_SIZE // Warning, this value is used to define the UserProfile.TrackerOffset[SIZE]
} ExtraTrackerOffsetType;
typedef enum MeasurementUnit
{
MeasurementUnit_Meters,
MeasurementUnit_Percentage,
} MeasurementUnit;
typedef enum MeasurementCategory
{
MeasurementCategory_Misc,
MeasurementCategory_Generic,
MeasurementCategory_Arms,
MeasurementCategory_Legs,
MeasurementCategory_Body,
} MeasurementCategory;
typedef enum UpdateStatusEnum
{
UpdateStatusEnum_Unknown,
UpdateStatusEnum_NoUpdateAvailable,
UpdateStatusEnum_UpdateAvailable,
UpdateStatusEnum_MandatoryUpdateAvailable,
UpdateStatusEnum_Updating,
} UpdateStatusEnum;
typedef enum SkeletonType
{
SkeletonType_Invalid,
SkeletonType_Hand,
SkeletonType_Body,
SkeletonType_Both
} SkeletonType;
typedef enum SkeletonTargetType
{
SkeletonTargetType_Invalid,
SkeletonTargetType_UserData,
SkeletonTargetType_UserIndexData,
SkeletonTargetType_AnimationData,
SkeletonTargetType_GloveData
} SkeletonTargetType;
typedef enum NodeType
{
NodeType_Invalid,
NodeType_Joint,
NodeType_Mesh,
NodeType_Leaf,
NodeType_Collider
} NodeType;
typedef enum NodeSettingsFlag
{
NodeSettingsFlag_None = 0,
NodeSettingsFlag_IK = 1 << 0,
NodeSettingsFlag_Foot = 1 << 1,
NodeSettingsFlag_RotationOffset = 1 << 2,
NodeSettingsFlag_Leaf = 1 << 3,
} NodeSettingsFlag;
typedef enum ChainType
{
ChainType_Invalid,
ChainType_Arm,
ChainType_Leg,
ChainType_Neck,
ChainType_Spine,
ChainType_FingerThumb,
ChainType_FingerIndex,
ChainType_FingerMiddle,
ChainType_FingerRing,
ChainType_FingerPinky,
ChainType_Pelvis,
ChainType_Head,
ChainType_Shoulder,
ChainType_Hand,
ChainType_Foot,
ChainType_Toe
} ChainType;
typedef enum CollisionType
{
CollisionType_None,
CollisionType_Discrete,
CollisionType_Continuous,
} CollisionType;
typedef enum ColliderType
{
ColliderType_Invalid,
ColliderType_Sphere,
ColliderType_Capsule,
ColliderType_Box,
} ColliderType;
typedef enum Side
{
Side_Invalid,
Side_Left,
Side_Right,
Side_Center
} Side;
typedef enum HandMotion
{
HandMotion_None,
HandMotion_IMU,
HandMotion_Tracker,
HandMotion_Tracker_RotationOnly,
HandMotion_Auto
} HandMotion;
typedef enum AxisDirection
{
AxisDirection_Invalid,
AxisDirection_Backward,
AxisDirection_Left,
AxisDirection_Down,
AxisDirection_Up,
AxisDirection_Right,
AxisDirection_Forward
} AxisDirection;
typedef enum AxisView
{
AxisView_Invalid,
AxisView_ZFromViewer,
AxisView_YFromViewer,
AxisView_XFromViewer,
AxisView_XToViewer,
AxisView_YToViewer,
AxisView_ZToViewer
} AxisView;
typedef enum AxisPolarity
{
AxisPolarity_Invalid,
AxisPolarity_NegativeZ,
AxisPolarity_NegativeY,
AxisPolarity_NegativeX,
AxisPolarity_PositiveX,
AxisPolarity_PositiveY,
AxisPolarity_PositiveZ
} AxisPolarity;
typedef enum SystemMessageType
{
SystemMessageType_Unknown,
SystemMessageType_LibDebugReplugDongle,
SystemMessageType_LibDebugRxStall,
SystemMessageType_LibDebugTxStall,
SystemMessageType_TrackerError,
SystemMessageType_TrackerOk,
SystemMessageType_TrackerSystemOutOfDate,
SystemMessageType_GloveSanityErrorPSOCInit,
SystemMessageType_GloveSanityErrorQCBatV,
SystemMessageType_GloveSanityErrorQCLRACalib,
SystemMessageType_GloveSanityErrorQCFlexInit,
SystemMessageType_GloveSanityErrorQCIMUInit,
SystemMessageType_GloveSanityErrorQCIMUCalib,
SystemMessageType_GloveSanityErrorQCID,
SystemMessageType_GloveSanityErrorQCInterCPU,
SystemMessageType_SessionConnectionVersionMismatch,
SystemMessageType_TemporarySkeletonModified,
SystemMessageType_SessionRefusedDueToLicenseIssue,
SystemMessageType_LaunchDevTools
} SystemMessageType;
typedef enum ErgonomicsDataType
{
// ErgonomicsDataType_Invalid,
ErgonomicsDataType_LeftFingerThumbMCPSpread,
ErgonomicsDataType_LeftFingerThumbMCPStretch,
ErgonomicsDataType_LeftFingerThumbPIPStretch,
ErgonomicsDataType_LeftFingerThumbDIPStretch,
ErgonomicsDataType_LeftFingerIndexMCPSpread,
ErgonomicsDataType_LeftFingerIndexMCPStretch,
ErgonomicsDataType_LeftFingerIndexPIPStretch,
ErgonomicsDataType_LeftFingerIndexDIPStretch,
ErgonomicsDataType_LeftFingerMiddleMCPSpread,
ErgonomicsDataType_LeftFingerMiddleMCPStretch,
ErgonomicsDataType_LeftFingerMiddlePIPStretch,
ErgonomicsDataType_LeftFingerMiddleDIPStretch,
ErgonomicsDataType_LeftFingerRingMCPSpread,
ErgonomicsDataType_LeftFingerRingMCPStretch,
ErgonomicsDataType_LeftFingerRingPIPStretch,
ErgonomicsDataType_LeftFingerRingDIPStretch,
ErgonomicsDataType_LeftFingerPinkyMCPSpread,
ErgonomicsDataType_LeftFingerPinkyMCPStretch,
ErgonomicsDataType_LeftFingerPinkyPIPStretch,
ErgonomicsDataType_LeftFingerPinkyDIPStretch,
ErgonomicsDataType_RightFingerThumbMCPSpread,
ErgonomicsDataType_RightFingerThumbMCPStretch,
ErgonomicsDataType_RightFingerThumbPIPStretch,
ErgonomicsDataType_RightFingerThumbDIPStretch,
ErgonomicsDataType_RightFingerIndexMCPSpread,
ErgonomicsDataType_RightFingerIndexMCPStretch,
ErgonomicsDataType_RightFingerIndexPIPStretch,
ErgonomicsDataType_RightFingerIndexDIPStretch,
ErgonomicsDataType_RightFingerMiddleMCPSpread,
ErgonomicsDataType_RightFingerMiddleMCPStretch,
ErgonomicsDataType_RightFingerMiddlePIPStretch,
ErgonomicsDataType_RightFingerMiddleDIPStretch,
ErgonomicsDataType_RightFingerRingMCPSpread,
ErgonomicsDataType_RightFingerRingMCPStretch,
ErgonomicsDataType_RightFingerRingPIPStretch,
ErgonomicsDataType_RightFingerRingDIPStretch,
ErgonomicsDataType_RightFingerPinkyMCPSpread,
ErgonomicsDataType_RightFingerPinkyMCPStretch,
ErgonomicsDataType_RightFingerPinkyPIPStretch,
ErgonomicsDataType_RightFingerPinkyDIPStretch,
ErgonomicsDataType_MAX_SIZE
} ErgonomicsDataType;
typedef enum LicenseType
{
LicenseType_Undefined,
LicenseType_Polygon,
LicenseType_CoreXO,
LicenseType_CorePro,
LicenseType_CoreXOPro,
LicenseType_CoreX,
LicenseType_CoreO,
LicenseType_CoreQ,
LicenseType_CoreXPro,
LicenseType_CoreOPro,
LicenseType_CoreQPro,
LicenseType_CoreXOQPro,
LicenseType_CoreXR,
LicenseType_CorePrimeThree,
} LicenseType;
typedef enum TimecodeFPS
{
TimecodeFPS_Undefined,
TimecodeFPS_23_976,
TimecodeFPS_24,
TimecodeFPS_25,
TimecodeFPS_29_97,
TimecodeFPS_30,
TimecodeFPS_48,
TimecodeFPS_50,
TimecodeFPS_59_94,
TimecodeFPS_60,
TimecodeFPS_29_97DF,
TimecodeFPS_59_94DF,
} TimecodeFPS;
typedef enum FingerJointType
{
FingerJointType_Invalid,
FingerJointType_Metacarpal,
FingerJointType_Proximal,
FingerJointType_Intermediate,
FingerJointType_Distal, //thumb doesn't have it
FingerJointType_Tip
}FingerJointType;
/******************************************************************************
* Structs.
*****************************************************************************/
typedef struct ManusVec3
{
float x; //default = 0.0f;
float y; //default = 0.0f;
float z; //default = 0.0f;
} ManusVec3;
typedef struct ManusVec2
{
float x; //default = 0.0f;
float y; //default = 0.0f;
} ManusVec2;
typedef struct ManusQuaternion
{
float w; //default = 1.0f;
float x; //default = 0.0f;
float y; //default = 0.0f;
float z; //default = 0.0f;
} ManusQuaternion;
typedef struct ManusTransform
{
ManusVec3 position;
ManusQuaternion rotation;
ManusVec3 scale;
} ManusTransform;
typedef struct Color
{
float r; //default = 0.0f;
float g; //default = 0.0f;
float b; //default = 0.0f;
float a; //default = 0.0f;
}Color;
typedef struct ManusTimestampInfo
{
uint16_t fraction; //is either frame in timecode or miliseconds in non timecode
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t day; //is 0 in timecode
uint8_t month; //is 0 in timecode
uint32_t year; //is 0 in timecode
bool timecode;
} ManusTimestampInfo;
typedef struct ManusTimestamp
{
uint64_t time;
} ManusTimestamp;
typedef struct IMUCalibrationInfo
{
uint32_t mag; // Magnometer calibration level 0-3
uint32_t acc; // Accelerometer caibraton level 0-3
uint32_t gyr; // Gyroscope calibration level 0-3
uint32_t sys; // System accuracy
} IMUCalibrationInfo;
typedef struct Version
{
uint32_t major;
uint32_t minor;
uint32_t patch;
char label[MAX_NUM_CHARS_IN_VERSION];
char sha[MAX_NUM_CHARS_IN_VERSION];
char tag[MAX_NUM_CHARS_IN_VERSION];
} Version;
typedef struct FirmwareVersion
{
int32_t version;
ManusTimestamp timestamp;
} FirmwareVersion;
typedef struct ManusVersion
{
char versionInfo[MAX_NUM_CHARS_IN_VERSION];
} ManusVersion;
typedef struct ManusHost
{
char hostName[MAX_NUM_CHARS_IN_HOST_NAME]; // TODO utf8 compliant?
char ipAddress[MAX_NUM_CHARS_IN_IP_ADDRESS];
Version manusCoreVersion;
} ManusHost;
/******************************************************************************
* Tracking
*****************************************************************************/
typedef struct TrackerId
{
char id[MAX_NUM_CHARS_IN_TRACKER_ID]; // todo. make this UTF8 compliant ?
} TrackerId;
typedef struct TrackerData
{
ManusTimestamp lastUpdateTime; //default = 0;
TrackerId trackerId;
uint32_t userId; //default = 0;
bool isHmd; //default = false;
TrackerType trackerType; //default = TrackerType::TrackerType_Unknown;
ManusQuaternion rotation;
ManusVec3 position;
TrackingQuality quality; //default = TrackingQuality::TrackingQuality_Untrackable;
} TrackerData;
typedef struct TrackerStreamInfo
{
ManusTimestamp publishTime; //default = 0; // DateTime.UtcNow.
uint32_t trackerCount; //default = 0;
} TrackerStreamInfo;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Tracking
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Gesture Stream
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct GestureProbability
{
uint32_t id;
float percent;
} GestureProbability;
typedef struct GestureProbabilities
{
uint32_t id; //default = 0;
bool isUserID; //default = false;
uint32_t totalGestureCount; //default = 0;
GestureProbability gestureData[MAX_GESTURE_DATA_CHUNK_SIZE]; //default = { 0 };
uint32_t gestureCount; //default = 0;
} GestureProbabilities;
typedef struct GestureStreamInfo
{
ManusTimestamp publishTime; //default = 0; // DateTime.UtcNow.
uint32_t gestureProbabilitiesCount; //default = 0;
} GestureStreamInfo;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Gesture Stream
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Skeleton Stream
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct SkeletonNode
{
uint32_t id;
ManusTransform transform;
} SkeletonNode;
typedef struct SkeletonInfo
{
uint32_t id; //default = 0;
uint32_t nodesCount; //default = 0;
ManusTimestamp publishTime; //default = 0; // DateTime.UtcNow.
} SkeletonInfo;
typedef struct RawSkeletonInfo
{
uint32_t gloveId; //default = 0;
uint32_t nodesCount; //default = 0;
ManusTimestamp publishTime; //default = 0; // DateTime.UtcNow.
} RawSkeletonInfo;
typedef struct SkeletonStreamInfo
{
ManusTimestamp publishTime; //default = 0; // DateTime.UtcNow.
uint32_t skeletonsCount; //default = 0;
} SkeletonStreamInfo;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Skeleton Stream
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Ergonomics
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct ErgonomicsData
{
uint32_t id; //default = 0;
bool isUserID; //default = false;
float data[ErgonomicsDataType_MAX_SIZE]; //default = { 0 };
} ErgonomicsData;
typedef struct ErgonomicsStream
{
ManusTimestamp publishTime; //default = 0;
ErgonomicsData data[MAX_NUMBER_OF_ERGONOMICS_DATA];
uint32_t dataCount; //default = 0;
} ErgonomicsStream;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Ergonomics
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Landscape
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct DongleLandscapeData
{
uint32_t id;
DeviceClassType classType;
DeviceFamilyType familyType;
bool isHaptics;
Version hardwareVersion;
Version firmwareVersion;
ManusTimestamp firmwareTimestamp;
uint32_t chargingState;
int32_t channel;
UpdateStatusEnum updateStatus;
char licenseType[MAX_NUM_CHARS_IN_LICENSE_TYPE];
ManusTimestamp lastSeen; // this may be used in playback/recording TBD
uint32_t leftGloveID;
uint32_t rightGloveID;
LicenseType licenseLevel; //default = LicenseType::LicenseType_Undefined;
uint32_t netDeviceID;
} DongleLandscapeData;
typedef struct GloveLandscapeData
{
uint32_t id;
DeviceClassType classType;
DeviceFamilyType familyType;
Side side;
bool isHaptics;
DevicePairedState pairedState;
uint32_t dongleID;
Version hardwareVersion;
Version firmwareVersion;
ManusTimestamp firmwareTimestamp;
UpdateStatusEnum updateStatus;
uint32_t batteryPercentage;
int32_t transmissionStrength;
IMUCalibrationInfo iMUCalibrationInfo[MAX_NUM_IMUS_ON_GLOVE];
ManusTimestamp lastSeen; // this may be used in playback/recording TBD
bool excluded;
uint32_t netDeviceID;
} GloveLandscapeData;
typedef struct Measurement
{
MeasurementType entryType; //default = MeasurementType::MeasurementType_Unknown;
float value; //default = 0.0f;
MeasurementUnit unit; //default = MeasurementUnit_Meters;
MeasurementCategory category; //default = MeasurementCategory_Misc;
char displayName[MAX_NUM_CHARS_IN_MEASUREMENT];
} Measurement;
typedef struct TrackerOffset
{
TrackerOffsetType entryType;
ManusVec3 translation;
ManusQuaternion rotation;
} TrackerOffset;
typedef struct ExtraTrackerOffset
{
ExtraTrackerOffsetType entryType; //default = ExtraTrackerOffsetType::ExtraTrackerOffsetType_Unknown;
float value; //default = 0.0f;
} ExtraTrackerOffset;
typedef struct TrackerLandscapeData
{
char id[MAX_NUM_CHARS_IN_TRACKER_ID];
TrackerType type; //default = TrackerType::TrackerType_Unknown;
TrackerSystemType systemType; //default = TrackerSystemType::TrackerSystemType_Unknown;
uint32_t user; //default = 0;
bool isHMD; //default = false;
char manufacturer[MAX_NUM_CHARS_IN_TRACKER_MANUFACTURER]; // default = "Unknown"
char productName[MAX_NUM_CHARS_IN_TRACKER_PRODUCTNAME]; // default = "Unknown"
} TrackerLandscapeData;
typedef struct UserProfileLandscapeData
{
ProfileType profileType; //default = ProfileType::ProfileType_Hands;
Measurement measurements[MeasurementType_MAX_SIZE];
TrackerOffset trackerOffsets[TrackerOffsetType_MAX_SIZE];
ExtraTrackerOffset extraTrackerOffsets[ExtraTrackerOffsetType_MAX_SIZE];
} UserProfileLandscapeData;
typedef struct UserLandscapeData
{
uint32_t id; //default = 0;
char name[MAX_NUM_CHARS_IN_USERNAME];
Color color;
uint32_t dongleID; //default = 0;
uint32_t leftGloveID; //default = 0;
uint32_t rightGloveID; //default = 0;
UserProfileLandscapeData profile;
uint32_t userIndex; //default = 0;
} UserLandscapeData;
typedef struct SkeletonLandscapeData
{
uint32_t id; //default = 0;
char session[MAX_NUM_CHARS_IN_HOST_NAME];
uint32_t userId; //default = 0;
SkeletonType type; //default = SkeletonType::SkeletonType_Invalid;
char rootBoneName[MAX_NUM_CHARS_IN_NODE_NAME];
bool scaled; //default = false;
} SkeletonLandscapeData;
typedef struct DeviceLandscape
{
DongleLandscapeData dongles[MAX_NUMBER_OF_DONGLES];
uint32_t dongleCount; //default = 0;
GloveLandscapeData gloves[MAX_NUMBER_OF_GLOVES];
uint32_t gloveCount; //default = 0;
} DeviceLandscape;
typedef struct UserLandscape
{
UserLandscapeData users[MAX_USERS];
uint32_t userCount; //default = 0;
} UserLandscape;
typedef struct SkeletonLandscape
{
SkeletonLandscapeData skeletons[MAX_NUMBER_OF_SKELETONS];
uint32_t skeletonCount; //default = 0;
} SkeletonLandscape;
typedef struct TrackerLandscape
{
TrackerLandscapeData trackers[MAX_NUMBER_OF_TRACKERS];
uint32_t trackerCount; //default = 0;
} TrackerLandscape;
typedef struct LicenseInfo
{
bool sdkData; //default = false;
bool recordingAndPlayback; //default = false;
bool timeCode; //default = false;
bool unlimitedGloves; //default = false;
bool ergonomicData; //default = false;
bool xsensSession; //default = false;
bool optitrackSession; //default = false;
bool unitySession; //default = false;
bool unrealSession; //default = false;
bool mobuSession; //default = false;
bool qualisysSession; //default = false;
bool vredSession; //default = false;
} LicenseInfo;
typedef struct SettingsLandscape
{
Version manusCoreVersion;
LicenseInfo license;
bool playbackMode; //default = false;
bool ignoreSessionTimeOuts; //default = false;
FirmwareVersion firmwareOne;
FirmwareVersion firmwareTwo;
bool recordingMode; //default = false;
bool isNetDevice; // default = false;
bool isConnectedAsNetDevice; // default = false;
}SettingsLandscape;
typedef struct TimecodeInterface
{
char name[MAX_NUM_CHARS_IN_TIMECODE_INTERFACE_STRINGS];
char api[MAX_NUM_CHARS_IN_TIMECODE_INTERFACE_STRINGS];
int index; //default = -1;
} TimecodeInterface;
typedef struct TimeLandscape
{
TimecodeInterface interfaces[MAX_NUMBER_OF_AUDIO_INTERFACES];
uint32_t interfaceCount; //default = 0;
TimecodeInterface currentInterface;
TimecodeFPS fps; //default = Undefined;
bool fakeTimecode; //default = false;
bool useSyncPulse; //default = false;
bool deviceKeepAlive; //default = false;
bool syncStatus; //default = false;
bool timecodeStatus; //default = false;
int32_t ltcChannel; //default = -1;
} TimeLandscape;
typedef struct GestureLandscapeData
{
uint32_t id; //default = 0;
char name[MAX_NUM_CHARS_IN_USERNAME];
} GestureLandscapeData;
typedef struct NetDeviceLandscapeData
{
uint32_t netDeviceID;
char hostname[MAX_NUM_CHARS_IN_HOST_NAME];
char ip[MAX_NUM_CHARS_IN_IP_ADDRESS];
} NetDeviceLandscapeData;
typedef struct NetDevicesLandscape
{
uint32_t numberOfNetDevices; // default = 0;
NetDeviceLandscapeData netDevices[MAX_NUMBER_OF_NETDEVICES];
} NetDeviceLandscape;
typedef struct Landscape
{
DeviceLandscape gloveDevices;
UserLandscape users;
SkeletonLandscape skeletons;
TrackerLandscape trackers;
SettingsLandscape settings;
NetDevicesLandscape netDevices;
TimeLandscape time;
uint32_t gestureCount; //default = 0;
} Landscape;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Landscape
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Skeleton
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct NodeSettingsIK
{
float ikAim;
} NodeSettingsIK;
typedef struct NodeSettingsFoot
{
float heightFromGround;
} NodeSettingsFoot;
typedef struct NodeSettingsRotationOffset
{
ManusQuaternion value;
} NodeSettingsRotationOffset;
typedef struct NodeSettingsLeaf
{
ManusVec3 direction;
float length;
} NodeSettingsLeaf;
typedef struct NodeSettings
{
NodeSettingsFlag usedSettings;
NodeSettingsIK ik;
NodeSettingsFoot foot;
NodeSettingsRotationOffset rotationOffset;
NodeSettingsLeaf leaf;
} NodeSettings;
typedef struct NodeSetup
{
uint32_t id; //default = 0;
char name[MAX_NUM_CHARS_IN_NODE_NAME]; // this is a UTF8 string , NOT an ASCII CHAR array (same base type though)
NodeType type; //default = NodeType::NodeType_Invalid;
ManusTransform transform;
uint32_t parentID; //default = 0;
NodeSettings settings;
} NodeSetup;
typedef struct ChainSettingsPelvis
{
float hipHeight; //default = 0.0f;
float hipBendOffset; //default = 0.0f;
float thicknessMultiplier; //default = 1.0f;
} ChainSettingsPelvis;
typedef struct ChainSettingsLeg
{
bool reverseKneeDirection; //default = false;
float kneeRotationOffset; //default = 0.0f;
float footForwardOffset; //default = 0.0f;
float footSideOffset; //default = 0.0f;
} ChainSettingsLeg;
typedef struct ChainSettingsSpine
{
float spineBendOffset; //default = 0.0f;
} ChainSettingsSpine;
typedef struct ChainSettingsNeck
{
float neckBendOffset; //default = 0.0f;
} ChainSettingsNeck;
typedef struct ChainSettingsHead
{
float headPitchOffset; //default = 0.0f;
float headYawOffset; //default = 0.0f;
float headTiltOffset; //default = 0.0f;
bool useLeafAtEnd; //default = false;
} ChainSettingsHead;
typedef struct ChainSettingsArm
{
float armLengthMultiplier; //default = 0.0f;
float elbowRotationOffset; //default = 0.0f;
ManusVec3 armRotationOffset;
ManusVec3 positionMultiplier;
ManusVec3 positionOffset;
} ChainSettingsArm;
typedef struct ChainSettingsShoulder
{
float forwardOffset; //default = 0.0f;
float shrugOffset; //default = 0.0f;
float forwardMultiplier; //default = 0.0f;
float shrugMultiplier; //default = 0.0f;
} ChainSettingsShoulder;
typedef struct ChainSettingsFinger
{
bool useLeafAtEnd; //default = false;
int32_t metacarpalBoneId; //default = 0;
int32_t handChainId; //default = 0;
float fingerWidth; //default = 0;
} ChainSettingsFinger;
typedef struct ChainSettingsHand
{
int32_t fingerChainIds[MAX_NUM_FINGER_IDS];
int32_t fingerChainIdsUsed; //default = 0;
HandMotion handMotion; //default = HandMotion::HandMotion_None;
} ChainSettingsHand;
typedef struct ChainSettingsFoot
{
int32_t toeChainIds[MAX_NUM_TOE_IDS];
int32_t toeChainIdsUsed; //default = 0;
} ChainSettingsFoot;
typedef struct ChainSettingsToe
{
int32_t footChainId; //default = 0;
bool useLeafAtEnd; //default = false;
} ChainSettingsToe;
typedef struct ChainSettings
{
ChainType usedSettings;
ChainSettingsPelvis pelvis;
ChainSettingsLeg leg;
ChainSettingsSpine spine;
ChainSettingsNeck neck;
ChainSettingsHead head;
ChainSettingsArm arm;
ChainSettingsShoulder shoulder;
ChainSettingsFinger finger;
ChainSettingsHand hand;
ChainSettingsFoot foot;
ChainSettingsToe toe;
} ChainSettings;
typedef struct ChainSetup
{
uint32_t id; //default = 0;
ChainType type; //default = ChainType::ChainType_Invalid;
ChainType dataType; //default = ChainType::ChainType_Invalid;
uint32_t dataIndex; //default = 0;
uint32_t nodeIdCount; //default = 0;
uint32_t nodeIds[MAX_CHAIN_LENGTH];
ChainSettings settings;
Side side; //default = Side::Side_Invalid;
} ChainSetup;
typedef struct SphereColliderSetup
{
float radius; //default = 0;
} SphereColliderSetup;
typedef struct CapsuleColliderSetup
{
float radius; //default = 0;
float length; //default = 0;
} CapsuleColliderSetup;
typedef struct BoxColliderSetup
{
ManusVec3 size; //default = 0,0,0;
} BoxColliderSetup;
typedef struct ColliderSetup
{
uint32_t nodeID; //default = 0;
ManusVec3 localPosition; // default 0,0,0
ManusVec3 localRotation; // default 0,0,0
ColliderType type;//default = ColliderType::ColliderType_Invalid
SphereColliderSetup sphere;
CapsuleColliderSetup capsule;
BoxColliderSetup box;
} ColliderSetup;
typedef struct Weight
{
uint32_t nodeID;
float weightValue;
} Weight;
typedef struct Vertex
{
ManusVec3 position; // default 0,0,0
uint32_t weightsCount; //default = 0;
Weight weights[MAX_BONE_WEIGHTS_PER_VERTEX];
} Vertex;
typedef struct Triangle
{
int32_t vertexIndex1;
int32_t vertexIndex2;
int32_t vertexIndex3;
} Triangle;
typedef struct SkeletonTargetUserData
{
uint32_t userID; //default = 0;
} SkeletonTargetUserData;
typedef struct SkeletonTargetUserIndexData
{
uint32_t userIndex; //default = 0;
} SkeletonTargetUserIndexData;
typedef struct SkeletonTargetAnimationData
{
char id[MAX_NUM_CHARS_IN_TARGET_ID];
} SkeletonTargetAnimationData;
typedef struct SkeletonTargetGloveData
{
uint32_t gloveID; //default = 0;
} SkeletonTargetGloveData;
typedef struct SkeletonSettings
{
bool scaleToTarget; //default = false;
bool useEndPointApproximations; //default = false;
CollisionType collisionType; //default = CollisionType::CollisionType_None
SkeletonTargetType targetType;
SkeletonTargetUserData skeletonTargetUserData;
SkeletonTargetUserIndexData skeletonTargetUserIndexData;
SkeletonTargetAnimationData skeletonTargetAnimationData;
SkeletonTargetGloveData skeletonGloveData;
} SkeletonSettings;
typedef struct SkeletonSetupInfo
{
uint32_t id; //default = 0;
SkeletonType type; //default = SkeletonType::SkeletonType_Invalid;
SkeletonSettings settings;
char name[MAX_NUM_CHARS_IN_SKELETON_NAME]; // this is a UTF8 string , NOT an ASCII CHAR array (same base type though)
} SkeletonSetupInfo;
typedef struct SkeletonSetupArraySizes
{
uint32_t nodesCount; //default = 0;
uint32_t chainsCount; //default = 0;
uint32_t collidersCount; //default = 0;
uint32_t meshCount; //default = 0;
} SkeletonSetupArraySizes;
typedef struct TemporarySkeletonInfo
{
char name[MAX_NUM_CHARS_IN_SKELETON_NAME]; // this is a UTF8 string , NOT an ASCII CHAR array (same base type though)
uint32_t index; //default = UINT32_MAX;
} TemporarySkeletonInfo;
typedef struct TemporarySkeletonsInfoForSession
{
uint32_t sessionId; //default = 0;
char sessionName[MAX_NUM_CHARS_IN_HOST_NAME];
uint32_t skeletonCount; //default = 0;
TemporarySkeletonInfo skeletonInfo[MAX_NUMBER_OF_SKELETONS_PER_SESSION];
} TemporarySkeletonsInfoForSession;
typedef struct TemporarySkeletonCountForSession
{
uint32_t sessionId; //default = 0;
char sessionName[MAX_NUM_CHARS_IN_HOST_NAME];
uint32_t skeletonCount; //default = 0;
} TemporarySkeletonCountForSession;
typedef struct TemporarySkeletonCountForAllSessions
{
uint32_t sessionsCount; //default = 0;
TemporarySkeletonCountForSession temporarySkeletonCountForSessions[MAX_NUMBER_OF_SESSIONS];
} TemporarySkeletonCountForAllSessions;
typedef struct TemporarySkeletonSessionsData
{
uint32_t sessionsCount; //default = 0;
TemporarySkeletonsInfoForSession temporarySkeletonsSessions[MAX_NUMBER_OF_SESSIONS];
} TemporarySkeletonSessionsData;
typedef struct SystemMessage
{
SystemMessageType type;
char infoString[MAX_NUM_CHARS_IN_SYSTEM_ERROR_MESSAGE];
uint32_t infoUInt;
} SystemMessage;
typedef struct NodeInfo
{
uint32_t nodeId; //default = 0;
uint32_t parentId; //default = 0;
ChainType chainType;
Side side;
FingerJointType fingerJointType;
}NodeInfo;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Skeleton
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Coordinate system settings
// ------------------------------------------------------------------------------------------------------------------------------
typedef struct CoordinateSystemVUH
{
AxisView view;
AxisPolarity up;
Side handedness;
float unitScale; // in meters
} CoordinateSystemVUH;
typedef struct CoordinateSystemDirection
{
AxisDirection x;
AxisDirection y;
AxisDirection z;
float unitScale; // in meters
} CoordinateSystemDirection;
// ------------------------------------------------------------------------------------------------------------------------------
// end of Coordinate system settings
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// Callbacks
// ------------------------------------------------------------------------------------------------------------------------------
typedef void(*ConnectedToCoreCallback_t)(const ManusHost* const p_Host);
typedef void(*DisconnectedFromCoreCallback_t)(const ManusHost* const p_Host);
typedef void(*SkeletonStreamCallback_t)(const SkeletonStreamInfo* const p_SkeletonInfo);
typedef void(*LandscapeStreamCallback_t)(const Landscape* const p_Landscape);
typedef void(*TrackerStreamCallback_t)(const TrackerStreamInfo* const p_TrackerStreamInfo);
typedef void(*ErgonomicsStreamCallback_t)(const ErgonomicsStream* const p_Ergonomics);
typedef void(*SystemStreamCallback_t)(const SystemMessage* const p_SystemMessage);
typedef void(*RawSkeletonStreamCallback_t)(const SkeletonStreamInfo* const p_SkeletonInfo);
typedef void(*GestureStreamCallback_t)(const GestureStreamInfo* const p_GestureStream);
// ------------------------------------------------------------------------------------------------------------------------------
// end of Callbacks
// ------------------------------------------------------------------------------------------------------------------------------
#ifdef __cplusplus
} // extern "C"
#endif
#endif // #ifndef H_CORESDKWRAPPERTYPES