aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem.c')
-rw-r--r--src/mm-broadband-modem.c59
1 files changed, 54 insertions, 5 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 720ef62c..a3e69c08 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -6285,7 +6285,7 @@ ring_received (MMPortSerialAt *port,
//Do not match anything from regex
(void)info;
- mm_iface_modem_voice_create_call(MM_IFACE_MODEM_VOICE(self));
+ mm_iface_modem_voice_create_incoming_call(MM_IFACE_MODEM_VOICE(self));
}
static void
@@ -6293,14 +6293,47 @@ cring_received (MMPortSerialAt *port,
GMatchInfo *info,
MMBroadbandModem *self)
{
- gchar *str;
-
/* The match info gives us in which storage the index applies */
- str = mm_get_string_unquoted_from_match_info (info, 1);
+ gchar *str = mm_get_string_unquoted_from_match_info (info, 1);
//TODO: In str you could have "VOICE" or "DATA". Now consider only "VOICE"
g_free (str);
- mm_iface_modem_voice_create_call(MM_IFACE_MODEM_VOICE(self));
+ mm_iface_modem_voice_create_incoming_call(MM_IFACE_MODEM_VOICE(self));
+}
+
+static void
+clip_received (MMPortSerialAt *port,
+ GMatchInfo *info,
+ MMBroadbandModem *self)
+{
+ /* The match info gives us in which storage the index applies */
+ gchar *str = mm_get_string_unquoted_from_match_info (info, 1);
+
+ if( !str ) {
+ guint validity = 0;
+ guint type = 0;
+
+ mm_get_uint_from_match_info (info, 2, &type);
+ mm_get_uint_from_match_info (info, 3, &validity);
+
+ mm_dbg ("[%s:%d] CLIP regex => number:'%s', type:'%d', validity:'%d'", __func__, __LINE__, str, type, validity);
+
+ mm_iface_modem_voice_update_incoming_call_number(MM_IFACE_MODEM_VOICE(self), str, type, validity);
+
+ g_free(str);
+ }
+}
+
+static void
+nocarrier_received (MMPortSerialAt *port,
+ GMatchInfo *info,
+ MMBroadbandModem *self)
+{
+ //Do not match anything from regex
+ (void)info;
+
+ mm_dbg ("[%s:%d]", __func__, __LINE__);
+ mm_iface_modem_voice_network_hangup(MM_IFACE_MODEM_VOICE(self));
}
static void
@@ -6344,8 +6377,10 @@ set_voice_unsolicited_events_handlers (MMIfaceModemVoice *self,
{
GSimpleAsyncResult *result;
MMPortSerialAt *ports[2];
+ GRegex *nocarrier_regex;
GRegex *cring_regex;
GRegex *ring_regex;
+ GRegex *clip_regex;
GRegex *dtmf_regex;
guint i;
@@ -6354,8 +6389,10 @@ set_voice_unsolicited_events_handlers (MMIfaceModemVoice *self,
user_data,
set_voice_unsolicited_events_handlers);
+ nocarrier_regex = mm_voice_nocarrier_regex_get ();
cring_regex = mm_voice_cring_regex_get ();
ring_regex = mm_voice_ring_regex_get ();
+ clip_regex = mm_voice_clip_regex_get ();
dtmf_regex = mm_voice_dtmf_regex_get ();
ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
@@ -6383,6 +6420,18 @@ set_voice_unsolicited_events_handlers (MMIfaceModemVoice *self,
NULL);
mm_port_serial_at_add_unsolicited_msg_handler (
ports[i],
+ clip_regex,
+ enable ? (MMPortSerialAtUnsolicitedMsgFn) clip_received : NULL,
+ enable ? self : NULL,
+ NULL);
+ mm_port_serial_at_add_unsolicited_msg_handler (
+ ports[i],
+ nocarrier_regex,
+ enable ? (MMPortSerialAtUnsolicitedMsgFn) nocarrier_received : NULL,
+ enable ? self : NULL,
+ NULL);
+ mm_port_serial_at_add_unsolicited_msg_handler (
+ ports[i],
dtmf_regex,
enable ? (MMPortSerialAtUnsolicitedMsgFn) dtmf_received : NULL,
enable ? self : NULL,