MCS to HPS

The interface from the MCS to the HPS is largely in the form of communication between Tango devices running on either side.

The interface also currently consists of low-level SSH calls from the MCS to the Talon-DX boards, which are used to copy FPGA bitstreams and Tango device server binaries to the boards and start the HPS Master process. This functionality may be moved in the future, but for now it is implemented in the TalonDxComponentManager Class, which is instantiated by the CbfController.

MCS and HPS Master DS

The interface between the MCS and the HPS Master device server is primarily made up of the configure command sent from the MCS to the HPS master, which programs the FPGA and spawns the remaining HPS device servers. Before this command can be run, it is expected that the MCS has already copied the necessary bitstreams and binaries to the board and the HPS master has obviously been started. This is all handled automatically as part of the MCS On Command.

The configure command has one argument, which is a JSON-formatted string. An example of its contents can be seen below.

{
    "description": "Configures Talon DX to run VCC firmware and devices.",
    "target": "talon1",
    "ip_address": "169.254.100.1",
    "ds_hps_master_fqdn": "talondx-001/hpsmaster/hps-1",
    "fpga_path": "/lib/firmware",
    "fpga_dtb_name": "vcc3_2ch4.dtb",
    "fpga_rbf_name": "vcc3_2ch4.core.rbf",
    "fpga_label": "base",
    "ds_path": "/lib/firmware/hps_software/vcc_test",
    "server_instance": "talon1_test",
    "devices": [
        "dscircuitswitch",
        "dsdct",
        "dsfinechannelizer",
        "dstalondxrdma",
        "dsvcc"
    ]
}

MCS On Command

The following diagram shows the CbfController On command sequence and how it integrates with other components in the Mid.CBF system. The steps are outlined in detail in the Engineering Console.

From a MCS perspective, the On command sequence consists of the following steps:

  • Arrows 4-7: Power on the Talon-DX boards

  • Arrow 9: Attempt to connect to each board over SSH (see TalonDxComponentManager Class)

  • Arrows 8-9: Copy the relevant binaries and bitstreams to each board

  • Arrow 10: Start up the HPS Master on each board

  • Arrow 12: Send the configure to each HPS Master device server

../../_images/on-command-sequence.png

MCS On Command Sequence

Command Sequence

Off Sequence

The sequence diagram below shows the main sequence of calls in MCS when the Off command is called. Return calls are not shown.

@startuml
'https://plantuml.com/sequence-diagram
skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}
skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}
skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}
title Off Command Sequence - Correlation\n
participant "CSP_Mid\n.LMC" as lmc
box "MCS"
participant "Mid.CBF\nController" as controller
participant "Mid.CBF\nSubarray" as subarray
collections "VCC" as vcc
collections "FSP" as fsp
collections "FSP\nCorr\nSubarray" as fspsubarray
participant "Talon\nLRU" as lru
participant "Power\nSwitch" as switch
participant "SLIM\nFS" as slim_fs
participant "SLIM\nVis" as slim_vis
collections "SLIM\nLink" as slimlink
end box
participant "PDU\n" as pdu
box "HPS"
participant "Linux\nOS" as os #LightGreen
participant "HPS\nMaster" as hpsmaster
collections "HPS\nDevices" as hpsdevices
end box
lmc        ->  controller    : Off()

note over controller         : clean up observing model:

loop until Subarray ObsState EMPTY or time exceeded
alt Subarray ObsState EMPTY
controller -> controller : Do nothing
else ObStates RESOURCING, RESTARTING, ABORTING,\nRESETTING
controller -> controller : Wait
else ObsStates IDLE\nCONFIGURING, READY,\nSCANNING
controller -> subarray   : Abort
else ObsState ABORTED, FAULT
controller -> subarray   : Restart
end loop
note over vcc            : VCC\nObsState IDLE
note over fspsubarray    : FSP Corr Subarray\nObsState IDLE

