From 4a5d19a4505d8173e4d220872f34c6538dd9236b Mon Sep 17 00:00:00 2001
From: Dan Jones <danjon@noc.ac.uk>
Date: Thu, 12 Sep 2024 13:07:06 +0100
Subject: [PATCH] refactor: new waypoints message

---
 ...int_status.json => waypoints_geojson.json} |  17 +-
 examples/mas-dt/waypoints_props.json          |  25 +
 formats/payload.py                            |   4 +-
 formats/platform_status.py                    |  39 +-
 formats/{waypoint_status.py => waypoints.py}  | 107 ++-
 generate_schema_config.py                     |   4 +-
 project/soar/swagger.json                     | 608 ++++++------------
 7 files changed, 319 insertions(+), 485 deletions(-)
 rename examples/mas-dt/{waypoint_status.json => waypoints_geojson.json} (63%)
 create mode 100644 examples/mas-dt/waypoints_props.json
 rename formats/{waypoint_status.py => waypoints.py} (50%)

diff --git a/examples/mas-dt/waypoint_status.json b/examples/mas-dt/waypoints_geojson.json
similarity index 63%
rename from examples/mas-dt/waypoint_status.json
rename to examples/mas-dt/waypoints_geojson.json
index 3652914..8770e4a 100644
--- a/examples/mas-dt/waypoint_status.json
+++ b/examples/mas-dt/waypoints_geojson.json
@@ -4,21 +4,20 @@
         "timestamp": "2024-09-05T00:00:00Z",
         "version": "v2.0.0-beta.1",
         "source": "noc-sfmc",
-        "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.platform_status",
+        "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.waypoints",
         "delivery_type": "publish",
         "encoded": false
     },
     "payload":{
-        "message_type": "waypoint_status",
+        "message_type": "waypoints",
         "platform_ID": "unit_xxx",
         "platform_timestamp": "2024-09-05T00:00:00Z",
         "status_source": "simulated",
-        "autonomy_engine_plan_ID": 1,
-        "mission_plan_ID": 1,
-        "mission_track_ID": 4,
-        "waypoint": {
-            "type": "Point",
-            "coordinates": [-10.122, 78.2, 50.0, 20.0]
-        }
+        "waypoints": [
+            {
+                "type": "Point",
+                "coordinates": [-10.122, 78.2, 50.0, 20.0]
+            }
+        ]
     }
 }
diff --git a/examples/mas-dt/waypoints_props.json b/examples/mas-dt/waypoints_props.json
new file mode 100644
index 0000000..a542fd2
--- /dev/null
+++ b/examples/mas-dt/waypoints_props.json
@@ -0,0 +1,25 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2024-09-05T00:00:00Z",
+        "version": "v2.0.0-beta.1",
+        "source": "noc-sfmc",
+        "destination": "mas-dt.noc.slocum.unit_xxx.from_platform.waypoints",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "waypoints",
+        "platform_ID": "unit_xxx",
+        "platform_timestamp": "2024-09-05T00:00:00Z",
+        "status_source": "simulated",
+        "waypoints": [
+            {
+                "latitude": 78.2,
+                "longitude": -10.122,
+                "depth": 50.0,
+                "altitude": 20.0
+            }
+        ]
+    }
+}
diff --git a/formats/payload.py b/formats/payload.py
index c1f85dc..ac8f87c 100644
--- a/formats/payload.py
+++ b/formats/payload.py
@@ -16,7 +16,7 @@ payload_schema = {
             "acknowledgement": "#/components/schemas/acknowledgement",
             "survey": "#/components/schemas/survey",
             "survey_encoded": "#/components/schemas/survey_encoded",
-            "waypoint_status": "#/components/schemas/waypoint_status",
+            "waypoints": "#/components/schemas/waypoints",
         },
     },
     "oneOf": [
@@ -32,6 +32,6 @@ payload_schema = {
         {"$ref": "#/components/schemas/platform_status_encoded"},
         {"$ref": "#/components/schemas/survey"},
         {"$ref": "#/components/schemas/survey_encoded"},
-        {"$ref": "#/components/schemas/waypoint_status"},
+        {"$ref": "#/components/schemas/waypoints"},
     ],
 }
