Back to Fprime

FPP JSON Dictionary Specification

docs/reference/fpp-json-dict.md

4.2.237.5 KB
Original Source

FPP JSON Dictionary Specification

This document describes the format of FPP JSON dictionaries.

Contents

Type Descriptors

A Type Descriptor is a JSON Dictionary that describes a type.

Primitive Integer Type Descriptors

FieldDescriptionOptionsRequired
nameString representing the FPP type nameU8, U16, U32, U64, I8, I16, I32, I64true
kindString representing the kind of typeintegertrue
sizeNumber of bits supported by the data type8, 16, 32, 64true
signedBoolean indicating whether the integer is signed or unsignedBooleantrue

Unsigned Integer Types

  • U8
  • U16
  • U32
  • U64

Example: Type Descriptor for U64

json
{
    "name": "U64",
    "kind": "integer",
    "size": 64,
    "signed": false,
}

Signed Integer Types

  • I8
  • I16
  • I32
  • I64

Example: Type Descriptor for I8

json
{
    "name": "I8",
    "kind": "integer",
    "size": 8,
    "signed": true,
}

Floating-Point Type Descriptors

FieldDescriptionOptionsRequired
nameString representing the FPP type nameF32, F64true
kindString representing the kind of typefloattrue
sizeNumber of bits supported by the data type32, 64true

Floating-Point Types

  • F32
  • F64

Example: Type Descriptor for F64

json
{
    "name": "F64",
    "kind": "float",
    "size": 64,
}

Boolean Type Descriptors

FieldDescriptionOptionsRequired
nameString representing the FPP type namebooltrue
kindString representing the kind of typebooltrue
sizeNumber of bits supported by the data type8true

Boolean Types

  • true
  • false

Example: Type Descriptor for booleans

json
{
    "name": "bool",
    "kind": "bool",
    "size": 8
}

String Type Descriptors

FieldDescriptionOptionsRequired
nameString representing the FPP type namestringtrue
kindString representing the kind of typestringtrue
sizeNumber representing the maximum string size in bytesNumber in the range [1, 2<sup>31</sup>)true

String Types

Any sequence of characters

Example Type Descriptor for string

json
{
    "name": "string",
    "kind": "string",
    "size": 80,
}

Qualified Identifier Type Descriptors

A Qualified Identifier is a kind of Type Descriptor that refers to a Type Definition.

FieldDescriptionOptionsRequired
nameString representing the fully qualified FPP type namePeriod-separated Stringtrue
kindString representing the kind of typequalifiedIdentifiertrue

Example JSON of qualified name

json
{
    "name": "Module1.MyArray",
    "kind": "qualifiedIdentifier",
}

Constants

FieldDescriptionOptionsRequired
qualifiedNameFully qualified name of element in FPP modelPeriod-separated Stringtrue
typeThe type of the constant valueType Descriptortrue
valueValue associated with the constantConstant Valuetrue
annotationUser-defined annotationStringfalse

Type information for integer constant dictionary entries is determined by checking the sign of a constant and will always default to the maximum integer size (64 bits):

  • If the constant is positive, the type of the constant is U64.
  • If the constant is negative, the type of the constant is I64.

Example FPP model with JSON representation:

module M1 {
  @ Constant with value 1
  constant C = 1
}
json
{
  "qualifiedName" : "M1.C",
  "type" : {
    "name" : "U64",
    "kind" : "integer",
    "size" : 64,
    "signed" : false
  },
  "value" : 1,
  "annotation" : "Constant with value 1"
}

Type Definitions

Array Type Definition

FieldDescriptionOptionsRequired
kindThe kind of typearraytrue
qualifiedNameFully qualified name of element in FPP modelPeriod-separated Stringtrue
sizeSize of the data structureNumbertrue
elementTypeThe type of the array's elementsType Descriptortrue
defaultDefault array valueArray Valuetrue
annotationUser-defined annotationStringfalse

Example FPP model with JSON representation:

module M1 {
    @ My array named A
    array A = [3] U8
}
json
{
    "kind": "array",
    "qualifiedName": "M1.A",
    "size": 3,
    "elementType": {
        "name": "U8",
        "kind": "integer",
        "signed": false,
        "size": 8
    },
    "default": [0, 0, 0],
    "annotation": "My array named A"
}

