예제 #1
0
 public FrameModel(CanFrame OnFrame)
 {
     this.BasedOn = OnFrame;
     Descriptor = (UInt16)OnFrame.Descriptor;
     Id = (UInt16)OnFrame.Id;
     RecieveTime = OnFrame.Time;
     Data = OnFrame.Data.ToArray();
     //FindDescription();
 }
예제 #2
0
        /// <summary>Начинает отправку кадра</summary>
        /// <param name="Frame">Кадр для отправки</param>
        /// <returns>Транзакция передачи</returns>
        public ITransaction<CanFrame> BeginSend(CanFrame Frame)
        {
            using (var ms = new MemoryStream(Frame.Data.Length + 4))
            {
                var writer = new BinaryWriter(ms);
                writer.Write(Frame.Id);
                writer.Write(Frame.Data);

                byte[] buffer = ms.ToArray();
                _client.Send(buffer, buffer.Length);
                return new InstantaneousTransaction<CanFrame>(Frame);
            }
        }
예제 #3
0
        public CanFrame ReadFrame(TimeSpan Timeout)
        {
            CanFrame f  = CanFrame.NewWithDescriptor(0);
            bool     ok = false;

            SpinWait.SpinUntil(() => ok = _framesBuffer.TryDequeue(out f), Timeout);
            if (ok)
            {
                return(f);
            }
            else
            {
                throw new TimeoutException("Превышено время ожидания пакета");
            }
        }
예제 #4
0
        private static void PrintFrame(CanFrame f)
        {
            lock (InputLocker)
            {
                if (f.Descriptor != 0x1888) return;

                if (IsInput) return;
                var hl = Colors.ContainsKey(f.Descriptor) ? Colors[f.Descriptor] : ConsoleColor.White;
                Console.Write("{0:HH:mm:ss.fff} ", f.Time);
                Console.ForegroundColor = Console.BackgroundColor;
                Console.BackgroundColor = hl;
                Console.Write("{0:X4}", f.Descriptor);
                Console.ResetColor();
                Console.ForegroundColor = hl;
                Console.Write(" ");
                Console.Write(string.Join(" ", f.Data.Select(b => b.ToString("X2"))));
                Console.WriteLine();
                Console.ResetColor();

                if (f.Descriptor == 0x1888)
                {
                    var F = BlokFrame.GetBlokFrame(f);
                    var vals = F.GetType().GetProperties().Select(p =>
                        new
                        {
                            p.Name,
                            da = ((DescriptionAttribute)DescriptionAttribute.GetCustomAttribute(p, typeof(DescriptionAttribute))),
                            val = p.GetValue(F, null)
                        })
                        .Where(v => v.da != null);
                    foreach (var v in vals)
                        Console.WriteLine("   {0} = {1}", v.da.Description, v.val);
                }

                Console.WriteLine();
            }
        }
예제 #5
0
 /// <summary>Отправляет Can-сообщение в поток</summary>
 public void Send(CanFrame Frame, bool ClearBeforeSend = false)
 {
     Send(new[] { Frame }, ClearBeforeSend);
 }
예제 #6
0
 protected void Enqueue(CanFrame Frame)
 {
     _framesBuffer.Enqueue(Frame);
 }
예제 #7
0
 /// <summary>
 /// Отправляет одно сообщение в канал
 /// </summary>
 /// <param name="Frame">CAN-Сообщение</param>
 /// <param name="Line">Канал связи</param>
 internal void SendFrame(CanFrame Frame, AppiLine Line)
 {
     SendFrames(new List<CanFrame>() { Frame }, Line);
 }
예제 #8
0
 protected void Enqueue(CanFrame Frame)
 {
     _framesBuffer.Enqueue(Frame);
 }
예제 #9
0
 /// <summary>
 /// Отправка одного фрейма в линию
 /// </summary>
 /// <param name="Frame">Фрейм для отправки</param>
 public void Send(CanFrame Frame)
 {
     Send(new List <CanFrame> {
         Frame
     });
 }
예제 #10
0
 /// <summary>
 /// Обработка одного принятого фрейма
 /// </summary>
 /// <param name="Frame">Принятый фрейм</param>
 protected void OnFrameReceived(CanFrame Frame)
 {
     OnFramesReceived(new List <CanFrame> {
         Frame
     });
 }
예제 #11
0
 /// <summary>
 /// Обработка одного принятого фрейма
 /// </summary>
 /// <param name="Frame">Принятый фрейм</param>
 protected void OnFrameReceived(CanFrame Frame)
 {
     OnFramesReceived(new List<CanFrame> { Frame });
 }
예제 #12
0
 /// <summary>
 /// Отправка одного фрейма в линию
 /// </summary>
 /// <param name="Frame">Фрейм для отправки</param>
 public void Send(CanFrame Frame)
 {
     Send(new List<CanFrame> { Frame });
 }
예제 #13
0
 /// <summary>Отправляет Can-сообщение в поток</summary>
 public void Send(CanFrame Frame, bool ClearBeforeSend = false)
 {
     Send(new[] { Frame }, ClearBeforeSend);
 }