diff --git a/formats/platform_status.py b/formats/platform_status.py
index 4a512cc..3be198f 100644
--- a/formats/platform_status.py
+++ b/formats/platform_status.py
@@ -28,11 +28,30 @@ sensor_schema = {
 platform_status_core_fields_schema = {
     "type": "object",
     "properties": {
+    },
+}
+
+platform_status_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "platform_status",
+            "enum": ["platform_status"],
+        },
         "platform_ID": {
             "type": "string",
             "description": "Unique identifier for this platform",
             "example": "reav-x-1",
         },
+        "status_source": {
+            "type": "string",
+            "enum": ["usbl", "onboard_platform", "simulated"],
+            "description": "Indicate if this status message is from the"
+            + " platform or USBL",
+            "example": "usbl",
+        },
         "transmission_mode": {
             "type": "string",
             "enum": ["acoustics", "iridium", "wifi", "starlink"],
@@ -159,26 +178,6 @@ platform_status_core_fields_schema = {
         },
         "sensor_config": sensor_schema,
     },
-}
-
-platform_status_schema = {
-    "type": "object",
-    "properties": {
-        "message_type": {
-            "type": "string",
-            "description": "Type of message",
-            "example": "platform_status",
-            "enum": ["platform_status"],
-        },
-        "status_source": {
-            "type": "string",
-            "enum": ["usbl", "onboard_platform", "simulated"],
-            "description": "Indicate if this status message is from the"
-            + " platform or USBL",
-            "example": "usbl",
-        },
-    },
-    "allOf": [platform_status_core_fields_schema],
     "oneOf": [
         {
             "type": "object",
diff --git a/formats/waypoint_status.py b/formats/waypoints.py
similarity index 50%
rename from formats/waypoint_status.py
rename to formats/waypoints.py
index 00a91b2..feea7f7 100644
--- a/formats/waypoint_status.py
+++ b/formats/waypoints.py
@@ -1,37 +1,20 @@
-from formats.platform_status import platform_status_core_fields_schema
+"""
+Temporary message definition to handle the MAS-DT dry-run mode 
 
-waypoint_status_schema = {
+In dry-run the SFMC adapter will receive misson_plan messages from ORI
+These messages will be parsed and compiled into a goto file which will
+not be sent on to the glider 
+
+To confirm the message flow is working the SFMC will instead publish 
+a waypoints message back to the backbone which C2 can receive and 
+process - adding simulated waypoints to C2 positions 
+"""
+
+waypoint_schema = {
     "type": "object",
-    "properties": {
-        "message_type": {
-            "type": "string",
-            "description": "Type of message",
-            "example": "waypoint_status",
-            "enum": ["waypoint_status"],
-        },
-        "status_source": {
-            "type": "string",
-            "enum": ["onboard_platform", "simulated", "autonomy"],
-            "description": "Indicate if this status message is from the"
-            + " platform or USBL",
-            "example": "usbl",
-        },
-    },
-    "allOf": [platform_status_core_fields_schema],
     "oneOf": [
         {
-            "type": "object",
-            "properties": {
-                "position": {
-                    "$ref": "https://geojson.org/schema/Point.json",
-                },
-                "waypoint": {
-                    "$ref": "https://geojson.org/schema/Point.json",
-                },
-            },
-            "required": [
-                "waypoint",
-            ],
+            "$ref": "https://geojson.org/schema/Point.json",
         },
         {
             "type": "object",
@@ -61,42 +44,52 @@ waypoint_status_schema = {
                     "description": "Target altitude in metres",
                     "example": 20.0,
                 },
-                "waypoint_latitude": {
-                    "type": "number",
-                    "format": "float",
-                    "description": "Latitude (Y-coordinate) in decimal degrees.",
-                    "example": 178.2,
-                },
-                "waypoint_longitude": {
-                    "type": "number",
-                    "format": "float",
-                    "description": "Longitude (X-coordinate) in decimal degrees.",
-                    "example": -10.122,
-                },
-                "waypoint_depth": {
-                    "type": "number",
-                    "format": "float",
-                    "description": "Target depth in metres",
-                    "example": 50.0,
-                    "default": 0.0,
-                },
-                "waypoint_altitude": {
-                    "type": "number",
-                    "format": "float",
-                    "description": "Target altitude in metres",
-                    "example": 20.0,
-                },
             },
             "required": [
-                "waypoint_latitude",
-                "waypoint_longitude",
+                "latitude",
+                "longitude",
             ],
         },
     ],
+}
+
+waypoints_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "waypoints",
+            "enum": ["waypoints"],
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "status_source": {
+            "type": "string",
+            "enum": ["onboard_platform", "simulated", "autonomy"],
+            "description": "Indicate if this status message is from the"
+            + " platform or USBL",
+            "example": "usbl",
+        },
+        "platform_timestamp": {
+            "type": "string",
+            "format": "date-time",
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+        },
+        "waypoints": {
+            "type": "array", 
+            "items": waypoint_schema,
+        }
+    },
     "required": [
         "message_type",
         "platform_ID",
         "status_source",
         "platform_timestamp",
+        "waypoints",
     ],
 }
