private void FileAdded(object sender, FileSystemEventArgs e)
        {
            byte busNumber;
            byte deviceAddress;

            if (IsDeviceEnterface(e.Name, out busNumber, out deviceAddress))
            {
                byte[] descriptorBytes;
                if (ReadFileDescriptor(e.FullPath, out descriptorBytes))
                {
                    LinuxDevItem addedItem = new LinuxDevItem(e.Name, busNumber, deviceAddress, descriptorBytes);
                    if (mLinuxDevItemList.FindByName(e.Name) != null)
                    {
                        throw new Exception("FileAdded:Invalid LinuxDevItem");
                    }
                    mLinuxDevItemList.Add(addedItem);

                    //Console.WriteLine("Added Vid:{0:X4} Pid:{1:X4}", addedItem.DeviceDescriptor.VendorID, addedItem.DeviceDescriptor.ProductID);
                    //////////////////////
                    // TODO:DEVICE ARRIVAL
                    //////////////////////

                    EventHandler <DeviceNotifyEventArgs> deviceNotify = OnDeviceNotify;
                    if (!ReferenceEquals(deviceNotify, null))
                    {
                        deviceNotify(this, new LinuxDeviceNotifyEventArgs(addedItem, DeviceType.DeviceInterface, EventType.DeviceArrival));
                    }
                }
            }
        }
예제 #2
0
 public bool Equals(LinuxDevItem other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(Equals(other.DeviceFileName, DeviceFileName) && other.BusNumber == BusNumber && other.DeviceAddress == DeviceAddress &&
            Equals(other.DeviceDescriptor, DeviceDescriptor));
 }
예제 #3
0
        internal LinuxDeviceNotifyEventArgs(LinuxDevItem linuxDevItem, DeviceType deviceType, EventType eventType)
        {
            mEventType  = eventType;
            mDeviceType = deviceType;
            switch (mDeviceType)
            {
            case DeviceType.Volume:
                throw new NotImplementedException(mDeviceType.ToString());

            case DeviceType.Port:
                throw new NotImplementedException(mDeviceType.ToString());

            case DeviceType.DeviceInterface:
                mDevice = new LinuxUsbDeviceNotifyInfo(linuxDevItem);
                mObject = mDevice;
                break;
            }
        }
 private void BuildDevList()
 {
     mLinuxDevItemList.Clear();
     string[] deviceInterfaceFiles = Directory.GetFiles(mDevDir, "usbdev*", SearchOption.TopDirectoryOnly);
     foreach (string deviceInterfaceFile in deviceInterfaceFiles)
     {
         byte   busNumber;
         byte   deviceAddress;
         string deviceFileName = Path.GetFileName(deviceInterfaceFile);
         if (IsDeviceEnterface(deviceFileName, out busNumber, out deviceAddress))
         {
             byte[] descriptorBytes;
             if (ReadFileDescriptor(deviceInterfaceFile, out descriptorBytes))
             {
                 LinuxDevItem addedItem = new LinuxDevItem(deviceFileName, busNumber, deviceAddress, descriptorBytes);
                 mLinuxDevItemList.Add(addedItem);
             }
         }
     }
     //Console.WriteLine("LinuxDeviceNotifier:BuildDevList Count:{0}",mLinuxDevItemList.Count);
 }
        private void OnAddRemoveEvent(object sender, AddRemoveEventArgs e)
        {
            EventHandler <DeviceNotifyEventArgs> deviceNotify = OnDeviceNotify;

            if (!ReferenceEquals(deviceNotify, null))
            {
                string deviceFileName = String.Format("usbdev{0}.{1}", e.MonoUSBProfile.BusNumber, e.MonoUSBProfile.DeviceAddress);

                LinuxDevItem linuxDevItem = new LinuxDevItem(deviceFileName,
                                                             e.MonoUSBProfile.BusNumber,
                                                             e.MonoUSBProfile.DeviceAddress,
                                                             e.MonoUSBProfile.DeviceDescriptor);

                deviceNotify(this,
                             new LinuxDeviceNotifyEventArgs(linuxDevItem,
                                                            DeviceType.DeviceInterface,
                                                            e.EventType == AddRemoveType.Added
                                                                ? EventType.DeviceArrival
                                                                : EventType.DeviceRemoveComplete));
            }
        }
예제 #6
0
 internal LinuxUsbDeviceNotifyInfo(LinuxDevItem linuxDevItem)
 {
     mLinuxDevItem = linuxDevItem;
 }