public AisMessage CreateMessage(BitArray payload) { var type = payload.DecodeByte(0, 5); if (type != c_type1 && type != c_type2 && type != c_type3) { throw new Exception(string.Format("Incorrect type, expected 1,2,3 but present:{0}", type)); } var timeStamp = DateTime.UtcNow.ToFileTimeUtc(); byte repeatIndicator = payload.DecodeByte(6, 7); uint mmsi = payload.DecodeUInt32(8, 37); NavigationStatus navStatus = (NavigationStatus)payload.DecodeByte(38, 41); int rot = payload.DecodeInt32(42, 49); float sog = (float)payload.DecodeUInt32(50, 59) / 10; bool posAccuracy = payload.DecodeBool(60); float longtitude = (float)payload.DecodeFloat(61, 88) / 600000; float latitude = (float)payload.DecodeFloat(89, 115) / 600000; float cog = (float)payload.DecodeUInt32(116, 127) / 10; ushort heading = payload.DecodeUShort(128, 136); byte utcSeconds = payload.DecodeByte(137, 142); ManeuverIndicator manuevrIndicator = (ManeuverIndicator)payload.DecodeByte(143, 144); byte spare = payload.DecodeByte(145, 147); bool raim = payload.DecodeBool(148); uint radioStatus = payload.DecodeUInt32(149, 167); return(new ClassAPositionReportMessage( type, timeStamp, repeatIndicator, mmsi, navStatus, rot, sog, posAccuracy, longtitude, latitude, cog, heading, utcSeconds, manuevrIndicator, spare, raim, radioStatus)); }
public ClassAPositionReportMessage(byte type, long timeStamp, byte repeatIndicator, uint mmsi, NavigationStatus navigationStatus, int rateOfTurn, float speedOverGround, bool positionAcuracy, float longtitude, float latitude, float courseOverGround, ushort trueHeading, byte utcSeconds, ManeuverIndicator maneuverIndicator, byte spare, bool raimFlag, uint radioStatus) : base(type, timeStamp) { RepeatIndicator = repeatIndicator; Mmsi = mmsi; NavigationStatus = navigationStatus; RateOfTurn = rateOfTurn; SpeedOverGround = speedOverGround; PositionAcuracy = positionAcuracy; Longtitude = longtitude; Latitude = latitude; CourseOverGround = courseOverGround; TrueHeading = trueHeading; UtcSeconds = utcSeconds; ManeuverIndicator = maneuverIndicator; Spare = spare; RaimFlag = raimFlag; RadioStatus = radioStatus; }