Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

Note that the radar TCP server maintains state on the client connections therefore message start / stop requests, such as FFT Data, are applied on a per client basis.

Typically there are 2 3 types of payloads;payload:

  • Byte array representing a structure made up from standard C++ data types

  • Byte array representing a serialised Protocol Buffer message

  • Byte arrays that represent both of the above

...

This is the first part of every message sent using this protocol. The header serves 2 purposes; : the first is to provide a byte sequence for synchronisation purposes; and secondly to provide information about the body of the message.

...

Message Name

Message Id

Direction

Description

Configuration

10

From Radar

Sends all the radar configuration properties required to configure the client software to correctly receive data

Configuration Request

20

To Radar

Requests a configuration message from the radar

Start FFT Data

21

To Radar

Instructs the radar to start sending FFT data until told to stop

Stop FFT Data

22

To Radar

Instructs the radar to stop sending FFT data

Start Health Msgs

23

To Radar

Instructs the radar to start sending regular health messages until told to stop

Stop Health Msgs

24

To Radar

Instructs the radar to stop sending health messages

Reset RF Health

25

To Radar

Instructs the radar to reset RF Health check system

FFT Data

30

From Radar

An azimuth of raw radar data

High Precision FFT Data

31

From Radar

An azimuth of high precision radar data

Health

40

From Radar

Sends a radar health status message

Contour Update

50

To Radar

Enables the client to update the contour map on the radar

Sector Blanking Update

51

To Radar

Updates the blanking sectors on the radar

System Restart

76

To Radar

Request system reboot

Logging Levels

90

To/From Radar

A list of logging levels - v2 Hardware only

Logging Levels Request

100

To Radar

Request a list of logging levels - v2 Hardware only

Start Nav Data

120

To Radar

Request system to start sending navigation data

Stop Nav Data

121

To Radar

Request system to stop sending navigation data

Set Nav Threshold

122

To Radar

Set navigation threshold

Navigation Data

123

From Radar

Navigation data records

Set Nav Range Gain and Offset

124

To Radar

Set navigation threshold

Calibrate Accelerometer

125

To Radar

Radar will store current accelerometer value as flat

Start Accelerometer

126

To Radar

Start receiving accelerometer data

Stop Accelerometer

127

To Radar

Stop receiving accelerometer data

Accelerometer Data

128

From Radar

Accelerometer Data

Navigation Alarm Data

143

From Radar

SafeGuard Lite Alarms

Navigation Area Rules

144

To Radar

SafeGuard Lite Area Rules

Signature

The 16 byte signature differs very slightly from the older Navtech RMB protocol. This does enable existing software to differentiate between the two protocols if required.

...

Navigation Configuration Request

203

To Radar

Request the current navigation configuration from the Radar

Navigation Configuration

204

From Radar

The current navigation configuration

Set Navigation Configuration

205

To Radar

Updates the Radar’s navigation configuration

Signature

The 16 byte signature differs very slightly from the older Navtech RMB protocol. This does enable existing software to differentiate between the two protocols if required.

The new signature is as follows:

...

Field

Type [Size]

Description

Threshold

uint16_t [2]

Threshold to use for navigation data this . This should be a value between 0 - 96.5 dB multiplied by 10 e.g 75.6dB is 756

...

Info

Azimuth to Bearing Algorithm

To convert from an azimuth to bearing you can use the following algorithm, utilising information from the configuration message:

Bearing = (Azimuth / Encoder Size) * 360 ie.eg. (2800 / 5600) * 360 = 180°

This bearing is relative to the Zero/North point of the radar, for CDR/CIR radars this is a line perpendicular to the flat part of the base:

...

Log Levels Get/Set Messages

The log levels get and get set messages enable a user to get the logging levels and set the logging levels of the radar software. The LoggingLevelRequest message is an empty payload message, the radar will respond with a LoggingLevel message that contains a Protocol Buffer object which is a list of Log Levels. The get log levels payload is a Protocol Buffer serialised byte array. In order to de-serialise the message the client will need to use the Google library as described in reference: https://developers.google.com/protocol-buffers/.

...

Code Block
public static class Utility
{
    public static uint SwapUInt32(uint value)
    {
        return (uint)((SwapUInt16((ushort)((value & 0x000ffff))) << 0x10)) | (SwapUInt16((ushort)((value >> 0x10) & 0xffff)));
    }
 
    public static ushort SwapUInt16(ushort value)
    {
        return (ushort)(((value & 0xff) << 8) | ((value >> 8) & 0xff));
    }
}
 
public class NavVector
{
    public NavVector() { }
 
    public NavVector(float x, float y)
    {
        X = x;
        Y = y;
    }
 
    public float X { get; set; }
    public float Y { get; set; }
 
