diff options
Diffstat (limited to 'plugins/cinterion/mm-broadband-modem-qmi-cinterion.c')
-rw-r--r-- | plugins/cinterion/mm-broadband-modem-qmi-cinterion.c | 128 |
1 files changed, 102 insertions, 26 deletions
diff --git a/plugins/cinterion/mm-broadband-modem-qmi-cinterion.c b/plugins/cinterion/mm-broadband-modem-qmi-cinterion.c index 05f92e4f..c3f5e05c 100644 --- a/plugins/cinterion/mm-broadband-modem-qmi-cinterion.c +++ b/plugins/cinterion/mm-broadband-modem-qmi-cinterion.c @@ -25,26 +25,29 @@ #include "ModemManager.h" #include "mm-log.h" #include "mm-errors-types.h" +#include "mm-iface-modem.h" #include "mm-iface-modem-location.h" +#include "mm-iface-modem-voice.h" #include "mm-broadband-modem-qmi-cinterion.h" -#include "mm-common-cinterion.h" +#include "mm-shared-cinterion.h" +static void iface_modem_init (MMIfaceModem *iface); static void iface_modem_location_init (MMIfaceModemLocation *iface); +static void iface_modem_voice_init (MMIfaceModemVoice *iface); +static void iface_modem_time_init (MMIfaceModemTime *iface); +static void shared_cinterion_init (MMSharedCinterion *iface); -G_DEFINE_TYPE_EXTENDED (MMBroadbandModemQmiCinterion, mm_broadband_modem_qmi_cinterion, MM_TYPE_BROADBAND_MODEM_QMI, 0, - G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_LOCATION, iface_modem_location_init)) - -/*****************************************************************************/ -/* Setup ports (Broadband modem class) */ - -static void -setup_ports (MMBroadbandModem *self) -{ - /* Call parent's setup ports first always */ - MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_qmi_cinterion_parent_class)->setup_ports (self); +static MMIfaceModem *iface_modem_parent; +static MMIfaceModemLocation *iface_modem_location_parent; +static MMIfaceModemVoice *iface_modem_voice_parent; +static MMIfaceModemTime *iface_modem_time_parent; - mm_common_cinterion_setup_gps_port (self); -} +G_DEFINE_TYPE_EXTENDED (MMBroadbandModemQmiCinterion, mm_broadband_modem_qmi_cinterion, MM_TYPE_BROADBAND_MODEM_QMI, 0, + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_LOCATION, iface_modem_location_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_VOICE, iface_modem_voice_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_TIME, iface_modem_time_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_SHARED_CINTERION, shared_cinterion_init)) /*****************************************************************************/ @@ -61,6 +64,11 @@ mm_broadband_modem_qmi_cinterion_new (const gchar *device, MM_BASE_MODEM_PLUGIN, plugin, MM_BASE_MODEM_VENDOR_ID, vendor_id, MM_BASE_MODEM_PRODUCT_ID, product_id, + /* QMI bearer supports NET only */ + MM_BASE_MODEM_DATA_NET_SUPPORTED, TRUE, + MM_BASE_MODEM_DATA_TTY_SUPPORTED, FALSE, + MM_IFACE_MODEM_SIM_HOT_SWAP_SUPPORTED, TRUE, + MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED, FALSE, NULL); } @@ -70,23 +78,91 @@ mm_broadband_modem_qmi_cinterion_init (MMBroadbandModemQmiCinterion *self) } static void +iface_modem_init (MMIfaceModem *iface) +{ + iface_modem_parent = g_type_interface_peek_parent (iface); + + iface->reset = mm_shared_cinterion_modem_reset; + iface->reset_finish = mm_shared_cinterion_modem_reset_finish; +} + +static MMIfaceModem * +peek_parent_interface (MMSharedCinterion *self) +{ + return iface_modem_parent; +} + +static void iface_modem_location_init (MMIfaceModemLocation *iface) { - mm_common_cinterion_peek_parent_location_interface (iface); - - iface->load_capabilities = mm_common_cinterion_location_load_capabilities; - iface->load_capabilities_finish = mm_common_cinterion_location_load_capabilities_finish; - iface->enable_location_gathering = mm_common_cinterion_enable_location_gathering; - iface->enable_location_gathering_finish = mm_common_cinterion_enable_location_gathering_finish; - iface->disable_location_gathering = mm_common_cinterion_disable_location_gathering; - iface->disable_location_gathering_finish = mm_common_cinterion_disable_location_gathering_finish; + iface_modem_location_parent = g_type_interface_peek_parent (iface); + + iface->load_capabilities = mm_shared_cinterion_location_load_capabilities; + iface->load_capabilities_finish = mm_shared_cinterion_location_load_capabilities_finish; + iface->enable_location_gathering = mm_shared_cinterion_enable_location_gathering; + iface->enable_location_gathering_finish = mm_shared_cinterion_enable_location_gathering_finish; + iface->disable_location_gathering = mm_shared_cinterion_disable_location_gathering; + iface->disable_location_gathering_finish = mm_shared_cinterion_disable_location_gathering_finish; +} + +static MMIfaceModemLocation * +peek_parent_location_interface (MMSharedCinterion *self) +{ + return iface_modem_location_parent; } static void -mm_broadband_modem_qmi_cinterion_class_init (MMBroadbandModemQmiCinterionClass *klass) +iface_modem_voice_init (MMIfaceModemVoice *iface) { - MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass); + iface_modem_voice_parent = g_type_interface_peek_parent (iface); - /* Virtual methods */ - broadband_modem_class->setup_ports = setup_ports; + iface->create_call = mm_shared_cinterion_create_call; + + iface->check_support = mm_shared_cinterion_voice_check_support; + iface->check_support_finish = mm_shared_cinterion_voice_check_support_finish; + iface->enable_unsolicited_events = mm_shared_cinterion_voice_enable_unsolicited_events; + iface->enable_unsolicited_events_finish = mm_shared_cinterion_voice_enable_unsolicited_events_finish; + iface->disable_unsolicited_events = mm_shared_cinterion_voice_disable_unsolicited_events; + iface->disable_unsolicited_events_finish = mm_shared_cinterion_voice_disable_unsolicited_events_finish; + iface->setup_unsolicited_events = mm_shared_cinterion_voice_setup_unsolicited_events; + iface->setup_unsolicited_events_finish = mm_shared_cinterion_voice_setup_unsolicited_events_finish; + iface->cleanup_unsolicited_events = mm_shared_cinterion_voice_cleanup_unsolicited_events; + iface->cleanup_unsolicited_events_finish = mm_shared_cinterion_voice_cleanup_unsolicited_events_finish; +} + +static MMIfaceModemVoice * +peek_parent_voice_interface (MMSharedCinterion *self) +{ + return iface_modem_voice_parent; +} + +static void +iface_modem_time_init (MMIfaceModemTime *iface) +{ + iface_modem_time_parent = g_type_interface_peek_parent (iface); + + iface->setup_unsolicited_events = mm_shared_cinterion_time_setup_unsolicited_events; + iface->setup_unsolicited_events_finish = mm_shared_cinterion_time_setup_unsolicited_events_finish; + iface->cleanup_unsolicited_events = mm_shared_cinterion_time_cleanup_unsolicited_events; + iface->cleanup_unsolicited_events_finish = mm_shared_cinterion_time_cleanup_unsolicited_events_finish; +} + +static MMIfaceModemTime * +peek_parent_time_interface (MMSharedCinterion *self) +{ + return iface_modem_time_parent; +} + +static void +shared_cinterion_init (MMSharedCinterion *iface) +{ + iface->peek_parent_interface = peek_parent_interface; + iface->peek_parent_location_interface = peek_parent_location_interface; + iface->peek_parent_voice_interface = peek_parent_voice_interface; + iface->peek_parent_time_interface = peek_parent_time_interface; +} + +static void +mm_broadband_modem_qmi_cinterion_class_init (MMBroadbandModemQmiCinterionClass *klass) +{ } |