public FrameModel(CanFrame OnFrame) { this.BasedOn = OnFrame; Descriptor = (UInt16)OnFrame.Descriptor; Id = (UInt16)OnFrame.Id; RecieveTime = OnFrame.Time; Data = OnFrame.Data.ToArray(); //FindDescription(); }
/// <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); } }
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("Превышено время ожидания пакета"); } }
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(); } }
/// <summary>Отправляет Can-сообщение в поток</summary> public void Send(CanFrame Frame, bool ClearBeforeSend = false) { Send(new[] { Frame }, ClearBeforeSend); }
protected void Enqueue(CanFrame Frame) { _framesBuffer.Enqueue(Frame); }
/// <summary> /// Отправляет одно сообщение в канал /// </summary> /// <param name="Frame">CAN-Сообщение</param> /// <param name="Line">Канал связи</param> internal void SendFrame(CanFrame Frame, AppiLine Line) { SendFrames(new List<CanFrame>() { Frame }, Line); }
/// <summary> /// Отправка одного фрейма в линию /// </summary> /// <param name="Frame">Фрейм для отправки</param> public void Send(CanFrame Frame) { Send(new List <CanFrame> { Frame }); }
/// <summary> /// Обработка одного принятого фрейма /// </summary> /// <param name="Frame">Принятый фрейм</param> protected void OnFrameReceived(CanFrame Frame) { OnFramesReceived(new List <CanFrame> { Frame }); }
/// <summary> /// Обработка одного принятого фрейма /// </summary> /// <param name="Frame">Принятый фрейм</param> protected void OnFrameReceived(CanFrame Frame) { OnFramesReceived(new List<CanFrame> { Frame }); }
/// <summary> /// Отправка одного фрейма в линию /// </summary> /// <param name="Frame">Фрейм для отправки</param> public void Send(CanFrame Frame) { Send(new List<CanFrame> { Frame }); }