The driver has a better idea of how to handle ATD being invoked when
a waiting/held/active call(s) is/are already present. Generally most
modems will swap the call automatically preserving the state of the
waiting call.
We do block dialing another call while a dial is still in progress.
According to 22.030, UDUB or CHLD=0 can only be invoked on waiting
calls. Most AT command based modems do not support using CHLD=0 on an
incoming call. So we remove the Busy method and invoke set_udub on
a call that is in the waiting state.
The logic for dialing a call while other calls are in the system is a
bit more complicated than what was implemented.
There are several cases to consider:
- Active Call and Held Call
In this situation we cannot dial, the user must drop one of the
calls.
- Active Call and Waiting Call -> We have to put the active call on
hold, unfortunately there is no standard command to do so without
affecting the waiting call. If the modem has a vendor specific
implementation, then try to use that.
- Active Call only -> Put the active call on hold. We use the
swap_without_accept implementation (if exists) to be safe, otherwise
we fall back to hold active calls.
- No Active calls -> Simply dial
Every single EF read callback checks the file type reported out of the
SIM is what it expects. Instead this should be done in one place and
the errors reported accordingly
We should start with a default set of ECC numbers which are always
available according to 22.101, even if no SIM present. Then when
EFecc is read, we update the EmergencyNumbers property. According to
22.101 the 112 and 911 numbers must always be available. Since these
numbers can also be stored on the SIM itself, we must avoid duplication.
Make this into a fully fledged entity, with a driver instead of the
current kludge. This means modem drivers can actually choose whether
to instantiate a CSSN atom or not
Move the notification functions from voicecall.c into ssn.c.
Move the cssn.h header into include/ssn.h and refactor
Update call barring to utilize ofono_ssn and use the new atom_watch
functionality to detect when ssn has been added or removed