/// <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); } }
/// <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); } }
/// <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); } }
/// <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(); } }