Commit Graph

7297 Commits

Author SHA1 Message Date
Aleksander Morgado
4c2aa2b54e base-call: use g_object_connect() to connect all handlers 2019-07-11 23:21:00 +02:00
Aleksander Morgado
272abc6394 iface-modem-voice: use g_object_connect() to connect all handlers 2019-07-11 23:21:00 +02:00
Aleksander Morgado
148466f768 broadband-modem: implement LeaveMultiparty() with +CHLD=2x 2019-07-11 23:21:00 +02:00
Aleksander Morgado
75d2431f96 broadband-modem: implement JoinMultiparty() with +CHLD=3 2019-07-11 23:21:00 +02:00
Aleksander Morgado
511b0ff244 api,call: new JoinMultiparty() and LeaveMultiparty() methods 2019-07-11 23:21:00 +02:00
Aleksander Morgado
6f23519239 iface-modem-voice: disable special terminated match on multiparty calls 2019-07-11 23:21:00 +02:00
Aleksander Morgado
213c60b76d api,call: new Multiparty boolean property
It will be set to TRUE if this call is part of a multiparty call.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
8bc38110c9 base-call: remove in-call event and audio settings logic
The in-call unsolicited events and the in-call audio settings are
managed exclusively at modem level, and no longer at call object
level. This is because these two things are applicable to all calls
that may be active at the same time.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
73096c0596 broadband-modem: setup in-call unsolicited event handling
The in-call handlers will monitor events that report the call being
terminated.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
24c0c7aa6b huawei: audio channel setup at modem-level
The audio channel setup is shared between all ongoing calls, so it is
a modem-level feature, not specific to a single call.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
b7fa4e3661 base-call: allow updating audio settings from out of the call object
E.g. if we want the modem-level in-call state management to provide
what audio settings are expected in all ongoing calls.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
12bad162e3 huawei: voice-related URCs are not in-call
The URCs report the specific call index they apply to, so they should
be managed by the modem object and reported to the Voice interface.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
ee2f3fb904 iface-modem-voice: allow reporting received DTMF by call index
If the URC reporting the DTMF does not specify the call index,
mark it as received in all active ones.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
fca8955721 ublox: +UCALLSTAT as device-level URC, not in-call
+UCALLSTAT is used to report the state of specific calls by index, and
therefore this is not an in-call URC.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
55e37a6836 iface-modem-voice: allow reporting state updates of any single call
Instead of providing a method to exclusively provide incoming call
updates, make it more generic so that we allow plugins to provide
state updates for any kind of call, not just incoming ones.

The logic to match the call info provided by URCs is updated so that
it can be reused also by the single call reports, in addition to the
full call list reports.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
86aeb84f95 iface-modem-voice: handle in-call state at modem level
We cannot handle in-call state at call level because the state may
apply to multiple active calls at the same time:
 * the modem is in-call if there is at least one ongoing call (>=1).
 * the modem is not in-call if there are no ongoing calls (==0).

The new logic implements call state monitoring for all available call
objects, and whenever the state of one or more calls change, we'll go
over all of them to see how many of the calls can be considered to be
ongoing (i.e. not terminated, not unknown). If we have at least one
call ongoing, we'll setup the in-call state and otherwise, we'll clean
it up.

Setting up and cleaning up the in-call state involves unsolicited
message and audio channel settings management operations.
2019-07-11 23:21:00 +02:00
Aleksander Morgado
de2c24ec44 call-list: allow getting call object by DBus path 2019-07-11 23:21:00 +02:00
Aleksander Morgado
13b4c9f6ac iface-modem-voice: minor logging update 2019-07-11 23:21:00 +02:00
Aleksander Morgado
df8918ff8c base-call: implement Deflect() with +CTFR 2019-07-11 23:21:00 +02:00
Aleksander Morgado
222874299e api,call: new Deflect() method
This method allows deflecting an incoming or waiting call to a
different number.
2019-07-11 23:20:59 +02:00
Aleksander Morgado
81f1483eec broadband-modem: implement Transfer() with +CHLD=4 2019-07-11 23:20:59 +02:00
Aleksander Morgado
8b01958cb4 api,voice: new Transfer() method
This method will join all active and held calls into a single
multiparty call, and then request the network to terminate the call on
the subscriber's end and transfer the control of the call to the
parties that are still in the call.
2019-07-11 23:20:59 +02:00
Aleksander Morgado
7ceac6f789 broadband-modem: implement HangupAll() with +CHUP 2019-07-11 23:20:59 +02:00
Aleksander Morgado
efcc4c60fe api,voice: new HangupAll() method
This method will terminate all ongoing calls.
2019-07-11 23:20:59 +02:00
Aleksander Morgado
f065105f17 broadband-modem: implement HoldAndAccept() with +CHLD=2 2019-07-11 23:20:59 +02:00
Aleksander Morgado
c713c2c5f9 api,voice: new HoldAndAccept() method
This method will put the currently active call on hold, and right away
accept the next available call.