controller ->  subarray      : Off
subarray   ->  fspsubarray   : Off
fspsubarray->  fspsubarray   : PowerMode OFF
subarray   ->  subarray      : PowerMode OFF
controller ->  vcc           : Off
vcc        ->  vcc           : PowerMode OFF
controller ->  fsp           : Off
fsp        ->  fspsubarray   : Off
fspsubarray->  fspsubarray   : PowerMode OFF
fsp        ->  fsp           : PowerMode OFF
controller ->  slim_fs       : Off
slim_fs    ->  slim_fs       : PowerMode OFF
slim_fs    ->  slimlink      : Disconnect Links
loop
group SLIM FS Link
slimlink   ->  hpsdevices    : DisconnectTxRx
end loop
controller ->  slim_vis      : Off
slim_vis   ->  slim_vis      : PowerMode OFF
slim_vis   ->  slimlink      : Disconnect Links
loop
group SLIM Vis Link
slimlink   ->  hpsdevices    : DisconnectTxRx
end loop

note over subarray       : Subarray\nObsState EMPTY
controller ->  hpsmaster     : Shutdown(3)
group no Tango exception on Shutdown
hpsmaster  ->  hpsdevices !! : kill pid
hpsmaster  ->  os !!         : system "shutdown now"
controller ->  controller    : wait 4 sec
end group
controller ->  lru           : PowerOff
lru        ->  switch        : Off()
switch     ->  pdu           : Off(outlets)

controller ->  controller    : PowerMode OFF
@enduml

InitSysParam Sequence

The sequence diagram below shows the main sequence of calls in MCS to initialize the system parameters.

@startuml
'https://plantuml.com/sequence-diagram
skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}
skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}
skinparam responseMessageBelowArrow true
title InitSysParam Command Sequence\n
participant "CSP_Mid\n.LMC" as lmc
box "MCS"
participant "Mid.CBF\nController" as control
collections "Mid.CBF\nSubarray" as subarray
collections "VCC" as vcc
end box
participant "CAR" as car
note over control                 : OpState: OFF
lmc          -> control           : InitSysParam(\nJSON str)
control      -> control           : check OpState is OFF

alt OpState is OFF
control      -> control           : check JSON is compliant \nwith schema

alt #LightBlue JSON is compliant
alt #DeepSkyBlue URI provided
control      -> car               : retrieve init sys param file
end
control      -> control           : store sys_param
control      -> subarray          : write sys_param (json str)
subarray     -> subarray          : store sys_param
control      -> vcc               : set receptor ID
lmc         <-- control           : Success
else JSON is not compliant
lmc         <-- control           : Fail
end

else OpState is not OFF
lmc         <-- control           : Fail
end
@enduml

Configure Scan Sequence

The sequence diagram below shows the main sequence of calls in MCS to configure a correlation scan. Return calls are not shown.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

title MCS Correlation Configure Scan\n

participant "TMC\n" as tmc
participant "CSP_Mid\n.LMC" as lmc

box "MCS"
participant "Mid.CBF\nController" as controller
participant "Mid.CBF\nSubarray" as subarray
participant "VCC\n" as vcc
participant "FSP\n" as fsp
participant "FspCorr\nSubarray" as fspcorr
end box

participant "HPS\nDevices" as hps

lmc         -> subarray     : ConfigureScan(json_str)
subarray    -> subarray     : validateInput

group Each FSP
subarray    -> fsp          : Unsubscribe to state/healthstate
end group

subarray    -> tmc          : Unsubscribe all events
subarray    -> vcc          : GoToIdle
subarray    -> fspcorr      : GoToIdle
subarray    -> fsp          : RemoveSubarrayMembership(subarrayID)
subarray    -> vcc          : ConfigureBand(int)
subarray    -> vcc          : ConfigureScan(json_str)
vcc         -> hps          : configure HPS VCC

group Delay model subscription point
subarray    -> tmc          : subscribe delay model
end group

group Doppler subscription point
subarray    -> tmc          : subscribe Doppler phase correction
end group

group Jones matrix subscription point
subarray    -> tmc          : subscribe Jones matrix
end group

group Timing beam subscription point
subarray    -> tmc          : subscribe timing beam weights
end group

group SearchWindow
subarray    ->vcc           : ConfigureSearchWindow(data)
end group

group Each FSP
subarray    -> fsp          : AddSubarrayMembership(subarrayID)
subarray    -> fsp          : SetFunctionMode(str)
subarray    -> fsp          : subscribe to state/healthstate changes
fsp         -> hps          : configure HPS FSP
end group

group Each FSP Corr
subarray    -> fspcorr          : ConfigureScan(json_str)
fspcorr         -> hps          : configure HPS FSP Corr
end group

