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