# yapf: disable
# isort: off
# DO NOT EDIT THIS FILE, it is automatically generated from C header file mx_robot_def.h
from enum import IntEnum

#
# C constants from file mx_robot_def.h
#
MX_ROBOT_MAX_NB_ACCELEROMETERS = 1  # Maximum number of accelerometers support on the robot
MX_DEFAULT_ROBOT_IP = "192.168.0.100"
MX_DEFAULT_ROBOT_NETMASK = "255.255.255.0"
MX_DEFAULT_ROBOT_GATEWAY = "192.168.0.1"
MX_DEFAULT_HOST_NAME = "m500"
MX_ROBOT_TCP_PORT_CONTROL = 10000  # The TCP port to receive and send robot commands
MX_ROBOT_TCP_PORT_FEED = 10001  # The TCP port to get robot's periodic status feed
MX_ROBOT_TCP_PORT_CONTROL_JSON = 10010  # The TCP port to receive and send robot commands (JSON format)
MX_ROBOT_TCP_PORT_FEED_JSON = 10011  # The TCP port to get robot's periodic status feed (JSON format)
MX_ROBOT_UDP_PORT_TRACE = 10002  # Port for robot UDP trace module
MX_ROBOT_UDP_PORT_RT_CTRL = 10003  # Port for virtual robot to control physical robot's drives
MX_CHECKPOINT_ID_MIN = 1  # Minimum checkpoint id allowed with SetCheckpoint() (inclusively)
MX_CHECKPOINT_ID_MAX = 8000  # Maximum checkpoint id allowed with SetCheckpoint() (inclusively)
MX_ACCELEROMETER_UNIT_PER_G = 16000  # Accelerometer units per G (1G = earth gravity)
MX_GRAVITY_MPS2 = 9.8067  # Earth gravity in meter per second squared (mps2)
MX_ACCELEROMETER_JOINT_M500 = 5  # Joint number of the accelerometer reported in the APIs for M500
MX_JOINT_LIMIT_MIN_RANGE_DEG = 25  # Last joint requires ~12 deg during homing in either direction
MX_RECOVERY_MODE_MAX_JOINT_VEL_PCT = 5.0
MX_RECOVERY_MODE_MAX_JOINT_ACC_PCT = 40.0
MX_RECOVERY_MODE_MAX_CART_LIN_VEL_MM_PER_SEC = 20.0
MX_RECOVERY_MODE_MAX_CART_ANG_VEL_DEG_PER_SEC = 30.0
MX_RECOVERY_MODE_MAX_CART_ACC_PCT = 40.0
MX_EIP_MAJOR_VERSION = 2
MX_EIP_MINOR_VERSION = 1
MX_PNET_MAJOR_VERSION = 1
MX_PNET_MINOR_VERSION = 1
MX_PNET_PATCH_VERSION = 0
MX_NB_DYNAMIC_PDOS = 4


class MxRobotMsgType(IntEnum):
    MX_ROBOT_MSG_TYPE_REQUEST = 0,  # Request from the user
    MX_ROBOT_MSG_TYPE_REQUEST_INTERNAL = 1,  # Internal request from the user
    MX_ROBOT_MSG_TYPE_RESPONSE = 10,  # Response to user request
    MX_ROBOT_MSG_TYPE_RESPONSE_INTERNAL = 11,  # Response to user request that was identified as "internal" by user
    MX_ROBOT_MSG_TYPE_CTRL_EVENT = 20,  # Event spontaneously sent by the robot (control port)
    MX_ROBOT_MSG_TYPE_MON_EVENT = 21,  # Event spontaneously sent by the robot (monitoring port)
    MX_ROBOT_MSG_TYPE_MON_EVENT_PERIODIC = 22,  # Periodic (frequent) event spontaneously sent by the robot
MX_ROBOT_MSG_TYPE_REQUEST_INTERNAL_PREFIX = "-"  # Prefix for MX_ROBOT_MSG_TYPE_REQUEST_INTERNAL
MX_ROBOT_MSG_TYPE_RESPONSE_INTERNAL_PREFIX = "-"  # Prefix for MX_ROBOT_MSG_TYPE_RESPONSE_INTERNAL
MX_ROBOT_MSG_TYPE_CTRL_EVENT_PREFIX = "~"  # Prefix for MX_ROBOT_MSG_TYPE_CTRL_EVENT
MX_ROBOT_MSG_TYPE_MON_EVENT_PREFIX = "."  # Prefix for MX_ROBOT_MSG_TYPE_MON_EVENT
MX_ROBOT_MSG_TYPE_MON_EVENT_PERIODIC_PREFIX = "!"  # Prefix for MX_ROBOT_MSG_TYPE_MON_EVENT_PERIODIC


class MxRobotModel(IntEnum):
    MX_ROBOT_MODEL_UNKNOWN = 0,  # Unknown robot model
    MX_ROBOT_MODEL_M500_R1 = 1,  # M500 R1 Robot
    MX_ROBOT_MODEL_M500_R2 = 2,  # M500 R2 Robot
    MX_ROBOT_MODEL_M500_R3 = 3,  # M500 R3 Robot
    MX_ROBOT_MODEL_M500_R4 = 4,  # M500 R4 Robot
    MX_ROBOT_MODEL_M1000_R1 = 10,  # Meca-1000 robot, R1
    MX_ROBOT_MODEL_SCARA_R1 = 20,  # Scara robot, R1


class MxEventSeverity(IntEnum):
    MX_EVENT_SEVERITY_SILENT = 0,  # Trace event in robot log
    MX_EVENT_SEVERITY_WARNING = 1,  # Send status code on event
    MX_EVENT_SEVERITY_PAUSE_MOTION = 2,  # Send status code and pause motion on event
    MX_EVENT_SEVERITY_CLEAR_MOTION = 3,  # Send status code, pause and clear motion on event
    MX_EVENT_SEVERITY_ERROR = 4,  # Send status code, pause, clear motion and go in error mode on event
    MX_EVENT_SEVERITY_INVALID = 0xFFFFFFFF,  # Set consistent sizeof(MxEventSeverity)


class MxTorqueLimitsMode(IntEnum):
    MX_TORQUE_LIMITS_DETECT_ALL = 0,  # Always check if torque is within limits
    MX_TORQUE_LIMITS_DETECT_SKIP_ACCEL = 1,  # Do not check if torque is within limits during acceleration or
    MX_TORQUE_LIMITS_INVALID = 0xFFFFFFFF,  # Set consistent sizeof(MxTorqueLimitsMode)


class MxCollisionAvoidanceMode(IntEnum):
    MX_COLLISION_MODE_SELF_COLLISION_DETECTION = 0,
    MX_COLLISION_MODE_TCP_IN_WORKSPACE = 1,
    MX_COLLISION_MODE_ROBOT_IN_WORKSPACE = 2,
    MX_COLLISION_MODE_FULL_COLLISION_DETECTION = 3,


class MxStopState(IntEnum):
    MX_STOP_STATE_RESET = 0,  # PStop2 or EStop condition is not active
    MX_STOP_STATE_ACTIVE = 1,  # PStop2 or EStop condition is active (robot is stopped/deactivated)
    MX_STOP_STATE_RESETTABLE = 2,  # PStop2 or EStop condition is cleared but awaiting ack (ResetPStop)


class MxGetLogsMode(IntEnum):
    MX_GET_LOGS_MODE_FULL = 0,  # Get all logs + configuration files
    MX_GET_LOGS_MODE_QUICK = 1,  # Get minimal logs + configuration files
    MX_GET_LOGS_MODE_LATEST_ONLY = 2,  # Get only latest log file


