aboutsummaryrefslogtreecommitdiffstats
path: root/fsogsmd
diff options
context:
space:
mode:
authorSebastian Krzyszkowiak <dos@dosowisko.net>2014-05-31 03:01:10 +0200
committerSebastian Krzyszkowiak <dos@dosowisko.net>2014-05-31 03:01:10 +0200
commit929aae840898cda0d0af2af0acc6b86656469477 (patch)
tree22729ee02d85023b1b90fa487374bdfe7c57fe66 /fsogsmd
parentdcd7f86c6f60f350a0416159e80f1c44e3757f65 (diff)
downloadcornucopia-929aae840898cda0d0af2af0acc6b86656469477.tar.gz
cornucopia-929aae840898cda0d0af2af0acc6b86656469477.tar.bz2
cornucopia-929aae840898cda0d0af2af0acc6b86656469477.zip
fsogsmd: modem_cinterion_ps8: full call releasing support
Signed-off-by: Sebastian Krzyszkowiak <dos@dosowisko.net>
Diffstat (limited to 'fsogsmd')
-rw-r--r--fsogsmd/src/lib/at/atcalldriver.vala36
-rw-r--r--fsogsmd/src/lib/modem.vala4
-rw-r--r--fsogsmd/src/plugins/modem_cinterion_ps8/plugin.vala6
3 files changed, 38 insertions, 8 deletions
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<PlusCHLD>( "+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<PlusCHLD>( "+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<PlusCHLD>( "+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<PlusCHLD>( "+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)