Blame plugins/zte/mm-broadband-modem-zte-icera.c

Packit Service 8101fe
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
Packit Service 8101fe
/*
Packit Service 8101fe
 * This program is free software; you can redistribute it and/or modify
Packit Service 8101fe
 * it under the terms of the GNU General Public License as published by
Packit Service 8101fe
 * the Free Software Foundation; either version 2 of the License, or
Packit Service 8101fe
 * (at your option) any later version.
Packit Service 8101fe
 *
Packit Service 8101fe
 * This program is distributed in the hope that it will be useful,
Packit Service 8101fe
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 8101fe
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 8101fe
 * GNU General Public License for more details:
Packit Service 8101fe
 *
Packit Service 8101fe
 * Copyright (C) 2008 - 2009 Novell, Inc.
Packit Service 8101fe
 * Copyright (C) 2009 - 2012 Red Hat, Inc.
Packit Service 8101fe
 * Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org>
Packit Service 8101fe
 */
Packit Service 8101fe
Packit Service 8101fe
#include <config.h>
Packit Service 8101fe
Packit Service 8101fe
#include <stdlib.h>
Packit Service 8101fe
#include <stdio.h>
Packit Service 8101fe
#include <string.h>
Packit Service 8101fe
#include <unistd.h>
Packit Service 8101fe
#include <ctype.h>
Packit Service 8101fe
Packit Service 8101fe
#include "ModemManager.h"
Packit Service 8101fe
#include "mm-iface-modem-3gpp.h"
Packit Service 8101fe
#include "mm-base-modem-at.h"
Packit Service 8101fe
#include "mm-common-zte.h"
Packit Service 8101fe
#include "mm-broadband-modem-zte-icera.h"
Packit Service 8101fe
#include "mm-modem-helpers.h"
Packit Service 8101fe
#include "mm-log.h"
Packit Service 8101fe
Packit Service 8101fe
static void iface_modem_3gpp_init (MMIfaceModem3gpp *iface);
Packit Service 8101fe
Packit Service 8101fe
static MMIfaceModem3gpp *iface_modem_3gpp_parent;
Packit Service 8101fe
Packit Service 8101fe
G_DEFINE_TYPE_EXTENDED (MMBroadbandModemZteIcera, mm_broadband_modem_zte_icera, MM_TYPE_BROADBAND_MODEM_ICERA, 0,
Packit Service 8101fe
                        G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_3GPP, iface_modem_3gpp_init));
Packit Service 8101fe
Packit Service 8101fe
struct _MMBroadbandModemZteIceraPrivate {
Packit Service 8101fe
    /* Unsolicited messaging setup */
Packit Service 8101fe
    MMCommonZteUnsolicitedSetup *unsolicited_setup;
Packit Service 8101fe
};
Packit Service 8101fe
Packit Service 8101fe
/*****************************************************************************/
Packit Service 8101fe
/* Setup/Cleanup unsolicited events (3GPP interface) */
Packit Service 8101fe
Packit Service 8101fe
static gboolean
Packit Service 8101fe
modem_3gpp_setup_cleanup_unsolicited_events_finish (MMIfaceModem3gpp *self,
Packit Service 8101fe
                                                    GAsyncResult *res,
Packit Service 8101fe
                                                    GError **error)
