quectel: coding style fixes in the QGPS logic

This commit is contained in:
Aleksander Morgado
2020-06-29 08:53:00 +00:00
parent 5a9d321346
commit 234ba4544b
3 changed files with 153 additions and 146 deletions
+23 -23
View File
@@ -21,17 +21,17 @@
#include "mm-iface-modem-location.h"
static void iface_modem_init (MMIfaceModem *iface);
static void shared_quectel_init (MMSharedQuectel *iface);
static void iface_modem_firmware_init (MMIfaceModemFirmware *iface);
static void iface_modem_location_init (MMIfaceModemLocation *iface);
static void shared_quectel_init (MMSharedQuectel *iface);
static MMIfaceModemLocation *iface_modem_location_parent;
G_DEFINE_TYPE_EXTENDED (MMBroadbandModemQuectel, mm_broadband_modem_quectel, MM_TYPE_BROADBAND_MODEM, 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_SHARED_QUECTEL, shared_quectel_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_LOCATION, iface_modem_location_init))
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_LOCATION, iface_modem_location_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_SHARED_QUECTEL, shared_quectel_init))
/*****************************************************************************/
@@ -51,13 +51,6 @@ mm_broadband_modem_quectel_new (const gchar *device,
NULL);
}
static void
iface_modem_firmware_init (MMIfaceModemFirmware *iface)
{
iface->load_update_settings = mm_shared_quectel_firmware_load_update_settings;
iface->load_update_settings_finish = mm_shared_quectel_firmware_load_update_settings_finish;
}
static void
mm_broadband_modem_quectel_init (MMBroadbandModemQuectel *self)
{
@@ -70,6 +63,26 @@ iface_modem_init (MMIfaceModem *iface)
iface->setup_sim_hot_swap_finish = mm_shared_quectel_setup_sim_hot_swap_finish;
}
static void
iface_modem_firmware_init (MMIfaceModemFirmware *iface)
{
iface->load_update_settings = mm_shared_quectel_firmware_load_update_settings;
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 MMIfaceModemLocation *
peek_parent_location_interface (MMSharedQuectel *self)
{
@@ -82,19 +95,6 @@ shared_quectel_init (MMSharedQuectel *iface)
iface->peek_parent_location_interface = peek_parent_location_interface;
}
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
mm_broadband_modem_quectel_class_init (MMBroadbandModemQuectelClass *klass)
{
+110 -93
View File
@@ -169,15 +169,12 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
static GQuark private_quark;
static const gchar *gps_startup[] = {
/* NOTES:
* 1) "+QGPSCFG=\"nmeasrc\",1" will be necessary for getting location data
* without the nmea port.
* 2) may be necessary to set "+QGPSCFG=\"gpsnmeatype\".
*/
"+QGPSCFG=\"outport\",\"usbnmea\"",
// TODO: "+QGPSCFG=\"nmeasrc\",1" will be necessary for getting location data without the nmea port
// perhaps these should be the highest value of everything that has nmea in it?
// TODO: it may be necessary to set "+QGPSCFG=\"gpsnmeatype\", however
// the correct value will very based on the modem, it may be enough to
// TODO: is it possible to report a gps interval,
// or even better, allow users to set one?
"+QGPS=1",
};
@@ -203,14 +200,20 @@ typedef struct {
FeatureSupport qgps_supported;
} Private;
static void
location_gathering_context_free (LocationGatheringContext *ctx)
{
g_clear_error (&ctx->command_error);
g_slice_free (LocationGatheringContext, ctx);
}
static LocationGatheringContext *
location_gathering_context_new (MMModemLocationSource source)
{
LocationGatheringContext *ctx = g_new (LocationGatheringContext, 1);
ctx->source = source;
ctx->idx = 0;
ctx->command_error = NULL;
LocationGatheringContext *ctx;
ctx = g_slice_new0 (LocationGatheringContext);
ctx->source = source;
return ctx;
}
@@ -239,15 +242,15 @@ get_private (MMSharedQuectel *self)
}
/*****************************************************************************/
/* Functions used to probe & report Location Support */
/* Location capabilities loading (Location interface) */
MMModemLocationSource
mm_shared_quectel_location_load_capabilities_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
mm_shared_quectel_location_load_capabilities_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
{
GError *inner_error = NULL;
gssize value;
gssize value;
value = g_task_propagate_int (G_TASK (res), &inner_error);
if (inner_error) {
@@ -260,9 +263,9 @@ mm_shared_quectel_location_load_capabilities_finish (MMIfaceModemLocation *self,
static void
build_provided_location_sources (GTask *task)
{
MMModemLocationSource parent_sources;
MMSharedQuectel *self;
Private *priv;
MMModemLocationSource parent_sources;
MMSharedQuectel *self;
Private *priv;
parent_sources = GPOINTER_TO_UINT (g_task_get_task_data (task));
self = MM_SHARED_QUECTEL (g_task_get_source_object (task));
@@ -286,13 +289,13 @@ build_provided_location_sources (GTask *task)
}
static void
probe_qgps_ready (MMBaseModem *_self,
probe_qgps_ready (MMBaseModem *_self,
GAsyncResult *res,
GTask *task)
GTask *task)
{
MMSharedQuectel *self;
Private *priv;
GError *error = NULL;
Private *priv;
GError *error = NULL;
self = MM_SHARED_QUECTEL (g_task_get_source_object (task));
priv = get_private (self);
@@ -320,12 +323,12 @@ probe_qgps (GTask *task)
static void
parent_load_capabilities_ready (MMIfaceModemLocation *self,
GAsyncResult *res,
GTask *task)
GAsyncResult *res,
GTask *task)
{
Private *priv;
MMModemLocationSource sources;
GError *error = NULL;
Private *priv;
MMModemLocationSource sources;
GError *error = NULL;
priv = get_private (MM_SHARED_QUECTEL (self));
sources = priv->iface_modem_location_parent->load_capabilities_finish (self, res, &error);
@@ -337,18 +340,20 @@ parent_load_capabilities_ready (MMIfaceModemLocation *self,
g_task_set_task_data (task, GUINT_TO_POINTER (sources), NULL);
if (priv->qgps_supported == FEATURE_SUPPORT_UNKNOWN)
if (priv->qgps_supported == FEATURE_SUPPORT_UNKNOWN) {
probe_qgps (task);
else
build_provided_location_sources (task);
return;
}
build_provided_location_sources (task);
}
void
mm_shared_quectel_location_load_capabilities (MMIfaceModemLocation *_self,
GAsyncReadyCallback callback,
gpointer user_data)
GAsyncReadyCallback callback,
gpointer user_data)
{
GTask *task;
GTask *task;
Private *priv;
task = g_task_new (_self, NULL, callback, user_data);
@@ -356,29 +361,34 @@ mm_shared_quectel_location_load_capabilities (MMIfaceModemLocation *_self,
/* Chain up parent's setup */
priv->iface_modem_location_parent->load_capabilities (_self,
(GAsyncReadyCallback)parent_load_capabilities_ready,
task);
(GAsyncReadyCallback)parent_load_capabilities_ready,
task);
}
/*****************************************************************************/
/* Functions used to Enable Location */
static void qgps_enable_loop (MMBaseModem *self, GTask *task);
static void qgps_enable_loop (MMBaseModem *self,
GTask *task);
gboolean
mm_shared_quectel_enable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
mm_shared_quectel_enable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
static void
qgps_check_enabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
qgps_check_enabled_ready (MMBaseModem *self,
GAsyncResult *res,
GTask *task)
{
const gchar *response;
GError *error = NULL;
LocationGatheringContext *ctx = g_task_get_task_data (task);
const gchar *response;
GError *error = NULL;
LocationGatheringContext *ctx;
ctx = g_task_get_task_data (task);
response = mm_base_modem_at_command_finish (self, res, &error);
@@ -387,8 +397,6 @@ qgps_check_enabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
else if (!g_str_equal (mm_strip_tag (response, "+QGPS:"), "1"))
g_task_return_error (task, ctx->command_error);
else {
// TODO: Do I need to free ctx->command_error?
ctx->command_error = NULL;
qgps_enable_loop (self, task);
return;
}
@@ -396,25 +404,31 @@ qgps_check_enabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
}
static void
qgps_enable_command_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
qgps_enable_command_ready (MMBaseModem *self,
GAsyncResult *res,
GTask *task)
{
LocationGatheringContext *ctx = g_task_get_task_data (task);
GError *error = NULL;
LocationGatheringContext *ctx;
GError *error = NULL;
if (!mm_base_modem_at_command_full_finish (self, res, &error)) {
ctx = g_task_get_task_data (task);
if (!mm_base_modem_at_command_full_finish (self, res, &error))
ctx->command_error = error;
}
qgps_enable_loop (self, task);
}
static void
qgps_enable_loop (MMBaseModem *self, GTask *task)
qgps_enable_loop (MMBaseModem *self,
GTask *task)
{
MMPortSerialGps *gps_port;
LocationGatheringContext *ctx = g_task_get_task_data (task);
GError *error = NULL;
MMPortSerialGps *gps_port;
LocationGatheringContext *ctx;
GError *error = NULL;
ctx = g_task_get_task_data (task);
/* If there are more commands run them, then return */
if (ctx->idx < G_N_ELEMENTS (gps_startup)) {
mm_base_modem_at_command_full (MM_BASE_MODEM (self),
@@ -433,21 +447,19 @@ qgps_enable_loop (MMBaseModem *self, GTask *task)
if (ctx->command_error != NULL) {
mm_base_modem_at_command (self,
"+QGPS?",
3, // timeout
FALSE, // not cached
3,
FALSE,
(GAsyncReadyCallback)qgps_check_enabled_ready,
task);
return;
}
// TODO: The NMEA port isn't necessary to get NMEA data, use +QGPSNMEA to retrive data
/* Last run Only: Check if the nmea/raw gps port
* exists and is available Otherwise throw an error */
if (ctx->source & (MM_MODEM_LOCATION_SOURCE_GPS_NMEA |
MM_MODEM_LOCATION_SOURCE_GPS_RAW)) {
gps_port = mm_base_modem_peek_port_gps (self);
if (!gps_port ||
!mm_port_serial_open (MM_PORT_SERIAL (gps_port), &error)) {
if (!gps_port || !mm_port_serial_open (MM_PORT_SERIAL (gps_port), &error)) {
if (error)
g_task_return_error (task, error);
else
@@ -465,8 +477,8 @@ qgps_enable_loop (MMBaseModem *self, GTask *task)
static void
parent_enable_location_gathering_ready (MMIfaceModemLocation *self,
GAsyncResult *res,
GTask *task)
GAsyncResult *res,
GTask *task)
{
GError *error;
Private *priv;
@@ -474,8 +486,7 @@ parent_enable_location_gathering_ready (MMIfaceModemLocation *self,
priv = get_private (MM_SHARED_QUECTEL (self));
g_assert (priv->iface_modem_location_parent);
if (!priv->iface_modem_location_parent->
enable_location_gathering_finish (self, res, &error))
if (!priv->iface_modem_location_parent->enable_location_gathering_finish (self, res, &error))
g_task_return_error (task, error);
else
g_task_return_boolean (task, TRUE);
@@ -483,15 +494,15 @@ parent_enable_location_gathering_ready (MMIfaceModemLocation *self,
}
void
mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data)
mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data)
{
LocationGatheringContext *ctx;
GTask *task;
Private *priv;
gboolean start_gps = FALSE;
GTask *task;
Private *priv;
gboolean start_gps = FALSE;
priv = get_private (MM_SHARED_QUECTEL (self));
task = g_task_new (self, NULL, callback, user_data);
@@ -515,9 +526,9 @@ mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
}
ctx = location_gathering_context_new (source);
g_task_set_task_data (task, ctx, g_free);
g_task_set_task_data (task, ctx, (GDestroyNotify) location_gathering_context_free);
// NMEA and UNMANAGED are both enabled in the same way
/* NMEA and UNMANAGED are both enabled in the same way */
if (ctx->source & (MM_MODEM_LOCATION_SOURCE_GPS_NMEA |
MM_MODEM_LOCATION_SOURCE_GPS_RAW |
MM_MODEM_LOCATION_SOURCE_GPS_UNMANAGED)) {
@@ -541,15 +552,17 @@ mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
/* Functions used to Disable Location */
gboolean
mm_shared_quectel_disable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
mm_shared_quectel_disable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
static void
qgps_check_disabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
qgps_check_disabled_ready (MMBaseModem *self,
GAsyncResult *res,
GTask *task)
{
const gchar *response;
GError *error = NULL;
@@ -575,15 +588,17 @@ qgps_check_disabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
}
static void
qgps_disabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
qgps_end_ready (MMBaseModem *self,
GAsyncResult *res,
GTask *task)
{
GError *error = NULL;
if (!mm_base_modem_at_command_full_finish (self, res, &error)) {
mm_base_modem_at_command (self,
"+QGPS?",
3, // timeout
FALSE, // not cached
3,
FALSE,
(GAsyncReadyCallback)qgps_check_disabled_ready,
task);
return;
@@ -595,15 +610,16 @@ qgps_disabled_ready (MMBaseModem *self, GAsyncResult *res, GTask *task)
static void
disable_location_gathering_parent_ready (MMIfaceModemLocation *self,
GAsyncResult *res,
GTask *task)
GAsyncResult *res,
GTask *task)
{
GError *error;
Private *priv = get_private (MM_SHARED_QUECTEL (self));
Private *priv;
priv = get_private (MM_SHARED_QUECTEL (self));
g_assert (priv->iface_modem_location_parent);
if (!priv->iface_modem_location_parent->
disable_location_gathering_finish (self, res, &error))
if (!priv->iface_modem_location_parent->disable_location_gathering_finish (self, res, &error))
g_task_return_error (task, error);
else
g_task_return_boolean (task, TRUE);
@@ -611,15 +627,16 @@ disable_location_gathering_parent_ready (MMIfaceModemLocation *self,
}
void
mm_shared_quectel_disable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data)
mm_shared_quectel_disable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data)
{
GTask *task;
MMPortSerialGps *gps_port;
Private *priv = get_private (MM_SHARED_QUECTEL (self));
Private *priv;
priv = get_private (MM_SHARED_QUECTEL (self));
task = g_task_new (self, NULL, callback, user_data);
priv->enabled_sources &= ~source;
@@ -655,7 +672,7 @@ mm_shared_quectel_disable_location_gathering (MMIfaceModemLocation *self,
FALSE,
FALSE, /* raw */
NULL, /* cancellable */
(GAsyncReadyCallback)qgps_disabled_ready,
(GAsyncReadyCallback)qgps_end_ready,
task);
return;
}
+20 -30
View File
@@ -57,35 +57,25 @@ gboolean mm_shared_quectel_setup_sim_hot_swap_finish (MMIfaceMo
GAsyncResult *res,
GError **error);
void
mm_shared_quectel_location_load_capabilities (MMIfaceModemLocation *self,
GAsyncReadyCallback callback,
gpointer user_data);
void mm_shared_quectel_location_load_capabilities (MMIfaceModemLocation *self,
GAsyncReadyCallback callback,
gpointer user_data);
MMModemLocationSource mm_shared_quectel_location_load_capabilities_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
void mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_shared_quectel_enable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
void mm_shared_quectel_disable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_shared_quectel_disable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
MMModemLocationSource
mm_shared_quectel_location_load_capabilities_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
void
mm_shared_quectel_enable_location_gathering (MMIfaceModemLocation *self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean
mm_shared_quectel_enable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
void
mm_shared_quectel_disable_location_gathering (MMIfaceModemLocation *_self,
MMModemLocationSource source,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean
mm_shared_quectel_disable_location_gathering_finish (MMIfaceModemLocation *self,
GAsyncResult *res,
GError **error);
#endif /* MM_SHARED_QUECTEL_H */