class MxMotionCmdType(IntEnum):
    MX_MOTION_CMD_TYPE_NO_MOVE = 0,  # No movement (noop)
    MX_MOTION_CMD_TYPE_MOVEJOINTS = 1,  # Move each joint to given absolute position in degrees
    MX_MOTION_CMD_TYPE_MOVEPOSE = 2,  # Move to a position relative to WRF (x-y-z in mm, a-b-c in degrees)
    MX_MOTION_CMD_TYPE_MOVELIN = 3,  # Move to a position relative to WRF (x-y-z in mm, a-b-c in degrees)
    MX_MOTION_CMD_TYPE_MOVELINRELTRF = 4,  # Relative movement (relative to the current TRF position)
    MX_MOTION_CMD_TYPE_MOVELINRELWRF = 5,  # Relative movement (relative to the current WRF position)
    MX_MOTION_CMD_TYPE_DELAY = 6,  # Delay in seconds before processing the next command
    MX_MOTION_CMD_TYPE_SETBLENDING = 7,  # Set blending ration (in percent) between consecutive move commands
    MX_MOTION_CMD_TYPE_SETJOINTVEL = 8,  # Set joint target velocity in percent (for MovePost and MoveJoint only)
    MX_MOTION_CMD_TYPE_SETJOINTACC = 9,  # Set joint acceleration in percent (for MovePost and MoveJoint only)
    MX_MOTION_CMD_TYPE_SETCARTANGVEL = 10,  # Set the max angular velocity for MoveLinX commands, in deg/s
    MX_MOTION_CMD_TYPE_SETCARTLINVEL = 11,  # Set the max linear velocity for MoveLinX commands in mm/s
    MX_MOTION_CMD_TYPE_SETCARTACC = 12,  # Set maximum cartesian acceleration (linear and angular) in percent
    MX_MOTION_CMD_TYPE_SETTRF = 13,  # Set the pose of the RTF with respect of the FRF
    MX_MOTION_CMD_TYPE_SETWRF = 14,  # Set the pose of the WRF with respect of the BRF
    MX_MOTION_CMD_TYPE_SETCONF = 15,  # Set the desired inverse kinematic config for MovePose.
    MX_MOTION_CMD_TYPE_SETAUTOCONF = 16,  # Enable or disable automatic configuration for inverse kinematic
    MX_MOTION_CMD_TYPE_SETCHECKPOINT = 17,  # Inserts a "set checkpoint" command between two moves, so robot status
    MX_MOTION_CMD_TYPE_GRIPPEROPENCLOSE = 18,  # Open or close the gripper
    MX_MOTION_CMD_TYPE_GRIPPERVEL = 19,  # Limit the velocity of the gripper fingers in percent
    MX_MOTION_CMD_TYPE_GRIPPERFORCE = 20,  # Limit the grip force of the gripper in percent
    MX_MOTION_CMD_TYPE_MOVEJOINTSVEL = 21,  # Set current mode to "join velocity mode"
    MX_MOTION_CMD_TYPE_MOVELINVELWRF = 22,  # Set current mode to "cartesian WRF velocity mode"
    MX_MOTION_CMD_TYPE_MOVELINVELTRF = 23,  # Set current mode to "cartesian TRF velocity mode"
    MX_MOTION_CMD_TYPE_SETVELTIMEOUT = 24,  # Timeout for current velocity mode
    MX_MOTION_CMD_TYPE_SETCONFTURN = 25,  # Set the last joint turn conf (i.e. which turn should be used
    MX_MOTION_CMD_TYPE_SETAUTOCONFTURN = 26,  # Enable or disable automatic last joint turn selection
    MX_MOTION_CMD_TYPE_SETTORQUELIMITS = 27,  # Set torque limits for current motion
    MX_MOTION_CMD_TYPE_SETTORQUELIMITSCFG = 28,  # Set torque limits configuration for current motion
    MX_MOTION_CMD_TYPE_MOVEJOINTSREL = 29,  # Move each joint relative to current joint position
    MX_MOTION_CMD_TYPE_SETVALVESTATE = 30,  # Set valve box valves states
    MX_MOTION_CMD_TYPE_GRIPPERRANGE = 31,  # Set the Close and Open position that will be used when calling
    MX_MOTION_CMD_TYPE_GRIPPERPOS = 32,  # Move gripper to a specific position, in mm from the most closed
    MX_MOTION_CMD_TYPE_START_OFFLINE_PROGRAM = 100,  # Start an offline program with specified id
    MX_MOTION_CMD_TYPE_SETDBG = 1000,  # Enable debug options on the robot. For Mecademic use only.


class MxEip_DynamicType(IntEnum):
    MX_EIP_DYNAMIC_AUTO = 0,
    MX_EIP_DYNAMIC_CFG_FW_VERSION = 1,
    MX_EIP_DYNAMIC_CFG_PRODUCT_TYPE = 2,
    MX_EIP_DYNAMIC_CFG_ROBOT_SERIAL = 3,
    MX_EIP_DYNAMIC_CFG_JOINT_OFFSET = 4,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_1 = 5,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_2 = 6,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_3 = 7,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_4 = 8,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_5 = 9,
    MX_EIP_DYNAMIC_CFG_ROBOT_DH_MODEL_6 = 10,
    MX_EIP_DYNAMIC_CFG_JOINT_LIMITS_CFG = 11,
    MX_EIP_DYNAMIC_CFG_MODEL_JOINT_LIMITS_1_2_3 = 12,
    MX_EIP_DYNAMIC_CFG_MODEL_JOINT_LIMITS_4_5_6 = 13,
    MX_EIP_DYNAMIC_CFG_JOINT_LIMITS_1_2_3 = 14,
    MX_EIP_DYNAMIC_CFG_JOINT_LIMITS_4_5_6 = 15,
    MX_EIP_DYNAMIC_CFG_EXT_TOOL_FW_VERSION = 16,
    MX_EIP_DYNAMIC_CFG_WORKSPACE_LIMITS_CFG = 17,
    MX_EIP_DYNAMIC_CFG_WORKSPACE_LIMITS = 18,
    MX_EIP_DYNAMIC_CFG_TOOL_SPHERE = 19,
    MX_EIP_DYNAMIC_MQ_CONF = 20,
    MX_EIP_DYNAMIC_MQ_PARAMS = 21,
    MX_EIP_DYNAMIC_MQ_VEL_ACCEL = 22,
    MX_EIP_DYNAMIC_MQ_GRIPPER_CFG = 23,
    MX_EIP_DYNAMIC_MQ_TORQUE_LIMITS_CFG = 24,
    MX_EIP_DYNAMIC_MQ_TORQUE_LIMITS = 25,
    MX_EIP_DYNAMIC_RT_TARGET_JOINT_POS = 30,  # Present in basic PDOs already
    MX_EIP_DYNAMIC_RT_TARGET_CART_POS = 31,  # Present in basic PDOs already
    MX_EIP_DYNAMIC_RT_TARGET_JOINT_VEL = 32,
    MX_EIP_DYNAMIC_RT_TARGET_JOINT_TORQ = 33,
    MX_EIP_DYNAMIC_RT_TARGET_CART_VEL = 34,
    MX_EIP_DYNAMIC_RT_TARGET_CONF = 35,  # Present in basic PDOs already
    MX_EIP_DYNAMIC_RT_JOINT_POS = 40,
    MX_EIP_DYNAMIC_RT_CART_POS = 41,
    MX_EIP_DYNAMIC_RT_JOINT_VEL = 42,
    MX_EIP_DYNAMIC_RT_JOINT_TORQ = 43,
    MX_EIP_DYNAMIC_RT_CART_VEL = 44,
    MX_EIP_DYNAMIC_RT_CONF = 45,
    MX_EIP_DYNAMIC_RT_ACCELEROMETER_5 = 46,
    MX_EIP_DYNAMIC_RT_WRF = 50,  # Present in basic PDOs already
    MX_EIP_DYNAMIC_RT_TRF = 51,  # Present in basic PDOs already
    MX_EIP_DYNAMIC_RT_EXTTOOL_STATUS = 52,
    MX_EIP_DYNAMIC_RT_GRIPPER_VALVE_STATE = 53,
    MX_EIP_DYNAMIC_INTERNAL_SET_DBG = 0x08000000,
    MX_EIP_DYNAMIC_FORCE_32_BITS = 0xFFFFFFFF,
