OpenC3/cosmos

View on GitHub
openc3/data/config/widgets.yaml

Summary

Maintainability
Test Coverage
---
Layout Widgets:
  description: Layout widgets are used to position other widgets on the screen.
    For example, the HORIZONTAL layout widget places the widgets it encapsulates horizontally on the screen.
  collection:
    VERTICAL:
      summary: Places the widgets it encapsulates vertically
      description:
        The screen defaults to a vertical layout, so if no layout widgets
        are specified, all widgets will be automatically placed within a VERTICAL
        layout widget. The VERTICAL widget sizes itself to fit its contents.
      parameters:
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        VERTICAL 5px
          LABEL "TEST"
          LABEL "SCREEN"
        END
    VERTICALBOX:
      summary: Places the widgets it encapsulates vertically inside a thin border
      description: The VERTICALBOX widget sizes itself
        to fit its contents vertically and to fit the screen horizontally
      parameters:
        - name: Title
          required: false
          description: Text to place within the border to label the box
          values: .*
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        VERTICALBOX Info
          LABEL "TEST"
          LABEL "SCREEN"
        END
    HORIZONTAL:
      summary: Places the widgets it encapsulates horizontally
      description: The HORIZONTAL widget sizes itself to fit its contents
      parameters:
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        HORIZONTAL 100
          LABEL "TEST"
          LABEL "SCREEN"
        END
    HORIZONTALBOX:
      summary: Places the widgets it encapsulates horizontally inside a thin border
      description: The HORIZONTALBOX widget sizes itself to fit its contents
      parameters:
        - name: Title
          required: false
          description: Text to place within the border to label the box
          values: .*
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        HORIZONTALBOX Info 10
          LABEL "TEST"
          LABEL "SCREEN"
        END
    MATRIXBYCOLUMNS:
      summary: Places the widgets into a table-like matrix
      description: The MATRIXBYCOLUMNS widget sizes itself to fit its contents
      parameters:
        - name: Columns
          required: true
          description: The number of columns to create
          values: .*
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        MATRIXBYCOLUMNS 3 10
          LABEL "COL 1"
          LABEL "COL 2"
          LABEL "COL 3"
          LABEL "100"
          LABEL "200"
          LABEL "300"
        END
    SCROLLWINDOW:
      summary: Places the widgets inside of it into a scrollable area
      description: The SCROLLWINDOW widget sizes itself to fit the screen in which it is contained
      parameters:
        - name: Height
          required: false
          description: Maximum height of the scroll window in pixels (default = 200)
          values: .*
        - name: Margin
          required: false
          description: Margin between widgets (default = 0px)
          values: .*
      example: |
        SCROLLWINDOW 100 10
          VERTICAL
            LABEL "100"
            LABEL "200"
            LABEL "300"
            LABEL "400"
            LABEL "500"
            LABEL "600"
            LABEL "700"
            LABEL "800"
            LABEL "900"
          END
        END
    TABBOOK:
      summary: Creates a tabbed area in which to place TABITEM widgets
    TABITEM:
      summary: Creates a VERTICAL layout tab into which to place widgets
      parameters:
        - name: Tab text
          required: true
          description: Text to display in the tab
          values: .*
      example: |
        TABBOOK
          TABITEM "Tab 1"
            LABEL "100"
            LABEL "200"
          END
          TABITEM "Tab 2"
            LABEL "300"
            LABEL "400"
          END
        END
    IFRAME:
      summary: Open external tools in an Iframe within OpenC3
      parameters:
        - name: URL
          required: true
          description: The path to the page to display in the iframe
          values: .*
        - name: Width
          required: false
          description: Width of the widget
          values: .*
        - name: Height
          required: false
          description: Height of the widget
          values: .*
      example: |
        IFRAME https://openc3.com 900 450
Decoration Widgets:
  description:
    Decoration widgets are used to enhance the appearance of the screen.
    They do not respond to input, nor does the output vary with telemetry.
  collection:
    LABEL:
      summary: Displays text on the screen
      description: Generally, label widgets contain a telemetry mnemonic and are placed next to the telemetry VALUE widget.
      parameters:
        - name: Text
          required: true
          description: Text to display on the label
          values: .*
      example: |
        LABEL "Note: This is only a warning"
    HORIZONTALLINE:
      summary: Displays a horizontal line on the screen that can be used as a separator
      since: 5.5.1
      example: |
        LABEL Over
        HORIZONTALLINE
        LABEL Under
    SECTIONHEADER:
      summary: DEPRECATED - Displays a label that is underlined with a horizontal line
      description: Use a VERTICALBOX or HORIZONTALBOX with title parameter instead of SECTIONHEADER
      parameters:
        - name: Text
          required: true
          description: Text to display
          values: .*
    TITLE:
      summary: Displays a large centered title on the screen
      parameters:
        - name: Text
          required: true
          description: Text to display
          values: .*
      example: |
        TITLE "Title"
        HORIZONTALLINE
        LABEL "Label"
    SPACER:
      summary: Places a fixed size spacer in between widgets
      parameters:
        - name: Width
          required: true
          description: Width of the spacer in pixels
          values: .*
        - name: Height
          required: true
          description: Height of the spacer in pixels
          values: .*
      example: |
        VERTICAL 3
          LABEL "Spacer below"
          SPACER 0 100
          LABEL "Spacer above"
        END
