/// <summary> /// /// </summary> /// <param name="hd"></param> private void CreateDevices(Hardware hd) { // device // foreach (IDPU dpu in this.DPUs) { IDeviceSourceProvider deviceSourceProvider = dpu.DeviceSourceProvider; deviceSourceProvider.SourceConfigs = this.SourceConfigs; IDeviceSource[] deviceSources = deviceSourceProvider.GetDeviceSources(); foreach (IDeviceSource deviceSource in deviceSources) { IDeviceFactory factory = dpu.DeviceFactory; IDevice device = factory.Create(deviceSource); device.DeviceSource = deviceSource; // find station by device // Guid stationGuid = deviceSource.StationGuid; IStation station = hd.Stations.Find(stationGuid); if (station == null) { string s = string.Format("not find station by guid '{0}'", stationGuid); throw new Exception(s); } station.Devices.Add(device); device.Station = station; ITaskFactory taskFactory = dpu.TaskFactory; taskFactory.Create(device); } } }
private static void AddCachePortAndPortModeInformation(DeviceType type, Version hardwareRevision, Version softwareRevision, PortInfo port, ProtocolKnowledge knowledge, IDeviceFactory deviceFactory) { var device = deviceFactory.Create(type); if (device != null) { foreach (var message in device.GetStaticPortInfoMessages(hardwareRevision, softwareRevision).Select(b => MessageEncoder.Decode(b, null))) { switch (message) { case PortModeInformationMessage pmim: pmim.HubId = port.HubId; pmim.PortId = port.PortId; break; case PortInformationMessage pim: pim.HubId = port.HubId; pim.PortId = port.PortId; break; } ApplyStaticProtocolKnowledge(message, knowledge); } } }
private static void AddCachePortAndPortModeInformation(DeviceType type, Version hardwareRevision, Version softwareRevision, HubInfo hub, PortInfo port, ProtocolKnowledge knowledge, IDeviceFactory deviceFactory) { var device = deviceFactory.Create(type); if (device is not null) { foreach (var message in device.GetStaticPortInfoMessages(hardwareRevision, softwareRevision, hub.SystemType).Select(b => MessageEncoder.Decode(b, null))) { var messageToProcess = message; switch (messageToProcess) { case PortModeInformationMessage pmim: messageToProcess = pmim with { HubId = port.HubId, PortId = port.PortId, }; break; case PortInformationMessage pim: messageToProcess = pim with { HubId = port.HubId, PortId = port.PortId, }; break; } ApplyStaticProtocolKnowledge(messageToProcess, knowledge); if (messageToProcess is PortModeInformationMessage pmim2 && pmim2.InformationType == PortModeInformationType.Name) { device.ExtendPortMode(knowledge.PortMode(pmim2.HubId, pmim2.PortId, pmim2.Mode)); } } } }
public IDevice NewInstance(IReadonlyContext context) => Factory.Create(Clz, context);