1.Terms and Abbreviations
| Abbreviation | Meaning |
| Addr | Address |
| Attr | Attribute |
| Def | Definition |
| Elmt | Element |
| Incl | Include |
| Mlt | Multiplicity |
| SFD | Signal Flow Designer |
| Tmp | Template |
2.Purpose of this Document
The device description file (DDF) describes all data structures of a target device and how to access them via xTP.
Usually this file is generated by SFD automatically, and is not visible to end user.
So this document is mainly for audio object developers. They have to implement the creation of the DDF inside of the audio algorithm toolbox (AAT).
3.Root Element
<Root>
| Name | Type | MLt | Description |
|---|---|---|---|
| <ObjectTemplates> | Elmt | 0 .. 1 | Container Elmt for object Tmps. |
| <StateVariableTemplates> | Elmt | 0 .. 1 | Container Elmt for StateVariable Temps. |
| <Node> | Elmt | 1 | The Def of the node. |
4.Node Elements
<Node>
| Name | ID / Addr | Type | MLt | Description |
|---|---|---|---|---|
| TargetDevice | ID | Attr | 0 .. 1 | Target device used for xTP communication, default value is 0. |
| <VirtualDevices> | ID / Addr | Elmt | 1 | Container Elmt for VirtualDevice Defs. |
| <Communication> | ID / Addr | Elmt | 0 .. 1 | Settings used for target device communication. |
| <Identification> | ID | Elmt | 0 .. 1 | Elmts used to check if compatible device is connected. |
4.1.Communication Parameters
<Communication>
| Name | Type | Mlt | Description |
| <MaxTuningDataSize> | Elmt | 0 .. 1 |
Maximum number of bytes Incld in a single tuning data message. Optional: Default value is 64. |
4.2.Identification of Target Device
<Identification>
Identification of the target device is optional. If at least <Product> exists, a message is sent to the target device to check if the target device matches the device description fil
| Name | Type | Mlt | Description |
| <Product> | Elmt | 0 .. 1 | A unique name of the product. |
| <Version> | Elmt | 0 .. 1 | The version of the product. Format x.y |
5.Virtual Device
<VirtualDevice>
VirtualDevice with index zero is always the NodeManager and is added automatically.
| Name | ID / Addr | Type | Mlt | Description |
| Name | ID /Addr | Attr | 1 | Name of the VirtualDevice. |
| TargetDevice | Addr | Attr | 0 .. 1 | Index of the target device, which can be a decimal (15) or a hexadecimal (0x0F). |
| TargetAddr | Addr | Attr | 0 .. 1 | Base target device Addr, which can be a decimal (10944) or a hexadecimal (0x2AC0). |
| Core | ID | Attr | 0 .. 1 | Core index of the target device. At least one parent of the Object must specify the core ID. Core ID is inherited from the parent Object. |
| Instance | ID | Attr | 0 .. 1 | xAF instance index of the target device. At least one parent of the Object must specify the xAF instance ID. The instance ID is inherited from the parent object. |
| BlockID | ID | Attr | 0 .. 1 | ID of the audio processing block including sub- block ID. Format: xxx.yyy.zzz (xxx is MSB of block ID, yyy is LSB of block ID, zzz is sub-block ID). |
| <Objects> | ID /Addr | Elmt | 0 .. 1 | Container for Object Defs. |
| <StateVariables> | ID /Addr | Elmt | 0 .. 1 | Container for StateVariables Defs. |
6.Objects
<Objects>
Objects can be defined in two ways:
- If an object is only used once, it can be defined directly in the Node Def tree.
- If an object is used several times, then an object Tmp should be defined and the object Tmp can be Incld by using an object Incl.
6.1.Object
<Object>
| Name | ID / Addr | Type | Def | Tmp | Incl | Description |
| Type | ID / Add | Attribute | 0..1 | 0 ..1 |
This attribute is optional. DynamicObject is the default value. Possible values:
|
|
| Key | ID / Add | Attribute | 1 | Unique key to identify the object template. | ||
| Template | ID / Add | Attribute | 1 | Key to the object template. | ||
| Name | ID / Add | Attribute | 1 | 1 | Name of the Object. | |
| HiQnetAddr | ID / Add | Attribute | 0 .. 1 | 0 .. 1 | HiQnet Addr of the object. Either <HiQnetAddr> or <HiQnetOffset> must be present. Format: xxx.yyy.zzz | |
| HiQnetOffset | ID / Add | Attribute | 0 .. 1 | 0 .. 1 | HiQnet Addr is an offset of the object relative to the parent object HiQnet Addr. Either <HiQnetAddr> or <HiQnetOffset> must be present. | |
| TargetDevice | Add | Attribute | 0 .. 1 | 0 .. 1 | Index of the target device. If not present, the device index is inherited from the parent object. It can be a decimal (15) or a hexadecimal (0x0F). | |
| TargetAddr | Add | Attribute | 0 .. 1 | 0 .. 1 | Base Addr of the target device. Either <TargetAddr> or <Offset> must be present. It can be a decimal (10944) or a hexadecimal (0x2AC0). | |
| TargetOffset | ID / Add | Attribute | 0 .. 1 | 0 .. 1 | Addr offset of the target device relative to the parent object. Either <TargetAddr> or <Offset> must be present. It can be a decimal (10944) or a hexadecimal (0x2AC0). | |
| Core | ID | Attribute | 0 .. 1 | 0 .. 1 | Core index of the target device. At least one parent of the Object must specify the core ID. Core ID is inherited from the parent Object. | |
| Instance | ID | Attribute | 0 .. 1 | 0 .. 1 | xAF instance index of the target device. At least one parent of the Object must specify the xAF instance ID. The Instance ID is inherited from the parent Object. | |
| BlockID | ID | Attribute | 0 .. 1 | 0 .. 1 | ID of the audio processing block including sub-block ID. Format: xxx.yyy.zzz (xxx is MSB of block ID, yyy is LSB of block ID, zzz is sub-block ID). A given blockID should only be defined once, and contain a category definition for that subblock. | |
| IDOffset | ID | Attribute | 0 .. 1 | 0 .. 1 | Offset is added to the BlockID of the parent object to get the block ID of the current audio block. Either <BlockID> or <IDOffset> must be present. It can be a decimal (10944) or a hexadecimal (0x2AC0). | |
| <ExplorerIcon> | ID / Add | Element | 1 | 1 | – | Icon that is displayed in the tree. Possible values:
|
| <TargetValues> | ID / Add | Element | 0 .. 1 | 0 ..1 | – | List of target values, which are only valid for objects that are not default objects (objects that are not DynamicObjects). |
| <StateVariables> | ID / Add | Element | 0 .. 1 | 0 .. 1 | – | Container Element that can contain several Defs for StateVariables. |
| <Objects> | ID / Add | Element | 0 .. 1 | – | – | Container Element that can contain several Defs for <Object> Element with the attributes listed in this table. |
| <Category> | Attribute | Category of the state variables nested beneath. Should be defined at the same level where sub block is defined. |
6.2.Definition of a Table Object
<Object>
Each StateVariable that is defined in the object represents one row of the table. In addition to the Attrs and Elmts of an object Def, a TableObject Def has:
| Name | Type | Def | Tmp | Incl | Description |
| TableRows | Attr | 1 | – | – | Row count of the table. |
| RowDescription | Attr | 0 .. 1 | – | – | Optional description of the rows, which are values separated by commas. |
6.3.Definition of a Biquad Coefficients Object
<Object>
This object converts Biquad parameters to Biquad coefficients.
<TargetValues>
A BiquadCoefficientsObject must have five TargetValues (order is fixed):
- FIR0
- FIR1
- FIR2
- IIR1
- IIR2
<StateVariables>
A BiquadCoefficientsObject must have four fixed StateVariables and an optional StateVariable (order does not matter). Assignment of StateVariables is done by buddy type:
| StateVariable | Buddy type | |
| Filter type | FilterType | Mandatory |
| Frequency | Frequency | Mandatory |
| Quality | Q | Mandatory |
| Gain | Gain | Mandatory |
| Active | Active | Optional |
7.StateVariables
<StateVariables>
StateVariables can be defined in two ways:
- If a StateVariable is only used once, it can be defined directly within the object Def.
- If a StateVariable is used several times, then a StateVariable Tmp should be defined and the StateVariable Tmp should be Incld in a StateVariable.
7.1.Common
| Name | Type | Def | Tmp | Incl | Description |
| Key | Attr | 1 | Unique key to identify the object Tmp. | ||
| Template | Attr | 1 | Key to object Tmp. | ||
| Name | Attr | 1 | 1 | Name of the StateVariale. | |
| ID | Attr | 1 | 1 | HiQnet ID of the StateVariable must be unique in an object. Recommendation: Start with zero and increase this number by one for every StateVariable of the object. | |
| <DataType> | Elmt | 1 | 1 | Data type of the StateVariable. Possible values:
|
|
| <DefaultValue> | Elmt | 1 | 1 | 0 .. 1 | The default value of the StateVariable. The Tmp value can be overwritten in Incl. |
| <BuddyGroup> | Elmt | 0 .. 1 | 0 .. 1 | Functionality group. Possible Values:
|
|
| <BuddyType> | Elmt | 0 .. 1 | 0 .. 1 | Functionality type in the functionality group. Possible values:
|
|
| <Buddies> | Elmt | 0 .. 1 | 0 .. 1 | A collection of ID separated by ‘,’ of all StateVariables that belong to the same functionality. | |
| <TargetValue> | Elmt | 0 .. 1 | 0 .. 1 | 0 .. 1 | Def of the data format on the target device. |
| <Streamable>
Is obsolete with J +1 release, use <StreamIndex> instead |
Elmt | 0 .. 1 | 0 .. 1 |
Value should be “True” or “False”. Specifies whether the state variable is streamable or not. Default value: “False” |
|
| <StreamIndex>
added with J + 1 release. |
Elmt | 0 .. 1 | 0 .. 1 | Should be set, if the SV is streamable. Is a byte that specifies the index of the specific stream within an audio object. |
7.2.NumericalSV
StateVariable for continuous numerical values.
| Name | Type | Def | Tmp | Incl | Description |
| Type | Attr | 0 ..1 | 0 ..1 | Possible values:
|
|
| <UnitType> | Elmt | 0 .. 1 | 0 .. 1 | The unit of the value. Possible values:
|
|
| <ControlLaw> | Elmt | 0 .. 1 | 0 .. 1 | Needed in case of sliders, if the stepping is linear or logarithmic. Linear is the default. Possible values:
|
|
| <Min> | Elmt | 1 | 1 | The minimum value of the StateVariable. | |
| <Max> | Elmt | 1 | 1 | The maximum value of the StateVariable. |
7.3.EnumSV
StateVariable for enumerated discrete values with an additional label per value.
| Name | Type | Def / Tmp | Description |
| Type | Attr | 1 | Possible value: EnumSV |
| <UnitType> | Elmt | 0 .. 1 | The unit of the value. Possible values: see NumericalSV. |
| <Values> | Elmt | 1 | Enumeration of all possible values. |
<Value>
Values must have an ascending order!
| Name | Type | Def / Tmp | Description |
| Label | Elmt. | 1 | Text of the enumeration. |
| Content | 1 | Numerical value of the enumeration. |
7.4.FilterTypeSV
StateVariable for filter types: Enumerated discrete values are mapped to a filter type.
FilterTypeSV must not be first StateVariable of a PEQ buddy group! Otherwise EQ filter control (Graph – Frequency / Gain) will not work.
| Name | Type | Def / Tmp | Description |
| Type | Attr | 1 | ‘FilterTypeSV’ |
| <Values> | Elmt | 1 | Enumeration of all possible values. |
<Value>
Values must have an ascending order!
| Name | Type | Def / Tmp | Description |
| Label | Elmt. | 1 | Filter type. Possible Values:
|
| Label | Content | 1 | Numerical value of the enumeration. |
7.5.FloatArraySV
StateVariable that Incls a data array of float values.
| Name | Type | Def | Tmp | Description |
| Type | Attr | 1 | 1 | Possible value: FloatArraySV |
| <DataType> | Elmt | 1 | 1 | Possible value: Block |
| Size | Elmt | 1 | 1 | Number of array elements |
| <Min> | Elmt | 1 | 1 | Minimum is only used for display purpose |
| <Max> | Elmt | 1 | 1 | Maximum is only used for display purpose |
| <DefaultValue> | Elmt | 0 .. 1 | 0 .. 1 |
Comma separated default values of the array. There is no need to specify all values of the array. e.g. ‘0,1,0,0’ or ‘0,-1,-0.5,0.3’ |
7.6.Float16ArraySV
StateVariable that includes a data array of 16 bit float values.
Data type was added with N release.
| Name | Type | Def | Tmp | Description |
| Type | Attr | 1 | 1 | Possible value: Float16ArraySV |
| <DataType> | Elmt | 1 | 1 | must be: Block |
| <Size> | Elmt | 1 | 1 | Number of array elements |
| <Min> | Elmt | 1 | 1 | Minimum is only used for display purpose |
| <Max> | Elmt | 1 | 1 | Maximum is only used for display purpose |
| <DefaultValue> | Elmt | 0 .. 1 | 0 .. 1 |
Comma separated default values of the array. There is no need to specify all values of the array. e.g. ‘0,1,0,0’ or ‘0,-1,-0.5,0.3’ |
7.7.FixedPoint16ArraySV
StateVariable that includes a data array of 16-bit fixed-point values.
| Name | Type | Def | Tmp | Description |
| Type | Attr | 1 | 1 | Possible value: FixedPoint16ArraySV |
| <DataType> | Elmt | 1 | 1 | Possible value: Block |
| Size | Elmt | 1 | 1 | Number of array elements |
| <Min> | Elmt | 1 | 1 | Minimum is only used for display purpose |
| <Max> | Elmt | 1 | 1 | Maximum is only used for display purpose |
| <DefaultValue> | Elmt | 0 .. 1 | 0 .. 1 |
Comma separated default values of the array. There is no need to specify all values of the array. e.g. ‘0,1,0,0’ or ‘0,-1,-0.5,0.3’ |
7.8.StringSV
StateVariable that includes string values.
| Name | Type | Def | Tmp | Description |
| Type | Attr | 1 | 1 | Possible value: StringSV |
| <DataType> | Elmt | 1 | 1 | Possible value: String |
| <DefaultValue> | Elmt | 1 | 1 | Default value |
7.9.FixedPointM_NArraySV
StateVariable that includes a data array of 16-bits, 24-bits or 32-bits fixed-point values.
| Name | Type | Def | Tmp | Description |
| Type | Attr | 1 | 1 | Possible value: FixedPoint16ArraySV |
| <DataType> | Elmt | 1 | 1 | Possible value: Block |
| Size | Elmt | 1 | 1 | Number of array elements |
| <Min> | Elmt | 1 | 1 | Minimum is only used for display purpose |
| <Max> | Elmt | 1 | 1 | Maximum is only used for display purpose |
| <DefaultValue> | Elmt | 0 .. 1 | 0 .. 1 |
Comma separated default values of the array. There is no need to specify all values of the array. e.g. ‘0,1,0,0’ or ‘0,-1,-0.5,0.3’
|
| <TargetValue> | Attr | NA | NA |
TargetValue must use FixedPointBitConverter and specify format for M and N e.g. ‘ <TargetValue> |
8.TargetValue
8.1.Common
A TargetValue is the link between a StateVariable and a memory block of the target device.
| Name | ID / Addr | Type | Def | Tmp | Incl | Description |
| Device | Addr | Attr | 0 .. 1 | 0 .. 1 | The device index of the targetValue. If no device is specified, the device index is inherited from the owning object. | |
| Address | ID / Addr | Attr | 0 .. 1 | 0 .. 1 | Absolute Addr of the value in the target device. Either <Addr> or <Offset> must be defined. It can be a decimal (10944) or a hexadecimal (0x2AC0). | |
| Offset | ID / Addr | Attr | 0 .. 1 | 0 .. 1 | Relative offset of the target value related to the target Addr of the object. Either <Offset> or <Addr> must be defined. It can be a decimal (10944) or a hexadecimal (0x2AC0). | |
| <BigEndian> | ID / Addr | Elmt | 0 .. 1 | 0 .. 1 | Boolean value to indicate big endianness. Default value is little endian. |
8.2.Target Value
| Name | Type | Def | Tmp | Incl | Description |
| Type | Attr | 0 .. 1 | 0 .. 1 | Possible values:
|
|
| <BitConverter> | Elmt | 1 | 1 | The format of the value on the target device. Possible values:
|
|
| <Encode> | Elmt | 0 .. 1 | 0 .. 1 | Conversion formula, written in C# code, and executed before the value is sent to the target device. e.g., 20 * Math.Log10(value). It must be the inverse of <Decode> formula. | |
| <Decode> | Elmt | 0 .. 1 | 0 .. 1 | Conversion formula, written in C# code, that is executed after a value is read back from a target device. e.g., Math.Power(10, value / 20). It must be the inverse of <Encode> formula. | |
| <Mask> | Elmt | 0 .. 1 | 0 .. 1 |
A bit mask that can be defined to limit the update of the target device memory to specific bits. The main use case is in conjunction with an EnumSV. If a single bit of the mask is:
e. g. 0x08 => bit three is used – the reset is ignored. |
8.3.Block Target Value
<BlockTargetValue>
A BlockTargetValue is the link between a StateVariable and a data block in the memory of the target device that Incls several values.
| Name | Type | Def | Tmp | Incl | Description |
| Type | Attr | 1 | 1 | Possible value: BlockTargetValue | |
| Size | Attr | 1 | 1 | The size of the data block in bytes in target memory. |
9.Templates
Legend:
Emphasized fields are only an example and can be adjusted.
9.1.StateVariables
9.1.1.FIR coefficients
<StateVariable Key=”CoefficientsHighTmp” Type=”FixedPoint16ArraySV”>
<DataType>Block</DataType>
<Size>3072</Size>
<Min>-1</Min>
<Max>1</Max>
<DefaultValue>0</DefaultValue>
<BuddyGroup>FIR</BuddyGroup>
<BuddyType>Coefficients</BuddyType>
<TargetValue>
<BitConverter>UInt8ArrayBitConverter</BitConverter>
</TargetValue>
</StateVariable>
9.1.2.String
<StateVariable Key=”StringTmp” Type=”StringSV”>
<DataType>String</DataType>
<DefaultValue>some Text</DefaultValue>
<TargetValue Size=”32“>
<BitConverter>StringBitConverter</BitConverter>
</TargetValue>
</StateVariable>
10.Revision History
| Revision | Description | Created by / Date (DD-MMM-YY) | Reviewed & Approved By / Date (DD-MMM-YY) |
| 1.0 | Elmts required for ID based data handling were added to Object Def and TargetValue Def |
Ernst Rodehau (09-Feb-17) |
Philipp Krejci (09-Feb-17) |
| 1.0.1 | Elmts required for device identification were added to node Def |
Ernst Rodehau (15-Mar-17) |
Philipp Krejci (15-Mar-17) |
| 1.0.2 | Node Def: TargetDevice added |
Ernst Rodehau (16-May-17) |
Philipp Krejci (17-May-17) |
| 1.0.3 | SV Def: Default Value of Tmp can be overwritten |
Ernst Rodehau (09Jun-17) |
Philipp Krejci (15-Jun-17) |
| 1.1 | Updates Tmp and format |
Ismael Mendoza (14 Sep-17) |
Philipp Krejci (15-Sep-17) |
| 1.1.1 | Additional explorer icons and SV buddy types |
Ernst Rodehau (29 Sep-17) |
|
| 1.1.2 | ‘FixedPoint16ArraySV’ statevariable type addition |
Deepashree Iyangar (8 Dec 2017) |
|
| 1.1.3 | ‘StringBitConverter’ and StringSV added |
Tyson Pappachan (15.01.2018) |
|
| 1.1.4 |
TargetValue: Size Attr added Tmps chapter started |
Ernst Rodehau (26.01.2018) |
|
| 1.2 | Document Verification for Errors and Spelling Mistakes |
Tyson Pappachan (04.05.2018) |
|
| 1.3 | Added StreamSV type and changes to Buddy Groups, Buddy Types and Buddies to accommodate streaming |
Deepashree Iyangar (19-Jul-18) |
|
| 1.4 | Added StreamType to StreamDataSV |
Deepashree Iyangar (23-Jul-18) |
|
| 1.5 | Reviewed for grammar, punctuation, spelling, sentence structure and readability. Created and applied formatting standards. |
Laurie Sidwell (6-Jul-18) |
|
| 1.6 |
Applied formatting standards of official HarmanAudioworX Tmp Added chapter Purpose of this Document Removed StreamActiveSV and StringDataSV Reviewed contents and changed some terms (no alteration of contents) |
Julian Hoellig Ernst Rodehau (2-Oct-18) |
|
| 1.7 |
Removed unwanted streaming related information. Added “Streamable” element to the statevariable. |
Deepashree Iyangar (10-Oct-18) |
Ernst Rodehau (10-Oct-18) |
| 1.8 | Added newly supported units in GTT for NumericSv |
Deepashree Iyangar (20-Dec-18) |
Ernst Rodehau (21-Dec-18) |
| 1.8.1 | Chapter 2.6.1 TargetValue category added: ReadOnlyState |
Ernst Rodehau (21-Jan-19) |
Ravish Hegde (24-Jan-19) |
| 1.8.2 | Chapter 2.6.1 TargetValue category removed: ReadOnlyState |
Ernst Rodehau (12-Feb-19) |
|
| 1.8.3 | Chapter 2.5.1 StateVariable definition: Stream Index added |
Ernst Rodehau (19-Jun-19) |
|
| 1.9.0 | Various chapters – Categories moved from SV to Object level. |