Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Morlunk/Jumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Comminos <andrewcomminos@gmail.com>2014-05-25 02:28:01 +0400
committerAndrew Comminos <andrewcomminos@gmail.com>2014-05-25 02:28:01 +0400
commit42b75e266eabb5063fb94a824c48a76b74981fe5 (patch)
treec56621759dd2b4ecf57b8103ee592076f6efac6d
parent6960c522fa2d08af04b8ca71aec1fe17d369549c (diff)
Added half duplex support.
-rw-r--r--src/main/java/com/morlunk/jumble/JumbleService.java4
-rw-r--r--src/main/java/com/morlunk/jumble/protocol/AudioHandler.java28
2 files changed, 32 insertions, 0 deletions
diff --git a/src/main/java/com/morlunk/jumble/JumbleService.java b/src/main/java/com/morlunk/jumble/JumbleService.java
index 8070944..8375d2f 100644
--- a/src/main/java/com/morlunk/jumble/JumbleService.java
+++ b/src/main/java/com/morlunk/jumble/JumbleService.java
@@ -87,6 +87,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon
public static final String EXTRAS_TRUST_STORE_PASSWORD = "trust_store_password";
/** The trust store's format. */
public static final String EXTRAS_TRUST_STORE_FORMAT = "trust_store_format";
+ public static final String EXTRAS_HALF_DUPLEX = "half_duplex";
public static final String ACTION_DISCONNECT = "com.morlunk.jumble.DISCONNECT";
@@ -112,6 +113,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon
private String mTrustStore;
private String mTrustStorePassword;
private String mTrustStoreFormat;
+ private boolean mHalfDuplex;
private JumbleConnection mConnection;
private ChannelHandler mChannelHandler;
@@ -573,6 +575,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon
mTrustStore = extras.getString(EXTRAS_TRUST_STORE);
mTrustStorePassword = extras.getString(EXTRAS_TRUST_STORE_PASSWORD);
mTrustStoreFormat = extras.getString(EXTRAS_TRUST_STORE_FORMAT);
+ mHalfDuplex = extras.getBoolean(EXTRAS_HALF_DUPLEX);
try {
mConnection.setTrustStore(mTrustStore, mTrustStorePassword, mTrustStoreFormat);
@@ -585,6 +588,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon
mAudioHandler.setAudioStream(mAudioStream);
mAudioHandler.setFramesPerPacket(mFramesPerPacket);
mAudioHandler.setSampleRate(mInputRate);
+ mAudioHandler.setHalfDuplex(mHalfDuplex);
connect();
} catch (AudioException e) {
diff --git a/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java b/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java
index 5ad717c..f7e9150 100644
--- a/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java
+++ b/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java
@@ -44,6 +44,7 @@ import com.morlunk.jumble.util.JumbleNetworkListener;
*/
public class AudioHandler extends JumbleNetworkListener {
private Context mContext;
+ private AudioManager mAudioManager;
private AudioInput mInput;
private AudioOutput mOutput;
private AudioInput.AudioInputListener mInputListener;
@@ -61,6 +62,7 @@ public class AudioHandler extends JumbleNetworkListener {
private boolean mInitialized;
private boolean mBluetoothOn;
+ private boolean mHalfDuplex;
private BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() {
@Override
@@ -89,6 +91,7 @@ public class AudioHandler extends JumbleNetworkListener {
mContext = context;
mInputListener = inputListener;
mOutputListener = outputListener;
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
/**
@@ -132,11 +135,17 @@ public class AudioHandler extends JumbleNetworkListener {
public void startRecording() throws AudioException {
if(mInput == null) createAudioInput();
mInput.startRecording();
+ if(mHalfDuplex && mTransmitMode == Constants.TRANSMIT_PUSH_TO_TALK) {
+ mAudioManager.setStreamMute(getAudioStream(), true);
+ }
}
public void stopRecording() {
if(mInput == null) return;
mInput.stopRecording();
+ if(mHalfDuplex && mTransmitMode == Constants.TRANSMIT_PUSH_TO_TALK) {
+ mAudioManager.setStreamMute(getAudioStream(), false);
+ }
}
/**
@@ -270,6 +279,25 @@ public class AudioHandler extends JumbleNetworkListener {
}
/**
+ * Returns whether or not the audio handler is operating in half duplex mode, muting outgoing
+ * audio when incoming audio is received.
+ * @return true if the handler is in half duplex mode.
+ */
+ public boolean isHalfDuplex() {
+ return mHalfDuplex;
+ }
+
+ /**
+ * Sets whether or not the audio handler should operate in half duplex mode, muting outgoing
+ * audio when incoming audio is received.
+ * Does not require input thread recreation.
+ * @param halfDuplex Whether to enable half duplex mode.
+ */
+ public void setHalfDuplex(boolean halfDuplex) {
+ mHalfDuplex = halfDuplex;
+ }
+
+ /**
* Shuts down the audio handler, halting input and output.
* The handler may still be reinitialized with {@link AudioHandler#initialize()} after.
*/