This package defines the classes that support mode management. Mode management is based on the Mode Management design pattern.

Current on-board systems are based on the concept of operational mode. The operational mode is an attribute of the on-board software as a whole. Its purpose is to adapt the software’s behaviour to various sets of external conditions. As one moves to a component-based approach, the basic design choice is between:

The first approach requires a “mode manager” object which is responsible for ensuring that each object behaves in a manner that is consistent with the current mode. This object would act as a centralized coordinator of object behaviour. As such, it would require a rather detailed understanding of how each object is constructed and of what its internal state is. This approach would weaken data encapsulation and is therefore rejected by the framework.

The selected approach makes operational mode a property of each component. Components now become responsible for updating their own operational mode in response to changes in the environment around them. A component keeps track of changes in its environment by monitoring properties of other objects. An object monitors the property of another object by using the mechanisms offered by the monitoring framelet. Note that a monitored property could also be the operational mode of another component. Hence, the traditional architecture with a system-wide operational mode could be implemented by having each component implement the same set of modes and by having components change their own mode to follow changes initiated by a “mode manager” object.

As an example of the decentralized mode concept adopted by the framework, consider the attitude controller object. The controller object is responsible for implementing the attitude control law. A controller object could have two modes: low accuracy control, and high accuracy control. The switch between the two modes could be done, for instance, on the basis of the size of the attitude error. The controller object would then register its interest in the attitude error and would ask to be notified when this error crosses a certain threshold. The notification that the attitude error has crossed the selected threshold would trigger a mode change.

More details on manoeuvre management can be found in the mode management technical note.