Example #1
0
        private void NativeDiskDisappeared(IntPtr disk, IntPtr context)
        {
            if (this.DeviceDisappeared == null)
            {
                // if no-one subscribed to this event, do nothing
                return;
            }

            IntPtr device        = DiskArbitration.DADiskCopyIOMedia(disk);
            IntPtr propertiesRef = DiskArbitration.DADiskCopyDescription(disk);

            NSDictionary properties = new NSDictionary(propertiesRef);

            DeviceArguments deviceArguments = new DeviceArguments(properties, this);

            if (properties.HasKey("DADeviceProtocol") && properties.GetStringValue("DADeviceProtocol") == "USB")
            {
                OsxUsbData usb = new OsxUsbData(device);
                deviceArguments.UsbInfo = usb;
            }

            IOKit.IOObjectRelease(device);

            this.DeviceDisappeared(this, deviceArguments);
            GC.KeepAlive(this);
        }
Example #2
0
        private void NativeDiskChanged(IntPtr disk, IntPtr keys, IntPtr context)
        {
            if (this.DeviceChanged == null)
            {
                // if no-one subscribed to this event, do nothing
                return;
            }

            IntPtr device        = DiskArbitration.DADiskCopyIOMedia(disk);
            IntPtr propertiesRef = DiskArbitration.DADiskCopyDescription(disk);

            // using MonoMac we can get a managed NSDictionary from the pointer
            NSDictionary    properties      = new NSDictionary(propertiesRef);
            DeviceArguments deviceArguments = new DeviceArguments(properties, this);

            if (properties.HasKey("DADeviceProtocol") && properties.GetStringValue("DADeviceProtocol") == "USB")
            {
                OsxUsbData usb = new OsxUsbData(device);
                deviceArguments.UsbInfo = usb;
            }

            IOKit.IOObjectRelease(device);

            // trigger the public event for any subscribers
            this.DeviceChanged(this, deviceArguments);
            GC.KeepAlive(this);
        }
Example #3
0
        protected static string GetUUIDFromProperties(NSDictionary properties)
        {
            // this is somewhat troublesome
            // some devices have a filesystem UUID (i.e. HFS+ formated ones), but most other devices don't.
            // As the different devices/volumes have not really always a key in common, we use different keys
            // depending on the device type, and generate a UUID conforming 16byte value out of it

            string uuid_src =
                properties.GetStringValue("DAMediaBSDName") ??
                properties.GetStringValue("DADevicePath") ??
                properties.GetStringValue("DAVolumePath");

            if (string.IsNullOrEmpty(uuid_src))
            {
                Hyena.Log.ErrorFormat("Tried to create a device for which we can't determine a UUID");
                throw new ApplicationException("Could not determine a UUID for the device");
            }

            // TODO actually transform into a real UUID
            return(uuid_src);
        }
Example #4
0
        private void NativeDiskDisappeared(IntPtr disk, IntPtr context)
        {
            if (this.DeviceDisappeared == null) {
                // if no-one subscribed to this event, do nothing
                return;
            }

            IntPtr device = DiskArbitration.DADiskCopyIOMedia (disk);
            IntPtr propertiesRef = DiskArbitration.DADiskCopyDescription (disk);

            NSDictionary properties = new NSDictionary (propertiesRef);

            DeviceArguments deviceArguments = new DeviceArguments (properties, this);

            if (properties.HasKey ("DADeviceProtocol") && properties.GetStringValue ("DADeviceProtocol") == "USB") {
                OsxUsbData usb = new OsxUsbData (device);
                deviceArguments.UsbInfo = usb;
            }

            IOKit.IOObjectRelease (device);

            this.DeviceDisappeared (this, deviceArguments);
            GC.KeepAlive (this);
        }
Example #5
0
        private void NativeDiskChanged(IntPtr disk, IntPtr keys, IntPtr context)
        {
            if (this.DeviceChanged == null) {
                // if no-one subscribed to this event, do nothing
                return;
            }

            IntPtr device = DiskArbitration.DADiskCopyIOMedia (disk);
            IntPtr propertiesRef = DiskArbitration.DADiskCopyDescription (disk);

            // using MonoMac we can get a managed NSDictionary from the pointer
            NSDictionary properties = new NSDictionary (propertiesRef);
            DeviceArguments deviceArguments = new DeviceArguments (properties, this);

            if (properties.HasKey ("DADeviceProtocol") && properties.GetStringValue ("DADeviceProtocol") == "USB") {
                OsxUsbData usb = new OsxUsbData (device);
                deviceArguments.UsbInfo = usb;
            }

            IOKit.IOObjectRelease (device);

            // trigger the public event for any subscribers
            this.DeviceChanged (this, deviceArguments);
            GC.KeepAlive (this);
        }
Example #6
0
        protected static string GetUUIDFromProperties(NSDictionary properties)
        {
            // this is somewhat troublesome
             // some devices have a filesystem UUID (i.e. HFS+ formated ones), but most other devices don't.
             // As the different devices/volumes have not really always a key in common, we use different keys
             // depending on the device type, and generate a UUID conforming 16byte value out of it

             string uuid_src =
                properties.GetStringValue ("DAMediaBSDName") ??
                properties.GetStringValue ("DADevicePath")  ??
                properties.GetStringValue ("DAVolumePath");

            if (string.IsNullOrEmpty (uuid_src)) {
                Hyena.Log.ErrorFormat ("Tried to create a device for which we can't determine a UUID");
                throw new ApplicationException ("Could not determine a UUID for the device");
            }

            // TODO actually transform into a real UUID
            return uuid_src;
        }