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: .. code-block:: json { "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.