Пример #1
0
        /// <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);
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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));
                    }
                }
            }
        }
Пример #4
0
 public IDevice NewInstance(IReadonlyContext context) => Factory.Create(Clz, context);