MX_EIP_DYNAMIC_INTERNAL_MASK = 0x0FFFFFFF
MX_EIP_DYNAMIC_INTERNAL_SHIFT = 28  # Bit shift that corresponds to MX_EIP_DYNAMIC_INTERNAL_MASK
MX_ST_EXCESSIVE_TRQ = 3028  # replaced by MX_ST_TORQUE_LIMIT_STATUS


class MxRobotStatusCode(IntEnum):
    MX_ST_NONE = 0,
    MX_ST_BUFFER_FULL = 1000,  # Maximum number of queued commands reached. Try sending fewer at a time.
    MX_ST_UNKNOWN_CMD = 1001,  # Unknown or empty command.
    MX_ST_SYNTAX_ERR = 1002,  # A parenthesis or a comma has been omitted.
    MX_ST_ARG_ERR = 1003,  # Wrong number of arguments or invalid input (e.g. value out of range).
    MX_ST_NOT_ACTIVATED = 1005,  # Robot is not activated, must be activated before using that command.
    MX_ST_NOT_HOMED = 1006,  # Robot is not homed, must be homed before using that command.
    MX_ST_JOINT_OVER_LIMIT = 1007,  # Requested position would cause joints to be over limit.
    MX_ST_BLOCKED_BY_180_DEG_PROT = 1010,  # Requested move blocked because some joints would move more than 180 deg
    MX_ST_ALREADY_ERR = 1011,  # Robot is in error, command can't be processed. Reset errors then retry.
    MX_ST_SINGULARITY_ERR = 1012,  # Move command would require to go through a singularity. Not allowed.
    MX_ST_ACTIVATION_ERR = 1013,  # Activation fail. You may try again.
    MX_ST_HOMING_ERR = 1014,  # Homing failed. You may try again.
    MX_ST_MASTER_ERR = 1015,  # Mastering failed. See log for details.
    MX_ST_OUT_OF_REACH = 1016,  # Requested joint set or pose is out of reach for this robot.
    MX_ST_OFFLINE_SAVE_ERR = 1022,  # Not saving a program, thus can't stop saving.
    MX_ST_IGNORE_CMD_OFFLINE = 1023,  # This command cannot be executed in the offline program.
    MX_ST_MASTERING_NEEDED = 1024,  # Mastering was loss. Contact Mecademic support team.
    MX_ST_IMPOSSIBLE_RESET_ERR = 1025,  # This error cannot be reset. Power cycle the robot to recover.
    MX_ST_MUST_BE_DEACTIVATED = 1026,  # This command is available only when the robot is deactivated.
    MX_ST_SIM_MUST_DEACTIVATED = 1027,  # Enabling simulation mode is only possible when the robot is deactivated.
    MX_ST_OFFLINE_FULL = 1029,  # Offline program memory is full (13,000 commands). Saving stopped.
    MX_ST_ALREADY_SAVING = 1030,  # Offline program saving is already in progress.
    MX_ST_ILLEGAL_WHILE_SAVING = 1031,  # This command is illegal while saving an offline program.
    MX_ST_HOMING_JOINTS_OUT_OF_RANGE = 1032,  # DEPRECATED. Was used only on release 8.X
    MX_ST_START_CONF_MISMATCH = 1033,  # Requested move blocked because start pos is not in requested conf
    MX_ST_NO_GRIPPER = 1038,  # No gripper is connected, command can't be executed.
    MX_ST_CMD_FAILED = 1040,  # Command failed (generic response for various simple commands)
    MX_ST_NO_VBOX = 1041,  # No pneumatic module is connected.
    MX_ST_EXT_TOOL_SIM_MUST_DEACTIVATED = 1042,  # Switching external tool type is only possible when the robot
    MX_ST_OFFLINE_PROGRAM_LIST_ERR = 1500,  # Failed "ListPrograms" API command
    MX_ST_OFFLINE_PROGRAM_LOAD_ERR = 1501,  # Failed "LoadProgram" API command
    MX_ST_OFFLINE_PROGRAM_SAVE_ERR = 1502,  # Failed "SaveProgram" API command
    MX_ST_OFFLINE_PROGRAM_DELETE_ERR = 1503,  # Failed "DeleteProgram" API command
    MX_ST_ACTIVATED = 2000,  # Motors were successfully activated
    MX_ST_HOME_DONE = 2002,  # Homing done.
    MX_ST_DEACTIVATED = 2004,  # Motors deactivated.
    MX_ST_ERROR_RESET = 2005,  # The error was reset. Commands can now be sent again.
    MX_ST_NO_ERROR_RESET = 2006,  # There was no error to reset.
    MX_ST_GET_STATUS_ROBOT = 2007,  # This event reports the status of the robot.
    MX_ST_BRAKES_OFF = 2008,  # All brakes are now released.
    MX_ST_MASTER_DONE = 2009,  # Mastering now done.
    MX_ST_BRAKES_ON = 2010,  # All brakes are now set.
    MX_ST_GET_MOTION_STATUS = 2011,  # This event reports the motion status of the robot (JSON format).
    MX_ST_GET_WRF = 2013,  # Response to GetTrf
    MX_ST_GET_TRF = 2014,  # Response to GetWrf
    MX_ST_GET_JOINTS = 2026,  # "GetJoints" response (current joint angles in degrees).
    MX_ST_GET_POSE = 2027,  # "GetPose" response (current position in mm, Euler angles in degrees).
    MX_ST_GET_AUTO_CONF = 2028,
    MX_ST_GET_CONF = 2029,  # "GetConf" response (current shoulder, elbow, wrist conf)
    MX_ST_GET_AUTO_CONF_TURN = 2031,
    MX_ST_GET_CONF_TURN = 2036,  # "GetConfTurn" response
    MX_ST_PAUSE_MOTION = 2042,  # Motion paused.
    MX_ST_RESUME_MOTION = 2043,  # Motion resumed.
    MX_ST_CLEAR_MOTION = 2044,  # Motion was cleared.
    MX_ST_SIM_ON = 2045,  # Simulation mode is now enabled.
    MX_ST_SIM_OFF = 2046,  # Simulation mode is now disabled.
    MX_ST_EXTTOOL_SIM = 2047,  # External tool simulation mode has changed.
    MX_ST_RECOVERY_MODE_ON = 2049,  # Robot is now in recovery mode.
    MX_ST_RECOVERY_MODE_OFF = 2050,  # Robot is no more in recovery mode.
    MX_ST_RECOVERY_VEL_CAP = 2051,  # Recovery mode has capped velocity.
    MX_ST_EOM_ON = 2052,  # End of movement events are enabled.
    MX_ST_EOM_OFF = 2053,  # End of movement events are disabled.
    MX_ST_EOB_ON = 2054,  # End of block events are enabled.
    MX_ST_EOB_OFF = 2055,  # End of block events are enabled.
    MX_ST_START_SAVING = 2060,  # Offline program saving now started.
    MX_ST_N_CMD_SAVED = 2061,  # Offline program saving done (reports number of saved commands)
    MX_ST_OFFLINE_START = 2063,  # Offline program started to run.
    MX_ST_OFFLINE_LOOP_ON = 2064,  # Offline program loop is enabled.
    MX_ST_OFFLINE_LOOP_OFF = 2065,  # Offline program loop is disabled.
    MX_ST_GET_STATUS_GRIPPER = 2079,  # "GetStatusGripper" response (see pdf doc for response fields meaning).
    MX_ST_GET_CMD_PENDING_COUNT = 2080,  # Number of pending commands in the queue.
    MX_ST_GET_FW_VERSION = 2081,  # The firmware version running on the robot.
    MX_ST_GET_FW_VERSION_FULL = 2082,  # More detailed info about the firmware version running on the robot.
    MX_ST_GET_ROBOT_SERIAL = 2083,  # Current robot serial number (response to GetRobotSerial and SetRobotSerial)
    MX_ST_GET_PRODUCT_TYPE = 2084,  # Current product type (Meca500...)
    MX_ST_CMD_SUCCESSFUL = 2085,  # Command successful (generic response for various simple commands)
    MX_ST_GET_EXT_TOOL_FW_VERSION = 2086,  # "GetExtToolFwVersion" response with current gripper firmware version.
    MX_ST_GET_NETWORK_CONFIG = 2089,  # "GetNetworkConfig" response (JSON format)
    MX_ST_GET_JOINT_LIMITS = 2090,  # "GetJointLimits" response (joint nb, min, max)
    MX_ST_SET_JOINT_LIMITS = 2092,  # "SetJointLimits" success response
    MX_ST_SET_JOINT_LIMITS_CFG = 2093,  # "SetJointLimitsCfg" success response (joint limits enabled)
    MX_ST_GET_JOINT_LIMITS_CFG = 2094,  # "GetJointLimitsCfg" response
    MX_ST_GET_ROBOT_NAME = 2095,  # "GetRobotName" response
    MX_ST_SET_CTRL_PORT_MONIT = 2096,  # "SetCtrlPortMonitoring" response
    MX_ST_SYNC_CMD_QUEUE = 2097,  # "SyncCmdQueue" response
    MX_ST_GET_DETECTED_DRIVES = 2098,  # "GetDetectedDrives" response
    MX_ST_GET_DRIVE_ENC_INDEX = 2099,  # "GetDriveEncIndex" response
    MX_ST_GET_MODEL_VEL_LIMITS = 2108,  # "GetModelVelLimits" response (in JSON)
    MX_ST_GET_CMD_DEF = 2109,  # "GetCmdDef" response (in JSON)
    MX_ST_GET_ROBOT_KIN_MODEL = 2110,  # "GetRobotKinModel" response
    MX_ST_GET_ROBOT_DH_MODEL = 2111,  # "GetRobotDhMOdel" response
    MX_ST_GET_JOINT_OFFSET = 2112,  # "GetJointOffset" response
    MX_ST_GET_MODEL_JOINT_LIMITS = 2113,  # "GetModelJointLimits" response
    MX_ST_GET_TEST_BENCH_MODE = 2114,  # "GetTestBenchMode" response
    MX_ST_GET_MOTION_OPTIONS = 2115,  # "GetMotionOptions" response
    MX_ST_GET_MONITORING_INTERVAL = 2116,  # "GetMonitoringInterval" response
    MX_ST_GET_REAL_TIME_MONITORING = 2117,  # "GetRealTimeMonitoring" response
    MX_ST_GET_NETWORK_OPTIONS = 2119,  # "GetNetworkOptions" response
    MX_ST_GET_RTC = 2140,  # "GetRtc" response
    MX_ST_GET_BLENDING = 2150,  # "GetBlending" response
    MX_ST_GET_VEL_TIMEOUT = 2151,  # "GetVelTimeout" response
    MX_ST_GET_JOINT_VEL = 2152,  # "GetJointVel" response
    MX_ST_GET_JOINT_ACC = 2153,  # "GetJointAcc" response
    MX_ST_GET_CART_LIN_VEL = 2154,  # "GetCartLinVel" response
    MX_ST_GET_CART_ANG_VEL = 2155,  # "GetCartAngVel" response
    MX_ST_GET_CART_ACC = 2156,  # "GetCartAcc" response
    MX_ST_GET_CHECKPOINT = 2157,  # "GetCheckpoint" response
    MX_ST_GET_GRIPPER_FORCE = 2158,  # "GetGipperForce" response
    MX_ST_GET_GRIPPER_VEL = 2159,  # "GetGipperVel" response
    MX_ST_GET_TORQUE_LIMITS_CFG = 2160,  # "GetTorqueLimitsCfg" response
    MX_ST_GET_TORQUE_LIMITS = 2161,  # "GetTorqueLimits" response
    MX_ST_GET_GRIPPER_RANGE = 2162,  # "GetGipperRange" response
    MX_ST_GET_WORKSPACE_LIMITS_CFG = 2163,  # "GetWorkspaceLimitsCfg" response
    MX_ST_SET_WORKSPACE_LIMITS_CFG = 2164,  # "SetWorkspaceLimitsCfg" response
    MX_ST_GET_WORKSPACE_LIMITS = 2165,  # "GetWorkspaceLimits" response
    MX_ST_SET_WORKSPACE_LIMITS = 2166,  # "SetWorkspaceLimits" response
    MX_ST_GET_TOOL_SPHERE = 2167,  # "GetToolSphere" response
    MX_ST_SET_TOOL_SPHERE = 2168,  # "SetToolSphere" response
    MX_ST_RT_TARGET_JOINT_POS = 2200,  # Timestamp + joint positions in degrees
    MX_ST_RT_TARGET_CART_POS = 2201,  # Timestamp + Cartesian position (in mm, Euler angles in degrees).
    MX_ST_RT_TARGET_JOINT_VEL = 2202,  # Timestamp + joint velocity in degrees per second
    MX_ST_RT_TARGET_JOINT_TORQ = 2203,  # Timestamp + joint torque ratio in percent
    MX_ST_RT_TARGET_CART_VEL = 2204,  # Timestamp + Cartesian velocity (in mm, Euler angles in degrees per sec).
    MX_ST_RT_TARGET_CONF = 2208,  # Timestamp + conf that corresponds to MX_ST_RT_TARGET_JOINT_POS
    MX_ST_RT_TARGET_CONF_TURN = 2209,  # Timestamp + last joint turn that corresponds to MX_ST_RT_TARGET_JOINT_POS
    MX_ST_RT_JOINT_POS = 2210,  # Timestamp + joint positions in degrees
    MX_ST_RT_CART_POS = 2211,  # Timestamp + Cartesian position (in mm, Euler angles in degrees).
    MX_ST_RT_JOINT_VEL = 2212,  # Timestamp + joint velocity in degrees per second
    MX_ST_RT_JOINT_TORQ = 2213,  # Timestamp + joint torque ratio in percent
    MX_ST_RT_CART_VEL = 2214,  # Timestamp + Cartesian velocity (in mm/deg per second)
    MX_ST_RT_CONF = 2218,  # Timestamp + conf that corresponds to drives position
    MX_ST_RT_CONF_TURN = 2219,  # Timestamp + current last joint drive turn
    MX_ST_RT_ACCELEROMETER = 2220,  # Timestamp + end-effector acceleration (x/y/z)
    MX_ST_RT_ABS_JOINT_POS = 2221,  # Timestamp + joint positions from absolute encoders (less precise)
    MX_ST_RT_CHECKPOINT = 2227,  # Timestamp + end-effector acceleration (x/y/z)
    MX_ST_RT_WRF = 2228,  # Timestamp + WRF
    MX_ST_RT_TRF = 2229,  # Timestamp + TRF
    MX_ST_RT_CYCLE_END = 2230,  # Timestamp of the real-time cycle which has just ended.
    MX_ST_RT_EXTTOOL_STATUS = 2300,  # Timestamp + external tool status
    MX_ST_RT_VALVE_STATE = 2310,  # Timestamp + valve state
    MX_ST_RT_GRIPPER_STATE = 2320,  # Timestamp + gripper state
    MX_ST_RT_GRIPPER_FORCE = 2321,  # Timestamp + gripper force in percent
    MX_ST_RT_GRIPPER_POS = 2322,  # Timestamp + gripper position in percent
    MX_ST_RT_GRIPPER_VEL = 2323,  # Timestamp + gripper speed in percent
    MX_ST_OFFLINE_PROGRAM_LIST = 2500,  # Response to "ListPrograms" API command
    MX_ST_OFFLINE_PROGRAM_LOAD = 2501,  # Response to "LoadProgram" API command
    MX_ST_OFFLINE_PROGRAM_SAVE = 2502,  # Response to "SaveProgram" API command
    MX_ST_OFFLINE_PROGRAM_DELETE = 2503,  # Response to "DeleteProgram" API command
    MX_ST_CONNECTED = 3000,  # Confirms connection to robot.
    MX_ST_USER_ALREADY = 3001,  # Another user is already connected to the robot (current connection refused).
    MX_ST_UPGRADE_IN_PROGRESS = 3002,  # A firmware upgrade is in progress (current connection refused).
    MX_ST_CMD_TOO_LONG = 3003,  # Command string is too long (or missing NUL character).
    MX_ST_EOM = 3004,  # The robot has stopped moving.
    MX_ST_ERROR_MOTION = 3005,  # Motion error (probably collision or overload). This error can be reset.
    MX_ST_ERROR_DRIVE_COMM = 3006,  # Comm error with drives. This error cannot be reset.
    MX_ST_INIT_FAILED = 3009,  # Startup procedure error. Try power cycle, then contact Mecademic support.
    MX_ST_EOB = 3012,  # No more motion command are in queue and robot is no more moving.
    MX_ST_END_OFFLINE = 3013,  # The offline program has finished.
    MX_ST_CANT_SAVE_OFFLINE = 3014,  # There was a problem saving the offline program.
    MX_ST_IGNORING_CMD = 3016,  # Non-motion command ignored during execution of an offline program.
    MX_ST_NO_OFFLINE_SAVED = 3017,  # There is no program in memory.
    MX_ST_OFFLINE_LOOP = 3018,  # The offline program is being restarted (looped).
    MX_ST_OFFLINE_INVALID = 3020,  # The offline program is invalid and can't be played
    MX_ST_ERROR_GRIPPER = 3025,  # The gripper reported an error.
    MX_ST_MAINTENANCE_CHECK = 3026,  # A hardware problem was detected. Contact Mecademic support.
    MX_ST_INTERNAL_ERROR = 3027,  # Unknown internal error occurred.
    MX_ST_TORQUE_LIMIT_STATUS = 3028,  # "GetTorqueLimitsStatus" response and torque limit status update.
    MX_ST_TORQUE_LIMIT_ERROR = 3029,  # Excessive torque error occurred.
    MX_ST_CHECKPOINT_REACHED = 3030,  # A previously set checkpoint (with given id) was just reached.
    MX_ST_TEXT_API_ERROR = 3031,  # A previously received text API command was incorrect.
    MX_ST_PSTOP2 = 3032,  # A PStop2 was requested
    MX_ST_NO_VALID_CFG = 3033,  # Robot has not valid JSON configuration. Must contact support!
    MX_ST_TRACE_LVL_CHANGED = 3034,  # Robotctrl or uidaemon trace level has been changed
    MX_ST_TCP_DUMP_STARTED = 3035,  # TCPDump has started
    MX_ST_TCP_DUMP_DONE = 3036,  # TCPDump has ended
    MX_ST_ERROR_VBOX = 3037,  # The pneumatic module reported an error
    MX_ST_FW_UPDATE_PROGRESS = 3038,  # Firmware update progress (JSON format)
    MX_ST_EXT_TOOL_NEED_UPDATE = 3039,  # The external tool need a firmware update.
    MX_ST_COLLISION_STATUS = 3040,  # Collision status update
    MX_ST_COLLISION_ERROR = 3041,  # Collision error occurred.
    MX_ST_FW_NEED_REINSTALL = 3042,  # Firmware must be reinstalled again.
    MX_ST_ESTOP = 3070,  # The EStop condition raised
    MX_ST_INVALID = 0xFFFFFFFF,
