Extensible 3D (X3D)
Part 1: Architecture and base components

28 Distributed interactive simulation (DIS) component

# 28.1 Introduction

## 28.1.1 Name

The name of this component is "DIS". This name shall be used when referring to this component in the COMPONENT statement (see 7.2.5.4 Component statement).

## 28.1.2 Overview

This clause describes the Distributed Interactive Simulation (DIS) component of this document. The Distributed Interactive Simulation (DIS) component provides networked interoperability with the IEEE DIS protocol (see [IEEE1278] and [SISO]) for sharing state and conducting real-time platform-level simulations across multiple host computers. Table 28.1 provides links to the major topics in this clause.

Table 28.1 — Topics

28.1 Introduction 28.1.1 Name 28.1.2 Overview 28.2 Concepts 28.2.1 Overview of DIS 28.2.2 Network communications 28.2.3 Common DIS fields 28.3 Node reference 28.3.1 DISEntityManager 28.3.2 DISEntityTypeMapping 28.3.3 EspduTransform 28.3.4 ReceiverPdu 28.3.5 SignalPdu 28.3.6 TransmitterPdu 28.4 Support levels Table 28.1 — Topics Table 28.2 — DIS component support levels

# 28.2 Concepts

## 28.2.1 Overview of DIS

IEEE 1278 (see [IEEE1278] and [SISO]) is an IEEE communications standard for physically based distributed simulations. Known by the name Distributed Interactive Simulation (DIS), the standard defines the binary layout of a series of messages used to transmit simulation information. Often used by military applications, IEEE 1278 covers a wide range of data, including entity location, velocity, and orientation, and more obscure features such as electronic warfare and supply logistics. In addition to its original focus on military simulations, DIS is also used in civilian applications.

The DIS component consists of the following X3D nodes:

- DISEntityManager,
- DISEntityTypeMapping,
- EspduTransform,
- ReceiverPdu,
- SignalPdu, and
- TransmitterPdu.

Together, these nodes provide the means to send and receive DIS-compliant messages, called Protocol Data Units (PDUs), across the network. Together these nodes support seven DIS PDU message types: Collision, Detonate, Entity State, Fire, Receiver, Signal and Transmitter. Numerous other DIS PDUs are defined by the DIS protocol, but corresponding X3D mappings are not defined.

## 28.2.2 Network communications

DIS messages are typically transmitted on User Datagram Protocol (UDP) (see 2.[RFC768]) sockets). Multicast, unicast or broadcast transport mechanisms may be used for network communications. Each of the X3D DIS nodes communicates via a UDP socket, usually multicast-enabled, and uses it to read and/or write DIS messages. These messages can be used to communicate and to modify both position and orientation of virtual entities in the X3D scene among multiple hosts across the network. Each DIS implementation is responsible for managing sockets. New entities are registered by the DIS node to send/receive network updates. "Entities" are a high-level abstraction; in the case of a position update, the actual X3D scene-graph object modified may be a Transform node (as for EspduTransform), and the geometry for an animated entity is contained in the corresponding children.

## 28.2.3 Common DIS fields

The DIS nodes have a number of descriptive fields in common relating to the desired behavior of the DIS node. Common fields include message header and content information conforming to the DIS standard, network status, and configuration data needed to establish or modify network communications. The semantics of field values and syntax of enumeration values are strictly defined by the IEEE 1278 series and corresponding SISO standards (see [IEEE1278] and [SISO]).

Since nodes in the DIS component can receive data from the network, these nodes are also sensors. Thus, these nodes implement the X3DNetworkSensorNode interface and include description, enabled and isActive fields.

Common fields relating to description of the desired behavior of the DIS node are: isActive, timestamp, networkMode, isStandAlone, isNetworkReader, isNetworkWriter, readInterval, and writeInterval.

The isActive field indicates if the node has received a DIS message (when output as TRUE) or not (when output as FALSE). Since DIS entities can be considered inactive after some period of time (five seconds is specified as the default in IEEE 1278) either event may be received by listening nodes. An implementation may use a different value.

The timestamp field provides the time (SFTime) at which the DIS message arrived, referenced to local system time.

The networkMode field indicates if the X3D DIS node is operating in one of three distinct ways: independently from the network, as a sender writing updates, or as a receiver reading updates.

- networkMode standAlone only connects dynamic behavior via local ROUTEs and does not send/receive PDUs to/from the network.
- networkMode networkReader reads messages at readInterval seconds from the network, which can modify fields in the node upon receipt. In this mode, the entity geometry in the DIS node ( e.g., EspduTransform) acts as a remote copy of the entity that sent the PDUs.
- networkMode networkWriter sends messages at writeInterval seconds to the network. In this mode, the entity geometry in the DIS node ( e.g., EspduTransform) acts as the master copy of the entity originating state updates.

Fields isStandAlone, isNetworkReader, and isNetworkWriter are respectively sent as appropriate TRUE or FALSE events during initialization of the DIS node and whenever networkMode is changed. These fields match the state of networkMode. One and only one of these three fields can be TRUE at any given time.

The readInterval field is a duration of time in seconds between checking for receipt of DIS messages. Setting the readInterval field to zero disables the reading of DIS messages. The writeInterval is a duration of time in seconds between message transmissions by the node. Setting the writeInterval field to zero disables the transmission of DIS messages by the node.

Common fields relating to standard identification of DIS entities are: siteID, applicationID, and entityID.

The siteID and applicationID fields are used to create the DIS PDU Simulation Address record. The intent for each simulation exercise is for each DIS site to be assigned a unique identifier, and each simulation application at a DIS site assigned an application identifier unique within that site. Both fields are 16-bit, unsigned numbers. The entityID field further identifies the DIS entity that is the subject of the particular PDU (EXAMPLE an Entity State PDU to update the location and orientation of a particular simulation entity). The entityID is an unsigned, 16-bit number.