@enduml

The sequence diagram below shows additional detail for configuration of the VCC for a correlation scan, following the ConfigureScan call from LMC.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

title MCS Correlation Configure Scan Band 1/2 - VCC Detail\n

box "MCS"
participant "Mid.CBF\nSubarray" as subarray
participant "VCC\n" as vcc
end box

box "HPS"
participant "HPS VCC\nController" as hpsvcc
participant "HPS VCC\nBand1&2" as vccband1
participant "Circuit\nSwitch" as cs
participant "VCC\n" as vccdevice
participant "Wide Band\nInput Buffer" as wb
end box

subarray    -> subarray     : Calc dish_sample_rate
note right                  : dish_sample_rate (Band 1/2) = 3960 MHz + (1 * K * <U+0394>F)
subarray    -> vcc          : ConfigureBand(json_str)
vcc         -> hpsvcc       : ConfigureBand(int)
hpsvcc      -> vccband1     : On
vcc         -> vccband1     : SetInternalParameters(json_str)
vccband1    -> vccdevice    : write_attribute(gain)
subarray    -> vcc          : ConfigureScan(json_str)
vcc         -> vccband1     : ConfigureScan(json_str)
vccband1    -> cs           : write_attribute(input_select)
vccband1    -> vccdevice    : write_attribute(frame_count)
vccband1    -> wb           : write_attributes(stream_rate, packet_rate, etc)
vccband1    -> wb           : read_attributes(meta_transport_sample_rate, rx_sample_rate, dish_id)
vccband1    -> vccband1     : verify_configuration()



@enduml

When the Subarray calls ConfigureBand, the jsonstr argument contains:

  • “frequency_band”

  • “dish_sample_rate”

  • “samples_per_frame”

When the Subarray calls ConfigureScan, the jsonstr argument contains:

  • “config_id”

  • “frequency_band”

  • “band_5_tuning”

  • “frequency_band_offset_stream1”

  • “frequency_band_offset_stream2”

  • “rfi_flagging_mask”

  • “fsp”

The sequence diagram below shows details of calls to configure a FSP for a correlation scan.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

title HPS Configure FSP for Correlation Scan\n

box "MCS"
participant "\nFspCorr\nSubarray" as fspcorr
end box

box "HPS"
participant "FSP\nCorr\n" as hpsfspcorr
participant "Packet\nStream\nRepair" as psr
participant "Resampler\nDelay\nTracker" as rdt
participant "Fine\nChannelizer\n" as channelizer
participant "DDR4Corner\nTurner\n" as dct
participant "Correlator\n\n" as correlator
end box

fspcorr     -> hpsfspcorr   : ConfigureScan(json_str)

group Receptor ID
hpsfspcorr  -> psr         : write packet rate
hpsfspcorr  -> rdt         : stop
hpsfspcorr  -> rdt         : write attributes
hpsfspcorr  -> rdt         : set input sample rate
hpsfspcorr  -> rdt         : set output sample rate
hpsfspcorr  -> rdt         : start
hpsfspcorr  -> channelizer : write gain
end group

group Corner Turner
hpsfspcorr -> dct : read number of samples
hpsfspcorr -> dct : write attributes
end group

hpsfspcorr -> correlator : write attributes
hpsfspcorr -> correlator : program long term accumulator

@enduml

Abort Sequence

The sequence diagram below shows the main sequence of calls in MCS to Abort from a correlation scan. Return calls are not shown.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}

skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}

title Abort Command Sequence - Correlation\n

participant "CSP_Mid\n.LMC" as lmc

box "MCS"
participant "Mid.CBF\nSubarray" as subarray
collections "VCC" as vcc
collections "FSP" as fsp
collections "FSP\nCorr\nSubarray" as fspsubarray
end box

box "HPS"
participant "HPS\nVCC\nController" as hpsvcc
participant "HPS\nVCC\nBand1&2" as hpsvccband
participant "HPS FSP\nCorr App" as hpsfsp
collections "HPS\nLow Level\nDevices" as hpsdevices
end box

lmc        ->  subarray      : Abort

