[docs]classMaskbit(enum.IntFlag):"""A maskbit enumeration. Intended for subclassing."""__version__=Nonedef__str__(self):members,_=enum._decompose(self.__class__,self._value_)# type: ignorereturn"|".join([str(m._name_orm._value_)forminmembers])@propertydefversion(self):"""The version of the flags."""returnself.__version__@propertydefactive_bits(self):"""Returns a list of flags that match the value."""return[bitforbitinself.__class__ifbit.value&self.value]# type: ignore
[docs]classCommandStatus(Maskbit):"""Maskbits for command status."""DONE=enum.auto()CANCELLED=enum.auto()FAILED=enum.auto()READY=enum.auto()RUNNING=enum.auto()TIMEDOUT=enum.auto()@propertydefis_done(self):"""Returns True if the command is done (completed or failed)."""returnTrueif(selfin[self.DONE,self.TIMEDOUT]orself.failed)elseFalse@propertydefis_running(self):"""Returns True if the command is running."""returnTrueifself==CommandStatus.RUNNINGelseFalse@propertydeffailed(self):"""Returns True if the command failed (or got cancelled)."""failed_states=self.CANCELLED|self.FAILEDreturnTrueifselfinfailed_stateselseFalse@propertydeftimed_out(self):"""Returns True if the command timed out."""returnTrueifself.TIMEDOUTinselfelseFalse
classPositionerStatusV4_1(Maskbit):"""Maskbits for positioner status (firmware >=04.01.00)."""__version__="4.1"SYSTEM_INITIALIZED=0x0000000000000001CONFIG_CHANGED=0x0000000000000002BSETTINGS_CHANGED=0x0000000000000004DATA_STREAMING=0x0000000000000008RECEIVING_TRAJECTORY=0x0000000000000010TRAJECTORY_ALPHA_RECEIVED=0x0000000000000020TRAJECTORY_BETA_RECEIVED=0x0000000000000040LOW_POWER_AFTER_MOVE=0x0000000000000080DISPLACEMENT_COMPLETED=0x0000000000000100DISPLACEMENT_COMPLETED_ALPHA=0x0000000000000200DISPLACEMENT_COMPLETED_BETA=0x0000000000000400COLLISION_ALPHA=0x0000000000000800COLLISION_BETA=0x0000000000001000CLOSED_LOOP_ALPHA=0x0000000000002000CLOSED_LOOP_BETA=0x0000000000004000PRECISE_POSITIONING_ALPHA=0x0000000000008000PRECISE_POSITIONING_BETA=0x0000000000010000COLLISION_DETECT_ALPHA_DISABLE=0x0000000000020000COLLISION_DETECT_BETA_DISABLE=0x0000000000040000MOTOR_CALIBRATION=0x0000000000080000MOTOR_ALPHA_CALIBRATED=0x0000000000100000MOTOR_BETA_CALIBRATED=0x0000000000200000DATUM_CALIBRATION=0x0000000000400000DATUM_ALPHA_CALIBRATED=0x0000000000800000DATUM_BETA_CALIBRATED=0x0000000001000000DATUM_INITIALIZATION=0x0000000002000000DATUM_ALPHA_INITIALIZED=0x0000000004000000DATUM_BETA_INITIALIZED=0x0000000008000000HALL_ALPHA_DISABLE=0x0000000010000000HALL_BETA_DISABLE=0x0000000020000000COGGING_CALIBRATION=0x0000000040000000COGGING_ALPHA_CALIBRATED=0x0000000080000000COGGING_BETA_CALIBRATED=0x0000000100000000ESTIMATED_POSITION=0x0000000200000000POSITION_RESTORED=0x0000000400000000SWITCH_OFF_AFTER_MOVE=0x0000000800000000CALIBRATION_SAVED=0x0000001000000000PRECISE_MOVE_IN_OPEN_LOOP_ALPHA=0x0000002000000000PRECISE_MOVE_IN_OPEN_LOOP_BETA=0x0000004000000000SWITCH_OFF_HALL_AFTER_MOVE=0x0000008000000000UNKNOWN=0x0000010000000000@propertydefcollision(self):"""Returns `True` if the positioner is collided."""return(Trueif(PositionerStatusV4_1.COLLISION_ALPHA&selforPositionerStatusV4_1.COLLISION_BETA&self)elseFalse)@propertydefinitialised(self):"""Returns `True` if the positioner is initialised."""returnTrueifPositionerStatusV4_1.SYSTEM_INITIALIZED&selfelseFalseclassPositionerStatusV4_0(Maskbit):"""Maskbits for positioner status (firmware <=04.00.04)."""__version__="4.0"SYSTEM_INITIALIZATION=0x00000001RECEIVING_TRAJECTORY=0x00000100TRAJECTORY_ALPHA_RECEIVED=0x00000200TRAJECTORY_BETA_RECEIVED=0x00000400DATUM_INITIALIZATION=0x00200000DATUM_ALPHA_INITIALIZED=0x00400000DATUM_BETA_INITIALIZED=0x00800000DISPLACEMENT_COMPLETED=0x01000000ALPHA_DISPLACEMENT_COMPLETED=0x02000000BETA_DISPLACEMENT_COMPLETED=0x04000000ALPHA_COLLISION=0x08000000BETA_COLLISION=0x10000000DATUM_INITIALIZED=0x20000000ESTIMATED_POSITION=0x40000000POSITION_RESTORED=0x80000000UNKNOWN=0x100000000@propertydefinitialised(self):"""Returns `True` if the positioner is initialised."""returnTrueifPositionerStatusV4_0.SYSTEM_INITIALIZATION&selfelseFalse@propertydefcollision(self):"""Returns `True` if the positioner is collided."""return(Trueif(PositionerStatusV4_0.ALPHA_COLLISION&selforPositionerStatusV4_0.BETA_COLLISION&self)elseFalse)#: Alias to the default positioner status flags.PositionerStatus=PositionerStatusV4_1
[docs]classBootloaderStatus(Maskbit):"""Maskbits for positioner status when in bootloader mode."""BOOTLOADER_INIT=0x00000001BOOTLOADER_TIMEOUT=0x00000002BSETTINGS_CHANGED=0x00000200RECEIVING_NEW_FIRMWARE=0x00010000NEW_FIRMWARE_RECEIVED=0x01000000NEW_FIRMWARE_CHECK_OK=0x02000000NEW_FIRMWARE_CHECK_BAD=0x04000000UNKNOWN=0x40000000
[docs]classResponseCode(enum.IntFlag):"""Maskbit for the status of the bootloader. - 0: All OK - 1: Received parameter is out of range - 2: Trajectory not accepted - 3: Already in motion, cannot accept command - 4: Datum not initialized - 5: Incorrect amount of data in packet - 6: One of the calibration modes is active: ``MOTOR_CALIBRATION``, ``COGGING_CALIBRATION``, ``DATUM_CALIBRATION``, ``DATUM _INITIALIZATION`` - 7: The motors are not calibrated and therefore the hall sensors can't be used - 8: A collision is detected, the flag has to be first cleared with stop trajectory - 9: Hall sensors are disabled and can therefore not be used - 10: Broadcast command not valid - 11: Command not supported by bootloader - 12: Invalid command - 13: Unknown command - 14: Datum not calibrated - 15: Halls sensors have been disabled """COMMAND_ACCEPTED=0VALUE_OUT_OF_RANGE=1INVALID_TRAJECTORY=2ALREADY_IN_MOTION=3DATUM_NOT_INITIALIZED=4INCORRECT_AMOUNT_OF_DATA=5CALIBRATION_MODE_ACTIVE=6MOTOR_NOT_CALIBRATED=7COLLISION_DETECTED=8HALL_SENSOR_DISABLED=9INVALID_BROADCAST_COMMAND=10INVALID_BOOTLOADER_COMMAND=11INVALID_COMMAND=12UNKNOWN_COMMAND=13DATUM_NOT_CALIBRATED=14HALL_SENSORS_DISABLED=15
[docs]classFPSStatus(enum.Flag):"""Status of the FPS."""IDLE=0x01MOVING=0x02COLLIDED=0x04ERRORED=0x08TEMPERATURE_NORMAL=0x10TEMPERATURE_COLD=0x20TEMPERATURE_VERY_COLD=0x40TEMPERATURE_UNKNOWN=0x80TEMPERATURE_BITS=(TEMPERATURE_NORMAL|TEMPERATURE_COLD|TEMPERATURE_VERY_COLD|TEMPERATURE_UNKNOWN)STATUS_BITS=IDLE|ERRORED|MOVING|COLLIDED