Packit Service 8101fe
{
Packit Service 8101fe
    return g_task_propagate_boolean (G_TASK (res), error);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
parent_setup_unsolicited_events_ready (MMIfaceModem3gpp *self,
Packit Service 8101fe
                                       GAsyncResult *res,
Packit Service 8101fe
                                       GTask *task)
Packit Service 8101fe
{
Packit Service 8101fe
    GError *error = NULL;
Packit Service 8101fe
Packit Service 8101fe
    if (!iface_modem_3gpp_parent->setup_unsolicited_events_finish (self, res, &error))
Packit Service 8101fe
        g_task_return_error (task, error);
Packit Service 8101fe
    else {
Packit Service 8101fe
        /* Our own setup now */
Packit Service 8101fe
        mm_common_zte_set_unsolicited_events_handlers (MM_BROADBAND_MODEM (self),
Packit Service 8101fe
                                                       MM_BROADBAND_MODEM_ZTE_ICERA (self)->priv->unsolicited_setup,
Packit Service 8101fe
                                                       TRUE);
Packit Service 8101fe
        g_task_return_boolean (task, TRUE);
Packit Service 8101fe
    }
Packit Service 8101fe
    g_object_unref (task);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
modem_3gpp_setup_unsolicited_events (MMIfaceModem3gpp *self,
Packit Service 8101fe
                                     GAsyncReadyCallback callback,
Packit Service 8101fe
                                     gpointer user_data)
Packit Service 8101fe
{
Packit Service 8101fe
    GTask *task;
Packit Service 8101fe
Packit Service 8101fe
    task = g_task_new (self, NULL, callback, user_data);
Packit Service 8101fe
Packit Service 8101fe
    /* Chain up parent's setup */
Packit Service 8101fe
    iface_modem_3gpp_parent->setup_unsolicited_events (
Packit Service 8101fe
        self,
Packit Service 8101fe
        (GAsyncReadyCallback)parent_setup_unsolicited_events_ready,
Packit Service 8101fe
        task);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
parent_cleanup_unsolicited_events_ready (MMIfaceModem3gpp *self,
Packit Service 8101fe
                                         GAsyncResult *res,
Packit Service 8101fe
                                         GTask *task)
Packit Service 8101fe
{
Packit Service 8101fe
    GError *error = NULL;
Packit Service 8101fe
Packit Service 8101fe
    if (!iface_modem_3gpp_parent->cleanup_unsolicited_events_finish (self, res, &error))
Packit Service 8101fe
        g_task_return_error (task, error);
Packit Service 8101fe
    else
Packit Service 8101fe
        g_task_return_boolean (task, TRUE);
Packit Service 8101fe
    g_object_unref (task);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
modem_3gpp_cleanup_unsolicited_events (MMIfaceModem3gpp *self,
Packit Service 8101fe
                                       GAsyncReadyCallback callback,
Packit Service 8101fe
                                       gpointer user_data)
Packit Service 8101fe
{
Packit Service 8101fe
    GTask *task;
Packit Service 8101fe
Packit Service 8101fe
    task = g_task_new (self, NULL, callback, user_data);
Packit Service 8101fe
Packit Service 8101fe
    /* Our own cleanup first */
Packit Service 8101fe
    mm_common_zte_set_unsolicited_events_handlers (MM_BROADBAND_MODEM (self),
Packit Service 8101fe
                                                   MM_BROADBAND_MODEM_ZTE_ICERA (self)->priv->unsolicited_setup,
Packit Service 8101fe
                                                   FALSE);
Packit Service 8101fe
Packit Service 8101fe
    /* And now chain up parent's cleanup */
Packit Service 8101fe
    iface_modem_3gpp_parent->cleanup_unsolicited_events (
Packit Service 8101fe
        self,
Packit Service 8101fe
        (GAsyncReadyCallback)parent_cleanup_unsolicited_events_ready,
Packit Service 8101fe
        task);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
/*****************************************************************************/
Packit Service 8101fe
/* Setup ports (Broadband modem class) */
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
setup_ports (MMBroadbandModem *self)
Packit Service 8101fe
{
Packit Service 8101fe
    /* Call parent's setup ports first always */
Packit Service 8101fe
    MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_zte_icera_parent_class)->setup_ports (self);
Packit Service 8101fe
Packit Service 8101fe
    /* Now reset the unsolicited messages we'll handle when enabled */
Packit Service 8101fe
    mm_common_zte_set_unsolicited_events_handlers (MM_BROADBAND_MODEM (self),
Packit Service 8101fe
                                                   MM_BROADBAND_MODEM_ZTE_ICERA (self)->priv->unsolicited_setup,
Packit Service 8101fe
                                                   FALSE);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
/*****************************************************************************/
Packit Service 8101fe
Packit Service 8101fe
MMBroadbandModemZteIcera *
Packit Service 8101fe
mm_broadband_modem_zte_icera_new (const gchar *device,
Packit Service 8101fe
                                  const gchar **drivers,
Packit Service 8101fe
                                  const gchar *plugin,
Packit Service 8101fe
                                  guint16 vendor_id,
Packit Service 8101fe
                                  guint16 product_id)
Packit Service 8101fe
{
Packit Service 8101fe
    return g_object_new (MM_TYPE_BROADBAND_MODEM_ZTE_ICERA,
Packit Service 8101fe
                         MM_BASE_MODEM_DEVICE, device,
Packit Service 8101fe
                         MM_BASE_MODEM_DRIVERS, drivers,
Packit Service 8101fe
                         MM_BASE_MODEM_PLUGIN, plugin,
Packit Service 8101fe
                         MM_BASE_MODEM_VENDOR_ID, vendor_id,
Packit Service 8101fe
                         MM_BASE_MODEM_PRODUCT_ID, product_id,
Packit Service 8101fe
                         NULL);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
mm_broadband_modem_zte_icera_init (MMBroadbandModemZteIcera *self)
Packit Service 8101fe
{
Packit Service 8101fe
    /* Initialize private data */
Packit Service 8101fe
    self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
Packit Service 8101fe
                                              MM_TYPE_BROADBAND_MODEM_ZTE_ICERA,
Packit Service 8101fe
                                              MMBroadbandModemZteIceraPrivate);
Packit Service 8101fe
    self->priv->unsolicited_setup = mm_common_zte_unsolicited_setup_new ();
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
finalize (GObject *object)
Packit Service 8101fe
{
Packit Service 8101fe
    MMBroadbandModemZteIcera *self = MM_BROADBAND_MODEM_ZTE_ICERA (object);
Packit Service 8101fe
Packit Service 8101fe
    mm_common_zte_unsolicited_setup_free (self->priv->unsolicited_setup);
Packit Service 8101fe
Packit Service 8101fe
    G_OBJECT_CLASS (mm_broadband_modem_zte_icera_parent_class)->finalize (object);
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
iface_modem_3gpp_init (MMIfaceModem3gpp *iface)
Packit Service 8101fe
{
Packit Service 8101fe
    iface_modem_3gpp_parent = g_type_interface_peek_parent (iface);
Packit Service 8101fe
Packit Service 8101fe
    iface->setup_unsolicited_events = modem_3gpp_setup_unsolicited_events;
Packit Service 8101fe
    iface->setup_unsolicited_events_finish = modem_3gpp_setup_cleanup_unsolicited_events_finish;
Packit Service 8101fe
    iface->cleanup_unsolicited_events = modem_3gpp_cleanup_unsolicited_events;
Packit Service 8101fe
    iface->cleanup_unsolicited_events_finish = modem_3gpp_setup_cleanup_unsolicited_events_finish;
Packit Service 8101fe
}
Packit Service 8101fe
Packit Service 8101fe
static void
Packit Service 8101fe
mm_broadband_modem_zte_icera_class_init (MMBroadbandModemZteIceraClass *klass)
Packit Service 8101fe
{
Packit Service 8101fe
    GObjectClass *object_class = G_OBJECT_CLASS (klass);
Packit Service 8101fe
    MMBroadbandModemClass *broadband_modem_class = MM_BROADBAND_MODEM_CLASS (klass);
Packit Service 8101fe
Packit Service 8101fe
    g_type_class_add_private (object_class, sizeof (MMBroadbandModemZteIceraPrivate));
Packit Service 8101fe
Packit Service 8101fe
    object_class->finalize = finalize;
Packit Service 8101fe
    broadband_modem_class->setup_ports = setup_ports;
Packit Service 8101fe
}