aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dan@ioncontrol.co>2025-05-01 07:59:38 -0500
committerDan Williams <dan@ioncontrol.co>2025-05-08 20:08:06 -0500
commit1fa21fcc48b271a8dc2191104e35bf4e95fa2331 (patch)
treecf209fc07098e68c65dca219fee38a826dbcbf1a
parentec5104c9a87a440bb791987ffe05e53bf235ae02 (diff)
base-cbm,cbm-list,iface-cbm: remove usage of MMBaseModem
CBM isn't as complicated as SMS, and the CBM class itself doesn't need to be overridden by QMI/MBIM/etc. Now that the log parent and connection binding no longer require MMBaseModem we can flatten the CBM object creation and remove usage of MMBaseModem. Signed-off-by: Dan Williams <dan@ioncontrol.co>
-rw-r--r--src/mm-base-cbm.c33
-rw-r--r--src/mm-base-cbm.h7
-rw-r--r--src/mm-broadband-modem-qmi.c38
-rw-r--r--src/mm-broadband-modem.c30
-rw-r--r--src/mm-cbm-list.c6
-rw-r--r--src/mm-cbm-list.h1
-rw-r--r--src/mm-iface-modem-cell-broadcast.c24
-rw-r--r--src/mm-iface-modem-cell-broadcast.h10
8 files changed, 45 insertions, 104 deletions
diff --git a/src/mm-base-cbm.c b/src/mm-base-cbm.c
index af02120e..59b9e49a 100644
--- a/src/mm-base-cbm.c
+++ b/src/mm-base-cbm.c
@@ -25,12 +25,7 @@
#include <libmm-glib.h>
#include "mm-base-cbm.h"
-#include "mm-broadband-modem.h"
-#include "mm-iface-modem.h"
-#include "mm-iface-modem-cell-broadcast.h"
#include "mm-cbm-part.h"
-#include "mm-base-modem-at.h"
-#include "mm-base-modem.h"
#include "mm-log-object.h"
#include "mm-modem-helpers.h"
#include "mm-error-helpers.h"
@@ -48,7 +43,6 @@ enum {
PROP_PATH,
PROP_CONNECTION,
PROP_BIND_TO,
- PROP_MODEM,
PROP_MAX_PARTS,
PROP_SERIAL,
PROP_LAST
@@ -64,8 +58,6 @@ struct _MMBaseCbmPrivate {
/* The object this CBM is bound to */
GObject *bind_to;
- /* The modem which owns this CBM */
- MMBaseModem *modem;
/* The path where the CBM object is exported */
gchar *path;
@@ -330,17 +322,15 @@ mm_base_cbm_take_part (MMBaseCbm *self,
}
MMBaseCbm *
-mm_base_cbm_new (MMBaseModem *modem,
- GObject *bind_to)
+mm_base_cbm_new (GObject *bind_to)
{
return MM_BASE_CBM (g_object_new (MM_TYPE_BASE_CBM,
- MM_BASE_CBM_MODEM, modem,
MM_BIND_TO, bind_to,
NULL));
}
MMBaseCbm *
-mm_base_cbm_new_with_part (MMBaseModem *modem,
+mm_base_cbm_new_with_part (GObject *bind_to,
MMCbmState state,
guint max_parts,
MMCbmPart *first_part,
@@ -348,13 +338,11 @@ mm_base_cbm_new_with_part (MMBaseModem *modem,
{
MMBaseCbm *self;
- g_assert (MM_IS_IFACE_MODEM_CELL_BROADCAST (modem));
-
if (state == MM_CBM_STATE_RECEIVED)
state = MM_CBM_STATE_RECEIVING;
/* Create a CBM object as defined by the interface */
- self = mm_iface_modem_cell_broadcast_create_cbm (MM_IFACE_MODEM_CELL_BROADCAST (modem));
+ self = mm_base_cbm_new (bind_to);
g_object_set (self,
MM_BASE_CBM_MAX_PARTS, max_parts,
"state", state,
@@ -419,10 +407,6 @@ set_property (GObject *object,
self->priv->bind_to = g_value_dup_object (value);
mm_bind_to (MM_BIND (self), MM_BASE_CBM_CONNECTION, self->priv->bind_to);
break;
- case PROP_MODEM:
- g_clear_object (&self->priv->modem);
- self->priv->modem = g_value_dup_object (value);
- break;
case PROP_MAX_PARTS:
self->priv->max_parts = g_value_get_uint (value);
break;
@@ -453,9 +437,6 @@ get_property (GObject *object,
case PROP_BIND_TO:
g_value_set_object (value, self->priv->bind_to);
break;
- case PROP_MODEM:
- g_value_set_object (value, self->priv->modem);
- break;
case PROP_MAX_PARTS:
g_value_set_uint (value, self->priv->max_parts);
break;
@@ -504,7 +485,6 @@ dispose (GObject *object)
g_clear_object (&self->priv->connection);
}
- g_clear_object (&self->priv->modem);
g_clear_object (&self->priv->bind_to);
G_OBJECT_CLASS (mm_base_cbm_parent_class)->dispose (object);
@@ -550,13 +530,6 @@ mm_base_cbm_class_init (MMBaseCbmClass *klass)
g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO);
- properties[PROP_MODEM] =
- g_param_spec_object (MM_BASE_CBM_MODEM,
- "Modem",
- "The Modem which owns this CBM",
- MM_TYPE_BASE_MODEM,
- G_PARAM_READWRITE);
-
properties[PROP_MAX_PARTS] =
g_param_spec_uint (MM_BASE_CBM_MAX_PARTS,
"Max parts",
diff --git a/src/mm-base-cbm.h b/src/mm-base-cbm.h
index 08dcd3ae..8a4b2e73 100644
--- a/src/mm-base-cbm.h
+++ b/src/mm-base-cbm.h
@@ -23,7 +23,6 @@
#include <libmm-glib.h>
#include "mm-cbm-part.h"
-#include "mm-base-modem.h"
/*****************************************************************************/
@@ -40,7 +39,6 @@ typedef struct _MMBaseCbmPrivate MMBaseCbmPrivate;
#define MM_BASE_CBM_PATH "cbm-path"
#define MM_BASE_CBM_CONNECTION "cbm-connection"
-#define MM_BASE_CBM_MODEM "cbm-modem"
#define MM_BASE_CBM_MAX_PARTS "cbm-max-parts"
#define MM_BASE_CBM_SERIAL "cbm-serial"
@@ -56,12 +54,11 @@ struct _MMBaseCbmClass {
GType mm_base_cbm_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseCbm, g_object_unref)
-MMBaseCbm *mm_base_cbm_new (MMBaseModem *modem,
- GObject *bind_to);
+MMBaseCbm *mm_base_cbm_new (GObject *bind_to);
gboolean mm_base_cbm_take_part (MMBaseCbm *self,
MMCbmPart *part,
GError **error);
-MMBaseCbm *mm_base_cbm_new_with_part (MMBaseModem *modem,
+MMBaseCbm *mm_base_cbm_new_with_part (GObject *bind_to,
MMCbmState state,
guint max_parts,
MMCbmPart *first_part,
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index bd79ceca..a2609277 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -10959,7 +10959,7 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self,
GArray *data)
{
MMCbmPart *part = NULL;
- GError *error = NULL;
+ g_autoptr(GError) error = NULL;
switch (format) {
/* Cell Broadcasts need to be broadcast messages */
@@ -10968,6 +10968,10 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self,
data->len,
self,
&error);
+ if (error) {
+ /* Don't treat the error as critical */
+ mm_obj_dbg (self, "error parsing PDU: %s", error->message);
+ }
break;
case QMI_WMS_MESSAGE_FORMAT_MWI:
case QMI_WMS_MESSAGE_FORMAT_GSM_WCDMA_POINT_TO_POINT:
@@ -10979,13 +10983,14 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self,
if (part) {
mm_obj_dbg (self, "correctly parsed PDU");
- mm_iface_modem_cell_broadcast_take_part (self,
- part,
- mm_cbm_state_from_qmi_message_tag (tag));
- } else if (error) {
- /* Don't treat the error as critical */
- mm_obj_dbg (self, "error parsing PDU: %s", error->message);
- g_error_free (error);
+ if (!mm_iface_modem_cell_broadcast_take_part (self,
+ G_OBJECT (self),
+ part,
+ mm_cbm_state_from_qmi_message_tag (tag),
+ &error)) {
+ /* Don't treat the error as critical */
+ mm_obj_dbg (self, "error adding CBM: %s", error->message);
+ }
}
}
@@ -11538,22 +11543,6 @@ cell_broadcast_set_channels (MMIfaceModemCellBroadcast *_self,
}
/*****************************************************************************/
-/* Create CBM (CellBroadcast interface) */
-
-static MMBaseCbm *
-cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *_self)
-{
- MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
-
- /* Handle AT URC only fallback */
- if (self->priv->cell_broadcast_fallback_at_only) {
- return iface_modem_cell_broadcast_parent->create_cbm (_self);
- }
-
- return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self));
-}
-
-/*****************************************************************************/
/* Check support (Voice interface) */
static gboolean
@@ -15316,7 +15305,6 @@ iface_modem_cell_broadcast_init (MMIfaceModemCellBroadcastInterface *iface)
iface->cleanup_unsolicited_events_finish = cell_broadcast_cleanup_unsolicited_events_finish;
iface->set_channels = cell_broadcast_set_channels;
iface->set_channels_finish = cell_broadcast_set_channels_finish;
- iface->create_cbm = cell_broadcast_create_cbm;
}
static void
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 2ccde45e..16d579c7 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -10606,7 +10606,7 @@ cbc_cbm_received (MMPortSerialAt *port,
GMatchInfo *info,
MMBroadbandModem *self)
{
- GError *error = NULL;
+ g_autoptr(GError) error = NULL;
MMCbmPart *part;
guint length;
gchar *pdu;
@@ -10621,15 +10621,19 @@ cbc_cbm_received (MMPortSerialAt *port,
return;
part = mm_cbm_part_new_from_pdu (pdu, self, &error);
- if (part) {
- mm_obj_dbg (self, "correctly parsed PDU");
- mm_iface_modem_cell_broadcast_take_part (MM_IFACE_MODEM_CELL_BROADCAST (self),
- part,
- MM_CBM_STATE_RECEIVED);
- } else {
+ if (!part) {
/* Don't treat the error as critical */
mm_obj_dbg (self, "error parsing PDU: %s", error->message);
- g_error_free (error);
+ } else {
+ mm_obj_dbg (self, "correctly parsed PDU");
+ if (!mm_iface_modem_cell_broadcast_take_part (MM_IFACE_MODEM_CELL_BROADCAST (self),
+ G_OBJECT (self),
+ part,
+ MM_CBM_STATE_RECEIVED,
+ &error)) {
+ /* Don't treat the error as critical */
+ mm_obj_dbg (self, "error adding CBM: %s", error->message);
+ }
}
}
@@ -10686,15 +10690,6 @@ modem_cell_broadcast_cleanup_unsolicited_events (MMIfaceModemCellBroadcast *self
set_cell_broadcast_unsolicited_events_handlers (self, FALSE, callback, user_data);
}
-/*****************************************************************************/
-/* Create CBM (CellBroadcast interface) */
-
-static MMBaseCbm *
-modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self)
-{
- return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self));
-}
-
/***********************************************************************************/
/* Get channels (CellBroadcast interface) */
@@ -14507,7 +14502,6 @@ iface_modem_cell_broadcast_init (MMIfaceModemCellBroadcastInterface *iface)
iface->cleanup_unsolicited_events_finish = modem_cell_broadcast_setup_cleanup_unsolicited_events_finish;
iface->set_channels = modem_cell_broadcast_set_channels;
iface->set_channels_finish = modem_cell_broadcast_set_channels_finish;
- iface->create_cbm = modem_cell_broadcast_create_cbm;
}
static void
diff --git a/src/mm-cbm-list.c b/src/mm-cbm-list.c
index 02d91bdc..571c6c74 100644
--- a/src/mm-cbm-list.c
+++ b/src/mm-cbm-list.c
@@ -179,6 +179,7 @@ cmp_cbm_by_serial_and_id (MMBaseCbm *cbm,
static gboolean
take_part (MMCbmList *self,
+ GObject *bind_to,
MMCbmPart *part,
MMCbmState state,
GError **error)
@@ -202,7 +203,7 @@ take_part (MMCbmList *self,
}
/* Create new cbm */
- cbm = mm_base_cbm_new_with_part (self->priv->modem,
+ cbm = mm_base_cbm_new_with_part (bind_to,
state,
mm_cbm_part_get_num_parts (part),
part,
@@ -256,6 +257,7 @@ mm_cbm_list_has_part (MMCbmList *self,
gboolean
mm_cbm_list_take_part (MMCbmList *self,
+ GObject *bind_to,
MMCbmPart *part,
MMCbmState state,
GError **error)
@@ -275,7 +277,7 @@ mm_cbm_list_take_part (MMCbmList *self,
return FALSE;
}
- return take_part (self, part, state, error);
+ return take_part (self, bind_to, part, state, error);
}
/*****************************************************************************/
diff --git a/src/mm-cbm-list.h b/src/mm-cbm-list.h
index 2c493659..479c3630 100644
--- a/src/mm-cbm-list.h
+++ b/src/mm-cbm-list.h
@@ -69,6 +69,7 @@ gboolean mm_cbm_list_has_part (MMCbmList *self,
guint8 part_num);
gboolean mm_cbm_list_take_part (MMCbmList *self,
+ GObject *bind_to,
MMCbmPart *part,
MMCbmState state,
GError **error);
diff --git a/src/mm-iface-modem-cell-broadcast.c b/src/mm-iface-modem-cell-broadcast.c
index d6fdbdfe..32a77535 100644
--- a/src/mm-iface-modem-cell-broadcast.c
+++ b/src/mm-iface-modem-cell-broadcast.c
@@ -275,16 +275,6 @@ handle_list (MmGdbusModemCellBroadcast *skeleton,
/*****************************************************************************/
-MMBaseCbm *
-mm_iface_modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self)
-{
- g_assert (MM_IFACE_MODEM_CELL_BROADCAST_GET_IFACE (self)->create_cbm != NULL);
-
- return MM_IFACE_MODEM_CELL_BROADCAST_GET_IFACE (self)->create_cbm (self);
-}
-
-/*****************************************************************************/
-
typedef struct _InitializationContext InitializationContext;
static void interface_initialization_step (GTask *task);
@@ -742,22 +732,22 @@ mm_iface_modem_cell_broadcast_enable (MMIfaceModemCellBroadcast *self,
/*****************************************************************************/
gboolean
-mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self,
- MMCbmPart *cbm_part,
- MMCbmState state)
+mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self,
+ GObject *bind_to,
+ MMCbmPart *cbm_part,
+ MMCbmState state,
+ GError **error)
{
g_autoptr(MMCbmList) list = NULL;
- g_autoptr(GError) error = NULL;
gboolean added = FALSE;
g_object_get (self,
MM_IFACE_MODEM_CELL_BROADCAST_CBM_LIST, &list,
NULL);
-
if (list) {
- added = mm_cbm_list_take_part (list, cbm_part, state, &error);
+ added = mm_cbm_list_take_part (list, bind_to, cbm_part, state, error);
if (!added)
- mm_obj_dbg (self, "Can't take part in CBM list: %s", error->message);
+ g_prefix_error (error, "couldn't take part in CBM list: ");
}
/* If part wasn't taken, we need to free the part ourselves */
diff --git a/src/mm-iface-modem-cell-broadcast.h b/src/mm-iface-modem-cell-broadcast.h
index 32170b7b..c8bfc5b6 100644
--- a/src/mm-iface-modem-cell-broadcast.h
+++ b/src/mm-iface-modem-cell-broadcast.h
@@ -83,9 +83,6 @@ struct _MMIfaceModemCellBroadcastInterface {
GAsyncReadyCallback callback,
gpointer user_data);
- /* Create Cbm objects */
- MMBaseCbm * (* create_cbm) (MMIfaceModemCellBroadcast *self);
-
/* Set channel list */
void (* set_channels) (MMIfaceModemCellBroadcast *self,
GArray *channels,
@@ -129,10 +126,9 @@ void mm_iface_modem_cell_broadcast_bind_simple_status (MMIfaceModemCellBroadcast
/* Report new CBM part */
gboolean mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self,
+ GObject *bind_to,
MMCbmPart *cbm_part,
- MMCbmState state);
-
-/* CBM creation */
-MMBaseCbm *mm_iface_modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self);
+ MMCbmState state,
+ GError **error);
#endif /* MM_IFACE_MODEM_CELLBROADCAST_H */