react-native-polar-bridge 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
16
16
  s.source_files = "ios/**/*.{h,m,mm,cpp,swift}"
17
17
  s.private_header_files = "ios/**/*.h"
18
18
 
19
- s.dependency 'PolarBleSdk', '~> 5.9.0'
19
+ s.dependency 'PolarBleSdk', '~> 6.4.0'
20
20
 
21
21
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
22
22
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
package/README.md CHANGED
@@ -113,6 +113,14 @@ Ensure that the `deviceId` of the Polar device is connected before calling the f
113
113
  fetchHrData(connectedDeviceId);
114
114
  ```
115
115
 
116
+ By default, the package sends sensor data reports every 10 seconds. The interval
117
+ can be customized by specifying the frequency (in milliseconds) in the fetch request.
118
+
119
+ ```js
120
+ const BUFFER_MS = 5_000;
121
+ fetchHrData(connectedDeviceId, BUFFER_MS);
122
+ ```
123
+
116
124
  Listen for emitted events of the HR data.
117
125
 
118
126
  ```js
@@ -20,6 +20,7 @@ import com.facebook.react.bridge.ReactMethod;
20
20
  import com.facebook.react.bridge.ReadableArray;
21
21
  import com.facebook.react.turbomodule.core.interfaces.TurboModule;
22
22
  import javax.annotation.Nonnull;
23
+ import javax.annotation.Nullable;
23
24
 
24
25
  public abstract class NativePolarBridgeSpec extends ReactContextBaseJavaModule implements TurboModule {
25
26
  public static final String NAME = "PolarBridge";
@@ -47,19 +48,19 @@ public abstract class NativePolarBridgeSpec extends ReactContextBaseJavaModule i
47
48
 
48
49
  @ReactMethod
49
50
  @DoNotStrip
50
- public abstract void fetchHrData(String deviceId);
51
+ public abstract void fetchHrData(String deviceId, @Nullable Double bufferMs);
51
52
 
52
53
  @ReactMethod
53
54
  @DoNotStrip
54
- public abstract void fetchAccData(String deviceId);
55
+ public abstract void fetchAccData(String deviceId, @Nullable Double bufferMs);
55
56
 
56
57
  @ReactMethod
57
58
  @DoNotStrip
58
- public abstract void fetchGyrData(String deviceId);
59
+ public abstract void fetchGyrData(String deviceId, @Nullable Double bufferMs);
59
60
 
60
61
  @ReactMethod
61
62
  @DoNotStrip
62
- public abstract void fetchPpgData(String deviceId);
63
+ public abstract void fetchPpgData(String deviceId, @Nullable Double bufferMs);
63
64
 
64
65
  @ReactMethod
65
66
  @DoNotStrip
@@ -29,22 +29,22 @@ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_disconnectFr
29
29
 
30
30
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchHrData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
31
31
  static jmethodID cachedMethodId = nullptr;
32
- return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchHrData", "(Ljava/lang/String;)V", args, count, cachedMethodId);
32
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchHrData", "(Ljava/lang/String;Ljava/lang/Double;)V", args, count, cachedMethodId);
33
33
  }
34
34
 
35
35
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchAccData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
36
36
  static jmethodID cachedMethodId = nullptr;
37
- return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchAccData", "(Ljava/lang/String;)V", args, count, cachedMethodId);
37
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchAccData", "(Ljava/lang/String;Ljava/lang/Double;)V", args, count, cachedMethodId);
38
38
  }
39
39
 
40
40
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
41
41
  static jmethodID cachedMethodId = nullptr;
42
- return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchGyrData", "(Ljava/lang/String;)V", args, count, cachedMethodId);
42
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchGyrData", "(Ljava/lang/String;Ljava/lang/Double;)V", args, count, cachedMethodId);
43
43
  }
44
44
 
45
45
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
46
46
  static jmethodID cachedMethodId = nullptr;
47
- return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchPpgData", "(Ljava/lang/String;)V", args, count, cachedMethodId);
47
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "fetchPpgData", "(Ljava/lang/String;Ljava/lang/Double;)V", args, count, cachedMethodId);
48
48
  }
49
49
 