MX_ST_EXTTOOL_SIM_OFF = 2048


class MxRobotState(IntEnum):
    MX_ROBOT_STATE_UNKNOWN = 0,
    MX_ROBOT_STATE_INIT = 1,
    MX_ROBOT_STATE_POWERED = 2,
    MX_ROBOT_STATE_ACTIVATING = 3,
    MX_ROBOT_STATE_ACTIVATED = 4,
    MX_ROBOT_STATE_HOMING = 5,
    MX_ROBOT_STATE_MASTERING = 6,
    MX_ROBOT_STATE_RUN = 7,
    MX_ROBOT_STATE_DEACTIVATING = 9,
MX_JSON_KEY_CODE = "code"  # Key for the status/command code in JSON message
MX_JSON_KEY_DATA = "data"  # Key for the status/command data in JSON message
MX_JSON_KEY_META_DATA = "metaData"  # Key for the status/command meta data in JSON message
MX_JSON_KEY_MSG_TYPE = "msgType"  # Key for message type inside metaData. Values from MxRobotMsgType
MX_JSON_KEY_FW_UPDATE_PROGRESS_UPDATING = "updating"  # bool: Firmware update has started
MX_JSON_KEY_FW_UPDATE_PROGRESS_VERSION = "version"  # string: Firmware version we're updating to
MX_JSON_KEY_FW_UPDATE_PROGRESS_ERROR = "error"  # bool: Firmware update has failed
MX_JSON_KEY_FW_UPDATE_PROGRESS_ERROR_MSG = "errorMsg"  # string: User message if failed
MX_JSON_KEY_FW_UPDATE_PROGRESS_PCT = "progressPct"  # float: Update percentage (0 to 100)
MX_JSON_KEY_FW_UPDATE_PROGRESS_STEP = "step"  # string: Current update step (human readable)
MX_JSON_KEY_FW_UPDATE_PROGRESS_LOG = "log"  # array of {time, msg}: Update history
MX_JSON_KEY_FW_UPDATE_PROGRESS_LOG_TIME = "time"  # int: Absolute time of this log (seconds since Epoch)
MX_JSON_KEY_STATUS_ROBOT_STATE = "state"  # integer: Value (as integer) from enum MxRobotState
MX_JSON_KEY_STATUS_ROBOT_SIM = "simMode"  # bool: Sim mode
MX_JSON_KEY_STATUS_ROBOT_RECOVERY = "recovery"  # bool: Recovery enabled
MX_JSON_KEY_STATUS_ROBOT_BRAKES = "brakesEngaged"  # bool: Brakes engaged
MX_JSON_KEY_STATUS_ROBOT_ERR = "errorCode"  # integer: Error code (0 if no error)
MX_JSON_KEY_STATUS_ROBOT_ERR_MSG = "errorMsg"  # string: User message related to error code
MX_JSON_KEY_STATUS_ROBOT_ESTOP = "eStop"  # bool: ESTOP condition is active
MX_JSON_KEY_MOTION_ROBOT_CHECKPOINT = "checkpoint"  # integer: Most recently reached checkpoint id
MX_JSON_KEY_MOTION_ROBOT_OFFLINE_PRGRM = "offlineProgramId"  # integer: Running offline-program Id
MX_JSON_KEY_MOTION_ROBOT_HOLD = "paused"  # bool: Hold motion
MX_JSON_KEY_MOTION_ROBOT_EOM = "eom"  # bool: End of motion
MX_JSON_KEY_MOTION_ROBOT_EOB = "eob"  # bool: End of block
MX_JSON_KEY_MOTION_ROBOT_PSTOP2 = "pStop2"  # bool: PSTOP2 condition is active
MX_JSON_KEY_MOTION_ROBOT_PSTOP2_RESETTABLE = "pStop2Resettable"  # bool: PSTOP2 condition can be reset
MX_JSON_KEY_MOTION_ROBOT_EXCESSIVE_TORQ = "excessiveTorque"  # bool: Excessive torque ratio
MX_JSON_KEY_NETWORK_CONFIG_ROBOT_NAME = "name"  # string: The robot name (hostname on the network)
MX_JSON_KEY_NETWORK_CONFIG_DHCP = "dhcp"  # bool: Indicate if IP is obtained using DHCP
MX_JSON_KEY_NETWORK_CONFIG_IP = "ip"  # string: The IPv4 address of the robot
MX_JSON_KEY_NETWORK_CONFIG_MASK = "mask"  # string: The netmask
MX_JSON_KEY_NETWORK_CONFIG_GATEWAY = "gateway"  # string: The gateway address
MX_JSON_KEY_NETWORK_CONFIG_MAC = "mac"  # string: The robot's MAC address
MX_FW_UPDATE_UPLOAD_URL = "/fw-update"
MX_GET_LOGS_URL = "/get-logs"
MX_FW_UPDATE_STATUS_EXTRACTING = "Extracting files from firmware package..."
MX_FW_UPDATE_STATUS_CLOSING_CONNECTIONS = "Closing connections and stacks..."
MX_FW_UPDATE_STATUS_LAUNCH_SCRIPT = "Launching firmware update script..."
MX_FW_UPDATE_STATUS_ANALYZING = "Analyzing files..."
MX_FW_UPDATE_STATUS_DRIVE = "Updating drive #"  # Plus drive number
MX_FW_UPDATE_STATUS_EXT_PORT = "Updating external port"
MX_FW_UPDATE_STATUS_EXT_TOOL = "Updating external tool"
MX_FW_UPDATE_STATUS_NO_FW_IMAGE = "(No firmware image in this package)"
MX_FW_UPDATE_STATUS_FW_IMAGE = "Updating firmware image"
MX_FW_UPDATE_STATUS_CLEANUP = "Cleanup after update"
MX_FW_UPDATE_STATUS_REBOOTING = "Awaiting for robot to reboot"
MX_CMD_TAG_ROBOT_CONTROL = "RobotControl"
MX_CMD_TAG_EXT_TOOL = "ExternalTool"
MX_CMD_TAG_MOTION = "Motion"
MX_CMD_TAG_UTILITIES = "Utilities"
MX_CMD_TAG_SYS_CFG = "SystemConfig"
MX_CMD_TAG_PGM = "Program"
MX_CMD_TAG_GET = "Get"
MX_CMD_TAG_PERMANENT = "Permanent"
MX_CMD_TAG_TEMPORARY = "Temporary"
MX_CMD_TAG_SIM = "Simulation"
MX_CMD_TAG_BRAKES = "Brakes"
MX_CMD_TAG_GRIPPER = "Gripper"
MX_CMD_TAG_PNEUMATIC = "Pneumatic"
MX_CMD_TAG_CONFIG = "Config"
MX_CMD_TAG_JNT_MOVE = "JointMove"
MX_CMD_TAG_LIN_MOVE = "LinearMove"
MX_CMD_TAG_MOTION_CONTROL = "Control"
MX_CMD_TAG_TORQUE_LIMIT = "TorqueLimits"
MX_CMD_TAG_NETWORK = "Network"
MX_CMD_TAG_JNT_LIMIT = "JointLimits"
MX_CMD_TAG_MONIT = "Monitoring"
MX_CMD_TAG_REAL_TIME = "RealTime"
MX_CMD_TAG_STATUS = "Status"
MX_CMD_TAG_TARGET = "Target"
MX_CMD_TAG_ACTUAL = "Actual"


