private AisMessage CreateAisMessageFromSentence(AisSentence sentence) { var asciiDecimal = sentence.Payload.Select(AisEncoding.GetAsciiDecimalFromByte).ToArray(); var payLoad = Utils.ConvertToMsb6Bit(asciiDecimal); if (sentence.FillBits != 0) { PadPayLoad(payLoad, sentence.FillBits); } return(CreateAisMessageFromBitPayload(payLoad)); }
public Record AddSentence(AisSentence sentence) { Record record; if (m_buffer.TryGetValue(sentence.SentenceId, out record)) { return(record.AddSentence(sentence)); } CheckBufferLimit(); record = new Record().AddSentence(sentence); m_buffer.Add(sentence.SentenceId, record); return(record); }
public static string ToNmeaString(this AisSentence sentence) { return(new StringBuilder() .Append(c_leadChar) .Append(sentence.TalkedId) .Append(c_separator) .Append(sentence.FragmentCount.ToString("X")) .Append(c_separator) .Append(sentence.FragmentNumber.ToString("X")) .Append(c_separator) .Append(sentence.SentenceId == 0 ? string.Empty : sentence.SentenceId.ToString("X")) .Append(c_separator) .Append(sentence.Channel) .Append(c_separator) .Append(Encoding.ASCII.GetString(sentence.Payload)) .Append(c_separator) .Append(sentence.FillBits) .Append(c_fillBitSeparator) .Append(sentence.CheckSum.ToString("X")).ToString()); }
/// <summary> /// Creates ais message from sentence. /// </summary> /// <param name="sentence">Ais sentence produced by Sentence factory.</param> /// <param name="isFragmented">True if message is fragment, false if message is complete.</param> /// <returns>Instance of supported ais message class, null if passed sentence is fragment, isFragmented is true in this case.</returns> public AisMessage CreateAisMessage(AisSentence sentence, out bool isFragmented) { if (sentence.FragmentCount <= 1) { isFragmented = false; return(CreateAisMessageFromSentence(sentence)); } var record = m_buffer.AddSentence(sentence); if (record.IsComplete()) { isFragmented = false; return(CreateAisMessageFromFragments(record.Sentences)); } isFragmented = true; return(null); }
public Record AddSentence(AisSentence sentence) { m_count = sentence.FragmentCount; m_sentences.Add(sentence); return(this); }