diff options
author | Simon Busch <morphis@gravedo.de> | 2012-07-29 17:38:58 +0200 |
---|---|---|
committer | Simon Busch <morphis@gravedo.de> | 2012-07-30 08:35:42 +0200 |
commit | ef69fc2bc9bf8f698e474eb4e14d13052acae1db (patch) | |
tree | 59b77490596c1c6b0fbadf05ccfeae4580472fa9 /fsogsmd | |
parent | 7298d0d62a46733f3b7455fd36b5db49d93e6770 (diff) | |
download | cornucopia-ef69fc2bc9bf8f698e474eb4e14d13052acae1db.tar.gz cornucopia-ef69fc2bc9bf8f698e474eb4e14d13052acae1db.tar.bz2 cornucopia-ef69fc2bc9bf8f698e474eb4e14d13052acae1db.zip |
fsogsmd: lib: at: implement AT specific call driver
Diffstat (limited to 'fsogsmd')
-rw-r--r-- | fsogsmd/src/lib/Makefile.am | 1 | ||||
-rw-r--r-- | fsogsmd/src/lib/at/atcalldriver.vala | 160 | ||||
-rw-r--r-- | fsogsmd/src/lib/modem.vala | 2 |
3 files changed, 162 insertions, 1 deletions
diff --git a/fsogsmd/src/lib/Makefile.am b/fsogsmd/src/lib/Makefile.am index d675d728..75484535 100644 --- a/fsogsmd/src/lib/Makefile.am +++ b/fsogsmd/src/lib/Makefile.am @@ -10,6 +10,7 @@ AM_VALAFLAGS = modlibexecdir = $(libdir)/cornucopia/modules/fsogsm modlibexec_LTLIBRARIES = libfsogsm.la libfsogsm_la_SOURCES = \ + at/atcalldriver.vala \ at/atchannel.vala \ at/atcommand.vala \ at/atcommands.vala \ diff --git a/fsogsmd/src/lib/at/atcalldriver.vala b/fsogsmd/src/lib/at/atcalldriver.vala new file mode 100644 index 00000000..0221f2a5 --- /dev/null +++ b/fsogsmd/src/lib/at/atcalldriver.vala @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2009-2012 Michael 'Mickey' Lauer <mlauer@vanille-media.de> + * 2012 Simon Busch <morphis@gravedo.de> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +using FsoGsm.Constants; + +public class FsoGsm.AtCallDriver : FsoGsm.ICallDriver, FsoFramework.AbstractObject +{ + private FsoGsm.Modem modem; + + // + // public API + // + + public AtCallDriver( FsoGsm.Modem modem ) + { + this.modem = modem; + } + + public async void dial( string number, string type ) throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<V250D>( "D" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( number, type == "voice" ) ); + checkResponseOk( cmd, response ); + } + + public async void activate() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<V250D>( "A" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.execute() ); + checkResponseOk( cmd, response ); + } + + public async void hangup_active() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + } + + public async void hangup_all() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + // FIXME need implementation of PlusCHUP + // var cmd = modem.createAtCommand<PlusCHLD>( "+CHUP" ); + // var response = yield modem.processAtCommandAsync( cmd, cmd.issue() ); + // checkResponseOk( cmd, response ); + } + + public async void hold_all_active() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCHLD>( "+CHLD" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( PlusCHLD.Action.HOLD_ALL_AND_ACCEPT_WAITING_OR_HELD ) ); + checkResponseOk( cmd, response ); + } + + public async void release( int id ) throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCHLD>( "+CHLD" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( PlusCHLD.Action.DROP_SPECIFIC_AND_ACCEPT_WAITING_OR_HELD, id ) ); + checkResponseOk( cmd, response ); + } + + 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 ); + } + + 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 ); + } + + public async void create_conference() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCHLD>( "+CHLD" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( (PlusCHLD.Action) 3 ) ); + checkResponseOk( cmd, response ); + } + + public async void transfer() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCHLD>( "+CHLD" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( PlusCHLD.Action.DROP_SELF_AND_CONNECT_ACTIVE ) ); + checkResponseOk( cmd, response ); + } + + public async void deflect( string number ) throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCTFR>( "+CTFR" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( number, determinePhoneNumberType( number ) ) ); + checkResponseOk( cmd, response ); + } + + public async void join() throws FreeSmartphone.GSM.Error, FreeSmartphone.Error + { + var cmd = modem.createAtCommand<PlusCHLD>( "+CHLD" ); + var response = yield modem.processAtCommandAsync( cmd, cmd.issue( (PlusCHLD.Action) 4 )); + checkResponseOk( cmd, response ); + } + + 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; + if ( cmd != null ) + { + var c1 = new CustomAtCommand(); + var r1 = yield modem.processAtCommandAsync( c1, cmd ); + checkResponseOk( c1, r1 ); + } + else + { + var c2 = modem.createAtCommand<V250H>( "H" ); + var r2 = yield modem.processAtCommandAsync( c2, c2.execute() ); + checkResponseOk( c2, r2 ); + } + } + + 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; + if ( cmd != null ) + { + var c1 = new CustomAtCommand(); + var r1 = yield modem.processAtCommandAsync( c1, cmd ); + checkResponseOk( c1, r1 ); + } + else + { + var c2 = modem.createAtCommand<V250H>( "H" ); + var r2 = yield modem.processAtCommandAsync( c2, c2.execute() ); + checkResponseOk( c2, r2 ); + } + } + + public override string repr() + { + return @"<>"; + } +} + +// vim:ts=4:sw=4:expandtab diff --git a/fsogsmd/src/lib/modem.vala b/fsogsmd/src/lib/modem.vala index 4a712747..59cb8a81 100644 --- a/fsogsmd/src/lib/modem.vala +++ b/fsogsmd/src/lib/modem.vala @@ -633,7 +633,7 @@ public abstract class FsoGsm.AbstractModem : FsoGsm.Modem, FsoFramework.Abstract **/ protected virtual ICallDriver createCallDriver() { - return new NullCallDriver(); + return new AtCallDriver( this ); } /** |