aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/quectel/mm-broadband-modem-mbim-quectel.c61
1 files changed, 56 insertions, 5 deletions
diff --git a/src/plugins/quectel/mm-broadband-modem-mbim-quectel.c b/src/plugins/quectel/mm-broadband-modem-mbim-quectel.c
index ed30e4ab..ab524103 100644
--- a/src/plugins/quectel/mm-broadband-modem-mbim-quectel.c
+++ b/src/plugins/quectel/mm-broadband-modem-mbim-quectel.c
@@ -16,21 +16,25 @@
#include <config.h>
-#include "mm-base-modem-at.h"
-#include "mm-log-object.h"
-#include "mm-iface-modem.h"
+#include "mm-broadband-modem-mbim-quectel.h"
#include "mm-iface-modem-firmware.h"
+#include "mm-iface-modem-location.h"
#include "mm-iface-modem-time.h"
#include "mm-shared-quectel.h"
-#include "mm-modem-helpers-quectel.h"
-#include "mm-broadband-modem-mbim-quectel.h"
+static void iface_modem_init (MMIfaceModem *iface);
static void iface_modem_firmware_init (MMIfaceModemFirmware *iface);
+static void iface_modem_location_init (MMIfaceModemLocation *iface);
static void iface_modem_time_init (MMIfaceModemTime *iface);
static void shared_quectel_init (MMSharedQuectel *iface);
+static MMIfaceModem *iface_modem_parent;
+static MMIfaceModemLocation *iface_modem_location_parent;
+
G_DEFINE_TYPE_EXTENDED (MMBroadbandModemMbimQuectel, mm_broadband_modem_mbim_quectel, MM_TYPE_BROADBAND_MODEM_MBIM, 0,
+ G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_FIRMWARE, iface_modem_firmware_init)
+ G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_LOCATION, iface_modem_location_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_TIME, iface_modem_time_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_SHARED_QUECTEL, shared_quectel_init))
@@ -67,6 +71,16 @@ mm_broadband_modem_mbim_quectel_init (MMBroadbandModemMbimQuectel *self)
}
static void
+iface_modem_init (MMIfaceModem *iface)
+{
+ iface_modem_parent = g_type_interface_peek_parent (iface);
+
+ iface->setup_sim_hot_swap = mm_shared_quectel_setup_sim_hot_swap;
+ iface->setup_sim_hot_swap_finish = mm_shared_quectel_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = mm_shared_quectel_cleanup_sim_hot_swap;
+}
+
+static void
iface_modem_firmware_init (MMIfaceModemFirmware *iface)
{
iface->load_update_settings = mm_shared_quectel_firmware_load_update_settings;
@@ -74,18 +88,55 @@ iface_modem_firmware_init (MMIfaceModemFirmware *iface)
}
static void
+iface_modem_location_init (MMIfaceModemLocation *iface)
+{
+ iface_modem_location_parent = g_type_interface_peek_parent (iface);
+
+ iface->load_capabilities = mm_shared_quectel_location_load_capabilities;
+ iface->load_capabilities_finish = mm_shared_quectel_location_load_capabilities_finish;
+ iface->enable_location_gathering = mm_shared_quectel_enable_location_gathering;
+ iface->enable_location_gathering_finish = mm_shared_quectel_enable_location_gathering_finish;
+ iface->disable_location_gathering = mm_shared_quectel_disable_location_gathering;
+ iface->disable_location_gathering_finish = mm_shared_quectel_disable_location_gathering_finish;
+}
+
+static void
iface_modem_time_init (MMIfaceModemTime *iface)
{
iface->check_support = mm_shared_quectel_time_check_support;
iface->check_support_finish = mm_shared_quectel_time_check_support_finish;
}
+static MMIfaceModem *
+peek_parent_modem_interface (MMSharedQuectel *self)
+{
+ return iface_modem_parent;
+}
+
+static MMIfaceModemLocation *
+peek_parent_modem_location_interface (MMSharedQuectel *self)
+{
+ return iface_modem_location_parent;
+}
+
+static MMBroadbandModemClass *
+peek_parent_broadband_modem_class (MMSharedQuectel *self)
+{
+ return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_mbim_quectel_parent_class);
+}
+
static void
shared_quectel_init (MMSharedQuectel *iface)
{
+ iface->peek_parent_modem_interface = peek_parent_modem_interface;
+ iface->peek_parent_modem_location_interface = peek_parent_modem_location_interface;
+ iface->peek_parent_broadband_modem_class = peek_parent_broadband_modem_class;
}
static void
mm_broadband_modem_mbim_quectel_class_init (MMBroadbandModemMbimQuectelClass *klass)
{
+ MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
+
+ broadband_modem_class->setup_ports = mm_shared_quectel_setup_ports;
}