API Call proposal

Aleksander Morgado aleksander at aleksander.es
Mon Apr 20 06:51:17 PDT 2015


Hey Riccardo,

> in refer to opened bug https://bugs.freedesktop.org/show_bug.cgi?id=84981
> I propose the attached patch, to implement voice or data call in MM core.
> 
> Please let me know what you think.
> 

Thanks for moving this forward :)

>From my POV, this API should be managed very similar to how the
Messaging/SMS API works, clearly separating the modem actions (in the
Messaging interface) with the objects (in the SMS interface). In this
specific case, I'd suggest to have a new
"org.freedesktop.ModemManager1.Modem.Voice" interface for the modem
object, plus then a new "org.freedesktop.ModemManager1.Call" interface
for new "/org/freedesktop/ModemManager1/Call" objects.

Some of the methods defined already assume this, but I don't think it's
clearly explained. Having 2 separate interfaces would make more sense.

Also, I'd have also added the new enums in the
include/ModemManager-enums.h file already, and avoid explaining them in
the API file.

See my other comments inline.

> 
> From 6cb13d8396c4e6fa3e6fc8d1e10c73664f3bfd12 Mon Sep 17 00:00:00 2001
> From: Riccardo Vangelisti <riccardo.vangelisti at sadel.it>
> Date: Mon, 20 Apr 2015 12:58:16 +0200
> Subject: [PATCH] Added API proposal of voice/data call handling
> 
> ---
>  .../org.freedesktop.ModemManager1.Modem.Call.xml   | 118 +++++++++++++++++++++
>  1 file changed, 118 insertions(+)
>  create mode 100644 introspection/org.freedesktop.ModemManager1.Modem.Call.xml
> 
> diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Call.xml b/introspection/org.freedesktop.ModemManager1.Modem.Call.xml
> new file mode 100644
> index 0000000..3d8e08b
> --- /dev/null
> +++ b/introspection/org.freedesktop.ModemManager1.Modem.Call.xml
> @@ -0,0 +1,118 @@
> +<?xml version="1.0" encoding="UTF-8" ?>
> +
> +<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
> +
> +  <!--
> +      org.freedesktop.ModemManager1.Modem.Call:
> +      @short_description: The ModemManager Call interface.
> +
> +      The Call interface handles sending calls and notification of new
> +      incoming calls.
> +  -->
> +  <interface name="org.freedesktop.ModemManager1.Modem.Call">
> +
> +    <!--
> +        Start:
> +        @number: phone number
> +        @type: The type of call, same as "Type" property

Why @type? This would all be voice calls.

> +        @result: The call object path.
> +
> +        Start a new call to specified number
> +    -->
> +    <method name="Start">
> +      <arg name="number" type="s" direction="in" />
> +      <arg name="type" type="i" direction="in" />
> +      <arg name="result" type="o" direction="out" />
> +    </method>
> +

When does this method exactly return? Will the method return even if the
call hasn't been accepted/rejected yet?

> +    <!--
> +        Answer:
> +        @call: call object path
> +
> +        Answer to specified call
> +    -->
> +    <method name="Answer">
> +      <arg name="call" type="o" direction="in" />
> +    </method>
> +
> +    <!--
> +        HangUp:
> +        @call: call object path
> +
> +        Hangup specified call
> +    -->
> +    <method name="HangUp">
> +      <arg name="call" type="o" direction="in" />
> +    </method>
> +

What would happen to calls that have been hungup? Will the DBus object
still be around with state "terminated"?

Shouldn't we have a method in the Modem-specific interface to list all
Call objects managed by the modem?

> +    <!--
> +        Incoming:
> +        @path: Object path of the new Call.
> +
> +        Emitted when a new Call has been received.
> +
> +        Check the "Type" property to determine if the call is data or voice type.
> +    -->
> +    <signal name="Incoming">
> +      <arg name="path" type="o" />
> +    </signal>
> +
> +    <!--
> +        StateChanged:
> +        @old: Old object "State"
> +        @new: New object "State"
> +
> +        Emitted when a message has been deleted.
> +    -->
> +    <signal name="StateChanged">
> +      <arg name="old" type="i" />
> +      <arg name="new" type="i" />
> +    </signal>
> +

What's this StateChanged here?

> +    <!--
> +        State:
> +
> +        The state of Call object paths.
> +
> +        MMCallState:
> +          - MM_MODEM_CALL_STATE_INCOMING Incoming
> +          - MM_MODEM_CALL_STATE_ACCEPTED Accepted
> +          - MM_MODEM_CALL_STATE_TERMINATED Terminated
> +          - MM_MODEM_CALL_STATE_REFUSED Refused
> +          - MM_MODEM_CALL_STATE_ERROR Error
> +          - MM_MODEM_CALL_STATE_INACTIVE Inactive

When does inactive happen?

> +    -->
> +    <property name="State" type="i" access="read" />
> +

This state would belong in the "Call" object interface, not in the Modem
interface.

> +    <!--
> +        Type:
> +
> +        The call type.
> +
> +        MMCallType:
> +          - MM_MODEM_CALL_TYPE_DATA Data call

Should we care about data calls here?

> +          - MM_MODEM_CALL_TYPE_VOICE Voice call
> +    -->
> +    <property name="Type" type="i" access="read" />
> +

This state would belong in the "Call" object interface, not in the Modem
interface.

> +    <!--
> +        Number:
> +
> +        The remote phone number.
> +    -->
> +    <property name="Number" type="s" access="read" />
> +

This state would belong in the "Call" object interface, not in the Modem
interface.

> +    <!--
> +        Audio:
> +
> +        The audio device.
> +
> +        Example list:
> +          - "analog" (PCM analog)
> +          - "/dev/ttyUSB2" (sound device)
> +          - "others?"
> +    -->
> +    <property name="Audio" type="s" access="read" />
> +
> +  </interface>
> +</node>
> -- 
> 2.1.4
> 





-- 
Aleksander
https://aleksander.es


More information about the ModemManager-devel mailing list