diff --git a/generate_schema_config.py b/generate_schema_config.py
index df97733..2ff507a 100644
--- a/generate_schema_config.py
+++ b/generate_schema_config.py
@@ -7,7 +7,7 @@ from formats.observation_encoded import observation_encoded_schema
 from formats.payload import payload_schema
 from formats.planning_configuration import planning_configuration_schema
 from formats.platform_status import platform_status_schema
-from formats.waypoint_status import waypoint_status_schema
+from formats.waypoints import waypoints_schema
 from formats.platform_status_encoded import platform_status_encoded_schema
 from formats.survey import survey_schema
 from formats.survey_encoded import survey_encoded_schema
@@ -75,7 +75,7 @@ def get_swagger_config(reload=False):
                 "alert": alert_schema,
                 "instruction_set": instruction_set_schema,
                 "config_file": config_file_schema,
-                "waypoint_status": waypoint_status_schema,
+                "waypoints": waypoints_schema,
             }
         },
     }
diff --git a/project/soar/swagger.json b/project/soar/swagger.json
index c9def12..0abe717 100644
--- a/project/soar/swagger.json
+++ b/project/soar/swagger.json
@@ -1821,7 +1821,7 @@
             "platform_status_encoded": "#/components/schemas/platform_status_encoded",
             "survey": "#/components/schemas/survey",
             "survey_encoded": "#/components/schemas/survey_encoded",
-            "waypoint_status": "#/components/schemas/waypoint_status"
+            "waypoints": "#/components/schemas/waypoints"
           },
           "propertyName": "message_type"
         },
@@ -1863,7 +1863,7 @@
             "$ref": "#/components/schemas/survey_encoded"
           },
           {
-            "$ref": "#/components/schemas/waypoint_status"
+            "$ref": "#/components/schemas/waypoints"
           }
         ]
       },
