diff mbox series

[v6] qmimodem: voicecall: Implement DTMF tones

Message ID 20240426212235.2627-1-adam@piggz.co.uk (mailing list archive)
State Accepted
Commit 2da0527477383561ca476d738096145a5dab74d1
Headers show
Series [v6] qmimodem: voicecall: Implement DTMF tones | expand

Commit Message

Adam Pigg April 26, 2024, 9:22 p.m. UTC
The send_dtmf function sets up a call to send_one_dtmf, which will call
the QMI_VOICE_START_CONTINUOUS_DTMF service function.  The parameters to
this call are a hard coded call-id and the DTMF character to send.
start_cont_dtmf_cb will then be called which will set up a call to
QMI_VOICE_STOP_CONTINUOUS_DTMF to stop the tone.  Finally,
stop_cont_dtmf_cb will check the final status.

---
Changes in V4
-Removed unused enum
-Minor formatting fixes
-Ensure data->full_dtmf is free'd
-Use cb_data_ref/unref between chains of dtmf calls

Changes in V5/V6
-Store the core cb and cbd obejects in the voicall_data struct
-Fix incorrect free calls
---
---
 drivers/qmimodem/voice.h     |   6 ++
 drivers/qmimodem/voicecall.c | 127 +++++++++++++++++++++++++++++++++++
 2 files changed, 133 insertions(+)

Comments

Adam Pigg April 26, 2024, 9:26 p.m. UTC | #1
This version of the DTMF code goes back to V4, but adds in some of the changes 
in v5 to store the cb and data for the core ofono callback.

I have tested this with individual digits and a string of 10 digits 0-9 using 
the dbus api.

I have also ran this through valgrind, once in the normal path, and again 
running an AT command against the modem to reboot it into fastboot mode to 
simulate removal.  Both cases found no leaks.

Hopefully this is getting closer!

Thanks

Adam