subarray   ->  vcc           : Abort
vcc        ->  hpsvccband    : Abort
note over hpsvccband         : (TBD)
subarray   <-- vcc           : Success
note over vcc                : VCC\nObsState ABORTED
subarray   ->  fspsubarray   : Abort
fspsubarray->  hpsfsp        : Abort (stub)
note over hpsfsp             : (TBD)
subarray   <-- fspsubarray   : Success
note over fspsubarray        : FSP Corr Subarray\nObsState ABORTED


lmc       <--  subarray      : Success
note over subarray           : Subarray\nObsState ABORTED


@enduml

ObsReset Sequence

The sequence diagram below shows the main sequence of calls in MCS to return to IDLE via the ObsReset command for a correlation scan. Return calls are not shown.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}

skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}

title ObsReset Command Sequence - Correlation\n

participant "CSP_Mid\n.LMC" as lmc

box "MCS"
participant "Mid.CBF\nSubarray" as subarray
collections "VCC" as vcc
collections "FSP" as fsp
collections "FSP\nCorr\nSubarray" as fspsubarray
end box

box "HPS"
participant "HPS\nVCC\nController" as hpsvcc
participant "HPS\nVCC\nBand1&2" as hpsvccband
participant "HPS FSP\nCorr App" as hpsfsp
collections "HPS\nLow Level\nDevices" as hpsdevices
end box

lmc         ->  subarray      : Obsreset

group if subarray in ObsState.FAULT
subarray    ->  vcc           : Abort
subarray    ->  fspsubarray   : Abort
end group

subarray    ->  vcc           : ObsReset
vcc         ->  hpsvccband    : ObsReset

note over vcc                 : VCC\nObsState IDLE
subarray    ->  fspsubarray   : ObsReset

note over fspsubarray         : FSP Corr Subarray\nObsState IDLE

subarray    ->  subarray      : deconfigure
subarray    ->  fsp           : RemoveSubarrayMembership

group no other subarray membership
fsp         ->  fspsubarray   : GoToIdle\n
end group

note over fspsubarray         : FSP Corr Subarray\nObsState IDLE
note over subarray            : Subarray\nObsState IDLE
lmc        <--  subarray      : Success


@enduml

Restart Sequence

The sequence diagram below shows the main sequence of calls in MCS to return to EMPTY via the Restart command for a correlation scan. Return calls are not shown.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}

skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}

title Restart Command Sequence - Correlation\n

participant "CSP_Mid\n.LMC" as lmc

box "MCS"
participant "Mid.CBF\nSubarray" as subarray
collections "VCC" as vcc
collections "FSP" as fsp
collections "FSP\nCorr\nSubarray" as fspsubarray
end box

box "HPS"
participant "HPS\nVCC\nController" as hpsvcc
participant "HPS\nVCC\nBand1&2" as hpsvccband
participant "HPS FSP\nCorr App" as hpsfsp
collections "HPS\nLow Level\nDevices" as hpsdevices
end box

lmc         ->  subarray      : Restart

group if subarray in ObsState.FAULT
subarray    ->  vcc           : Abort
subarray    ->  fspsubarray   : Abort
end group

subarray    ->  vcc           : ObsReset
vcc         ->  hpsvccband    : ObsReset

note over vcc                 : VCC\nObsState IDLE
subarray    ->  fspsubarray   : ObsReset

note over fspsubarray         : FSP Corr Subarray\nObsState IDLE

subarray    ->  subarray      : deconfigure
subarray    ->  fsp           : RemoveSubarrayMembership

group no other subarray membership
fsp         ->  fspsubarray   : GoToIdle\n
end group

note over fspsubarray         : FSP Corr Subarray\nObsState IDLE
note over subarray            : Subarray\nObsState IDLE

subarray    ->  subarray      : remove_all_receptors

lmc        <--  subarray      : Success


@enduml

Serial Lightweight Interconnect Mesh (SLIM) Interface

Refs: SLIM IP Block, Serial Lightweight Interconnect Mesh (SLIM) Design

The Serial Lightweight Interconnect Mesh (SLIM) provides a streaming packet link between two different FPGAs. At its lowest level, a TX and RX IP block are paired together to transfer packetized data across a high-speed serial link. The SLIM architecture consists of three parts: The HPS DsSlimTxRx device server, which provides an interface to the FPGA IP, the MCS SLIM Links, which establish links between Tx and Rx devices, and finally the top level MCS SLIM Mesh (simply called ‘SLIM’), which bundles links into groups for better organization.