50
50
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_enableSdkMode(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
@@ -137,10 +137,10 @@ NativePolarBridgeSpecJSI::NativePolarBridgeSpecJSI(const JavaTurboModule::InitPa
137
137
  methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_multiply};
138
138
  methodMap_["connectToDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_connectToDevice};
139
139
  methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_disconnectFromDevice};
140
- methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
141
- methodMap_["fetchAccData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchAccData};
142
- methodMap_["fetchGyrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData};
143
- methodMap_["fetchPpgData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData};
140
+ methodMap_["fetchHrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
141
+ methodMap_["fetchAccData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchAccData};
142
+ methodMap_["fetchGyrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData};
143
+ methodMap_["fetchPpgData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData};
144
144
  methodMap_["enableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_enableSdkMode};
145
145
  methodMap_["disableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_disableSdkMode};
146
146
  methodMap_["getDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_getDeviceTime};
@@ -34,28 +34,32 @@ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevic
34
34
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
35
35
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchHrData(
36
36
  rt,
37
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
37
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
38
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
38
39
  );
39
40
  return jsi::Value::undefined();
40
41
  }
41
42
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
42
43
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchAccData(
43
44
  rt,
44
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
45
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
46
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
45
47
  );
46
48
  return jsi::Value::undefined();
47
49
  }
48
50
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
49
51
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchGyrData(
50
52
  rt,
51
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
53
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
54
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
52
55
  );
53
56
  return jsi::Value::undefined();
54
57
  }
55
58
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
56
59
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchPpgData(
57
60
  rt,
58
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
61
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
62
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
59
63
  );
60
64
  return jsi::Value::undefined();
61
65
  }
@@ -178,10 +182,10 @@ NativePolarBridgeCxxSpecJSI::NativePolarBridgeCxxSpecJSI(std::shared_ptr<CallInv
178
182
  methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_multiply};
179
183
  methodMap_["connectToDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_connectToDevice};
180
184
  methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevice};
181
- methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData};
182
- methodMap_["fetchAccData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData};
183
- methodMap_["fetchGyrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData};
184
- methodMap_["fetchPpgData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData};
185
+ methodMap_["fetchHrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData};
186
+ methodMap_["fetchAccData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData};
187
+ methodMap_["fetchGyrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData};
188
+ methodMap_["fetchPpgData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData};
185
189
  methodMap_["enableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_enableSdkMode};
186
190
  methodMap_["disableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_disableSdkMode};
187
191
  methodMap_["getDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_getDeviceTime};
@@ -23,10 +23,10 @@ public:
23
23
  virtual double multiply(jsi::Runtime &rt, double a, double b) = 0;
24
24
  virtual jsi::Value connectToDevice(jsi::Runtime &rt, jsi::String deviceId) = 0;
25
25
  virtual void disconnectFromDevice(jsi::Runtime &rt, jsi::String deviceId) = 0;
26
- virtual void fetchHrData(jsi::Runtime &rt, jsi::String deviceId) = 0;
27
- virtual void fetchAccData(jsi::Runtime &rt, jsi::String deviceId) = 0;
28
- virtual void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId) = 0;
29
- virtual void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId) = 0;
26
+ virtual void fetchHrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
27
+ virtual void fetchAccData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
28
+ virtual void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
29
+ virtual void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
30
30
  virtual void enableSdkMode(jsi::Runtime &rt, jsi::String deviceId) = 0;
31
31
  virtual void disableSdkMode(jsi::Runtime &rt, jsi::String deviceId) = 0;
32
32
  virtual jsi::Value getDeviceTime(jsi::Runtime &rt, jsi::String deviceId) = 0;
@@ -98,37 +98,37 @@ private:
98
98
  return bridging::callFromJs<void>(
99
99
  rt, &T::disconnectFromDevice, jsInvoker_, instance_, std::move(deviceId));
100
100
  }
101
- void fetchHrData(jsi::Runtime &rt, jsi::String deviceId) override {
101
+ void fetchHrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
102
102
  static_assert(
103
- bridging::getParameterCount(&T::fetchHrData) == 2,
104
- "Expected fetchHrData(...) to have 2 parameters");
103
+ bridging::getParameterCount(&T::fetchHrData) == 3,
104
+ "Expected fetchHrData(...) to have 3 parameters");
105
105
 
106
106
  return bridging::callFromJs<void>(
107
- rt, &T::fetchHrData, jsInvoker_, instance_, std::move(deviceId));
107
+ rt, &T::fetchHrData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
108
108
  }
109
- void fetchAccData(jsi::Runtime &rt, jsi::String deviceId) override {
109
+ void fetchAccData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
110
110
  static_assert(
111
- bridging::getParameterCount(&T::fetchAccData) == 2,
112
- "Expected fetchAccData(...) to have 2 parameters");
111
+ bridging::getParameterCount(&T::fetchAccData) == 3,
112
+ "Expected fetchAccData(...) to have 3 parameters");
113
113
 
114
114
  return bridging::callFromJs<void>(
115
- rt, &T::fetchAccData, jsInvoker_, instance_, std::move(deviceId));
115
+ rt, &T::fetchAccData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
116
116
  }
117
- void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId) override {
117
+ void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
118
118
  static_assert(
119
- bridging::getParameterCount(&T::fetchGyrData) == 2,
120
- "Expected fetchGyrData(...) to have 2 parameters");
119
+ bridging::getParameterCount(&T::fetchGyrData) == 3,
120
+ "Expected fetchGyrData(...) to have 3 parameters");
121
121
 
122
122
  return bridging::callFromJs<void>(
123
- rt, &T::fetchGyrData, jsInvoker_, instance_, std::move(deviceId));
123
+ rt, &T::fetchGyrData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
124
124
  }
125
- void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId) override {
125
+ void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
126
126
  static_assert(
127
- bridging::getParameterCount(&T::fetchPpgData) == 2,
128
- "Expected fetchPpgData(...) to have 2 parameters");
127
+ bridging::getParameterCount(&T::fetchPpgData) == 3,
128
+ "Expected fetchPpgData(...) to have 3 parameters");
129
129
 
130
130
  return bridging::callFromJs<void>(
131
- rt, &T::fetchPpgData, jsInvoker_, instance_, std::move(deviceId));
131
+ rt, &T::fetchPpgData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
132
132
  }
133
133
  void enableSdkMode(jsi::Runtime &rt, jsi::String deviceId) override {
134
134
  static_assert(
@@ -24,7 +24,7 @@ import java.time.Instant
24
24
  class PolarBridgeModule(reactContext: ReactApplicationContext) :
25
25
  NativePolarBridgeSpec(reactContext) {
26
26
  private val reactContext: ReactApplicationContext = reactContext
27
- private val SENSOR_BUFFER_SECONDS = 10L
27
+ private val SENSOR_BUFFER_MS = 10_000L
28
28
 
29
29
  override fun getName(): String {
30
30
  return NAME
@@ -624,8 +624,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
624
624
  val timestampMs: Long
625
625
  )
626
626
 
627
- override fun fetchHrData(deviceId: String) {
627
+ override fun fetchHrData(deviceId: String, ms: Double?) {
628
628
  Log.e(TAG, "Fetch Heart Data called on: $deviceId ")
629
+ val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
629
630
  val isDisposed = hrDisposable?.isDisposed ?: true
630
631
  try{
631
632
  if (isDisposed) {
@@ -638,7 +639,7 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
638
639
  )
639
640
  }
640
641
  }
641
- .buffer(SENSOR_BUFFER_SECONDS, TimeUnit.SECONDS)
642
+ .buffer(bufferMs, TimeUnit.MILLISECONDS)
642
643
  .observeOn(AndroidSchedulers.mainThread())
643
644
  .subscribe(
644
645
  { samples ->
@@ -730,8 +731,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
730
731
  }
731
732
  }
732
733
 
733
- override fun fetchAccData(deviceId: String) {
734
+ override fun fetchAccData(deviceId: String, ms: Double?) {
734
735
  Log.e(TAG, "Fetch Accelerometer Data called on: $deviceId ")
736
+ val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
735
737
  val isDisposed = accDisposable?.isDisposed ?: true
736
738
  try{
737
739
  if (isDisposed) {
@@ -740,7 +742,7 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
740
742
  api.startAccStreaming(deviceId, settings)
741
743
  }
742
744
  .flatMapIterable { it.samples }
743
- .buffer(SENSOR_BUFFER_SECONDS, TimeUnit.SECONDS)
745
+ .buffer(bufferMs, TimeUnit.MILLISECONDS)
744
746
  .observeOn(AndroidSchedulers.mainThread())
745
747
  .subscribe(
746
748
  { samples ->
@@ -786,8 +788,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
786
788
  }
787
789
  }
788
790
 
789
- override fun fetchGyrData(deviceId: String) {
791
+ override fun fetchGyrData(deviceId: String, ms: Double?) {
790
792
  Log.e(TAG, "Fetch Gyroscope Data called on: $deviceId ")
793
+ val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
791
794
  val isDisposed = gyrDisposable?.isDisposed ?: true
792
795
  try {
793
796
  if (isDisposed) {
@@ -796,7 +799,7 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
796
799
  api.startGyroStreaming(deviceId, settings)
797
800
  }
798
801
  .flatMapIterable { it.samples }
799
- .buffer(SENSOR_BUFFER_SECONDS, TimeUnit.SECONDS)
802
+ .buffer(bufferMs, TimeUnit.MILLISECONDS)
800
803
  .observeOn(AndroidSchedulers.mainThread())
801
804
  .subscribe(
802
805
  { samples ->
@@ -844,8 +847,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
844
847
  }
845
848
  }
846
849
 
847
- override fun fetchPpgData(deviceId: String) {
850
+ override fun fetchPpgData(deviceId: String, ms: Double?) {
848
851
  Log.e(TAG, "Fetch Photoplethysmograph Data called on: $deviceId ")
852
+ val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
849
853
  val isDisposed = ppgDisposable?.isDisposed ?: true
850
854
  try {
851
855
  if (isDisposed) {
@@ -855,7 +859,7 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
855
859
  }
856
860
  .filter { it.type == PolarPpgData.PpgDataType.PPG3_AMBIENT1 }
857
861
  .flatMapIterable { it.samples }
858
- .buffer(SENSOR_BUFFER_SECONDS, TimeUnit.SECONDS)
862
+ .buffer(bufferMs, TimeUnit.MILLISECONDS)
859
863
  .observeOn(AndroidSchedulers.mainThread())
860
864
  .subscribe(
861
865
  { samples ->
package/ios/PolarBridge.m CHANGED
@@ -11,13 +11,13 @@ RCT_EXTERN_METHOD(connectToDevice:(NSString *)deviceId
11
11
 
12
12
  RCT_EXTERN_METHOD(disconnectFromDevice:(NSString *)deviceId)
13
13
  RCT_EXTERN_METHOD(scanDevices)
14
- RCT_EXTERN_METHOD(fetchHrData:(NSString *)deviceId)
14
+ RCT_EXTERN_METHOD(fetchHrData:(NSString *)deviceId bufferMs:(nullable NSNumber *)bufferMs)
15
15
  RCT_EXTERN_METHOD(disposeHrStream)
16
- RCT_EXTERN_METHOD(fetchAccData:(NSString *)deviceId)
16
+ RCT_EXTERN_METHOD(fetchAccData:(NSString *)deviceId bufferMs:(nullable NSNumber *)bufferMs)
17
17
  RCT_EXTERN_METHOD(disposeAccStream)
18
- RCT_EXTERN_METHOD(fetchGyrData:(NSString *)deviceId)
18
+ RCT_EXTERN_METHOD(fetchGyrData:(NSString *)deviceId bufferMs:(nullable NSNumber *)bufferMs)
19
19
  RCT_EXTERN_METHOD(disposeGyrStream)
20
- RCT_EXTERN_METHOD(fetchPpgData:(NSString *)deviceId)
20
+ RCT_EXTERN_METHOD(fetchPpgData:(NSString *)deviceId bufferMs:(nullable NSNumber *)bufferMs)
21
21
  RCT_EXTERN_METHOD(disposePpgStream)
22
22
  RCT_EXTERN_METHOD(setDeviceTime:(NSString *)deviceId)
23
23
  RCT_EXTERN_METHOD(getDeviceTime:(NSString *)deviceId
@@ -46,8 +46,8 @@ class PolarBridge: RCTEventEmitter, ObservableObject
46
46
  private var isPpgStreaming = false
47
47
  private let disposeBag = DisposeBag()
48
48
 
49
- /// Flush interval for all sensor buffers (seconds)
50
- private let sensorFlushInterval: TimeInterval = 10.0
49
+ /// Flush interval for all sensor buffers (milliseconds)
50
+ private let SENSOR_BUFFER_MS: TimeInterval = 10_000
51
51
 
52
52
  @objc
53
53
  func multiply(_ a: NSNumber,withB b: NSNumber) -> NSNumber {
@@ -165,14 +165,13 @@ class PolarBridge: RCTEventEmitter, ObservableObject
165
165
  private let hrBufferQueue = DispatchQueue(label: "com.polarbridge.hrBufferQueue")
166
166
  private var hrFlushTimer: Timer?
167
167
 
168
- private func startHrFlushTimer() {
168
+ private func startHrFlushTimer(bufferMs: TimeInterval) {
169
169
  stopHrFlushTimer()
170
-
170
+ let intervalSeconds = bufferMs / 1000.0 // Timer always uses seconds,
171
171
  DispatchQueue.main.async { [weak self] in
172
172
  guard let self = self else { return }
173
-
174
173
  self.hrFlushTimer = Timer(
175
- timeInterval: self.sensorFlushInterval,
174
+ timeInterval: intervalSeconds,
176
175
  repeats: true
177
176
  ) { [weak self] _ in
178
177
  self?.flushHrBuffer()
@@ -208,10 +207,13 @@ class PolarBridge: RCTEventEmitter, ObservableObject
208
207
  }
209
208
  }
210
209
 
211
- @objc(fetchHrData:)
212
- func fetchHrData(_ deviceId: String) {
210
+ @objc(fetchHrData:bufferMs:)
211
+ func fetchHrData(_ deviceId: String, bufferMs: NSNumber?) {
213
212
  NSLog("PolarBridge: Fetch HR Data called on: \(deviceId)")
214
-
213
+ // fallback
214
+ let resolvedBufferMs: TimeInterval = (bufferMs?.doubleValue ?? -1) >= 0
215
+ ? bufferMs!.doubleValue
216
+ : SENSOR_BUFFER_MS
215
217
  guard let api = api else {
216
218
  NSLog("PolarBridge: Polar API not initialized")
217
219
  return
@@ -230,7 +232,7 @@ class PolarBridge: RCTEventEmitter, ObservableObject
230
232
  }
231
233
 
232
234
  isHrStreaming = true
233
- startHrFlushTimer()
235
+ startHrFlushTimer(bufferMs: resolvedBufferMs)
234
236
 
235
237
  // Start HR streaming
236
238
  hrDisposable = api.startHrStreaming(deviceId)
@@ -296,14 +298,14 @@ class PolarBridge: RCTEventEmitter, ObservableObject
296
298
  private let ppgBufferQueue = DispatchQueue(label: "com.polarbridge.ppgBufferQueue")
297
299
  private var ppgFlushTimer: Timer?
298
300
 
299
- private func startAccFlushTimer() {
301
+ private func startAccFlushTimer(bufferMs: TimeInterval) {
300
302
  stopAccFlushTimer()
301
-
303
+ let intervalSeconds = bufferMs / 1000.0
302
304
  DispatchQueue.main.async { [weak self] in
303
305
  guard let self = self else { return }
304
306
 
305
307
  self.accFlushTimer = Timer(
306
- timeInterval: self.sensorFlushInterval,
308
+ timeInterval: intervalSeconds,
307
309
  repeats: true
308
310
  ) { [weak self] _ in
309
311
  self?.flushAccBuffer()
@@ -339,10 +341,12 @@ class PolarBridge: RCTEventEmitter, ObservableObject
339
341
  }
340
342
  }
341
343
 
342
- @objc(fetchAccData:)
343
- func fetchAccData(_ deviceId: String) {
344
+ @objc(fetchAccData:bufferMs:)
345
+ func fetchAccData(_ deviceId: String, bufferMs: NSNumber?) {
344
346
  NSLog("PolarBridge: Fetch ACC Data called on: \(deviceId)")
345
-
347
+ let resolvedBufferMs: TimeInterval = (bufferMs?.doubleValue ?? -1) >= 0
348
+ ? bufferMs!.doubleValue
349
+ : SENSOR_BUFFER_MS
346
350
  guard let api = api else {
347
351
  NSLog("PolarBridge: Polar API not initialized")
348
352
  return
@@ -361,11 +365,11 @@ class PolarBridge: RCTEventEmitter, ObservableObject
361
365
  }
362
366
 
363
367
  isAccStreaming = true
364
- startAccFlushTimer()
368
+ startAccFlushTimer(bufferMs: resolvedBufferMs)
365
369
 
366
370
  accDisposable = requestStreamSettings(deviceId, feature: .acc)
367
371
  .flatMap { settings in
368
- api.startAccStreaming(deviceId, settings: settings)
372
+ api.startAccStreaming(deviceId, settings: settings).asObservable()
369
373
  }
370
374
  .observe(on: MainScheduler.instance)
371
375
  .subscribe(
@@ -373,7 +377,7 @@ class PolarBridge: RCTEventEmitter, ObservableObject
373
377
  guard let self = self else { return }
374
378
 
375
379
  self.accBufferQueue.async {
376
- for sample in accData.samples {
380
+ for sample in accData {
377
381
  NSLog("ACC x: \(sample.x) y: \(sample.y) z: \(sample.z) timestamp: \(sample.timeStamp)")
378
382
 
379
383
  var event: [String: Any] = [:]
@@ -424,14 +428,14 @@ class PolarBridge: RCTEventEmitter, ObservableObject
424
428
  accDisposable?.disposed(by: disposeBag)
425
429
  }
426
430
 
427
- private func startGyrFlushTimer() {
431
+ private func startGyrFlushTimer(bufferMs: TimeInterval) {
428
432
  stopGyrFlushTimer()
429
-
433
+ let intervalSeconds = bufferMs / 1000.0
430
434
  DispatchQueue.main.async { [weak self] in
431
435
  guard let self = self else { return }
432
436
 
433
437
  self.gyrFlushTimer = Timer(
434
- timeInterval: self.sensorFlushInterval,
438
+ timeInterval: intervalSeconds,
435
439
  repeats: true
436
440
  ) { [weak self] _ in
437
441
  self?.flushGyrBuffer()
@@ -467,10 +471,12 @@ class PolarBridge: RCTEventEmitter, ObservableObject
467
471
  }
468
472
  }
469
473
 
470
- @objc(fetchGyrData:)
471
- func fetchGyrData(_ deviceId: String) {
474
+ @objc(fetchGyrData:bufferMs:)
475
+ func fetchGyrData(_ deviceId: String, bufferMs: NSNumber?) {
472
476
  NSLog("PolarBridge: Fetch Gyroscope Data called on: \(deviceId)")
473
-
477
+ let resolvedBufferMs: TimeInterval = (bufferMs?.doubleValue ?? -1) >= 0
478
+ ? bufferMs!.doubleValue
479
+ : SENSOR_BUFFER_MS
474
480
  guard let api = api else {
475
481
  NSLog("PolarBridge: Polar API not initialized")
476
482
  return
@@ -488,7 +494,7 @@ class PolarBridge: RCTEventEmitter, ObservableObject
488
494
  }
489
495
 
490
496
  isGyrStreaming = true
491
- startGyrFlushTimer()
497
+ startGyrFlushTimer(bufferMs: resolvedBufferMs)
492
498
 
493
499
  gyrDisposable = requestStreamSettings(deviceId, feature: .gyro)
494
500
  .flatMap { settings in
@@ -500,7 +506,7 @@ class PolarBridge: RCTEventEmitter, ObservableObject
500
506
  guard let self = self else { return }
501
507
 
502
508
  self.gyrBufferQueue.async {
503
- for sample in gyrData.samples {
509
+ for sample in gyrData {
504
510
  NSLog("GYR x: \(sample.x) y: \(sample.y) z: \(sample.z) timestamp: \(sample.timeStamp)")
505
511
 
506
512
  var event: [String: Any] = [:]
@@ -558,14 +564,14 @@ class PolarBridge: RCTEventEmitter, ObservableObject
558
564
  gyrDisposable?.disposed(by: disposeBag)
559
565
  }
560
566
 
561
- private func startPpgFlushTimer() {
567
+ private func startPpgFlushTimer(bufferMs: TimeInterval) {
562
568
  stopPpgFlushTimer()
563
-
569
+ let intervalSeconds = bufferMs / 1000.0
564
570
  DispatchQueue.main.async { [weak self] in
565
571
  guard let self = self else { return }
566
572
 
567
573
  self.ppgFlushTimer = Timer(
568
- timeInterval: self.sensorFlushInterval,
574
+ timeInterval: intervalSeconds,
569
575
  repeats: true
570
576
  ) { [weak self] _ in
571
577
  self?.flushPpgBuffer()
@@ -601,10 +607,12 @@ class PolarBridge: RCTEventEmitter, ObservableObject
601
607
  }
602
608
  }
603
609
 
604
- @objc(fetchPpgData:)
605
- func fetchPpgData(_ deviceId: String) {
610
+ @objc(fetchPpgData:bufferMs:)
611
+ func fetchPpgData(_ deviceId: String, bufferMs: NSNumber?) {
606
612
  NSLog("PolarBridge: Fetch PPG Data called on: \(deviceId)")
607
-
613
+ let resolvedBufferMs: TimeInterval = (bufferMs?.doubleValue ?? -1) >= 0
614
+ ? bufferMs!.doubleValue
615
+ : SENSOR_BUFFER_MS
608
616
  guard let api = api else {
609
617
  NSLog("PolarBridge: Polar API not initialized")
610
618
  return
@@ -622,7 +630,7 @@ class PolarBridge: RCTEventEmitter, ObservableObject
622
630
  }
623
631
 
624
632
  isPpgStreaming = true
625
- startPpgFlushTimer()
633
+ startPpgFlushTimer(bufferMs: resolvedBufferMs)
626
634
 
627
635
  ppgDisposable = requestStreamSettings(deviceId, feature: .ppg)
628
636
  .flatMap { settings in
@@ -949,4 +957,8 @@ extension PolarBridge: PolarBleApiDeviceInfoObserver {
949
957
  batteryReceived = true
950
958
  maybeResolve()
951
959
  }
960
+
961
+ func batteryChargingStatusReceived(_ identifier: String, chargingStatus: BleBasClient.ChargeState) {
962
+ NSLog("Polar: Battery Charging status for \(identifier): \(chargingStatus)")
963
+ }
952
964
  }
@@ -39,19 +39,19 @@ namespace facebook::react {
39
39
  }
40
40
 
41
41
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchHrData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
42
- return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchHrData", @selector(fetchHrData:), args, count);
42
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchHrData", @selector(fetchHrData:bufferMs:), args, count);
43
43
  }
44
44
 
45
45
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchAccData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
46
- return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchAccData", @selector(fetchAccData:), args, count);
46
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchAccData", @selector(fetchAccData:bufferMs:), args, count);
47
47
  }
48
48
 
49
49
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
50
- return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchGyrData", @selector(fetchGyrData:), args, count);
50
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchGyrData", @selector(fetchGyrData:bufferMs:), args, count);
51
51
  }
52
52
 
53
53
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
54
- return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchPpgData", @selector(fetchPpgData:), args, count);
54
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "fetchPpgData", @selector(fetchPpgData:bufferMs:), args, count);
55
55
  }
56
56
 
57
57
  static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_enableSdkMode(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
@@ -134,16 +134,16 @@ namespace facebook::react {
134
134
  methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_disconnectFromDevice};
135
135
 
136
136
 
137
- methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
137
+ methodMap_["fetchHrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
138
138
 
139
139
 
140
- methodMap_["fetchAccData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchAccData};
140
+ methodMap_["fetchAccData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchAccData};
141
141
 
142
142
 
143
- methodMap_["fetchGyrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData};
143
+ methodMap_["fetchGyrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData};
144
144
 
145
145
 
146
- methodMap_["fetchPpgData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData};
146
+ methodMap_["fetchPpgData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchPpgData};
147
147
 
148
148
 
149
149
  methodMap_["enableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_enableSdkMode};
@@ -41,10 +41,14 @@ NS_ASSUME_NONNULL_BEGIN
41
41
  resolve:(RCTPromiseResolveBlock)resolve
42
42
  reject:(RCTPromiseRejectBlock)reject;
43
43
  - (void)disconnectFromDevice:(NSString *)deviceId;
44
- - (void)fetchHrData:(NSString *)deviceId;
45
- - (void)fetchAccData:(NSString *)deviceId;
46
- - (void)fetchGyrData:(NSString *)deviceId;
47
- - (void)fetchPpgData:(NSString *)deviceId;
44
+ - (void)fetchHrData:(NSString *)deviceId
45
+ bufferMs:(NSNumber *)bufferMs;
46
+ - (void)fetchAccData:(NSString *)deviceId
47
+ bufferMs:(NSNumber *)bufferMs;
48
+ - (void)fetchGyrData:(NSString *)deviceId
49
+ bufferMs:(NSNumber *)bufferMs;
50
+ - (void)fetchPpgData:(NSString *)deviceId
51
+ bufferMs:(NSNumber *)bufferMs;
48
52
  - (void)enableSdkMode:(NSString *)deviceId;
49
53
  - (void)disableSdkMode:(NSString *)deviceId;
50
54
  - (void)getDeviceTime:(NSString *)deviceId
@@ -34,28 +34,32 @@ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevic
34
34
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
35
35
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchHrData(
36
36
  rt,
37
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
37
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
38
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
38
39
  );
39
40
  return jsi::Value::undefined();
40
41
  }
41
42
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
42
43
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchAccData(
43
44
  rt,
44
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
45
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
46
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
45
47
  );
46
48
  return jsi::Value::undefined();
47
49
  }
48
50
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
49
51
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchGyrData(
50
52
  rt,
51
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
53
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
54
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
52
55
  );
53
56
  return jsi::Value::undefined();
54
57
  }
55
58
  static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
56
59
  static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchPpgData(
57
60
  rt,
58
- count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
61
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
62
+ count <= 1 || args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asNumber())
59
63
  );
60
64
  return jsi::Value::undefined();
61
65
  }
@@ -178,10 +182,10 @@ NativePolarBridgeCxxSpecJSI::NativePolarBridgeCxxSpecJSI(std::shared_ptr<CallInv
178
182
  methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_multiply};
179
183
  methodMap_["connectToDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_connectToDevice};
180
184
  methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevice};
181
- methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData};
182
- methodMap_["fetchAccData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData};
183
- methodMap_["fetchGyrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData};
184
- methodMap_["fetchPpgData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData};
185
+ methodMap_["fetchHrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData};
186
+ methodMap_["fetchAccData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchAccData};
187
+ methodMap_["fetchGyrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchGyrData};
188
+ methodMap_["fetchPpgData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchPpgData};
185
189
  methodMap_["enableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_enableSdkMode};
186
190
  methodMap_["disableSdkMode"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_disableSdkMode};
187
191
  methodMap_["getDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_getDeviceTime};
@@ -23,10 +23,10 @@ public:
23
23
  virtual double multiply(jsi::Runtime &rt, double a, double b) = 0;
24
24
  virtual jsi::Value connectToDevice(jsi::Runtime &rt, jsi::String deviceId) = 0;
25
25
  virtual void disconnectFromDevice(jsi::Runtime &rt, jsi::String deviceId) = 0;
26
- virtual void fetchHrData(jsi::Runtime &rt, jsi::String deviceId) = 0;
27
- virtual void fetchAccData(jsi::Runtime &rt, jsi::String deviceId) = 0;
28
- virtual void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId) = 0;
29
- virtual void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId) = 0;
26
+ virtual void fetchHrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
27
+ virtual void fetchAccData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
28
+ virtual void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
29
+ virtual void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) = 0;
30
30
  virtual void enableSdkMode(jsi::Runtime &rt, jsi::String deviceId) = 0;
31
31
  virtual void disableSdkMode(jsi::Runtime &rt, jsi::String deviceId) = 0;
32
32
  virtual jsi::Value getDeviceTime(jsi::Runtime &rt, jsi::String deviceId) = 0;
@@ -98,37 +98,37 @@ private:
98
98
  return bridging::callFromJs<void>(
99
99
  rt, &T::disconnectFromDevice, jsInvoker_, instance_, std::move(deviceId));
100
100
  }
101
- void fetchHrData(jsi::Runtime &rt, jsi::String deviceId) override {
101
+ void fetchHrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
102
102
  static_assert(
103
- bridging::getParameterCount(&T::fetchHrData) == 2,
104
- "Expected fetchHrData(...) to have 2 parameters");
103
+ bridging::getParameterCount(&T::fetchHrData) == 3,
104
+ "Expected fetchHrData(...) to have 3 parameters");
105
105
 
106
106
  return bridging::callFromJs<void>(
107
- rt, &T::fetchHrData, jsInvoker_, instance_, std::move(deviceId));
107
+ rt, &T::fetchHrData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
108
108
  }
109
- void fetchAccData(jsi::Runtime &rt, jsi::String deviceId) override {
109
+ void fetchAccData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
110
110
  static_assert(
111
- bridging::getParameterCount(&T::fetchAccData) == 2,
112
- "Expected fetchAccData(...) to have 2 parameters");
111
+ bridging::getParameterCount(&T::fetchAccData) == 3,
112
+ "Expected fetchAccData(...) to have 3 parameters");
113
113
 
114
114
  return bridging::callFromJs<void>(
115
- rt, &T::fetchAccData, jsInvoker_, instance_, std::move(deviceId));
115
+ rt, &T::fetchAccData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
116
116
  }
117
- void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId) override {
117
+ void fetchGyrData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
118
118
  static_assert(
119
- bridging::getParameterCount(&T::fetchGyrData) == 2,
120
- "Expected fetchGyrData(...) to have 2 parameters");
119
+ bridging::getParameterCount(&T::fetchGyrData) == 3,
120
+ "Expected fetchGyrData(...) to have 3 parameters");
121
121
 
122
122
  return bridging::callFromJs<void>(
123
- rt, &T::fetchGyrData, jsInvoker_, instance_, std::move(deviceId));
123
+ rt, &T::fetchGyrData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
124
124
  }
125
- void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId) override {
125
+ void fetchPpgData(jsi::Runtime &rt, jsi::String deviceId, std::optional<double> bufferMs) override {
126
126
  static_assert(
127
- bridging::getParameterCount(&T::fetchPpgData) == 2,
128
- "Expected fetchPpgData(...) to have 2 parameters");
127
+ bridging::getParameterCount(&T::fetchPpgData) == 3,
128
+ "Expected fetchPpgData(...) to have 3 parameters");
129
129
 
130
130
  return bridging::callFromJs<void>(
131
- rt, &T::fetchPpgData, jsInvoker_, instance_, std::move(deviceId));
131
+ rt, &T::fetchPpgData, jsInvoker_, instance_, std::move(deviceId), std::move(bufferMs));
132
132
  }
133
133
  void enableSdkMode(jsi::Runtime &rt, jsi::String deviceId) override {
134
134
  static_assert(
@@ -6,10 +6,10 @@ export interface Spec extends TurboModule {
6
6
  multiply(a: number, b: number): number;
7
7
  connectToDevice(deviceId: string): Promise<DeviceConnected>;
8
8
  disconnectFromDevice(deviceId: string): void;
9
- fetchHrData(deviceId: string): void;
10
- fetchAccData(deviceId: string): void;
11
- fetchGyrData(deviceId: string): void;
12
- fetchPpgData(deviceId: string): void;
9
+ fetchHrData(deviceId: string, bufferMs: number | null): void;
10
+ fetchAccData(deviceId: string, bufferMs: number | null): void;
11
+ fetchGyrData(deviceId: string, bufferMs: number | null): void;
12
+ fetchPpgData(deviceId: string, bufferMs: number | null): void;
13
13
  enableSdkMode(deviceId: string): void;
14
14
  disableSdkMode(deviceId: string): void;
15
15
  getDeviceTime(deviceId: string): Promise<DeviceTime>;
@@ -13,17 +13,17 @@ export function disconnectFromDevice(deviceId) {
13
13
  export function scanDevices() {
14
14
  return PolarBridge.scanDevices();
15
15
  }
16
- export function fetchHrData(deviceId) {
17
- return PolarBridge.fetchHrData(deviceId);
16
+ export function fetchHrData(deviceId, bufferMs = null) {
17
+ return PolarBridge.fetchHrData(deviceId, bufferMs);
18
18
  }
19
- export function fetchAccData(deviceId) {
20
- return PolarBridge.fetchAccData(deviceId);
19
+ export function fetchAccData(deviceId, bufferMs = null) {
20
+ return PolarBridge.fetchAccData(deviceId, bufferMs);
21
21
  }
22
- export function fetchGyrData(deviceId) {
23
- return PolarBridge.fetchGyrData(deviceId);
22
+ export function fetchGyrData(deviceId, bufferMs = null) {
23
+ return PolarBridge.fetchGyrData(deviceId, bufferMs);
24
24
  }
25
- export function fetchPpgData(deviceId) {
26
- return PolarBridge.fetchPpgData(deviceId);
25
+ export function fetchPpgData(deviceId, bufferMs = null) {
26
+ return PolarBridge.fetchPpgData(deviceId, bufferMs);
27
27
  }
28
28
  export function enableSdkMode(deviceId) {
29
29
  return PolarBridge.enableSdkMode(deviceId);
@@ -1 +1 @@
1
- {"version":3,"names":["PolarBridge","multiply","a","b","connectToDevice","deviceId","disconnectFromDevice","scanDevices","fetchHrData","fetchAccData","fetchGyrData","fetchPpgData","enableSdkMode","disableSdkMode","setDeviceTime","getDeviceTime","getDiskSpace","doFactoryReset","startOfflineRecording","features","stopOfflineRecording","setPolarRecordingTrigger","recordingMode","fetchOfflineRecordings","downloadOfflineRecordings","deleteAllOfflineRecordings","disposeHrStream","disposeAccStream","disposeGyrStream","disposePpgStream","emittedEventId","Object","freeze","SCAN_DEVICE_FOUND","SCAN_DEVICE_ERROR","SCAN_DEVICE_COMPLETE","POLAR_DEVICE_TIME","POLAR_HR_DATA","POLAR_HR_ERROR","POLAR_HR_COMPLETE","POLAR_ACC_DATA","POLAR_ACC_ERROR","POLAR_ACC_COMPLETE","POLAR_GYR_DATA","POLAR_GYR_ERROR","POLAR_GYR_COMPLETE","POLAR_PPG_DATA","POLAR_PPG_ERROR","POLAR_PPG_COMPLETE","POLAR_DISK_SPACE","POLAR_OFFLINE_RECORDING","OfflineRecordingFeature","OFFLINE_HR","OFFLINE_ACC","OFFLINE_GYR","OFFLINE_PPG","OFFLINE_MAG","OFFLINE_PPI","OfflineRecordingTriggerMode","TRIGGER_DISABLED","TRIGGER_SYSTEM_START","TRIGGER_EXERCISE_START"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["PolarBridge","multiply","a","b","connectToDevice","deviceId","disconnectFromDevice","scanDevices","fetchHrData","bufferMs","fetchAccData","fetchGyrData","fetchPpgData","enableSdkMode","disableSdkMode","setDeviceTime","getDeviceTime","getDiskSpace","doFactoryReset","startOfflineRecording","features","stopOfflineRecording","setPolarRecordingTrigger","recordingMode","fetchOfflineRecordings","downloadOfflineRecordings","deleteAllOfflineRecordings","disposeHrStream","disposeAccStream","disposeGyrStream","disposePpgStream","emittedEventId","Object","freeze","SCAN_DEVICE_FOUND","SCAN_DEVICE_ERROR","SCAN_DEVICE_COMPLETE","POLAR_DEVICE_TIME","POLAR_HR_DATA","POLAR_HR_ERROR","POLAR_HR_COMPLETE","POLAR_ACC_DATA","POLAR_ACC_ERROR","POLAR_ACC_COMPLETE","POLAR_GYR_DATA","POLAR_GYR_ERROR","POLAR_GYR_COMPLETE","POLAR_PPG_DATA","POLAR_PPG_ERROR","POLAR_PPG_COMPLETE","POLAR_DISK_SPACE","POLAR_OFFLINE_RECORDING","OfflineRecordingFeature","OFFLINE_HR","OFFLINE_ACC","OFFLINE_GYR","OFFLINE_PPG","OFFLINE_MAG","OFFLINE_PPI","OfflineRecordingTriggerMode","TRIGGER_DISABLED","TRIGGER_SYSTEM_START","TRIGGER_EXERCISE_START"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,10 +4,10 @@ export interface Spec extends TurboModule {
4
4
  multiply(a: number, b: number): number;
5
5
  connectToDevice(deviceId: string): Promise<DeviceConnected>;
6
6
  disconnectFromDevice(deviceId: string): void;
7
- fetchHrData(deviceId: string): void;
8
- fetchAccData(deviceId: string): void;
9
- fetchGyrData(deviceId: string): void;
10
- fetchPpgData(deviceId: string): void;
7
+ fetchHrData(deviceId: string, bufferMs: number | null): void;
8
+ fetchAccData(deviceId: string, bufferMs: number | null): void;
9
+ fetchGyrData(deviceId: string, bufferMs: number | null): void;
10
+ fetchPpgData(deviceId: string, bufferMs: number | null): void;
11
11
  enableSdkMode(deviceId: string): void;
12
12
  disableSdkMode(deviceId: string): void;
13
13
  getDeviceTime(deviceId: string): Promise<DeviceTime>;
@@ -1 +1 @@
1
- {"version":3,"file":"NativePolarBridge.d.ts","sourceRoot":"","sources":["../../../src/NativePolarBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5F,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,WAAW,IAAI,IAAI,CAAC;IACpB,eAAe,IAAI,IAAI,CAAC;IACxB,gBAAgB,IAAI,IAAI,CAAC;IACzB,gBAAgB,IAAI,IAAI,CAAC;IACzB,gBAAgB,IAAI,IAAI,CAAC;CAC1B;;AAED,wBAAqE"}
1
+ {"version":3,"file":"NativePolarBridge.d.ts","sourceRoot":"","sources":["../../../src/NativePolarBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5F,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,WAAW,IAAI,IAAI,CAAC;IACpB,eAAe,IAAI,IAAI,CAAC;IACxB,gBAAgB,IAAI,IAAI,CAAC;IACzB,gBAAgB,IAAI,IAAI,CAAC;IACzB,gBAAgB,IAAI,IAAI,CAAC;CAC1B;;AAED,wBAAqE"}
@@ -2,10 +2,10 @@ export declare function multiply(a: number, b: number): number;
2
2
  export declare function connectToDevice(deviceId: string): Promise<import("./PolarDataModel").DeviceConnected>;
3
3
  export declare function disconnectFromDevice(deviceId: string): void;
4
4
  export declare function scanDevices(): void;
5
- export declare function fetchHrData(deviceId: string): void;
6
- export declare function fetchAccData(deviceId: string): void;
7
- export declare function fetchGyrData(deviceId: string): void;
8
- export declare function fetchPpgData(deviceId: string): void;
5
+ export declare function fetchHrData(deviceId: string, bufferMs?: number | null): void;
6
+ export declare function fetchAccData(deviceId: string, bufferMs?: number | null): void;
7
+ export declare function fetchGyrData(deviceId: string, bufferMs?: number | null): void;
8
+ export declare function fetchPpgData(deviceId: string, bufferMs?: number | null): void;
9
9
  export declare function enableSdkMode(deviceId: string): void;
10
10
  export declare function disableSdkMode(deviceId: string): void;
11
11
  export declare function setDeviceTime(deviceId: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,uDAE/C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,QAEpD;AAED,wBAAgB,WAAW,SAE1B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,QAE3C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAE5C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAE5C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAE5C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,QAE7C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,QAE9C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,QAE7C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,kDAE7C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,iDAE5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,QAE9C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAEzE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAExE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAEnG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,0DAEtD;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,QAEzD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,QAE1D;AAED,wBAAgB,eAAe,SAE9B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;EAmBzB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;EAOlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;EAItC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,uDAE/C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,QAEpD;AAED,wBAAgB,WAAW,SAE1B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,QAE3E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,QAE5E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,QAE5E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,QAE5E;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,QAE7C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,QAE9C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,QAE7C;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,kDAE7C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,iDAE5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,QAE9C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAEzE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAExE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAEnG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,0DAEtD;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,QAEzD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,QAE1D;AAED,wBAAgB,eAAe,SAE9B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,wBAAgB,gBAAgB,SAE/B;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;EAmBzB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;EAOlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;EAItC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-polar-bridge",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Polar SDK for React Native",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",
@@ -6,10 +6,10 @@ export interface Spec extends TurboModule {
6
6
  multiply(a: number, b: number): number;
7
7
  connectToDevice(deviceId: string): Promise<DeviceConnected>;
8
8
  disconnectFromDevice(deviceId: string): void;
9
- fetchHrData(deviceId: string): void;
10
- fetchAccData(deviceId: string): void;
11
- fetchGyrData(deviceId: string): void;
12
- fetchPpgData(deviceId: string): void;
9
+ fetchHrData(deviceId: string, bufferMs: number | null): void;
10
+ fetchAccData(deviceId: string, bufferMs: number | null): void;
11
+ fetchGyrData(deviceId: string, bufferMs: number | null): void;
12
+ fetchPpgData(deviceId: string, bufferMs: number | null): void;
13
13
  enableSdkMode(deviceId: string): void;
14
14
  disableSdkMode(deviceId: string): void;
15
15
  getDeviceTime(deviceId: string): Promise<DeviceTime>;
package/src/index.tsx CHANGED
@@ -16,20 +16,20 @@ export function scanDevices() {
16
16
  return PolarBridge.scanDevices();
17
17
  }
18
18
 
19
- export function fetchHrData(deviceId: string) {
20
- return PolarBridge.fetchHrData(deviceId);
19
+ export function fetchHrData(deviceId: string, bufferMs: number | null = null) {
20
+ return PolarBridge.fetchHrData(deviceId, bufferMs);
21
21
  }
22
22
 
23
- export function fetchAccData(deviceId: string) {
24
- return PolarBridge.fetchAccData(deviceId);
23
+ export function fetchAccData(deviceId: string, bufferMs: number | null = null) {
24
+ return PolarBridge.fetchAccData(deviceId, bufferMs);
25
25
  }
26
26
 
27
- export function fetchGyrData(deviceId: string) {
28
- return PolarBridge.fetchGyrData(deviceId);
27
+ export function fetchGyrData(deviceId: string, bufferMs: number | null = null) {
28
+ return PolarBridge.fetchGyrData(deviceId, bufferMs);
29
29
  }
30
30
 
31
- export function fetchPpgData(deviceId: string) {
32
- return PolarBridge.fetchPpgData(deviceId);
31
+ export function fetchPpgData(deviceId: string, bufferMs: number | null = null) {
32
+ return PolarBridge.fetchPpgData(deviceId, bufferMs);
33
33
  }
34
34
 
35
35
  export function enableSdkMode(deviceId: string) {