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