The DsSLIMTX and DsSLIMRx are provided together as a multi-class HPS device server to control and monitor the SLIM Links. To provide a link, each TX device server must connect to a corresponding RX device server, based on the SLIM configuration (see next section).

During a SLIM Link’s initialization, the FQDNs of a Tx and Rx device pair are passed as arguments and device proxies are made to each device. Then the connection is monitored by periodically comparing the idle control words (a 55-bit hash of the Tx or Rx’s FQDN) on either side of the link, checking that the bit-error rate remains below an acceptable threshold, and ensuring that clocks on each side of the link remain in sync. Each link uses an enumerated HealthState attribute to summarize these metrics.

At the top of the SLIM hierarchy, sits the SLIM device (sometimes referred to as the ‘mesh’), which is essentially just a list of SLIM Links. Currently there are two SLIM instances, one for the frequency slice (FS) mesh, and the other for the visibility (Vis) mesh. While each SLIM Link is identical to the rest, they are organized into different mesh instances to differentiate between distinct stages in the signal processing chain. The SLIM device parses the SLIM configuration file (discussed next), and is responsible for spawning the appropriate links. It also rolls up all of the links’ HealthState attributes into a single master HealthState attribute to summarize the status of the entire mesh. If any of the links report a degraded HealthState, the mesh also becomes degraded.

SLIM Configuration

../../_images/4-receptor-correlator.png

SLIM Interconnections for AA0.5 CBF

SLIM Configuration Sequence

AA0.5 quantities shown.

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}

skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}

title FS SLIM Configuration Sequence\n


box "MCS"
participant "Mid.CBF\nController" as controller
participant "FS\nMesh" as mesh_fs
participant "Vis\nMesh" as mesh_vis
collections "FS\nLinks\n0-15" as links_fs
collections "Vis\nLinks\n0-3" as links_vis
end box

box "VCC-FSP-1\n(Talon A)"
collections "FS\nTx\n0-3"  as tx_fs_1
collections "FS\nRx\n0-3"  as rx_fs_1
participant "Vis\nTx\n"    as tx_vis_1
collections "Vis\nRx\n0-3" as rx_vis_1
end box

box "VCC-FSP-2\n(Talon B)"
collections "FS\nTx\n0-3"  as tx_fs_2
collections "FS\nRx\n0-3"  as rx_fs_2
participant "Vis\nTx\n"    as tx_vis_2
end box

box "VCC-FSP-3\n(Talon C)"
collections "FS\nTx\n0-3"  as tx_fs_3
collections "FS\nRx\n0-3"  as rx_fs_3
participant "Vis\nTx\n"    as tx_vis_3
end box

box "VCC-FSP-4\n(Talon D)"
collections "FS\nTx\n0-3"  as tx_fs_4
collections "FS\nRx\n0-3"  as rx_fs_4
participant "Vis\nTx\n"    as tx_vis_4
end box

controller -> mesh_fs   : Configure()
mesh_fs    -> links_fs  : Configure() x16

group#Red SLIM Links to FSP 1
links_fs   -> tx_fs_1   : Configure FS-Link0-Tx
links_fs   -> rx_fs_1   : Configure FS-Link0-Rx
links_fs   -> tx_fs_2   : Configure FS-Link1-Tx
links_fs   -> rx_fs_1   : Configure FS-Link1-Rx
links_fs   -> tx_fs_3   : Configure FS-Link2-Tx
links_fs   -> rx_fs_1   : Configure FS-Link2-Rx
links_fs   -> tx_fs_4   : Configure FS-Link3-Tx
links_fs   -> rx_fs_1   : Configure FS-Link3-Rx
end group 

group#LightGreen SLIM Links to FSP 2
links_fs   -> tx_fs_1   : Configure FS-Link4-Tx
links_fs   -> rx_fs_2   : Configure FS-Link4-Rx
links_fs   -> tx_fs_2   : Configure FS-Link5-Tx
links_fs   -> rx_fs_2   : Configure FS-Link5-Rx
links_fs   -> tx_fs_3   : Configure FS-Link6-Tx
links_fs   -> rx_fs_2   : Configure FS-Link6-Rx
links_fs   -> tx_fs_4   : Configure FS-Link7-Tx
links_fs   -> rx_fs_2   : Configure FS-Link7-Rx
end group 

