BaseMockController

class lsst.ts.hexrotcomm.BaseMockController(log, CommandCode, extra_commands, config, telemetry, host='127.0.0.1', command_port=5571, telemetry_port=5570, initial_state=<ControllerState.OFFLINE: 3>)

Bases: lsst.ts.hexrotcomm.CommandTelemetryClient

Base class for a mock Moog TCP/IP controller with states.

The controller uses two TCP/IP _client_ sockets, one to read commands and the other to write telemetry. Both sockets must be connected for the controller to operate; if either becomes disconnected the controller will stop moving, close any open sockets and try to reconnect.

Parameters:
log : logging.Logger

Logger.

extra_commands : dict of command key: method

Device-specific commands, as a dict of command key (as returned by get_command_key): method to call for that command. Note: BaseMockController already supports the standard state transition commands, including CLEAR_ERROR.

CommandCode : enum

Command codes.

config : ctypes.Structure

Configuration data. May be modified.

telemetry : ctypes.Structure

Telemetry data. Modified by update_telemetry.

host : str (optional)

IP address of CSC server.

command_port : int (optional)

Command socket port. This argument is intended for unit tests; use the default value for normal operation.

telemetry_port : int (optional)

Telemetry socket port. This argument is intended for unit tests; use the default value for normal operation.

initial_state : lsst.ts.idl.enums.Rotator.ControllerState (optional)

Initial state of mock controller.

Notes

To start a mock controller:

ctrl = MockController(…) await ctrl.connect_task

To stop the server:

await ctrl.stop()

Attributes Summary

command_connected Return True if the command socket is connected.
connect_retry_interval Interval between connection retries (sec).
connected Return True if command and telemetry sockets are connected.
enabled_substate
offline_substate
state
telemetry_connected Return True if the telemetry socket is connected.
telemetry_interval

Methods Summary

assert_state(state[, offline_substate, …])
assert_stationary()
close() Kill command and telemetry tasks and close the connections.
command_loop() Read and execute commands.
connect() Connect the sockets.
connect_command() Connect or reconnect to the command socket.
connect_telemetry() Connect or reconnect to the telemetry/configuration socket.
do_clear_error(command)
do_disable(command)
do_enable(command)
do_enter_control(command)
do_exit(command)
do_standby(command)
do_start(command)
end_run_command(command, cmd_method) Called when run_command is done.
get_command_key(command) Return the key to command_table.
run_command(command) Run a command.
set_state(state) Set the current state and substates.
telemetry_loop() Write configuration once, then telemetry at regular intervals.
update_and_get_header(frame_id) Update the config or telemetry header and return it.
update_telemetry() Update self.client.telemetry.
write_config() Write the current configuration.

Attributes Documentation

command_connected

Return True if the command socket is connected.

connect_retry_interval = 0.1

Interval between connection retries (sec).

connected

Return True if command and telemetry sockets are connected.

enabled_substate
offline_substate
state
telemetry_connected

Return True if the telemetry socket is connected.

telemetry_interval = 0.1

Methods Documentation

assert_state(state, offline_substate=None, enabled_substate=None)
assert_stationary()
close()

Kill command and telemetry tasks and close the connections.

Always safe to call.

command_loop()

Read and execute commands.

connect()

Connect the sockets.

Notes

This will wait forever for a connection.

connect_command()

Connect or reconnect to the command socket.

Notes

This will wait forever for a connection.

connect_telemetry()

Connect or reconnect to the telemetry/configuration socket.

Notes

This will wait forever for a connection.

do_clear_error(command)
do_disable(command)
do_enable(command)
do_enter_control(command)
do_exit(command)
do_standby(command)
do_start(command)
end_run_command(command, cmd_method)

Called when run_command is done.

Can be used to clear the set position.

get_command_key(command)

Return the key to command_table.

run_command(command)

Run a command.

Parameters:
command : Command

Command to run.

set_state(state)

Set the current state and substates.

Parameters:
state : lsst.ts.idl.enums.Rotator.ControllerState or int

New state.

Notes

Sets the substates as follows:

  • lsst.ts.idl.enums.Rotator.OfflineSubstate.AVAILABLE if state == lsst.ts.idl.enums.Rotator.ControllerState.OFFLINE
  • lsst.ts.idl.enums.Rotator.EnabledSubstate.STATIONARY if state == lsst.ts.idl.enums.Rotator.ControllerState.ENABLED

The real controller goes to substate lsst.ts.idl.enums.Rotator.OfflineSubstate.PUBLISH_ONLY when going offline, but requires the engineering user interface (EUI) to get out of that state, and we don’t have an EUI for the mock controller!

telemetry_loop()

Write configuration once, then telemetry at regular intervals.

update_and_get_header(frame_id)

Update the config or telemetry header and return it.

Call this prior to writing telemetry or configuration.

Parameters:
frame_id : int

Frame ID of header to write.

update_telemetry()

Update self.client.telemetry.

write_config()

Write the current configuration.