react-native-polar-bridge 0.2.1 → 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.
- package/PolarBridge.podspec +1 -1
- package/README.md +8 -0
- package/android/generated/java/com/polarbridge/NativePolarBridgeSpec.java +5 -4
- package/android/generated/jni/RNPolarBridgeSpec-generated.cpp +8 -8
- package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI-generated.cpp +12 -8
- package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h +20 -20
- package/android/src/main/java/com/polarbridge/PolarBridgeModule.kt +70 -29
- package/ios/PolarBridge.m +4 -4
- package/ios/PolarBridge.swift +46 -34
- package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec-generated.mm +8 -8
- package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec.h +8 -4
- package/ios/generated/RNPolarBridgeSpecJSI-generated.cpp +12 -8
- package/ios/generated/RNPolarBridgeSpecJSI.h +20 -20
- package/lib/module/NativePolarBridge.ts +4 -4
- package/lib/module/index.js +8 -8
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativePolarBridge.d.ts +4 -4
- package/lib/typescript/src/NativePolarBridge.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativePolarBridge.ts +4 -4
- package/src/index.tsx +8 -8
package/PolarBridge.podspec
CHANGED
|
@@ -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', '~>
|
|
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 {
|
|
141
|
-
methodMap_["fetchAccData"] = MethodMetadata {
|
|
142
|
-
methodMap_["fetchGyrData"] = MethodMetadata {
|
|
143
|
-
methodMap_["fetchPpgData"] = MethodMetadata {
|
|
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 {
|
|
182
|
-
methodMap_["fetchAccData"] = MethodMetadata {
|
|
183
|
-
methodMap_["fetchGyrData"] = MethodMetadata {
|
|
184
|
-
methodMap_["fetchPpgData"] = MethodMetadata {
|
|
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};
|
package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h
CHANGED
|
@@ -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) ==
|
|
104
|
-
"Expected fetchHrData(...) to have
|
|
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) ==
|
|
112
|
-
"Expected fetchAccData(...) to have
|
|
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) ==
|
|
120
|
-
"Expected fetchGyrData(...) to have
|
|
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) ==
|
|
128
|
-
"Expected fetchPpgData(...) to have
|
|
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(
|
|
@@ -17,12 +17,14 @@ import io.reactivex.rxjava3.core.Flowable
|
|
|
17
17
|
import io.reactivex.rxjava3.core.Single
|
|
18
18
|
import java.util.*
|
|
19
19
|
import java.util.concurrent.atomic.AtomicInteger
|
|
20
|
+
import java.util.concurrent.TimeUnit
|
|
20
21
|
import java.time.Instant
|
|
21
22
|
|
|
22
23
|
@ReactModule(name = PolarBridgeModule.NAME)
|
|
23
24
|
class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
24
25
|
NativePolarBridgeSpec(reactContext) {
|
|
25
26
|
private val reactContext: ReactApplicationContext = reactContext
|
|
27
|
+
private val SENSOR_BUFFER_MS = 10_000L
|
|
26
28
|
|
|
27
29
|
override fun getName(): String {
|
|
28
30
|
return NAME
|
|
@@ -617,17 +619,35 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
617
619
|
}
|
|
618
620
|
}
|
|
619
621
|
|
|
620
|
-
|
|
622
|
+
data class HrSampleWithTimestamp(
|
|
623
|
+
val data: PolarHrData.PolarHrSample,
|
|
624
|
+
val timestampMs: Long
|
|
625
|
+
)
|
|
626
|
+
|
|
627
|
+
override fun fetchHrData(deviceId: String, ms: Double?) {
|
|
621
628
|
Log.e(TAG, "Fetch Heart Data called on: $deviceId ")
|
|
629
|
+
val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
|
|
622
630
|
val isDisposed = hrDisposable?.isDisposed ?: true
|
|
623
631
|
try{
|
|
624
632
|
if (isDisposed) {
|
|
625
633
|
hrDisposable = api.startHrStreaming(deviceId)
|
|
634
|
+
.flatMapIterable { hrData ->
|
|
635
|
+
hrData.samples.map { sample ->
|
|
636
|
+
HrSampleWithTimestamp(
|
|
637
|
+
data = sample,
|
|
638
|
+
timestampMs = System.currentTimeMillis()
|
|
639
|
+
)
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
.buffer(bufferMs, TimeUnit.MILLISECONDS)
|
|
626
643
|
.observeOn(AndroidSchedulers.mainThread())
|
|
627
644
|
.subscribe(
|
|
628
|
-
{
|
|
629
|
-
|
|
630
|
-
|
|
645
|
+
{ samples ->
|
|
646
|
+
if (samples.isEmpty()) return@subscribe
|
|
647
|
+
|
|
648
|
+
Log.d(TAG, "Flushing HR buffer (${samples.size} samples)")
|
|
649
|
+
for (item in samples) {
|
|
650
|
+
val sample = item.data
|
|
631
651
|
Log.d(TAG, "HR bpm: ${sample.hr} " +
|
|
632
652
|
"rrs: ${sample.rrsMs} " +
|
|
633
653
|
"rrAvailable: ${sample.rrAvailable} " +
|
|
@@ -645,6 +665,7 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
645
665
|
event.putBoolean("rrAvailable", sample.rrAvailable)
|
|
646
666
|
event.putBoolean("contactStatus", sample.contactStatus)
|
|
647
667
|
event.putBoolean("contactStatusSupported", sample.contactStatusSupported)
|
|
668
|
+
event.putDouble("timestamp", item.timestampMs.toDouble())
|
|
648
669
|
|
|
649
670
|
sendEvent("PolarHrData", event)
|
|
650
671
|
}
|
|
@@ -710,8 +731,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
710
731
|
}
|
|
711
732
|
}
|
|
712
733
|
|
|
713
|
-
override fun fetchAccData(deviceId: String) {
|
|
734
|
+
override fun fetchAccData(deviceId: String, ms: Double?) {
|
|
714
735
|
Log.e(TAG, "Fetch Accelerometer Data called on: $deviceId ")
|
|
736
|
+
val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
|
|
715
737
|
val isDisposed = accDisposable?.isDisposed ?: true
|
|
716
738
|
try{
|
|
717
739
|
if (isDisposed) {
|
|
@@ -719,10 +741,15 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
719
741
|
.flatMap { settings: PolarSensorSetting ->
|
|
720
742
|
api.startAccStreaming(deviceId, settings)
|
|
721
743
|
}
|
|
744
|
+
.flatMapIterable { it.samples }
|
|
745
|
+
.buffer(bufferMs, TimeUnit.MILLISECONDS)
|
|
722
746
|
.observeOn(AndroidSchedulers.mainThread())
|
|
723
747
|
.subscribe(
|
|
724
|
-
{
|
|
725
|
-
|
|
748
|
+
{ samples ->
|
|
749
|
+
if (samples.isEmpty()) return@subscribe
|
|
750
|
+
Log.d(TAG, "Flushing ACC buffer (${samples.size} samples)")
|
|
751
|
+
|
|
752
|
+
for (data in samples) {
|
|
726
753
|
Log.d(TAG, "ACC x: ${data.x} y: ${data.y} z: ${data.z} timeStamp: ${data.timeStamp}")
|
|
727
754
|
|
|
728
755
|
val event: WritableMap = Arguments.createMap()
|
|
@@ -761,8 +788,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
761
788
|
}
|
|
762
789
|
}
|
|
763
790
|
|
|
764
|
-
override fun fetchGyrData(deviceId: String) {
|
|
791
|
+
override fun fetchGyrData(deviceId: String, ms: Double?) {
|
|
765
792
|
Log.e(TAG, "Fetch Gyroscope Data called on: $deviceId ")
|
|
793
|
+
val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
|
|
766
794
|
val isDisposed = gyrDisposable?.isDisposed ?: true
|
|
767
795
|
try {
|
|
768
796
|
if (isDisposed) {
|
|
@@ -770,10 +798,16 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
770
798
|
.flatMap { settings: PolarSensorSetting ->
|
|
771
799
|
api.startGyroStreaming(deviceId, settings)
|
|
772
800
|
}
|
|
801
|
+
.flatMapIterable { it.samples }
|
|
802
|
+
.buffer(bufferMs, TimeUnit.MILLISECONDS)
|
|
773
803
|
.observeOn(AndroidSchedulers.mainThread())
|
|
774
804
|
.subscribe(
|
|
775
|
-
{
|
|
776
|
-
|
|
805
|
+
{ samples ->
|
|
806
|
+
if (samples.isEmpty()) return@subscribe
|
|
807
|
+
|
|
808
|
+
Log.d(TAG, "Flushing GYR buffer (${samples.size} samples)")
|
|
809
|
+
|
|
810
|
+
for (data in samples) {
|
|
777
811
|
Log.d(TAG, "GYR x: ${data.x} y: ${data.y} z: ${data.z} timeStamp: ${data.timeStamp}")
|
|
778
812
|
|
|
779
813
|
val event: WritableMap = Arguments.createMap()
|
|
@@ -813,8 +847,9 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
813
847
|
}
|
|
814
848
|
}
|
|
815
849
|
|
|
816
|
-
override fun fetchPpgData(deviceId: String) {
|
|
850
|
+
override fun fetchPpgData(deviceId: String, ms: Double?) {
|
|
817
851
|
Log.e(TAG, "Fetch Photoplethysmograph Data called on: $deviceId ")
|
|
852
|
+
val bufferMs = ms?.toLong()?.takeIf { it >= 0 } ?: SENSOR_BUFFER_MS
|
|
818
853
|
val isDisposed = ppgDisposable?.isDisposed ?: true
|
|
819
854
|
try {
|
|
820
855
|
if (isDisposed) {
|
|
@@ -822,25 +857,31 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
822
857
|
.flatMap { settings: PolarSensorSetting ->
|
|
823
858
|
api.startPpgStreaming(deviceId, settings)
|
|
824
859
|
}
|
|
860
|
+
.filter { it.type == PolarPpgData.PpgDataType.PPG3_AMBIENT1 }
|
|
861
|
+
.flatMapIterable { it.samples }
|
|
862
|
+
.buffer(bufferMs, TimeUnit.MILLISECONDS)
|
|
863
|
+
.observeOn(AndroidSchedulers.mainThread())
|
|
825
864
|
.subscribe(
|
|
826
|
-
{
|
|
827
|
-
if (
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
865
|
+
{ samples ->
|
|
866
|
+
if (samples.isEmpty()) return@subscribe
|
|
867
|
+
|
|
868
|
+
Log.d(TAG, "Flushing PPG buffer (${samples.size} samples)")
|
|
869
|
+
|
|
870
|
+
for (data in samples) {
|
|
871
|
+
Log.d(TAG, "PPG ppg0: ${data.channelSamples[0]} ppg1: ${data.channelSamples[1]} ppg2: ${data.channelSamples[2]} ambient: ${data.channelSamples[3]} timeStamp: ${data.timeStamp}")
|
|
872
|
+
|
|
873
|
+
val event: WritableMap = Arguments.createMap()
|
|
874
|
+
// Float not supported
|
|
875
|
+
// See: https://github.com/facebook/react-native/issues/9685
|
|
876
|
+
// See: https://javadoc.io/doc/com.facebook.react/react-native/0.20.1/com/facebook/react/bridge/WritableMap.html
|
|
877
|
+
event.putString("ppg0", "${data.channelSamples[0]}")
|
|
878
|
+
event.putString("ppg1", "${data.channelSamples[1]}")
|
|
879
|
+
event.putString("ppg2", "${data.channelSamples[2]}")
|
|
880
|
+
event.putString("ambient", "${data.channelSamples[3]}")
|
|
881
|
+
// Long not supported, use double as workaround
|
|
882
|
+
event.putDouble("ppgTimestamp", data.timeStamp.toDouble())
|
|
883
|
+
|
|
884
|
+
sendEvent("PolarPpgData", event)
|
|
844
885
|
}
|
|
845
886
|
},
|
|
846
887
|
{ error: Throwable ->
|
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
|
package/ios/PolarBridge.swift
CHANGED
|
@@ -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 (
|
|
50
|
-
private let
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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 {
|
|
137
|
+
methodMap_["fetchHrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
|
|
138
138
|
|
|
139
139
|
|
|
140
|
-
methodMap_["fetchAccData"] = MethodMetadata {
|
|
140
|
+
methodMap_["fetchAccData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchAccData};
|
|
141
141
|
|
|
142
142
|
|
|
143
|
-
methodMap_["fetchGyrData"] = MethodMetadata {
|
|
143
|
+
methodMap_["fetchGyrData"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_fetchGyrData};
|
|
144
144
|
|
|
145
145
|
|
|
146
|
-
methodMap_["fetchPpgData"] = MethodMetadata {
|
|
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
|
-
|
|
46
|
-
- (void)
|
|
47
|
-
|
|
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 {
|
|
182
|
-
methodMap_["fetchAccData"] = MethodMetadata {
|
|
183
|
-
methodMap_["fetchGyrData"] = MethodMetadata {
|
|
184
|
-
methodMap_["fetchPpgData"] = MethodMetadata {
|
|
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) ==
|
|
104
|
-
"Expected fetchHrData(...) to have
|
|
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) ==
|
|
112
|
-
"Expected fetchAccData(...) to have
|
|
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) ==
|
|
120
|
-
"Expected fetchGyrData(...) to have
|
|
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) ==
|
|
128
|
-
"Expected fetchPpgData(...) to have
|
|
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>;
|
package/lib/module/index.js
CHANGED
|
@@ -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);
|
package/lib/module/index.js.map
CHANGED
|
@@ -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":";;AAAA,OAAOA,WAAW,MAAM,qBAAqB;AAE7C,OAAO,SAASC,QAAQA,CAACC,CAAS,EAAEC,CAAS,EAAU;EACrD,OAAOH,WAAW,CAACC,QAAQ,CAACC,CAAC,EAAEC,CAAC,CAAC;AACnC;AAEA,OAAO,SAASC,eAAeA,CAACC,QAAgB,EAAE;EAChD,OAAOL,WAAW,CAACI,eAAe,CAACC,QAAQ,CAAC;AAC9C;AAEA,OAAO,SAASC,oBAAoBA,CAACD,QAAgB,EAAE;EACrD,OAAOL,WAAW,CAACM,oBAAoB,CAACD,QAAQ,CAAC;AACnD;AAEA,OAAO,SAASE,WAAWA,CAAA,EAAG;EAC5B,OAAOP,WAAW,CAACO,WAAW,CAAC,CAAC;AAClC;AAEA,OAAO,SAASC,WAAWA,CAACH,QAAgB,EAAE;
|
|
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;
|
|
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,
|
|
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
package/src/NativePolarBridge.ts
CHANGED
|
@@ -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) {
|