    public byte[] ToBytes()
    {
        var x = (short)(X * 10.0f);
        var y = (short)(Y * 10.0f);
        var data = (uint)(x << 16) | (uint)y;
        return BitConverter.GetBytes(Utility.SwapUInt32(data));
    }
}
 
public class NavArea
{
    public NavArea()
    {
        Points = new List<NavVector>();
    }
 
    public List<NavVector> Points { get; set; }
 
    public byte[] ToBytes()
    {
        var data = new List<byte>();
        data.AddRange(BitConverter.GetBytes(Utility.SwapUInt16((ushort)Points.Count)));
        Points.ForEach(point => { data.AddRange(point.ToBytes()); });
        return data.ToArray();
    }
}
 
public class NavAreaRule
{
    public NavAreaRule()
    {
        Enabled = true;
        InvertBreakLogic = false;
        ThresholdDelta = 0.0f;
        BreakAllowance = 16;
        AllowanceCurveDecrement = 4;
        AreaToCheck = new NavArea();
    }
 
    public byte Id { get; set; }
    public bool Enabled { get; set; }
    public bool InvertBreakLogic { get; set; }
    public float ThresholdDelta { get; set; }
    public ushort BreakAllowance { get; set; }
    public ushort AllowanceCurveDecrement { get; set; }
    public NavArea AreaToCheck { get; set; }
 
    public byte[] ToBytes()
    {
        var ruleData = new List<byte> { Id, Enabled ? (byte)1 : (byte)0, InvertBreakLogic ? (byte)1 : (byte)0 };
        ruleData.AddRange(BitConverter.GetBytes(Utility.SwapUInt16((ushort)(ThresholdDelta * 10.0f))));
        ruleData.AddRange(BitConverter.GetBytes(Utility.SwapUInt16(BreakAllowance)));
        ruleData.AddRange(BitConverter.GetBytes(Utility.SwapUInt16(AllowanceCurveDecrement)));
        ruleData.AddRange(AreaToCheck.ToBytes());
        var data = new List<byte>();
        data.AddRange(BitConverter.GetBytes(Utility.SwapUInt32((uint)ruleData.Count)));
        data.AddRange(ruleData);
        return data.ToArray();
    }
}
 
public class NavUpdateAreaRules
{
    public NavUpdateAreaRules()
    {
        Rules = new List<NavAreaRule>();
    }
 
    public List<NavAreaRule> Rules { get; set; }
 
    public byte[] ToBytes()
    {
        var data = new List<byte> { (byte)Rules.Count };
        Rules.ForEach(rule => { data.AddRange(rule.ToBytes()); });
        return data.ToArray();
    }
}

Navigation Configuration Get/Set Messages

The Navigation Configuration Get/Get message set allow the client to request the current Navigation Configuration from the Radar, and provide an update to supersede the current configuration. A Navigation Configuration Request message is an empty payload message sent to the Radar, to which the Radar responds by sending a Navigation Configuration message. The client may sent an update of the Navigation Configuration parameters by sending a Set Navigation Configuration message.

The Navigation Configuration message is a fixed-structure message.

Navigation Configuration message structure

...

Field

Type [Size]

Description

Bins to operate on

uint16_t [2]

Defines the search window in bins for peak detection.

Minimum bin

uint16_t [2]

The earliest bin for which peak detection will be enabled.

Navigation Threshold

uint32_t [4]

The threshold level for target detection. This should be a value between 0 - 96.5 dB multiplied by 10 e.g 75.6dB is 756

Max Peaks Per Azimuth

uint32_t [4]

The maximum number of detection peaks that will be reported. Once the maximum number of peaks have been detected, further peaks will be ignored.

Sector Blanking Message

A Sector Blanking message allows the client to update the set of blanking sectors for the Radar.

The payload for the message consists of a contiguous sequence of up to eight Blanking Sector structures. A Blanking Sector structure defines a start angle and finish angle for a blanking sector. The angles are stored as a pair of floating point values, as defined above. The first byte of the payload holds the number of Blanking Sectors to follow.

Sector Blanking Message Structure

...

Field

Type [Size]

Description

Number of Sectors

uint8_t [1]

Specifies the size of the message payload, as a number of Blanking Sector structures. [0 .. 8]

Blanking Sectors

uint8_t [Payload Size - 1]

Up to 8 Blanking Sector structures, held as a sequence of bytes

Blanking Sector Structure

...

Field

Type [Size]

Description

Start Angle

float [4]

The start angle of the sector [0 .. 360.0]

Finish Angle

float [4]

The end angle of the sector [0 .. 360.0]

Related Information

Filter by label (Content by label)
showLabelsfalse
max10
cqllabel in ( "protocol" , "tcp" , "colossus" , "network" )

...