Beispiel #1
0
        public override string ToString(Frame fmsg)
        {
            AISFrame aisMsg = (AISFrame)fmsg;
            string   s      = "";

            foreach (AISField f in Fields)
            {
                s += f.Name + " = " + f.ToString(aisMsg.AISData) + "\n";
            }

            return(s);
        }
Beispiel #2
0
        // Methods
        public AISDefn GetAISDefn(AISFrame msg)
        {
            AISDefn defn;

            if (_aisDictionary.TryGetValue(msg.Header.MessageID, out defn))
            {
                return(defn);
            }
            else
            {
                return(new UnknownAISDefn());
            }
        }
Beispiel #3
0
        // Methods for displaying data, refer to base Defn class
        public override string EnumFieldsString(Frame fmsg)
        {
            AISFrame aisMsg = (AISFrame)fmsg;
            string   s      = "";

            foreach (AISField f in Fields)
            {
                if (f is AISEnum)
                {
                    s += f.Name + "=" + f.ToString(aisMsg.AISData);
                }
            }

            return(s);
        }
Beispiel #4
0
        public override string ToDebugString(Frame fmsg)
        {
            AISFrame aisMsg = (AISFrame)fmsg;
            string   bitstr = "";

            foreach (byte b in aisMsg.AISData.AISBytes)
            {
                bitstr += Convert.ToString(b, 2).PadLeft(8, '0');
            }
            string retstr = "";

            foreach (AISField f in Fields)
            {
                string fbitstr = (f.BitOffset < bitstr.Length) ? bitstr.Substring(f.BitOffset, Math.Min(f.BitLength, bitstr.Length - f.BitOffset)).PadRight(f.BitLength, 'x') : new string('x', f.BitLength);
                retstr += fbitstr + " -> " + f.Name + " = " + f.ToString(aisMsg.AISData) + "\n";
            }
            return(retstr);
        }
Beispiel #5
0
        public override byte[] GetBytes(Frame frame)
        {
            N0183Frame n0183Frame = frame as N0183Frame;

            if (n0183Frame != null)
            {
                return(Encoding.ASCII.GetBytes(n0183Frame.FullMessage + "\r\n"));
            }

            N2kFrame n2kFrame = frame as N2kFrame;

            if (n2kFrame != null)
            {
                return(Encoding.ASCII.GetBytes(FrameConversion.PackN2k(n2kFrame).FullMessage + "\r\n"));
            }

            AISFrame aisFrame = frame as AISFrame;

            if (aisFrame != null)
            {
                // TODO : Breaking up message if too long

                int    padbits = 6 * aisFrame.AISData.AISString.Length - 8 * aisFrame.AISData.AISBytes.Length; // [0, 5]
                string message = "!AIVDM,1,1,,A," + aisFrame.AISData.AISString + "," + padbits;

                // Add checksum
                byte checksum = 0;
                for (int i = 1; i < message.Length; i++)
                {
                    checksum ^= Convert.ToByte(message[i]);
                }
                message += "*" + checksum.ToString("X2");

                return(Encoding.ASCII.GetBytes(message + "\r\n"));
            }

            throw new Exception("Attempt to send unknown frame type: '" + frame.GetType().Name + "'");
        }