Each entity in a DIS application is assigned a triplet identifier ( siteID, applicationID and entityID fields) that is unique across all entities in that application and in that particular distributed exercise. The entity identifier triplet is valid for the duration of the exercise. One and only one "owner" of the entity is appropriate with networkMode `networkWriter` sender for each entity, while corresponding nodes can match parameters with networkMode `networkReader` to be listeners for that same distributed entity.

Common fields relating to DIS network communications are: address, port, multicastRelayHost, multicastRelayPort, rtpHeaderExpected and rtpHeaderHeard.

The address field identifies the multicast address for the message transmission (EXAMPLE "224.2.181.145" or "localhost"). The port field identifies the multicast port (EXAMPLE 62040) for sending or receiving DIS messages.

Fields multicastRelayHost, multicastRelayPort, rtpHeaderExpected and rtpHeaderHeard provide networking extensions to the IEEE DIS protocol (see [IEEE1278]) intended to make DIS more compatible with Internet conventions for unicast and multicast routing over wide-area networks (WANs). If wide-area multicast is needed but not available locally, the multicastRelayHost and multicastRelayPort fields are provided as a fallback server address and associated port, used for creating a unicast tunnel connection to a multicast-connected relay server. Field rtpHeaderExpected indicates that the Real Time Protocol (RTP, see 2.[RFC3550]) header is expected to be prepended to the DIS PDU message to be sent or received by the node (when the field is set to TRUE. Field rtpHeaderHeard indicates that the RTP header has been prepended to the incoming DIS message.

The geoSystem field is used to define the spatial reference frame and is described in 25.2.3 Specifying a spatial reference frame.
The geometry of the nodes in children is to be specified in base length units in X3D coordinates relative to the location specified by the geoCoords field. The geoCoords field should be provided in the format described in 25.2.3 Specifying a spatial reference frame.
The geoCoords field can be used to dynamically update the geospatial location of the model; for example an event might be sent from a GeoPositionInterpolator node.

# 28.3 Node reference

## 28.3.1 DISEntityManager

    DISEntityManager : X3DChildNode {
      SFString [in,out] address         "localhost"
      SFInt32  [in,out] applicationID   0           [0..65535]
      MFNode   [in,out] children        []          [DISEntityTypeMapping]
      SFNode   [in,out] metadata        NULL        [X3DMetadataObject]
      SFInt32  [in,out] port            0           [0..65535]
      SFInt32  [in,out] siteID          0           [0..65535]
      MFNode   [out]    addedEntities               [EspduTransform]
      MFNode   [out]    removedEntities             [EspduTransform]
    }

DISEntityManager notifies a scene when new DIS ESPDU entities arrive or current entities leave. DISEntityManager may contain any number of DISEntityTypeMapping nodes that provide a best-match X3D model to incoming entity type values. For each new DIS entity, DISEntityManager thus produces a new EspduTransform node that contains a corresponding X3D model.

The children field provides a mechanism for automatically creating an X3D model for a new entity arriving. If a new entity matches the given DISEntityManager node, an instance of the provided URL is created using an Inline node and added as a child to the EspduTransform specified in the addedEntities field. See 28.3.2 DISEntityTypeMapping for details on matching DIS parameters to URLs.

NOTE The original name for the DISEntityManager children field in X3D version 3 is mapping.

The addedEntities field sends an MFNode output event for any new entities added during the last network-update time interval. These will be new EspduTransform nodes.

The removedEntities field sends an MFNode output event for any entities removed during the last network-update time interval, either from a network-heartbeat timeout or from an explicit RemoveEntityPDU action. This node array will contain references to each appropriate EspduTransform node that is no longer active.

## 28.3.2 DISEntityTypeMapping

    DISEntityTypeMapping : X3DInfoNode, X3DUrlObject {
      SFTime   [in,out] autoRefresh          0.0    [0,∞)
      SFTime   [in,out] autoRefreshTimeLimit 3600.0 [0,∞)
      SFString [in,out] description          ""
      SFBool   [in,out] load                 TRUE
      SFNode   [in,out] metadata             NULL   [X3DMetadataObject]
      MFString [in,out] url                  []     [URI]
      SFInt32  []       category             0      [0..255]
      SFInt32  []       country              0      [0..65535]
      SFInt32  []       domain               0      [0..255]
      SFInt32  []       extra                0      [0..255]
      SFInt32  []       kind                 0      [0..255]
      SFInt32  []       specific             0      [0..255]
      SFInt32  []       subcategory          0      [0..255]
    }

A DISEntityTypeMapping node provides a mapping from DIS Entity type information to an X3D model. This model provides a visual and behavioral representation of the entity for usage in X3D simulations. The mappings are done by selecting the most specific record that fits the entity. A value of 0 is considered a wildcard. The fields are checked in the following order: kind, domain, country, category, subcategory, specific, extra. All fields after the first zero encountered shall be zero as well.

The fields are checked in the following order: kind, domain, country, category, subcategory, specific, extra.

EXAMPLE Given an entity whose entity type record was: kind=1, domain=2, country=3, category=4, subcategory=5, specific=6, extra=7. If the mapping field of the DISEntityManager contained these nodes:

       DISEntityTypeMapping {
          domain 1
          kind 2
          country 3
          url ["model-a.x3d"]
       }
       DISEntityTypeMapping {
          domain 1
          kind 2
          country 3
          category 4
          url ["model-b.x3d"]
       }

Then, an entity using the second node with a url of "model-b.x3d" is used as its the most specific mapping.

## 28.3.3 EspduTransform

    EspduTransform : X3DGroupingNode,  X3DNetworkSensorNode {
      MFNode     [in]     addChildren
      MFNode     [in]     removeChildren
      SFFloat    [in]     set_articulationParameterValue0
      SFFloat    [in]     set_articulationParameterValue1
      SFFloat    [in]     set_articulationParameterValue2
      SFFloat    [in]     set_articulationParameterValue3
      SFFloat    [in]     set_articulationParameterValue4
      SFFloat    [in]     set_articulationParameterValue5
      SFFloat    [in]     set_articulationParameterValue6
      SFFloat    [in]     set_articulationParameterValue7
      SFString   [in,out] address                                    "localhost"
      SFInt32    [in,out] applicationID                              0            [0..65535]
      MFFloat    [in,out] articulationParameterArray                 []           (-∞,∞)
      SFInt32    [in,out] articulationParameterCount                 0            [0..78]
      MFInt32    [in,out] articulationParameterChangeIndicatorArray  []           [0..255]
      MFInt32    [in,out] articulationParameterDesignatorArray       []           [0..255]
      MFInt32    [in,out] articulationParameterIdPartAttachedToArray []           [0..65535]
      MFInt32    [in,out] articulationParameterTypeArray             []
      SFBool     [in,out] bboxDisplay                                FALSE
      SFVec3f    [in,out] center                                     0 0 0        (-∞,∞)
      MFNode     [in,out] children                                   []           [X3DChildNode]
      SFInt32    [in,out] collisionType                              0            [0..255]
      SFInt32    [in,out] deadReckoning                              0            [0..255]
      SFString   [in,out] description                                ""
      SFVec3f    [in,out] detonationLocation                         0 0 0        (-∞,∞)
      SFVec3f    [in,out] detonationRelativeLocation                 0 0 0        (-∞,∞)
      SFInt32    [in,out] detonationResult                           0            [0..255]
      SFBool     [in,out] enabled                                    TRUE
      SFInt32    [in,out] entityCategory                             0            [0..255]
      SFInt32    [in,out] entityCountry                              0            [0..65535]
      SFInt32    [in,out] entityDomain                               0            [0..255]
      SFInt32    [in,out] entityExtra                                0            [0..255]
      SFInt32    [in,out] entityID                                   0            [0..65535]
      SFInt32    [in,out] entityKind                                 0            [0..255]
      SFInt32    [in,out] entitySpecific                             0            [0..255]
      SFInt32    [in,out] entitySubcategory                          0            [0..255]
      SFInt32    [in,out] eventApplicationID                         0            [0..65535]
      SFInt32    [in,out] eventEntityID                              0            [0..65535]
      SFInt32    [in,out] eventNumber                                0            [0..65355]
      SFInt32    [in,out] eventSiteID                                0            [0..65535]
      SFBool     [in,out] fired1                                     FALSE
      SFBool     [in,out] fired2                                     FALSE
      SFInt32    [in,out] fireMissionIndex                           0            [0..65535]
      SFFloat    [in,out] firingRange                                0.0          (0,∞)
      SFInt32    [in,out] firingRate                                 0            [0..65535]
      SFInt32    [in,out] forceID                                    0            [0..255]
      SFInt32    [in,out] fuse                                       0            [0..65535]
      SFVec3d    [in,out] geoCoords                                  0 0 0        (-∞,∞)
      SFVec3f    [in,out] linearAcceleration                         0 0 0        (-∞,∞)
      SFVec3f    [in,out] linearVelocity                             0 0 0        (-∞,∞)
      SFString   [in,out] marking                                    ""
      SFNode     [in,out] metadata                                   NULL         [X3DMetadataObject]
      SFString   [in,out] multicastRelayHost                         ""
      SFInt32    [in,out] multicastRelayPort                         0            [0..65535]
      SFInt32    [in,out] munitionApplicationID                      0            [0..65535]
      SFVec3f    [in,out] munitionEndPoint                           0 0 0        (-∞,∞)
      SFInt32    [in,out] munitionEntityID                           0            [0..65535]
      SFInt32    [in,out] munitionQuantity                           0            [0..65535]
      SFInt32    [in,out] munitionSiteID                             0            [0..65535]
      SFVec3f    [in,out] munitionStartPoint                         0 0 0        (-∞,∞)
      SFString   [in,out] networkMode                                "standAlone" ["standAlone"|"networkReader"|"networkWriter"]
      SFInt32    [in,out] port                                       0            [0..65535]
      SFTime     [in,out] readInterval                               0.1          [0,∞)
      SFRotation [in,out] rotation                                   0 0 1 0      [-1,1] or (-∞,∞)
      SFBool     [in,out] rtpHeaderExpected                          FALSE
      SFVec3f    [in,out] scale                                      1 1 1        (-∞,∞)
      SFRotation [in,out] scaleOrientation                           0 0 1 0      [-1,1] or (-∞,∞)
      SFInt32    [in,out] siteID                                     0            [0..65535]
      SFVec3f    [in,out] translation                                0 0 0        (-∞,∞)
      SFBool     [in,out] visible                                    TRUE
      SFInt32    [in,out] warhead                                    0            [0..65535]
      SFTime     [in,out] writeInterval                              1.0          [0,∞)
      SFFloat    [out]    articulationParameterValue0_changed
      SFFloat    [out]    articulationParameterValue1_changed
      SFFloat    [out]    articulationParameterValue2_changed
      SFFloat    [out]    articulationParameterValue3_changed
      SFFloat    [out]    articulationParameterValue4_changed
      SFFloat    [out]    articulationParameterValue5_changed
      SFFloat    [out]    articulationParameterValue6_changed
      SFFloat    [out]    articulationParameterValue7_changed
      SFTime     [out]    collideTime
      SFTime     [out]    detonateTime
      SFTime     [out]    firedTime
      SFBool     [out]    isActive
      SFBool     [out]    isCollided
      SFBool     [out]    isDetonated
      SFBool     [out]    isNetworkReader
      SFBool     [out]    isNetworkWriter
      SFBool     [out]    isRtpHeaderHeard
      SFBool     [out]    isStandAlone
      SFTime     [out]    timestamp
      SFVec3f    []       bboxCenter                                 0 0 0        (-∞,∞)
      SFVec3f    []       bboxSize                                   -1 -1 -1     [0,∞) or −1 −1 −1
      MFString   []       geoSystem                                  ["GD","WE"]  (see 25.2.3)
    }

EspduTransform is a X3DGroupingNode that can contain most nodes, and also implements the X3DBoundedObject interface. EspduTransform integrates functionality of the following DIS PDUs: EntityStatePDU, CollisionPDU, DetonationPDU, FirePDU, CreateEntity, and RemoveEntity. The following description identifies the fields of the EspduTransform node that are associated with the content of these PDUs.

As an X3DGroupingNode, EspduTransform has addChildren and removeChildren events to permit modification to the subordinate structure of the scene graph. The removeChildren event removes nodes from the EspduTransform's children field. Any nodes in the removeChildren event that are not in the EspduTransform's children list are ignored. Adding a node to the children field will add that node to the EspduTransform's set of children. Adding any node to the EspduTransform's children field that is already in that child list is illegal. Adding any node to the EspduTransform's children that is an ancestor of that grouping is illegal.

Fields in the EspduTransform node that were not previously described in 28.2.3 Common DIS fields are: translation, rotation, center, scale, scaleOrientation, bboxCenter, bboxSize, articulationParameterCount, articulationParameterDesignatorArray, articulationParameterChangeIndicatorArray, articulationParameterIdPartAttachedToArray, articulationParameterTypeArray, articulationParameterArray, set_articulationParameterValue0, set_articulationParameterValue1, set_articulationParameterValue2, set_articulationParameterValue3, set_articulationParameterValue4, set_articulationParameterValue5, set_articulationParameterValue6, set_articulationParameterValue7, articulationParameterValue0_changed, articulationParameterValue1_changed, articulationParameterValue2_changed, articulationParameterValue3_changed, articulationParameterValue4_changed, articulationParameterValue5_changed, articulationParameterValue6_changed, articulationParameterValue7_changed, marking, forceID, entityKind, entityDomain, entityCountry, entityCategory, entitySubcategory, entitySpecific, entityExtra, linearVelocity, linearAcceleration, deadReckoning, isCollided, collidedTime, eventApplicationID, eventSiteID, eventEntityID, collisionType, eventNumber, fired1, fired2, firedTime, munitionStartPoint, munitionEndPoint, fireMissionIndex, munitionApplicationID, munitionSiteID, munitionEntityID, warhead, fuse, munitionQuantity, firingRate, firingRange, isDetonated, detonateTime, detonationLocation, detonationRelativeLocation, and detonationResult.

The Entity State PDU provides notification of a new position and orientation of an entity, which directly corresponds to the functionality of the X3D Transform node. The translation field corresponds to the new position in the DIS coordinate system. It is important to distinguish between the X3D coordinate system and the DIS coordinate system. If (x, y, z) are the coordinates of a point in the X3D coordinate system, corresponding DIS coordinates for the same point would be (x, −z, y). Note that only X3D coordinates are used by the X3D scene. The EspduTransform node internally performs all conversions to/from DIS coordinates when writing/reading DIS PDUs to/from the network.

The rotation field provides the rotation of the entity, where the rotation is performed relative to the value of the center field. The scale field provides scaling factors along the x, y, z axes, while the scaleOrientation field provides scaling factors for the specified rotation. The translation, rotation, scale, and center fields corresponds directly with functionality of the Transform node. The bboxCenter and bboxSize fields (of the X3DBoundedObject interface) specify the center and size, respectively, of a cube bounding the entity geometry contained in the EspduTransform grouping node, corresponding to the same fields of an X3D Transform node.

Articulation parameter inputOnly events and outputOnly events are provided for the articulationParameters array in order to enable simple routing of primary events of interest into (and out of) the array. As an example, if eight articulation parameters were needed for an EspduTransform controlling the movable parts of a race-car model, each of these articulation parameters might be individually routed as necessary. Events into (and out of) articulationParameter subscripts [8] through [78] are accomplished either by a separate Script node mechanism, or else by complete routing/replacement using an MFFloat event.

The articulationParameterCount field (8-bit unsigned integer) indicates the number of parameters that are being used to describe articulation of various segments of the entity model. For example, the orientation of a turret together with the inclination of the gun for a tank entity may be described by two articulation parameters, or the orientation of various segments in a humanoid model may be provided by several articulation parameters. The maximum number of articulated parameter records in an Entity State PDU is constrained to 78 by the maximum length of a PDU.

For X3D authoring convenience in ROUTEing events to (or from) articulation parameters, the first eight articulation parameter values may be accessed by accessType inputOnly/outputOnly fields ( set_articulationParameterValue0, ..., set_articulationParameterValue7 and articulationParameterValue0_changed, ..., articulationParameterValue7_changed).

Fields articulationParameterDesignatorArray, articulationParameterChangeIndicatorArray, articulationParameterIdPartAttachedToArray, articulationParameterTypeArray are arrays that correspond to additional values provided in each articulation parameter record. Elements in these arrays correspond to each articulation parameter in sequential order.

- The Parameter Type Designator entries in the articulationParameterDesignatorArray indicate if the the parameter record is for an articulated or attached part. It is represented by an 8-bit enumeration.
- The Change Indicator entries in the articulationChangeIndicatorArray indicate the change of any parameter for the associated articulated part. This is specified by an 8-bit unsigned integer. The value is initially set to zero for each exercise and is sequentially incremented by one for each change in the articulation parameters. The proper indicator is updated automatically by an X3D DIS implementation upon receipt of a set_articulationParameterValue event.
- The ID - Part Attached To entries in the articulationParameterIdPartAttachedToArray identify the articulated part to which this articulation parameter is attached. The value is specified by a 16-bit unsigned integer, and is set to zero if the articulated part is attached directly to the entity.
- The Parameter Type entries in the articulationParameterTypeArray are specified by 32-bit enumeration values.
- The Parameter Value entries in the articulationParameterArray are specified by a 64-bit field. The definition of the 64 bits is determined based on the type of parameter indicated above.

The marking field is a SFString value (with a maximum of 11 characters) corresponding to a selection from an enumerated set of markings in the DIS standard (for full compliance) or an arbitrary string for non-compliant applications using the EspduTransform node.

The forceID and entityKind fields are 8-bit identification enumerations. The entityDomain field (8-bit enumeration) identities the domain of operation of the entity ( e.g., subsurface, surface, land), except for munition entities. For munition entities, this field specifies the domain of the target. The entityCountry field (16-bit enumeration) specifies the country to which the design of the entity is attributed. The entityCategory field (8-bit enumeration) identifies the main category that describes the entity. The entitySubcategory field (8-bit enumeration) specifies a subcategory based on the identified category value. The entitySpecific field (8-bit enumeration) provides specific information about the entity based on the identified subcategory field. The entityExtra field (8-bit enumeration) provides additional information about the entity. The DIS specification also allows identification of an Alternative Entity Type containing the same fields (Entity Kind, Domain, Country, Category, Subcategory, Specific, Extra) as described above.

Enumeration values are provided directly, or in additional references, as specified by IEEE 1278 (see [IEEE1278] and [SISO]).

The linearVelocity and linearAcceleration fields provide the linear velocity and acceleration vectors, respectively, for dead reckoning calculations. The dead reckoning algorithm to be applied is identified in the deadReckoning field (8-bit enumeration).

The CollisionPDU is sent to notify an entity that a collision has occurred. The issuing entity is identified in the entityID field described in 28.2.3 Common DIS fields. The isCollided field is a Boolean value indicating if a collision (TRUE) has occurred. The collideTime field gives the time (SFTime) at which the collision was determined to have occurred. In a CollisionPDU message, the eventSiteID, eventApplicationID, eventEntityID triplet uniquely identifies the entity colliding with the issuing entity (when known). The collisionType field (8-bit enumeration) identifies the type of collision that occurred.

The eventNumber field is set to one for each exercise and incremented by one for each fire event, collision event, or electromagnetic mission event.

The FirePDU notifies the simulation that an entity has fired a weapon. The firing entity is identified in the entityID field described in 28.2.3 Common DIS fields. Field fired1 (set to TRUE) indicates the primary weapon was fired; field fired2 (set to TRUE) indicates the entity's secondary weapon was fired. The firedTime field gives the time (SFTime) at which the firing occurred. Fields munitionStartPoint and munitionEndPoint describe the path of the munition from firing weapon to detonation or impact. The fireMissionIndex field identifies the fire mission, if known. The firingRange field specifies the range (in meters) that an entity's fire control system has assumed in computing the fire control solution.

In a FirePDU message, the EventSiteID, EventApplicationID, EventEntityID triplet uniquely identifies the target entity, when known. For the FirePDU and DetonationPDU messages, the munitionSiteID, munitionApplicationID, munitionEntityID triplet uniquely identifies the munition entity (if known).

The FirePDU and DetonationPDU messages provide burst descriptor information in the warhead (16-bit enumeration), fuse (16-bit enumeration), munitionQuantity (16-bit unsigned integer), and firingRate (16-bit unsigned integer) fields.

The DetonationPDU provides notification that a munition has detonated or impacted so that other entities can determine possible damage from the detonation. The detonated field indicates if detonation has occurred (TRUE). The detonateTime field gives the time (SFTime) at which the detonation is determined to have occurred. This enables other entities to determine their position relative to the detonation at the time the detonation occurred.

The DetonationPDU provides the detonationLocation in world coordinates, as well as the detonationRelativeLocation, the location of the detonation or impact in the target entity's coordinate system. The detonationResult field (8-bit enumeration) provides information on the outcome of the detonation event.

The CreateEntityPDU notifies other entities of a new entity in the simulation. The siteID, applicationID, entityID triplet described in 28.2.3 Common DIS fields, uniquely identifies the new entity. A CreateEntityPdu is sent upon startup or creation of a new entity.

The RemoveEntityPDU notifies other entities of the removal of an entity from the simulation. The siteID, applicationID, entityID triplet described in 28.2.3 Common DIS fields, uniquely identifies the entity to be removed. A RemoveEntityPDU is sent upon shutdown or removal of an existing entity.

## 28.3.4 ReceiverPdu

    ReceiverPdu : X3DNetworkSensorNode, X3DBoundedObject {
      SFString [in,out] address                  "localhost"
      SFInt32  [in,out] applicationID            0            [0..65535]
      SFBool   [in,out] bboxDisplay              FALSE
      SFString [in,out] description              ""
      SFBool   [in,out] enabled                  TRUE
      SFInt32  [in,out] entityID                 0            [0..65535]
      SFVec3d  [in,out] geoCoords                0 0 0        (-∞,∞)
      SFNode   [in,out] metadata                 NULL         [X3DMetadataObject]
      SFString [in,out] multicastRelayHost       ""
      SFInt32  [in,out] multicastRelayPort       0            [0..65535]
      SFString [in,out] networkMode              "standAlone" ["standAlone"|"networkReader"|"networkWriter"]
      SFInt32  [in,out] port                     0            [0..65535]
      SFInt32  [in,out] radioID                  0            [0..65535]
      SFTime   [in,out] readInterval             0.1          [0,∞)
      SFFloat  [in,out] receivedPower            0.0          [0,∞)
      SFInt32  [in,out] receiverState            0            [0..65535]
      SFBool   [in,out] rtpHeaderExpected        FALSE
      SFInt32  [in,out] siteID                   0            [0..65535]
      SFInt32  [in,out] transmitterApplicationID 0            [0..65535]
      SFInt32  [in,out] transmitterEntityID      0            [0..65535]
      SFInt32  [in,out] transmitterRadioID       0            [0..65535]
      SFInt32  [in,out] transmitterSiteID        0            [0..65535]
      SFBool   [in,out] visible                  TRUE
      SFInt32  [in,out] whichGeometry            1            [-1..∞)
      SFTime   [in,out] writeInterval            1.0          [0,∞)
      SFBool   [out]    isActive
      SFBool   [out]    isNetworkReader
      SFBool   [out]    isNetworkWriter
      SFBool   [out]    isRtpHeaderHeard
      SFBool   [out]    isStandAlone
      SFTime   [out]    timestamp
      SFVec3f  []       bboxCenter               0 0 0        (-∞,∞)
      SFVec3f  []       bboxSize                 -1 -1 -1     [0,∞) or −1 −1 −1
      MFString []       geoSystem                ["GD","WE"]  (see 25.2.3)
    }

ReceiverPdu is an X3DChildNode node, and also implements the X3DBoundedObject interface. The ReceiverPdu transmits the state of radio frequency (RF) receivers modeled in the simulation. Fields in the ReceiverPdu node that were not previously described in Common DIS Fields are: whichGeometry, radioID, receivedPower, receiverState, transmitterSiteID, transmitterApplicationID, transmitterEntityID, and transmitterRadioID.

The radioID field (16-bit unsigned integer) identifies a particular radio within a given entity ( entityID). The radioID is assigned sequentially, starting with 1. The combination of Entity ID and Radio ID uniquely identify a radio within a simulation exercise. The receivedPower field (32-bit flowing point) indicates the RF power received, after applying any propagation loss and antenna gain. The field value is in units of decibel-milliwatts (dBm). The receiverState (16-bit enumeration) indicates if the receiver is currently idle or busy via one of the following enumerated values:

> 0 = off,
> 1 = on but not receiving, or
> 2 = on and receiving.

The transmitterEntityID (16-bit unsigned integer) identifies the transmitter entity that has emitted the signal being received. The transmitterRadioID field (16-bit unsigned integer) identifies the particular radio within the transmitter entity ( transmitterEntityID).

The transmitterSiteID field (16-bit unsigned integer) provides the unique DIS site identifier for the transmitter entity. The transmitterApplicationID (16-bit unsigned integer) provides the application identifier for the transmitter entity that is unique within the DIS site ( transmitterSiteID).

The whichGeometry field indicates to the rendering software what geometry to draw for the receiverPdu node: −1 for no geometry; 0 for text trace; 1 for default geometry for this node. Additional alternative geometry modes may optionally be supported by X3D browsers. Lack of support for higher modes reverts to whichGeometry value of 1.

The bboxCenter and bboxSize fields (of the X3DBoundedObject interface) specify the center and size, respectively, of a cube bounding the display geometry (if any) for this node.

## 28.3.5 SignalPdu

    SignalPdu : X3DNetworkSensorNode, X3DBoundedObject {
      SFString [in,out] address            "localhost"
      SFInt32  [in,out] applicationID      0            [0..65535]
      SFBool   [in,out] bboxDisplay        FALSE
      MFInt32  [in,out] data               []           [0..255]
      SFInt32  [in,out] dataLength         0            [0..65535]
      SFString [in,out] description                     ""
      SFBool   [in,out] enabled            TRUE
      SFInt32  [in,out] encodingScheme     0            [0..65535]
      SFInt32  [in,out] entityID           0            [0..65535]
      SFVec3d  [in,out] geoCoords          0 0 0        (-∞,∞)
      SFNode   [in,out] metadata           NULL         [X3DMetadataObject]
      SFString [in,out] multicastRelayHost ""
      SFInt32  [in,out] multicastRelayPort 0            [0..65535]
      SFString [in,out] networkMode        "standAlone" ["standAlone"|"networkReader"|"networkWriter"]
      SFInt32  [in,out] port               0            [0..65535]
      SFInt32  [in,out] radioID            0            [0..65535]
      SFTime   [in,out] readInterval       0.1          [0,∞)
      SFBool   [in,out] rtpHeaderExpected  FALSE
      SFInt32  [in,out] sampleRate         0            [0..65535]
      SFInt32  [in,out] samples            0            [0..65535]
      SFInt32  [in,out] siteID             0            [0..65535]
      SFInt32  [in,out] tdlType            0            [0..65535]
      SFBool   [in,out] visible            TRUE
      SFInt32  [in,out] whichGeometry      1            [-1..∞)
      SFTime   [in,out] writeInterval      1.0          [0,∞)
      SFBool   [out]    isActive
      SFBool   [out]    isNetworkReader
      SFBool   [out]    isNetworkWriter
      SFBool   [out]    isRtpHeaderHeard
      SFBool   [out]    isStandAlone
      SFTime   [out]    timestamp
      SFVec3f  []       bboxCenter         0 0 0        (-∞,∞)
      SFVec3f  []       bboxSize           -1 -1 -1     [0,∞) or −1 −1 −1
      MFString []       geoSystem          ["GD","WE"]  (see 25.2.3)
    }

SignalPdu is an X3DChildNode node, and also implements the X3DBoundedObject interface. Transmission of voice, audio or other data is communicated by issuing a Signal PDU from the SignalPdu node. Fields in the SignalPdu node that were not previously described in Common DIS Fields are: radioID, encodingScheme, tdlType, sampleRate, dataLength, samples, data, and whichGeometry.

The radioID field identifies a particular radio within a given entity ( entityID). The radioID (16-bit unsigned integer) is assigned sequentially, starting with 1. The combination of Entity ID and Radio ID uniquely identify a radio within a simulation exercise. The encodingScheme field (16-bit enumeration) designates both an Encoding Class enumerated value (2 most significant bits):

> 0 = Encoded Voice;
> 1 = Raw Binary Data;
> 2 = Application-Specific Data;
> 3 = Database Index.

and an Encoding Type enumerated value (14 least significant bits):

> 1 = 8-bit mu-law;
> 2 = CVSD per MIL-STD-188-113;
> 3 = ADPCM per CCITT G.721;
> 4 = 16-bit linear PCM;
> 5 = 8-bit linear PCM;
> 6 = Vector Quantization.

The tdlType field (16-bit enumeration) specifies the Tactical Data Link (TDL) type as an enumerated value when the Encoding Class is voice, raw binary, application-specific, or database index representation of a TDL message. The field is set to zero when it is not representing a TDL message.

The sampleRate field (32-bit unsigned integer) gives either (1) the sample rate in samples per second if the Encoding Class is encoded audio or (2) the data rate in bits per second for data transmissions. If the Encoding Class is database index, sampleRate is set to zero.

The samples field (16-bit unsigned integer) gives the number of samples in the PDU if the Encoding Class is encoded voice; otherwise, the field is set to zero.

The dataLength field (16-bit unsigned integer) specifies the number of bits of digital voice audio or digital data being sent in the Signal PDU. If the Encoding Class is database index, the dataLength field is set to the value 96.

The data field specifies the audio or digital data conveyed by the radio transmission. The interpretation of the field depends on the value of the encodingScheme and tdlType fields. Refer to IEEE 1278 ([IEEE1278] and [SISO]) for details.

The whichGeometry field indicates to the rendering software what geometry to draw for the SignalPdu node: −1 for no geometry; 0 for text trace; 1 for default geometry for this node. Additional alternative geometry modes may optionally be supported by X3D browsers. Lack of support for higher modes reverts to whichGeometry value of 1.

The bboxCenter and bboxSize fields (of the X3DBoundedObject interface) specify the center and size, respectively, of a cube bounding the display geometry (if any) for this node.

## 28.3.6 TransmitterPdu

    TransmitterPdu : X3DNetworkSensorNode, X3DBoundedObject {
      SFString [in,out] address                            "localhost"
      SFVec3f  [in,out] antennaLocation                    0 0 0        (-∞,∞)
      SFInt32  [in,out] antennaPatternLength               0            [0..65535]
      SFInt32  [in,out] antennaPatternType                 0            [0..65535]
      SFInt32  [in,out] applicationID                      0            [0..65535]
      SFBool   [in,out] bboxDisplay                        FALSE
      SFInt32  [in,out] cryptoKeyID                        0            [0..65535]
      SFInt32  [in,out] cryptoSystem                       0            [0..65535]
      SFString [in,out] description                        ""
      SFBool   [in,out] enabled                            TRUE
      SFInt32  [in,out] entityID                           0            [0..65535]
      SFInt32  [in,out] frequency                          0            [0,∞)
      SFVec3d  [in,out] geoCoords                          0 0 0        (-∞,∞)
      SFInt32  [in,out] inputSource                        0            [0..255]
      SFInt32  [in,out] lengthOfModulationParameters       0            [0..255]
      SFNode   [in,out] metadata                           NULL         [X3DMetadataObject]
      SFInt32  [in,out] modulationTypeDetail               0            [0..65535]
      SFInt32  [in,out] modulationTypeMajor                0            [0..65535]
      SFInt32  [in,out] modulationTypeSpreadSpectrum       0            [0..65535]
      SFInt32  [in,out] modulationTypeSystem               0            [0..65535]
      SFString [in,out] multicastRelayHost                 ""
      SFInt32  [in,out] multicastRelayPort                 0            [0..65535]
      SFString [in,out] networkMode                        "standAlone" ["standAlone"|"networkReader"|"networkWriter"]
      SFInt32  [in,out] port                               0            [0..65535]
      SFFloat  [in,out] power                              0.0          [0,∞)
      SFInt32  [in,out] radioEntityTypeCategory            0            [0..255]
      SFInt32  [in,out] radioEntityTypeCountry             0            [0..65535]
      SFInt32  [in,out] radioEntityTypeDomain              0            [0..255]
      SFInt32  [in,out] radioEntityTypeKind                0            [0..255]
      SFInt32  [in,out] radioEntityTypeNomenclature        0            [0..255]
      SFInt32  [in,out] radioEntityTypeNomenclatureVersion 0            [0..65535]
      SFInt32  [in,out] radioID                            0            [0..255]
      SFTime   [in,out] readInterval                       0.1          [0,∞)
      SFVec3f  [in,out] relativeAntennaLocation            0 0 0        (-∞,∞)
      SFBool   [in,out] rtpHeaderExpected                  FALSE
      SFInt32  [in,out] siteID                             0            [0..65535]
      SFFloat  [in,out] transmitFrequencyBandwidth         0.0          (-∞,∞)
      SFInt32  [in,out] transmitState                      0            [0..255]
      SFBool   [in,out] visible                            TRUE
      SFInt32  [in,out] whichGeometry                      1            [-1..∞)
      SFTime   [in,out] writeInterval                      1.0          [0,∞)
      SFBool   [out]    isActive
      SFBool   [out]    isNetworkReader
      SFBool   [out]    isNetworkWriter
      SFBool   [out]    isRtpHeaderHeard
      SFBool   [out]    isStandAlone
      SFTime   [out]    timestamp
      SFVec3f  []       bboxCenter                         0 0 0        (-∞,∞)
      SFVec3f  []       bboxSize                           -1 -1 -1     [0,∞) or −1 −1 −1
      MFString []       geoSystem                          ["GD","WE"]  (see 25.2.3)
    }

TransmitterPdu is an X3DChildNode node, and also implements the X3DBoundedObject interface. The TransmitterPdu provides detailed information about a radio transmitter. Fields in the TransmitterPdu node that were not previously described in Common DIS Fields are: radioID, radioEntityTypeKind, radioEntityTypeDomain, radioEntityTypeCountry, radioEntityTypeCategory, radioEntityTypeNomenclature, radioEntityTypeNomenclatureVersion, transmitState, inputSource, antennaLocation, antennaPatternType, antennaPatternLength, frequency, transmitFrequencyBandwidth, power, modulationTypeSpreadSpectrum, modulationTypeMajor, modulationTypeDetail, modulationTypeSystem, lengthOfModulationParameters, cryptoSystem, cryptoKeyID, relativeAntennaLocation, and whichGeometry.

The radioID field identifies a particular radio within a given entity ( entityID). The radioID (16-bit unsigned integer) is assigned sequentially, starting with 1. The combination of Entity ID and Radio ID uniquely identify a radio within a simulation exercise.

The radio entity type is described by a combination of fields: radioEntityTypeKind, radioEntityTypeDomain, radioEntityTypeCountry, radioEntityTypeCategory, radioEntityTypeNomenclatureVersion, and radioEntityTypeNomenclature. The radioEntityTypeKind is an 8-bit enumeration ( e.g., value of 7 indicates Entity Kind of "Radio"). The radioEntityTypeDomain field (8-bit enumeration) designates the domain of operation of the radio enumerated value:

> 0 = other;
> 1 = land;
> 2 = air;
> 3 = surface;
> 4 = subsurface;
> 5 = space.

The radioEntityTypeCountry field (16-bit enumeration) identifies the country to which the design of the radio entity is attributed SISO (see [IEEE1278] and [SISO]).

The radioEntityTypeCategory field (8-bit enumeration) specifies the main category describing the radio entity. The radioEntityTypeNomenclature (16-bit enumeration) specifies the nomenclature for a particular communications device. Nomenclatures are a combination of letters and/or numbers arranged in a specific sequence to provide a short method of identification. The radioEntityTypeNomenclatureVersion field designates the specific modification or individual unit type of a series and/or family of equipment.

The transmitterState field (8-bit enumeration) indicates the operational state of the transmitter entity enumerated value:

> 0 = off,
> 1 = on but not transmitting, or
> 2 = on and transmitting.

The inputSource (8-bit enumeration) specifies which position or data port in the entity utilizing the radio is providing the input audio or data being transmitted enumerated value:

> 0 = other,
> 1 = pilot,
> 2 = copilot,
> 3 = first officer,
> 4 = driver,
> 5 = loader,
> 6 = gunner,
> 7 = commander,
> 8 = digital data device, or
> 9 = intercom.

The antennaLocation field provides the location of the transmitter antenna in the DIS coordinate system.

NOTE IEEE 1278 (see [IEEE1278]) allocates 64-bit floating point values for the components of the antenna location vector, whereas it is represented here as SFVec3f for maximum interoperability with X3D.

The relativeAntennaLocation field provides an offset from the location of the transmitter entity to simulate placement of antennas some distance from the transmitter equipment.

The antennaPatternType field (16-bit enumeration) indicates the type of representation for the radiation pattern from the antenna enumerated value:

> 0 = omnidirectional;
> 1 = beam;
> 2 = spherical harmonic.

The value of this field determines the interpretation of the Antenna Pattern Parameter field of the DIS Transmitter PDU. The antennaPatternLength field (16-bit unsigned integer) specifies the length of the Antenna Pattern Parameters field in octets (value is a multiple of 8).

The frequency field specifies the center frequency (in Hertz) being used by the radio for transmission. Note that IEEE 1278 allocates a 64-bit unsigned integer to represent frequency values, whereas it is limited to SFInt32 in X3D. The transmitFrequencyBandwidth (32-bit floating point) identifies the bandpass of the transmitting radio entity. The power field (32-bit floating point) provides the average power (in units of dBm) of the radio entity transmission.

Information about the type of modulation used for radio transmission is represented in the Transmitter PDU by several fields. These fields identify the signal parameters that are used to determine whether two radios may interoperate. The modulationTypeSpreadSpectrum field indicates the spread spectrum technique or combination of techniques in use enumerated value:

> 0 = frequency hopping;
> 1 = pseudo-noise;
> 2 = time hopping;
> 3-15 are to be determined.

The modulationTypeMajor (16-bit enumeration) provides the major classification of the modulation type enumerated value:

> 0 = other;
> 1 = amplitude;
> 2 = amplitude and angle;
> 3 = angle;
> 4 = combination;
> 5 = pulse;
> 6 = unmodulated.

The modulationTypeDetail field (16-bit enumerations) contains detailed information depending on the Major Modulation Type ( modulationTypeMajor). The modulationTypeSystem field (16-bit enumeration) specifies the interpretation of the modulation parameter field(s) in the Transmitter PDU (enumerated value):

> 0 = other;
> 1 = generic;
> 2 = HQ;
> 3 = HQII;
> 4 = HQIIA;
> 5 = SINCGARS;
> 6 = CCTT SINCGARS.

The cryptoSystem field (16-bit enumeration) identifies the crypto equipment used enumerated value:

> 0 = other;
> 1 = KY-28;
> 2 = KY-58;
> 3 = Narrow Spectrum Secure Voice (NSVE);
> 4 = Wide Spectrum Secure Voice (WSVE);
> 5 = SINCGARS ICOM.

The cryptoKeyID field (16-bit unsigned integer) indicates whether the crypto equipment is in the baseband encryption mode or the diphase encryption mode (high order bit of the 16-bit field) and provides the key identifier (lower order 15 bits). If the key identifiers of the transmitter and receiver match, they are considered to be using the same encryption key (note that this is not an actual crypto key).

The whichGeometry field indicates to the rendering software what geometry to draw for the TransmitterPdu node: −1 for no geometry; 0 for text trace; 1 for default geometry for this node. Additional alternative geometry modes may optionally be supported by X3D browsers. Lack of support for higher modes reverts to whichGeometry value of 1.

The bboxCenter and bboxSize fields (of the X3DBoundedObject interface) specify the center and size, respectively, of a cube bounding the display geometry (if any) for this node.

# 28.4 Support levels

The DIS component provides two levels of support as specified in Table 28.2.

Table 28.2 — DIS component support levels

Level | Prerequisites | Nodes/Features | Support
--- | --- | --- | ---
1 | Core 1 Time 1 Grouping 3 Networking 3 Rendering 1 Shape 1 Geometry3D 1 Interpolator 1 Point device sensor 1 Navigation 1 |  |
|  | EspduTransform | All fields fully supported.
|  | ReceiverPDU | All fields fully supported.
|  | SignalPDU | All fields fully supported.
|  | TransmitterPDU | All fields fully supported.
2 | Core 1 Time 1 Grouping 3 Networking 3 Rendering 1 Shape 1 Geometry3D 1 Interpolator 1 Point device sensor 1 Navigation 1 |  |
|  | All Level 1 DIS nodes. | All fields fully supported.
|  | DISEntityManager | All fields fully supported.
|  | DISEntityTypeMapping | All fields fully supported.