Enumeration Type Definition

FieldDescriptionOptionsRequired
kindThe kind of typeenumtrue
qualifiedNameFully qualified name of element in FPP modelPeriod-separated Stringtrue
representationTypeType of the enumerated valuesType Descriptortrue
enumeratedConstantsThe enumerated constantsJSON Dictionary of enumerated constants (keys) to Enumerated Constant Descriptor (values)true
defaultQualified name of the enumeration's default valueEnumeration Valuetrue
annotationUser-defined annotationStringfalse

Enumerated Constant Descriptors

FieldDescriptionOptionsRequired
nameName of the enumerated constantStringtrue
valueValue associated to the enumerated constantNumbertrue
annotationUser-defined annotation for the enumerated constantStringfalse

Example FPP model with JSON representation:

module M1 {
    @ Schroedinger's status
    enum Status {
        YES
        NO
        MAYBE @< The cat would know
    } default MAYBE
}
json
{
    "kind": "enum",
    "qualifiedName": "M1.Status",
    "representationType": {
        "name": "I32",
        "kind": "integer",
        "signed": true,
        "size": 32
    },
    "enumeratedConstants": [
        {
            "name": "YES",
            "value" : 0
        },
        {
            "name": "NO",
            "value" : 1
        },
        {
            "name" : "MAYBE",
            "value" : 2,
            "annotation": "The cat would know"
        },
    ],
    "default": "M.Status.MAYBE",
    "annotation": "Schroedinger's status"
}

Struct Type Definition

Struct Type Definition

FieldDescriptionOptionsRequired
kindThe kind of typestructtrue
qualifiedNameFully qualified name of element in FPP modelPeriod-separated Stringtrue
membersThe members of the structJSON dictionary of Member Name (key) to Struct Member Descriptor (value)true
defaultThe default value of the structStruct Valuetrue
annotationUser-defined annotationString extracted from FPP modelfalse

Struct Member Descriptor

FieldDescriptionOptionsRequired
typeType Descriptor of memberType Descriptortrue
indexIndex of the struct memberNumbertrue
sizeSize of the struct memberNumberfalse
formatFormat specifierStringfalse
annotationUser-defined annotationString extracted from FPP modelfalse

Example FPP model with JSON representation:

module M1 {
    @ Struct for wxy values
    struct S {
        w: [3] U32 @< This is an array
        x: U32
        y: F32
    }
}
json
{
    "kind": "struct",
    "qualifiedName": "M1.S",
    "members": {
        "w": {
            "type": {
              "name": "U32",
              "kind": "integer",
              "size": 32,
              "signed": false,
            },
            "index": 0,
            "size": 3,
            "annotation" : "This is an array"
        },
        "x": {
            "type": {
                "name": "U32",
                "kind": "integer",
                "signed": false,
                "size": 32
            },
            "index": 1,
            "format": "the count is {}",
        },
        "y": {
            "type": {
                "name": "F32",
                "kind": "float",
                "size": 32
            },
            "index": 2
        }
    },
    "default": {
        "w": [0, 0, 0],
        "x": 0,
        "y": 0
    },
    "annotation": "Struct for wxy values"
}

Type Alias Definition

FieldDescriptionOptionsRequired
kindThe kind of typealiastrue
qualifiedNameFully qualified name of element in FPP modelPeriod-separated Stringtrue
typeType Descriptor of the aliasType Descriptortrue
underlyingTypeType Descriptor of the underlying type of the aliasType Descriptortrue
annotationUser-defined annotationString extracted from FPP modelfalse

Example FPP model with JSON representation:

module M1 {
    @ Alias of type U32
    type A1 = U32
    @ Alias of type A1
    type A2 = A1
}
json
[
  {
    "kind": "alias",
    "qualifiedName": "M1.A1",
    "type": {
      "name": "U32",
      "kind": "integer",
      "signed": false,
      "size": 32
    },
    "underlyingType": {
      "name": "U32",
      "kind": "integer",
      "signed": false,
      "size": 32
    },
    "annotation": "Alias of type U32"
  },
  {
    "kind": "alias",
    "qualifiedName": "M1.A2",
      "type": {
        "name": "M1.A1",
        "kind": "qualifiedIdentifier"
      },
      "underlyingType": {
        "name": "U32",
        "kind": "integer",
        "signed": false,
        "size": 32
      },
    "annotation": "Alias of type A2"
  }
]