The user of the API does not need to specify explicitly which is the
next call to accept, because that is decided automatically:
  * If there is any waiting call, it will accept it right away.
  * If there is no waiting call but there is a held call, it will make
  the held call active again.
2019-07-11 23:20:59 +02:00
Aleksander Morgado
5de3c4893f broadband-modem: implement HangupAndAccept() with +CHLD=1 2019-07-11 23:20:59 +02:00
Aleksander Morgado
d56d1b2656 api,voice: new HangupAndAccept() method
This method will hangup the currently active call and right away
accept the next available call.

The user of the API does not need to specify explicitly which is the
next call to accept, because that is decided automatically:
  * If there is any waiting call, it will accept it right away.
  * If there is no waiting call but there is a held call, it will make
    the held call active again.
2019-07-11 23:20:59 +02:00
Aleksander Morgado
f994982cce base-call: support hanging up specific calls
E.g. we can hangup a waiting call without interfering with the active
one.
2019-07-11 23:01:30 +02:00
Aleksander Morgado
4b2f9e7d3e broadband-modem: implement call list polling with +CLCC 2019-07-11 23:01:30 +02:00
Aleksander Morgado
f699308958 cinterion: disable call list polling if ^SLCC is supported
Early detect that ^SLCC is supported, and disable the call list
polling in the interface if so.
2019-07-11 23:01:29 +02:00
Aleksander Morgado
d0c0e925b6 iface-modem-voice: setup full call list polling logic
If the modem supports call list polling, we'll setup a timeout to poll
for the full call list periodically, in order to get detailed call
states.

The timeout is setup as soon as a new call is created, and it will be
kept enabled as long as there is a call being established (i.e. not
unknown, not terminated, not active).
2019-07-11 23:01:08 +02:00
Aleksander Morgado
faaaf20276 cinterion: when ^SLCC is supported, detailed call state updates are implicit 2019-07-11 23:01:08 +02:00
Aleksander Morgado
b22f90c4c4 broadband-modem: if +CLCC is supported, call supports detailed events 2019-07-11 23:01:08 +02:00
Aleksander Morgado
47dd9fffac cinterion: support ^SLCC URCs as part of voice management
This command will give us URCs whenever the extended list of current
calls changes, which includes information about the actual state of
each call, even for calls in waiting state.

Therefore, as this is a URC that applies to all calls, it's enabled
and disabled as part of the modem voice interface, instead of doing it
as part of the call object itself (i.e. not treated as an in-call URC).
2019-07-11 23:01:08 +02:00
Aleksander Morgado
e931c0ae9c cinterion: implement reset 2019-07-11 23:00:50 +02:00
Aleksander Morgado
0f8580f36e cinterion: port type hints for the PLS8
The first two ports are AT control ports (application/modem). We rely
on AT^SQPORT to decide which one is which.

The last two ports are unknown and we explicitly ignore them to make
port probing much quicker.
2019-07-11 23:00:50 +02:00
Aleksander Morgado
ca88cdb9f7 iface-modem-voice: allow reporting the state of all ongoing calls
E.g. as per the AT+CLCC output.
2019-07-11 23:00:50 +02:00
Aleksander Morgado
1cc31df425 helpers: new '+CLCC' test response parser 2019-07-11 23:00:50 +02:00
Aleksander Morgado
67cc999266 base-call: if incoming call is reported terminated, cleanup timeout 2019-07-11 23:00:50 +02:00
Aleksander Morgado
cd2e851b8c base-call: allow skipping the timeout in incoming calls
E.g. if the modem supports reporting incoming call updates explicitly.
2019-07-11 23:00:50 +02:00
Aleksander Morgado
3873fda83f base-call: allow keeping ongoing call index for easy call matching 2019-07-11 23:00:50 +02:00
Aleksander Morgado
a006ed0744 base-call: add simple getters for the MmGdbusCall properties 2019-07-11 23:00:50 +02:00
Aleksander Morgado
8d267228cf call-list: allow iterating elements 2019-07-11 23:00:50 +02:00
Aleksander Morgado
dca00271ce broadband-modem: implement +CCWA URC handling 2019-07-11 23:00:50 +02:00
Aleksander Morgado
d9a7b403ee iface-modem-voice: allow creating incoming calls in waiting state 2019-07-11 23:00:50 +02:00
Aleksander Morgado
d3ef177f53 broadband-modem,voice: enable/disable call waiting indications 2019-07-11 23:00:50 +02:00
Aleksander Morgado
ed7be29111 broadband-modem,voice: disable unsolicited events 2019-07-11 23:00:50 +02:00
Aleksander Morgado
aa4ad45907 broadband-modem,voice: rework enabling of unsolicited events
The previous logic would end up returning an error if either +CLIP or
+CRC reported an error, and we should really avoid that, because our
setup is able to manage the voice calls even without those settings.

So, convert the logic into a small state machine and try to configure
the settings both in the primary and secondary ports, instead of just
in the primary one.
2019-07-11 11:42:01 +02:00
Aleksander Morgado
45c548c4dd docs: add missing MMCallStateReason documentation 2019-07-11 09:41:31 +00:00