cottak 0.1.0

A built in test application for Linux using dynamic libraries in Rust
Documentation
// Dstl (c) Crown Copyright 2024
//
// [START declaration]
syntax = "proto3";
package sapient_msg.bsi_flex_335_v2_0;

import "sapient_msg/bsi_flex_335_v2_0/location.proto";
import "sapient_msg/bsi_flex_335_v2_0/range_bearing.proto";
import "sapient_msg/bsi_flex_335_v2_0/velocity.proto";
import "sapient_msg/proto_options.proto";
// [END declaration]

// [START java_declaration]
option java_multiple_files = true;
option java_package = "uk.gov.dstl.sapientmsg.bsiflex335v2";
option java_outer_classname = "RegistrationProto";
// [END java_declaration]

// [START messages]

enum Operator {
        OPERATOR_UNSPECIFIED = 0;
        OPERATOR_ALL = 1;
        OPERATOR_GREATER_THAN = 2;
        OPERATOR_LESS_THAN = 3;
        OPERATOR_EQUAL = 4;
}
message Registration {
    repeated NodeDefinition node_definition = 1 [(field_options) = {is_mandatory: true}]; // Type of the node
    optional string icd_version = 2 [(field_options) = {is_mandatory: true}]; // ICD version implemented by the node
    optional string name = 3; // System name
    optional string short_name = 4; // Shortened version of the system name suitable for GUIs
    repeated Capability capabilities = 5 [(field_options) = {is_mandatory: true}]; // Node's capabilities
    optional StatusDefinition status_definition = 6 [(field_options) = {is_mandatory: true}]; // Status report definition
    repeated ModeDefinition mode_definition = 7 [(field_options) = {is_mandatory: true}]; // Detection report and tasking definitons
    repeated string dependent_nodes = 8; // This field allows the dependent (child) nodes (if present) of the current node to be specified
    repeated LocationOrRangeBearing reporting_region = 9; // This field is used within a hierarchy of fusion nodes for a (child) fusion node to tell its parent fusion node the region it is reporting from
    repeated ConfigurationData config_data = 10 [(field_options) = {is_mandatory: true}]; // This sub-message is used to report node configuration data, e.g. Manufacturer, Model, etc

    message NodeDefinition {
        optional NodeType node_type = 1 [(field_options) = {is_mandatory: true}]; // Description of major type of the node
	    repeated string node_sub_type  = 2; // further description of node type
    }
    enum NodeType {
        NODE_TYPE_UNSPECIFIED = 0; // No node type specified
        NODE_TYPE_OTHER = 1; // A node type not defined in another enumeration
        NODE_TYPE_RADAR = 2; // A radar-based system (such as an air traffic control radar)
        NODE_TYPE_LIDAR = 3; // A sensor that uses light to determine the range to objects in a scene
        NODE_TYPE_CAMERA = 4; // An camera-based system (such as an electro-optical or infra-red camera)
        NODE_TYPE_SEISMIC = 5; // A system based on the detection of vibrations in the local environment (such as a seismometer)
        NODE_TYPE_ACOUSTIC = 6; // A system based on acoustic signals (such as a microphone or speaker)
        NODE_TYPE_PROXIMITY_SENSOR = 7; // A system which can detect the local present of objects (such as a trip-wire)
        NODE_TYPE_PASSIVE_RF = 8; // A system based on the passive interception of radio-frequency signals
        NODE_TYPE_HUMAN = 9; // A human acting as part of a SAPIENT system (such as a spotter or guard)
        NODE_TYPE_CHEMICAL = 10; // A system that can detect chemical signatures
        NODE_TYPE_BIOLOGICAL = 11; // A system that can detect biological signatures
        NODE_TYPE_RADIATION = 12; // A system that can detect radioactive signatures (such as a Geiger counter)
        NODE_TYPE_KINETIC = 13; // A system which has a physical effector (such as a missile or collision-based system)
        NODE_TYPE_JAMMER = 14; // A radio-frequency transmitter that disrupts other systems using power
        NODE_TYPE_CYBER = 15; // A system which uses network/communication protocols to detect or effect other systems
        NODE_TYPE_LDEW = 16; // A Laser Directed Energy Weapon
        NODE_TYPE_RFDEW = 17; // A Radio Frequency Directed Energy Weapon
        NODE_TYPE_MOBILE_NODE = 18; // A (platform) node that can be moved to a new location
        NODE_TYPE_POINTABLE_NODE = 19; // A node that can be pointed in different directions, e.g. a gimball
        NODE_TYPE_FUSION_NODE = 20; // A (child) Fusion Node. This is used when creating a hierarchy of Fusion Nodes and the child Fusion Node registers with a parent Fusion Node
   }
    message Capability {
        optional string category = 1 [(field_options) = {is_mandatory: true}]; // The category of field to report (e.g. Radar, Jammer, etc.)
        optional string type = 2 [(field_options) = {is_mandatory: true}]; // Description of the capability (e.g. Maximum Transmit Power)
        optional string value = 3; // The value of the capability (e.g. 50)
        optional string units = 4; // The units of the value that will be reported (e.g. dB)
    }
    message StatusDefinition {
        optional Duration status_interval = 1 [(field_options) = {is_mandatory: true}]; // Time between heartbeats
        optional LocationType location_definition = 2; // Node location definition
        optional LocationType coverage_definition = 3; // Area covered by the ASM definition
        optional LocationType obscuration_definition = 4; // Area obsucred to ASM definition
        repeated StatusReport status_report = 5; // Additional heartbeat report definitions
        optional LocationType field_of_view_definition = 6; // ASM's field of view definition
    }
    enum TimeUnits {
        TIME_UNITS_UNSPECIFIED = 0; // Time units not specified
        TIME_UNITS_NANOSECONDS = 1; // Nano Seconds
        TIME_UNITS_MICROSECONDS = 2; // Micro Seconds
        TIME_UNITS_MILLISECONDS = 3; // Milli Seconds
        TIME_UNITS_SECONDS = 4; // Seconds
        TIME_UNITS_MINUTES = 5; // Minutes
        TIME_UNITS_HOURS = 6; // Hours
        TIME_UNITS_DAYS = 7; // Days
    }
    message Duration {
        reserved 2; // The type of the 'value' field was changed from int32 to float with the introduction of BSI Flex 335
        optional TimeUnits units = 1 [(field_options) = {is_mandatory: true}]; // Units that the duration are specified in
//        int32 value = 2; // Amount of time being specified for the duration
        optional float value = 3 [(field_options) = {is_mandatory: true}]; // Amount of time being specified for the duration
    }
    message ModeParameter {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Type of parameter (e.g. SelfAdaptation)
        optional string value = 2 [(field_options) = {is_mandatory: true}]; // Allowed values of parameter (e.g. ROI, Range)
    }
    message LocationType {
        oneof coordinates_oneof {
            option (oneof_options) = {is_mandatory: true};
            LocationCoordinateSystem location_units = 1; // Units of location
            RangeBearingCoordinateSystem range_bearing_units = 2; // Units of range bearing
        };
        oneof datum_oneof {
            option (oneof_options) = {is_mandatory: true};
            LocationDatum location_datum = 3; // Datum of location
            RangeBearingDatum range_bearing_datum = 4; // Datum of range bearing
        };
        optional string zone = 5; // If using UTM coordinates, provide the UTM zone in this field (e.g. 30N)
    }
// Specify how velocity is provided by specifying the coordinates system type and units in use
    message VelocityType {
        reserved 1, 2, 3, 5; // These values were used in SAPIENT upto version 7, but not in the current version
        oneof velocity_units_oneof {
            option (oneof_options) = {is_mandatory: true};
//            	GHCVelocityUnits ghc_velocity_units = 1; // Provide velocity in global coordinates in the style of Air Traffic Management and specify units - DEPRECIATED
//		        RYPVelocityUnits ryp_units = 2; // Provide velocity relative to sensor location and sensor pointing direction and specify units - DEPRECIATED
//		        RAEVelocityUnits rae_units = 3; // Provide velocity relative to sensor location and ground plane - DEPRECIATED
		        ENUVelocityUnits enu_velocity_units = 4; // Provide velocity as a vector in global spherical coordinates and specify units
//		        SHPVelocityUnits shp_velocity_units = 5; // Provide velocity as a vector in global spherical coordinates - DEPRECIATED
        };
        oneof datum_oneof {
            option (oneof_options) = {is_mandatory: true};
            LocationDatum location_datum = 6; // Datum of velocity in Cartesian coordinates
            RangeBearingDatum range_bearing_datum = 7; // Datum of velocity in Spherical coordinates
        };
        optional string zone = 8; // If using UTM coordinates, provide the UTM zone in this field (e.g. 30N)
    }
    message StatusReport {
        optional StatusReportCategory category = 1 [(field_options) = {is_mandatory: true}]; // Category of the field to report in the status report (e.g. sensor, power, mode, status, etc.)
        optional string type = 2 [(field_options) = {is_mandatory: true}]; // Type or name of the information being provide
        optional string units = 3; // Units or valid values that will be reported
        optional bool on_change = 4; // Is a new status report sent when a value changes
    }
    enum StatusReportCategory {
        STATUS_REPORT_CATEGORY_UNSPECIFIED = 0;
        STATUS_REPORT_CATEGORY_SENSOR = 1; // Sensor fields which can be reported
        STATUS_REPORT_CATEGORY_POWER = 2; // Power fields which can be reported
        STATUS_REPORT_CATEGORY_MODE = 3; // Modes which the can be reported in the status report message
        STATUS_REPORT_CATEGORY_STATUS = 4; // Status fields which can be reported
    }
    message ModeDefinition {
        optional string mode_name = 1 [(field_options) = {is_mandatory: true}]; // Mode's name
        optional ModeType mode_type = 2 [(field_options) = {is_mandatory: true}]; // Mode's type
        optional string mode_description = 3; // Description of the mode (normally used by GUIs)
        optional Duration settle_time = 4 [(field_options) = {is_mandatory: true}]; // Time required for the ASM to change to this mode
        optional Duration maximum_latency = 5; // Maximum expected latency from a detection being made by the sensor to a message being sent
        optional ScanType scan_type = 6; // Type of scan. Typically: fixed or scanning
        optional TrackingType tracking_type = 7; // Type of scan
        optional Duration duration = 8; // Time the mode lasts for in the case of temporary modes
        repeated ModeParameter mode_parameter = 9; // Additional parameters that can be passed to the mode during tasking
        repeated DetectionDefinition detection_definition = 10; // Definition of detection reports sent while in this mode
        optional TaskDefinition task = 11 [(field_options) = {is_mandatory: true}]; // Definition of tasks that can be accepted by the ASM while in this mode
    }
    enum ModeType {
        MODE_TYPE_UNSPECIFIED = 0; // Mode type not specified
        MODE_TYPE_PERMANENT = 1; // Mode is continous and will not change until the node is re-tasked
        MODE_TYPE_TEMPORARY = 2; // Mode is temporary and will revert to another node once the mode's duration is reached
        MODE_TYPE_DEFAULT = 3; // The default mode which is permanent until changed
    }
    enum ScanType {
        SCAN_TYPE_UNSPECIFIED = 0; // Scan type not specified
        SCAN_TYPE_FIXED = 1; // Mode has a fixed field of view that does not change and all regions are detected at all times (e.g. a fixed camera)
        SCAN_TYPE_SCANNING = 2; // Mode has a moving field of view that will only detect part of a region at any given time (e.g. a rotating radar)
        SCAN_TYPE_STEERABLE = 3; // Mode has a field of view that can be moved (e.g. a pan-tilt-zoom camera)
    }
    enum TrackingType {
        TRACKING_TYPE_UNSPECIFIED = 0; // Tracking type is not defined
        TRACKING_TYPE_NONE = 1; // No data assocation between detections of the same object. A unique object_id is generated for each detection
        TRACKING_TYPE_TRACKLET = 2; // ASM will attempt to persist an object_id between detections of the same object, but will not attempt to join broken tracks
        TRACKING_TYPE_TRACK = 3; // ASM is able to persist an object_id between detections of the same object, even when tracks are broken
        TRACKING_TYPE_TRACK_WITH_RE_ID = 4; // ASM is able to provide tracks that cna be re-associated based on features
    }
    message DetectionDefinition {
        optional LocationType location_type = 1 [(field_options) = {is_mandatory: true}]; // Type of location that is reported in the detection report
        repeated PerformanceValue detection_performance = 2; // detection performance definition
        repeated DetectionReport detection_report = 3; // Detection report defintion
        repeated DetectionClassDefinition detection_class_definition = 4; // Classes able to be reported in this detection report
        repeated BehaviourDefinition behaviour_definition = 5; // Behaviours able to be reported in the detection report
        optional VelocityType velocity_type = 6; // Type of velocity that is reported in the detection report
        optional GeometricError geometric_error = 7; // List of location error charaterisations to allow the DMM to understand the detection performance of the ASM
    }
    message GeometricError {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Type of the performance value being specified (e.g. Standard Deviation)
        optional string units = 2 [(field_options) = {is_mandatory: true}]; // Units of the performance value being specified (e.g. metres)
        optional string variation_type = 3 [(field_options) = {is_mandatory: true}]; // How the performance value being specified may vary during operation (e.g. Linear with Range)
        repeated PerformanceValue performance_value = 4; // A list of types and values
    }
    message PerformanceValue {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Type of the performance value being specified (e.g. Rotation speed)
        optional string units = 2 [(field_options) = {is_mandatory: true}]; // Units of the performance value being specified (e.g. Degrees per second)
        optional string unit_value = 3 [(field_options) = {is_mandatory: true}]; // Typical unit value of the performance value being specified (e.g. 2.5)
        optional string variation_type = 4; // How the performance value being specified may vary during operation (e.g. Linear)
    }
    message DetectionReport {
        optional DetectionReportCategory category = 1 [(field_options) = {is_mandatory: true}]; // Category of detection field being reported (e.g. object_info)
        optional string type = 2 [(field_options) = {is_mandatory: true}]; // Type of detection field being reported (e.g. colour)
        optional string units = 3 [(field_options) = {is_mandatory: true}]; // Units of detection field being reported (e.f. "Red, Green, Blue, Yellow...")
        optional bool on_change = 4; // Is a new detection report sent when a value changes
    }
    enum DetectionReportCategory {
        DETECTION_REPORT_CATEGORY_UNSPECIFIED = 0; // Detection report category not specified
        DETECTION_REPORT_CATEGORY_DETECTION = 1; // Detection fields
        DETECTION_REPORT_CATEGORY_TRACK = 2; // Track Info fields
        DETECTION_REPORT_CATEGORY_OBJECT = 3; // Object Info fields
        DETECTION_REPORT_CATEGORY_SIGNAL = 4;  // signal info fields
    }
    message DetectionClassDefinition {
        optional ConfidenceDefinition confidence_definition = 1; // A flag to note what type of confidences the ASM will provide for classifications
        repeated PerformanceValue class_performance = 2; // Performance values associated with the classifications in the detection
        repeated ClassDefinition class_definition = 3; // Classifications the ASM is able to provide
        repeated TaxonomyDockDefinition taxonomy_dock_definition = 4; //List of docking points for taxonomy extensions
    }
    enum ConfidenceDefinition {
        CONFIDENCE_DEFINITION_UNSPECIFIED = 0; // Confidence definition not specified
        CONFIDENCE_DEFINITION_SINGLE_CLASS = 1; // ASM will only provide confidence for the most likely class
        CONFIDENCE_DEFINITION_MULTI_CLASS = 2; // ASM will provide confidence for all classes
    }
    message ClassDefinition {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Name of the classification that can be reported
        optional string units = 2; // The units of any reported confidence that the classification is correct (e.g. represented as a decimal (0-1))
        repeated SubClass sub_class = 3; // Any classes further down the taxonomy tree that can be reported
    }
    message SubClass {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Name of the classification that can be reported
        optional string units = 2; // The units of any reported confidence that the classification is correct (e.g. represented as a decimal (0-1))
        optional int32 level = 3 [(field_options) = {is_mandatory: true}]; // The level of the sub-class. The top-level class would have a sub-level of: 0, the next: 1, etc.
        repeated SubClass sub_class = 4; // Any classes further down the taxonomy tree that can be reported
    }
    message BehaviourDefinition {
        optional string type = 1 [(field_options) = {is_mandatory: true}]; // Name of the behaviour that can be reported
        optional string units = 2; // The units of any reported confidence that the behaviour is correct (e.g. represented as a decimal (0-1))
    }
    message TaskDefinition {
        optional int32 concurrent_tasks = 1; // The number of instances of this task that can be run at the same time
        optional RegionDefinition region_definition = 2 [(field_options) = {is_mandatory: true}]; // Region definition for regions this task can operate on
        repeated Command command = 3; // Commands that can be issued as part of this task
    }
    message ClassFilterDefinition {
        repeated FilterParameter filter_parameter = 1; // Parameter to be filtered on
        repeated SubClassFilterDefinition sub_class_definition = 2; // List of sub-class filters
        optional string type = 3 [(field_options) = {is_mandatory: true}]; // Classification name to be filtered on
    }
    message SubClassFilterDefinition {
        repeated FilterParameter filter_parameter = 1; // Parameter to be filtered on
        optional int32 level = 2 [(field_options) = {is_mandatory: true}]; // Level of sub-class filter
        optional string type = 3 [(field_options) = {is_mandatory: true}]; // Classification name to be filtered on
        repeated SubClassFilterDefinition sub_class_definition = 4; // List of sub-class filters
    }
    message FilterParameter {
        optional string parameter = 1 [(field_options) = {is_mandatory: true}]; // Parameter to be filtered
        repeated Operator operators = 2 [(field_options) = {is_mandatory: true}]; // Operaters to filter parameter on
    }
    message BehaviourFilterDefinition {
        repeated FilterParameter filter_parameter = 1; // Parameter to be filtered on
        optional string type = 2 [(field_options) = {is_mandatory: true}]; // Behvaiour name to be filtered on
    }
    message Command {
        reserved 1;
        // optional string name = 1 [(field_options) = {is_mandatory: true}]; // Name of command
        optional string units = 2 [(field_options) = {is_mandatory: true}]; // Units or allowable values of the command
        optional Duration completion_time = 3 [(field_options) = {is_mandatory: true}]; // Time allowed to complete command
        optional CommandType type = 4 [(field_options) = {is_mandatory: true}]; // The type of command
    }
    enum CommandType {
        COMMAND_TYPE_UNSPECIFIED = 0; // No command type set
        COMMAND_TYPE_REQUEST = 1; // The request being asked for
        COMMAND_TYPE_DETECTION_THRESHOLD = 2; // The requested sensitivity of sensor during the task
        COMMAND_TYPE_DETECTION_REPORT_RATE = 3; // The requested reporting rate of sensor during the task
        COMMAND_TYPE_CLASSIFICATION_THRESHOLD = 4; // The requested classification sensitivity of sensor during the task
        COMMAND_TYPE_MODE_CHANGE = 5; // Mode change for the ASM
        COMMAND_TYPE_LOOK_AT = 6; // LookAt command for tasking pointing ASMs
        COMMAND_TYPE_MOVE_TO = 7; // This command is to move a mobile node to a new location
        COMMAND_TYPE_PATROL = 8; // This command is to have a mobile node continually patrol a specified route, until a new command is received
        COMMAND_TYPE_FOLLOW = 9; // This command is to have a mobile node follow a moving object
    }
    message RegionDefinition {
        repeated RegionType region_type = 1 [(field_options) = {is_mandatory: true}]; // Types of region
        optional Duration settle_time = 2; // Time to settle to normal performance in this mode
        repeated LocationType region_area = 3 [(field_options) = {is_mandatory: true}]; // Location types used for the area that defines the region
        repeated ClassFilterDefinition class_filter_definition = 4; // Filters that can be applied to the region for classes
        repeated BehaviourFilterDefinition behaviour_filter_definition = 5; // Filters that can be applied to the region for behaviours
    }
//
// Note: enum RegionType also features in task.proto, if making changes to this enumeration, identical changes must be made
// in the same enumeration in task.proto. Users should be aware, future versions of the SAPIENT proto files may be 
// restructured so that enum RegionType only appears once.
//
    enum RegionType {
        REGION_TYPE_UNSPECIFIED = 0; // No region type set
        REGION_TYPE_AREA_OF_INTEREST = 1; // Region is of particular interest
        REGION_TYPE_IGNORE = 2; // Region to be ignored
        REGION_TYPE_BOUNDARY = 3; // Region defines the boundary of the area of operations
        REGION_TYPE_MOBILE_NODE_NO_GO_AREA = 4; // Region defines an area that mobile nodes shall not enter
        REGION_TYPE_MOBILE_NODE_GO_AREA = 5; //Region defines an area that mobile nodes shall remain within
    }
    message TaxonomyDockDefinition {
        optional string Dock_class_namespace = 1 [(field_options)= {is_mandatory: true}];
        optional string Dock_class = 2  [(field_options)= {is_mandatory: true}];
        repeated ExtensionSubclass Extension_subclass = 3;
    }
    message ExtensionSubclass {
        optional string Subclass_namespace = 1 [(field_options)= {is_mandatory: true}];
        optional string Subclass_name = 2  [(field_options)= {is_mandatory: true}];
        optional string units = 3;
    }
    message ConfigurationData {
        string manufacturer = 1 [(field_options) = {is_mandatory: true}];  // The name of the manufacturer of the node
        string model = 2 [(field_options) = {is_mandatory: true}];  // The name of the model of the node
        optional string serial_number = 3; // The serial number of the node
        optional string hardware_version = 4; // The hardware version of the node
        optional string software_version = 5; // The software version of the node
        repeated ConfigurationData sub_components = 6; // Configuration data of any sub-components
    }
}
// [END messages]