Values

The type of a value follows the same typing rules as FPP, except for the type of struct values, which is described in the Struct Values section below.

Primitive Integer Values

Number representing integer value

Example JSON of type U8 with a value of 2:

json
2

Example JSON of type I8 with a value of -2:

json
-2

Floating-Point Values

Number representing float value

Example JSON of type F32 with a value of 10.0

json
10.5

Boolean Values

Boolean value

Example JSON of type bool with a value of true

json
true

String Values

String containing sequence of characters

Example JSON of type string with a value of "Hello World!"

json
"Hello World!"

Array Values

Array of elements with type and array size corresponding to the element type and size specified in the Array Type Definition.

Example JSON of an array of type U32 consisting of 10 elements

json
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Constant Values

Constant values include Primitive Integer, Floating-Point, String, and Boolean values.

Enumeration Values

String qualified identifier name of enumeration value

Example JSON of an enum

json
"Status.YES"

Struct Values

JSON Dictionary mapping struct member names to their values. Each key in the dictionary corresponds to a struct member name. The type of the value associated with each key matches the type specified in the Struct Member. If the struct member does not specify a size, then the value is a single value of that type. If the struct member does specify a size, then the value is an array of size elements, where each element is a value of the type specified for the member.

Example FPP struct:

struct S {
  W: [3] U32 @< This is an array
  X: U32
  Y: string
  Z: F32
} default { 
  W = 1, 
  X = 20, 
  Y = "Hello World!", 
  Z = 15.5 
}

Example JSON of a struct default value:

json
{
    "W": [1, 1, 1],
    "X": 20,
    "Y": "Hello World!",
    "Z": 15.5
}

Invalid Values

Null Values

FieldDescriptionOptionsRequired
nameString indicating that the value is nullnulltrue
kindString indicating that the kind of value is invalidinvalidtrue

Infinity Values

FieldDescriptionOptionsRequired
nameString indicating that the value is infinityinfinitytrue
kindString indicating that the kind of value is invalidinvalidtrue

Negative Infinity Values

FieldDescriptionOptionsRequired
nameString indicating that the value is negative infinitynegativeInfinitytrue
kindString indicating that the kind of value is invalidinvalidtrue

Commands, Telemetry Channels, Events, and Parameters

Formal Parameters

Formal Parameters are used in Commands and Events definitions.

FieldDescriptionOptionsRequired
nameName of parameterStringtrue
typeType Descriptor of parameterType Descriptortrue
refBoolean indicating whether the formal parameter is to be passed by referenced when it is used in a synchronous port invocationBooleantrue
annotationUser-defined annotation of parameterStringfalse
json
{
    "name": "param1",
    "type": {
        "name": "U32",
        "kind": "integer",
        "size": 32,
        "signed": false,
    },
    "ref": false,
    "annotation": "This is param1"
}

Commands

FieldDescriptionOptionsRequired
nameFully qualified name of the commandPeriod-separated Stringtrue
commandKindThe kind of commandasync, guarded, sync, set, savetrue
opcodeCommand opcodeNumbertrue
formalParamsParameters of the commandArray of Formal Parameterstrue
annotationUser-defined annotation of commandStringfalse
priorityPriority for the command on the input queueNumberrequired for async command kinds
queueFullBehaviorBehavior of the command when the input full is queueassert, block, droprequired for async command kinds

Example Command in FPP:

module M {

