At long last, my Pinephone has a GUI can receive phone calls! As it turns out,
I was wrong about there being no way of retrieving the phone number of the
calling party on RING: you just have to set AT+CLIP=1, and the +CLIP URC will
contain the phone number whenever the phone rings. Similarly, AT+COLP=1 lets
the phone be notified when the other end picks up if I start a
call. This means that we no longer have to issue AT+CLCC to get information
about all known calls anymore, simplifying atd substantially. It also means
that the call handler interface that I described last week is gone, replaced
by a simpler one.
Along with atd, we now have a calld, responsible for managing calls and
their GUIs. When calld is notified of an incoming call by atd,
it launches the answer program, which displays a dialog with the phone number
of the caller, along with two buttons to accept or decline the call. The return
code of answer is dependent upon whether call is accepted or declined,
so calld uses this information to determine whether to launch the call program,
which will be the interface for managing active calls. For now, calld supports
managing only one call at a time. Also it doesn't manage call audio yet, but I
plan to make it do so.
I also finally took the time to write a compositor based on swc. It is pretty
simple at the moment, only 79 lines of code. The point, however, is just to have
something to build upon as I need more compositor features.
The video demonstration is back this week. I am called (normally the phone number
of the callee would be where it says "redacted"), and calld is notified that
there is a call incoming by atd, and launches the answer dialog. I accept the call by
tapping the green button, which tells the answer dialog to exit with code 0,
notifying calld that I accepted the call. calld then launches the call program.
The green bar that you saw is where the audio input/output controls will eventually
go. I then end the call by tapping the red button. calld is notified that the
call program exited by SIGCHLD, and updates its internal state, leaving it ready
to accept a new call. I am called again, and I decline the call.