plugin: new `MM_PLUGIN_FORBIDDEN_DRIVERS' property
It allows plugins to specify whether they cannot support ports handled by specific drivers.
This commit is contained in:
@@ -142,9 +142,13 @@
|
|||||||
any port detected being managed by a driver not listed by the plugin.
|
any port detected being managed by a driver not listed by the plugin.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
This filter is specified by the <type>MM_PLUGIN_ALLOWED_DRIVERS</type>
|
Plugins can also specify which drivers they do not expect, so that we
|
||||||
property in the <structname>MMPlugin</structname> object provided
|
filter out any port detected being managed by a driver listed by the plugin.
|
||||||
by the plugin.
|
</para>
|
||||||
|
<para>
|
||||||
|
These filters are specified by the <type>MM_PLUGIN_ALLOWED_DRIVERS</type>
|
||||||
|
and <type>MM_PLUGIN_FORBIDDEN_DRIVERS</type> properties in the
|
||||||
|
<structname>MMPlugin</structname> object provided by the plugin.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@@ -52,6 +52,7 @@ struct _MMPluginPrivate {
|
|||||||
/* Plugin-specific setups */
|
/* Plugin-specific setups */
|
||||||
gchar **subsystems;
|
gchar **subsystems;
|
||||||
gchar **drivers;
|
gchar **drivers;
|
||||||
|
gchar **forbidden_drivers;
|
||||||
guint16 *vendor_ids;
|
guint16 *vendor_ids;
|
||||||
mm_uint16_pair *product_ids;
|
mm_uint16_pair *product_ids;
|
||||||
gchar **vendor_strings;
|
gchar **vendor_strings;
|
||||||
@@ -69,6 +70,7 @@ enum {
|
|||||||
PROP_NAME,
|
PROP_NAME,
|
||||||
PROP_ALLOWED_SUBSYSTEMS,
|
PROP_ALLOWED_SUBSYSTEMS,
|
||||||
PROP_ALLOWED_DRIVERS,
|
PROP_ALLOWED_DRIVERS,
|
||||||
|
PROP_FORBIDDEN_DRIVERS,
|
||||||
PROP_ALLOWED_VENDOR_IDS,
|
PROP_ALLOWED_VENDOR_IDS,
|
||||||
PROP_ALLOWED_PRODUCT_IDS,
|
PROP_ALLOWED_PRODUCT_IDS,
|
||||||
PROP_ALLOWED_VENDOR_STRINGS,
|
PROP_ALLOWED_VENDOR_STRINGS,
|
||||||
@@ -162,9 +164,10 @@ apply_pre_probing_filters (MMPlugin *self,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The plugin may specify that only some drivers are supported. If that
|
/* The plugin may specify that only some drivers are supported, or that some
|
||||||
* is the case, filter by driver */
|
* drivers are not supported. If that is the case, filter by driver */
|
||||||
if (self->priv->drivers) {
|
if (self->priv->drivers ||
|
||||||
|
self->priv->forbidden_drivers) {
|
||||||
const gchar *driver;
|
const gchar *driver;
|
||||||
|
|
||||||
/* Detect any modems accessible through the list of virtual ports */
|
/* Detect any modems accessible through the list of virtual ports */
|
||||||
@@ -176,6 +179,8 @@ apply_pre_probing_filters (MMPlugin *self,
|
|||||||
if (!driver)
|
if (!driver)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* Filtering by allowed drivers */
|
||||||
|
if (self->priv->drivers) {
|
||||||
for (i = 0; self->priv->drivers[i]; i++) {
|
for (i = 0; self->priv->drivers[i]; i++) {
|
||||||
if (g_str_equal (driver, self->priv->drivers[i]))
|
if (g_str_equal (driver, self->priv->drivers[i]))
|
||||||
break;
|
break;
|
||||||
@@ -185,6 +190,15 @@ apply_pre_probing_filters (MMPlugin *self,
|
|||||||
if (!self->priv->drivers[i])
|
if (!self->priv->drivers[i])
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
/* Filtering by forbidden drivers */
|
||||||
|
else {
|
||||||
|
for (i = 0; self->priv->forbidden_drivers[i]; i++) {
|
||||||
|
/* If we match a forbidden driver: unsupported */
|
||||||
|
if (g_str_equal (driver, self->priv->forbidden_drivers[i]))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vendor = mm_device_get_vendor (device);
|
vendor = mm_device_get_vendor (device);
|
||||||
product = mm_device_get_product (device);
|
product = mm_device_get_product (device);
|
||||||
@@ -614,6 +628,10 @@ set_property (GObject *object,
|
|||||||
/* Construct only */
|
/* Construct only */
|
||||||
self->priv->drivers = g_value_dup_boxed (value);
|
self->priv->drivers = g_value_dup_boxed (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_FORBIDDEN_DRIVERS:
|
||||||
|
/* Construct only */
|
||||||
|
self->priv->forbidden_drivers = g_value_dup_boxed (value);
|
||||||
|
break;
|
||||||
case PROP_ALLOWED_VENDOR_IDS:
|
case PROP_ALLOWED_VENDOR_IDS:
|
||||||
/* Construct only */
|
/* Construct only */
|
||||||
self->priv->vendor_ids = g_value_dup_boxed (value);
|
self->priv->vendor_ids = g_value_dup_boxed (value);
|
||||||
@@ -678,6 +696,9 @@ get_property (GObject *object,
|
|||||||
case PROP_ALLOWED_DRIVERS:
|
case PROP_ALLOWED_DRIVERS:
|
||||||
g_value_set_boxed (value, self->priv->drivers);
|
g_value_set_boxed (value, self->priv->drivers);
|
||||||
break;
|
break;
|
||||||
|
case PROP_FORBIDDEN_DRIVERS:
|
||||||
|
g_value_set_boxed (value, self->priv->forbidden_drivers);
|
||||||
|
break;
|
||||||
case PROP_ALLOWED_VENDOR_IDS:
|
case PROP_ALLOWED_VENDOR_IDS:
|
||||||
g_value_set_boxed (value, self->priv->vendor_ids);
|
g_value_set_boxed (value, self->priv->vendor_ids);
|
||||||
break;
|
break;
|
||||||
@@ -762,6 +783,15 @@ mm_plugin_class_init (MMPluginClass *klass)
|
|||||||
G_TYPE_STRV,
|
G_TYPE_STRV,
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
|
g_object_class_install_property
|
||||||
|
(object_class, PROP_FORBIDDEN_DRIVERS,
|
||||||
|
g_param_spec_boxed (MM_PLUGIN_FORBIDDEN_DRIVERS,
|
||||||
|
"Forbidden drivers",
|
||||||
|
"List of drivers this plugin cannot support, "
|
||||||
|
"should be an array of strings finished with 'NULL'",
|
||||||
|
G_TYPE_STRV,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(object_class, PROP_ALLOWED_VENDOR_IDS,
|
(object_class, PROP_ALLOWED_VENDOR_IDS,
|
||||||
g_param_spec_boxed (MM_PLUGIN_ALLOWED_VENDOR_IDS,
|
g_param_spec_boxed (MM_PLUGIN_ALLOWED_VENDOR_IDS,
|
||||||
|
@@ -40,6 +40,7 @@
|
|||||||
#define MM_PLUGIN_NAME "name"
|
#define MM_PLUGIN_NAME "name"
|
||||||
#define MM_PLUGIN_ALLOWED_SUBSYSTEMS "allowed-subsystems"
|
#define MM_PLUGIN_ALLOWED_SUBSYSTEMS "allowed-subsystems"
|
||||||
#define MM_PLUGIN_ALLOWED_DRIVERS "allowed-drivers"
|
#define MM_PLUGIN_ALLOWED_DRIVERS "allowed-drivers"
|
||||||
|
#define MM_PLUGIN_FORBIDDEN_DRIVERS "forbidden-drivers"
|
||||||
#define MM_PLUGIN_ALLOWED_VENDOR_IDS "allowed-vendor-ids"
|
#define MM_PLUGIN_ALLOWED_VENDOR_IDS "allowed-vendor-ids"
|
||||||
#define MM_PLUGIN_ALLOWED_PRODUCT_IDS "allowed-product-ids"
|
#define MM_PLUGIN_ALLOWED_PRODUCT_IDS "allowed-product-ids"
|
||||||
#define MM_PLUGIN_ALLOWED_VENDOR_STRINGS "allowed-vendor-strings"
|
#define MM_PLUGIN_ALLOWED_VENDOR_STRINGS "allowed-vendor-strings"
|
||||||
|
Reference in New Issue
Block a user