  active component Component1 { 

    @ A sync command with parameters
    sync command SyncParams(
        param1: U32 @< Param 1
        param2: string @< Param 2
    ) opcode 0x01

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

JSON representation:

json
{
    "name": "M.c1.SyncParams",
    "commandKind": "sync",
    "opcode": 257,
    "annotation": "A sync command with parameters",
    "formalParams": [
        {
            "name": "param1",
            "annotation": "Param 1",
            "type": {
                "name": "U32",
                "kind": "integer",
                "size": 32,
                "signed": false,
            },
            "ref": false
        },
         {
            "name": "param2",
            "annotation": "Param 2",
            "type": {
                "name": "string",
                "kind": "string",
                "size": "80"
            },
            "ref": false
        }
    ],
}

Telemetry Channels

FieldDescriptionOptionsRequired
nameFully qualified name of the telemetry channelPeriod-separated Stringtrue
typeType Descriptor of the telemetry channelType Descriptortrue
idNumeric identifier of the channelNumbertrue
telemetryUpdateUpdate specifier of the telemetry channelalways, on changetrue
formatFormat string of the channelStringfalse
annotationUser-defined annotation of channelStringfalse
limitLow and high limits of the channelJSON dictionaryfalse

Example FPP model with JSON representation:


module M {

  active component Component1 { 

    @ Telemetry channel 1
    telemetry Channel1: F64 \
      id 0x02 \
      update on change \
      low { yellow -1, orange -2, red -3 } \
      high { yellow 1, orange 2, red 3 }

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

json
[
    {
        "name": "M.c1.Channel1",
        "annotation": "Telemetry channel 1",
        "type": {
            "name": "F64",
            "kind": "float",
            "size": 64
        },
        "id": 258,
        "telemetryUpdate": "on change",
        "limit": {
            "low": {
                "yellow": -1,
                "orange": -2,
                "red": -3
            },
            "high": {
                "yellow": 1,
                "orange": 2,
                "red": 3
            }
        }
    }
]

Events

FieldDescriptionOptionsRequired
nameFully qualified name of the eventPeriod-separated Stringtrue
severitySeverity of the eventACTIVITY_HI, ACTIVITY_LO, COMMAND, DIAGNOSTIC, FATAL, WARNING_HI, WARNING_LOtrue
formalParamsParameters of the eventArray of Formal Parameterstrue
idNumeric identifier of the eventNumbertrue
formatFormat string of the eventStringtrue
throttleMaximum number of times to emit the event before throttling itNumberfalse
annotationUser-defined annotation of the eventStringfalse

Example FPP model with JSON representation:

module M {

  active component Component1 { 

    @ This is the annotation for Event 1
    event Event1(
      arg1: U32 @< Argument 1
    ) \
      severity activity low \
      id 0x03 \
      format "Event 1 occurred"

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

json
{
    "name": "M.c1.Event1",
    "annotation": "This is the annotation for Event 1",
    "severity": "ACTIVITY_LO",
    "formalParams": [
      {
        "name": "arg1",
        "annotation": "Argument 1",
        "type": {
            "name": "U32",
            "kind": "integer",
            "size": 32,
            "signed": false,
        },
        "ref": false  
      }
    ],
    "id": 259,
    "format": "Event 1 occurred",
}

Parameters

FieldDescriptionOptionsRequired
nameFully qualified name of the parameterPeriod-separated Stringtrue
typeType Descriptor of the parameterType Descriptortrue
idNumeric identifier of the parameterNumbertrue
defaultDefault value (of type specified in type) of the parameterValue of type specified in typefalse
annotationUser-defined annotation of parameterStringfalse

Example FPP model with JSON representation:


module M {

  active component Component1 { 

    @ This is the annotation for Parameter 1
    param Parameter1: U32 \
      id 0x04 \

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

json
{
    "name": "M.c1.Parameter1",
    "type": {
        "name": "U32",
        "kind": "integer",
        "signed": false,
        "size": 32
    },
    "id": "260",
    "annotation": "This is the annotation for Parameter 1",
    "default": 0
}

Data Products

Records

FieldDescriptionOptionsRequired
nameFully qualified name of the recordPeriod-separated Stringtrue
typeType Descriptor the recordType Descriptortrue
arrayBoolean specifying whether the record stores a variable number of elementsBooleantrue
idThe numeric identifier of the recordNumbertrue
annotationUser-defined annotation of recordStringfalse

Example FPP model with JSON representation:

module M {

  active component Component1 { 

    @ Record 0: A variable number of F32 values
    product record Record0: F32 array id 0x05

    @ Record 1: A single U32 value
    product record Record1: U32 id 0x06

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

json
[
    {
        "name": "M.c1.Record0",
        "annotation": "Record 0: A variable number of F32 values",
        "type": {
            "name": "F32",
            "kind": "float",
            "size": 32
        },
        "array": true,
        "id": 261 
    },
    {
        "name": "M.c1.Record1",
        "annotation": "Record 1: A single U32 value",
        "type": {
            "name": "U32",
            "kind": "integer",
            "signed": false,
            "size": 32
        },
        "array": false,
        "id": 262
    }      
]

Containers

FieldDescriptionOptionsRequired
nameFully qualified name of the containerPeriod-separated Stringtrue
idThe numeric identifier of the recordNumbertrue
defaultPriorityThe downlink priority for the containerNumberfalse
annotationUser-defined annotation of containerStringfalse

Example FPP model with JSON representation:

module M {

  active component Component1 { 

    @ Container 0
    product container Container0 id 0x07

    @ Container 1
    product container Container1 id 0x08

    @ Container 2
    product container Container2 id 0x09 default priority 10

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1
  }

}

json
[
    {
       "name": "M.c1.Container0",
       "annotation": "Container 0",
       "id": 263,
    },
    {
        "name": "M.c1.Container1",
        "annotation": "Container 1",
        "id": 264,
    },
    {
        "name": "M.c1.Container2",
        "annotation": "Container 2",
        "id": 265,
        "defaultPriority": 259
    }
]

Telemetry Packet Sets

Telemetry Packets

FieldDescriptionOptionsRequired
nameName of the telemetry packetStringtrue
idNumeric identifier of the packetNumbertrue
groupPacket group numberNumbertrue
membersTelemetry Channels in the packetArray of Fully Qualified Names of Telemetry Channelstrue

Telemetry Packet Sets

FieldDescriptionOptionsRequired
nameName of the telemetry packet setStringtrue
membersTelemetry Packets in the setArray of Telemetry Packetstrue
omittedTelemetry Channels omitted from the setArray of Fully Qualified Names of Telemetry Channelstrue

Example FPP model with JSON representation:

module M {

  active component Component1 {
    @ Telemetry channel 0
    telemetry Channel0: U32 id 0x00

    @ Telemetry channel 1
    telemetry Channel1: U32 \
      id 0x01 \
      update on change

    @ Telemetry channel 2
    telemetry Channel2: F64 \
      id 0x02 \
      format "{.3f}"
  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1

    telemetry packets Packets {
      packet P1 id 0 level 0 {
        M.c1.Channel0
        M.c1.Channel1
      }
    } omit {
      M.c1.Channel2
    }
  }
}
json
[
  {
      "name" : "Packets",
      "members" : [
        {
          "name" : "P1",
          "id" : 0,
          "group" : 0,
          "members" : [
            "M.c1.Channel0",
            "M.c1.Channel1"
          ]
        }
      ],
      "omitted" : [
        "M.c1.Channel2"
      ]
    }
]

Dictionaries

Dictionary Metadata

FieldDescriptionOptionsRequired
deploymentNameString representing the fully qualified name of the topologyStringtrue
frameworkVersionString representing the F´ framework version (semantic versioning)Stringtrue
projectVersionString representing the project version (semantic versioning)Stringtrue
libraryVersionsArray of Strings corresponding to the version (semantic versioning) of libraries used by the F´ projectArray of Stringstrue
dictionarySpecVersionString representing the JSON dictionary specification versionStringtrue
json
{
    "deploymentName": "MyDeployment",
    "frameworkVersion": "3.3.2",
    "projectVersion": "1.0.0",
    "libraryVersions": [],
    "dictionarySpecVersion": "1.0.0"
}

Dictionary Content

FieldContentRequired
metadataDictionary Metadatatrue
typeDefinitionsArray of Type Definitionstrue
constantsArray of Constantstrue
commandsArray of Commandstrue
eventsArray of Eventstrue
telemetryChannelsArray of Telemetry Channelstrue
parametersArray of Parameterstrue
recordsArray of Recordstrue
containersArray of Containerstrue
telemetryPacketSetsArray of Telemetry Packet Setstrue

Example FPP model with JSON representation:

module M {

  array StringArray = [2] string size 80 default [ "A", "B"]

  enum StatusEnum {
    YES
    NO
    MAYBE
  } default MAYBE

  struct A {
    x: U32 format "The value of x is {}"
    y: [2] F32 format "The value of y is {}"
  } default { x = 1, y = 1.15 }


  active component Component1 { 

    @ A command with a single StringArray argument
    sync command CommandString(
        arg1: M.StringArray @< description for argument 1
    ) opcode 0x01

    @ This is the annotation for Parameter 1
    param Parameter1: A \
      id 0x02 \
      set opcode 0x03 \
      save opcode 0x04

    @ Event with one StatusEnum argument
    event Event1(
      arg1: M.StatusEnum @< Description of arg1 formal param
    ) \
      severity activity high \
      id 0x05 \
      format "Event 1 occurred, status {}"

    @ Telemetry channel 1 of type I32
    telemetry Channel1: I32 \
      id 0x06 \
      update on change \
      low { yellow -1, orange -2, red -3 } \
      high { yellow 1, orange 2, red 3 }

    @ Record 0: A variable number of F32 values
    product record Record0: F32 array id 0x05

    @ Record 1: A single U32 value
    product record Record1: U32 id 0x06

    @ Container 0
    product container Container0 id 0x07

    @ Container 1
    product container Container1 id 0x08

    @ Container 2
    product container Container2 id 0x09 default priority 10

  }

  instance c1: Component1 base id 0x100 \
    queue size 10

  topology T {
    instance c1

    telemetry packets Packets {
      packet P1 id 0 level 0 {
        M.c1.Channel1
      }
    }
  }
}

json
{
  "metadata": {
    "deploymentName": "M.T",
    "frameworkVersion": "3.3.2",
    "projectVersion": "1.0.0",
    "libraryVersions": [],
    "dictionarySpecVersion": "1.0.0"
  },
  "typeDefinitions" : [
    {
      "kind" : "array",
      "qualifiedName" : "M.StringArray",
      "size" : 2,
      "elementType" : {
        "name" : "string",
        "kind" : "string",
        "size" : 80
      },
      "default" : [
        "A",
        "B"
      ],
      "annotation" : "An array of 2 String values"
    },
    {
      "kind" : "enum",
      "qualifiedName" : "M.StatusEnum",
      "representationType" : {
        "name" : "U8",
        "kind" : "integer",
        "size" : 8,
        "signed" : false
      },
      "enumeratedConstants" : [
        {
          "name" : "YES",
          "value" : 0
        },
        {
          "name" : "NO",
          "value" : 1
        },
        {
          "name" : "MAYBE",
          "value" : 2
        }
      ],
      "default" : "M1.StatusEnum.MAYBE"
    },
    {
      "kind" : "struct",
      "qualifiedName" : "M.A",
      "members" : {
        "x" : {
          "type" : {
            "name" : "U32",
            "kind" : "integer",
            "size" : 32,
            "signed" : false
          },
          "index" : 0,
          "format" : "The value of x is {}"
        },
        "y" : {
          "type" : {
            "name" : "F32",
            "kind" : "float",
            "size" : 32
          },
          "index" : 1,
          "size": 2,
          "format" : "The value of y is {}"
        }
      },
      "default" : {
        "x" : 1,
        "y" : [1.15, 1.15]
      }
    }
  ],
  "constants": [],
  "commands" : [
    {
      "name" : "M.c1.CommandString",
      "commandKind" : "sync",
      "opcode" : 257,
      "formalParams" : [
        {
          "name" : "arg1",
          "type" : {
            "name" : "M.StringArray",
            "kind" : "qualifiedIdentifier"
          },
          "ref" : false,
          "annotation" : "description for argument 1"
        }
      ],
      "annotation" : "A command with a single StringArray argument"
    },
    {
      "name" : "M.c1.Parameter1_PRM_SET",
      "commandKind" : "set",
      "opcode" : 259,
      "formalParams" : [
        {
          "name" : "val",
          "type" : {
            "name" : "M.A",
            "kind" : "qualifiedIdentifier"
          },
          "ref" : false
        }
      ],
      "annotation" : "Parameter (struct)"
    },
    {
      "name" : "M.c1.Parameter1_PRM_SAVE",
      "commandKind" : "save",
      "opcode" : 260,
      "formalParams" : [
      ],
      "annotation" : "Parameter (struct)"
    }
  ],
  "parameters" : [
    {
      "name" : "M.c1.Parameter1",
      "type" : {
        "name" : "M.A",
        "kind" : "qualifiedIdentifier"
      },
      "id" : 258,
      "default" : {
        "x" : 1,
        "y" : 1.15
      },
      "annotation" : "Parameter (struct)"
    }
  ],
  "events" : [
    {
      "name" : "M.c1.Event1",
      "severity" : "ACTIVITY_HI",
      "formalParams" : [
        {
          "name" : "arg1",
          "type" : {
            "name" : "M.StatusEnum",
            "kind" : "qualifiedIdentifier"
          },
          "ref" : false,
          "annotation" : "Description of arg1 formal param"
        }
      ],
      "id" : 259,
      "format" : "Event 1 occurred, status {}",
      "annotation" : "Event with one StatusEnum argument"
    }
  ],
  "telemetryChannels" : [
    {
      "name" : "M.c1.Channel1",
      "type" : {
        "name" : "I32",
        "kind" : "integer",
        "size" : 32
      },
      "id" : 260,
      "telemetryUpdate" : "on change",
      "annotation" : "Telemetry channel 1 of type I32",
      "limit": {
        "low": {
          "yellow": "-1",
          "orange": "-2",
          "red": "-3"
        },
        "high": {
          "yellow": "1",
          "orange": "2",
          "red": "3"
        }
      }
    }
  ],
  "records" : [
    {
        "name": "M.c1.Record0",
        "annotation": "Record 0: A variable number of F32 values",
        "type": {
            "name": "F32",
            "kind": "float",
            "size": 32
        },
        "array": true,
        "id": 261 
    },
    {
        "name": "M.c1.Record1",
        "annotation": "Record 1: A single U32 value",
        "type": {
            "name": "U32",
            "kind": "integer",
            "signed": false,
            "size": 32
        },
        "array": false,
        "id": 262
    }   
  ],
  "containers" : [
    {
       "name": "M.c1.Container0",
       "annotation": "Container 0",
       "id": 263,
    },
    {
        "name": "M.c1.Container1",
        "annotation": "Container 1",
        "id": 264,
    },
    {
        "name": "M.c1.Container2",
        "annotation": "Container 2",
        "id": 265,
        "defaultPriority": 10
    }
  ],
  "telemetryPacketSets": [
    {
      "name" : "Packets",
      "members" : [
        {
          "name" : "P1",
          "id" : 0,
          "group" : 0,
          "members" : [
            "M.c1.Channel1"
          ]
        }
      ],
      "omitted" : []
    }
  ]
}

Framework Definitions Required by the Dictionary

The following framework definitions are required by the dictionary and will always be present in the dictionary content:

NameKindLocationPurpose
FwChanIdTypeAlias type definitiontypeDefinitionsThe type of a telemetry channel identifier
FwEventIdTypeAlias type definitiontypeDefinitionsThe type of an event identifier
FwOpcodeTypeAlias type definitiontypeDefinitionsThe type of a command opcode
FwPacketDescriptorTypeAlias type definitiontypeDefinitionsThe type of a com packet descriptor
FwDpIdTypeAlias type definitiontypeDefinitionsThe type of a data product identifier
FwDpPriorityTypeAlias type definitiontypeDefinitionsThe type of a data product priority
FwSizeStoreTypeAlias type definitiontypeDefinitionsThe type used to serialize a size value
FwTimeBaseStoreTypeAlias type definitiontypeDefinitionsThe type used to serialize a time base value
FwTimeContextStoreTypeAlias type definitiontypeDefinitionsThe type used to serialize a time context value
Fw.DpStateEnum type definitiontypeDefinitionsThe data product state
Fw.DpCfg.ProcTypeEnum type definitiontypeDefinitionsA bit mask for selecting the type of processing to perform on a container before writing it to disk.
Fw.DpCfg.CONTAINER_USER_DATA_SIZEConstant DefinitionconstantsThe size in bytes of the user-configurable data in the container packet header
FW_FIXED_LENGTH_STRING_SIZEConstant DefinitionconstantsConfiguration for Fw::String