{
  "components":{
     "schemas":{
        "MESSAGE":{
           "description":"Full message definition with message-metadata in `header` and different message type schemas under `payload`",
           "properties":{
              "header":{
                 "$ref":"#/components/schemas/header"
              },
              "payload":{
                 "$ref":"#/components/schemas/payload"
              }
           },
           "required":[
              "header",
              "payload"
           ],
           "type":"object"
        },
        "acknowledgement":{
           "properties":{
              "approved":{
                 "description":"Human-in-the-loop approval.1 - Plan approved; 0 - Plan Rejected",
                 "type":"boolean"
              },
              "autonomy_engine_plan_ID":{
                 "description":"Mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
                 "example":1,
                 "type":"integer"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "acknowledgement"
                 ],
                 "example":"acknowledgement",
                 "type":"string"
              },
              "platform_ID":{
                 "description":"Unique identifier for this platform",
                 "example":"reav-x-1",
                 "type":"string"
              }
           },
           "required":[
              "message_type",
              "autonomy_engine_plan_ID",
              "platform_ID",
              "approved"
           ],
           "type":"object"
        },
        "header":{
           "discriminator":{
              "propertyName":"message_type"
           },
           "properties":{
              "delivery_type":{
                 "default":"publish",
                 "description":"To publish or broadcast this message.",
                 "enum":[
                    "broadcast",
                    "publish"
                 ],
                 "example":"publish",
                 "type":"string"
              },
              "destination":{
                 "description":"Publisher topic; What is the destination of this message",
                 "example":"ah1",
                 "type":"string"
              },
              "encoded":{
                 "description":"Indicate that message raw (encoded) or decoded. Options: encoded=true, decoded=false",
                 "example":false,
                 "type":"boolean"
              },
              "message_ID":{
                 "description":"An identifier for the type of message received.",
                 "example":"b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
                 "type":"string"
              },
              "source":{
                 "description":"The sender; Where is this message from",
                 "example":"autonomy_engine",
                 "type":"string"
              },
              "timestamp":{
                 "description":"Timestamp of message",
                 "example":"2022-11-16T00:00:00Z",
                 "format":"date-time",
                 "type":"string"
              },
              "version":{
                 "description":"Version of comms backbone message format protocol",
                 "example":2.0,
                 "format":"float",
                 "type":"number"
              }
           },
           "type":"object"
        },
        "mission_plan":{
           "properties":{
              "autonomy_engine_plan_ID":{
                 "description":"Unique identifier for this plangenerated by the Autonomy Engine",
                 "example":3,
                 "type":"integer"
              },
              "emergency":{
                 "default":false,
                 "description":"To indicate if this is an emergency. true = emergency and false = no emergency",
                 "example":false,
                 "type":"boolean"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "mission_plan"
                 ],
                 "example":"mission_plan",
                 "type":"string"
              },
              "plan":{
                 "items":{
                    "properties":{
                       "action":{
                          "description":"Autonomy Engine's action from `move`, `payload`, `dive`, `send_hits`, `scanline`, `scanpoint`.",
                          "example":"move",
                          "type":"string"
                       },
                       "activate_payload":{
                          "description":"To activate/deactivate sensor for Autosub Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`",
                          "example":true,
                          "type":"boolean"
                       },
                       "altitude":{
                          "description":"Altitude of next action",
                          "example":15.0,
                          "format":"float",
                          "type":"number"
                       },
                       "depth":{
                          "description":"Depth of next action",
                          "example":15.0,
                          "format":"float",
                          "type":"number"
                       },
                       "start_point_latitude":{
                          "description":"Start point, x-coordinate",
                          "example":-4.187143188645706,
                          "format":"float",
                          "type":"number"
                       },
                       "start_point_longitude":{
                          "description":"Start point, y-coordinate",
                          "example":50.37072283932642,
                          "format":"float",
                          "type":"number"
                       },
                       "target_waypoint_latitude":{
                          "description":"Target waypoint, x-coordinate",
                          "example":-4.187143188645706,
                          "format":"float",
                          "type":"number"
                       },
                       "target_waypoint_longitude":{
                          "description":"Target waypoint, y-coordinate",
                          "example":50.37072283932642,
                          "format":"float",
                          "type":"number"
                       },
                       "timeout":{
                          "description":"Timeout set to perform action",
                          "example":1800.0,
                          "format":"float",
                          "type":"number"
                       }
                    },
                    "required":[
                       "target_waypoint_latitude",
                       "target_waypoint_longitude"
                    ],
                    "type":"object"
                 },
                 "type":"array"
              },
              "platform_ID":{
                 "description":"Unique identifier for this platform",
                 "example":"reav-x-1",
                 "type":"string"
              }
           },
           "required":[
              "message_type",
              "autonomy_engine_plan_ID",
              "platform_ID",
              "plan"
           ],
           "type":"object"
        },
        "mission_plan_encoded":{
           "properties":{
              "data":{
                 "description":"encoded string. E.g. Base64 encoded",
                 "example":"SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcBAAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==",
                 "type":"string"
              },
              "file_name":{
                 "description":"Name of file",
                 "example":"ah1-0238126349247372.bin",
                 "type":"string"
              },
              "is_binary":{
                 "description":"true if the data field contains binary format data encoded as base64. false if the data field contains ascii content such as NMEA.",
                 "example":true,
                 "type":"boolean"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "mission_plan_encoded"
                 ],
                 "example":"mission_plan_encoded",
                 "type":"string"
              },
              "mime_type":{
                 "description":"MIME type",
                 "example":"application/gzip",
                 "type":"string"
              }
           },
           "required":[
              "data",
              "is_binary"
           ],
           "type":"object"
        },
        "observation":{
           "properties":{
              "additional_data":{
                 "description":"Placeholder field for any additional data",
                 "example":{
                    "sensor_payload":false
                 }
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "observation"
                 ],
                 "example":"observation",
                 "type":"string"
              },
              "platform_ID":{
                 "description":"Unique identifier for this platform",
                 "example":"reav-x-1",
                 "type":"string"
              },
              "points_of_interest":{
                 "description":"Points from features of interest identified by platform if any found.",
                 "items":{
                    "properties":{
                       "latitude":{
                          "description":"Identified x-coordinate of point of interest",
                          "example":178.2,
                          "format":"float",
                          "type":"number"
                       },
                       "longitude":{
                          "description":"Identified y-coordinate of point of interest",
                          "example":-10.122,
                          "format":"float",
                          "type":"number"
                       },
                       "quality_of_point":{
                          "description":"Quality/strength of points from features of interest identified by platform.",
                          "example":0.98,
                          "format":"float",
                          "type":"number"
                       }
                    },
                    "required":[
                       "latitude",
                       "longitude"
                    ],
                    "type":"object"
                 },
                 "type":"array"
              },
              "region_surveyed":{
                 "description":"Region surveyed by given platform. GEOJSON",
                 "example":"",
                 "nullable":true
              }
           },
           "required":[
              "message_type",
              "platform_ID"
           ],
           "type":"object"
        },
        "observation_encoded":{
           "properties":{
              "data":{
                 "description":"encoded string. E.g. Base64 encoded",
                 "example":"SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcBAAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==",
                 "type":"string"
              },
              "file_name":{
                 "description":"Name of file",
                 "example":"ah1-0238126349247372.bin",
                 "type":"string"
              },
              "is_binary":{
                 "description":"true if the data field contains binary format data encoded as base64. false if the data field contains ascii content such as NMEA.",
                 "example":true,
                 "type":"boolean"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "observation_encoded"
                 ],
                 "example":"observation_encoded",
                 "type":"string"
              },
              "mime_type":{
                 "description":"MIME type",
                 "example":"application/gzip",
                 "type":"string"
              }
           },
           "required":[
              "data",
              "is_binary"
           ],
           "type":"object"
        },
        "payload":{
           "discriminator":{
              "mapping":{
                 "acknowledgement":"#/components/schemas/acknowledgement",
                 "mission_plan":"#/components/schemas/mission_plan",
                 "mission_plan_encoded":"#/components/schemas/mission_plan_encoded",
                 "observation":"#/components/schemas/observation",
                 "observation_encoded":"#/components/schemas/observation_encoded",
                 "planning_configuration":"#/components/schemas/planning_configuration",
                 "platform_status":"#/components/schemas/platform_status",
                 "platform_status_encoded":"#/components/schemas/platform_status_encoded"
              },
              "propertyName":"message_type"
           },
           "oneOf":[
              {
                 "$ref":"#/components/schemas/acknowledgement"
              },
              {
                 "$ref":"#/components/schemas/mission_plan"
              },
              {
                 "$ref":"#/components/schemas/mission_plan_encoded"
              },
              {
                 "$ref":"#/components/schemas/observation"
              },
              {
                 "$ref":"#/components/schemas/observation_encoded"
              },
              {
                 "$ref":"#/components/schemas/planning_configuration"
              },
              {
                 "$ref":"#/components/schemas/platform_status"
              },
              {
                 "$ref":"#/components/schemas/platform_status_encoded"
              }
           ]
        },
        "planning_configuration":{
           "properties":{
              "exclusion_zones":{
                 "description":"Exclusion zones for all platforms",
                 "items":{
                    "description":"Using GEOJSON, exact 4-point region (rectangle shaped - 5 points)",
                    "properties":{
                       "geometry_coordinates":{
                          "example":[
                             [
                                [
                                   -4.1777839187560915,
                                   50.34173405662855
                                ],
                                [
                                   -4.1777839187560915,
                                   50.33820949229701
                                ],
                                [
                                   -4.143667777943875,
                                   50.33820949229701
                                ],
                                [
                                   -4.143667777943875,
                                   50.34173405662855
                                ],
                                [
                                   -4.1777839187560915,
                                   50.34173405662855
                                ]
                             ]
                          ],
                          "type":"array"
                       }
                    },
                    "type":"object"
                 },
                 "type":"array"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "planning_configuration"
                 ],
                 "example":"planning_configuration",
                 "type":"string"
              },
              "planning_config_ID":{
                 "description":"Unique identifier tagged to version of this configuration plan",
                 "example":3,
                 "type":"integer"
              },
              "region_of_interest":{
                 "description":"Region of interest for the entire operation",
                 "items":{
                    "description":"Using GEOJSON, exact 4-point region (rectangle shaped - 5 points)",
                    "properties":{
                       "geometry_coordinates":{
                          "example":[
                             [
                                [
                                   -4.1777839187560915,
                                   50.34173405662855
                                ],
                                [
                                   -4.1777839187560915,
                                   50.33820949229701
                                ],
                                [
                                   -4.143667777943875,
                                   50.33820949229701
                                ],
                                [
                                   -4.143667777943875,
                                   50.34173405662855
                                ],
                                [
                                   -4.1777839187560915,
                                   50.34173405662855
                                ]
                             ]
                          ],
                          "type":"array"
                       }
                    },
                    "type":"object"
                 },
                 "type":"array"
              },
              "squads":{
                 "items":{
                    "properties":{
                       "no_of_platforms":{
                          "description":"Number of platforms",
                          "example":3,
                          "type":"integer"
                       },
                       "platforms":{
                          "description":"Squad consists of these platforms",
                          "items":{
                             "properties":{
                                "additional_data":{
                                   "description":"Any addition fields/data to be added here",
                                   "example":{
                                      "new_sensor_a":"test_sensor",
                                      "range":10.0
                                   },
                                   "type":"object"
                                },
                                "beacon_ID":{
                                   "description":"Unique identifier (number) for the beacon associated to this platform",
                                   "example":9407,
                                   "type":"number"
                                },
                                "emergency":{
                                   "properties":{
                                      "safe_command":{
                                         "description":"Command/Action that is native to respective partner's platform/C2",
                                         "enum":[
                                            "go_home",
                                            "abort_now",
                                            "stop_mission"
                                         ],
                                         "example":"go_home",
                                         "type":"string"
                                      },
                                      "target_depth":{
                                         "description":"Z-coordinate safe place for respective platform . If platform to NOT stay at depth, key in `0.0`",
                                         "example":10.0,
                                         "format":"float",
                                         "type":"number"
                                      },
                                      "target_waypoint_latitude":{
                                         "description":"X-coordinate safe place for respective platform",
                                         "example":-7.432,
                                         "format":"float",
                                         "type":"number"
                                      },
                                      "target_waypoint_longitude":{
                                         "description":"Y-coordinate safe place for respective platform",
                                         "example":50.365,
                                         "format":"float",
                                         "type":"number"
                                      }
                                   },
                                   "required":[
                                      "target_waypoint_latitude",
                                      "target_waypoint_longitude",
                                      "target_depth"
                                   ],
                                   "type":"object"
                                },
                                "max_velocity":{
                                   "description":"Maximum velocity set for platform",
                                   "example":0.9,
                                   "format":"float",
                                   "type":"number"
                                },
                                "min_altitude":{
                                   "description":"Minimum altitude set for platform",
                                   "example":15.2,
                                   "format":"float",
                                   "type":"number"
                                },
                                "min_velocity":{
                                   "description":"Minimum velocity set for platform",
                                   "example":0.1,
                                   "format":"float",
                                   "type":"number"
                                },
                                "model":{
                                   "example":"reav",
                                   "type":"string"
                                },
                                "operator":{
                                   "description":"Operator of platform",
                                   "example":"noc",
                                   "type":"string"
                                },
                                "platform_ID":{
                                   "description":"Unique identifier for this platform",
                                   "example":"reav-x-1",
                                   "type":"string"
                                },
                                "scan_sensor":{
                                   "properties":{
                                      "angle":{
                                         "description":"Angle of range of swath width (in degrees)",
                                         "example":140.0,
                                         "format":"float",
                                         "type":"number"
                                      },
                                      "frequency":{
                                         "description":"Frequency of scanning sensor (in kHz)",
                                         "example":700.0,
                                         "format":"float",
                                         "type":"number"
                                      },
                                      "sensor_type":{
                                         "description":"Unique identifier for this platform",
                                         "enum":[
                                            "SIDESCAN",
                                            "MBES"
                                         ],
                                         "example":"MBES",
                                         "type":"string"
                                      },
                                      "swath_width":{
                                         "description":"Function of `target_altitude` for the platform's swath width (in metres)",
                                         "example":38.0,
                                         "format":"float",
                                         "type":"number"
                                      }
                                   },
                                   "type":"object"
                                },
                                "target_altitude":{
                                   "description":"Target altitude set for platform. This affects swath width",
                                   "example":15.0,
                                   "format":"float",
                                   "type":"number"
                                },
                                "turning_radius":{
                                   "description":"Turning radius of platform (in metres)",
                                   "example":1.0,
                                   "format":"float",
                                   "type":"number"
                                }
                             },
                             "required":[
                                "operator",
                                "platform_ID",
                                "model",
                                "emergency",
                                "min_altitude",
                                "min_velocity",
                                "max_velocity"
                             ],
                             "type":"object"
                          },
                          "type":"array"
                       },
                       "squad_ID":{
                          "description":"Identifier of given squad",
                          "example":23,
                          "type":"integer"
                       },
                       "squad_mission_type":{
                          "description":"Mission of given squad: `tracking`, `survey`, `inspection`",
                          "enum":[
                             "tracking",
                             "survey",
                             "inspection"
                          ],
                          "example":"survey",
                          "type":"string"
                       }
                    },
                    "required":[
                       "squad_ID",
                       "no_of_platforms",
                       "platforms",
                       "squad_mission_type"
                    ],
                    "type":"object"
                 },
                 "type":"array"
              }
           },
           "required":[
              "message_type",
              "planning_config_ID",
              "squads",
              "exclusion_zones",
              "region_of_interest"
           ],
           "type":"object"
        },
        "platform_status":{
           "properties":{
              "altitude":{
                 "description":"Target altitude in metres",
                 "example":20.0,
                 "format":"float",
                 "type":"number"
              },
              "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_remaining_capacity":{
                 "description":"Battery remaining % provided by respective C2",
                 "example":80.2,
                 "format":"float",
                 "type":"number"
              },
              "depth":{
                 "default":0.0,
                 "description":"Target depth in metres",
                 "example":50.0,
                 "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"
              },
              "latitude":{
                 "description":"Latitude in decimal degrees.",
                 "example":178.2,
                 "format":"float",
                 "type":"number"
              },
              "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"
              },
              "longitude":{
                 "description":"Longitude in decimal degrees.",
                 "example":-10.122,
                 "format":"float",
                 "type":"number"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "platform_status"
                 ],
                 "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":[
                    "usbl",
                    "onboard_platform"
                 ],
                 "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":[
              "message_type",
              "platform_ID",
              "status_source",
              "platform_timestamp",
              "latitude",
              "longitude"
           ],
           "type":"object"
        },
        "platform_status_encoded":{
           "properties":{
              "data":{
                 "description":"encoded string. E.g. Base64 encoded",
                 "example":"SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcBAAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==",
                 "type":"string"
              },
              "file_name":{
                 "description":"Name of file",
                 "example":"ah1-0238126349247372.bin",
                 "type":"string"
              },
              "is_binary":{
                 "description":"true if the data field contains binary format data encoded as base64. false if the data field contains ascii content such as NMEA.",
                 "example":true,
                 "type":"boolean"
              },
              "message_type":{
                 "description":"Type of message",
                 "enum":[
                    "platform_status_encoded"
                 ],
                 "example":"platform_status_encoded",
                 "type":"string"
              },
              "mime_type":{
                 "description":"MIME type",
                 "example":"application/gzip",
                 "type":"string"
              }
           },
           "required":[
              "data",
              "is_binary"
           ],
           "type":"object"
        }
     }
  },
  "info":{
     "description":"SoAR message protocol in schemas",
     "title":"SoAR Backbone Message Formats",
     "version":"1.0"
  },
  "openapi":"3.0.2",
  "paths":{
     
  }
}