class RobotStatusCodeInfo:

    def __init__(self, code, name, is_error, is_resettable):
        """This class contains information bout a robot status codes above (ex: MX_ST_BUFFER_FULL)

        Parameters
        ----------
        code : integer
            The integer value (ex: 1001)
        name : string
            The code name (ex: "MX_ST_BUFFER_FULL"
        is_error : bool
            True if this is an error code
        is_resettable : bool
            True if this is error code can be reset
        """
        self.code = code
        self.name = name
        self.is_error = is_error
        self.is_resettable = is_resettable


robot_status_code_info = {
    int(MxRobotStatusCode.MX_ST_NONE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NONE, "MX_ST_NONE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_BUFFER_FULL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_BUFFER_FULL, "MX_ST_BUFFER_FULL", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_UNKNOWN_CMD):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_UNKNOWN_CMD, "MX_ST_UNKNOWN_CMD", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_SYNTAX_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SYNTAX_ERR, "MX_ST_SYNTAX_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ARG_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ARG_ERR, "MX_ST_ARG_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NOT_ACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NOT_ACTIVATED, "MX_ST_NOT_ACTIVATED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NOT_HOMED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NOT_HOMED, "MX_ST_NOT_HOMED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_JOINT_OVER_LIMIT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_JOINT_OVER_LIMIT, "MX_ST_JOINT_OVER_LIMIT", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_BLOCKED_BY_180_DEG_PROT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_BLOCKED_BY_180_DEG_PROT, "MX_ST_BLOCKED_BY_180_DEG_PROT", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_START_CONF_MISMATCH):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_START_CONF_MISMATCH, "MX_ST_START_CONF_MISMATCH", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ALREADY_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ALREADY_ERR, "MX_ST_ALREADY_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_SINGULARITY_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SINGULARITY_ERR, "MX_ST_SINGULARITY_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ACTIVATION_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ACTIVATION_ERR, "MX_ST_ACTIVATION_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_HOMING_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_HOMING_ERR, "MX_ST_HOMING_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_MASTER_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_MASTER_ERR, "MX_ST_MASTER_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OUT_OF_REACH):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OUT_OF_REACH, "MX_ST_OUT_OF_REACH", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_SAVE_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_SAVE_ERR, "MX_ST_OFFLINE_SAVE_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_IGNORE_CMD_OFFLINE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_IGNORE_CMD_OFFLINE, "MX_ST_IGNORE_CMD_OFFLINE", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_MASTERING_NEEDED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_MASTERING_NEEDED, "MX_ST_MASTERING_NEEDED", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_IMPOSSIBLE_RESET_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_IMPOSSIBLE_RESET_ERR, "MX_ST_IMPOSSIBLE_RESET_ERR", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_MUST_BE_DEACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_MUST_BE_DEACTIVATED, "MX_ST_MUST_BE_DEACTIVATED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_SIM_MUST_DEACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SIM_MUST_DEACTIVATED, "MX_ST_SIM_MUST_DEACTIVATED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_FULL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_FULL, "MX_ST_OFFLINE_FULL", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ALREADY_SAVING):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ALREADY_SAVING, "MX_ST_ALREADY_SAVING", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ILLEGAL_WHILE_SAVING):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ILLEGAL_WHILE_SAVING, "MX_ST_ILLEGAL_WHILE_SAVING", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_HOMING_JOINTS_OUT_OF_RANGE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_HOMING_JOINTS_OUT_OF_RANGE, "MX_ST_HOMING_JOINTS_OUT_OF_RANGE", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NO_GRIPPER):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NO_GRIPPER, "MX_ST_NO_GRIPPER", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_CMD_FAILED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CMD_FAILED, "MX_ST_CMD_FAILED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NO_VBOX):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NO_VBOX, "MX_ST_NO_VBOX", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_EXT_TOOL_SIM_MUST_DEACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EXT_TOOL_SIM_MUST_DEACTIVATED, "MX_ST_EXT_TOOL_SIM_MUST_DEACTIVATED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LIST_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LIST_ERR, "MX_ST_OFFLINE_PROGRAM_LIST_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LOAD_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LOAD_ERR, "MX_ST_OFFLINE_PROGRAM_LOAD_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_SAVE_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_SAVE_ERR, "MX_ST_OFFLINE_PROGRAM_SAVE_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_DELETE_ERR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_DELETE_ERR, "MX_ST_OFFLINE_PROGRAM_DELETE_ERR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ACTIVATED, "MX_ST_ACTIVATED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_HOME_DONE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_HOME_DONE, "MX_ST_HOME_DONE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_DEACTIVATED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_DEACTIVATED, "MX_ST_DEACTIVATED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_ERROR_RESET):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ERROR_RESET, "MX_ST_ERROR_RESET", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_NO_ERROR_RESET):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NO_ERROR_RESET, "MX_ST_NO_ERROR_RESET", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_STATUS_ROBOT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_STATUS_ROBOT, "MX_ST_GET_STATUS_ROBOT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_MOTION_STATUS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_MOTION_STATUS, "MX_ST_GET_MOTION_STATUS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_BRAKES_OFF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_BRAKES_OFF, "MX_ST_BRAKES_OFF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_MASTER_DONE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_MASTER_DONE, "MX_ST_MASTER_DONE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_BRAKES_ON):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_BRAKES_ON, "MX_ST_BRAKES_ON", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_WRF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_WRF, "MX_ST_GET_WRF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_TRF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_TRF, "MX_ST_GET_TRF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINTS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINTS, "MX_ST_GET_JOINTS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_POSE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_POSE, "MX_ST_GET_POSE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_AUTO_CONF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_AUTO_CONF, "MX_ST_GET_AUTO_CONF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CONF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CONF, "MX_ST_GET_CONF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_AUTO_CONF_TURN):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_AUTO_CONF_TURN, "MX_ST_GET_AUTO_CONF_TURN", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CONF_TURN):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CONF_TURN, "MX_ST_GET_CONF_TURN", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_PAUSE_MOTION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_PAUSE_MOTION, "MX_ST_PAUSE_MOTION", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RESUME_MOTION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RESUME_MOTION, "MX_ST_RESUME_MOTION", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_CLEAR_MOTION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CLEAR_MOTION, "MX_ST_CLEAR_MOTION", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SIM_ON):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SIM_ON, "MX_ST_SIM_ON", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SIM_OFF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SIM_OFF, "MX_ST_SIM_OFF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EXTTOOL_SIM):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EXTTOOL_SIM, "MX_ST_EXTTOOL_SIM", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EOM_ON):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOM_ON, "MX_ST_EOM_ON", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EOM_OFF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOM_OFF, "MX_ST_EOM_OFF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EOB_ON):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOB_ON, "MX_ST_EOB_ON", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EOB_OFF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOB_OFF, "MX_ST_EOB_OFF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_START_SAVING):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_START_SAVING, "MX_ST_START_SAVING", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_N_CMD_SAVED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_N_CMD_SAVED, "MX_ST_N_CMD_SAVED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_START):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_START, "MX_ST_OFFLINE_START", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_LOOP_ON):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_LOOP_ON, "MX_ST_OFFLINE_LOOP_ON", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_LOOP_OFF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_LOOP_OFF, "MX_ST_OFFLINE_LOOP_OFF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_STATUS_GRIPPER):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_STATUS_GRIPPER, "MX_ST_GET_STATUS_GRIPPER", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CMD_PENDING_COUNT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CMD_PENDING_COUNT, "MX_ST_GET_CMD_PENDING_COUNT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_FW_VERSION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_FW_VERSION, "MX_ST_GET_FW_VERSION", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_FW_VERSION_FULL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_FW_VERSION_FULL, "MX_ST_GET_FW_VERSION_FULL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_EXT_TOOL_FW_VERSION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_EXT_TOOL_FW_VERSION, "MX_ST_GET_EXT_TOOL_FW_VERSION", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_ROBOT_SERIAL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_ROBOT_SERIAL, "MX_ST_GET_ROBOT_SERIAL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_PRODUCT_TYPE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_PRODUCT_TYPE, "MX_ST_GET_PRODUCT_TYPE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_CMD_SUCCESSFUL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CMD_SUCCESSFUL, "MX_ST_CMD_SUCCESSFUL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SET_CTRL_PORT_MONIT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SET_CTRL_PORT_MONIT, "MX_ST_SET_CTRL_PORT_MONIT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SYNC_CMD_QUEUE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SYNC_CMD_QUEUE, "MX_ST_SYNC_CMD_QUEUE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_DETECTED_DRIVES):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_DETECTED_DRIVES, "MX_ST_GET_DETECTED_DRIVES", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_DRIVE_ENC_INDEX):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_DRIVE_ENC_INDEX, "MX_ST_GET_DRIVE_ENC_INDEX", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_NETWORK_CONFIG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_NETWORK_CONFIG, "MX_ST_GET_NETWORK_CONFIG", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINT_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINT_LIMITS, "MX_ST_GET_JOINT_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SET_JOINT_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SET_JOINT_LIMITS, "MX_ST_SET_JOINT_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_SET_JOINT_LIMITS_CFG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_SET_JOINT_LIMITS_CFG, "MX_ST_SET_JOINT_LIMITS_CFG", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_WORKSPACE_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_WORKSPACE_LIMITS, "MX_ST_GET_WORKSPACE_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_WORKSPACE_LIMITS_CFG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_WORKSPACE_LIMITS_CFG, "MX_ST_GET_WORKSPACE_LIMITS_CFG", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_TOOL_SPHERE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_TOOL_SPHERE, "MX_ST_GET_TOOL_SPHERE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINT_LIMITS_CFG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINT_LIMITS_CFG, "MX_ST_GET_JOINT_LIMITS_CFG", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_ROBOT_NAME):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_ROBOT_NAME, "MX_ST_GET_ROBOT_NAME", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_MODEL_VEL_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_MODEL_VEL_LIMITS, "MX_ST_GET_MODEL_VEL_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CMD_DEF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CMD_DEF, "MX_ST_GET_CMD_DEF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_ROBOT_KIN_MODEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_ROBOT_KIN_MODEL, "MX_ST_GET_ROBOT_KIN_MODEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_ROBOT_DH_MODEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_ROBOT_DH_MODEL, "MX_ST_GET_ROBOT_DH_MODEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINT_OFFSET):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINT_OFFSET, "MX_ST_GET_JOINT_OFFSET", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_MODEL_JOINT_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_MODEL_JOINT_LIMITS, "MX_ST_GET_MODEL_JOINT_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_TEST_BENCH_MODE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_TEST_BENCH_MODE, "MX_ST_GET_TEST_BENCH_MODE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_MOTION_OPTIONS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_MOTION_OPTIONS, "MX_ST_GET_MOTION_OPTIONS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_MONITORING_INTERVAL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_MONITORING_INTERVAL, "MX_ST_GET_MONITORING_INTERVAL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_REAL_TIME_MONITORING):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_REAL_TIME_MONITORING, "MX_ST_GET_REAL_TIME_MONITORING", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_NETWORK_OPTIONS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_NETWORK_OPTIONS, "MX_ST_GET_NETWORK_OPTIONS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_RTC):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_RTC, "MX_ST_GET_RTC", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_BLENDING):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_BLENDING, "MX_ST_GET_BLENDING", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_VEL_TIMEOUT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_VEL_TIMEOUT, "MX_ST_GET_VEL_TIMEOUT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINT_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINT_VEL, "MX_ST_GET_JOINT_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_JOINT_ACC):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_JOINT_ACC, "MX_ST_GET_JOINT_ACC", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CART_LIN_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CART_LIN_VEL, "MX_ST_GET_CART_LIN_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CART_ANG_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CART_ANG_VEL, "MX_ST_GET_CART_ANG_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CART_ACC):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CART_ACC, "MX_ST_GET_CART_ACC", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_CHECKPOINT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_CHECKPOINT, "MX_ST_GET_CHECKPOINT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_GRIPPER_FORCE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_GRIPPER_FORCE, "MX_ST_GET_GRIPPER_FORCE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_GRIPPER_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_GRIPPER_VEL, "MX_ST_GET_GRIPPER_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_GRIPPER_RANGE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_GRIPPER_RANGE, "MX_ST_GET_GRIPPER_RANGE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_TORQUE_LIMITS_CFG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_TORQUE_LIMITS_CFG, "MX_ST_GET_TORQUE_LIMITS_CFG", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_GET_TORQUE_LIMITS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_GET_TORQUE_LIMITS, "MX_ST_GET_TORQUE_LIMITS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_POS, "MX_ST_RT_TARGET_JOINT_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_CART_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_CART_POS, "MX_ST_RT_TARGET_CART_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_VEL, "MX_ST_RT_TARGET_JOINT_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_TORQ):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_JOINT_TORQ, "MX_ST_RT_TARGET_JOINT_TORQ", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_CART_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_CART_VEL, "MX_ST_RT_TARGET_CART_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_CONF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_CONF, "MX_ST_RT_TARGET_CONF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TARGET_CONF_TURN):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TARGET_CONF_TURN, "MX_ST_RT_TARGET_CONF_TURN", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_JOINT_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_JOINT_POS, "MX_ST_RT_JOINT_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CART_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CART_POS, "MX_ST_RT_CART_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_JOINT_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_JOINT_VEL, "MX_ST_RT_JOINT_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_JOINT_TORQ):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_JOINT_TORQ, "MX_ST_RT_JOINT_TORQ", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CART_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CART_VEL, "MX_ST_RT_CART_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CONF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CONF, "MX_ST_RT_CONF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CONF_TURN):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CONF_TURN, "MX_ST_RT_CONF_TURN", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_ACCELEROMETER):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_ACCELEROMETER, "MX_ST_RT_ACCELEROMETER", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_ABS_JOINT_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_ABS_JOINT_POS, "MX_ST_RT_ABS_JOINT_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_GRIPPER_FORCE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_GRIPPER_FORCE, "MX_ST_RT_GRIPPER_FORCE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_GRIPPER_POS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_GRIPPER_POS, "MX_ST_RT_GRIPPER_POS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_GRIPPER_VEL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_GRIPPER_VEL, "MX_ST_RT_GRIPPER_VEL", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_EXTTOOL_STATUS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_EXTTOOL_STATUS, "MX_ST_RT_EXTTOOL_STATUS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_GRIPPER_STATE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_GRIPPER_STATE, "MX_ST_RT_GRIPPER_STATE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_VALVE_STATE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_VALVE_STATE, "MX_ST_RT_VALVE_STATE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CHECKPOINT):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CHECKPOINT, "MX_ST_RT_CHECKPOINT", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_WRF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_WRF, "MX_ST_RT_WRF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_TRF):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_TRF, "MX_ST_RT_TRF", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_RT_CYCLE_END):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_RT_CYCLE_END, "MX_ST_RT_CYCLE_END", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LIST):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LIST, "MX_ST_OFFLINE_PROGRAM_LIST", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LOAD):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_LOAD, "MX_ST_OFFLINE_PROGRAM_LOAD", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_SAVE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_SAVE, "MX_ST_OFFLINE_PROGRAM_SAVE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_DELETE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_PROGRAM_DELETE, "MX_ST_OFFLINE_PROGRAM_DELETE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_CONNECTED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CONNECTED, "MX_ST_CONNECTED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_USER_ALREADY):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_USER_ALREADY, "MX_ST_USER_ALREADY", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_UPGRADE_IN_PROGRESS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_UPGRADE_IN_PROGRESS, "MX_ST_UPGRADE_IN_PROGRESS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_CMD_TOO_LONG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CMD_TOO_LONG, "MX_ST_CMD_TOO_LONG", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_EOM):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOM, "MX_ST_EOM", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_ERROR_MOTION):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ERROR_MOTION, "MX_ST_ERROR_MOTION", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ERROR_DRIVE_COMM):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ERROR_DRIVE_COMM, "MX_ST_ERROR_DRIVE_COMM", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_INIT_FAILED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_INIT_FAILED, "MX_ST_INIT_FAILED", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EOB):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EOB, "MX_ST_EOB", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_END_OFFLINE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_END_OFFLINE, "MX_ST_END_OFFLINE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_CANT_SAVE_OFFLINE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CANT_SAVE_OFFLINE, "MX_ST_CANT_SAVE_OFFLINE", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_IGNORING_CMD):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_IGNORING_CMD, "MX_ST_IGNORING_CMD", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NO_OFFLINE_SAVED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NO_OFFLINE_SAVED, "MX_ST_NO_OFFLINE_SAVED", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_OFFLINE_LOOP):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_LOOP, "MX_ST_OFFLINE_LOOP", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_OFFLINE_INVALID):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_OFFLINE_INVALID, "MX_ST_OFFLINE_INVALID", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ERROR_GRIPPER):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ERROR_GRIPPER, "MX_ST_ERROR_GRIPPER", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_ERROR_VBOX):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ERROR_VBOX, "MX_ST_ERROR_VBOX", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_MAINTENANCE_CHECK):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_MAINTENANCE_CHECK, "MX_ST_MAINTENANCE_CHECK", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_INTERNAL_ERROR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_INTERNAL_ERROR, "MX_ST_INTERNAL_ERROR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_TORQUE_LIMIT_STATUS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TORQUE_LIMIT_STATUS, "MX_ST_TORQUE_LIMIT_STATUS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_TORQUE_LIMIT_ERROR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TORQUE_LIMIT_ERROR, "MX_ST_TORQUE_LIMIT_ERROR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_COLLISION_STATUS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_COLLISION_STATUS, "MX_ST_COLLISION_STATUS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_COLLISION_ERROR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_COLLISION_ERROR, "MX_ST_COLLISION_ERROR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_CHECKPOINT_REACHED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_CHECKPOINT_REACHED, "MX_ST_CHECKPOINT_REACHED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_TEXT_API_ERROR):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TEXT_API_ERROR, "MX_ST_TEXT_API_ERROR", is_error=True, is_resettable=True),
    int(MxRobotStatusCode.MX_ST_NO_VALID_CFG):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_NO_VALID_CFG, "MX_ST_NO_VALID_CFG", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_TRACE_LVL_CHANGED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TRACE_LVL_CHANGED, "MX_ST_TRACE_LVL_CHANGED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_TCP_DUMP_STARTED):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TCP_DUMP_STARTED, "MX_ST_TCP_DUMP_STARTED", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_TCP_DUMP_DONE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_TCP_DUMP_DONE, "MX_ST_TCP_DUMP_DONE", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_FW_UPDATE_PROGRESS):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_FW_UPDATE_PROGRESS, "MX_ST_FW_UPDATE_PROGRESS", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_EXT_TOOL_NEED_UPDATE):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_EXT_TOOL_NEED_UPDATE, "MX_ST_EXT_TOOL_NEED_UPDATE", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_FW_NEED_REINSTALL):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_FW_NEED_REINSTALL, "MX_ST_FW_NEED_REINSTALL", is_error=True, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_PSTOP2):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_PSTOP2, "MX_ST_PSTOP2", is_error=False, is_resettable=False),
    int(MxRobotStatusCode.MX_ST_ESTOP):
    RobotStatusCodeInfo(MxRobotStatusCode.MX_ST_ESTOP, "MX_ST_ESTOP", is_error=False, is_resettable=False),
}
#
# C constants from file mx_exttool_def.h
#
MX_EXT_TOOL_MPM500_NB_VALVES = 2  # MPM500 valve quantity
MX_EXT_TOOL_VBOX_MAX_VALVES = 6  # Maximum valve quantity for comm protocol


