MTU value available in the BleManager - exposed

This commit is contained in:
Aleksander Nowakowski
2018-04-11 12:07:09 +02:00
parent 5f69f9bcf0
commit 5d676f45f1
2 changed files with 26 additions and 18 deletions

View File

@@ -583,27 +583,13 @@ public class BleManager implements BleProfileApi {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && enqueue(Request.newMtuRequest(mtu)); return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && enqueue(Request.newMtuRequest(mtu));
} }
/** @Override
* Returns the current MTU (Maximum Transfer Unit). MTU specifies the maximum number of bytes that can public final int getMtu() {
* be sent in a single write operation. 3 bytes are used for internal purposes, so the maximum size is MTU-3.
* The value will changed only if requested with {@link #requestMtu(int)} and a successful callback is received.
* If the peripheral requests MTU change, the {@link BluetoothGattCallback#onMtuChanged(BluetoothGatt, int, int)}
* callback is not invoked, therefor the returned MTU value will not be correct.
* Use {@link android.bluetooth.BluetoothGattServerCallback#onMtuChanged(BluetoothDevice, int)} to get the
* callback with right value requested from the peripheral side.
* @return the current MTU value. Default to 23.
*/
protected final int getMtu() {
return mMtu; return mMtu;
} }
/** @Override
* This method overrides the MTU value. Use it only when the peripheral has changed MTU and you public final void overrideMtu(final int mtu) {
* received the {@link android.bluetooth.BluetoothGattServerCallback#onMtuChanged(BluetoothDevice, int)}
* callback. If you want to set MTU as a master, use {@link #requestMtu(int)} instead.
* @param mtu the MTU value set by the peripheral.
*/
protected final void overrideMtu(final int mtu) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
mMtu = mtu; mMtu = mtu;
} }

View File

@@ -22,7 +22,9 @@
package no.nordicsemi.android.nrftoolbox.ble; package no.nordicsemi.android.nrftoolbox.ble;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor; import android.bluetooth.BluetoothGattDescriptor;
import android.content.Context; import android.content.Context;
@@ -394,6 +396,26 @@ public interface BleProfileApi {
*/ */
boolean requestMtu(final int mtu); boolean requestMtu(final int mtu);
/**
* Returns the current MTU (Maximum Transfer Unit). MTU specifies the maximum number of bytes that can
* be sent in a single write operation. 3 bytes are used for internal purposes, so the maximum size is MTU-3.
* The value will changed only if requested with {@link #requestMtu(int)} and a successful callback is received.
* If the peripheral requests MTU change, the {@link BluetoothGattCallback#onMtuChanged(BluetoothGatt, int, int)}
* callback is not invoked, therefor the returned MTU value will not be correct.
* Use {@link android.bluetooth.BluetoothGattServerCallback#onMtuChanged(BluetoothDevice, int)} to get the
* callback with right value requested from the peripheral side.
* @return the current MTU value. Default to 23.
*/
int getMtu();
/**
* This method overrides the MTU value. Use it only when the peripheral has changed MTU and you
* received the {@link android.bluetooth.BluetoothGattServerCallback#onMtuChanged(BluetoothDevice, int)}
* callback. If you want to set MTU as a master, use {@link #requestMtu(int)} instead.
* @param mtu the MTU value set by the peripheral.
*/
void overrideMtu(final int mtu);
/** /**
* Requests the new connection priority. Acceptable values are: * Requests the new connection priority. Acceptable values are:
* <ol> * <ol>