@@ -2211,163 +2211,6 @@
         "type": "object"
       },
       "platform_status": {
-        "allOf": [
-          {
-            "properties": {
-              "autonomy_engine_plan_ID": {
-                "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
-                "example": 1,
-                "type": "integer"
-              },
-              "battery_output": {
-                "description": "Battery output in kW",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "battery_remaining_capacity": {
-                "description": "Battery remaining % provided by respective C2",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "endurance": {
-                "description": "Estimate of hours of operation remaining based on present output or performance",
-                "example": 7.4,
-                "format": "float",
-                "type": "number"
-              },
-              "fuel_remaining_capacity": {
-                "description": "Percentage remaining capacity",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "fuel_volume": {
-                "description": "Litres of liquid fuel",
-                "example": 12.5,
-                "format": "float",
-                "type": "number"
-              },
-              "heading": {
-                "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "health_status": {
-                "description": "Health status where 0 is OK, 1 is platform has an ERROR",
-                "example": false,
-                "type": "boolean"
-              },
-              "localisation_east_error": {
-                "description": "Difference in EAST between deadreckoningand USBL update.",
-                "example": 0.000129,
-                "format": "float",
-                "type": "number"
-              },
-              "localisation_north_error": {
-                "description": "Difference in NORTH between deadreckoning and USBL update.",
-                "example": 0.000129,
-                "format": "float",
-                "type": "number"
-              },
-              "mission_plan_ID": {
-                "description": "Mission plan ID according to platform-C2 system",
-                "example": 1,
-                "type": "integer"
-              },
-              "mission_track_ID": {
-                "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)",
-                "example": 4,
-                "type": "integer"
-              },
-              "platform_ID": {
-                "description": "Unique identifier for this platform",
-                "example": "reav-x-1",
-                "type": "string"
-              },
-              "platform_state": {
-                "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.",
-                "example": "ABORT",
-                "type": "string"
-              },
-              "platform_timestamp": {
-                "description": "Timestamp for onboard platform status message",
-                "example": "2022-12-21T00:00:00Z",
-                "format": "date-time",
-                "type": "string"
-              },
-              "range_to_go": {
-                "description": "Estimated distance to reach next waypoint",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "sensor_config": {
-                "description": "Scanning sensor on platform available to be controlled by  the Autonomy Engine",
-                "properties": {
-                  "additional_data": {
-                    "description": "Any addition fields/data to be added here",
-                    "example": {
-                      "payload": [
-                        1.2,
-                        434
-                      ]
-                    },
-                    "type": "object"
-                  },
-                  "sensor_on": {
-                    "description": "Sensor switched on (true) or off (false)",
-                    "example": true,
-                    "type": "boolean"
-                  },
-                  "sensor_serial": {
-                    "description": "serial number of sensor",
-                    "example": "mbes-002a",
-                    "type": "string"
-                  }
-                },
-                "type": "object"
-              },
-              "speed_over_ground": {
-                "description": "Speed over ground",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "thrust_applied": {
-                "description": "Thrust applied",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "transmission_mode": {
-                "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)",
-                "enum": [
-                  "acoustics",
-                  "iridium",
-                  "wifi",
-                  "starlink"
-                ],
-                "example": "wifi",
-                "type": "string"
-              },
-              "usbl_fix_seconds_ago": {
-                "description": "USBL Fix received x second ago.",
-                "example": 10.0,
-                "format": "float",
-                "type": "number"
-              },
-              "water_current_velocity": {
-                "description": "Water current magnitude and direction",
-                "example": "124.3NE",
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        ],
         "oneOf": [
           {
             "properties": {
@@ -2463,6 +2306,64 @@
           }
         ],
         "properties": {
+          "autonomy_engine_plan_ID": {
+            "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
+            "example": 1,
+            "type": "integer"
+          },
+          "battery_output": {
+            "description": "Battery output in kW",
+            "example": 80.2,
+            "format": "float",
+            "type": "number"
+          },
+          "battery_remaining_capacity": {
+            "description": "Battery remaining % provided by respective C2",
+            "example": 80.2,
+            "format": "float",
+            "type": "number"
+          },
+          "endurance": {
+            "description": "Estimate of hours of operation remaining based on present output or performance",
+            "example": 7.4,
+            "format": "float",
+            "type": "number"
+          },
+          "fuel_remaining_capacity": {
+            "description": "Percentage remaining capacity",
+            "example": 80.2,
+            "format": "float",
+            "type": "number"
+          },
+          "fuel_volume": {
+            "description": "Litres of liquid fuel",
+            "example": 12.5,
+            "format": "float",
+            "type": "number"
+          },
+          "heading": {
+            "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "health_status": {
+            "description": "Health status where 0 is OK, 1 is platform has an ERROR",
+            "example": false,
+            "type": "boolean"
+          },
+          "localisation_east_error": {
+            "description": "Difference in EAST between deadreckoningand USBL update.",
+            "example": 0.000129,
+            "format": "float",
+            "type": "number"
+          },
+          "localisation_north_error": {
+            "description": "Difference in NORTH between deadreckoning and USBL update.",
+            "example": 0.000129,
+            "format": "float",
+            "type": "number"
+          },
           "message_type": {
             "description": "Type of message",
             "enum": [
@@ -2471,6 +2372,70 @@
             "example": "platform_status",
             "type": "string"
           },
+          "mission_plan_ID": {
+            "description": "Mission plan ID according to platform-C2 system",
+            "example": 1,
+            "type": "integer"
+          },
+          "mission_track_ID": {
+            "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)",
+            "example": 4,
+            "type": "integer"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "platform_state": {
+            "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.",
+            "example": "ABORT",
+            "type": "string"
+          },
+          "platform_timestamp": {
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+            "format": "date-time",
+            "type": "string"
+          },
+          "range_to_go": {
+            "description": "Estimated distance to reach next waypoint",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "sensor_config": {
+            "description": "Scanning sensor on platform available to be controlled by  the Autonomy Engine",
+            "properties": {
+              "additional_data": {
+                "description": "Any addition fields/data to be added here",
+                "example": {
+                  "payload": [
+                    1.2,
+                    434
+                  ]
+                },
+                "type": "object"
+              },
+              "sensor_on": {
+                "description": "Sensor switched on (true) or off (false)",
+                "example": true,
+                "type": "boolean"
+              },
+              "sensor_serial": {
+                "description": "serial number of sensor",
+                "example": "mbes-002a",
+                "type": "string"
+              }
+            },
+            "type": "object"
+          },
+          "speed_over_ground": {
+            "description": "Speed over ground",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
           "status_source": {
             "description": "Indicate if this status message is from the platform or USBL",
             "enum": [
@@ -2480,6 +2445,34 @@
             ],
             "example": "usbl",
             "type": "string"
+          },
+          "thrust_applied": {
+            "description": "Thrust applied",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "transmission_mode": {
+            "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)",
+            "enum": [
+              "acoustics",
+              "iridium",
+              "wifi",
+              "starlink"
+            ],
+            "example": "wifi",
+            "type": "string"
+          },
+          "usbl_fix_seconds_ago": {
+            "description": "USBL Fix received x second ago.",
+            "example": 10.0,
+            "format": "float",
+            "type": "number"
+          },
+          "water_current_velocity": {
+            "description": "Water current magnitude and direction",
+            "example": "124.3NE",
+            "type": "string"
           }
         },
         "required": [
@@ -2660,246 +2653,25 @@
         ],
         "type": "object"
       },
-      "waypoint_status": {
-        "allOf": [
-          {
-            "properties": {
-              "autonomy_engine_plan_ID": {
-                "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
-                "example": 1,
-                "type": "integer"
-              },
-              "battery_output": {
-                "description": "Battery output in kW",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "battery_remaining_capacity": {
-                "description": "Battery remaining % provided by respective C2",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "endurance": {
-                "description": "Estimate of hours of operation remaining based on present output or performance",
-                "example": 7.4,
-                "format": "float",
-                "type": "number"
-              },
-              "fuel_remaining_capacity": {
-                "description": "Percentage remaining capacity",
-                "example": 80.2,
-                "format": "float",
-                "type": "number"
-              },
-              "fuel_volume": {
-                "description": "Litres of liquid fuel",
-                "example": 12.5,
-                "format": "float",
-                "type": "number"
-              },
-              "heading": {
-                "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "health_status": {
-                "description": "Health status where 0 is OK, 1 is platform has an ERROR",
-                "example": false,
-                "type": "boolean"
-              },
-              "localisation_east_error": {
-                "description": "Difference in EAST between deadreckoningand USBL update.",
-                "example": 0.000129,
-                "format": "float",
-                "type": "number"
-              },
-              "localisation_north_error": {
-                "description": "Difference in NORTH between deadreckoning and USBL update.",
-                "example": 0.000129,
-                "format": "float",
-                "type": "number"
-              },
-              "mission_plan_ID": {
-                "description": "Mission plan ID according to platform-C2 system",
-                "example": 1,
-                "type": "integer"
-              },
-              "mission_track_ID": {
-                "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)",
-                "example": 4,
-                "type": "integer"
-              },
-              "platform_ID": {
-                "description": "Unique identifier for this platform",
-                "example": "reav-x-1",
-                "type": "string"
-              },
-              "platform_state": {
-                "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.",
-                "example": "ABORT",
-                "type": "string"
-              },
-              "platform_timestamp": {
-                "description": "Timestamp for onboard platform status message",
-                "example": "2022-12-21T00:00:00Z",
-                "format": "date-time",
-                "type": "string"
-              },
-              "range_to_go": {
-                "description": "Estimated distance to reach next waypoint",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "sensor_config": {
-                "description": "Scanning sensor on platform available to be controlled by  the Autonomy Engine",
-                "properties": {
-                  "additional_data": {
-                    "description": "Any addition fields/data to be added here",
-                    "example": {
-                      "payload": [
-                        1.2,
-                        434
-                      ]
-                    },
-                    "type": "object"
-                  },
-                  "sensor_on": {
-                    "description": "Sensor switched on (true) or off (false)",
-                    "example": true,
-                    "type": "boolean"
-                  },
-                  "sensor_serial": {
-                    "description": "serial number of sensor",
-                    "example": "mbes-002a",
-                    "type": "string"
-                  }
-                },
-                "type": "object"
-              },
-              "speed_over_ground": {
-                "description": "Speed over ground",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "thrust_applied": {
-                "description": "Thrust applied",
-                "example": 124.3,
-                "format": "float",
-                "type": "number"
-              },
-              "transmission_mode": {
-                "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)",
-                "enum": [
-                  "acoustics",
-                  "iridium",
-                  "wifi",
-                  "starlink"
-                ],
-                "example": "wifi",
-                "type": "string"
-              },
-              "usbl_fix_seconds_ago": {
-                "description": "USBL Fix received x second ago.",
-                "example": 10.0,
-                "format": "float",
-                "type": "number"
-              },
-              "water_current_velocity": {
-                "description": "Water current magnitude and direction",
-                "example": "124.3NE",
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        ],
-        "oneOf": [
-          {
-            "properties": {
-              "position": {
-                "$ref": "#/components/schemas/geojson.org.schema.Point.json"
-              },
-              "waypoint": {
-                "$ref": "#/components/schemas/geojson.org.schema.Point.json"
-              }
-            },
-            "required": [
-              "waypoint"
-            ],
-            "type": "object"
-          },
-          {
-            "properties": {
-              "altitude": {
-                "description": "Target altitude in metres",
-                "example": 20.0,
-                "format": "float",
-                "type": "number"
-              },
-              "depth": {
-                "default": 0.0,
-                "description": "Target depth in metres",
-                "example": 50.0,
-                "format": "float",
-                "type": "number"
-              },
-              "latitude": {
-                "description": "Latitude (Y-coordinate) in decimal degrees.",
-                "example": 178.2,
-                "format": "float",
-                "type": "number"
-              },
-              "longitude": {
-                "description": "Longitude (X-coordinate) in decimal degrees.",
-                "example": -10.122,
-                "format": "float",
-                "type": "number"
-              },
-              "waypoint_altitude": {
-                "description": "Target altitude in metres",
-                "example": 20.0,
-                "format": "float",
-                "type": "number"
-              },
-              "waypoint_depth": {
-                "default": 0.0,
-                "description": "Target depth in metres",
-                "example": 50.0,
-                "format": "float",
-                "type": "number"
-              },
-              "waypoint_latitude": {
-                "description": "Latitude (Y-coordinate) in decimal degrees.",
-                "example": 178.2,
-                "format": "float",
-                "type": "number"
-              },
-              "waypoint_longitude": {
-                "description": "Longitude (X-coordinate) in decimal degrees.",
-                "example": -10.122,
-                "format": "float",
-                "type": "number"
-              }
-            },
-            "required": [
-              "waypoint_latitude",
-              "waypoint_longitude"
-            ],
-            "type": "object"
-          }
-        ],
+      "waypoints": {
         "properties": {
           "message_type": {
             "description": "Type of message",
             "enum": [
-              "waypoint_status"
+              "waypoints"
             ],
-            "example": "waypoint_status",
+            "example": "waypoints",
+            "type": "string"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "platform_timestamp": {
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+            "format": "date-time",
             "type": "string"
           },
           "status_source": {
@@ -2911,13 +2683,59 @@
             ],
             "example": "usbl",
             "type": "string"
+          },
+          "waypoints": {
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/geojson.org.schema.Point.json"
+                },
+                {
+                  "properties": {
+                    "altitude": {
+                      "description": "Target altitude in metres",
+                      "example": 20.0,
+                      "format": "float",
+                      "type": "number"
+                    },
+                    "depth": {
+                      "default": 0.0,
+                      "description": "Target depth in metres",
+                      "example": 50.0,
+                      "format": "float",
+                      "type": "number"
+                    },
+                    "latitude": {
+                      "description": "Latitude (Y-coordinate) in decimal degrees.",
+                      "example": 178.2,
+                      "format": "float",
+                      "type": "number"
+                    },
+                    "longitude": {
+                      "description": "Longitude (X-coordinate) in decimal degrees.",
+                      "example": -10.122,
+                      "format": "float",
+                      "type": "number"
+                    }
+                  },
+                  "required": [
+                    "latitude",
+                    "longitude"
+                  ],
+                  "type": "object"
+                }
+              ],
+              "type": "object"
+            },
+            "type": "array"
           }
         },
         "required": [
           "message_type",
           "platform_ID",
           "status_source",
-          "platform_timestamp"
+          "platform_timestamp",
+          "waypoints"
         ],
         "type": "object"
       }
-- 
GitLab