quectel: implement shared quectel logic in MBIM modem

This commit is contained in:
Aleksander Morgado
2024-03-13 03:57:57 +00:00
committed by Dan Williams
parent 87fb47b9ab
commit 306566ad7e
@@ -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))
@@ -66,6 +70,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)
{
@@ -73,6 +87,19 @@ iface_modem_firmware_init (MMIfaceModemFirmware *iface)
iface->load_update_settings_finish = mm_shared_quectel_firmware_load_update_settings_finish;
}
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)
{
@@ -80,12 +107,36 @@ iface_modem_time_init (MMIfaceModemTime *iface)
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;
}