Telemetry Widgets:
  description: Telemetry widgets are used to display telemetry values.
    The first parameters to each of these widgets is a telemetry mnemonic.
    Depending on the type and purpose of the telemetry item, the screen designer
    may select from a wide selection of widgets to display the value in the most useful format.
  collection:
    ARRAY:
      summary: Displays ARRAY data organized into rows and space separated
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Width
          required: false
          description: Width of the widget (default = 200)
          values: .*
        - name: Height
          required: false
          description: Height of the widget (default = 100)
          values: .*
        - name: Format string
          required: false
          description: Format string applied to each array item (default = nil)
          values: .*
        - name: Items per row
          required: false
          description: Number of array items per row (default = 4)
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        ARRAY INST HEALTH_STATUS ARY 250 80 "0x%x" 6 FORMATTED
        ARRAY INST HEALTH_STATUS ARY2 200 100 nil 4 WITH_UNITS
    BLOCK:
      summary: Displays BLOCK data organized into rows and space separated
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Width
          required: false
          description: Width of the widget (default = 200)
          values: .*
        - name: Height
          required: false
          description: Height of the widget (default = 100)
          values: .*
        - name: Format string
          required: false
          description: Format string applied to each array item (default = nil)
          values: .*
        - name: Bytes per word
          required: false
          description: Number of bytes per word (default = 4)
          values: .*
        - name: Words per row
          required: false
          description: Number of words per row (default = 4
          values: .*
        - name: Address format
          required: false
          description:
            Format for the address printed at the beginning of each line
            (default = nil which means do not print an address)
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        BLOCK INST IMAGE IMAGE 400 130 "%02X" 4 4 "0x%08X:"
    # FORMATFONTVALUE:
    #   summary: Displays a box with a value printed inside
    #     that is formatted by the specified string rather than by a format string given
    #     in the telemetry definition files. Additionally, this widget can use a specified
    #     font. The white portion of the box darkens to gray while the value remains
    #     stagnant, then brightens to white each time the value changes. Additionally
    #     the value is colored based on the items limits state (Red for example if it is out of limits).
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Format string
    #       required: false
    #       description: Printf style format string to apply to the telemetry item
    #       values: .*
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Number of characters
    #       required: false
    #       description: The number of characters wide to make the value box (default = 12)
    #       values: .*
    #     - name: Font name
    #       required: false
    #       description: The font to use. (default = arial)
    #       values: .*
    #     - name: Font size
    #       required: false
    #       description: The font size. (default = 100)
    #       values: .*
    #   example: |
    #     FORMATFONTVALUE INST LATEST TIMESEC %012u CONVERTED 12 arial 30
    FORMATVALUE:
      summary: Displays a box with a formatted value
      description:
        Data is formatted by the specified string rather than by a format string given in
        the telemetry definition files. The white portion of the box darkens to gray
        while the value remains stagnant, then brightens to white each time the value
        changes. Additionally the value is colored based on the items limits state
        (Red for example if it is out of limits).
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Format string
          required: false
          description: Printf style format string to apply to the telemetry item
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        FORMATVALUE INST LATEST TIMESEC %012u CONVERTED 20
    LABELLED:
      summary: Displays a LABEL followed by a LED
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Width
          required: false
          description: Width of the LED circle (default = 15)
          values: .*
        - name: Height
          required: false
          description: Height of the LED circle (default = 15)
          values: .*
        - name: Justification
          required: false
          description: How to justify the label and LED together. The default of
            'SPLIT' aligns the label to the left and the LED to the right with any
            additional space going between them. 'CENTER' pushes the label and LED
            together with any additional space to the left and right. 'LEFT' or 'RIGHT'
            pushes them to the respective side with the space going on the opposite.
          values: ["SPLIT", "CENTER", "LEFT", "RIGHT"]
      example: |
        LABELLED INST PARAMS VALUE1
          SETTING LED_COLOR GOOD GREEN
          SETTING LED_COLOR BAD RED
      settings:
        LED_COLOR:
          summary: Map a state or value to a color
          parameters:
            - name: Value
              required: true
              description: State or value. ANY used to match any value or state not declared.
              values: .+
            - name: LED color
              required: true
              description: Color of the LED
              values: .+
    LABELPROGRESSBAR:
      summary: Displays a LABEL with the item name followed by a PROGRESSBAR
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Scale factor
          required: false
          description: Value to multiply the telemetry item by before displaying
            in the progress bar. Final value should be in the range of 0 to 100. Default is 1.0.
          values: .*
        - name: Width
          required: false
          description: Width of the progress bar (default = 80 pixels
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        LABELPROGRESSBAR INST ADCS POSPROGRESS 2 200 RAW
        LABELPROGRESSBAR INST ADCS POSPROGRESS
    LABELVALUE:
      summary: Displays a LABEL with the item name followed by a VALUE
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        LABELVALUE INST LATEST TIMESEC CONVERTED 18
        LABELVALUE INST LATEST COLLECT_TYPE
    LABELVALUEDESC:
      summary: Displays a LABEL with the items description followed by a VALUE
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Description
          required: false
          description:
            The description to display in the label (default is to display
            the description text associated with the telemetry item)
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        LABELVALUEDESC INST HEALTH_STATUS TEMP1 "Temperature number 1" RAW 18
        LABELVALUEDESC INST HEALTH_STATUS COLLECT_TYPE
    # LABELFORMATVALUE:
    #   summary: Displays a LABEL widget to show the telemetry
    #     items name followed by a formatted VALUE widget to display the items value.
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Format String
    #       required: true
    #       description: Printf style format string, for example %0.6f
    #       values: .*
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Number of characters
    #       required: false
    #       description: The number of characters wide to make the value box (default = 12)
    #       values: .*
    LABELVALUELIMITSBAR:
      summary: Displays a LABEL with the item name followed by VALUE and LIMITSBAR widgets
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      examples: |
        LABELVALUELIMITSBAR INST HEALTH_STATUS TEMP1 RAW 18
        LABELVALUELIMITSBAR INST HEALTH_STATUS TEMP1
    LABELVALUELIMITSCOLUMN:
      summary: Displays a LABEL with the item name followed by VALUE and LIMITSCOLUMN widgets
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        LABELVALUELIMITSCOLUMN INST HEALTH_STATUS TEMP1 CONVERTED 18
        LABELVALUELIMITSCOLUMN INST HEALTH_STATUS TEMP1
    LABELVALUERANGEBAR:
      summary: Displays a LABEL with the item name followed by VALUE and RANGEBAR widgets
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Low Value
          required: true
          description:
            Minimum value to display on the range bar. If the telemetry
            item goes below this value the bar is “pegged” on the low end.
          values: .+
        - name: High Value
          required: true
          description:
            Maximum value to display on the range bar. If the telemetry
            item goes above this value the bar is “pegged” on the high end.
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
        - name: Width
          required: false
          description: Width of the range bar (default = 160)
          values: .*
        - name: Height
          required: false
          description: Height of the range bar (default = 25)
          values: .*
      example: |
        LABELVALUERANGEBAR INST HEALTH_STATUS TEMP1 0 100000 RAW 18 200 40
        LABELVALUERANGEBAR INST HEALTH_STATUS TEMP1 -120 120
    # LABELVALUERANGECOLUMN:
    #   summary: Displays a LABEL widget to show the telemetry item's name,
    #     followed by a VALUE widget to display the item's value, followed by a RANGECOLUMN widget.
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Low Value
    #       required: true
    #       description: Minimum value to display on the range bar. If the telemetry
    #         item goes below this value the bar is “pegged” on the low end.
    #       values: .+
    #     - name: High Value
    #       required: true
    #       description: Maximum value to display on the range bar. If the telemetry
    #         item goes above this value the bar is “pegged” on the high end.
    #       values: .+
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Number of characters
    #       required: false
    #       description: The number of characters wide to make the value box (default = 12)
    #       values: .*
    #     - name: Width
    #       required: false
    #       description: Width of the range bar (default = 160)
    #       values: .*
    #     - name: Height
    #       required: false
    #       description: Height of the range bar (default = 25)
    #       values: .*
    #   example: |
    #     LABELVALUERANGECOLUMN INST HEALTH_STATUS TEMP1 0 100000 RAW 18 200 40
    #     LABELVALUERANGECOLUMN INST HEALTH_STATUS TEMP1 -120 120
    LED:
      summary: Displays a LED which changes color based on telemetry values
      description:
        By default TRUE is green and FALSE is red and all other values are black.
        Additional values can be added by using the LED_COLOR setting. For example
        LED INST PARAMS VALUE3 RAW can be followed by SETTING LED_COLOR 0 GREEN,
        SETTING LED_COLOR 1 RED, and SETTING LED_COLOR ANY ORANGE.
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Width
          required: false
          description: Width of the LED circle (default = 15)
          values: .*
        - name: Height
          required: false
          description: Height of the LED circle (default = 15)
          values: .*
      example: |
        LED INST PARAMS VALUE5 RAW 25 20 # Ellipse
          SETTING LED_COLOR 0 GREEN
          SETTING LED_COLOR 1 RED
          SETTING LED_COLOR ANY YELLOW
      settings:
        LED_COLOR:
          summary: Map a state or value to a color
          parameters:
            - name: Value
              required: true
              description: State or value. ANY used to match any value or state not declared.
              values: .+
            - name: LED color
              required: true
              description: Color of the LED
              values: .+
    LIMITSBAR:
      summary: Displays an item's current value within its colored limits horizontally
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Width
          required: false
          description: Width of the range bar (default = 160)
          values: .*
        - name: Height
          required: false
          description: Height of the range bar (default = 25)
          values: .*
      example: |
        LIMITSBAR INST HEALTH_STATUS TEMP1 CONVERTED 200 50
        LIMITSBAR INST HEALTH_STATUS TEMP1
    LIMITSCOLUMN:
      summary: Displays an item's current value within its colored limits vertically
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Width
          required: false
          description: Width of the range bar (default = 160)
          values: .*
        - name: Height
          required: false
          description: Height of the range bar (default = 25)
          values: .*
      example: |
        LIMITSCOLUMN INST HEALTH_STATUS TEMP1 CONVERTED 50 200
        LIMITSCOLUMN INST HEALTH_STATUS TEMP1
    LIMITSCOLOR:
      summary: Displays a circle depicting the limits color of an item
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Radius
          required: false
          description: Radius of the circle (default is 10)
          values: .*
        - name: Full Item Name
          required: false
          description: Show the full item name (default is false)
          values: .*
      example: |
        LIMITSCOLOR INST HEALTH_STATUS TEMP1 CONVERTED 30 TRUE
        LIMITSCOLOR INST HEALTH_STATUS TEMP1
    VALUELIMITSBAR:
      summary: Displays an item VALUE followed by LIMITSBAR
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        VALUELIMITSBAR INST HEALTH_STATUS TEMP1 CONVERTED 18
        VALUELIMITSBAR INST HEALTH_STATUS TEMP1
    VALUELIMITSCOLUMN:
      summary: Displays an item VALUE followed by LIMITSCOLUMN
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 8)
          values: .*
      example: |
        VALUELIMITSCOLUMN INST HEALTH_STATUS TEMP1 CONVERTED 18
        VALUELIMITSCOLUMN INST HEALTH_STATUS TEMP1
    VALUERANGEBAR:
      summary: Displays an item VALUE followed by RANGEBAR
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Low Value
          required: true
          description:
            Minimum value to display on the range bar. If the telemetry
            item goes below this value the bar is “pegged” on the low end.
          values: .+
        - name: High Value
          required: true
          description:
            Maximum value to display on the range bar. If the telemetry
            item goes above this value the bar is “pegged” on the high end.
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
        - name: Width
          required: false
          description: Width of the range bar (default = 160)
          values: .*
        - name: Height
          required: false
          description: Height of the range bar (default = 25)
          values: .*
      example: |
        VALUERANGEBAR INST HEALTH_STATUS TEMP1 0 100000 RAW 18 200 40
        VALUERANGEBAR INST HEALTH_STATUS TEMP1 -120 120
    # VALUERANGECOLUMN:
    #   summary: Displays a graphical representation of where
    #     an item's value falls within a range vertically and its value in a VALUE widget.
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Low Value
    #       required: true
    #       description: Minimum value to display on the range bar. If the telemetry
    #         item goes below this value the bar is “pegged” on the low end.
    #       values: .+
    #     - name: High Value
    #       required: true
    #       description: Maximum value to display on the range bar. If the telemetry
    #         item goes above this value the bar is “pegged” on the high end.
    #       values: .+
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Number of characters
    #       required: false
    #       description: The number of characters wide to make the value box (default = 12)
    #       values: .*
    #     - name: Width
    #       required: false
    #       description: Width of the range bar (default = 160)
    #       values: .*
    #     - name: Height
    #       required: false
    #       description: Height of the range bar (default = 25)
    #       values: .*
    # example: |
    #   VALUERANGECOLUMN INST HEALTH_STATUS TEMP1 0 100000 RAW 18 200 40
    #   VALUERANGECOLUMN INST HEALTH_STATUS TEMP1 -120 120
    LINEGRAPH:
      summary: Displays a line graph of a telemetry item
      parameters:
        # Inject the graph parameters
        <%= MetaConfigParser.load('_graph_params.yaml').to_meta_config_yaml(8) %>
      example: |
        LINEGRAPH INST HEALTH_STATUS TEMP1
          SETTING ITEM INST ADCS Q1 # Add additional item to graph
        LINEGRAPH INST HEALTH_STATUS TEMP2 RAW
        LINEGRAPH INST HEALTH_STATUS TEMP3 CONVERTED REDUCED_MINUTE MIN
          SETTING SIZE 600 500 # width height
          SETTING HISTORY 1h # load 1 hour of data into graph
        LINEGRAPH INST HEALTH_STATUS TEMP4
          SETTING HISTORY 30m # load 30 minutes of data into graph
      settings:
        # Inject the graph settings
        <%= MetaConfigParser.load('graph_settings.yaml').to_meta_config_yaml(8) %>
    SPARKLINE:
      summary: Displays a sparkline graph (no cursor, scale or legend) of a telemetry item
      parameters:
        # Inject the graph parameters
        <%= MetaConfigParser.load('_graph_params.yaml').to_meta_config_yaml(8) %>
      example: |
        SPARKLINE INST HEALTH_STATUS TEMP1
          SETTING SIZE 400 50
          SETTING HISTORY 30s # Add 30 seconds of data into graph
      settings:
        # Inject the graph settings
        <%= MetaConfigParser.load('graph_settings.yaml').to_meta_config_yaml(8) %>
    LABELSPARKLINE:
      summary: Displays a LABEL with the item name followed by a SPARKLINE
      parameters:
        # Inject the graph parameters
        <%= MetaConfigParser.load('_graph_params.yaml').to_meta_config_yaml(8) %>
      example: |
        LABELSPARKLINE INST HEALTH_STATUS TEMP1
          SETTING HISTORY 5m # Add 5 minutes of data into graph
      settings:
        # Inject the graph settings
        <%= MetaConfigParser.load('graph_settings.yaml').to_meta_config_yaml(8) %>
    IMAGEVIEWER:
      summary: Display a base64 image from a TLM packet
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name to pull the CONVERTED value from.
            If additional processing (base64 encoding) is needed consider using a DERIVED item.
          values: .+
        - name: Format
          required: true
          description: The image format of the base64 data (e.g. jpg, png, etc)
          values: .+
      example: |
        IMAGEVIEWER INST IMAGE IMAGE jpg
    PROGRESSBAR:
      summary: Displays a progress bar that is useful for displaying percentages
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Scale factor
          required: false
          description:
            Value to multiple the telemetry item by before displaying the
            in the progress bar. Final value should be in the range of 0 to 100. Default is 1.0.
          values: .*
        - name: Width
          required: false
          description: Width of the progress bar (default = 100 pixels)
          values: .*
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        PROGRESSBAR INST ADCS POSPROGRESS 0.5 200
        PROGRESSBAR INST ADCS POSPROGRESS
    RANGEBAR:
      summary: Displays a custom range bar displaying the item value
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Low Value
          required: true
          description:
            Minimum value to display on the range bar. If the telemetry
            item goes below this value the bar is “pegged” on the low end.
          values: .+
        - name: High Value
          required: true
          description:
            Maximum value to display on the range bar. If the telemetry
            item goes above this value the bar is “pegged” on the high end.
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Width
          required: false
          description: Width of the range bar (default = 100)
          values: .*
        - name: Height
          required: false
          description: Height of the range bar (default = 25)
          values: .*
      example: |
        RANGEBAR INST HEALTH_STATUS TEMP1 0 100000 RAW 200 50
        RANGEBAR INST HEALTH_STATUS TEMP1 -100 100
    # RANGECOLUMN:
    #   summary: Displays a graphical representation of where
    #     an item's value falls within a range vertically
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Low Value
    #       required: true
    #       description: Minimum value to display on the range bar. If the telemetry
    #         item goes below this value the bar is “pegged” on the low end.
    #       values: .+
    #     - name: High Value
    #       required: true
    #       description: Maximum value to display on the range bar. If the telemetry
    #         item goes above this value the bar is “pegged” on the high end.
    #       values: .+
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Width
    #       required: false
    #       description: Width of the range bar (default = 30)
    #       values: .*
    #     - name: Height
    #       required: false
    #       description: Height of the range bar (default = 100)
    #       values: .*
    # example: |
    #   RANGECOLUMN INST HEALTH_STATUS TEMP1 0 100000 RAW 200 50
    #   RANGECOLUMN INST HEALTH_STATUS TEMP1 -100 100
    ROLLUP:
      summary: Displays a notification icon which changes color based on a rollup telemetry
      since: 5.17.1
      parameters:
        - name: Icon name
          required: true
          description: The astro UX icon to display. Valid choices are 'astro' icons taken from https://github.com/RocketCommunicationsInc/astro-components/blob/master/static/json/rux-icons.json.
          values: .+
        - name: Icon label
          required: false
          description: Text to apply to the icon label
          values: .+
        - name: Icon sublabel
          required: false
          description: Text to apply to the icon sublabel
          values: .+
      example: |
        ROLLUP satellite-transmit "SAT 1" "Details"
          # Screen to open on click
          SETTING SCREEN INST HS
          # Telemetry items to rollup status
          SETTING TLM INST HEALTH_STATUS TEMP1
          SETTING TLM INST HEALTH_STATUS TEMP2
        ROLLUP antenna "GND 2" "Location"
          # Screen to open on click
          SETTING SCREEN INST HS
          # Telemetry items to rollup status
          SETTING TLM INST HEALTH_STATUS TEMP3
          SETTING TLM INST HEALTH_STATUS TEMP4
    SIGNAL:
      summary: Displays a cellular signal icon which changes based on telemetry value
      since: 5.17.2
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED) %>
      example: |
        SIGNAL INST HEALTH_STATUS TEMP1
          # Screen to open on click
          SETTING SCREEN INST HS
          # Values to compare when setting the 1-bar, 2-bar and 3-bar icons
          # Default is 30, 60, 90 (e.g. 0 to 100 range)
          # Value < -50 display no bars
          # Value >= -50 and < 0 displays 1 bar
          # Value >= 0 and < 50 displays 2 bars
          # Value >= 50 displays 5 bars
          SETTING RANGE -50 0 50
    TEXTBOX:
      summary: Provides a large box for multiline text
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Width
          required: false
          description: Width of the textbox in px (default = 200)
          values: .*
        - name: Height
          required: false
          description: Height of the textbox in px (default = 200)
          values: .*
      example: |
        TEXTBOX INST HEALTH_STATUS PACKET_TIMEFORMATTED 150 70
        TEXTBOX INST HEALTH_STATUS PACKET_TIMEFORMATTED
    # TRENDBAR:
    #   summary: Provides the same functionality as the LIMITSBAR
    #     widget except that it also keeps a history of the telemetry item and
    #     graphically shows where the value was X seconds ago.
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Trend Seconds
    #       required: false
    #       description: The number of seconds in the past to display the trend value (default = 60)
    #       values: .*
    #     - name: Width
    #       required: false
    #       description: Width of the limits bar (default = 160)
    #       values: .*
    #     - name: Height
    #       required: false
    #       description: Height of the limits bar (default = 25)
    #       values: .*
    #   example: |
    #     TRENDBAR INST HEALTH_STATUS TEMP1 CONVERTED 20 200 50
    #     TRENDBAR INST HEALTH_STATUS TEMP1
    # TRENDLIMITSBAR:
    #   summary: Displays a VALUE widget to show the telemetry items current value,
    #     a VALUE widget to display the value of the item X seconds ago, and a TRENDBAR
    #     widget to display the items value within its limits ranges and its trend.
    #   parameters:
    #     - name: Target name
    #       required: true
    #       description: The target name
    #       values: .+
    #     - name: Packet name
    #       required: true
    #       description: The packet name
    #       values: .+
    #     - name: Item name
    #       required: true
    #       description: The item name
    #       values: .+
    #     - name: Value type
    #       required: false
    #       description: The type of the value to display. Default is CONVERTED.
    #       values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
    #     - name: Trend Seconds
    #       required: false
    #       description: The number of seconds in the past to display the trend value (default = 60)
    #       values: .*
    #     - name: Characters
    #       required: false
    #       description: The number of characters to display the telemetry value (default = 12)
    #       values: .*
    #     - name: Width
    #       required: false
    #       description: Width of the limits bar (default = 160)
    #       values: .*
    #     - name: Height
    #       required: false
    #       description: Height of the limits bar (default = 25)
    #       values: .*
    #   example: |
    #     TRENDLIMITSBAR INST HEALTH_STATUS TEMP1 CONVERTED 20 20 200 50
    #     TRENDLIMITSBAR INST HEALTH_STATUS TEMP1
    VALUE:
      summary: Displays a box with a telemetry item value
      description:
        The white portion of the box darkens to gray while the value remains stagnant, then
        brightens to white each time the value changes. Additionally the value is
        colored based on the items limits state (Red for example if it is out of limits).
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Number of characters
          required: false
          description: The number of characters wide to make the value box (default = 12)
          values: .*
      example: |
        VALUE INST HEALTH_STATUS TEMP1 CONVERTED 18
        VALUE INST HEALTH_STATUS TEMP1
