diff --git a/plugins/vli/fu-vli-device.c b/plugins/vli/fu-vli-device.c index 2482f98c2..927d931c1 100644 --- a/plugins/vli/fu-vli-device.c +++ b/plugins/vli/fu-vli-device.c @@ -24,6 +24,12 @@ G_DEFINE_TYPE_WITH_PRIVATE (FuVliDevice, fu_vli_device, FU_TYPE_USB_DEVICE) #define GET_PRIVATE(o) (fu_vli_device_get_instance_private (o)) +enum { + PROP_0, + PROP_KIND, + PROP_LAST +}; + static const gchar * fu_vli_device_spi_req_to_string (FuVliDeviceSpiReq req) { @@ -428,7 +434,11 @@ fu_vli_device_set_kind (FuVliDevice *self, FuVliDeviceKind device_kind) FuVliDevicePrivate *priv = GET_PRIVATE (self); guint32 sz; - priv->kind = device_kind; + /* set and notify if different */ + if (priv->kind != device_kind) { + priv->kind = device_kind; + g_object_notify (G_OBJECT (self), "kind"); + } /* set maximum firmware size */ sz = fu_vli_common_device_kind_get_size (device_kind); @@ -620,6 +630,35 @@ fu_vli_device_set_quirk_kv (FuDevice *device, return FALSE; } +static void +fu_vli_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + FuVliDevice *self = FU_VLI_DEVICE (object); + FuVliDevicePrivate *priv = GET_PRIVATE (self); + switch (prop_id) { + case PROP_KIND: + g_value_set_uint (value, priv->kind); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +fu_vli_device_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + FuVliDevice *self = FU_VLI_DEVICE (object); + switch (prop_id) { + case PROP_KIND: + fu_vli_device_set_kind (self, g_value_get_uint (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void fu_vli_device_init (FuVliDevice *self) { @@ -640,6 +679,18 @@ static void fu_vli_device_class_init (FuVliDeviceClass *klass) { FuDeviceClass *klass_device = FU_DEVICE_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GParamSpec *pspec; + + /* properties */ + object_class->get_property = fu_vli_device_get_property; + object_class->set_property = fu_vli_device_set_property; + pspec = g_param_spec_uint ("kind", NULL, NULL, + 0, G_MAXUINT, 0, + G_PARAM_READWRITE | + G_PARAM_STATIC_NAME); + g_object_class_install_property (object_class, PROP_KIND, pspec); + klass_device->to_string = fu_vli_device_to_string; klass_device->set_quirk_kv = fu_vli_device_set_quirk_kv; klass_device->setup = fu_vli_device_setup;