diff --git a/.gitignore b/.gitignore index cdba2306fb0549315f9cb347d37452f713a71b85..70a9e9cc919d84f9422b05b697a507627e6ee260 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ /specifications/RPR*.xml /specifications/SISO*.xml /specifications/archive +!/specifications/2019-SIW-Presentation-039_CompressedDis.pdf +!/specifications/IeeeDisPduColorFigures.pdf \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..2360059b5ae9031e38dc2db7ec3dbfa41958a74f --- /dev/null +++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduReceiver.java @@ -0,0 +1,94 @@ +package MV3500Cohort2019JulySeptember.homework4.McCann; + +import java.net.*; +import java.io.*; + +import edu.nps.moves.dis7.*; +import edu.nps.moves.dis7.enumerations.*; +import edu.nps.moves.dis7.util.*; +import java.util.ArrayList; + +public class McCannPduReceiver +{ + public static final int DEFAULT_MULTICAST_PORT = McCannPduSender.DEFAULT_MULTICAST_PORT; + public static final String DEFAULT_MULTICAST_ADDRESS = McCannPduSender.DEFAULT_MULTICAST_ADDRESS; + public static final boolean USE_FAST_ESPDU = false; + + public static void main(String args[]) + { + PduFactory factory; + MulticastSocket socket; + InetAddress address; + DatagramPacket packet; + + try { + System.out.println("McCann.AllPduReceiver started..."); + if (args.length == 2) { + socket = new MulticastSocket(Integer.parseInt(args[0])); + address = InetAddress.getByName(args[1]); + } + else { + System.out.println("Usage: AllPduReceiver <port> <multicast group>"); + System.out.println("Default: AllPduReceiver " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS); + socket = new MulticastSocket(DEFAULT_MULTICAST_PORT); + address = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS); + } + socket.joinGroup(address); + + factory = new PduFactory(); + + while (true) // Loop infinitely, receiving datagrams + { + byte buffer[] = new byte[1500]; // typical MTU size + + packet = new DatagramPacket(buffer, buffer.length); // reset + + socket.receive(packet); + + Pdu pdu = factory.createPdu(packet.getData()); + if (pdu != null) + { + DISPDUType currentPduType = pdu.getPduType(); //short currentPduType = pdu.getPduType(); + String currentPduTypeName = pdu.getClass().getName(); + DISProtocolFamily currentProtocolFamilyID = pdu.getProtocolFamily(); //short currentProtocolFamilyID = pdu.getProtocolFamily(); + String currentPduFamilyName = pdu.getClass().getSuperclass().getSimpleName(); + + StringBuilder message = new StringBuilder(); + message.append("received DIS PDU "); + if (currentPduType.getValue() < 10) + message.append(" "); // column spacing + message.append(currentPduType.getValue()); + String currentPduTypePadded = String.format("%-34s", currentPduType); // - indicates right padding of whitespace + message.append(" " ).append(currentPduTypePadded); + String currentPduTypeNamePadded = String.format("%-49s", currentPduTypeName); // - indicates right padding of whitespace + message.append(" of type ").append(currentPduTypeNamePadded); // package.class name + message.append(" (protocolFamily ").append(currentProtocolFamilyID); + // message.append(" ").append(currentPduFamilyName); // class name is also available + message.append(")"); + System.out.println(message.toString()); + + switch (currentPduType) // using enumeration values from edu.​nps.​moves.​dis7.​enumerations.​DISPDUType + { + case COMMENT: + CommentPdu commentPdu = (CommentPdu)pdu; // cast to precise type + ArrayList<VariableDatum> payloadList = (ArrayList)commentPdu.getVariableDatums(); + for (VariableDatum variableDatum : payloadList) + { + String nextComment = new String(variableDatum.getVariableDatumValue()); // convert byte[] to String + System.out.println("\"" + nextComment + "\""); + } + } + } + else + System.out.println("received packet but pdu is null, packet.getData().length=" + packet.getData().length + ", error..."); + } + } + catch (IOException e) { + System.out.println("Problem with DisExamplesOpenDis7.AllPduReceiver, see exception trace:"); + System.out.println(e); + } + finally { + System.out.println("DisExamplesOpenDis7.AllPduReceiver complete."); + } + } +} diff --git a/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduSender.java b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduSender.java new file mode 100755 index 0000000000000000000000000000000000000000..3585cf0cb28870d9f7ff841b314739c90c337fc5 --- /dev/null +++ b/assignments/src/MV3500Cohort2019JulySeptember/homework4/McCann/McCannPduSender.java @@ -0,0 +1,484 @@ +package MV3500Cohort2019JulySeptember.homework4.McCann; + +import java.io.*; +import java.net.*; +import java.util.*; + +import edu.nps.moves.dis7.*; +import edu.nps.moves.dis7.enumerations.*; + +/** + * This is an example that sends many/most types of PDUs. Useful for testing standards + * compliance or getting a full set of PDUs. It also writes the generated PDUs to an XML file. + * Adapted from OpenDIS library example package edu.nps.moves.examples + * + * @author DMcG + * @version $Id:$ + */ + +/** + * changed port to not conflict with Maj Furr's code or anyone else pushing DIS packages + * @author ljmm1 + */ +public class McCannPduSender +{ + /** Default multicast group address we send on. */ + public static final String DEFAULT_MULTICAST_ADDRESS = "239.1.2.3"; + + /** Default multicast port used, matches Wireshark DIS capture default */ + public static final int DEFAULT_MULTICAST_PORT = 3001; + + private int port; + InetAddress multicastAddress; + + public McCannPduSender(int port, String multicast) { + try + { + this.port = port; + multicastAddress = InetAddress.getByName(multicast); + if (!multicastAddress.isMulticastAddress()) + { + System.out.println("Not a multicast address: " + multicast); + } + } + catch (UnknownHostException e) { + System.out.println("Unable to open socket: " + e); + } + } + + public void run() + { + System.out.println("McCann.AllPduSender started..."); + try + { + System.out.println("Generate PDUs and note issues, if any..."); + List<Pdu> generatedPdusList = new ArrayList<>(); + + // Loop through all the enumerated PDU types, create a PDU for each type, + // add that PDU to generatedPdusList, and send each one + for (DISPDUType pdu : DISPDUType.values()) + { +// System.out.println("PDU " + pdu.getValue() + " " + pdu.name() + " " + pdu.getDescription()); // diagnostic + + Pdu aPdu = null; // edu.​nps.​moves7.​dis.PDU superclass for all PDUs, in preparation for custom assignment + + try { + switch (pdu) // using enumeration values from edu.​nps.​moves.​dis7.​enumerations.​DISPDUType + { + case OTHER: // 0 + System.out.println ("*** Note: DISPDUType." + pdu.name() + " not supported"); // TODO why was this received? + // nothing to send + break; + + case ENTITY_STATE: // 1 + aPdu = new EntityStatePdu(); + + EntityStatePdu espdu = (EntityStatePdu) aPdu; + EntityMarking entityMarking = new EntityMarking (); + entityMarking.setCharacters("AllPduSender".getBytes()); //entityMarking.setCharacters(Byte.valueOf("0")); // 11 characters max? + + espdu.setMarking(entityMarking); + Vector3Double espduLocation = new Vector3Double(); + espduLocation.setX(1.0); + espduLocation.setY(2.0); + espduLocation.setZ(3.0); + espdu.setEntityLocation(espduLocation); + // it is important to identify questions as you think of them + // TODO how to set azimuth, i.e. course direction over ground? + break; + + case FIRE: // 2 + aPdu = new FirePdu(); + break; + + case DETONATION: // 3 + aPdu = new DetonationPdu(); + break; + + case COLLISION: // 4 + aPdu = new CollisionPdu(); + break; + + case SERVICE_REQUEST: // 5 + aPdu = new ServiceRequestPdu(); + break; + + case RESUPPLY_OFFER: // 6 + aPdu = new ResupplyOfferPdu(); + break; + + case RESUPPLY_RECEIVED: // 7 + aPdu = new ResupplyReceivedPdu(); + break; + + case RESUPPLY_CANCEL: //8 + aPdu = new ResupplyCancelPdu(); + break; + + case REPAIR_COMPLETE: // 9 + aPdu = new RepairCompletePdu(); + break; + + case REPAIR_RESPONSE: // 10 + aPdu = new RepairResponsePdu(); + break; + + case CREATE_ENTITY: // 11 + aPdu = new CreateEntityPdu(); + break; + + case REMOVE_ENTITY: // 12 + aPdu = new RemoveEntityPdu(); + break; + + case START_RESUME: // 13 + aPdu = new StartResumePdu(); + break; + + case STOP_FREEZE: // 14 + aPdu = new StopFreezePdu(); + break; + + case ACKNOWLEDGE: // 15 + aPdu = new AcknowledgePdu(); + break; + + case ACTION_REQUEST: // 16 + aPdu = new ActionRequestPdu(); + break; + + case ACTION_RESPONSE: // 17 + aPdu = new ActionResponsePdu(); + break; + + case DATA_QUERY: // 18 + aPdu = new DataQueryPdu(); + break; + + case SET_DATA: // 19 + aPdu = new SetDataPdu(); + break; + + case DATA: // 20 + aPdu = new DataPdu(); + break; + + case EVENT_REPORT: // 21 + aPdu = new EventReportPdu(); + break; + + case ELECTROMAGNETIC_EMISSION: // 23 + aPdu = new ElectromagneticEmissionPdu(); + break; + + case DESIGNATOR: // 24 + aPdu = new DesignatorPdu(); + break; + + case TRANSMITTER: // 25 + aPdu = new TransmitterPdu(); + break; + + case SIGNAL: // 26 + aPdu = new SignalPdu(); + break; + + case RECEIVER: // 27 + aPdu = new ReceiverPdu(); + break; + + case IDENTIFICATION_FRIEND_OR_FOE: // 28 + aPdu = new IdentificationFriendOrFoePdu(); + break; + + case UNDERWATER_ACOUSTIC: // 29 + aPdu = new UnderwaterAcousticPdu(); + break; + + case SUPPLEMENTAL_EMISSION_ENTITY_STATE: // 30 + aPdu = new SupplementalEmissionEntityStatePdu(); + break; + + case INTERCOM_SIGNAL: // 31 + aPdu = new IntercomSignalPdu(); + break; + + case INTERCOM_CONTROL: // 32 + aPdu = new IntercomControlPdu(); + break; + + case AGGREGATE_STATE: // 33 + aPdu = new AggregateStatePdu(); + break; + + case ISGROUPOF: // 34 + aPdu = new IsGroupOfPdu(); + break; + + case TRANSFER_OWNERSHIP: // 35 + aPdu = new TransferOwnershipPdu(); + break; + + case ISPARTOF: // 36 + aPdu = new IsPartOfPdu(); + break; + + case MINEFIELD_STATE: // 37 + aPdu = new MinefieldStatePdu(); + break; + + case MINEFIELD_QUERY: // 38 + aPdu = new MinefieldQueryPdu(); + break; + + case MINEFIELD_DATA: // 39 + aPdu = new MinefieldDataPdu(); + break; + + case MINEFIELD_RESPONSE_NACK: // 40 + aPdu = new MinefieldResponseNACKPdu(); + break; + + case ENVIRONMENTAL_PROCESS: // 41 + aPdu = new EnvironmentalProcessPdu(); + break; + + case GRIDDED_DATA: // 42 + aPdu = new GriddedDataPdu(); + break; + + case POINT_OBJECT_STATE: // 43 + aPdu = new PointObjectStatePdu(); + break; + + case LINEAR_OBJECT_STATE: // 44 + aPdu = new LinearObjectStatePdu(); + break; + + case AREAL_OBJECT_STATE: // 45 + aPdu = new ArealObjectStatePdu(); + break; + + case TIME_SPACE_POSITION_INFORMATION: // 46 + aPdu = new TimeSpacePositionInformationPdu(); + break; + + case APPEARANCE: // 47 + aPdu = new AppearancePdu(); + break; + + case ARTICULATED_PARTS: // 48 + aPdu = new ArticulatedPartsPdu(); + break; + + case LIVE_ENTITY_FIRE: // 49 + aPdu = new LiveEntityFirePdu(); + break; + + case LIVE_ENTITY_DETONATION: // 50 + aPdu = new LiveEntityDetonationPdu(); + break; + + case CREATE_ENTITY_RELIABLE: // 51 + aPdu = new CreateEntityReliablePdu(); + break; + + case REMOVE_ENTITY_RELIABLE: // 52 + aPdu = new RemoveEntityReliablePdu(); + break; + + case START_RESUME_RELIABLE: // 53 + aPdu = new StartResumeReliablePdu(); + break; + + case STOP_FREEZE_RELIABLE: // 54 + aPdu = new StopFreezeReliablePdu(); + break; + + case ACKNOWLEDGE_RELIABLE: // 55 + aPdu = new AcknowledgeReliablePdu(); + break; + + case ACTION_REQUEST_RELIABLE: // 56 + aPdu = new ActionRequestReliablePdu(); + break; + + case ACTION_RESPONSE_RELIABLE: // 57 + aPdu = new ActionResponseReliablePdu(); + break; + + case DATA_QUERY_RELIABLE: // 58 + aPdu = new DataQueryReliablePdu(); + break; + + case SET_DATA_RELIABLE: // 59 + aPdu = new SetDataReliablePdu(); + break; + + case DATA_RELIABLE: // 60 + aPdu = new DataReliablePdu(); + break; + + case EVENT_REPORT_RELIABLE: // 61 + aPdu = new EventReportReliablePdu(); + break; + + case COMMENT_RELIABLE: // 62 + aPdu = new CommentReliablePdu(); + break; + + case RECORD_RELIABLE: // 63 + aPdu = new RecordReliablePdu(); + break; + + case SET_RECORD_RELIABLE: // 64 + aPdu = new SetRecordReliablePdu(); + break; + + case RECORD_QUERY_RELIABLE: // 65 + aPdu = new RecordQueryReliablePdu(); + break; + + case COLLISION_ELASTIC: // 66 + aPdu = new CollisionElasticPdu(); + break; + + case ENTITY_STATE_UPDATE: // 67 + aPdu = new EntityStateUpdatePdu(); + break; + + case DIRECTED_ENERGY_FIRE: // 68 + aPdu = new DirectedEnergyFirePdu(); + break; + + case ENTITY_DAMAGE_STATUS: // 69 + aPdu = new EntityDamageStatusPdu(); + break; + + case INFORMATION_OPERATIONS_ACTION: // 70 + aPdu = new InformationOperationsActionPdu(); + break; + + case INFORMATION_OPERATIONS_REPORT: // 71 + aPdu = new InformationOperationsReportPdu(); + break; + + case ATTRIBUTE: // 72 + aPdu = new AttributePdu(); + break; + + case COMMENT: + // aPdu = new CommentPdu(); // default for this switch logic + + // see Garrett Loffelman and Pete Severson's code for OpenDis version 4 example + // https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments/src/MV3500Cohort2018JulySeptember/projects/LoeffelmanSeverson + + CommentPdu newCommentPdu = new CommentPdu(); + ArrayList<VariableDatum> payloadList = new ArrayList<VariableDatum>(); + + ArrayList<String> commentsList = new ArrayList<>(); + commentsList.add("Hello CommentPDU"); + commentsList.add("Here is a new message"); + + if (!commentsList.isEmpty()) + System.out.println("Preparing CommentPDU:"); + + for (String comment : commentsList) + { + VariableDatum newVariableDatum = new VariableDatum(); + newVariableDatum.setVariableDatumValue (comment.getBytes()); // conversion + newVariableDatum.setVariableDatumLength(comment.getBytes().length * 8); // bits, not bytes, see spec and javadoc + // alternatively, you do not need to set this and the marshaller will figure it out from the byte array + // (see javadoc for VariableDatum.setVariableDatumLength()) + payloadList.add(newVariableDatum); + System.out.println(" \"" + comment + "\""); + } + newCommentPdu.setVariableDatums(payloadList); + + aPdu = newCommentPdu; // hand off for sending + break; + + default: + System.out.println("*** Warning: PDU " + pdu.getValue() + " " + pdu + " not supported, created or sent "); + + // code generation block for this class follows: +// System.out.println(" case " + pdu + ": // " + pdu.getValue()); +// System.out.println(" aPdu = new " + pdu.getDescription().replace(" ","").replace("-","").replace("/","") + +// "Pdu();"); +// System.out.println(" break;"); +// System.out.println(); + } + if (aPdu != null) + { + generatedPdusList.add(aPdu); + } + } + catch (Exception e) + { + System.out.print("Exception thrown for PDU " + pdu.getValue() + " " + pdu); + System.out.print(Arrays.toString(e.getStackTrace())); + // continue looping + } + } + // Send the PDUs we created + System.out.println("Send the " + generatedPdusList.size() + " PDUs we created..."); + + InetAddress localMulticastAddress = InetAddress.getByName(DEFAULT_MULTICAST_ADDRESS); + MulticastSocket socket = new MulticastSocket(DEFAULT_MULTICAST_PORT); + socket.joinGroup(localMulticastAddress); + + for (int idx = 0; idx < generatedPdusList.size(); idx++) + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + byte[] buffer; + + Pdu aPdu = generatedPdusList.get(idx); + try + { + aPdu.marshal(dos); + + buffer = baos.toByteArray(); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, localMulticastAddress, DEFAULT_MULTICAST_PORT); + socket.send(packet); + try { + Thread.sleep(100L); + } catch (InterruptedException ex) { + } + String currentPduTypeValuePadded = String.format("%2s", aPdu.getPduType().getValue()); + String currentPduTypePadded = String.format("%-34s", aPdu.getPduType()); // - indicates right padding of whitespace + System.out.print ("Sent DIS PDU " + currentPduTypeValuePadded + " " + currentPduTypePadded ); + System.out.println(" of type " + aPdu.getClass().getName()); + } + catch (Exception ex) { + System.out.println("Marshaling error" + ex); + } + } + // write the PDUs out to an XML file. + //PduContainer container = new PduContainer(); + //container.setPdus(generatedPdus); + //container.marshallToXml("examplePdus.xml"); + } + catch (IOException e) + { + System.out.println(e); + } + } + + public static void main(String args[]) + { + if (args.length == 2) + { + McCannPduSender sender = new McCannPduSender(Integer.parseInt(args[0]), args[1]); + sender.run(); + } + else + { + System.out.println("Usage: AllPduSender <port> <multicast group>"); + System.out.println("Default: AllPduSender " + DEFAULT_MULTICAST_PORT + " " + DEFAULT_MULTICAST_ADDRESS); + McCannPduSender sender = new McCannPduSender(DEFAULT_MULTICAST_PORT, DEFAULT_MULTICAST_ADDRESS); + sender.run(); + } + System.out.println("DisExamplesOpenDis7.AllPduSender complete."); + } +} diff --git a/assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron.pptx b/assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron__002_.pptx similarity index 91% rename from assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron.pptx rename to assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron__002_.pptx index 2d785e8eff3196cc1d41de2ccda535d61d196c18..dfaed57e27d49473b5b3ed1a86ef6c36483a66a6 100644 Binary files a/assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron.pptx and b/assignments/src/MV3500Cohort2019JulySeptember/projects/Boron_Yurkovich - UDPs for MAJ Furr/FinalProject_YurkBoron__002_.pptx differ diff --git a/examples/build.xml b/examples/build.xml index 27c9ffaf4d641e7f6032b93fe69f6f422292abda..c7c0fe5a6787667e6232c4d13a0650b2cde7edaa 100644 --- a/examples/build.xml +++ b/examples/build.xml @@ -11,6 +11,15 @@ <project name="Networked_Graphics_MV3500_examples" default="default" basedir="."> <description>Builds, tests, and runs the project Networked Graphics MV3500 examples.</description> <import file="nbproject/build-impl.xml"/> + + <target name="clean.pduLogAdditions"> + <delete verbose="true"> + <fileset dir="pduLog"> + <include name="Pdusave*.dislog"/> + <exclude name="Pdusave.dislog"/><!-- version control default example --> + </fileset> + </delete> + </target> <!-- There exist several targets which are by default empty and which can be @@ -71,11 +80,4 @@ nbproject/build-impl.xml file. --> - - <target name="view.gitlab.examples" description="view gitlab MV3500 examples in web browser (Netbeans only)"> - <echo message="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/> - <nbbrowse url="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/examples"/> - <!-- TODO implementation-independent approach if possible. other Ant approachs have to be customized for each OS --> - </target> - </project> diff --git a/examples/nbproject/configs/7e.PduListenerSaver.properties b/examples/nbproject/configs/7e.PduListenerSaver.properties new file mode 100644 index 0000000000000000000000000000000000000000..769047adbaff3f8e94b5c75b0430da146ecc5034 --- /dev/null +++ b/examples/nbproject/configs/7e.PduListenerSaver.properties @@ -0,0 +1 @@ +main.class=OpenDis7Examples.PduListenerSaver diff --git a/examples/nbproject/configs/7f.PduReaderPlayer.properties b/examples/nbproject/configs/7f.PduReaderPlayer.properties new file mode 100644 index 0000000000000000000000000000000000000000..1d36802d6f732e46863c7e2ab98a2b364d81d51b --- /dev/null +++ b/examples/nbproject/configs/7f.PduReaderPlayer.properties @@ -0,0 +1 @@ +main.class=OpenDis7Examples.PduReaderPlayer diff --git a/specifications/2019-SIW-Presentation-039_CompressedDis.pdf b/specifications/2019-SIW-Presentation-039_CompressedDis.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d455568bc395130b5bb7d61f069d97a3a2c733b6 Binary files /dev/null and b/specifications/2019-SIW-Presentation-039_CompressedDis.pdf differ diff --git a/specifications/2019-SIW-Presentation-039_CompressedDis.pptx b/specifications/2019-SIW-Presentation-039_CompressedDis.pptx new file mode 100644 index 0000000000000000000000000000000000000000..bcba8aaaeb0d1a61b346a127d755d19412b6e691 Binary files /dev/null and b/specifications/2019-SIW-Presentation-039_CompressedDis.pptx differ diff --git a/specifications/IeeeDisPduColorFigures.pdf b/specifications/IeeeDisPduColorFigures.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cc0e26046238267d8355ba34fa31225882413648 Binary files /dev/null and b/specifications/IeeeDisPduColorFigures.pdf differ diff --git a/specifications/IeeeDisPduColorFigures.pptx b/specifications/IeeeDisPduColorFigures.pptx new file mode 100644 index 0000000000000000000000000000000000000000..61b2dd13bc68022476cfb43d5269e0651729e429 Binary files /dev/null and b/specifications/IeeeDisPduColorFigures.pptx differ diff --git a/specifications/README.md b/specifications/README.md index 310c1cc9e79d4bb4fd82a5b7bae856ee51124d32..9a8b913fbcca1e6e037f61172e171b9ac231d3ec 100644 --- a/specifications/README.md +++ b/specifications/README.md @@ -8,7 +8,19 @@ space exploration and medicine.* * [Simulation Interoperabilty Standards Organization (SISO)](https://www.sisostds.org): "Simulation Interoperability and Reuse through Standards" * SISO Product Support Group (PSG): [DIS / RPR FOM PSG - Distributed Interactive Simulation / Real-time Platform Reference Federation Object Model](https://www.sisostds.org/StandardsActivities/SupportGroups/DISRPRFOMPSG.aspx) -Manual download links follow. IEEE standards must be downloaded manually while within NPS campus or firewall. +## Working-Group Resources + +**DIS/RPR FOM Product Support Group** +* "The Distributed Interactive Simulation / Real-time Platform Reference Federation Object Model (DIS / RPR FOM) Product Support Group (PSG) is a permanent support group chartered by the SISO Standards Activity Committee to support multiple DIS-related products." +* [Distributed Interactive Simulation / Real-time Platform Reference Federation Object Model (DIS / RPR FOM) Product Support Group (PSG)](https://www.sisostds.org/StandardsActivities/SupportGroups/DISRPRFOMPSG.aspx) + +* [SISO Digital Library](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) +** [DIS Introduction and Briefings](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) +** [IEEE 1278 Bibliography Material](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) +** [DIS PDU data structures](IeeeDisPduColorFigures.pdf) +** [Compressed DIS](2019-SIW-Presentation-039_CompressedDis.pdf) overview, Lance Call, Simulation Interoperability Workshop (SIW), Orlando Florida, February 2019. + +Specification download links follow. For free access, IEEE standards must be downloaded manually while within NPS campus or firewall. ## Standards Documents @@ -60,12 +72,4 @@ Guidelines are established for the verification, validation, and accreditation ( * *Abstract.* SISO-REF-010 specifies numerical values and associated definitions for fields that are identified as enumerations in SISO Standards Products and SISO-sponsored standards published by IEEE for High Level Architecture (HLA) and Distributed Interactive Simulation (DIS). Enumerations for simulations may be applied in other architectures, such as the Test and Training Enabling Architecture (TENA). -## Working Groups - -**DIS/RPR FOM Product Support Group** -* "The Distributed Interactive Simulation / Real-time Platform Reference Federation Object Model (DIS / RPR FOM) Product Support Group (PSG) is a permanent support group chartered by the SISO Standards Activity Committee to support multiple DIS-related products." -* [Distributed Interactive Simulation / Real-time Platform Reference Federation Object Model (DIS / RPR FOM) Product Support Group (PSG)](https://www.sisostds.org/StandardsActivities/SupportGroups/DISRPRFOMPSG.aspx) - -* [SISO Digital Library](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) including DIS RPRFOM Product Support Group (PSG), -** [DIS Introduction and Briefings](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) -** [IEEE 1278 Bibliography Material](https://www.sisostds.org/Default.aspx?tabid=105&EntryId=31596) +---