/// <summary> /// Устанавливает отслеживание сообщений с заданным дескриптором по указанному порту /// </summary> /// <param name="Port">Прослушиваемый порт</param> /// <param name="Descriptor">Отлавливаемый дескриптор</param> public CanFrameHandler(CanPort Port, int Descriptor) { this.Port = Port; this.Descriptor = Descriptor; Port.Handle(this); }
private void RegisterNewRecorder(CanPort forPort) { Recorders.Add(new LogEncodingRecorder<FrameSbsEncoder>(forPort, new FileInfo(System.IO.Path.Combine("CanLog", string.Format("log {0}.bin", forPort.Name))))); Recorders.Add(new LogEncodingRecorder<FrameTextEncoder>(forPort, new FileInfo(System.IO.Path.Combine("CanLog", string.Format("log {0}.txt", forPort.Name))))); }
/// <summary> /// Находит в сети все устройства с заданным шаблоном билетов. /// </summary> /// <param name="Template">Шаблон билета устройства</param> /// <param name="OnPort">Can-порт, через который осуществляется работа</param> /// <param name="Timeout">Таймаут (в милисекундах). Таймаут отсчитывается с момента получения последней IsoTP-транзакции, а не с момента начала опроса</param> /// <returns></returns> public static List<DeviceTicket> LocateDevices(DeviceTicket Template, CanPort OnPort, int Timeout = 100) { using (var flow = new CanFlow(OnPort, CanProg.FuDev, CanProg.FuInit, CanProg.FuProg)) { Template.BlockSerialNumber = 0; var helloMessage = new Messages.ProgInit(Template); IsoTp.Send(flow, CanProg.FuInit, CanProg.FuDev, helloMessage.Encode()); var res = new List<DeviceTicket>(); var sw = new Stopwatch(); sw.Start(); while (sw.ElapsedMilliseconds < Timeout) { try { var tr = IsoTp.Receive(flow, CanProg.FuDev, CanProg.FuProg, TimeSpan.FromMilliseconds(Timeout - sw.ElapsedMilliseconds)); var msg = Messages.Message.DecodeMessage(tr.Data); if (msg is Messages.ProgBCastResponse) res.Add((msg as Messages.ProgBCastResponse).Ticket); } catch (IsoTpReceiveTimeoutException) { break; } } return res.Distinct().ToList(); } }
public WatchWindow(CanPort OnPort) { Port = OnPort; Port.Recieved += new CanFramesReceiveEventHandler(Port_Recieved); HandlerModels = new ObservableCollection<FrameHandlerModel>(); InitializeComponent(); }
/// <summary> /// Добавляет порт в список прослушиваемых /// </summary> public void RegisterPort(CanPort Port) { foreach (var descriptor in _descriptors) { var h = new CanFrameHandler(Port, descriptor); h.Received += Handler_FrameReceived; _handlers.Add(h); } }
/// <summary> /// Создаёт поток вокруг выбранного Can-порта /// </summary> /// <param name="Port">Can-порт, поток с которого нужно буферизировать</param> /// <param name="Descriptors">Список обрабатываемых дескрипторов</param> public CanFlow(CanPort Port, params int[] Descriptors) { this.Port = Port; this.Descriptors = new ReadOnlyCollection<int>(Descriptors.Distinct().ToList()); foreach (var d in this.Descriptors) { var h = new CanFrameHandler(Port, d); h.Received += Handler_MessageReceived; _handlers.Add(h); } }
/// <summary> /// Создаёт поток вокруг выбранного Can-порта /// </summary> /// <param name="Port">Can-порт, поток с которого нужно буферизировать</param> /// <param name="Descriptors">Список обрабатываемых дескрипторов</param> public CanFlow(CanPort Port, params int[] Descriptors) { this.Port = Port; this.Descriptors = new ReadOnlyCollection <int>(Descriptors.Distinct().ToList()); foreach (var d in this.Descriptors) { var h = new CanFrameHandler(Port, d); h.Received += Handler_MessageReceived; _handlers.Add(h); } }
public SendWindow(CanPort WithPort) { this.Port = WithPort; model = new SendingModel(); model.SelectedFrameModifed += EditingFrame_PropertyChanged; this.DataContext = model; InitializeComponent(); this.Title = string.Format("Отправка в {0}", Port.Name); t = new Timer(); t.Elapsed += new ElapsedEventHandler(t_Elapsed); Dispatcher.BeginInvoke((Action<String>)(txt => SendEdit.Text = txt), Properties.Settings.Default.LastSend); }
public void FlashDevice(DeviceTicket Ticket, CanPort port, FirmwaringProgressViewModel GlobalProgress, FirmwaringProgressViewModel LocalProgress) { _logger.Info("-----"); _logger.Info("Подключаемся к {0}", Ticket); PostProgress(GlobalProgress, string.Format("Подключение к модулю (№{0}/{1})...", Ticket.BlockSerialNumber, Ticket.Channel)); using (CanProg session = CanProg.Connect(port, Ticket)) { _logger.Info("Подключились и начинаем передачу прошивки на {0}", Ticket); PostProgress(GlobalProgress, "Передача прошивки {0:P0}", 0); var updater = new ComponentUpdater( session); updater.SynchronizeComponent(Component, Information, GlobalProgress, LocalProgress); PostProgress(GlobalProgress, "Применение изменений..."); SubmitAckStatus submitStatus = session.Submit(SubmitStatus.Submit); _logger.Info("Завершили программирование {0}, статус: {1}", Ticket, submitStatus); if (submitStatus != SubmitAckStatus.SubmitSuccessed) throw new SubmitFailsException(); } }
private static void RegisterPort(CanPort p) { p.Recieved += new CanFramesReceiveEventHandler(CanFrame_Recieved); }
/// <summary> /// Создаёт буфер для отлова сообщений с указанным дескриптором на указанном порту /// </summary> /// <param name="Descriptors">Отлавливаемые дескрипторы</param> /// <param name="OnPort"></param> public CanFramesBuffer(IEnumerable<int> Descriptors, CanPort OnPort) : this(Descriptors, new[] { OnPort }) { }
public CanFramesReceiveEventArgs(IList<CanFrame> Frames, CanPort Port) { this.Frames = Frames; this.Port = Port; }
public CanFramesBuffer(int Descriptor, CanPort OnPort) : this(new[] { Descriptor }, new[] { OnPort }) { }
public CanFramesBuffer(CanPort OnPort, params int[] Descriptors) : this(Descriptors, OnPort) { }
public FrameHandlerModel(int Descriptor, CanPort Port) { this.Descriptor = Descriptor; this.Port = Port; LastFrame = null; }
/// <summary> /// Создаёт буфер для отлова сообщений с указанным дескриптором на указанном порту /// </summary> /// <param name="Descriptors">Отлавливаемые дескрипторы</param> /// <param name="OnPort"></param> public CanFramesBuffer(IEnumerable <int> Descriptors, CanPort OnPort) : this(Descriptors, new[] { OnPort }) { }
public CanFramesReceiveEventArgs(IList <CanFrame> Frames, CanPort Port) { this.Frames = Frames; this.Port = Port; }
public DeviceLocator(CanPort OnPort) { this.Port = OnPort; }