Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
Jasonchenlijian committed Jan 1, 2019
1 parent 651897c commit 9da3a89
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 30 deletions.
82 changes: 75 additions & 7 deletions FastBleLib/src/main/java/com/clj/fastble/BleManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class BleManager {
public static final int DEFAULT_SCAN_TIME = 10000;
private static final int DEFAULT_MAX_MULTIPLE_DEVICE = 7;
private static final int DEFAULT_OPERATE_TIME = 5000;
private static final int DEFAULT_CONNECT_RETRY_COUNT = 1;
private static final int DEFAULT_CONNECT_RETRY_COUNT = 0;
private static final int DEFAULT_CONNECT_RETRY_INTERVAL = 5000;
private static final int DEFAULT_MTU = 23;
private static final int DEFAULT_MAX_MTU = 512;
Expand Down Expand Up @@ -241,7 +241,9 @@ public int getSplitWriteNum() {
* @return BleManager
*/
public BleManager setSplitWriteNum(int num) {
this.splitWriteNum = num;
if (num > 0) {
this.splitWriteNum = num;
}
return this;
}

Expand Down Expand Up @@ -395,6 +397,23 @@ public void notify(BleDevice bleDevice,
String uuid_service,
String uuid_notify,
BleNotifyCallback callback) {
notify(bleDevice, uuid_service, uuid_notify, false, callback);
}

/**
* notify
*
* @param bleDevice
* @param uuid_service
* @param uuid_notify
* @param useCharacteristicDescriptor
* @param callback
*/
public void notify(BleDevice bleDevice,
String uuid_service,
String uuid_notify,
boolean useCharacteristicDescriptor,
BleNotifyCallback callback) {
if (callback == null) {
throw new IllegalArgumentException("BleNotifyCallback can not be Null!");
}
Expand All @@ -405,7 +424,7 @@ public void notify(BleDevice bleDevice,
} else {
bleBluetooth.newBleConnector()
.withUUIDString(uuid_service, uuid_notify)
.enableCharacteristicNotify(callback, uuid_notify);
.enableCharacteristicNotify(callback, uuid_notify, useCharacteristicDescriptor);
}
}

Expand All @@ -421,6 +440,23 @@ public void indicate(BleDevice bleDevice,
String uuid_service,
String uuid_indicate,
BleIndicateCallback callback) {
indicate(bleDevice, uuid_service, uuid_indicate, false, callback);
}

/**
* indicate
*
* @param bleDevice
* @param uuid_service
* @param uuid_indicate
* @param useCharacteristicDescriptor
* @param callback
*/
public void indicate(BleDevice bleDevice,
String uuid_service,
String uuid_indicate,
boolean useCharacteristicDescriptor,
BleIndicateCallback callback) {
if (callback == null) {
throw new IllegalArgumentException("BleIndicateCallback can not be Null!");
}
Expand All @@ -431,7 +467,7 @@ public void indicate(BleDevice bleDevice,
} else {
bleBluetooth.newBleConnector()
.withUUIDString(uuid_service, uuid_indicate)
.enableCharacteristicIndicate(callback, uuid_indicate);
.enableCharacteristicIndicate(callback, uuid_indicate, useCharacteristicDescriptor);
}
}

Expand All @@ -446,13 +482,29 @@ public void indicate(BleDevice bleDevice,
public boolean stopNotify(BleDevice bleDevice,
String uuid_service,
String uuid_notify) {
return stopNotify(bleDevice, uuid_service, uuid_notify, false);
}

/**
* stop notify, remove callback
*
* @param bleDevice
* @param uuid_service
* @param uuid_notify
* @param useCharacteristicDescriptor
* @return
*/
public boolean stopNotify(BleDevice bleDevice,
String uuid_service,
String uuid_notify,
boolean useCharacteristicDescriptor) {
BleBluetooth bleBluetooth = multipleBluetoothController.getBleBluetooth(bleDevice);
if (bleBluetooth == null) {
return false;
}
boolean success = bleBluetooth.newBleConnector()
.withUUIDString(uuid_service, uuid_notify)
.disableCharacteristicNotify();
.disableCharacteristicNotify(useCharacteristicDescriptor);
if (success) {
bleBluetooth.removeNotifyCallback(uuid_notify);
}
Expand All @@ -470,13 +522,29 @@ public boolean stopNotify(BleDevice bleDevice,
public boolean stopIndicate(BleDevice bleDevice,
String uuid_service,
String uuid_indicate) {
return stopIndicate(bleDevice, uuid_service, uuid_indicate, false);
}

/**
* stop indicate, remove callback
*
* @param bleDevice
* @param uuid_service
* @param uuid_indicate
* @param useCharacteristicDescriptor
* @return
*/
public boolean stopIndicate(BleDevice bleDevice,
String uuid_service,
String uuid_indicate,
boolean useCharacteristicDescriptor) {
BleBluetooth bleBluetooth = multipleBluetoothController.getBleBluetooth(bleDevice);
if (bleBluetooth == null) {
return false;
}
boolean success = bleBluetooth.newBleConnector()
.withUUIDString(uuid_service, uuid_indicate)
.disableCharacteristicIndicate();
.disableCharacteristicIndicate(useCharacteristicDescriptor);
if (success) {
bleBluetooth.removeIndicateCallback(uuid_indicate);
}
Expand Down Expand Up @@ -559,7 +627,7 @@ public void write(BleDevice bleDevice,
if (bleBluetooth == null) {
callback.onWriteFailure(new OtherException("This device not connect!"));
} else {
if (split && data.length > 20) {
if (split && data.length > getSplitWriteNum()) {
new SplitWriter().splitWrite(bleBluetooth, uuid_service, uuid_write, data,
sendNextWhenLastSuccess, intervalBetweenTwoPackage, callback);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,12 +241,13 @@ private UUID formUUID(String uuid) {
/**
* notify
*/
public void enableCharacteristicNotify(BleNotifyCallback bleNotifyCallback, String uuid_notify) {
public void enableCharacteristicNotify(BleNotifyCallback bleNotifyCallback, String uuid_notify,
boolean userCharacteristicDescriptor) {
if (mCharacteristic != null
&& (mCharacteristic.getProperties() | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {

handleCharacteristicNotifyCallback(bleNotifyCallback, uuid_notify);
setCharacteristicNotification(mBluetoothGatt, mCharacteristic, true, bleNotifyCallback);
setCharacteristicNotification(mBluetoothGatt, mCharacteristic, userCharacteristicDescriptor, true, bleNotifyCallback);
} else {
if (bleNotifyCallback != null)
bleNotifyCallback.onNotifyFailure(new OtherException("this characteristic not support notify!"));
Expand All @@ -256,10 +257,11 @@ public void enableCharacteristicNotify(BleNotifyCallback bleNotifyCallback, Stri
/**
* stop notify
*/
public boolean disableCharacteristicNotify() {
public boolean disableCharacteristicNotify(boolean useCharacteristicDescriptor) {
if (mCharacteristic != null
&& (mCharacteristic.getProperties() | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
return setCharacteristicNotification(mBluetoothGatt, mCharacteristic, false, null);
return setCharacteristicNotification(mBluetoothGatt, mCharacteristic,
useCharacteristicDescriptor, false, null);
} else {
return false;
}
Expand All @@ -270,6 +272,7 @@ public boolean disableCharacteristicNotify() {
*/
private boolean setCharacteristicNotification(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
boolean useCharacteristicDescriptor,
boolean enable,
BleNotifyCallback bleNotifyCallback) {
if (gatt == null || characteristic == null) {
Expand All @@ -287,7 +290,12 @@ private boolean setCharacteristicNotification(BluetoothGatt gatt,
return false;
}

BluetoothGattDescriptor descriptor = characteristic.getDescriptor(formUUID(UUID_CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR));
BluetoothGattDescriptor descriptor;
if (useCharacteristicDescriptor) {
descriptor = characteristic.getDescriptor(characteristic.getUuid());
} else {
descriptor = characteristic.getDescriptor(formUUID(UUID_CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR));
}
if (descriptor == null) {
notifyMsgInit();
if (bleNotifyCallback != null)
Expand All @@ -309,11 +317,13 @@ private boolean setCharacteristicNotification(BluetoothGatt gatt,
/**
* indicate
*/
public void enableCharacteristicIndicate(BleIndicateCallback bleIndicateCallback, String uuid_indicate) {
public void enableCharacteristicIndicate(BleIndicateCallback bleIndicateCallback, String uuid_indicate,
boolean useCharacteristicDescriptor) {
if (mCharacteristic != null
&& (mCharacteristic.getProperties() | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
handleCharacteristicIndicateCallback(bleIndicateCallback, uuid_indicate);
setCharacteristicIndication(mBluetoothGatt, mCharacteristic, true, bleIndicateCallback);
setCharacteristicIndication(mBluetoothGatt, mCharacteristic,
useCharacteristicDescriptor, true, bleIndicateCallback);
} else {
if (bleIndicateCallback != null)
bleIndicateCallback.onIndicateFailure(new OtherException("this characteristic not support indicate!"));
Expand All @@ -324,10 +334,11 @@ public void enableCharacteristicIndicate(BleIndicateCallback bleIndicateCallback
/**
* stop indicate
*/
public boolean disableCharacteristicIndicate() {
public boolean disableCharacteristicIndicate(boolean userCharacteristicDescriptor) {
if (mCharacteristic != null
&& (mCharacteristic.getProperties() | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
return setCharacteristicIndication(mBluetoothGatt, mCharacteristic, false, null);
return setCharacteristicIndication(mBluetoothGatt, mCharacteristic,
userCharacteristicDescriptor, false, null);
} else {
return false;
}
Expand All @@ -338,6 +349,7 @@ public boolean disableCharacteristicIndicate() {
*/
private boolean setCharacteristicIndication(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
boolean useCharacteristicDescriptor,
boolean enable,
BleIndicateCallback bleIndicateCallback) {
if (gatt == null || characteristic == null) {
Expand All @@ -355,7 +367,12 @@ private boolean setCharacteristicIndication(BluetoothGatt gatt,
return false;
}

BluetoothGattDescriptor descriptor = characteristic.getDescriptor(formUUID(UUID_CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR));
BluetoothGattDescriptor descriptor;
if (useCharacteristicDescriptor) {
descriptor = characteristic.getDescriptor(characteristic.getUuid());
} else {
descriptor = characteristic.getDescriptor(formUUID(UUID_CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR));
}
if (descriptor == null) {
indicateMsgInit();
if (bleIndicateCallback != null)
Expand Down
29 changes: 16 additions & 13 deletions app/src/main/res/layout/layout_characteric_operation_et.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,31 @@
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<EditText
android:id="@+id/et"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/input_hex"
android:inputType="text"
android:textSize="15sp" />
android:layout_height="wrap_content">

<Button
android:id="@+id/btn"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:gravity="center"
android:textSize="15sp" />

</LinearLayout>
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/btn"
android:gravity="center_vertical"
android:hint="@string/input_hex"
android:inputType="text"
android:textSize="15sp" />

</RelativeLayout>

</LinearLayout>

0 comments on commit 9da3a89

Please sign in to comment.