addTaskControl method

bool addTaskControl(
  1. TriggerConfiguration trigger,
  2. TaskConfiguration task,
  3. DeviceConfiguration<DeviceRegistration> destinationDevice, [
  4. Control control = Control.Start,
])

Add a task to be started or stopped (determined by control) on a destinationDevice once a trigger within this protocol is initiated. In case the trigger or task are not yet included in this study protocol, it will be added. The destinationDevice needs to be added prior to this call since it needs to be set up as either a primary device or connected device.

Throws an error if the destinationDevice is not included in this study protocol. Returns true if the task control has been added; false if the same control is already present.

Implementation

bool addTaskControl(
  TriggerConfiguration trigger,
  TaskConfiguration task,
  DeviceConfiguration destinationDevice, [
  Control control = Control.Start,
]) {
  assert(
      primaryDevices.contains(destinationDevice) ||
          connectedDevices!.contains(destinationDevice),
      'The passed device to which the task needs to be sent is not included in this study protocol.');

  // Add trigger and task to ensure they are included in the protocol.
  // Set the trigger's destination device if not specified.
  trigger.sourceDeviceRoleName ??= destinationDevice.roleName;
  addTrigger(trigger);
  addTask(task);

  // create and add a task control
  int triggerId = indexOfTrigger(trigger);
  if (triggerId >= 0) {
    taskControls.add(TaskControl(
      triggerId: triggerId,
      task: task,
      targetDevice: destinationDevice,
      control: control,
    ));
    return true;
  }
  return false;
}