iface-modem: implement property binding for the simple status
This commit is contained in:
@@ -33,6 +33,39 @@ static void interface_enabling_step (EnablingContext *ctx);
|
|||||||
typedef struct _DisablingContext DisablingContext;
|
typedef struct _DisablingContext DisablingContext;
|
||||||
static void interface_disabling_step (DisablingContext *ctx);
|
static void interface_disabling_step (DisablingContext *ctx);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
mm_iface_modem_bind_simple_status (MMIfaceModem *self,
|
||||||
|
MMCommonSimpleProperties *status)
|
||||||
|
{
|
||||||
|
MmGdbusModem *skeleton;
|
||||||
|
|
||||||
|
g_object_get (self,
|
||||||
|
MM_IFACE_MODEM_DBUS_SKELETON, &skeleton,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_bind_property (skeleton, "state",
|
||||||
|
status, MM_COMMON_SIMPLE_PROPERTY_STATE,
|
||||||
|
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||||
|
|
||||||
|
g_object_bind_property (skeleton, "signal-quality",
|
||||||
|
status, MM_COMMON_SIMPLE_PROPERTY_SIGNAL_QUALITY,
|
||||||
|
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||||
|
|
||||||
|
g_object_bind_property (skeleton, "allowed-bands",
|
||||||
|
status, MM_COMMON_SIMPLE_PROPERTY_BANDS,
|
||||||
|
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||||
|
|
||||||
|
g_object_bind_property (skeleton, "access-technologies",
|
||||||
|
status, MM_COMMON_SIMPLE_PROPERTY_ACCESS_TECHNOLOGIES,
|
||||||
|
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||||
|
|
||||||
|
g_object_unref (skeleton);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MmGdbusModem *skeleton;
|
MmGdbusModem *skeleton;
|
||||||
GDBusMethodInvocation *invocation;
|
GDBusMethodInvocation *invocation;
|
||||||
@@ -1202,13 +1235,13 @@ signal_quality_check_ready (MMIfaceModem *self,
|
|||||||
else {
|
else {
|
||||||
GVariant *result;
|
GVariant *result;
|
||||||
|
|
||||||
result = g_variant_new ("(ub)", quality, is_recent);
|
result = g_variant_ref_sink (g_variant_new ("(ub)", quality, is_recent));
|
||||||
/* Set operation result */
|
/* Set operation result */
|
||||||
g_simple_async_result_set_op_res_gpointer (ctx->result,
|
g_simple_async_result_set_op_res_gpointer (ctx->result,
|
||||||
g_variant_ref (result),
|
g_variant_ref (result),
|
||||||
(GDestroyNotify)g_variant_unref);
|
(GDestroyNotify)g_variant_unref);
|
||||||
/* Set the property value in the DBus skeleton */
|
/* Set the property value in the DBus skeleton */
|
||||||
mm_gdbus_modem_set_signal_quality (ctx->skeleton, g_variant_ref (result));
|
mm_gdbus_modem_set_signal_quality (ctx->skeleton, result);
|
||||||
g_variant_unref (result);
|
g_variant_unref (result);
|
||||||
}
|
}
|
||||||
g_simple_async_result_complete (ctx->result);
|
g_simple_async_result_complete (ctx->result);
|
||||||
@@ -1923,13 +1956,13 @@ load_supported_bands_ready (MMIfaceModem *self,
|
|||||||
|
|
||||||
bands_array = MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_bands_finish (self, res, &error);
|
bands_array = MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_bands_finish (self, res, &error);
|
||||||
|
|
||||||
/* We have the property in the interface bound to the property in the
|
if (bands_array) {
|
||||||
* skeleton. */
|
mm_gdbus_modem_set_supported_bands (ctx->skeleton,
|
||||||
g_object_set (self,
|
mm_common_bands_garray_to_variant (bands_array));
|
||||||
MM_IFACE_MODEM_CURRENT_CAPABILITIES,
|
mm_gdbus_modem_set_allowed_bands (ctx->skeleton,
|
||||||
mm_common_bands_garray_to_variant (bands_array),
|
mm_common_bands_garray_to_variant (bands_array));
|
||||||
NULL);
|
g_array_unref (bands_array);
|
||||||
g_array_unref (bands_array);
|
}
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
mm_warn ("couldn't load Supported Bands: '%s'", error->message);
|
mm_warn ("couldn't load Supported Bands: '%s'", error->message);
|
||||||
@@ -2272,21 +2305,36 @@ interface_initialization_step (InitializationContext *ctx)
|
|||||||
/* Fall down to next step */
|
/* Fall down to next step */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
|
|
||||||
case INITIALIZATION_STEP_SUPPORTED_BANDS:
|
case INITIALIZATION_STEP_SUPPORTED_BANDS: {
|
||||||
|
GArray *supported_bands;
|
||||||
|
|
||||||
|
supported_bands = (mm_common_bands_variant_to_garray (
|
||||||
|
mm_gdbus_modem_get_supported_bands (ctx->skeleton)));
|
||||||
|
|
||||||
/* Supported bands are meant to be loaded only once during the whole
|
/* Supported bands are meant to be loaded only once during the whole
|
||||||
* lifetime of the modem. Therefore, if we already have them loaded,
|
* lifetime of the modem. Therefore, if we already have them loaded,
|
||||||
* don't try to load them again. */
|
* don't try to load them again. */
|
||||||
if (mm_gdbus_modem_get_supported_bands (ctx->skeleton) == MM_MODEM_BAND_UNKNOWN &&
|
if (supported_bands->len == 0 ||
|
||||||
MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands &&
|
g_array_index (supported_bands, MMModemBand, 0) == MM_MODEM_BAND_UNKNOWN) {
|
||||||
MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands_finish) {
|
if (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands &&
|
||||||
MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands (
|
MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands_finish) {
|
||||||
ctx->self,
|
MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_bands (
|
||||||
(GAsyncReadyCallback)load_supported_bands_ready,
|
ctx->self,
|
||||||
ctx);
|
(GAsyncReadyCallback)load_supported_bands_ready,
|
||||||
return;
|
ctx);
|
||||||
|
g_array_unref (supported_bands);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Loading supported bands not implemented, default to ANY */
|
||||||
|
mm_gdbus_modem_set_supported_bands (ctx->skeleton, mm_common_build_bands_any ());
|
||||||
|
mm_gdbus_modem_set_allowed_bands (ctx->skeleton, mm_common_build_bands_any ());
|
||||||
}
|
}
|
||||||
|
g_array_unref (supported_bands);
|
||||||
|
|
||||||
/* Fall down to next step */
|
/* Fall down to next step */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
|
}
|
||||||
|
|
||||||
case INITIALIZATION_STEP_LAST:
|
case INITIALIZATION_STEP_LAST:
|
||||||
/* We are done without errors! */
|
/* We are done without errors! */
|
||||||
@@ -2348,28 +2396,6 @@ mm_iface_modem_initialize_finish (MMIfaceModem *self,
|
|||||||
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GVariant *
|
|
||||||
build_bands_unknown (void)
|
|
||||||
{
|
|
||||||
GVariantBuilder builder;
|
|
||||||
|
|
||||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
|
|
||||||
g_variant_builder_add_value (&builder,
|
|
||||||
g_variant_new_uint32 (MM_MODEM_BAND_UNKNOWN));
|
|
||||||
return g_variant_builder_end (&builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GVariant *
|
|
||||||
build_bands_any (void)
|
|
||||||
{
|
|
||||||
GVariantBuilder builder;
|
|
||||||
|
|
||||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
|
|
||||||
g_variant_builder_add_value (&builder,
|
|
||||||
g_variant_new_uint32 (MM_MODEM_BAND_ANY));
|
|
||||||
return g_variant_builder_end (&builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
mm_iface_modem_initialize (MMIfaceModem *self,
|
mm_iface_modem_initialize (MMIfaceModem *self,
|
||||||
MMAtSerialPort *port,
|
MMAtSerialPort *port,
|
||||||
@@ -2407,8 +2433,8 @@ mm_iface_modem_initialize (MMIfaceModem *self,
|
|||||||
mm_gdbus_modem_set_supported_modes (skeleton, MM_MODEM_MODE_NONE);
|
mm_gdbus_modem_set_supported_modes (skeleton, MM_MODEM_MODE_NONE);
|
||||||
mm_gdbus_modem_set_allowed_modes (skeleton, MM_MODEM_MODE_ANY);
|
mm_gdbus_modem_set_allowed_modes (skeleton, MM_MODEM_MODE_ANY);
|
||||||
mm_gdbus_modem_set_preferred_mode (skeleton, MM_MODEM_MODE_NONE);
|
mm_gdbus_modem_set_preferred_mode (skeleton, MM_MODEM_MODE_NONE);
|
||||||
mm_gdbus_modem_set_supported_bands (skeleton, build_bands_unknown ());
|
mm_gdbus_modem_set_supported_bands (skeleton, mm_common_build_bands_unknown ());
|
||||||
mm_gdbus_modem_set_allowed_bands (skeleton, build_bands_any ());
|
mm_gdbus_modem_set_allowed_bands (skeleton, mm_common_build_bands_unknown ());
|
||||||
|
|
||||||
/* Bind our State property */
|
/* Bind our State property */
|
||||||
g_object_bind_property (self, MM_IFACE_MODEM_STATE,
|
g_object_bind_property (self, MM_IFACE_MODEM_STATE,
|
||||||
|
@@ -333,4 +333,7 @@ MMBearer *mm_iface_modem_create_bearer_finish (MMIfaceModem *self,
|
|||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
void mm_iface_modem_bind_simple_status (MMIfaceModem *self,
|
||||||
|
MMCommonSimpleProperties *status);
|
||||||
|
|
||||||
#endif /* MM_IFACE_MODEM_H */
|
#endif /* MM_IFACE_MODEM_H */
|
||||||
|
Reference in New Issue
Block a user