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.
Files changed (29) hide show
  1. package/PolarBridge.podspec +1 -1
  2. package/README.md +34 -1
  3. package/android/generated/java/com/polarbridge/NativePolarBridgeSpec.java +4 -0
  4. package/android/generated/jni/RNPolarBridgeSpec-generated.cpp +6 -0
  5. package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI-generated.cpp +8 -0
  6. package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h +9 -0
  7. package/android/src/main/java/com/polarbridge/PolarBridgeModule.kt +18 -0
  8. package/ios/PolarBridge-Bridging-Header.h +3 -0
  9. package/ios/PolarBridge.m +31 -0
  10. package/ios/PolarBridge.swift +952 -0
  11. package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec-generated.mm +7 -0
  12. package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec.h +1 -0
  13. package/ios/generated/RNPolarBridgeSpecJSI-generated.cpp +8 -0
  14. package/ios/generated/RNPolarBridgeSpecJSI.h +9 -0
  15. package/lib/module/NativePolarBridge.ts +1 -0
  16. package/lib/module/index.js +5 -1
  17. package/lib/module/index.js.map +1 -1
  18. package/lib/typescript/src/NativePolarBridge.d.ts +1 -0
  19. package/lib/typescript/src/NativePolarBridge.d.ts.map +1 -1
  20. package/lib/typescript/src/PolarDataModel.d.ts +1 -0
  21. package/lib/typescript/src/PolarDataModel.d.ts.map +1 -1
  22. package/lib/typescript/src/index.d.ts +2 -0
  23. package/lib/typescript/src/index.d.ts.map +1 -1
  24. package/package.json +2 -1
  25. package/src/NativePolarBridge.ts +1 -0
  26. package/src/PolarDataModel.tsx +1 -0
  27. package/src/index.tsx +5 -0
  28. package/ios/PolarBridge.h +0 -6
  29. package/ios/PolarBridge.mm +0 -18
@@ -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
- > ⚠️ The library only has support for Android devices.
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};
@@ -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,3 @@
1
+ // Header file to link PolarBridge.swift with Objective-C
2
+ #import <React/RCTBridgeModule.h>
3
+ #import <React/RCTEventEmitter.h>
@@ -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