On Friday 26 April 2024 22:22:03 BST Adam Pigg wrote:
> The send_dtmf function sets up a call to send_one_dtmf, which will call
> the QMI_VOICE_START_CONTINUOUS_DTMF service function.  The parameters to
> this call are a hard coded call-id and the DTMF character to send.
> start_cont_dtmf_cb will then be called which will set up a call to
> QMI_VOICE_STOP_CONTINUOUS_DTMF to stop the tone.  Finally,
> stop_cont_dtmf_cb will check the final status.
> 
> ---
> Changes in V4
> -Removed unused enum
> -Minor formatting fixes
> -Ensure data->full_dtmf is free'd
> -Use cb_data_ref/unref between chains of dtmf calls
> 
> Changes in V5/V6
> -Store the core cb and cbd obejects in the voicall_data struct
> -Fix incorrect free calls
> ---
> ---
>  drivers/qmimodem/voice.h     |   6 ++
>  drivers/qmimodem/voicecall.c | 127 +++++++++++++++++++++++++++++++++++
>  2 files changed, 133 insertions(+)
> 
> diff --git a/drivers/qmimodem/voice.h b/drivers/qmimodem/voice.h
> index caedb079..92186b72 100644
> --- a/drivers/qmimodem/voice.h
> +++ b/drivers/qmimodem/voice.h
> @@ -53,6 +53,8 @@ enum voice_commands {
>  	QMI_VOICE_GET_ALL_CALL_INFO =		0x2f,
>  	QMI_VOICE_END_CALL =			0x21,
>  	QMI_VOICE_ANSWER_CALL =			0x22,
> +	QMI_VOICE_START_CONTINUOUS_DTMF =       0x29,
> +	QMI_VOICE_STOP_CONTINUOUS_DTMF =        0x2A,
>  	QMI_VOICE_SUPS_NOTIFICATION_IND =	0x32,
>  	QMI_VOICE_SET_SUPS_SERVICE =		0x33,
>  	QMI_VOICE_GET_CALL_WAITING =		0x34,
> @@ -85,6 +87,10 @@ enum qmi_voice_call_state {
>  	QMI_VOICE_CALL_STATE_SETUP
>  };
> 
> +enum qmi_voice_call_dtmf_param {
> +	QMI_VOICE_DTMF_DATA = 0x01,
> +};
> +
>  struct qmi_ussd_data {
>  	uint8_t dcs;
>  	uint8_t length;
> diff --git a/drivers/qmimodem/voicecall.c b/drivers/qmimodem/voicecall.c
> index 7c9326fe..0df65226 100644
> --- a/drivers/qmimodem/voicecall.c
> +++ b/drivers/qmimodem/voicecall.c
> @@ -42,6 +42,10 @@ struct voicecall_data {
>  	uint16_t minor;
>  	struct l_queue *call_list;
>  	struct ofono_phone_number dialed;
> +	char *full_dtmf;
> +	const char *next_dtmf;
> +	ofono_voicecall_cb_t send_dtmf_cb;
> +	struct cb_data *send_dtmf_data;
>  };
> 
>  struct qmi_voice_call_information_instance {
> @@ -599,6 +603,127 @@ static void hangup_active(struct ofono_voicecall *vc,
> ofono_voicecall_cb_t cb, release_specific(vc, call->id, cb, data);
>  }
> 
> +static void stop_cont_dtmf_cb(struct qmi_result *result, void *user_data)
> +{
> +	struct cb_data *cbd = user_data;
> +	ofono_voicecall_cb_t cb = cbd->cb;
> +
> +	uint16_t error;
> +
> +	DBG("");
> +
> +	if (qmi_result_set_error(result, &error)) {
> +		DBG("QMI Error %d", error);
> +		CALLBACK_WITH_FAILURE(cb, cbd);
> +		return;
> +	}
> +
> +	CALLBACK_WITH_SUCCESS(cb, cbd);
> +}
> +
> +static void start_cont_dtmf_cb(struct qmi_result *result, void *user_data)
> +{
> +	struct cb_data *cbd = user_data;
> +	ofono_voicecall_cb_t cb = cbd->cb;
> +	struct ofono_voicecall *vc = cbd->user;
> +	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
> +	uint16_t error;
> +	struct qmi_param *param;
> +
> +	DBG("");
> +
> +	if (qmi_result_set_error(result, &error)) {
> +		DBG("QMI Error %d", error);
> +		CALLBACK_WITH_FAILURE(cb, cbd);
> +		return;
> +	}
> +
> +	param = qmi_param_new();
> +
> +	if (!qmi_param_append_uint8(param, QMI_VOICE_DTMF_DATA, 0xff))
> +		goto error;
> +
> +	if (qmi_service_send(vd->voice, QMI_VOICE_STOP_CONTINUOUS_DTMF, 
param,
> +			stop_cont_dtmf_cb, cbd, cb_data_unref) > 0) {
> +		cb_data_ref(cbd);
> +		return;
> +	}
> +
> +error:
> +	CALLBACK_WITH_FAILURE(cb, cbd->data);
> +	l_free(param);
> +}
> +
> +static void send_one_dtmf(struct ofono_voicecall *vc, const char dtmf,
> +				ofono_voicecall_cb_t cb, void 
*data)
> +{
> +	struct voicecall_data *vd = data;
> +	struct qmi_param *param;
> +	uint8_t param_body[2];
> +	struct cb_data *cbd = cb_data_new(cb, data);
> +
> +	DBG("");
> +
> +	cbd->user = vc;
> +
> +	param = qmi_param_new();
> +
> +	param_body[0] = 0xff;
> +	param_body[1] = (uint8_t)dtmf;
> +
> +	if (!qmi_param_append(param, QMI_VOICE_DTMF_DATA, 
sizeof(param_body),
> +			param_body))
> +		goto error;
> +
> +	if (qmi_service_send(vd->voice, QMI_VOICE_START_CONTINUOUS_DTMF, 
param,
> +			start_cont_dtmf_cb, cbd, cb_data_unref) > 0)
> +		return;
> +
> +error:
> +	CALLBACK_WITH_FAILURE(cb, data);
> +	l_free(param);
> +}
> +
> +static void send_one_dtmf_cb(const struct ofono_error *error, void *data)
> +{
> +	struct cb_data *cbd = data;
> +	struct ofono_voicecall *vc = cbd->user;
> +	struct voicecall_data *vd = cbd->data;
> +
> +	DBG("");
> +
> +	if (error->type != OFONO_ERROR_TYPE_NO_ERROR ||
> +			*vd->next_dtmf == 0) {
> +		if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
> +			CALLBACK_WITH_SUCCESS(vd->send_dtmf_cb, vd-
>send_dtmf_data);
> +		else
> +			CALLBACK_WITH_FAILURE(vd->send_dtmf_cb, vd-
>send_dtmf_data);
> +
> +		l_free(vd->full_dtmf);
> +		vd->full_dtmf = NULL;
> +	} else {
> +		send_one_dtmf(vc,
> +				*(vd->next_dtmf++),
> +				send_one_dtmf_cb, vd);
> +	}
> +}
> +
> +static void send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
> +			ofono_voicecall_cb_t cb, void *data)
> +{
> +	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
> +
> +	DBG("");
> +
> +	l_free(vd->full_dtmf);
> +	vd->full_dtmf = l_strdup(dtmf);
> +	vd->next_dtmf = &vd->full_dtmf[1];
> +	vd->send_dtmf_data = data;
> +	vd->send_dtmf_cb = cb;
> +
> +	send_one_dtmf(vc, *dtmf, send_one_dtmf_cb, vd);
> +}
> +
>  static void create_voice_cb(struct qmi_service *service, void *user_data)
>  {
>  	struct ofono_voicecall *vc = user_data;
> @@ -656,6 +781,7 @@ static void qmi_voicecall_remove(struct ofono_voicecall
> *vc) qmi_service_free(data->voice);
> 
>  	l_queue_destroy(data->call_list, l_free);
> +	l_free(data->full_dtmf);
>  	l_free(data);
>  }
> 
> @@ -666,6 +792,7 @@ static const struct ofono_voicecall_driver driver = {
>  	.answer		= answer,
>  	.hangup_active  = hangup_active,
>  	.release_specific  = release_specific,
> +	.send_tones     = send_dtmf,
>  };
> 
>  OFONO_ATOM_DRIVER_BUILTIN(voicecall, qmimodem, &driver)
Adam Pigg April 27, 2024, 5:31 p.m. UTC | #2
I thought I would include the valgrind output while removing the modem mid-
call after sending some dtmf digits.

The leak which is identified at the end is in a patch im not upstreaming, which 
is part of the making the gobi driver work with the other patches im using to 
support sailfish.  The other thing of note is some logs relating to the SIM 
code.


[root@PinePhonePro defaultuser]# valgrind --leak-check=full ./ofonod -dn
==1888== Memcheck, a memory error detector
==1888== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1888== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==1888== Command: ./ofonod -dn
==1888== 
ofonod[1888]: oFono version 2.5
src/main.c:main() Using configuration directory: /etc/ofono
ofonod[1888]: src/module.c:__ofono_modules_init() 
ofonod[1888]: src/manager.c:manager_init() manager_init
ofonod[1888]: src/provision.c:provision_init() 
ofonod[1888]: src/slot-manager.c:ofono_slot_manager_object_init() Default 
voice sim is (auto)
ofonod[1888]: src/slot-manager.c:ofono_slot_manager_object_init() Default data 
sim is (auto)
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_set_block() blocking 
ALL requests
ofonod[1888]: src/plugin.c:__ofono_plugin_init() 
ofonod[1888]: Can't load /usr/lib64/ofono/plugins/amlplugin.so: /usr/lib64/
ofono/plugins/amlplugin.so: undefined symbol: 
ofono_voicecall_is_emergency_number
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_plugin_init() 
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_config() loading 
configuration from /etc/ofono/push_forwarder.d
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_config() reading 
org.nemomobile.MmsEngine.conf
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler() registered 
MMS Engine
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   
ContentType: application/vnd.wap.mms-message
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Interface: 
org.nemomobile.MmsEngine
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Service: 
org.nemomobile.MmsEngine
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Method: 
push
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Path: /
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_config() reading ofono-
provisioning.conf
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler() registered 
Jolla Provisioning Handler
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   
ContentType: application/vnd.wap.connectivity-wbxml
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Interface: 
org.nemomobile.provisioning.interface
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Service: 
org.nemomobile.provisioning
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Method: 
HandleProvisioningMessage
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_parse_handler()   Path: /
ofonod[1888]: plugins/push-notification.c:push_notification_init() 
ofonod[1888]: plugins/smart-messaging.c:smart_messaging_init() 
ofonod[1888]: plugins/upower.c:upower_init() upower init
ofonod[1888]: plugins/hfp_ag_bluez5.c:hfp_ag_init() 
ofonod[1888]: src/handsfree-audio.c:ofono_handsfree_card_driver_register() 
driver: 0x5838b0
ofonod[1888]: plugins/dun_gw_bluez5.c:dun_gw_init() 
ofonod[1888]: src/handsfree-audio.c:ofono_handsfree_card_driver_register() 
driver: 0x583780
ofonod[1888]: plugins/connman.c:connman_init() 
ofonod[1888]: src/private-network.c:ofono_private_network_driver_register() 
driver: 0x583728, name: ConnMan Private Network
ofonod[1888]: plugins/phonesim.c:parse_config() filename /etc/ofono/
phonesim.conf
ofonod[1888]: Reading of /etc/ofono/phonesim.conf failed: No such file or 
directory
ofonod[1888]: plugins/sailfish_access.c:sailfish_access_init() 
ofonod[1888]: src/dbus-access.c:ofono_dbus_access_plugin_register() Sailfish D-
Bus access
ofonod[1888]: plugins/udevng.c:udev_start() 
ofonod[1888]: plugins/udevng.c:enumerate_devices() 
ofonod[1888]: plugins/udevng.c:check_usb_device() hub [1d6b:0002]
ofonod[1888]: plugins/udevng.c:check_usb_device() hub [1d6b:0001]
ofonod[1888]: plugins/udevng.c:check_usb_device() hub [1d6b:0002]
ofonod[1888]: plugins/udevng.c:check_usb_device() usb [1d6b:0002]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() option [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() qmi_wwan [2c7c:0125]
ofonod[1888]: plugins/udevng.c:check_usb_device() qmi_wwan [2c7c:0125]
ofonod[1888]: plugins/udevng.c:add_device() modem:/sys/devices/platform/
fe3c0000.usb/usb1/1-1 device:/sys/devices/platform/fe3c0000.usb/
usb1/1-1/1-1:1.4/net/wwan0
ofonod[1888]: plugins/udevng.c:add_device() wwan0 (quectelqmi) 255/255/255 
[04] ==> (null) (null)
ofonod[1888]: plugins/udevng.c:check_usb_device() qmi_wwan [2c7c:0125]
ofonod[1888]: plugins/udevng.c:add_device() modem:/sys/devices/platform/
fe3c0000.usb/usb1/1-1 device:/sys/devices/platform/fe3c0000.usb/
usb1/1-1/1-1:1.4/usbmisc/cdc-wdm0
ofonod[1888]: plugins/udevng.c:add_device() /dev/cdc-wdm0 (quectelqmi) 
255/255/255 [04] ==> (null) (null)
ofonod[1888]: plugins/udevng.c:check_usb_device() hub [1d6b:0001]
ofonod[1888]: plugins/udevng.c:create_modem() /sys/devices/platform/
fe3c0000.usb/usb1/1-1
ofonod[1888]: plugins/udevng.c:create_modem() driver=quectelqmi
ofonod[1888]: src/modem.c:ofono_modem_create() name: (null), type: quectelqmi
ofonod[1888]: plugins/udevng.c:setup_quectelqmi() /sys/devices/platform/
fe3c0000.usb/usb1/1-1
ofonod[1888]: plugins/udevng.c:setup_quectelqmi() /dev/cdc-wdm0 255/255/255 04 
(null) usbmisc
ofonod[1888]: plugins/udevng.c:setup_quectelqmi() wwan0 255/255/255 04 (null) 
net
ofonod[1888]: plugins/udevng.c:setup_quectelqmi() gps=(null) aux=(null)
ofonod[1888]: plugins/udevng.c:setup_qmi() qmi: /dev/cdc-wdm0 net: wwan0 
kernel_driver: qmi_wwan interface_number: 04
ofonod[1888]: src/modem.c:ofono_modem_set_driver() type: gobi
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property Device
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property 
KernelDriver
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property 
NetworkInterface
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property 
InterfaceNumber
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property 
NetworkInterfaceIndex
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property Bus
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:ofono_modem_register() 0x5d50280
ofonod[1888]: plugins/gobi.c:gobi_probe() 0x5d50280
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
KernelDriver
ofonod[1888]: plugins/gobi.c:gobi_probe() kernel_driver: qmi_wwan
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
NetworkInterfaceIndex
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
NetworkInterface
ofonod[1888]: plugins/gobi.c:gobi_probe() net: wwan0 (6)
ofonod[1888]: src/modem.c:ofono_modem_set_capabilities() 1
ofonod[1888]: gobi_slot_plugin_start
ofonod[1888]: src/modem.c:emit_modem_added() 0x5d50280
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:call_modemwatches() 0x5d50280 added:1
ofonod[1888]: plugins/dun_gw_bluez5.c:modem_watch() modem: 0x5d50280, added: 1
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() modem: 0x5d50280, added: 1
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() Adding modem 0x5d50280, 
info: 0x5d8fc60
ofonod[1888]: plugins/sailfish_bt.c:modem_watch() modem: 0x5d50280, added: 1
ofonod[1888]: plugins/smart-messaging.c:modem_watch() modem: 0x5d50280, added: 
1
ofonod[1888]: plugins/push-notification.c:modem_watch() modem: 0x5d50280, 
added: 1
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_modem_watch() modem: 
0x5d50280, added: 1
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/handsfree-audio.c:am_agent_register() Agent :1.51 registered 
with the CODECs: CVSD
ofonod[1888]: src/handsfree-audio.c:am_agent_register() Wideband speech 
disabled: no mSBC support
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking MODEM request GetAll 0x5db8160
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: plugins/hfp_hf_bluez5.c:connect_handler() Registering External 
Profile handler ...
ofonod[1888]: plugins/bluez5.c:bt_register_profile() Bluetooth: Registering 
0000111e-0000-1000-8000-00805f9b34fb (hfp_hf) profile
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5ddd540
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5ddf9a0
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5de4730
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5de6b90
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5de8ff0
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5df2710
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5df71b0
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5df9610
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5dfba70
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5dfded0
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5dfe2f0
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5dfe710
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_reply_or_block() 
blocking IMEI request GetAll8 0x5e07290
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: plugins/bluez5.c:profile_register_cb() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
DevicePath
ofonod[1888]: src/modem.c:ofono_modem_create() name: hfp/org/bluez/hci0/
dev_14_13_33_81_6B_CC, type: hfp
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5e2a410 property Remote
ofonod[1888]: src/modem.c:set_modem_property() modem 0x5e2a410 property 
DevicePath
ofonod[1888]: src/modem.c:ofono_modem_register() 0x5e2a410
ofonod[1888]: plugins/hfp_hf_bluez5.c:hfp_probe() modem: 0x5e2a410
ofonod[1888]: src/modem.c:emit_modem_added() 0x5e2a410
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:call_modemwatches() 0x5e2a410 added:1
ofonod[1888]: plugins/dun_gw_bluez5.c:modem_watch() modem: 0x5e2a410, added: 1
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() modem: 0x5e2a410, added: 1
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() Adding modem 0x5e2a410, 
info: 0x5e40b80
ofonod[1888]: plugins/sailfish_bt.c:modem_watch() modem: 0x5e2a410, added: 1
ofonod[1888]: plugins/smart-messaging.c:modem_watch() modem: 0x5e2a410, added: 
1
ofonod[1888]: plugins/push-notification.c:modem_watch() modem: 0x5e2a410, 
added: 1
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_modem_watch() modem: 
0x5e2a410, added: 1
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
DevicePath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
DevicePath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: plugins/gobi.c:gobi_enable() 0x5d50280
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
KernelDriver
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property Device
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: plugins/hfp_hf_bluez5.c:hfp_enable() 0x5e2a410
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
DevicePath
ofonod[1888]: plugins/bluez5.c:device_send_message() Bluetooth: sending 
ConnectProfile for 0000111f-0000-1000-8000-00805f9b34fb on /org/bluez/hci0/
dev_14_13_33_81_6B_CC
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: ConnectProfile() replied an error: org.bluez.Error.NotReady, br-
connection-adapter-not-powered
ofonod[1888]: src/slot-manager.c:slot_manager_init_countdown_cb() done with 
registrations
ofonod[1888]: plugins/gobi.c:gobi_slot_driver_init() gobi_slot_driver_init
ofonod[1888]: plugins/gobi.c:gobi_slot_driver_start() gobi_slot_driver_start
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: plugins/gobi.c:discover_cb() 
ofonod[1888]: plugins/gobi.c:create_dms_cb() 
ofonod[1888]: plugins/gobi.c:create_wda_cb() 
ofonod[1888]: plugins/gobi.c:get_data_format_cb() 
ofonod[1888]: Got IMEI 867698048642485
ofonod[1888]: plugins/gobi.c:gobi_slot_driver_startup_check() 
gobi_slot_driver_startup_check
ofonod[1888]: src/sailfish_watch.c:ofono_watch_new() quectelqmi_0 created
ofonod[1888]: src/sim-info-dbus.c:sim_info_dbus_new() /quectelqmi_0
ofonod[1888]: src/cell-info-control.c:cell_info_control_get() /quectelqmi_0 
created
ofonod[1888]: src/slot-manager.c:slot_add_internal() quectelqmi_0
ofonod[1888]: plugins/gobi.c:get_caps_cb() 
ofonod[1888]: plugins/gobi.c:get_caps_cb() service capabilities 4
ofonod[1888]: plugins/gobi.c:get_caps_cb() sim supported 2
ofonod[1888]: plugins/gobi.c:get_caps_cb() radio = 4
ofonod[1888]: plugins/gobi.c:get_caps_cb() radio = 5
ofonod[1888]: plugins/gobi.c:get_caps_cb() radio = 8
ofonod[1888]: plugins/gobi.c:get_oper_mode_cb() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
AlwaysOnline
ofonod[1888]: src/modem.c:modem_change_state() old state: 0, new state: 1
ofonod[1888]: plugins/gobi.c:gobi_pre_sim() 0x5d50280
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_devinfo_probe() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
ForceSimLegacy
ofonod[1888]: drivers/qmimodem/sim.c:qmi_sim_probe() 
ofonod[1888]: drivers/qmimodem/voicecall.c:qmi_voicecall_probe() 
ofonod[1888]: plugins/gobi.c:gobi_slot_set_sim_state() gobi_slot_set_sim_state
ofonod[1888]: src/slot-manager.c:slot_manager_update_ready() ready
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_set_block() unblocking 
ALL requests
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_signal_boolean() 
ReadyChanged 1
ofonod[1888]: drivers/qmimodem/devinfo.c:create_dms_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_query_caps() 
ofonod[1888]: drivers/qmimodem/sim.c:create_dms_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:create_voice_cb() 
ofonod[1888]: plugins/hfp_ag_bluez5.c:voicecall_watch() 
ofonod[1888]: drivers/qmimodem/devinfo.c:get_caps_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_query_manufacturer() 
ofonod[1888]: drivers/qmimodem/sim.c:create_uim_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:string_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_query_model() 
ofonod[1888]: drivers/qmimodem/sim.c:event_registration_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:event_registration_cb() event mask 0x0003
ofonod[1888]: drivers/qmimodem/devinfo.c:string_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_query_revision() 
ofonod[1888]: drivers/qmimodem/sim.c:get_card_status_cb() 
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: src/sailfish_watch.c:ofono_watch_sim_notify() quectelqmi_0 sim 
registered
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: src/sim.c:ofono_sim_add_iccid_watch() 0x5eeec00
ofonod[1888]: src/sim.c:ofono_sim_add_imsi_watch() 0x5eeec00
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_sim_watch() registered
ofonod[1888]: plugins/hfp_ag_bluez5.c:sim_watch() 
ofonod[1888]: src/sim.c:ofono_sim_add_state_watch() 0x5eeec00
ofonod[1888]: drivers/qmimodem/devinfo.c:string_cb() 
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_query_serial() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fb7 path 
len 0
ofonod[1888]: drivers/qmimodem/devinfo.c:get_ids_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: Requested file structure differs from SIM: 6fb7
ofonod[1888]: src/voicecall.c:ecc_g2_read_cb() 0
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fb7 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fb7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/voicecall.c:ecc_g3_read_cb() 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fb7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/voicecall.c:ecc_g3_read_cb() 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fb7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/voicecall.c:ecc_g3_read_cb() 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fb7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/voicecall.c:ecc_g3_read_cb() 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fb7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/voicecall.c:ecc_g3_read_cb() 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x2fe2 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x2fe2 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 10
ofonod[1888]: src/sim-info.c:sim_info_iccid_watch_cb() quectelqmi_0 
8944200122784036312
ofonod[1888]: src/sim-info.c:sim_info_load_cache() quectelqmi_0 
imsi[8944200122784036312] = 234206313731703
ofonod[1888]: src/sim-info.c:sim_info_load_cache() quectelqmi_0 no spn for 
imsi 234206313731703
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f05 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x6f05 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 10
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x2f05 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x2f05 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 10
==1888== Invalid read of size 1
==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
==1888==    by 0x4C236F: sim_efpl_read_cb (sim.c:2456)
==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
==1888==    by 0x422907: read_generic_cb (sim.c:221)
==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
==1888==    by 0x41AF87: __rx_message (qmi.c:863)
==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x49B0E7: event_check (main.c:196)
==1888==  Address 0x5fd229a is 0 bytes after a block of size 10 alloc'd
==1888==    at 0x486D6C4: calloc (vg_replace_malloc.c:1328)
==1888==    by 0x4E24D7: sim_fs_op_read_block (simfs.c:443)
==1888==    by 0x4A333C3: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888==    by 0x4A36647: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888==    by 0x4A370AF: g_main_loop_run (in /usr/lib64/libglib-2.0.so.
0.7800.4)
==1888==    by 0x41421F: main (main.c:314)
==1888== 
==1888== Invalid read of size 1
==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
==1888==    by 0x4C23EF: sim_efpl_read_cb (sim.c:2463)
==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
==1888==    by 0x422907: read_generic_cb (sim.c:221)
==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
==1888==    by 0x41AF87: __rx_message (qmi.c:863)
==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x49B0E7: event_check (main.c:196)
==1888==  Address 0x5fcd46a is 0 bytes after a block of size 10 alloc'd
==1888==    at 0x48687E8: malloc (vg_replace_malloc.c:381)
==1888==    by 0x4A3D29F: g_malloc (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888==    by 0x4A5781B: g_memdup2 (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2381)
==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2372)
==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
==1888==    by 0x422907: read_generic_cb (sim.c:221)
==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
==1888==    by 0x41AF87: __rx_message (qmi.c:863)
==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x49B0E7: event_check (main.c:196)
==1888== 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_query_passwd_state() 
ofonod[1888]: drivers/qmimodem/sim.c:query_passwd_state_cb() passwd state 0
ofonod[1888]: src/sim.c:sim_pin_query_cb() sim->pin_type: 0, pin_type: 0
ofonod[1888]: drivers/qmimodem/sim.c:qmi_query_pin_retries() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fae path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fad path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:query_pin_retries_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x6fad path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 4
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f16 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f38 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x6f38 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 12
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f56 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x6f56 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0, 
tocopy: 1
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_imsi() 
ofonod[1888]: drivers/qmimodem/sim.c:get_imsi_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_transparent() file id 0x6f07 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: src/sim.c:ofono_sim_add_spn_watch() 0x5eeec00
ofonod[1888]: src/slot-manager.c:slot_manager_update_modem_paths() Default 
voice SIM at /quectelqmi_0
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_signal_string() 
DefaultVoiceModemChanged /quectelqmi_0
ofonod[1888]: plugins/hfp_ag_bluez5.c:update_profile_registration() Registering 
HFP AG profile
ofonod[1888]: plugins/bluez5.c:bt_register_profile() Bluetooth: Registering 
0000111f-0000-1000-8000-00805f9b34fb (hfp_ag) profile
ofonod[1888]: src/modem.c:modem_change_state() old state: 1, new state: 2
ofonod[1888]: plugins/gobi.c:gobi_post_sim() 0x5d50280
ofonod[1888]: drivers/qmimodem/lte.c:qmimodem_lte_probe() qmimodem lte probe
ofonod[1888]: drivers/qmimodem/radio-settings.c:qmi_radio_settings_probe() 
ofonod[1888]: drivers/qmimodem/sms.c:qmi_sms_probe() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
ForceSimLegacy
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
NumPremuxInterfaces
ofonod[1888]: drivers/qmimodem/gprs.c:qmi_gprs_probe() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
NetworkInterface
ofonod[1888]: drivers/qmimodem/gprs-context.c:qmi_gprs_context_probe() 
ofonod[1888]: plugins/gobi.c:gobi_slot_set_sim_state() gobi_slot_set_sim_state
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
AlwaysOnline
ofonod[1888]: drivers/qmimodem/radio-settings.c:create_dms_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fca path 
len 0
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
AlwaysOnline
ofonod[1888]: plugins/gobi.c:gobi_set_online() 0x5d50280 online using_mux: no
ofonod[1888]: plugins/gobi.c:powered_up_cb() error: 0
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
SystemPath
ofonod[1888]: plugins/bluez5.c:profile_register_cb() 
ofonod[1888]: drivers/qmimodem/lte.c:create_wds_cb() 
ofonod[1888]: drivers/qmimodem/gprs-context.c:create_wds_cb() 
ofonod[1888]: drivers/qmimodem/radio-settings.c:create_nas_cb() 
ofonod[1888]: src/radio-settings.c:radio_load_settings() TechnologyPreference: 
2
ofonod[1888]: src/radio-settings.c:radio_load_settings() GsmBand: 0
ofonod[1888]: src/radio-settings.c:radio_load_settings() UmtsBand: 0
ofonod[1888]: drivers/qmimodem/radio-settings.c:qmi_set_rat_mode() 
ofonod[1888]: drivers/qmimodem/gprs.c:create_nas_cb() 
ofonod[1888]: drivers/qmimodem/gprs.c:create_wds_cb() 
ofonod[1888]: src/sailfish_watch.c:ofono_watch_gprs_notify() quectelqmi_0 gprs 
registered
ofonod[1888]: plugins/bluez5.c:bt_register_profile() Bluetooth: Registering 
00001103-0000-1000-8000-00805f9b34fb (dun_gw) profile
ofonod[1888]: drivers/qmimodem/sms.c:create_wms_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: plugins/bluez5.c:profile_register_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fca path len 
0
ofonod[1888]: plugins/gobi.c:set_online_cb() 
ofonod[1888]: src/slot-manager.c:slot_manager_update_modem_paths() Default 
data SIM at /quectelqmi_0
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_signal_string() 
DefaultDataModemChanged /quectelqmi_0
ofonod[1888]: src/modem.c:modem_change_state() old state: 2, new state: 3
ofonod[1888]: plugins/gobi.c:gobi_post_online() 0x5d50280
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_netreg_probe() 
ofonod[1888]: drivers/qmimodem/netmon.c:qmi_netmon_probe() 
ofonod[1888]: drivers/qmimodem/ussd.c:qmi_ussd_probe() 
ofonod[1888]: drivers/qmimodem/call-settings.c:qmi_call_settings_probe() 
ofonod[1888]: drivers/qmimodem/call-barring.c:qmi_call_barring_probe() 
ofonod[1888]: drivers/qmimodem/call-forwarding.c:qmi_call_forwarding_probe() 
ofonod[1888]: drivers/qmimodem/network-registration.c:create_nas_cb() 
ofonod[1888]: drivers/qmimodem/netmon.c:create_nas_cb() 
ofonod[1888]: drivers/qmimodem/ussd.c:create_voice_cb() 
ofonod[1888]: drivers/qmimodem/call-settings.c:create_voice_cb() 
ofonod[1888]: drivers/qmimodem/call-barring.c:create_voice_cb() 
ofonod[1888]: drivers/qmimodem/call-forwarding.c:create_voice_cb() 
ofonod[1888]: drivers/qmimodem/lte.c:get_default_profile_cb() 
ofonod[1888]: drivers/qmimodem/lte.c:get_default_profile_cb() Default profile 
index: 1
ofonod[1888]: drivers/qmimodem/radio-settings.c:set_system_selection_pref_cb() 
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 0
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
unregistered (0)
ofonod[1888]: src/gprs.c:ofono_gprs_detached_notify() /quectelqmi_0
ofonod[1888]: drivers/qmimodem/sms.c:set_event_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fca path len 
0
ofonod[1888]: drivers/qmimodem/network-registration.c:set_event_report_cb() 
ofonod[1888]: drivers/qmimodem/lte.c:reset_profile_cb() 
ofonod[1888]: drivers/qmimodem/lte.c:qmimodem_lte_set_default_attach_info() 
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() found 6 routes
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 0 => type 1 
value 3
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 1 => type 1 
value 1
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 2 => type 0 
value 1
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 3 => type 1 
value 1
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 4 => type 1 
value 1
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() type 0 class 5 => type 1 
value 1
ofonod[1888]: drivers/qmimodem/sms.c:get_routes_cb() transfer status report 0
ofonod[1888]: drivers/qmimodem/network-
registration.c:qmi_registration_status() 
ofonod[1888]: src/sim.c:ofono_sim_add_spn_watch() 0x5eeec00
ofonod[1888]: src/network.c:__ofono_netreg_add_status_watch() 0x60943f0
ofonod[1888]: src/sailfish_watch.c:ofono_watch_netreg_notify() quectelqmi_0 
netreg registered
ofonod[1888]: src/network.c:__ofono_netreg_add_status_watch() 0x60943f0
ofonod[1888]: src/sim-info.c:sim_info_set_netreg() quectelqmi_0 netreg 
attached
ofonod[1888]: src/network.c:__ofono_netreg_add_status_watch() 0x60943f0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fca path len 
0
ofonod[1888]: drivers/qmimodem/lte.c:modify_profile_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:set_routes_cb() 
ofonod[1888]: src/network.c:__ofono_netreg_add_status_watch() 0x60943f0
ofonod[1888]: drivers/qmimodem/sms.c:qmi_bearer_set() bearer 3
ofonod[1888]: src/sms.c:sms_restore_tx_queue() 
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_sms_watch() registered
ofonod[1888]: src/sms.c:__ofono_sms_datagram_watch_add() 0x602f240: dst -1, 
src -1
ofonod[1888]: plugins/push-notification.c:sms_watch() registered
ofonod[1888]: plugins/smart-messaging.c:sms_watch() registered
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() 
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() delete msg tag 0 mode 0
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() 
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() delete msg tag 2 mode 0
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() 
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() delete msg tag 0 mode 1
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() 
ofonod[1888]: drivers/qmimodem/sms.c:delete_msg() delete msg tag 2 mode 1
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_protocol() 
ofonod[1888]: drivers/qmimodem/network-registration.c:get_ss_info_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 2
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 0
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 2 lac -1 cellid -1 tech -1
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
2 tech -1 lac -1 ci -1
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, (nil)
ofonod[1888]: src/gprs.c:netreg_status_changed() 2 (searching)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 0, driver_attached: 0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() signal 
with 20%(-88 dBm) on 5
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fca path len 
0
ofonod[1888]: drivers/qmimodem/sms.c:qmi_sca_query() 
ofonod[1888]: src/sms.c:__ofono_sms_datagram_watch_add() 0x602f240: dst 9204, 
src -1
ofonod[1888]: src/sms.c:__ofono_sms_datagram_watch_add() 0x602f240: dst 9205, 
src -1
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
unregistered (0)
ofonod[1888]: src/gprs.c:ofono_gprs_detached_notify() /quectelqmi_0
ofonod[1888]: drivers/qmimodem/network-registration.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 2
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 5
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() i" 
(234:020)
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 2 lac -1 cellid -1 tech 2
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
2 tech 2 lac -1 ci -1
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, (nil)
ofonod[1888]: src/gprs.c:netreg_status_changed() 2 (searching)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 0, driver_attached: 0
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() rat 5 
band 80 channel 10564
ofonod[1888]: drivers/qmimodem/network-registration.c:signal_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
unregistered (0)
ofonod[1888]: src/gprs.c:ofono_gprs_detached_notify() /quectelqmi_0
ofonod[1888]: drivers/qmimodem/network-registration.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 2
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 5
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() i" 
(234:020)
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 2 lac -1 cellid -1 tech 2
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
2 tech 2 lac -1 ci -1
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, (nil)
ofonod[1888]: src/gprs.c:netreg_status_changed() 2 (searching)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 0, driver_attached: 0
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 3
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 4
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 5
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
unregistered (0)
ofonod[1888]: src/gprs.c:ofono_gprs_detached_notify() /quectelqmi_0
ofonod[1888]: drivers/qmimodem/network-registration.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 1
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 5
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() i" 
(234:020)
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 0 lac 1235 cellid 11988180 tech 2
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
1 tech 2 lac 1235 ci 11988180
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_current_operator() 
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, (nil)
ofonod[1888]: src/gprs.c:netreg_status_changed() 1 (registered)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 1, driver_attached: 0
ofonod[1888]: drivers/qmimodem/gprs.c:qmi_set_attached() attached 1
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_signal_strength() 
ofonod[1888]: src/gprs.c:netreg_status_changed() 1 (registered)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 1, driver_attached: 1
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() rat 5 
band 80 channel 10564
ofonod[1888]: drivers/qmimodem/sms.c:set_domain_pref_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_protocol_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_protocol_cb() query both CDMA and 
WCDMA
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list() 
ofonod[1888]: drivers/qmimodem/sms.c:get_smsc_addr_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fca path len 
0
ofonod[1888]: drivers/qmimodem/gprs.c:attach_detach_cb() 
ofonod[1888]: src/gprs.c:gprs_attach_callback() /quectelqmi_0 error = 0
ofonod[1888]: drivers/qmimodem/gprs.c:qmi_attached_status() 
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() signal 
with -88 dBm on 5
ofonod[1888]: src/network.c:ofono_netreg_strength_notify() strength 20
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list_cb() Err: get msg list 
mode=0 47=UNKNOWN
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list() 
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fc9 path 
len 0
ofonod[1888]: drivers/qmimodem/gprs.c:get_ss_info_cb() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 3
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 4
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 5
ofonod[1888]: src/gprs.c:registration_status_cb() /quectelqmi_0 error 0 status 
0
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
unregistered (0)
ofonod[1888]: src/gprs.c:ofono_gprs_detached_notify() /quectelqmi_0
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list_cb() 
ofonod[1888]: drivers/qmimodem/sms.c:get_msg_list_cb() msgs found 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc9 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc9 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc9 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc9 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc9 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f11 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: src/message-waiting.c:mw_cphs_mwis_read_cb() No CPHS MWIS on SIM
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f40 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6f40 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f46 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x4f20 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fcb path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fcb path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fcb path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fcb path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fcb path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fcb path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f15 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6fc7 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc7 path len 
0
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_record() file id 0x6fc7 path len 
0
ofonod[1888]: drivers/qmimodem/sim.c:read_generic_cb() 
ofonod[1888]: drivers/qmimodem/sim.c:qmi_read_attributes() file id 0x6f14 path 
len 0
ofonod[1888]: drivers/qmimodem/sim.c:get_file_attributes_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 3
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 4
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 5
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
registered (1)
ofonod[1888]: drivers/qmimodem/network-registration.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 1
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 5
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 2 lac -1 cellid -1 tech 2
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
1 tech 2 lac 1235 ci 11988180
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_current_operator() 
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, 0x6221c90
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_signal_strength() 
ofonod[1888]: src/gprs.c:netreg_status_changed() 1 (registered)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 1, driver_attached: 1
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3d len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3e len 
0x0004
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() signal 
with -88 dBm on 5
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3d len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3e len 
0x0004
ofonod[1888]: drivers/qmimodem/gprs.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/gprs.c:handle_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_ss_info() radio in use 5
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() 
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 3
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 4
ofonod[1888]: drivers/qmimodem/gprs.c:extract_dc_info() radio tech in use 5
ofonod[1888]: src/gprs.c:ofono_gprs_status_notify() /quectelqmi_0 status 
registered (1)
ofonod[1888]: drivers/qmimodem/network-registration.c:ss_info_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
serving system status 1
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() radio 
in use 5
ofonod[1888]: drivers/qmimodem/network-registration.c:extract_ss_info() 
roaming 2 lac -1 cellid 11988233 tech 2
ofonod[1888]: src/network.c:ofono_netreg_status_notify() /quectelqmi_0 status 
1 tech 2 lac 1235 ci 11988233
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_current_operator() 
ofonod[1888]: src/network.c:current_operator_callback() 0x60943f0, 0x6221c90
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_signal_strength() 
ofonod[1888]: src/gprs.c:netreg_status_changed() 1 (registered)
ofonod[1888]: src/gprs.c:gprs_netreg_update() attach: 1, driver_attached: 1
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3d len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3e len 
0x0004
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() 
ofonod[1888]: drivers/qmimodem/network-registration.c:event_notify() rat 5 
band 80 channel 10612
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() 
ofonod[1888]: drivers/qmimodem/network-registration.c:get_rssi_cb() signal 
with -88 dBm on 5
ofonod[1888]: drivers/qmimodem/network-registration.c:system_info_notify() 
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x12 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x13 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x14 len 
0x0003
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x18 len 
0x0021
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x1d len 
0x0006
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x20 len 
0x0008
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x23 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x28 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x29 len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x2e len 
0x0001
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x30 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x33 len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3d len 
0x0004
ofonod[1888]: drivers/qmimodem/qmi.c:qmi_result_print_tlvs() tlv: 0x3e len 
0x0004
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() 
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() Call 1 in 
state QMI_VOICE_CALL_STATE_SETUP(10)
ofonod[1888]: drivers/qmimodem/voicecall.c:ofono_call_list_notify() Notify new 
call 1
ofonod[1888]: src/voicecall.c:ofono_voicecall_notify() Got a voicecall event, 
status: incoming (4), id: 1, number: 01697361760 called_number: , called_name 
ofonod[1888]: src/voicecall.c:ofono_voicecall_notify() Did not find a call with 
id: 1
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() 
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() Call 1 in 
state QMI_VOICE_CALL_STATE_INCOMING(2)
ofonod[1888]: drivers/qmimodem/voicecall.c:answer() 
ofonod[1888]: drivers/qmimodem/voicecall.c:answer_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:answer_cb() Received answer result 
with call id 1
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() 
ofonod[1888]: drivers/qmimodem/voicecall.c:all_call_status_ind() Call 1 in 
state QMI_VOICE_CALL_STATE_CONV(3)
ofonod[1888]: src/voicecall.c:ofono_voicecall_notify() Got a voicecall event, 
status: active (0), id: 1, number: 01697361760 called_number: , called_name 
ofonod[1888]: src/voicecall.c:ofono_voicecall_notify() Found call with id: 1
ofonod[1888]: drivers/qmimodem/voicecall.c:send_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf() 
ofonod[1888]: drivers/qmimodem/voicecall.c:start_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:stop_cont_dtmf_cb() 
ofonod[1888]: drivers/qmimodem/voicecall.c:send_one_dtmf_cb() 
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.0/ttyUSB0/tty/ttyUSB0
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.1/ttyUSB1/tty/ttyUSB1
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.2/ttyUSB2/tty/ttyUSB2
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.0
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.3/ttyUSB3/tty/ttyUSB3
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.4/usbmisc/cdc-wdm0
ofonod[1888]: plugins/udevng.c:destroy_modem() /sys/devices/platform/
fe3c0000.usb/usb1/1-1
ofonod[1888]: src/modem.c:ofono_modem_remove() 0x5d50280
ofonod[1888]: src/modem.c:modem_unregister() 0x5d50280
ofonod[1888]: src/modem.c:modem_change_state() old state: 3, new state: 0
ofonod[1888]: src/modem.c:flush_atoms() 
ofonod[1888]: src/call-forwarding.c:call_forwarding_remove() atom: 0x60a0780
ofonod[1888]: drivers/qmimodem/call-forwarding.c:qmi_call_forwarding_remove() 
ofonod[1888]: src/call-barring.c:call_barring_remove() atom: 0x609e0a0
ofonod[1888]: drivers/qmimodem/call-barring.c:qmi_call_barring_remove() 
ofonod[1888]: src/call-settings.c:call_settings_remove() atom: 0x609b9c0
ofonod[1888]: drivers/qmimodem/call-settings.c:qmi_call_settings_remove() 
ofonod[1888]: src/ussd.c:ussd_remove() atom: 0x6099300
ofonod[1888]: drivers/qmimodem/ussd.c:qmi_ussd_remove() 
ofonod[1888]: drivers/qmimodem/netmon.c:qmi_netmon_remove() 
ofonod[1888]: src/sailfish_watch.c:ofono_watch_netreg_notify() quectelqmi_0 
netreg unregistered
ofonod[1888]: src/network.c:__ofono_netreg_remove_status_watch() 0x60943f0
ofonod[1888]: src/network.c:__ofono_netreg_remove_status_watch() 0x60943f0
ofonod[1888]: src/sim-info.c:sim_info_set_netreg() quectelqmi_0 netreg 
detached
ofonod[1888]: src/sim.c:ofono_sim_remove_spn_watch() 0x5eeec00
ofonod[1888]: src/network.c:netreg_remove() atom: 0x60944e0
ofonod[1888]: drivers/qmimodem/network-registration.c:qmi_netreg_remove() 
ofonod[1888]: src/gprs.c:gprs_context_unregister() 0x603bb10, 0x60370d0
ofonod[1888]: src/gprs.c:gprs_context_remove() atom: 0x603bb90
ofonod[1888]: drivers/qmimodem/gprs-context.c:qmi_gprs_context_remove() 
ofonod[1888]: src/sailfish_watch.c:ofono_watch_gprs_notify() quectelqmi_0 gprs 
unregistered
ofonod[1888]: plugins/bluez5.c:bt_unregister_profile() Bluetooth: Unregistering 
profile /bluetooth/profile/dun_gw
ofonod[1888]: src/gprs.c:gprs_unregister() 0x60370d0
ofonod[1888]: src/gprs.c:gprs_remove() atom: 0x60371b0
ofonod[1888]: drivers/qmimodem/gprs.c:qmi_gprs_remove() 
ofonod[1888]: src/message-waiting.c:mw_remove() atom: 0x6034240
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_sms_watch() unregistered
ofonod[1888]: plugins/push-notification.c:push_notification_cleanup() 0x5d98e20
ofonod[1888]: plugins/smart-messaging.c:smart_messaging_cleanup() 0x5d969c0
ofonod[1888]: src/smsagent.c:sms_agent_send_noreply() Sending: 
'org.ofono.SmartMessagingAgent.Release' to ':1.105' at '/commhistoryd/
SmartMessagingAgent/quectelqmi_0'
ofonod[1888]: src/sms.c:sms_remove() atom: 0x602f390
ofonod[1888]: drivers/qmimodem/sms.c:qmi_sms_remove() 
ofonod[1888]: src/radio-settings.c:radio_settings_remove() atom: 0x602c930
ofonod[1888]: drivers/qmimodem/radio-settings.c:qmi_radio_settings_remove() 
ofonod[1888]: src/lte.c:lte_remove() atom: 0x602a030
ofonod[1888]: drivers/qmimodem/lte.c:qmimodem_lte_remove() 
ofonod[1888]: plugins/hfp_ag_bluez5.c:voicecall_watch() 
ofonod[1888]: plugins/hfp_ag_bluez5.c:update_profile_registration() 
Unregistering HFP AG profile
ofonod[1888]: plugins/bluez5.c:bt_unregister_profile() Bluetooth: Unregistering 
profile /bluetooth/profile/hfp_ag
ofonod[1888]: src/voicecall.c:voicecall_remove() atom: 0x5ef1540
ofonod[1888]: drivers/qmimodem/voicecall.c:qmi_voicecall_remove() 
ofonod[1888]: src/sailfish_watch.c:ofono_watch_sim_notify() quectelqmi_0 sim 
unregistered
ofonod[1888]: src/sim.c:ofono_sim_remove_spn_watch() 0x5eeec00
ofonod[1888]: src/sim-info.c:sim_info_iccid_watch_cb() quectelqmi_0 (null)
ofonod[1888]: src/sim-info.c:sim_info_set_iccid() quectelqmi_0 no more iccid
ofonod[1888]: src/sim-info.c:sim_info_update_public_spn() quectelqmi_0 no 
public spn
ofonod[1888]: src/slot-manager.c:slot_manager_update_modem_paths() No default 
voice SIM
ofonod[1888]: src/slot-manager.c:slot_manager_update_modem_paths() No default 
data SIM
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_signal_string() 
DefaultVoiceModemChanged 
ofonod[1888]: src/slot-manager-dbus.c:slot_manager_dbus_signal_string() 
DefaultDataModemChanged 
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_sim_watch() unregistered
ofonod[1888]: plugins/hfp_ag_bluez5.c:sim_watch() 
ofonod[1888]: src/sim.c:sim_remove() atom: 0x5eeee00
ofonod[1888]: drivers/qmimodem/sim.c:qmi_sim_remove() 
ofonod[1888]: src/modem.c:devinfo_remove() atom: 0x5eea2a0
ofonod[1888]: drivers/qmimodem/devinfo.c:qmi_devinfo_remove() 
ofonod[1888]: plugins/gobi.c:gobi_disable() 0x5d50280
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5d50280 property 
AlwaysOnline
ofonod[1888]: plugins/gobi.c:gobi_remove() 0x5d50280
ofonod[1888]: plugins/gobi.c:gobi_slot_driver_cleanup() 
gobi_slot_driver_cleanup
ofonod[1888]: src/modem.c:unregister_property() property 0x5d6d5d0
ofonod[1888]: src/modem.c:unregister_property() property 0x5d66920
ofonod[1888]: src/modem.c:unregister_property() property 0x5d6b1a0
ofonod[1888]: src/modem.c:unregister_property() property 0x5d644f0
ofonod[1888]: src/modem.c:unregister_property() property 0x5d6fa50
ofonod[1888]: src/modem.c:unregister_property() property 0x5d62040
ofonod[1888]: src/modem.c:unregister_property() property 0x5d68d60
ofonod[1888]: src/modem.c:emit_modem_removed() 0x5d50280
ofonod[1888]: src/modem.c:call_modemwatches() 0x5d50280 added:0
ofonod[1888]: plugins/dun_gw_bluez5.c:modem_watch() modem: 0x5d50280, added: 0
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() modem: 0x5d50280, added: 0
ofonod[1888]: plugins/hfp_ag_bluez5.c:modem_watch() Removing modem 0x5d50280, 
info: 0x5d8fc60
ofonod[1888]: plugins/sailfish_bt.c:modem_watch() modem: 0x5d50280, added: 0
ofonod[1888]: plugins/smart-messaging.c:modem_watch() modem: 0x5d50280, added: 
0
ofonod[1888]: plugins/push-notification.c:modem_watch() modem: 0x5d50280, 
added: 0
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_modem_watch() modem: 
0x5d50280, added: 0
ofonod[1888]: plugins/udevng.c:destroy_modem() /dev/cdc-wdm0
ofonod[1888]: plugins/udevng.c:destroy_modem() wwan0
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.2
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.1
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.4/net/wwan0
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.3
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1/1-1:1.4
ofonod[1888]: plugins/udevng.c:remove_device() /sys/devices/platform/
fe3c0000.usb/usb1/1-1
ofonod[1888]: plugins/bluez5.c:unregister_profile_cb() 
ofonod[1888]: plugins/bluez5.c:unregister_profile_cb() 
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: src/modem.c:get_modem_property() modem 0x5e2a410 property 
SystemPath
ofonod[1888]: plugins/udevng.c:check_usb_device() usb [1d6b:0002]
ofonod[1888]: plugins/udevng.c:check_usb_device() usb [18d1:d00d]
ofonod[1888]: plugins/udevng.c:check_modem_list() 
^Cofonod[1888]: Terminating
ofonod[1888]: src/plugin.c:__ofono_plugin_cleanup() 
ofonod[1888]: plugins/sailfish_pushforwarder.c:pf_plugin_exit() 
ofonod[1888]: plugins/push-notification.c:push_notification_exit() 
ofonod[1888]: plugins/smart-messaging.c:smart_messaging_exit() 
ofonod[1888]: plugins/sailfish_bt.c:sfos_bt_exit() 
ofonod[1888]: plugins/hfp_ag_bluez5.c:hfp_ag_exit() 
ofonod[1888]: src/handsfree-audio.c:ofono_handsfree_card_driver_unregister() 
driver: 0x5838b0
ofonod[1888]: plugins/bluez5.c:bt_unregister_profile() Bluetooth: Unregistering 
profile /bluetooth/profile/dun_gw
ofonod[1888]: plugins/bluez5.c:bt_unregister_profile() Bluetooth: Unregistering 
profile /bluetooth/profile/hfp_hf
ofonod[1888]: src/handsfree-audio.c:ofono_handsfree_card_driver_unregister() 
driver: 0x583780
ofonod[1888]: src/modem.c:ofono_modem_remove() 0x5e2a410
ofonod[1888]: src/modem.c:modem_unregister() 0x5e2a410
ofonod[1888]: plugins/hfp_hf_bluez5.c:hfp_remove() modem: 0x5e2a410
ofonod[1888]: src/modem.c:unregister_property() property 0x5e2caf0
ofonod[1888]: src/modem.c:unregister_property() property 0x5e2efb0
ofonod[1888]: src/modem.c:emit_modem_removed() 0x5e2a410
ofonod[1888]: src/modem.c:call_modemwatches() 0x5e2a410 added:0
ofonod[1888]: src/private-network.c:ofono_private_network_driver_unregister() 
driver: 0x583728, name: ConnMan Private Network
ofonod[1888]: plugins/sailfish_access.c:sailfish_access_exit() 
ofonod[1888]: src/dbus-access.c:ofono_dbus_access_plugin_unregister() Sailfish 
D-Bus access
src/module.c:__ofono_modules_cleanup() 
ofonod[1888]: Exit
==1888== 
==1888== HEAP SUMMARY:
==1888==     in use at exit: 91,861 bytes in 589 blocks
==1888==   total heap usage: 42,863 allocs, 42,274 frees, 14,151,095 bytes 
allocated
==1888== 
==1888== 2 bytes in 1 blocks are definitely lost in loss record 1 of 521
==1888==    at 0x48687E8: malloc (vg_replace_malloc.c:381)
==1888==    by 0x4D3299F: strndup (strndup.c:43)
==1888==    by 0x48E8FC7: l_strndup (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x42CEE3: gobi_get_ids_cb (gobi.c:129)
==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
==1888==    by 0x41AF87: __rx_message (qmi.c:863)
==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
==1888==    by 0x49B0E7: event_check (main.c:196)
==1888==    by 0x4A363AF: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888==    by 0x4A3659B: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
==1888== 
==1888== LEAK SUMMARY:
==1888==    definitely lost: 2 bytes in 1 blocks
==1888==    indirectly lost: 0 bytes in 0 blocks
==1888==      possibly lost: 0 bytes in 0 blocks
==1888==    still reachable: 88,451 bytes in 554 blocks
==1888==         suppressed: 0 bytes in 0 blocks
==1888== Reachable blocks (those to which a pointer was found) are not shown.
==1888== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==1888== 
==1888== For lists of detected and suppressed errors, rerun with: -s
==1888== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)




On Friday 26 April 2024 22:26:33 BST Adam Pigg wrote:
> This version of the DTMF code goes back to V4, but adds in some of the
> changes in v5 to store the cb and data for the core ofono callback.
> 
> I have tested this with individual digits and a string of 10 digits 0-9
> using the dbus api.
> 
> I have also ran this through valgrind, once in the normal path, and again
> running an AT command against the modem to reboot it into fastboot mode to
> simulate removal.  Both cases found no leaks.
> 
> Hopefully this is getting closer!
> 
> Thanks
> 
> Adam
> 
> On Friday 26 April 2024 22:22:03 BST Adam Pigg wrote:
> > The send_dtmf function sets up a call to send_one_dtmf, which will call
> > the QMI_VOICE_START_CONTINUOUS_DTMF service function.  The parameters to
> > this call are a hard coded call-id and the DTMF character to send.
> > start_cont_dtmf_cb will then be called which will set up a call to
> > QMI_VOICE_STOP_CONTINUOUS_DTMF to stop the tone.  Finally,
> > stop_cont_dtmf_cb will check the final status.
> > 
> > ---
> > Changes in V4
> > -Removed unused enum
> > -Minor formatting fixes
> > -Ensure data->full_dtmf is free'd
> > -Use cb_data_ref/unref between chains of dtmf calls
> > 
> > Changes in V5/V6
> > -Store the core cb and cbd obejects in the voicall_data struct
> > -Fix incorrect free calls
> > ---
> > ---
> > 
> >  drivers/qmimodem/voice.h     |   6 ++
> >  drivers/qmimodem/voicecall.c | 127 +++++++++++++++++++++++++++++++++++
> >  2 files changed, 133 insertions(+)
> > 
> > diff --git a/drivers/qmimodem/voice.h b/drivers/qmimodem/voice.h
> > index caedb079..92186b72 100644
> > --- a/drivers/qmimodem/voice.h
> > +++ b/drivers/qmimodem/voice.h
> > @@ -53,6 +53,8 @@ enum voice_commands {
> > 
> >  	QMI_VOICE_GET_ALL_CALL_INFO =		0x2f,
> >  	QMI_VOICE_END_CALL =			0x21,
> >  	QMI_VOICE_ANSWER_CALL =			0x22,
> > 
> > +	QMI_VOICE_START_CONTINUOUS_DTMF =       0x29,
> > +	QMI_VOICE_STOP_CONTINUOUS_DTMF =        0x2A,
> > 
> >  	QMI_VOICE_SUPS_NOTIFICATION_IND =	0x32,
> >  	QMI_VOICE_SET_SUPS_SERVICE =		0x33,
> >  	QMI_VOICE_GET_CALL_WAITING =		0x34,
> > 
> > @@ -85,6 +87,10 @@ enum qmi_voice_call_state {
> > 
> >  	QMI_VOICE_CALL_STATE_SETUP
> >  
> >  };
> > 
> > +enum qmi_voice_call_dtmf_param {
> > +	QMI_VOICE_DTMF_DATA = 0x01,
> > +};
> > +
> > 
> >  struct qmi_ussd_data {
> >  
> >  	uint8_t dcs;
> >  	uint8_t length;
> > 
> > diff --git a/drivers/qmimodem/voicecall.c b/drivers/qmimodem/voicecall.c
> > index 7c9326fe..0df65226 100644
> > --- a/drivers/qmimodem/voicecall.c
> > +++ b/drivers/qmimodem/voicecall.c
> > @@ -42,6 +42,10 @@ struct voicecall_data {
> > 
> >  	uint16_t minor;
> >  	struct l_queue *call_list;
> >  	struct ofono_phone_number dialed;
> > 
> > +	char *full_dtmf;
> > +	const char *next_dtmf;
> > +	ofono_voicecall_cb_t send_dtmf_cb;
> > +	struct cb_data *send_dtmf_data;
> > 
> >  };
> >  
> >  struct qmi_voice_call_information_instance {
> > 
> > @@ -599,6 +603,127 @@ static void hangup_active(struct ofono_voicecall
> > *vc,
> > ofono_voicecall_cb_t cb, release_specific(vc, call->id, cb, data);
> > 
> >  }
> > 
> > +static void stop_cont_dtmf_cb(struct qmi_result *result, void *user_data)
> > +{
> > +	struct cb_data *cbd = user_data;
> > +	ofono_voicecall_cb_t cb = cbd->cb;
> > +
> > +	uint16_t error;
> > +
> > +	DBG("");
> > +
> > +	if (qmi_result_set_error(result, &error)) {
> > +		DBG("QMI Error %d", error);
> > +		CALLBACK_WITH_FAILURE(cb, cbd);
> > +		return;
> > +	}
> > +
> > +	CALLBACK_WITH_SUCCESS(cb, cbd);
> > +}
> > +
> > +static void start_cont_dtmf_cb(struct qmi_result *result, void
> > *user_data)
> > +{
> > +	struct cb_data *cbd = user_data;
> > +	ofono_voicecall_cb_t cb = cbd->cb;
> > +	struct ofono_voicecall *vc = cbd->user;
> > +	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
> > +	uint16_t error;
> > +	struct qmi_param *param;
> > +
> > +	DBG("");
> > +
> > +	if (qmi_result_set_error(result, &error)) {
> > +		DBG("QMI Error %d", error);
> > +		CALLBACK_WITH_FAILURE(cb, cbd);
> > +		return;
> > +	}
> > +
> > +	param = qmi_param_new();
> > +
> > +	if (!qmi_param_append_uint8(param, QMI_VOICE_DTMF_DATA, 0xff))
> > +		goto error;
> > +
> > +	if (qmi_service_send(vd->voice, QMI_VOICE_STOP_CONTINUOUS_DTMF,
> 
> param,
> 
> > +			stop_cont_dtmf_cb, cbd, cb_data_unref) > 0) 
{
> > +		cb_data_ref(cbd);
> > +		return;
> > +	}
> > +
> > +error:
> > +	CALLBACK_WITH_FAILURE(cb, cbd->data);
> > +	l_free(param);
> > +}
> > +
> > +static void send_one_dtmf(struct ofono_voicecall *vc, const char dtmf,
> > +				ofono_voicecall_cb_t cb, void
> 
> *data)
> 
> > +{
> > +	struct voicecall_data *vd = data;
> > +	struct qmi_param *param;
> > +	uint8_t param_body[2];
> > +	struct cb_data *cbd = cb_data_new(cb, data);
> > +
> > +	DBG("");
> > +
> > +	cbd->user = vc;
> > +
> > +	param = qmi_param_new();
> > +
> > +	param_body[0] = 0xff;
> > +	param_body[1] = (uint8_t)dtmf;
> > +
> > +	if (!qmi_param_append(param, QMI_VOICE_DTMF_DATA,
> 
> sizeof(param_body),
> 
> > +			param_body))
> > +		goto error;
> > +
> > +	if (qmi_service_send(vd->voice, QMI_VOICE_START_CONTINUOUS_DTMF,
> 
> param,
> 
> > +			start_cont_dtmf_cb, cbd, cb_data_unref) > 0)
> > +		return;
> > +
> > +error:
> > +	CALLBACK_WITH_FAILURE(cb, data);
> > +	l_free(param);
> > +}
> > +
> > +static void send_one_dtmf_cb(const struct ofono_error *error, void *data)
> > +{
> > +	struct cb_data *cbd = data;
> > +	struct ofono_voicecall *vc = cbd->user;
> > +	struct voicecall_data *vd = cbd->data;
> > +
> > +	DBG("");
> > +
> > +	if (error->type != OFONO_ERROR_TYPE_NO_ERROR ||
> > +			*vd->next_dtmf == 0) {
> > +		if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
> > +			CALLBACK_WITH_SUCCESS(vd->send_dtmf_cb, vd-
> >
> >send_dtmf_data);
> >
> > +		else
> > +			CALLBACK_WITH_FAILURE(vd->send_dtmf_cb, vd-
> >
> >send_dtmf_data);
> >
> > +
> > +		l_free(vd->full_dtmf);
> > +		vd->full_dtmf = NULL;
> > +	} else {
> > +		send_one_dtmf(vc,
> > +				*(vd->next_dtmf++),
> > +				send_one_dtmf_cb, vd);
> > +	}
> > +}
> > +
> > +static void send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
> > +			ofono_voicecall_cb_t cb, void *data)
> > +{
> > +	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
> > +
> > +	DBG("");
> > +
> > +	l_free(vd->full_dtmf);
> > +	vd->full_dtmf = l_strdup(dtmf);
> > +	vd->next_dtmf = &vd->full_dtmf[1];
> > +	vd->send_dtmf_data = data;
> > +	vd->send_dtmf_cb = cb;
> > +
> > +	send_one_dtmf(vc, *dtmf, send_one_dtmf_cb, vd);
> > +}
> > +
> > 
> >  static void create_voice_cb(struct qmi_service *service, void *user_data)
> >  {
> >  
> >  	struct ofono_voicecall *vc = user_data;
> > 
> > @@ -656,6 +781,7 @@ static void qmi_voicecall_remove(struct
> > ofono_voicecall
> > *vc) qmi_service_free(data->voice);
> > 
> >  	l_queue_destroy(data->call_list, l_free);
> > 
> > +	l_free(data->full_dtmf);
> > 
> >  	l_free(data);
> >  
> >  }
> > 
> > @@ -666,6 +792,7 @@ static const struct ofono_voicecall_driver driver = {
> > 
> >  	.answer		= answer,
> >  	.hangup_active  = hangup_active,
> >  	.release_specific  = release_specific,
> > 
> > +	.send_tones     = send_dtmf,
> > 
> >  };
> >  
> >  OFONO_ATOM_DRIVER_BUILTIN(voicecall, qmimodem, &driver)
Denis Kenzior April 29, 2024, 4:14 p.m. UTC | #3
Hi Adam,

On 4/27/24 12:31 PM, adam@piggz.co.uk wrote:
> I thought I would include the valgrind output while removing the modem mid-
> call after sending some dtmf digits.
> 
> The leak which is identified at the end is in a patch im not upstreaming, which
> is part of the making the gobi driver work with the other patches im using to
> support sailfish.  The other thing of note is some logs relating to the SIM
> code.

Thanks for the report, this is exactly the kind of stuff I'd like to see when 
people report possible bugs.

<snip>

> ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0,
> tocopy: 10
> ==1888== Invalid read of size 1
> ==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
> ==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
> ==1888==    by 0x4C236F: sim_efpl_read_cb (sim.c:2456)
> ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x49B0E7: event_check (main.c:196)
> ==1888==  Address 0x5fd229a is 0 bytes after a block of size 10 alloc'd
> ==1888==    at 0x486D6C4: calloc (vg_replace_malloc.c:1328)
> ==1888==    by 0x4E24D7: sim_fs_op_read_block (simfs.c:443)
> ==1888==    by 0x4A333C3: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
> ==1888==    by 0x4A36647: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
> ==1888==    by 0x4A370AF: g_main_loop_run (in /usr/lib64/libglib-2.0.so.
> 0.7800.4)
> ==1888==    by 0x41421F: main (main.c:314)
> ==1888==
> ==1888== Invalid read of size 1
> ==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
> ==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
> ==1888==    by 0x4C23EF: sim_efpl_read_cb (sim.c:2463)
> ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x49B0E7: event_check (main.c:196)
> ==1888==  Address 0x5fcd46a is 0 bytes after a block of size 10 alloc'd
> ==1888==    at 0x48687E8: malloc (vg_replace_malloc.c:381)
> ==1888==    by 0x4A3D29F: g_malloc (in /usr/lib64/libglib-2.0.so.0.7800.4)
> ==1888==    by 0x4A5781B: g_memdup2 (in /usr/lib64/libglib-2.0.so.0.7800.4)
> ==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2381)
> ==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2372)
> ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> ==1888==    by 0x49B0E7: event_check (main.c:196)
> ==1888==

This should be fixed in ell in this commit (part of 0.64)

https://git.kernel.org/pub/scm/libs/ell/ell.git/commit/?id=57fcbf80bff6fdbf10b21bd4d3f3e282f14599b9

Could you upgrade ell and see if this is fixed?  Might have to rm -rf 
/var/lib/ofono/* first, to make sure the sim file cache is cleared.

Regards,
-Denis
Adam Pigg April 29, 2024, 8:12 p.m. UTC | #4
Hi Dennis

On Monday 29 April 2024 17:14:05 BST Denis Kenzior wrote:
> Hi Adam,
> 
> On 4/27/24 12:31 PM, adam@piggz.co.uk wrote:
> > I thought I would include the valgrind output while removing the modem
> > mid-
> > call after sending some dtmf digits.
> > 
> > The leak which is identified at the end is in a patch im not upstreaming,
> > which is part of the making the gobi driver work with the other patches
> > im using to support sailfish.  The other thing of note is some logs
> > relating to the SIM code.
> 
> Thanks for the report, this is exactly the kind of stuff I'd like to see
> when people report possible bugs.
> 
> <snip>
> 
> > ofonod[1888]: src/simfs.c:sim_fs_op_read_block_cb() bufoff: 0, dataoff: 0,
> > tocopy: 10
> > ==1888== Invalid read of size 1
> > ==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
> > ==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
> > ==1888==    by 0x4C236F: sim_efpl_read_cb (sim.c:2456)
> > ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> > ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> > ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> > ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> > ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> > ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x49B0E7: event_check (main.c:196)
> > ==1888==  Address 0x5fd229a is 0 bytes after a block of size 10 alloc'd
> > ==1888==    at 0x486D6C4: calloc (vg_replace_malloc.c:1328)
> > ==1888==    by 0x4E24D7: sim_fs_op_read_block (simfs.c:443)
> > ==1888==    by 0x4A333C3: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
> > ==1888==    by 0x4A36647: ??? (in /usr/lib64/libglib-2.0.so.0.7800.4)
> > ==1888==    by 0x4A370AF: g_main_loop_run (in /usr/lib64/libglib-2.0.so.
> > 0.7800.4)
> > ==1888==    by 0x41421F: main (main.c:314)
> > ==1888==
> > ==1888== Invalid read of size 1
> > ==1888==    at 0x486EA2C: strlen (vg_replace_strmem.c:494)
> > ==1888==    by 0x48EA3FF: l_ascii_strdown (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x4CD4DF: sim_parse_language_list (simutil.c:1853)
> > ==1888==    by 0x4C23EF: sim_efpl_read_cb (sim.c:2463)
> > ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> > ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> > ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> > ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> > ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> > ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x49B0E7: event_check (main.c:196)
> > ==1888==  Address 0x5fcd46a is 0 bytes after a block of size 10 alloc'd
> > ==1888==    at 0x48687E8: malloc (vg_replace_malloc.c:381)
> > ==1888==    by 0x4A3D29F: g_malloc (in /usr/lib64/libglib-2.0.so.0.7800.4)
> > ==1888==    by 0x4A5781B: g_memdup2 (in
> > /usr/lib64/libglib-2.0.so.0.7800.4)
> > ==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2381)
> > ==1888==    by 0x4C0C27: sim_efli_read_cb (sim.c:2372)
> > ==1888==    by 0x4E315B: sim_fs_op_read_block_cb (simfs.c:415)
> > ==1888==    by 0x422907: read_generic_cb (sim.c:221)
> > ==1888==    by 0x41A617: service_send_callback (qmi.c:2784)
> > ==1888==    by 0x41AF87: __rx_message (qmi.c:863)
> > ==1888==    by 0x41BFE3: received_qmux_data (qmi.c:1408)
> > ==1888==    by 0x48F021F: ??? (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x48EF497: l_main_iterate (in /usr/lib64/libell.so.0.0.2)
> > ==1888==    by 0x49B0E7: event_check (main.c:196)
> > ==1888==
> 
> This should be fixed in ell in this commit (part of 0.64)
> 
> https://git.kernel.org/pub/scm/libs/ell/ell.git/commit/?id=57fcbf80bff6fdbf1
> 0b21bd4d3f3e282f14599b9
> 
> Could you upgrade ell and see if this is fixed?  Might have to rm -rf
> /var/lib/ofono/* first, to make sure the sim file cache is cleared.
> 
Yes, installing 0.65 (from 0.62) seems to have fixed this error.  I was 
compiling with 0.65, but hadnt upgraded the version on the phone. (i use it 
externally)

> Regards,
> -Denis
patchwork-bot+ofono@kernel.org April 29, 2024, 9:20 p.m. UTC | #5
Hello:

This patch was applied to ofono.git (master)
by Denis Kenzior <denkenz@gmail.com>:

On Fri, 26 Apr 2024 22:22:03 +0100 you wrote:
> The send_dtmf function sets up a call to send_one_dtmf, which will call
> the QMI_VOICE_START_CONTINUOUS_DTMF service function.  The parameters to
> this call are a hard coded call-id and the DTMF character to send.
> start_cont_dtmf_cb will then be called which will set up a call to
> QMI_VOICE_STOP_CONTINUOUS_DTMF to stop the tone.  Finally,
> stop_cont_dtmf_cb will check the final status.
> 
> [...]

Here is the summary with links:
  - [v6] qmimodem: voicecall: Implement DTMF tones
    https://git.kernel.org/pub/scm/network/ofono/ofono.git/?id=2da052747738

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/qmimodem/voice.h b/drivers/qmimodem/voice.h
index caedb079..92186b72 100644
--- a/drivers/qmimodem/voice.h
+++ b/drivers/qmimodem/voice.h
@@ -53,6 +53,8 @@  enum voice_commands {
 	QMI_VOICE_GET_ALL_CALL_INFO =		0x2f,
 	QMI_VOICE_END_CALL =			0x21,
 	QMI_VOICE_ANSWER_CALL =			0x22,
+	QMI_VOICE_START_CONTINUOUS_DTMF =       0x29,
+	QMI_VOICE_STOP_CONTINUOUS_DTMF =        0x2A,
 	QMI_VOICE_SUPS_NOTIFICATION_IND =	0x32,
 	QMI_VOICE_SET_SUPS_SERVICE =		0x33,
 	QMI_VOICE_GET_CALL_WAITING =		0x34,
@@ -85,6 +87,10 @@  enum qmi_voice_call_state {
 	QMI_VOICE_CALL_STATE_SETUP
 };
 
+enum qmi_voice_call_dtmf_param {
+	QMI_VOICE_DTMF_DATA = 0x01,
+};
+
 struct qmi_ussd_data {
 	uint8_t dcs;
 	uint8_t length;
diff --git a/drivers/qmimodem/voicecall.c b/drivers/qmimodem/voicecall.c
index 7c9326fe..0df65226 100644
--- a/drivers/qmimodem/voicecall.c
+++ b/drivers/qmimodem/voicecall.c
@@ -42,6 +42,10 @@  struct voicecall_data {
 	uint16_t minor;
 	struct l_queue *call_list;
 	struct ofono_phone_number dialed;
+	char *full_dtmf;
+	const char *next_dtmf;
+	ofono_voicecall_cb_t send_dtmf_cb;
+	struct cb_data *send_dtmf_data;
 };
 
 struct qmi_voice_call_information_instance {
@@ -599,6 +603,127 @@  static void hangup_active(struct ofono_voicecall *vc, ofono_voicecall_cb_t cb,
 	release_specific(vc, call->id, cb, data);
 }
 
+static void stop_cont_dtmf_cb(struct qmi_result *result, void *user_data)
+{
+	struct cb_data *cbd = user_data;
+	ofono_voicecall_cb_t cb = cbd->cb;
+
+	uint16_t error;
+
+	DBG("");
+
+	if (qmi_result_set_error(result, &error)) {
+		DBG("QMI Error %d", error);
+		CALLBACK_WITH_FAILURE(cb, cbd);
+		return;
+	}
+
+	CALLBACK_WITH_SUCCESS(cb, cbd);
+}
+
+static void start_cont_dtmf_cb(struct qmi_result *result, void *user_data)
+{
+	struct cb_data *cbd = user_data;
+	ofono_voicecall_cb_t cb = cbd->cb;
+	struct ofono_voicecall *vc = cbd->user;
+	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+	uint16_t error;
+	struct qmi_param *param;
+
+	DBG("");
+
+	if (qmi_result_set_error(result, &error)) {
+		DBG("QMI Error %d", error);
+		CALLBACK_WITH_FAILURE(cb, cbd);
+		return;
+	}
+
+	param = qmi_param_new();
+
+	if (!qmi_param_append_uint8(param, QMI_VOICE_DTMF_DATA, 0xff))
+		goto error;
+
+	if (qmi_service_send(vd->voice, QMI_VOICE_STOP_CONTINUOUS_DTMF, param,
+			stop_cont_dtmf_cb, cbd, cb_data_unref) > 0) {
+		cb_data_ref(cbd);
+		return;
+	}
+
+error:
+	CALLBACK_WITH_FAILURE(cb, cbd->data);
+	l_free(param);
+}
+
+static void send_one_dtmf(struct ofono_voicecall *vc, const char dtmf,
+				ofono_voicecall_cb_t cb, void *data)
+{
+	struct voicecall_data *vd = data;
+	struct qmi_param *param;
+	uint8_t param_body[2];
+	struct cb_data *cbd = cb_data_new(cb, data);
+
+	DBG("");
+
+	cbd->user = vc;
+
+	param = qmi_param_new();
+
+	param_body[0] = 0xff;
+	param_body[1] = (uint8_t)dtmf;
+
+	if (!qmi_param_append(param, QMI_VOICE_DTMF_DATA, sizeof(param_body),
+			param_body))
+		goto error;
+
+	if (qmi_service_send(vd->voice, QMI_VOICE_START_CONTINUOUS_DTMF, param,
+			start_cont_dtmf_cb, cbd, cb_data_unref) > 0)
+		return;
+
+error:
+	CALLBACK_WITH_FAILURE(cb, data);
+	l_free(param);
+}
+
+static void send_one_dtmf_cb(const struct ofono_error *error, void *data)
+{
+	struct cb_data *cbd = data;
+	struct ofono_voicecall *vc = cbd->user;
+	struct voicecall_data *vd = cbd->data;
+
+	DBG("");
+
+	if (error->type != OFONO_ERROR_TYPE_NO_ERROR ||
+			*vd->next_dtmf == 0) {
+		if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
+			CALLBACK_WITH_SUCCESS(vd->send_dtmf_cb, vd->send_dtmf_data);
+		else
+			CALLBACK_WITH_FAILURE(vd->send_dtmf_cb, vd->send_dtmf_data);
+
+		l_free(vd->full_dtmf);
+		vd->full_dtmf = NULL;
+	} else {
+		send_one_dtmf(vc,
+				*(vd->next_dtmf++),
+				send_one_dtmf_cb, vd);
+	}
+}
+
+static void send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
+			ofono_voicecall_cb_t cb, void *data)
+{
+	struct voicecall_data *vd = ofono_voicecall_get_data(vc);
+
+	DBG("");
+
+	l_free(vd->full_dtmf);
+	vd->full_dtmf = l_strdup(dtmf);
+	vd->next_dtmf = &vd->full_dtmf[1];
+	vd->send_dtmf_data = data;
+	vd->send_dtmf_cb = cb;
+
+	send_one_dtmf(vc, *dtmf, send_one_dtmf_cb, vd);
+}
+
 static void create_voice_cb(struct qmi_service *service, void *user_data)
 {
 	struct ofono_voicecall *vc = user_data;
@@ -656,6 +781,7 @@  static void qmi_voicecall_remove(struct ofono_voicecall *vc)
 	qmi_service_free(data->voice);
 
 	l_queue_destroy(data->call_list, l_free);
+	l_free(data->full_dtmf);
 	l_free(data);
 }
 
@@ -666,6 +792,7 @@  static const struct ofono_voicecall_driver driver = {
 	.answer		= answer,
 	.hangup_active  = hangup_active,
 	.release_specific  = release_specific,
+	.send_tones     = send_dtmf,
 };
 
 OFONO_ATOM_DRIVER_BUILTIN(voicecall, qmimodem, &driver)