예제 #1
0
        /// <summary>
        /// Raised when the listener picks up Mode-S bytes from a receiver.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void Listener_ModeSBytesReceived(object sender, EventArgs <ExtractedBytes> args)
        {
            if (Online)
            {
                var extractedBytes = args.Value;

                var bytes = new byte[(extractedBytes.Length * 2) + 4];
                var di    = 0;
                bytes[di++] = extractedBytes.HasParity ? (byte)0x2a : (byte)0x3a;

                var length = extractedBytes.Offset + extractedBytes.Length;
                for (int i = extractedBytes.Offset; i < length; ++i)
                {
                    var sourceByte = extractedBytes.Bytes[i];
                    bytes[di++] = NibbleToAscii((sourceByte & 0xf0) >> 4);
                    bytes[di++] = NibbleToAscii(sourceByte & 0x0f);
                }

                bytes[di++] = (byte)0x3b;
                bytes[di++] = (byte)0x0d;
                bytes[di]   = (byte)0x0a;

                BroadcastProvider.Send(bytes);
            }
        }
예제 #2
0
 /// <summary>
 /// Raised when the listener picks up raw bytes from a receiver.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Listener_RawBytesReceived(object sender, EventArgs <byte[]> args)
 {
     if (Online)
     {
         BroadcastProvider.Send(args.Value);
     }
 }
예제 #3
0
 /// <summary>
 /// Raised when the listener picks up a Port 30003 format message (or derives one from a raw message).
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void Listener_Port30003MessageReceived(object sender, BaseStationMessageEventArgs args)
 {
     if (Online)
     {
         var bytes = Encoding.ASCII.GetBytes(String.Concat(args.Message.ToBaseStationString(), "\r\n"));
         BroadcastProvider.Send(bytes);
     }
 }
예제 #4
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        public void Initialise()
        {
            if (Listener == null)
            {
                throw new InvalidOperationException("Listener must be set before calling Initialise");
            }
            if (BroadcastProvider == null)
            {
                throw new InvalidOperationException("BroadcastProvider must be set before calling Initialise");
            }
            if (Format == RebroadcastFormat.None)
            {
                throw new InvalidOperationException("Format must be specified before calling Initialise");
            }
            if (_Hooked_Port30003_Messages || _Hooked_Raw_Bytes || _Hooked_ModeS_Bytes)
            {
                throw new InvalidOperationException("Initialise has already been called");
            }

            BroadcastProvider.ExceptionCaught += BroadcastProvider_ExceptionCaught;
            BroadcastProvider.EventFormat      = Format;
            BroadcastProvider.BeginListening();

            switch (Format)
            {
            case RebroadcastFormat.Passthrough:
                Listener.RawBytesReceived += Listener_RawBytesReceived;
                _Hooked_Raw_Bytes          = true;
                break;

            case RebroadcastFormat.Port30003:
                Listener.Port30003MessageReceived += Listener_Port30003MessageReceived;
                _Hooked_Port30003_Messages         = true;
                break;

            case RebroadcastFormat.Avr:
                Listener.ModeSBytesReceived += Listener_ModeSBytesReceived;
                _Hooked_ModeS_Bytes          = true;
                break;

            default:
                throw new NotImplementedException();
            }
        }