Interactive Widgets:
  description: Interactive widgets are used to gather input from the user.
    Unlike all other widgets, which only output some graphical representation,
    interactive widgets permit input either from the keyboard or mouse.
  collection:
    BUTTON:
      summary: Displays a rectangular clickable button
      description: |
        Upon clicking, the button executes the Javascript code assigned. Buttons
        can be used to send commands and perform other tasks. If you want your button
        to use values from other widgets, define them as named widgets and read their
        values using the `screen.getNamedWidget("WIDGET_NAME").text()` method.
        See the example in CHECKBUTTON.

        Button code can get rather complex so remember to use string concatenation
        to make things more readable. If you use `+` newlines are inserted automatically
        during string concatenation. If you use `\\` you'll need to separate lines with a
        single semicolon `;`. COSMOS uses double semicolon `;;` to indicate lines should
        be evaluated separately. Note that all OpenC3 commands (using api.cmd) must be
        separated by `;;`.

        You can send commands with buttons using api.cmd(). The cmd() syntax looks exactly
        like the standard COSMOS scripting syntax. You can also request and use
        telemetry in screens using Javascript Promises.

        `api.tlm('INST PARAMS VALUE3', 'RAW').then(dur => api.cmd('INST COLLECT with TYPE NORMAL, DURATION '+dur))"`

        The api.tlm() function returns a Promise which is resolved with then()
        at which point we send the command with the telemetry value we received.

        Scripts can be launched from a BUTTON using the `runScript()` method. `runScript()` takes three parameters,
        the name of the script, whether to open the script in the foreground of Script Runner (default = true), and a hash of
        environment variables. For example: `runScript('INST/procedures/script.rb', false, {'VAR': 'VALUE'})`
      parameters:
        - name: Button Text
          required: true
          description: Text displayed on the button
          values: .+
        - name: Button Code
          required: true
          description: Javascript code to execute when the button is pressed
          values: .+
      example: |
        BUTTON 'Start Collect' 'api.cmd("INST COLLECT with TYPE NORMAL, DURATION 5")'
        BUTTON 'Run Checks' 'runScript("INST/procedures/checks.rb")'
        # More complex example with background checkbox and env vars
        NAMED_WIDGET SCRIPTNAME COMBOBOX collect.rb checks.rb
        NAMED_WIDGET BG CHECKBUTTON 'Background'
        BUTTON 'Run Script' "var script=screen.getNamedWidget('SCRIPTNAME').text();" \
          # Set an environment variable to be used by the script as ENV['TYPE']
          "var env = {}; env['TYPE'] = 'TEST';" \
          "runScript('INST/procedures/'+script, !screen.getNamedWidget('BG').checked(), env)"
    CHECKBUTTON:
      summary: Displays a check box
      description:
        Note this is of limited use by itself and is primarily used in
        conjunction with NAMED_WIDGET.
      parameters:
        - name: Checkbox Text
          required: true
          description: Text displayed next to the checkbox
          values: .+
      example: |
        NAMED_WIDGET CHECK CHECKBUTTON 'Ignore Hazardous Checks'
        BUTTON 'Send' 'screen.getNamedWidget("CHECK").checked() ? ' \
          'api.cmd_no_hazardous_check("INST CLEAR") : api.cmd("INST CLEAR")'
    COMBOBOX:
      summary: Displays a drop down list of text items
      description:
        Note this is of limited use by itself and is primarily used in
        conjunction with NAMED_WIDGET.
      parameters:
        - name: Option Text 1
          required: true
          description: Text to display in the selection drop down
          values: .+
        - name: Option Text n
          required: false
          description: Text to display in the selection drop down
          values: .+
      example: |
        BUTTON 'Start Collect' 'var type = screen.getNamedWidget("COLLECT_TYPE").text();' +
          'api.cmd("INST COLLECT with TYPE "+type+", DURATION 10.0")'
        NAMED_WIDGET COLLECT_TYPE COMBOBOX NORMAL SPECIAL
    DATE:
      summary: Displays a date picker
      description:
        Note this is of limited use by itself and is primarily used in
        conjunction with NAMED_WIDGET.
      parameters:
        - name: Date label
          required: false
          description: Text to label the data selection ('Date' by default)
          values: .+
      example: |
        BUTTON 'Alert Date' 'var date = screen.getNamedWidget("DATE").text();' +
          'alert("Date:"+date)'
        NAMED_WIDGET DATE DATE
    RADIOGROUP:
      summary: Creates a group of RADIOBUTTONs
      description: RADIOBUTTONs must be part of a group to enable selection logic
      parameters:
        - name: Initial selected button
          required: false
          description: Selects a radio button at initialization (0-based)
          values: \d+
    RADIOBUTTON:
      summary: Displays a radio button and text
      description:
        Note this is of limited use by itself and is primarily used in
        conjunction with NAMED_WIDGET. It must be contained by a RADIOGROUP to enable
        typical selection of a single RADIOBUTTON.
      parameters:
        - name: Text
          required: true
          description: Text to display next to the radio button
          values: .+
      example: |
        NAMED_WIDGET GROUP RADIOGROUP 1 # Select 'Clear' initially, 0-based index
          RADIOBUTTON 'Abort'
          RADIOBUTTON 'Clear'
        END
        BUTTON 'Send' "screen.getNamedWidget('GROUP').selected() === 0 ? " +
          "api.cmd('INST ABORT') : api.cmd('INST CLEAR')"
    TEXTFIELD:
      summary: Displays a rectangular box where the user can enter text
      parameters:
        - name: Characters
          required: false
          description: Width of the text field in characters (default = 12)
          values: .*
        - name: Text
          required: false
          description: Default text to put in the text field (default is blank)
          values: .*
      example: |
        NAMED_WIDGET DURATION TEXTFIELD 12 "10.0"
        BUTTON 'Start Collect' 'var dur = screen.getNamedWidget("DURATION").text();' +
              'api.cmd("INST COLLECT with TYPE NORMAL, DURATION "+dur+"")'
    TIME:
      summary: Displays a time picker
      description:
        Note this is of limited use by itself and is primarily used in
        conjunction with NAMED_WIDGET.
      parameters:
        - name: Time label
          required: false
          description: Text to label the time selection ('Time' by default)
          values: .+
      example: |
        BUTTON 'Alert Time' 'var time = screen.getNamedWidget("TIME").text();' +
          'alert("Time:"+time)'
        NAMED_WIDGET TIME TIME
