예제 #1
0
파일: CanPort.cs 프로젝트: serialbus/NGK
        /// <summary>
        /// Возвращает список описания всех доступных устройств производства IXXAT
        /// подключенных в систему
        /// </summary>
        /// <returns></returns>
        public static DeviceInfo[] GetDevicesInfo()
        {
            DeviceInfo[] listDeviceInfo; 
            IVciDevice[] listDevices;
            // Получаем список устройств
            listDevices = CAN.DataLinkLayer.CanPort.IXXAT.CanPort.GetIxxatDevices();
            // Создаём список описания устройств
            listDeviceInfo = new DeviceInfo[listDevices.Length];

            try
            {
                for (int i = 0; i < listDeviceInfo.Length; i++)
                {
                    // Получаем описание на устройство и сохраняем 
                    // в выходной список
                    listDeviceInfo[i] = CanPort.ConvertToDeviceInfo(listDevices[i]);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(
                    String.Format("{0}: class CanPort.GetDevicesInfo(): Невозмоно получить список IXXAT устройств",
                    DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru", false))), ex);
            }
            finally
            {
                // Освобождаем ресурсы
                for (int i = 0; i < listDevices.Length; i++)
                {
                    DisposeVciObject(listDevices[i]);
                }
            }
            return listDeviceInfo;
        }
예제 #2
0
파일: CanPort.cs 프로젝트: serialbus/NGK
        /// <summary>
        /// Создаёт новую структуру с описание устройства на основе полученной
        /// </summary>
        /// <param name="device">Устройство</param>
        /// <returns>Данные об устройстве</returns>
        internal static DeviceInfo ConvertToDeviceInfo(Ixxat.Vci3.IVciDevice device)
        {
            DeviceInfo devInfo;
            Ixxat.Vci3.VciCtrlInfo[] vciCtrlInfo;
            ControllerInfo[] listCntrInfo;

            if (device != null)
            {
                devInfo = new DeviceInfo();
                devInfo.Description = device.Description;
                devInfo.DeviceClass = device.DeviceClass;
                devInfo.DriverVersion = device.DriverVersion;
                devInfo.HardwareVersion = device.HardwareVersion;
                devInfo.Manufacturer = device.Manufacturer;
                devInfo.UniqueHardwareId = device.UniqueHardwareId;
                //devInfo.VciObjectId = device.VciObjectId;

                // Получаем список поддерживаемых интерфейсов (или микросхем)
                // устройством IXXAT (может поддерживать работу с разными шинами)
                vciCtrlInfo = device.Equipment;
                listCntrInfo = new ControllerInfo[vciCtrlInfo.Length];

                // Получаем данные по оборудованию для каждого поддерживаемого
                // интерфейса
                for (int i = 0; i < vciCtrlInfo.Length; i++)
                {
                    listCntrInfo[i] = new ControllerInfo();
                    // Получаем тип интерфейса
                    listCntrInfo[i].BusType = vciCtrlInfo[i].BusType.ToString();
                    // Получаем тип микросхемы
                    // !!! null - если vciCtrlInfo[i].BusType == unknown
                    if (vciCtrlInfo[i].ControllerType != null)
                    {
                        listCntrInfo[i].ControllerType = 
                            ((Ixxat.Vci3.Bal.Can.CanCtrlType)vciCtrlInfo[i].ControllerType).ToString();
                    }
                    else
                    {
                        // Если тип интерфейса не определён, то и связанный с ним тип микросхемы
                        // возвращаем также неопределённым
                        //listCntrInfo[i].ControllerType = Ixxat.Vci3.Bal.Can.CanCtrlType.Unknown;
                        listCntrInfo[i].ControllerType = "Unknown";
                    }
                }

                devInfo.Equipment = listCntrInfo;
            }
            else
            {
                throw new ArgumentNullException("device", String.Format(
                    "{0}: class CanPort.ConvertToDeviceInfo: Невозможно создать структуру описания устройства, устройство не существует", 
                    DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru", false))));
            }

            return devInfo;
        }