Skip to content

Commit 4a31df2

Browse files
authored
Merge pull request #1269 from dotintent/feat/1266
feat: add subscriptionType param to monitor characteristic methods
2 parents c34253a + 7b5e0f5 commit 4a31df2

File tree

10 files changed

+128
-35
lines changed

10 files changed

+128
-35
lines changed

android/src/main/java/com/bleplx/BlePlxModule.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -768,13 +768,14 @@ public void monitorCharacteristicForDevice(final String deviceId,
768768
final String serviceUUID,
769769
final String characteristicUUID,
770770
final String transactionId,
771+
final String subscriptionType,
771772
final Promise promise) {
772773
if (!this.isRequestPossibleHandler("monitorCharacteristicForDevice", promise)) {
773774
return;
774775
}
775776
final SafePromise safePromise = new SafePromise(promise);
776777
bleAdapter.monitorCharacteristicForDevice(
777-
deviceId, serviceUUID, characteristicUUID, transactionId,
778+
deviceId, serviceUUID, characteristicUUID, transactionId, subscriptionType,
778779
new OnEventCallback<Characteristic>() {
779780
@Override
780781
public void onEvent(Characteristic data) {
@@ -797,13 +798,14 @@ public void onError(BleError error) {
797798
public void monitorCharacteristicForService(final int serviceIdentifier,
798799
final String characteristicUUID,
799800
final String transactionId,
801+
final String subscriptionType,
800802
final Promise promise) {
801803
if (!this.isRequestPossibleHandler("monitorCharacteristicForService", promise)) {
802804
return;
803805
}
804806
final SafePromise safePromise = new SafePromise(promise);
805807
bleAdapter.monitorCharacteristicForService(
806-
serviceIdentifier, characteristicUUID, transactionId,
808+
serviceIdentifier, characteristicUUID, transactionId, subscriptionType,
807809
new OnEventCallback<Characteristic>() {
808810
@Override
809811
public void onEvent(Characteristic data) {
@@ -825,14 +827,15 @@ public void onError(BleError error) {
825827
@ReactMethod
826828
public void monitorCharacteristic(final int characteristicIdentifier,
827829
final String transactionId,
830+
final String subscriptionType,
828831
final Promise promise) {
829832
if (!this.isRequestPossibleHandler("monitorCharacteristic", promise)) {
830833
return;
831834
}
832835
final SafePromise safePromise = new SafePromise(promise);
833836
//TODO resolve safePromise with null when monitoring has been completed
834837
bleAdapter.monitorCharacteristic(
835-
characteristicIdentifier, transactionId,
838+
characteristicIdentifier, transactionId, subscriptionType,
836839
new OnEventCallback<Characteristic>() {
837840
@Override
838841
public void onEvent(Characteristic data) {

android/src/main/java/com/bleplx/adapter/BleAdapter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,22 @@ void monitorCharacteristicForDevice(
163163
String serviceUUID,
164164
String characteristicUUID,
165165
String transactionId,
166+
String subscriptionType,
166167
OnEventCallback<Characteristic> onEventCallback,
167168
OnErrorCallback onErrorCallback);
168169

169170
void monitorCharacteristicForService(
170171
int serviceIdentifier,
171172
String characteristicUUID,
172173
String transactionId,
174+
String subscriptionType,
173175
OnEventCallback<Characteristic> onEventCallback,
174176
OnErrorCallback onErrorCallback);
175177

176178
void monitorCharacteristic(
177179
int characteristicIdentifier,
178180
String transactionId,
181+
String subscriptionType,
179182
OnEventCallback<Characteristic> onEventCallback,
180183
OnErrorCallback onErrorCallback);
181184

android/src/main/java/com/bleplx/adapter/BleModule.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,7 @@ public void monitorCharacteristicForDevice(String deviceIdentifier,
689689
String serviceUUID,
690690
String characteristicUUID,
691691
String transactionId,
692+
String subscriptionType,
692693
OnEventCallback<Characteristic> onEventCallback,
693694
OnErrorCallback onErrorCallback) {
694695
final Characteristic characteristic = getCharacteristicOrEmitError(
@@ -697,13 +698,14 @@ public void monitorCharacteristicForDevice(String deviceIdentifier,
697698
return;
698699
}
699700

700-
safeMonitorCharacteristicForDevice(characteristic, transactionId, onEventCallback, onErrorCallback);
701+
safeMonitorCharacteristicForDevice(characteristic, transactionId, subscriptionType, onEventCallback, onErrorCallback);
701702
}
702703

703704
@Override
704705
public void monitorCharacteristicForService(int serviceIdentifier,
705706
String characteristicUUID,
706707
String transactionId,
708+
String subscriptionType,
707709
OnEventCallback<Characteristic> onEventCallback,
708710
OnErrorCallback onErrorCallback) {
709711
final Characteristic characteristic = getCharacteristicOrEmitError(
@@ -712,19 +714,19 @@ public void monitorCharacteristicForService(int serviceIdentifier,
712714
return;
713715
}
714716

715-
safeMonitorCharacteristicForDevice(characteristic, transactionId, onEventCallback, onErrorCallback);
717+
safeMonitorCharacteristicForDevice(characteristic, transactionId, subscriptionType, onEventCallback, onErrorCallback);
716718
}
717719

718720
@Override
719-
public void monitorCharacteristic(int characteristicIdentifier, String transactionId,
721+
public void monitorCharacteristic(int characteristicIdentifier, String transactionId, String subscriptionType,
720722
OnEventCallback<Characteristic> onEventCallback,
721723
OnErrorCallback onErrorCallback) {
722724
final Characteristic characteristic = getCharacteristicOrEmitError(characteristicIdentifier, onErrorCallback);
723725
if (characteristic == null) {
724726
return;
725727
}
726728

727-
safeMonitorCharacteristicForDevice(characteristic, transactionId, onEventCallback, onErrorCallback);
729+
safeMonitorCharacteristicForDevice(characteristic, transactionId, subscriptionType, onEventCallback, onErrorCallback);
728730
}
729731

730732
@Override
@@ -1439,6 +1441,7 @@ private void safeWriteCharacteristicForDevice(final Characteristic characteristi
14391441

14401442
private void safeMonitorCharacteristicForDevice(final Characteristic characteristic,
14411443
final String transactionId,
1444+
final String subscriptionType,
14421445
final OnEventCallback<Characteristic> onEventCallback,
14431446
final OnErrorCallback onErrorCallback) {
14441447
final RxBleConnection connection = getConnectionOrEmitError(characteristic.getDeviceId(), onErrorCallback);
@@ -1453,12 +1456,15 @@ private void safeMonitorCharacteristicForDevice(final Characteristic characteris
14531456
NotificationSetupMode setupMode = cccDescriptor != null
14541457
? NotificationSetupMode.QUICK_SETUP
14551458
: NotificationSetupMode.COMPAT;
1456-
if (characteristic.isNotifiable()) {
1457-
return connection.setupNotification(characteristic.gattCharacteristic, setupMode);
1458-
}
1459-
1460-
if (characteristic.isIndicatable()) {
1461-
return connection.setupIndication(characteristic.gattCharacteristic, setupMode);
1459+
1460+
if ("notification".equals(subscriptionType) && characteristic.isNotifiable()) {
1461+
return connection.setupNotification(characteristic.gattCharacteristic, setupMode);
1462+
} else if ("indication".equals(subscriptionType) && characteristic.isIndicatable()) {
1463+
return connection.setupIndication(characteristic.gattCharacteristic, setupMode);
1464+
} else if (characteristic.isNotifiable()) {
1465+
return connection.setupNotification(characteristic.gattCharacteristic, setupMode);
1466+
} else if (characteristic.isIndicatable()) {
1467+
return connection.setupIndication(characteristic.gattCharacteristic, setupMode);
14621468
}
14631469

14641470
return Observable.error(new CannotMonitorCharacteristicException(characteristic));

src/BleManager.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import type {
2424
Identifier,
2525
UUID,
2626
TransactionId,
27+
CharacteristicSubscriptionType,
2728
Base64,
2829
ScanOptions,
2930
ConnectionOptions,
@@ -958,11 +959,18 @@ export class BleManager {
958959
serviceUUID: UUID,
959960
characteristicUUID: UUID,
960961
listener: (error: ?BleError, characteristic: ?Characteristic) => void,
961-
transactionId: ?TransactionId
962+
transactionId: ?TransactionId,
963+
subscriptionType: ?CharacteristicSubscriptionType
962964
): Subscription {
963965
const filledTransactionId = transactionId || this._nextUniqueID()
964966
return this._handleMonitorCharacteristic(
965-
BleModule.monitorCharacteristicForDevice(deviceIdentifier, serviceUUID, characteristicUUID, filledTransactionId),
967+
BleModule.monitorCharacteristicForDevice(
968+
deviceIdentifier,
969+
serviceUUID,
970+
characteristicUUID,
971+
filledTransactionId,
972+
subscriptionType
973+
),
966974
filledTransactionId,
967975
listener
968976
)
@@ -985,11 +993,17 @@ export class BleManager {
985993
serviceIdentifier: Identifier,
986994
characteristicUUID: UUID,
987995
listener: (error: ?BleError, characteristic: ?Characteristic) => void,
988-
transactionId: ?TransactionId
996+
transactionId: ?TransactionId,
997+
subscriptionType: ?CharacteristicSubscriptionType
989998
): Subscription {
990999
const filledTransactionId = transactionId || this._nextUniqueID()
9911000
return this._handleMonitorCharacteristic(
992-
BleModule.monitorCharacteristicForService(serviceIdentifier, characteristicUUID, filledTransactionId),
1001+
BleModule.monitorCharacteristicForService(
1002+
serviceIdentifier,
1003+
characteristicUUID,
1004+
filledTransactionId,
1005+
subscriptionType
1006+
),
9931007
filledTransactionId,
9941008
listener
9951009
)
@@ -1003,18 +1017,20 @@ export class BleManager {
10031017
* @param {function(error: ?BleError, characteristic: ?Characteristic)} listener - callback which emits
10041018
* {@link Characteristic} objects with modified value for each notification.
10051019
* @param {?TransactionId} transactionId optional `transactionId` which can be used in
1020+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
10061021
* {@link #blemanagercanceltransaction|cancelTransaction()} function.
10071022
* @returns {Subscription} Subscription on which `remove()` function can be called to unsubscribe.
10081023
* @private
10091024
*/
10101025
_monitorCharacteristic(
10111026
characteristicIdentifier: Identifier,
10121027
listener: (error: ?BleError, characteristic: ?Characteristic) => void,
1013-
transactionId: ?TransactionId
1028+
transactionId: ?TransactionId,
1029+
subscriptionType: ?CharacteristicSubscriptionType
10141030
): Subscription {
10151031
const filledTransactionId = transactionId || this._nextUniqueID()
10161032
return this._handleMonitorCharacteristic(
1017-
BleModule.monitorCharacteristic(characteristicIdentifier, filledTransactionId),
1033+
BleModule.monitorCharacteristic(characteristicIdentifier, filledTransactionId, subscriptionType),
10181034
filledTransactionId,
10191035
listener
10201036
)

src/BleModule.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
Identifier,
99
UUID,
1010
TransactionId,
11+
CharacteristicSubscriptionType,
1112
Base64,
1213
ScanOptions,
1314
ConnectionOptions
@@ -607,14 +608,16 @@ export interface BleModuleInterface {
607608
* @param {UUID} serviceUUID Service UUID
608609
* @param {UUID} characteristicUUID Characteristic UUID
609610
* @param {TransactionId} transactionId Transaction handle used to cancel operation
611+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
610612
* @returns {Promise<void>} Value which is returned when monitoring was cancelled or resulted in error
611613
* @private
612614
*/
613615
monitorCharacteristicForDevice(
614616
deviceIdentifier: DeviceId,
615617
serviceUUID: UUID,
616618
characteristicUUID: UUID,
617-
transactionId: TransactionId
619+
transactionId: TransactionId,
620+
subscriptionType: ?CharacteristicSubscriptionType
618621
): Promise<void>;
619622

620623
/**
@@ -623,24 +626,31 @@ export interface BleModuleInterface {
623626
* @param {Identifier} serviceIdentifier Service ID
624627
* @param {UUID} characteristicUUID Characteristic UUID
625628
* @param {TransactionId} transactionId Transaction handle used to cancel operation
629+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
626630
* @returns {Promise<void>} Value which is returned when monitoring was cancelled or resulted in error
627631
* @private
628632
*/
629633
monitorCharacteristicForService(
630634
serviceIdentifier: Identifier,
631635
characteristicUUID: UUID,
632-
transactionId: TransactionId
636+
transactionId: TransactionId,
637+
subscriptionType: ?CharacteristicSubscriptionType
633638
): Promise<void>;
634639

635640
/**
636641
* Setup monitoring of characteristic value.
637642
*
638643
* @param {Identifier} characteristicIdentifier Characteristic ID
639644
* @param {TransactionId} transactionId Transaction handle used to cancel operation
645+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
640646
* @returns {Promise<void>} Value which is returned when monitoring was cancelled or resulted in error
641647
* @private
642648
*/
643-
monitorCharacteristic(characteristicIdentifier: Identifier, transactionId: TransactionId): Promise<void>;
649+
monitorCharacteristic(
650+
characteristicIdentifier: Identifier,
651+
transactionId: TransactionId,
652+
subscriptionType: ?CharacteristicSubscriptionType
653+
): Promise<void>;
644654

645655
// Descriptor operations
646656

src/Characteristic.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ import type { BleManager } from './BleManager'
55
import type { BleError } from './BleError'
66
import { Descriptor } from './Descriptor'
77
import type { NativeCharacteristic } from './BleModule'
8-
import type { DeviceId, Identifier, UUID, TransactionId, Base64, Subscription } from './TypeDefinition'
8+
import type {
9+
DeviceId,
10+
Identifier,
11+
UUID,
12+
TransactionId,
13+
CharacteristicSubscriptionType,
14+
Base64,
15+
Subscription
16+
} from './TypeDefinition'
917

1018
/**
1119
* Characteristic object.
@@ -130,14 +138,16 @@ export class Characteristic implements NativeCharacteristic {
130138
* @param {function(error: ?BleError, characteristic: ?Characteristic)} listener callback which emits
131139
* this {@link Characteristic} with modified value for each notification.
132140
* @param {?TransactionId} transactionId optional `transactionId` which can be used in
141+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
133142
* {@link #blemanagercanceltransaction|bleManager.cancelTransaction()} function.
134143
* @returns {Subscription} Subscription on which `remove()` function can be called to unsubscribe.
135144
*/
136145
monitor(
137146
listener: (error: ?BleError, characteristic: ?Characteristic) => void,
138-
transactionId: ?TransactionId
147+
transactionId: ?TransactionId,
148+
subscriptionType: ?CharacteristicSubscriptionType
139149
): Subscription {
140-
return this._manager._monitorCharacteristic(this.id, listener, transactionId)
150+
return this._manager._monitorCharacteristic(this.id, listener, transactionId, subscriptionType)
141151
}
142152

143153
/**

src/Device.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,15 @@ import type { Service } from './Service'
88
import type { Descriptor } from './Descriptor'
99
import { ConnectionPriority } from './TypeDefinition'
1010
import type { NativeDevice } from './BleModule'
11-
import type { DeviceId, Base64, UUID, Subscription, TransactionId, ConnectionOptions } from './TypeDefinition'
11+
import type {
12+
DeviceId,
13+
Base64,
14+
UUID,
15+
Subscription,
16+
TransactionId,
17+
CharacteristicSubscriptionType,
18+
ConnectionOptions
19+
} from './TypeDefinition'
1220

1321
/**
1422
* Device instance which can be retrieved only by calling
@@ -298,21 +306,24 @@ export class Device implements NativeDevice {
298306
* @param {function(error: ?BleError, characteristic: ?Characteristic)} listener - callback which emits
299307
* {@link Characteristic} objects with modified value for each notification.
300308
* @param {?TransactionId} transactionId optional `transactionId` which can be used in
309+
* @param {?CharacteristicSubscriptionType} subscriptionType [android only] subscription type of the characteristic
301310
* {@link #blemanagercanceltransaction|bleManager.cancelTransaction()} function.
302311
* @returns {Subscription} Subscription on which `remove()` function can be called to unsubscribe.
303312
*/
304313
monitorCharacteristicForService(
305314
serviceUUID: UUID,
306315
characteristicUUID: UUID,
307316
listener: (error: ?BleError, characteristic: ?Characteristic) => void,
308-
transactionId: ?TransactionId
317+
transactionId: ?TransactionId,
318+
subscriptionType?: CharacteristicSubscriptionType
309319
): Subscription {
310320
return this._manager.monitorCharacteristicForDevice(
311321
this.id,
312322
serviceUUID,
313323
characteristicUUID,
314324
listener,
315-
transactionId
325+
transactionId,
326+
subscriptionType
316327
)
317328
}
318329

0 commit comments

Comments
 (0)