group#DodgerBlue SLIM Links to FSP 3
links_fs   -> tx_fs_1   : Configure FS-Link8-Tx
links_fs   -> rx_fs_3   : Configure FS-Link8-Rx
links_fs   -> tx_fs_2   : Configure FS-Link9-Tx
links_fs   -> rx_fs_3   : Configure FS-Link9-Rx
links_fs   -> tx_fs_3   : Configure FS-Link10-Tx
links_fs   -> rx_fs_3   : Configure FS-Link10-Rx
links_fs   -> tx_fs_4   : Configure FS-Link11-Tx
links_fs   -> rx_fs_3   : Configure FS-Link11-Rx
end group 

group#GoldenRod SLIM Links to FSP 4
links_fs   -> tx_fs_1   : Configure FS-Link12-Tx
links_fs   -> rx_fs_4   : Configure FS-Link12-Rx
links_fs   -> tx_fs_2   : Configure FS-Link13-Tx
links_fs   -> rx_fs_4   : Configure FS-Link13-Rx
links_fs   -> tx_fs_3   : Configure FS-Link14-Tx
links_fs   -> rx_fs_4   : Configure FS-Link14-Rx
links_fs   -> tx_fs_4   : Configure FS-Link15-Tx
links_fs   -> rx_fs_4   : Configure FS-Link15-Rx
end group 

@enduml

@startuml
'https://plantuml.com/sequence-diagram

skinparam backgroundColor #EEEBDC
skinparam sequence {
ParticipantBorderColor DodgerBlue
ParticipantBackgroundColor DeepSkyBlue
ActorBorderColor DarkGreen
ActorBackgroundColor Green
BoxBorderColor LightBlue
BoxBackgroundColor #F0FFFF
}

skinparam collections {
  BackGroundColor LightBlue
  BorderColor DodgerBlue
}

skinparam database {
  BackgroundColor LightGreen
  BorderColor DarkGreen
}

title Visibility SLIM Configuration Sequence\n


box "MCS"
participant "Mid.CBF\nController" as controller
participant "FS\nMesh" as mesh_fs
participant "Vis\nMesh" as mesh_vis
collections "FS\nLinks\n0-15" as links_fs
collections "Vis\nLinks\n0-3" as links_vis
end box

box "VCC-FSP-1\n(Talon A)"
collections "FS\nTx\n0-3"  as tx_fs_1
collections "FS\nRx\n0-3"  as rx_fs_1
participant "Vis\nTx\n"    as tx_vis_1
collections "Vis\nRx\n0-3" as rx_vis_1
end box

box "VCC-FSP-2\n(Talon B)"
collections "FS\nTx\n0-3"  as tx_fs_2
collections "FS\nRx\n0-3"  as rx_fs_2
participant "Vis\nTx\n"    as tx_vis_2
end box

box "VCC-FSP-3\n(Talon C)"
collections "FS\nTx\n0-3"  as tx_fs_3
collections "FS\nRx\n0-3"  as rx_fs_3
participant "Vis\nTx\n"    as tx_vis_3
end box

box "VCC-FSP-4\n(Talon D)"
collections "FS\nTx\n0-3"  as tx_fs_4
collections "FS\nRx\n0-3"  as rx_fs_4
participant "Vis\nTx\n"    as tx_vis_4
end box

controller -> mesh_vis  : Configure()
mesh_vis   -> links_vis : Configure() x4

links_vis   -> tx_vis_1  : Configure Vis-Link0-Tx
links_vis   -> rx_vis_1  : Configure Vis-Link0-Rx
links_vis   -> tx_vis_2  : Configure Vis-Link1-Tx
links_vis   -> rx_vis_1  : Configure Vis-Link1-Rx
links_vis   -> tx_vis_3  : Configure Vis-Link2-Tx
links_vis   -> rx_vis_1  : Configure Vis-Link2-Rx
links_vis   -> tx_vis_4  : Configure Vis-Link3-Tx
links_vis   -> rx_vis_1  : Configure Vis-Link3-Rx 

@enduml

SLIM Tx / Rx Device Servers (HPS)

Note: See SLIM Tx/Rx Documentation for more details.

SLIM Tx

Ref: tx_slim.tango.json

SLIM Rx Ref: rx_slim.tango.json