quectel: ignore QGPSURC

QGPSURCs are not ignored and causes calls to be rejected in some cases
This commit is contained in:
Dylan Van Assche
2021-03-21 10:01:52 +00:00
committed by Aleksander Morgado
parent dbb3825984
commit 192e067f97
4 changed files with 72 additions and 3 deletions
@@ -78,6 +78,12 @@ peek_parent_modem_interface (MMSharedQuectel *self)
return iface_modem_parent;
}
static MMBroadbandModemClass *
peek_parent_broadband_modem_class (MMSharedQuectel *self)
{
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_qmi_quectel_parent_class);
}
static void
iface_modem_firmware_init (MMIfaceModemFirmware *iface)
{
@@ -116,9 +122,13 @@ 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_qmi_quectel_class_init (MMBroadbandModemQmiQuectelClass *klass)
{
MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
broadband_modem_class->setup_ports = mm_shared_quectel_setup_ports;
}
@@ -78,6 +78,12 @@ peek_parent_modem_interface (MMSharedQuectel *self)
return iface_modem_parent;
}
static MMBroadbandModemClass *
peek_parent_broadband_modem_class (MMSharedQuectel *self)
{
return MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_quectel_parent_class);
}
static void
iface_modem_firmware_init (MMIfaceModemFirmware *iface)
{
@@ -116,9 +122,13 @@ 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_quectel_class_init (MMBroadbandModemQuectelClass *klass)
{
MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
broadband_modem_class->setup_ports = mm_shared_quectel_setup_ports;
}
+47 -1
View File
@@ -43,13 +43,22 @@ typedef enum {
} FeatureSupport;
typedef struct {
MMBroadbandModemClass *broadband_modem_class_parent;
MMIfaceModem *iface_modem_parent;
MMIfaceModemLocation *iface_modem_location_parent;
MMModemLocationSource provided_sources;
MMModemLocationSource enabled_sources;
FeatureSupport qgps_supported;
GRegex *qgpsurc_regex;
} Private;
static void
private_free (Private *priv)
{
g_regex_unref (priv->qgpsurc_regex);
g_slice_free (Private, priv);
}
static Private *
get_private (MMSharedQuectel *self)
{
@@ -65,6 +74,10 @@ get_private (MMSharedQuectel *self)
priv->provided_sources = MM_MODEM_LOCATION_SOURCE_NONE;
priv->enabled_sources = MM_MODEM_LOCATION_SOURCE_NONE;
priv->qgps_supported = FEATURE_SUPPORT_UNKNOWN;
priv->qgpsurc_regex = g_regex_new ("\\r\\n\\+QGPSURC:.*", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
g_assert (MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_broadband_modem_class);
priv->broadband_modem_class_parent = MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_broadband_modem_class (self);
g_assert (MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_modem_location_interface);
priv->iface_modem_location_parent = MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_modem_location_interface (self);
@@ -72,11 +85,44 @@ get_private (MMSharedQuectel *self)
g_assert (MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_modem_interface);
priv->iface_modem_parent = MM_SHARED_QUECTEL_GET_INTERFACE (self)->peek_parent_modem_interface (self);
g_object_set_qdata (G_OBJECT (self), private_quark, priv);
g_object_set_qdata_full (G_OBJECT (self), private_quark, priv, (GDestroyNotify)private_free);
}
return priv;
}
/*****************************************************************************/
/* Setup ports (Broadband modem class) */
void
mm_shared_quectel_setup_ports (MMBroadbandModem *self)
{
Private *priv;
MMPortSerialAt *ports[2];
guint i;
priv = get_private (MM_SHARED_QUECTEL (self));
g_assert (priv->broadband_modem_class_parent);
g_assert (priv->broadband_modem_class_parent->setup_ports);
/* Parent setup always first */
priv->broadband_modem_class_parent->setup_ports (self);
ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Enable/disable unsolicited events in given port */
for (i = 0; i < G_N_ELEMENTS (ports); i++) {
if (!ports[i])
continue;
/* Ignore +QGPSURC */
mm_port_serial_at_add_unsolicited_msg_handler (
ports[i],
priv->qgpsurc_regex,
NULL, NULL, NULL);
}
}
/*****************************************************************************/
/* Firmware update settings loading (Firmware interface) */
+5 -2
View File
@@ -37,12 +37,15 @@ typedef struct _MMSharedQuectel MMSharedQuectel;
struct _MMSharedQuectel {
GTypeInterface g_iface;
MMIfaceModem * (* peek_parent_modem_interface) (MMSharedQuectel *self);
MMIfaceModemLocation * (* peek_parent_modem_location_interface) (MMSharedQuectel *self);
MMBroadbandModemClass * (* peek_parent_broadband_modem_class) (MMSharedQuectel *self);
MMIfaceModem * (* peek_parent_modem_interface) (MMSharedQuectel *self);
MMIfaceModemLocation * (* peek_parent_modem_location_interface) (MMSharedQuectel *self);
};
GType mm_shared_quectel_get_type (void);
void mm_shared_quectel_setup_ports (MMBroadbandModem *self);
void mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self,
GAsyncReadyCallback callback,
gpointer user_data);