class MxExtToolType(IntEnum):
    MX_EXT_TOOL_NONE = 0,  # No external tool connected
    MX_EXT_TOOL_CURRENT = 1,  # Use in SetExtToolSim in order to simulate current external tool
    MX_EXT_TOOL_MEGP25_SHORT = 10,  # MEGP25 electrical gripper
    MX_EXT_TOOL_MEGP25_LONG = 11,  # MEGP25 electrical gripper long stroke
    MX_EXT_TOOL_VBOX_2VALVES = 20,  # MPM500 pneumatic module with 2 valves
    MX_EXT_TOOL_TYPE_INVALID = 0xFFFFFFFF,  # Set consistent sizeof(MxExtToolType)


class MxExtToolMode(IntEnum):
    MX_EXT_TOOL_COMPLEMENTARY = 0,  # Valves states are complementary
    MX_EXT_TOOL_INDEPENDENT = 1,  # Valves states are independent
    MX_EXT_TOOL_POSITION = 2,  # Position control
    MX_EXT_TOOL_MODE_INVALID = 0xFFFFFFFF,  # Set consistent sizeof(MxExtToolMode)


class MxCmdValveState(IntEnum):
    MX_VALVE_STATE_STAY = -1,  # Leave previous valve state
    MX_VALVE_STATE_CLOSE = 0,  # Close valve
    MX_VALVE_STATE_OPEN = 1,  # Open valve
# isort: on
# yapf: enable
