/// <summary> /// Specifies the list of adapters connected to a Host. /// </summary> /// <returns>Adapaters list.</returns> public static List <CanAdapterItem> GetAdapters() { USBDeviceInfo[] dies = USBDevice.GetDevices("{AA40624D-0F4B-4F4F-8E23-BA4209EE3AF2}"); List <CanAdapterItem> adapters = new List <CanAdapterItem>(); foreach (USBDeviceInfo info in dies) { var adapter = new CanAdapterItem(); adapter.DevicePath = info.DevicePath; adapter.SerialNumber = info.DevicePath.ToUpper().Split('#')[2]; adapter.DeviceDescription = info.DeviceDescription; try { Mutex mut = Mutex.OpenExisting(adapter.DeviceDescription + " " + adapter.SerialNumber); adapter.InUse = true; mut.Close(); mut = null; } catch (WaitHandleCannotBeOpenedException) { adapter.InUse = false; } adapters.Add(adapter); } return(adapters); }
/// <summary> /// Connecting to a specific adapter. /// </summary> /// <param name="adapter">The adapter.</param> /// <exception cref="Konvolucio.MCAN120803.MCanAdatpterException->Already Connected.">Thrown when...</exception> /// <exception cref="Konvolucio.MCAN120803.MCanAdatpterException->Adapter already in use.">Thrown when...</exception> public void ConnectTo(CanAdapterItem adapter) { if (_isConnected) { throw new CanAdapterException("Already Connected. Code:-8600."); //Doc. } bool createdNewMutex = false; _mutex = new Mutex(false, adapter.DeviceDescription + " " + adapter.SerialNumber, out createdNewMutex); if (!createdNewMutex) { //ha nem hozott létre új mutexet, akkor már valaki létrehozta és használja _mutex.Close(); _mutex = null; throw new CanAdapterException("Adapter already in use. Code:-8601.");//Doc. } Usb = new USBDevice(adapter.DevicePath); FrameCnt = 0; _isConnected = false; _isOpen = false; RxCanMsgAbsTime = 0; Usb.ControlPipeTimeout = 1000; UsbAttrInEpSzie = Usb.Pipes[USB_ATTR_IN_ADDR].MaximumPacketSize; UsbAttrOutEpSize = Usb.Pipes[USB_ATTR_OUT_ADDR].MaximumPacketSize; UsbMsgInEpSize = Usb.Pipes[USB_MSG_IN_ADDR].MaximumPacketSize; UsbMsgOutEpSize = Usb.Pipes[USB_MSG_OUT_ADDR].MaximumPacketSize; Usb.Pipes[USB_MSG_OUT_ADDR].Policy.PipeTransferTimeout = 7000; Usb.Pipes[USB_ATTR_IN_ADDR].Policy.AutoClearStall = true; if (Usb != null) { _isConnected = true; } }