/// <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; }
/// <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; }