Mid.CBF FHS Controller Design Overview

An FHS controller is a Tango device responsible for the control and management of one VCC, FSP-CORR, FSP-PST, or FSP-PSS bitstream on an FHS. It directs configurations and commands to the IP blocks present in either real firmware or firmware emulators.

Each IP block is represented by a “manager” class which is instantiated as a member of the controller’s component manager class. These classes provide a common interface for configuring, deconfiguring, starting, stopping, recovering, and getting the status of an IP block, and interact directly with either the firmware driver API or the emulator API for that IP block.

IP Block Statuses

The base FHS controller provides a GetStatus command, allowing an external entity to get the current status of any IP block at will. It takes in a list of IP block IDs and returns a JSON object containing the results of the status() methods run on all the specified IP blocks.

Note that Tango creates a default command called Status on all devices; this is a completely separate command, so make sure you are calling GetStatus, and not Status.

Logging

The controller and the IP blocks can each be configured with an independent logging level, both at deployment time via the Helm chart, and at runtime via controller commands. Each IP block uses the controller’s “global” logging level by default, unless overridden specifically for that block. The following commands are provided on the base controller:

UpdateGlobalLoggingLevel

Updates the global logging level for the controller, which impacts the controller’s own logs as well as the logs of any IP blocks without their own overrides. Takes in a single string specifying the desired logging level (e.g. "INFO").

UpdateIPBlockLoggingLevels

Assigns the specified logging level override to the specified IP block(s). Takes in a JSON object like:

{
  "ip_blocks": [
    "SomeIPBlockIDOne",
    "SomeIPBlockIDTwo",
  ],
  "level": "DEBUG"
}

ClearLoggingLevelOverrides

Clears all IP block logging level overrides, such that all IP blocks revert to using the controller’s global logging level. Takes no parameters.