From 929aae840898cda0d0af2af0acc6b86656469477 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Sat, 31 May 2014 03:01:10 +0200 Subject: fsogsmd: modem_cinterion_ps8: full call releasing support Signed-off-by: Sebastian Krzyszkowiak --- fsogsmd/src/lib/at/atcalldriver.vala | 36 +++++++++++++++++----- fsogsmd/src/lib/modem.vala | 4 +++ .../src/plugins/modem_cinterion_ps8/plugin.vala | 6 ++++ 3 files changed, 38 insertions(+), 8 deletions(-) (limited to 'fsogsmd') diff --git a/fsogsmd/src/lib/at/atcalldriver.vala b/fsogsmd/src/lib/at/atcalldriver.vala index 8b0e9ff9..a3af8e6c 100644 --- a/fsogsmd/src/lib/at/atcalldriver.vala +++ b/fsogsmd/src/lib/at/atcalldriver.vala @@ -63,16 +63,36 @@ public class FsoGsm.AtCallDriver : FsoGsm.ICallDriver, FsoFramework.AbstractObje public async void release_all_held() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error { - var cmd = modem.createAtCommand( "+CHLD" ); - var response = yield modem.processAtCommandAsync( cmd, cmd.issue( (PlusCHLD.Action) 0 ) ); - checkResponseOk( cmd, response ); + var cmd = modem.data().atCommandReleaseAllHeld; + if ( cmd != null ) + { + var c1 = new CustomAtCommand(); + var r1 = yield modem.processAtCommandAsync( c1, cmd ); + checkResponseOk( c1, r1 ); + } + else + { + var c2 = modem.createAtCommand( "+CHLD" ); + var r2 = yield modem.processAtCommandAsync( c2, c2.issue( (PlusCHLD.Action) 0 ) ); + checkResponseOk( c2, r2 ); + } } public async void release_all_active() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error { - var cmd = modem.createAtCommand( "+CHLD" ); - var response = yield modem.processAtCommandAsync( cmd, cmd.issue( (PlusCHLD.Action) 1 ) ); - checkResponseOk( cmd, response ); + var cmd = modem.data().atCommandReleaseAllActive; + if ( cmd != null ) + { + var c1 = new CustomAtCommand(); + var r1 = yield modem.processAtCommandAsync( c1, cmd ); + checkResponseOk( c1, r1 ); + } + else + { + var c2 = modem.createAtCommand( "+CHLD" ); + var r2 = yield modem.processAtCommandAsync( c2, c2.issue( (PlusCHLD.Action) 1 ) ); + checkResponseOk( c2, r2 ); + } } public async void create_conference() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error @@ -106,7 +126,7 @@ public class FsoGsm.AtCallDriver : FsoGsm.ICallDriver, FsoFramework.AbstractObje public async void cancel_outgoing_with_id( int id ) throws FreeSmartphone.GSM.Error, FreeSmartphone.Error { assert( logger.debug( @"Cancelling outgoing call with ID $id" ) ); - var cmd = modem.data().atCommandCancelOutgoing; + var cmd = modem.data().atCommandCancelOutgoingWithId ? modem.data().atCommandCancelOutgoing.printf(id) : modem.data().atCommandCancelOutgoing; if ( cmd != null ) { var c1 = new CustomAtCommand(); @@ -124,7 +144,7 @@ public class FsoGsm.AtCallDriver : FsoGsm.ICallDriver, FsoFramework.AbstractObje public async void reject_incoming_with_id( int id ) throws FreeSmartphone.GSM.Error, FreeSmartphone.Error { assert( logger.debug( @"Rejecting incoming call with ID $id" ) ); - var cmd = modem.data().atCommandRejectIncoming; + var cmd = modem.data().atCommandRejectIncomingWithId ? modem.data().atCommandRejectIncoming.printf(id) : modem.data().atCommandRejectIncoming; if ( cmd != null ) { var c1 = new CustomAtCommand(); diff --git a/fsogsmd/src/lib/modem.vala b/fsogsmd/src/lib/modem.vala index 8c89bc37..100c722d 100644 --- a/fsogsmd/src/lib/modem.vala +++ b/fsogsmd/src/lib/modem.vala @@ -147,7 +147,11 @@ public abstract interface FsoGsm.Modem : FsoFramework.AbstractObject // Common AT extensions public string? atCommandCancelOutgoing; + public bool atCommandCancelOutgoingWithId; public string? atCommandRejectIncoming; + public bool atCommandRejectIncomingWithId; + public string? atCommandReleaseAllActive; + public string? atCommandReleaseAllHeld; // Network Information public NetworkTimeReport networkTimeReport; diff --git a/fsogsmd/src/plugins/modem_cinterion_ps8/plugin.vala b/fsogsmd/src/plugins/modem_cinterion_ps8/plugin.vala index 40a8353b..d1f1e0dc 100644 --- a/fsogsmd/src/plugins/modem_cinterion_ps8/plugin.vala +++ b/fsogsmd/src/plugins/modem_cinterion_ps8/plugin.vala @@ -44,6 +44,12 @@ class CinterionPS8.Modem : FsoGsm.AbstractModem modem_data.simHasReadySignal = true; // ^SSIM READY (enabled by ^SSET=1) or +CIEV: simstatus,5 (enabled by ^SIND="simstatus",1) modem_data.simReadyTimeout = 30; // seconds + modem_data.atCommandRejectIncoming = "^SHUP=21,%d"; // release cause "call rejected" + modem_data.atCommandRejectIncomingWithId = true; + modem_data.atCommandCancelOutgoing = "^SHUP=16,%d"; // release cause "normal call clearing" + modem_data.atCommandCancelOutgoingWithId = true; + modem_data.atCommandReleaseAllActive = "+CHUP"; + modem_data.atCommandReleaseAllHeld = "+CHUP"; atCommandSequence( "MODEM", "init" ).append( { """^SLED=2""", // enable STATUS LED (non-persistent) -- cgit v1.2.3