[Merge] lp:~phablet-team/ofono/midori-support into lp:~phablet-team/ofono/ubuntu
Konrad Zapałowicz
konrad.zapalowicz at canonical.com
Wed Jun 29 17:00:10 UTC 2016
Review: Needs Information code
LGTM however I have a few uncertainties - check the questions in comments.
Diff comments:
>
> === added file 'drivers/mtk2modem/voicecall.c'
> --- drivers/mtk2modem/voicecall.c 1970-01-01 00:00:00 +0000
> +++ drivers/mtk2modem/voicecall.c 2016-06-28 15:38:35 +0000
> @@ -0,0 +1,149 @@
> +/*
> + *
> + * oFono - Open Source Telephony
> + *
> + * Copyright (C) 2016 Canonical Ltd.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> + *
> + */
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#define _GNU_SOURCE
> +#include <string.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <errno.h>
> +
> +#include <glib.h>
> +
> +#include <ofono/log.h>
> +#include <ofono/modem.h>
> +#include <ofono/voicecall.h>
> +
> +#include "mtk2_constants.h"
> +#include "drivers/mtkmodem/mtkunsol.h"
> +#include "drivers/mtkmodem/mtkrequest.h"
> +
> +#include "common.h"
> +#include "mtk2modem.h"
> +#include "drivers/rilmodem/rilutil.h"
> +#include "drivers/rilmodem/voicecall.h"
> +
> +/*
> + * This is the voicecall atom implementation for mtk2modem. Most of the
> + * implementation can be found in the rilmodem atom. The main reason for
> + * creating a new atom is the need to handle specific MTK requests and
> + * unsolicited events.
> + */
> +
> +static void mtk2_set_indication_cb(struct ril_msg *message, gpointer user_data)
> +{
> + struct ofono_voicecall *vc = user_data;
> + struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
> +
> + if (message->error == RIL_E_SUCCESS)
> + g_ril_print_response_no_args(vd->ril, message);
Are we sure that the vd will always be valid at this point (and following as this pattern repeats)?
> + else
> + ofono_error("%s: RIL error %s", __func__,
> + ril_error_to_string(message->error));
> +}
> +
> +static void mtk2_incoming_notify(struct ril_msg *message, gpointer user_data)
> +{
> + struct ofono_voicecall *vc = user_data;
> + struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
> + struct parcel rilp;
> + struct unsol_call_indication *call_ind;
> +
> + call_ind = g_mtk_unsol_parse_incoming_call_indication(vd->ril, message);
> + if (call_ind == NULL) {
> + ofono_error("%s: error parsing event", __func__);
> + return;
> + }
> +
> + g_mtk_request_set_call_indication(vd->ril, MTK_CALL_INDIC_MODE_AVAIL,
> + call_ind->call_id,
> + call_ind->seq_number, &rilp);
> +
> + if (g_ril_send(vd->ril, MTK2_RIL_REQUEST_SET_CALL_INDICATION,
> + &rilp, mtk2_set_indication_cb, vc, NULL) == 0)
> + ofono_error("%s: cannot send indication", __func__);
> +
> + g_mtk_unsol_free_call_indication(call_ind);
> +}
> +
> +static gboolean mtk2_delayed_register(gpointer user_data)
> +{
> + struct ofono_voicecall *vc = user_data;
> + struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
> +
> + /* Indicates incoming call, before telling the network our state */
> + g_ril_register(vd->ril, MTK2_RIL_UNSOL_INCOMING_CALL_INDICATION,
> + mtk2_incoming_notify, vc);
> +
> + /* This makes the timeout a single-shot */
> + return FALSE;
> +}
> +
> +static int mtk2_voicecall_probe(struct ofono_voicecall *vc, unsigned int vendor,
> + void *data)
> +{
> + struct ril_voicecall_driver_data *driver_data = data;
> + struct ril_voicecall_data *vd;
> +
> + vd = g_try_new0(struct ril_voicecall_data, 1);
> + if (vd == NULL)
> + return -ENOMEM;
> +
> + ril_voicecall_start(driver_data, vc, vendor, vd);
> +
> + /*
> + * Register events after ofono_voicecall_register() is called from
> + * ril_delayed_register().
> + */
> + g_idle_add(mtk2_delayed_register, vc);
> +
> + return 0;
> +}
> +
> +static struct ofono_voicecall_driver driver = {
> + .name = MTK2MODEM,
> + .probe = mtk2_voicecall_probe,
> + .remove = ril_voicecall_remove,
> + .dial = ril_dial,
> + .answer = ril_answer,
> + .hangup_all = ril_hangup_all,
> + .release_specific = ril_hangup_specific,
> + .send_tones = ril_send_dtmf,
> + .create_multiparty = ril_create_multiparty,
> + .private_chat = ril_private_chat,
> + .swap_without_accept = ril_swap_without_accept,
> + .hold_all_active = ril_hold_all_active,
> + .release_all_held = ril_release_all_held,
> + .set_udub = ril_set_udub,
> + .release_all_active = ril_release_all_active,
> +};
> +
> +void mtk2_voicecall_init(void)
> +{
> + ofono_voicecall_driver_register(&driver);
> +}
> +
> +void mtk2_voicecall_exit(void)
> +{
> + ofono_voicecall_driver_unregister(&driver);
> +}
>
> === modified file 'drivers/rilmodem/ussd.c'
> --- drivers/rilmodem/ussd.c 2014-05-12 14:21:13 +0000
> +++ drivers/rilmodem/ussd.c 2016-06-28 15:38:35 +0000
> @@ -178,8 +180,10 @@
> }
>
> /* To fix bug in MTK: USSD-Notify arrive with type 2 instead of 0 */
> - if (g_ril_vendor(ud->ril) == OFONO_RIL_VENDOR_MTK &&
> - unsol->message != NULL && unsol->type == 2)
> + vendor = g_ril_vendor(ud->ril);
> + if ((vendor == OFONO_RIL_VENDOR_MTK ||
> + vendor == OFONO_RIL_VENDOR_MTK2)
Looks complex, would it be better to replace with a func or macro such as "is vendor mtk"?
> + && unsol->message != NULL && unsol->type == 2)
> unsol->type = 0;
>
> /*
>
> === modified file 'gril/grilreply.h'
> --- gril/grilreply.h 2015-03-18 14:05:58 +0000
> +++ gril/grilreply.h 2016-06-28 15:38:35 +0000
> @@ -97,6 +97,15 @@
> void *data;
> };
>
> +struct reply_radio_capability {
> + int version;
> + int session;
> + int phase;
> + int rat;
> + char modem_uuid[RIL_MAX_UUID_LENGTH];
> + int status;
> +};
Are we sure that all of the integers can be negative or some of them can be unsigned?
> +
> void g_ril_reply_free_avail_ops(struct reply_avail_ops *reply);
>
> struct reply_avail_ops *g_ril_reply_parse_avail_ops(GRil *gril,
--
https://code.launchpad.net/~phablet-team/ofono/midori-support/+merge/298542
Your team Ubuntu Phablet Team is subscribed to branch lp:~phablet-team/ofono/ubuntu.
More information about the Ubuntu-reviews
mailing list