react-native-polar-bridge 0.1.5 → 0.2.1
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 +34 -1
- package/android/generated/java/com/polarbridge/NativePolarBridgeSpec.java +4 -0
- package/android/generated/jni/RNPolarBridgeSpec-generated.cpp +6 -0
- package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI-generated.cpp +8 -0
- package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h +9 -0
- package/android/src/main/java/com/polarbridge/PolarBridgeModule.kt +18 -0
- package/ios/PolarBridge-Bridging-Header.h +3 -0
- package/ios/PolarBridge.m +31 -0
- package/ios/PolarBridge.swift +952 -0
- package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec-generated.mm +7 -0
- package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec.h +1 -0
- package/ios/generated/RNPolarBridgeSpecJSI-generated.cpp +8 -0
- package/ios/generated/RNPolarBridgeSpecJSI.h +9 -0
- package/lib/module/NativePolarBridge.ts +1 -0
- package/lib/module/index.js +5 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativePolarBridge.d.ts +1 -0
- package/lib/typescript/src/NativePolarBridge.d.ts.map +1 -1
- package/lib/typescript/src/PolarDataModel.d.ts +1 -0
- package/lib/typescript/src/PolarDataModel.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/NativePolarBridge.ts +1 -0
- package/src/PolarDataModel.tsx +1 -0
- package/src/index.tsx +5 -0
- package/ios/PolarBridge.h +0 -6
- package/ios/PolarBridge.mm +0 -18
package/PolarBridge.podspec
CHANGED
|
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
|
|
|
13
13
|
s.platforms = { :ios => min_ios_version_supported }
|
|
14
14
|
s.source = { :git => "https://github.com/omatt/react-native-polar-bridge.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
|
-
s.source_files = "ios/**/*.{h,m,mm,cpp}"
|
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm,cpp,swift}"
|
|
17
17
|
s.private_header_files = "ios/**/*.h"
|
|
18
18
|
|
|
19
19
|
s.dependency 'PolarBleSdk', '~> 5.9.0'
|
package/README.md
CHANGED
|
@@ -12,7 +12,31 @@ npm install react-native-polar-bridge
|
|
|
12
12
|
|
|
13
13
|
This React Native library uses the [polar-ble-sdk](https://github.com/polarofficial/polar-ble-sdk).
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Supported Functions
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
| Polar SDK Feature | Android | iOS |
|
|
19
|
+
|----------------------------|---------|-----|
|
|
20
|
+
| connectToDevice |✅|✅|
|
|
21
|
+
| disconnectFromDevice |✅|✅|
|
|
22
|
+
| scanDevices() |✅|✅|
|
|
23
|
+
| fetchHrData |✅|✅|
|
|
24
|
+
| fetchAccData |✅|✅|
|
|
25
|
+
| fetchGyrData |✅|✅|
|
|
26
|
+
| fetchPpgData |✅|✅|
|
|
27
|
+
| enableSdkMode |✅|❌|
|
|
28
|
+
| disableSdkMode |✅|❌|
|
|
29
|
+
| getDeviceTime |✅|✅|
|
|
30
|
+
| setDeviceTime |✅|✅|
|
|
31
|
+
| getDiskSpace |✅|✅|
|
|
32
|
+
| startOfflineRecording |✅|❌|
|
|
33
|
+
| stopOfflineRecording |✅|❌|
|
|
34
|
+
| setPolarRecordingTrigger |✅|❌|
|
|
35
|
+
| fetchOfflineRecordings |⚠️|❌|
|
|
36
|
+
| downloadOfflineRecordings |⚠️|❌|
|
|
37
|
+
| deleteAllOfflineRecordings |✅|❌|
|
|
38
|
+
|
|
39
|
+
✅ - Implemented ❌ - Not yet implemented ⚠️ - Not fully implemented
|
|
16
40
|
|
|
17
41
|
### Connecting to Device
|
|
18
42
|
|
|
@@ -38,6 +62,15 @@ export default function App(){
|
|
|
38
62
|
disconnectFromDevice(deviceId);
|
|
39
63
|
```
|
|
40
64
|
|
|
65
|
+
### Initialize NativeModules
|
|
66
|
+
|
|
67
|
+
Import `NativeModules` from react-native to expose native code to be able to listen to emitted events.
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
const {PolarBridge} = NativeModules;
|
|
71
|
+
const polarEmitter = new NativeEventEmitter(PolarBridge);
|
|
72
|
+
```
|
|
73
|
+
|
|
41
74
|
### Scan Devices
|
|
42
75
|
|
|
43
76
|
Use `scanDevices()` to scan for nearby Polar devices
|
|
@@ -81,6 +81,10 @@ public abstract class NativePolarBridgeSpec extends ReactContextBaseJavaModule i
|
|
|
81
81
|
@DoNotStrip
|
|
82
82
|
public abstract void getDiskSpace(String deviceId, Promise promise);
|
|
83
83
|
|
|
84
|
+
@ReactMethod
|
|
85
|
+
@DoNotStrip
|
|
86
|
+
public abstract void doFactoryReset(String deviceId);
|
|
87
|
+
|
|
84
88
|
@ReactMethod
|
|
85
89
|
@DoNotStrip
|
|
86
90
|
public abstract void startOfflineRecording(String deviceId, ReadableArray features, Promise promise);
|
|
@@ -72,6 +72,11 @@ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_getDiskSpace
|
|
|
72
72
|
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, PromiseKind, "getDiskSpace", "(Ljava/lang/String;Lcom/facebook/react/bridge/Promise;)V", args, count, cachedMethodId);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_doFactoryReset(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
76
|
+
static jmethodID cachedMethodId = nullptr;
|
|
77
|
+
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "doFactoryReset", "(Ljava/lang/String;)V", args, count, cachedMethodId);
|
|
78
|
+
}
|
|
79
|
+
|
|
75
80
|
static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_startOfflineRecording(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
76
81
|
static jmethodID cachedMethodId = nullptr;
|
|
77
82
|
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, PromiseKind, "startOfflineRecording", "(Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;Lcom/facebook/react/bridge/Promise;)V", args, count, cachedMethodId);
|
|
@@ -141,6 +146,7 @@ NativePolarBridgeSpecJSI::NativePolarBridgeSpecJSI(const JavaTurboModule::InitPa
|
|
|
141
146
|
methodMap_["getDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_getDeviceTime};
|
|
142
147
|
methodMap_["setDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_setDeviceTime};
|
|
143
148
|
methodMap_["getDiskSpace"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_getDiskSpace};
|
|
149
|
+
methodMap_["doFactoryReset"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_doFactoryReset};
|
|
144
150
|
methodMap_["startOfflineRecording"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_startOfflineRecording};
|
|
145
151
|
methodMap_["stopOfflineRecording"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_stopOfflineRecording};
|
|
146
152
|
methodMap_["setPolarRecordingTrigger"] = MethodMetadata {3, __hostFunction_NativePolarBridgeSpecJSI_setPolarRecordingTrigger};
|
|
@@ -92,6 +92,13 @@ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_getDiskSpace(jsi::R
|
|
|
92
92
|
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
|
|
93
93
|
);
|
|
94
94
|
}
|
|
95
|
+
static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_doFactoryReset(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
96
|
+
static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->doFactoryReset(
|
|
97
|
+
rt,
|
|
98
|
+
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
|
|
99
|
+
);
|
|
100
|
+
return jsi::Value::undefined();
|
|
101
|
+
}
|
|
95
102
|
static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_startOfflineRecording(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
96
103
|
return static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->startOfflineRecording(
|
|
97
104
|
rt,
|
|
@@ -180,6 +187,7 @@ NativePolarBridgeCxxSpecJSI::NativePolarBridgeCxxSpecJSI(std::shared_ptr<CallInv
|
|
|
180
187
|
methodMap_["getDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_getDeviceTime};
|
|
181
188
|
methodMap_["setDeviceTime"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_setDeviceTime};
|
|
182
189
|
methodMap_["getDiskSpace"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_getDiskSpace};
|
|
190
|
+
methodMap_["doFactoryReset"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_doFactoryReset};
|
|
183
191
|
methodMap_["startOfflineRecording"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_startOfflineRecording};
|
|
184
192
|
methodMap_["stopOfflineRecording"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_stopOfflineRecording};
|
|
185
193
|
methodMap_["setPolarRecordingTrigger"] = MethodMetadata {3, __hostFunction_NativePolarBridgeCxxSpecJSI_setPolarRecordingTrigger};
|
package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h
CHANGED
|
@@ -32,6 +32,7 @@ public:
|
|
|
32
32
|
virtual jsi::Value getDeviceTime(jsi::Runtime &rt, jsi::String deviceId) = 0;
|
|
33
33
|
virtual void setDeviceTime(jsi::Runtime &rt, jsi::String deviceId) = 0;
|
|
34
34
|
virtual jsi::Value getDiskSpace(jsi::Runtime &rt, jsi::String deviceId) = 0;
|
|
35
|
+
virtual void doFactoryReset(jsi::Runtime &rt, jsi::String deviceId) = 0;
|
|
35
36
|
virtual jsi::Value startOfflineRecording(jsi::Runtime &rt, jsi::String deviceId, jsi::Array features) = 0;
|
|
36
37
|
virtual jsi::Value stopOfflineRecording(jsi::Runtime &rt, jsi::String deviceId, jsi::Array features) = 0;
|
|
37
38
|
virtual void setPolarRecordingTrigger(jsi::Runtime &rt, jsi::String deviceId, double recordingMode, jsi::Array features) = 0;
|
|
@@ -169,6 +170,14 @@ private:
|
|
|
169
170
|
return bridging::callFromJs<jsi::Value>(
|
|
170
171
|
rt, &T::getDiskSpace, jsInvoker_, instance_, std::move(deviceId));
|
|
171
172
|
}
|
|
173
|
+
void doFactoryReset(jsi::Runtime &rt, jsi::String deviceId) override {
|
|
174
|
+
static_assert(
|
|
175
|
+
bridging::getParameterCount(&T::doFactoryReset) == 2,
|
|
176
|
+
"Expected doFactoryReset(...) to have 2 parameters");
|
|
177
|
+
|
|
178
|
+
return bridging::callFromJs<void>(
|
|
179
|
+
rt, &T::doFactoryReset, jsInvoker_, instance_, std::move(deviceId));
|
|
180
|
+
}
|
|
172
181
|
jsi::Value startOfflineRecording(jsi::Runtime &rt, jsi::String deviceId, jsi::Array features) override {
|
|
173
182
|
static_assert(
|
|
174
183
|
bridging::getParameterCount(&T::startOfflineRecording) == 3,
|
|
@@ -564,6 +564,24 @@ class PolarBridgeModule(reactContext: ReactApplicationContext) :
|
|
|
564
564
|
)
|
|
565
565
|
}
|
|
566
566
|
|
|
567
|
+
override fun doFactoryReset(deviceId: String) {
|
|
568
|
+
val calendar = Calendar.getInstance()
|
|
569
|
+
calendar.time = Date()
|
|
570
|
+
Log.e(TAG, "Set device: $deviceId time to ${calendar.time}")
|
|
571
|
+
try {
|
|
572
|
+
api.doFactoryReset(deviceId, preservePairingInformation = true)
|
|
573
|
+
.observeOn(AndroidSchedulers.mainThread())
|
|
574
|
+
.subscribe(
|
|
575
|
+
{
|
|
576
|
+
Log.d(TAG, "send do factory reset to device")
|
|
577
|
+
},
|
|
578
|
+
{ error: Throwable -> Log.e(TAG, "doFactoryReset() failed: $error") }
|
|
579
|
+
)
|
|
580
|
+
} catch(polarInvalidArgument: PolarInvalidArgument){
|
|
581
|
+
Log.e(TAG, "Failed to do factory reset. Reason $polarInvalidArgument ")
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
567
585
|
override fun scanDevices() {
|
|
568
586
|
Log.e(TAG, "Scan Devices")
|
|
569
587
|
val isDisposed = scanDisposable?.isDisposed ?: true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(PolarBridge, RCTEventEmitter)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(multiply:(nonnull NSNumber *)a withB:(nonnull NSNumber *)b)
|
|
7
|
+
|
|
8
|
+
RCT_EXTERN_METHOD(connectToDevice:(NSString *)deviceId
|
|
9
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
10
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
11
|
+
|
|
12
|
+
RCT_EXTERN_METHOD(disconnectFromDevice:(NSString *)deviceId)
|
|
13
|
+
RCT_EXTERN_METHOD(scanDevices)
|
|
14
|
+
RCT_EXTERN_METHOD(fetchHrData:(NSString *)deviceId)
|
|
15
|
+
RCT_EXTERN_METHOD(disposeHrStream)
|
|
16
|
+
RCT_EXTERN_METHOD(fetchAccData:(NSString *)deviceId)
|
|
17
|
+
RCT_EXTERN_METHOD(disposeAccStream)
|
|
18
|
+
RCT_EXTERN_METHOD(fetchGyrData:(NSString *)deviceId)
|
|
19
|
+
RCT_EXTERN_METHOD(disposeGyrStream)
|
|
20
|
+
RCT_EXTERN_METHOD(fetchPpgData:(NSString *)deviceId)
|
|
21
|
+
RCT_EXTERN_METHOD(disposePpgStream)
|
|
22
|
+
RCT_EXTERN_METHOD(setDeviceTime:(NSString *)deviceId)
|
|
23
|
+
RCT_EXTERN_METHOD(getDeviceTime:(NSString *)deviceId
|
|
24
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
25
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
26
|
+
RCT_EXTERN_METHOD(getDiskSpace:(NSString *)deviceId
|
|
27
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
28
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
29
|
+
RCT_EXTERN_METHOD(doFactoryReset:(NSString *)deviceId)
|
|
30
|
+
|
|
31
|
+
@end
|