Skip to contentSkip to conversation

How to hangup outgoing call, before terminating end answers?

DISCUSSION Marko Saukko 4 participants 4 messages Aug 17, 2009 – Aug 18, 2009

lore
Share & tools
lore
#0 lore raw

Hi,

Currently when a call is created with Dial method the object path for the call (e.g. /modem1/voicecall01) is returned only after the terminating end has answered to the call. So is it possible to Hangup the call from the originating end before terminating end answers the call?

Create the call:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.Dial string:"+358000000000" string:"default"

The following do not work as the /modem1/voicecall01 does not exist:

$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Hangup
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Hangup" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist
$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Busy
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Busy" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist

The VoiceCallManager.HangupAll does not work either:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.HangupAll
Error org.ofono.Error.InProgress: Operation already in progress

Regards,
Marko

#1 lore raw

Hi Marko,

Quoted 6 lines

Hi,

Currently when a call is created with Dial method the object path for the call (e.g. /modem1/voicecall01) is returned only after the terminating end has answered to the call. So is it possible to Hangup the call from the originating end before terminating end answers the call?

So this very much depends on the modem. Most (sane) modems return an OK final response to the ATD when they start dialing. Some will then accept regular AT+CHLD commands to terminate the outgoing call, others have a vendor specific command for doing so. The broken ones return an OK/BUSY/NO CARRIER for the ATD only when connected/busy/timed out, in which case there's no standard way to abort that I know of.

This might be an area where I'd like to hear some feedback, whether an additional dial_abort function pointer is required in the voicecall plugin.

However, the entire 27.007 spec for voice calls is utterly broken, there's no way to get it right. If your modems support vendor extensions for call control, in particular call state reporting, I suggest using those. I expect all major vendors have implemented such features in their modems. I don't expect the reference implementation to be used in practice, as it is too battery inefficient.

Quoted 12 lines

Create the call:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.Dial string:"+358000000000" string:"default"

The following do not work as the /modem1/voicecall01 does not exist:

$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Hangup
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Hangup" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist
Quoted 4 lines
$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Busy
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Busy" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist

So you can only use this one on an incoming or waiting call.

Quoted 6 lines

The VoiceCallManager.HangupAll does not work either:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.HangupAll
Error org.ofono.Error.InProgress: Operation already in progress

Regards,
-Denis

#2 lore raw
In reply to Marko Saukko

Hi Marko,

Quoted 5 lines

The following do not work as the /modem1/voicecall01 does not exist:

$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Hangup
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Hangup" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist

It's normal if the voicecall01 didn't be setup

Quoted 6 lines
$ dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01
org.ofono.VoiceCall.Busy
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Busy" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist

Busy only for waiting and incoming call

Quoted 5 lines

The VoiceCallManager.HangupAll does not work either:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.HangupAll
Error org.ofono.Error.InProgress: Operation already in progress

It should be a bug if you use real modem

In phonesim the outgoing call be accepted quickly so can't find this issue.

I had same problem with a "phone" in real network; I assume its phone limitation before.

Quoted 8 lines

Regards,
Marko
_______________________________________________
ofono mailing list
ofono(a)ofono.org
http://lists.ofono.org/listinfo/ofono

#3 lore raw
In reply to Marko Saukko
Quoted 14 lines · On Mon, 17 Aug 2009 12:26:57 +0300 Marko Saukko <[email protected]> wrote:

Hi,

Currently when a call is created with Dial method the object path for the call (e.g. /modem1/voicecall01) is returned only after the terminating end has answered to the call. So is it possible to Hangup the call from the originating end before terminating end answers the call?

Create the call:

$ dbus-send --print-reply --system --dest=org.ofono /modem1
org.ofono.VoiceCallManager.Dial string:"+358000000000"
string:"default"
Quoted 5 lines

The following do not work as the /modem1/voicecall01 does not exist:

$ dbus-send --system --print-reply
--dest=org.ofono /modem1/voicecall01 org.ofono.VoiceCall.Hangup
Error org.freedesktop.DBus.Error.UnknownMethod: Method "Hangup" with
signature "" on interface "org.ofono.VoiceCall" doesn't exist

FWIW, I just tried this on my G1 and it worked fine:

localhost:~/ofono# !109
dbus-send --system --print-reply --dest=org.ofono / org.ofono.at.Manager.Create string:"dev:/dev/smd0" string:"at"
method return sender=:1.0 -> dest=:1.1 reply_serial=2
   object path "/modem1"
localhost:~/ofono# dbus-send --system --print-reply --dest=org.ofono /modem1 org.ofono.VoiceCallManager.Dial string:"617501XXXX" string:"default"
method return sender=:1.0 -> dest=:1.2 reply_serial=2
   object path "/modem1/voicecall01"
localhost:~/ofono# dbus-send --system --print-reply --dest=org.ofono /modem1/voicecall01 org.ofono.VoiceCall.Hangup
method return sender=:1.0 -> dest=:1.3 reply_serial=2

Hangup returned successfully prior to the other end picking up.