/* * Copyright (c) Cloud Software Group, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1) Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2) Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using Newtonsoft.Json; namespace XenAPI { /// /// A physical USB device /// First published in XenServer 7.3. /// public partial class PUSB : XenObject { #region Constructors public PUSB() { } public PUSB(string uuid, XenRef USB_group, XenRef host, string path, string vendor_id, string vendor_desc, string product_id, string product_desc, string serial, string version, string description, bool passthrough_enabled, Dictionary other_config, double speed) { this.uuid = uuid; this.USB_group = USB_group; this.host = host; this.path = path; this.vendor_id = vendor_id; this.vendor_desc = vendor_desc; this.product_id = product_id; this.product_desc = product_desc; this.serial = serial; this.version = version; this.description = description; this.passthrough_enabled = passthrough_enabled; this.other_config = other_config; this.speed = speed; } /// /// Creates a new PUSB from a Hashtable. /// Note that the fields not contained in the Hashtable /// will be created with their default values. /// /// public PUSB(Hashtable table) : this() { UpdateFrom(table); } #endregion /// /// Updates each field of this instance with the value of /// the corresponding field of a given PUSB. /// public override void UpdateFrom(PUSB record) { uuid = record.uuid; USB_group = record.USB_group; host = record.host; path = record.path; vendor_id = record.vendor_id; vendor_desc = record.vendor_desc; product_id = record.product_id; product_desc = record.product_desc; serial = record.serial; version = record.version; description = record.description; passthrough_enabled = record.passthrough_enabled; other_config = record.other_config; speed = record.speed; } /// /// Given a Hashtable with field-value pairs, it updates the fields of this PUSB /// with the values listed in the Hashtable. Note that only the fields contained /// in the Hashtable will be updated and the rest will remain the same. /// /// public void UpdateFrom(Hashtable table) { if (table.ContainsKey("uuid")) uuid = Marshalling.ParseString(table, "uuid"); if (table.ContainsKey("USB_group")) USB_group = Marshalling.ParseRef(table, "USB_group"); if (table.ContainsKey("host")) host = Marshalling.ParseRef(table, "host"); if (table.ContainsKey("path")) path = Marshalling.ParseString(table, "path"); if (table.ContainsKey("vendor_id")) vendor_id = Marshalling.ParseString(table, "vendor_id"); if (table.ContainsKey("vendor_desc")) vendor_desc = Marshalling.ParseString(table, "vendor_desc"); if (table.ContainsKey("product_id")) product_id = Marshalling.ParseString(table, "product_id"); if (table.ContainsKey("product_desc")) product_desc = Marshalling.ParseString(table, "product_desc"); if (table.ContainsKey("serial")) serial = Marshalling.ParseString(table, "serial"); if (table.ContainsKey("version")) version = Marshalling.ParseString(table, "version"); if (table.ContainsKey("description")) description = Marshalling.ParseString(table, "description"); if (table.ContainsKey("passthrough_enabled")) passthrough_enabled = Marshalling.ParseBool(table, "passthrough_enabled"); if (table.ContainsKey("other_config")) other_config = Maps.ToDictionary_string_string(Marshalling.ParseHashTable(table, "other_config")); if (table.ContainsKey("speed")) speed = Marshalling.ParseDouble(table, "speed"); } public bool DeepEquals(PUSB other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Helper.AreEqual2(_uuid, other._uuid) && Helper.AreEqual2(_USB_group, other._USB_group) && Helper.AreEqual2(_host, other._host) && Helper.AreEqual2(_path, other._path) && Helper.AreEqual2(_vendor_id, other._vendor_id) && Helper.AreEqual2(_vendor_desc, other._vendor_desc) && Helper.AreEqual2(_product_id, other._product_id) && Helper.AreEqual2(_product_desc, other._product_desc) && Helper.AreEqual2(_serial, other._serial) && Helper.AreEqual2(_version, other._version) && Helper.AreEqual2(_description, other._description) && Helper.AreEqual2(_passthrough_enabled, other._passthrough_enabled) && Helper.AreEqual2(_other_config, other._other_config) && Helper.AreEqual2(_speed, other._speed); } public override string SaveChanges(Session session, string opaqueRef, PUSB server) { if (opaqueRef == null) { System.Diagnostics.Debug.Assert(false, "Cannot create instances of this type on the server"); return ""; } else { if (!Helper.AreEqual2(_other_config, server._other_config)) { PUSB.set_other_config(session, opaqueRef, _other_config); } return null; } } /// /// Get a record containing the current state of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static PUSB get_record(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_record(session.opaque_ref, _pusb); } /// /// Get a reference to the PUSB instance with the specified UUID. /// First published in XenServer 7.3. /// /// The session /// UUID of object to return public static XenRef get_by_uuid(Session session, string _uuid) { return session.JsonRpcClient.pusb_get_by_uuid(session.opaque_ref, _uuid); } /// /// Get the uuid field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_uuid(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_uuid(session.opaque_ref, _pusb); } /// /// Get the USB_group field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static XenRef get_USB_group(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_usb_group(session.opaque_ref, _pusb); } /// /// Get the host field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static XenRef get_host(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_host(session.opaque_ref, _pusb); } /// /// Get the path field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_path(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_path(session.opaque_ref, _pusb); } /// /// Get the vendor_id field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_vendor_id(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_vendor_id(session.opaque_ref, _pusb); } /// /// Get the vendor_desc field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_vendor_desc(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_vendor_desc(session.opaque_ref, _pusb); } /// /// Get the product_id field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_product_id(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_product_id(session.opaque_ref, _pusb); } /// /// Get the product_desc field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_product_desc(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_product_desc(session.opaque_ref, _pusb); } /// /// Get the serial field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_serial(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_serial(session.opaque_ref, _pusb); } /// /// Get the version field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_version(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_version(session.opaque_ref, _pusb); } /// /// Get the description field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_description(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_description(session.opaque_ref, _pusb); } /// /// Get the passthrough_enabled field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static bool get_passthrough_enabled(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_passthrough_enabled(session.opaque_ref, _pusb); } /// /// Get the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static Dictionary get_other_config(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_other_config(session.opaque_ref, _pusb); } /// /// Get the speed field of the given PUSB. /// First published in Citrix Hypervisor 8.2. /// /// The session /// The opaque_ref of the given pusb public static double get_speed(Session session, string _pusb) { return session.JsonRpcClient.pusb_get_speed(session.opaque_ref, _pusb); } /// /// Set the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// New value to set public static void set_other_config(Session session, string _pusb, Dictionary _other_config) { session.JsonRpcClient.pusb_set_other_config(session.opaque_ref, _pusb, _other_config); } /// /// Add the given key-value pair to the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// Key to add /// Value to add public static void add_to_other_config(Session session, string _pusb, string _key, string _value) { session.JsonRpcClient.pusb_add_to_other_config(session.opaque_ref, _pusb, _key, _value); } /// /// Remove the given key and its corresponding value from the other_config field of the given PUSB. If the key is not in that Map, then do nothing. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// Key to remove public static void remove_from_other_config(Session session, string _pusb, string _key) { session.JsonRpcClient.pusb_remove_from_other_config(session.opaque_ref, _pusb, _key); } /// /// /// First published in XenServer 7.3. /// /// The session /// The host public static void scan(Session session, string _host) { session.JsonRpcClient.pusb_scan(session.opaque_ref, _host); } /// /// /// First published in XenServer 7.3. /// /// The session /// The host public static XenRef async_scan(Session session, string _host) { return session.JsonRpcClient.async_pusb_scan(session.opaque_ref, _host); } /// /// /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// passthrough is enabled when true and disabled with false public static void set_passthrough_enabled(Session session, string _pusb, bool _value) { session.JsonRpcClient.pusb_set_passthrough_enabled(session.opaque_ref, _pusb, _value); } /// /// /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// passthrough is enabled when true and disabled with false public static XenRef async_set_passthrough_enabled(Session session, string _pusb, bool _value) { return session.JsonRpcClient.async_pusb_set_passthrough_enabled(session.opaque_ref, _pusb, _value); } /// /// Return a list of all the PUSBs known to the system. /// First published in XenServer 7.3. /// /// The session public static List> get_all(Session session) { return session.JsonRpcClient.pusb_get_all(session.opaque_ref); } /// /// Get all the PUSB Records at once, in a single XML RPC call /// First published in XenServer 7.3. /// /// The session public static Dictionary, PUSB> get_all_records(Session session) { return session.JsonRpcClient.pusb_get_all_records(session.opaque_ref); } /// /// Unique identifier/object reference /// public virtual string uuid { get { return _uuid; } set { if (!Helper.AreEqual(value, _uuid)) { _uuid = value; NotifyPropertyChanged("uuid"); } } } private string _uuid = ""; /// /// USB group the PUSB is contained in /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef USB_group { get { return _USB_group; } set { if (!Helper.AreEqual(value, _USB_group)) { _USB_group = value; NotifyPropertyChanged("USB_group"); } } } private XenRef _USB_group = new XenRef("OpaqueRef:NULL"); /// /// Physical machine that owns the USB device /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef host { get { return _host; } set { if (!Helper.AreEqual(value, _host)) { _host = value; NotifyPropertyChanged("host"); } } } private XenRef _host = new XenRef("OpaqueRef:NULL"); /// /// port path of USB device /// public virtual string path { get { return _path; } set { if (!Helper.AreEqual(value, _path)) { _path = value; NotifyPropertyChanged("path"); } } } private string _path = ""; /// /// vendor id of the USB device /// public virtual string vendor_id { get { return _vendor_id; } set { if (!Helper.AreEqual(value, _vendor_id)) { _vendor_id = value; NotifyPropertyChanged("vendor_id"); } } } private string _vendor_id = ""; /// /// vendor description of the USB device /// public virtual string vendor_desc { get { return _vendor_desc; } set { if (!Helper.AreEqual(value, _vendor_desc)) { _vendor_desc = value; NotifyPropertyChanged("vendor_desc"); } } } private string _vendor_desc = ""; /// /// product id of the USB device /// public virtual string product_id { get { return _product_id; } set { if (!Helper.AreEqual(value, _product_id)) { _product_id = value; NotifyPropertyChanged("product_id"); } } } private string _product_id = ""; /// /// product description of the USB device /// public virtual string product_desc { get { return _product_desc; } set { if (!Helper.AreEqual(value, _product_desc)) { _product_desc = value; NotifyPropertyChanged("product_desc"); } } } private string _product_desc = ""; /// /// serial of the USB device /// public virtual string serial { get { return _serial; } set { if (!Helper.AreEqual(value, _serial)) { _serial = value; NotifyPropertyChanged("serial"); } } } private string _serial = ""; /// /// USB device version /// public virtual string version { get { return _version; } set { if (!Helper.AreEqual(value, _version)) { _version = value; NotifyPropertyChanged("version"); } } } private string _version = ""; /// /// USB device description /// public virtual string description { get { return _description; } set { if (!Helper.AreEqual(value, _description)) { _description = value; NotifyPropertyChanged("description"); } } } private string _description = ""; /// /// enabled for passthrough /// public virtual bool passthrough_enabled { get { return _passthrough_enabled; } set { if (!Helper.AreEqual(value, _passthrough_enabled)) { _passthrough_enabled = value; NotifyPropertyChanged("passthrough_enabled"); } } } private bool _passthrough_enabled = false; /// /// additional configuration /// [JsonConverter(typeof(StringStringMapConverter))] public virtual Dictionary other_config { get { return _other_config; } set { if (!Helper.AreEqual(value, _other_config)) { _other_config = value; NotifyPropertyChanged("other_config"); } } } private Dictionary _other_config = new Dictionary() {}; /// /// USB device speed /// First published in Citrix Hypervisor 8.2. /// public virtual double speed { get { return _speed; } set { if (!Helper.AreEqual(value, _speed)) { _speed = value; NotifyPropertyChanged("speed"); } } } private double _speed = -1.000; } }