Canvas Widgets:
  description:
    Canvas Widgets are used to draw custom displays into telemetry screens.
    The canvas coordinate frame places (0,0) in the upper-left corner of the canvas.
  collection:
    CANVAS:
      summary: Layout widget for the other canvas widgets
      description: All canvas widgets must be enclosed within a CANVAS widget.
      warning: The canvas coordinate frame places (0,0) in the upper-left corner of the canvas.
      parameters:
        - name: Width
          required: true
          description: Width of the canvas
          values: .+
        - name: Height
          required: true
          description: Height of the canvas
          values: .+
    CANVASLABEL:
      summary: Draws text onto the canvas
      parameters:
        - name: X Position
          required: true
          description: X position of the upper-left corner of the text on the canvas
          values: \d+
        - name: Y Position
          required: true
          description: Y position of the upper-left corner of the text on the canvas
          values: \d+
        - name: Text
          required: true
          description: Text to draw onto the canvas
          values: .+
        - name: Font Size
          required: false
          description: Font size of the text (Default = 12)
          values: \d+
        - name: Color
          required: false
          description: Color of the text
          values: .+
      example: |
        CANVAS 100 100
          CANVASLABEL 5 34 "Label1" 24 red
          CANVASLABEL 5 70 "Label2" 18 blue
        END
    CANVASLABELVALUE:
      summary: Draws the text value of a telemetry item onto the canvas in an optional frame
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: X Position
          required: true
          description: X position of the upper-left corner of the text on the canvas
          values: \d+
        - name: Y Position
          required: true
          description: Y position of the upper-left corner of the text on the canvas
          values: \d+
        - name: Font Size
          required: false
          description: Font size of the text (Default = 12)
          values: \d+
        - name: Color
          required: false
          description: Color of the text
          values: .+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED.
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        CANVAS 200 100
          CANVASLABELVALUE INST HEALTH_STATUS TEMP1 5 34 12 red
          CANVASLABELVALUE INST HEALTH_STATUS TEMP2 5 70 10 blue WITH_UNITS
        END
    CANVASIMAGE:
      summary: Displays an image on the canvas
      parameters:
        - name: Image filename
          required: true
          description: Name of a image file. The file must be in the plugin's targets/TARGET/public directory.
          values: .+
        - name: X Position
          required: true
          description: X position of the upper-left corner of the image on the canvas
          values: \d+
        - name: Y Position
          required: true
          description: Y position of the upper-left corner of the image on the canvas
          values: \d+
      example: |
        CANVAS 250 430
          CANVASIMAGE "satellite.png" 10 10 200 200
            SETTING SCREEN INST HS
          CANVASIMAGE "https://images.pexels.com/photos/256152/pexels-photo-256152.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=640&w=426" 0 250 250 150
        END
      settings:
        SCREEN:
          summary: Open another screen when clicked
          parameters:
            - name: Target name
              required: true
              description: Name of the target
              values: .+
            - name: Screen name
              required: true
              description: Name of the screen
              values: .+
    CANVASIMAGEVALUE:
      summary: Displays an image on the canvas that changes with a telemetry value
      description:
        Use various SETTING values to indicate which images should be displayed based on telemetry.
        For example, SETTING IMAGE CONNECTED "ground_on.png" 400 100. See the DEMO for a complete example.
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Value type
          required: true
          description: The type of the value to display
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
        - name: Default image filename
          required: true
          description: The default image to display. The file must be in the targets/TARGET/public directory.
          values: .+
        - name: X Position
          required: true
          description: X position of the upper-left corner of the image on the canvas
          values: \d+
        - name: Y Position
          required: true
          description: Y position of the upper-left corner of the image on the canvas
          values: \d+
        - name: Image width
          required: false
          description: Width of the image (default is 100%)
          values: \d+
        - name: Image height
          required: false
          description: Height of the image (default is 100%)
          values: \d+
      example: |
        CANVAS 230 230
          CANVASIMAGEVALUE INST HEALTH_STATUS GROUND1STATUS CONVERTED "ground_error.png" 10 10 180 180
            SETTING IMAGE CONNECTED "ground_on.png" 10 10
            SETTING IMAGE UNAVAILABLE "ground_off.png" 10 10
            SETTING SCREEN INST HS
        END
      settings:
        IMAGE:
          summary: Map an image to a state or value
          parameters:
            - name: Value
              required: true
              description: State or value
              values: .+
            - name: Image filename
              required: true
              description: Image to display. The file must be in the targets/TARGET/public directory.
              values: .+
            - name: X Position
              required: true
              description: X position of the upper-left corner of the image on the canvas
              values: \d+
            - name: Y Position
              required: true
              description: Y position of the upper-left corner of the image on the canvas
              values: \d+
        SCREEN:
          summary: Open another screen when clicked
          parameters:
            - name: Target name
              required: true
              description: Name of the target
              values: .+
            - name: Screen name
              required: true
              description: Name of the screen
              values: .+
    CANVASLINE:
      summary: Draws a line onto the canvas
      parameters:
        - name: Start X Position
          required: true
          description: X position of the start of the line on the canvas
          values: \d+
        - name: Start Y Position
          required: true
          description: Y position of the start of the line on the canvas
          values: \d+
        - name: End X Position
          required: true
          description: X position of the end of the line on the canvas
          values: \d+
        - name: End Y Position
          required: true
          description: Y position of the end of the line on the canvas
          values: \d+
        - name: Color
          required: false
          description: Color of the line
          values: .+
        - name: Width
          required: false
          description: Width of the line in pixels (default = 1)
          values: \d+
      example: |
        CANVAS 100 50
          CANVASLINE 5 5 95 5
          CANVASLINE 5 5 5 45 green 2
          CANVASLINE 95 5 95 45 blue 3
        END
    CANVASLINEVALUE:
      summary: Draws a color changing line onto the canvas
      description:
        The line is represented by one of two colors based on the value
        of the associated telemetry item
      parameters:
        - name: Target name
          required: true
          description: The target name
          values: .+
        - name: Packet name
          required: true
          description: The packet name
          values: .+
        - name: Item name
          required: true
          description: The item name
          values: .+
        - name: Start X Position
          required: true
          description: X position of the start of the line on the canvas
          values: \d+
        - name: Start Y Position
          required: true
          description: Y position of the start of the line on the canvas
          values: \d+
        - name: End X Position
          required: true
          description: X position of the end of the line on the canvas
          values: \d+
        - name: End Y Position
          required: true
          description: Y position of the end of the line on the canvas
          values: \d+
        - name: Width
          required: false
          description: Width of the line in pixels (default = 3)
          values: \d+
        - name: Value type
          required: false
          description: The type of the value to display. Default is CONVERTED
          values: <%= %w(RAW CONVERTED FORMATTED WITH_UNITS) %>
      example: |
        CANVAS 120 50
          CANVASLABELVALUE INST HEALTH_STATUS GROUND1STATUS 0 12 12 black
          CANVASLINEVALUE INST HEALTH_STATUS GROUND1STATUS 5 25 115 25 5 RAW
            SETTING VALUE_EQ 1 GREEN
            SETTING VALUE_EQ 0 RED
          CANVASLINEVALUE INST HEALTH_STATUS GROUND1STATUS 5 45 115 45
            SETTING VALUE_EQ CONNECTED GREEN
            SETTING VALUE_EQ UNAVAILABLE RED
        END
      settings:
        # Inject the canvas value settings
        <%= MetaConfigParser.load('_canvas_values.yaml').to_meta_config_yaml(8) %>
    CANVASDOT:
      summary: Draws a dot onto the canvas
      parameters:
        - name: X Position
          required: true
          description: X position of the dot
          values: .+
        - name: Y Position
          required: true
          description: Y position of the dot
          values: .+
        - name: Color
          required: true
          description: Color of the dot
          values: .+
        - name: Radius
          required: true
          description: Radius of the dot in pixels
          values: \d+
      example: |
        CANVAS 50 50
          CANVASDOT 10 15 BLUE 5
        END
    # CANVASELLIPSE:
    #   summary: The CANVASELLIPSE widget draws an ellipse onto the canvas
    #   parameters:
    #     - name: X Center
    #       required: true
    #       description: X position of the center of the ellipse
    #       values: \d+
    #     - name: Y Center
    #       required: true
    #       description: Y position of the center of the ellipse
    #       values: \d+
    #     - name: Width
    #       required: true
    #       description: Width of the ellipse in pixels
    #       values: \d+
    #     - name: Height
    #       required: true
    #       description: Height of the ellipse in pixels
    #       values: \d+
    #     - name: Color
    #       required: false
    #       description: Color of the ellipse. Default is black.
    #       values: .+
    #     - name: Line Width
    #       required: false
    #       description: Width of the line. Default is 1
    #       values: \d+
    #     - name: Fill
    #       required: false
    #       description: Whether to fill the ellipse. Default is false.
    #       values: .+