react-native-polar-bridge 0.1.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 (40) hide show
  1. package/LICENSE +20 -0
  2. package/PolarBridge.podspec +26 -0
  3. package/README.md +115 -0
  4. package/android/build.gradle +103 -0
  5. package/android/generated/java/com/polarbridge/NativePolarBridgeSpec.java +57 -0
  6. package/android/generated/jni/CMakeLists.txt +36 -0
  7. package/android/generated/jni/RNPolarBridgeSpec-generated.cpp +62 -0
  8. package/android/generated/jni/RNPolarBridgeSpec.h +31 -0
  9. package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI-generated.cpp +66 -0
  10. package/android/generated/jni/react/renderer/components/RNPolarBridgeSpec/RNPolarBridgeSpecJSI.h +116 -0
  11. package/android/gradle.properties +5 -0
  12. package/android/src/main/AndroidManifest.xml +3 -0
  13. package/android/src/main/AndroidManifestNew.xml +2 -0
  14. package/android/src/main/java/com/polarbridge/PolarBridgeModule.kt +182 -0
  15. package/android/src/main/java/com/polarbridge/PolarBridgePackage.kt +33 -0
  16. package/ios/PolarBridge.h +6 -0
  17. package/ios/PolarBridge.mm +18 -0
  18. package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec-generated.mm +74 -0
  19. package/ios/generated/RNPolarBridgeSpec/RNPolarBridgeSpec.h +68 -0
  20. package/ios/generated/RNPolarBridgeSpecJSI-generated.cpp +66 -0
  21. package/ios/generated/RNPolarBridgeSpecJSI.h +116 -0
  22. package/lib/module/NativePolarBridge.ts +13 -0
  23. package/lib/module/index.js +30 -0
  24. package/lib/module/index.js.map +1 -0
  25. package/lib/module/package.json +1 -0
  26. package/lib/typescript/babel.config.d.ts +2 -0
  27. package/lib/typescript/babel.config.d.ts.map +1 -0
  28. package/lib/typescript/eslint.config.d.mts +3 -0
  29. package/lib/typescript/eslint.config.d.mts.map +1 -0
  30. package/lib/typescript/package.json +1 -0
  31. package/lib/typescript/react-native.config.d.ts +3 -0
  32. package/lib/typescript/react-native.config.d.ts.map +1 -0
  33. package/lib/typescript/src/NativePolarBridge.d.ts +12 -0
  34. package/lib/typescript/src/NativePolarBridge.d.ts.map +1 -0
  35. package/lib/typescript/src/index.d.ts +15 -0
  36. package/lib/typescript/src/index.d.ts.map +1 -0
  37. package/package.json +169 -0
  38. package/react-native.config.js +12 -0
  39. package/src/NativePolarBridge.ts +13 -0
  40. package/src/index.tsx +34 -0
@@ -0,0 +1,182 @@
1
+ package com.polarbridge
2
+
3
+ import android.util.Log
4
+ import com.facebook.react.bridge.*
5
+ import com.facebook.react.module.annotations.ReactModule
6
+ import com.polar.sdk.api.PolarBleApi
7
+ import com.polar.sdk.api.PolarBleApiCallback
8
+ import com.polar.sdk.api.PolarBleApiDefaultImpl
9
+ import com.polar.sdk.api.PolarH10OfflineExerciseApi
10
+ import com.polar.sdk.api.errors.PolarInvalidArgument
11
+ import com.polar.sdk.api.model.*
12
+ import io.reactivex.rxjava3.disposables.Disposable
13
+ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
14
+ import com.facebook.react.modules.core.DeviceEventManagerModule
15
+
16
+ @ReactModule(name = PolarBridgeModule.NAME)
17
+ class PolarBridgeModule(reactContext: ReactApplicationContext) :
18
+ NativePolarBridgeSpec(reactContext) {
19
+ private val reactContext: ReactApplicationContext = reactContext
20
+
21
+ override fun getName(): String {
22
+ return NAME
23
+ }
24
+
25
+ // Example method
26
+ // See https://reactnative.dev/docs/native-modules-android
27
+ override fun multiply(a: Double, b: Double): Double {
28
+ return a * b
29
+ }
30
+
31
+ // ATTENTION! Replace with the device ID from your device.
32
+ private var deviceId = "B4291522"
33
+
34
+ private var hrDisposable: Disposable? = null
35
+ private var scanDisposable: Disposable? = null
36
+
37
+ private val api: PolarBleApi by lazy {
38
+ // Notice all features are enabled
39
+ PolarBleApiDefaultImpl.defaultImplementation(
40
+ reactApplicationContext.applicationContext,
41
+ setOf(
42
+ PolarBleApi.PolarBleSdkFeature.FEATURE_HR,
43
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_SDK_MODE,
44
+ PolarBleApi.PolarBleSdkFeature.FEATURE_BATTERY_INFO,
45
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_H10_EXERCISE_RECORDING,
46
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_OFFLINE_RECORDING,
47
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING,
48
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_DEVICE_TIME_SETUP,
49
+ PolarBleApi.PolarBleSdkFeature.FEATURE_DEVICE_INFO,
50
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_LED_ANIMATION
51
+ )
52
+ )
53
+ }
54
+
55
+ override fun connectToDevice(deviceId: String) {
56
+ Log.e(TAG, "Connect device: $deviceId ")
57
+ try {
58
+ api.connectToDevice(deviceId)
59
+ } catch(polarInvalidArgument: PolarInvalidArgument){
60
+ Log.e(TAG, "Failed to connect to device. Reason $polarInvalidArgument ")
61
+ }
62
+ }
63
+
64
+ override fun disconnectFromDevice(deviceId: String) {
65
+ Log.e(TAG, "Disconnect device: $deviceId ")
66
+ try {
67
+ api.disconnectFromDevice(deviceId)
68
+ } catch(polarInvalidArgument: PolarInvalidArgument){
69
+ Log.e(TAG, "Failed to disconnect from device. Reason $polarInvalidArgument ")
70
+ }
71
+ }
72
+
73
+ override fun scanDevices() {
74
+ Log.e(TAG, "Scan Devices")
75
+ val isDisposed = scanDisposable?.isDisposed ?: true
76
+ if (isDisposed) {
77
+ scanDisposable = api.searchForDevice()
78
+ .observeOn(AndroidSchedulers.mainThread())
79
+ .subscribe(
80
+ { polarDeviceInfo: PolarDeviceInfo ->
81
+ Log.d(TAG, "polar device found id: " + polarDeviceInfo.deviceId + " address: " + polarDeviceInfo.address + " rssi: " + polarDeviceInfo.rssi + " name: " + polarDeviceInfo.name + " isConnectable: " + polarDeviceInfo.isConnectable)
82
+
83
+ val device = Arguments.createMap().apply {
84
+ putString("deviceId", polarDeviceInfo.deviceId)
85
+ putString("address", polarDeviceInfo.address)
86
+ putInt("rssi", polarDeviceInfo.rssi)
87
+ putString("name", polarDeviceInfo.name)
88
+ putBoolean("isConnectable", polarDeviceInfo.isConnectable)
89
+ }
90
+ sendEvent("onDeviceFound", device)
91
+ },
92
+ { error: Throwable ->
93
+ Log.e(TAG, "Device scan failed. Reason $error")
94
+ sendEvent("onScanError", Arguments.createMap().apply {
95
+ putString("message", error.message)
96
+ })
97
+ },
98
+ {
99
+ Log.d(TAG, "complete")
100
+ }
101
+ )
102
+ } else {
103
+ scanDisposable?.dispose()
104
+ Log.d(TAG, "Device scan stopped")
105
+ }
106
+ }
107
+
108
+ val isDisposed = hrDisposable?.isDisposed ?: true
109
+ override fun fetchHrData(deviceId: String) {
110
+ Log.e(TAG, "Fetch Heart Data called on: $deviceId ")
111
+ try{
112
+ if (isDisposed) {
113
+ hrDisposable = api.startHrStreaming(deviceId)
114
+ .observeOn(AndroidSchedulers.mainThread())
115
+ .subscribe(
116
+ { hrData: PolarHrData ->
117
+ Log.i(TAG, "PolarHrData ${hrData.samples.size}")
118
+ for (sample in hrData.samples) {
119
+ Log.d(TAG, "HR bpm: ${sample.hr} " +
120
+ "rrs: ${sample.rrsMs} " +
121
+ "rrAvailable: ${sample.rrAvailable} " +
122
+ "contactStatus: ${sample.contactStatus} " +
123
+ "contactStatusSupported: ${sample.contactStatusSupported}")
124
+
125
+ val event: WritableMap = Arguments.createMap()
126
+ event.putInt("hr", sample.hr)
127
+
128
+ val rrsArray: WritableArray = Arguments.createArray()
129
+ sample.rrsMs.forEach { rrsValue ->
130
+ rrsArray.pushInt(rrsValue)
131
+ }
132
+ event.putArray("rrsMs", rrsArray)
133
+ event.putBoolean("rrAvailable", sample.rrAvailable)
134
+ event.putBoolean("contactStatus", sample.contactStatus)
135
+ event.putBoolean("contactStatusSupported", sample.contactStatusSupported)
136
+
137
+ sendEvent("PolarHrData", event)
138
+ }
139
+ },
140
+ { error: Throwable ->
141
+ Log.e(TAG, "HR stream failed. Reason $error")
142
+
143
+ val errorEvent = Arguments.createMap()
144
+ errorEvent.putString("error", error.toString())
145
+ sendEvent("PolarHrError", errorEvent)
146
+ },
147
+ {
148
+ Log.d(TAG, "HR stream complete")
149
+
150
+ val completeEvent = Arguments.createMap()
151
+ completeEvent.putString("message", "HR stream complete")
152
+ sendEvent("PolarHrComplete", completeEvent)
153
+ }
154
+ )
155
+ } else {
156
+ // NOTE dispose will stop streaming if it is "running"
157
+ hrDisposable?.dispose()
158
+ Log.d(TAG, "HR stream stopped")
159
+ }
160
+ } catch(polarInvalidArgument: PolarInvalidArgument){
161
+ Log.e(TAG, "Failed to fetch HR Data. Reason $polarInvalidArgument ")
162
+ }
163
+ }
164
+
165
+ override fun disposeHrStream(){
166
+ hrDisposable?.dispose()
167
+ }
168
+
169
+ private fun sendEvent(eventName: String, params: WritableMap?) {
170
+ reactContext
171
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
172
+ .emit(eventName, params)
173
+ }
174
+
175
+
176
+ companion object {
177
+ const val NAME = "PolarBridge"
178
+ private const val TAG = "PolarBridgeModule"
179
+ private const val API_LOGGER_TAG = "API LOGGER"
180
+ private const val PERMISSION_REQUEST_CODE = 1
181
+ }
182
+ }
@@ -0,0 +1,33 @@
1
+ package com.polarbridge
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+ import java.util.HashMap
9
+
10
+ class PolarBridgePackage : BaseReactPackage() {
11
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12
+ return if (name == PolarBridgeModule.NAME) {
13
+ PolarBridgeModule(reactContext)
14
+ } else {
15
+ null
16
+ }
17
+ }
18
+
19
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
20
+ return ReactModuleInfoProvider {
21
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
22
+ moduleInfos[PolarBridgeModule.NAME] = ReactModuleInfo(
23
+ PolarBridgeModule.NAME,
24
+ PolarBridgeModule.NAME,
25
+ false, // canOverrideExistingModule
26
+ false, // needsEagerInit
27
+ false, // isCxxModule
28
+ true // isTurboModule
29
+ )
30
+ moduleInfos
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,6 @@
1
+
2
+ #import <PolarBridge/RNPolarBridgeSpec.h>
3
+
4
+ @interface PolarBridge : NSObject <NativePolarBridgeSpec>
5
+
6
+ @end
@@ -0,0 +1,18 @@
1
+ #import "PolarBridge.h"
2
+
3
+ @implementation PolarBridge
4
+ RCT_EXPORT_MODULE()
5
+
6
+ - (NSNumber *)multiply:(double)a b:(double)b {
7
+ NSNumber *result = @(a * b);
8
+
9
+ return result;
10
+ }
11
+
12
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
13
+ (const facebook::react::ObjCTurboModule::InitParams &)params
14
+ {
15
+ return std::make_shared<facebook::react::NativePolarBridgeSpecJSI>(params);
16
+ }
17
+
18
+ @end
@@ -0,0 +1,74 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleObjCpp
8
+ *
9
+ * We create an umbrella header (and corresponding implementation) here since
10
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
11
+ * must have a single output. More files => more genrule()s => slower builds.
12
+ */
13
+
14
+ #import "RNPolarBridgeSpec.h"
15
+
16
+
17
+ @implementation NativePolarBridgeSpecBase
18
+
19
+
20
+ - (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper
21
+ {
22
+ _eventEmitterCallback = std::move(eventEmitterCallbackWrapper->_eventEmitterCallback);
23
+ }
24
+ @end
25
+
26
+
27
+ namespace facebook::react {
28
+
29
+ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_multiply(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
30
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, NumberKind, "multiply", @selector(multiply:b:), args, count);
31
+ }
32
+
33
+ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_connectToDevice(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
34
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "connectToDevice", @selector(connectToDevice:), args, count);
35
+ }
36
+
37
+ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_disconnectFromDevice(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
38
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "disconnectFromDevice", @selector(disconnectFromDevice:), args, count);
39
+ }
40
+
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);
43
+ }
44
+
45
+ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_scanDevices(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
46
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "scanDevices", @selector(scanDevices), args, count);
47
+ }
48
+
49
+ static facebook::jsi::Value __hostFunction_NativePolarBridgeSpecJSI_disposeHrStream(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
50
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "disposeHrStream", @selector(disposeHrStream), args, count);
51
+ }
52
+
53
+ NativePolarBridgeSpecJSI::NativePolarBridgeSpecJSI(const ObjCTurboModule::InitParams &params)
54
+ : ObjCTurboModule(params) {
55
+
56
+ methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativePolarBridgeSpecJSI_multiply};
57
+
58
+
59
+ methodMap_["connectToDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_connectToDevice};
60
+
61
+
62
+ methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_disconnectFromDevice};
63
+
64
+
65
+ methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeSpecJSI_fetchHrData};
66
+
67
+
68
+ methodMap_["scanDevices"] = MethodMetadata {0, __hostFunction_NativePolarBridgeSpecJSI_scanDevices};
69
+
70
+
71
+ methodMap_["disposeHrStream"] = MethodMetadata {0, __hostFunction_NativePolarBridgeSpecJSI_disposeHrStream};
72
+
73
+ }
74
+ } // namespace facebook::react
@@ -0,0 +1,68 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleObjCpp
8
+ *
9
+ * We create an umbrella header (and corresponding implementation) here since
10
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
11
+ * must have a single output. More files => more genrule()s => slower builds.
12
+ */
13
+
14
+ #ifndef __cplusplus
15
+ #error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
16
+ #endif
17
+
18
+ // Avoid multiple includes of RNPolarBridgeSpec symbols
19
+ #ifndef RNPolarBridgeSpec_H
20
+ #define RNPolarBridgeSpec_H
21
+
22
+ #import <Foundation/Foundation.h>
23
+ #import <RCTRequired/RCTRequired.h>
24
+ #import <RCTTypeSafety/RCTConvertHelpers.h>
25
+ #import <RCTTypeSafety/RCTTypedModuleConstants.h>
26
+ #import <React/RCTBridgeModule.h>
27
+ #import <React/RCTCxxConvert.h>
28
+ #import <React/RCTManagedPointer.h>
29
+ #import <ReactCommon/RCTTurboModule.h>
30
+ #import <optional>
31
+ #import <vector>
32
+
33
+
34
+ NS_ASSUME_NONNULL_BEGIN
35
+
36
+ @protocol NativePolarBridgeSpec <RCTBridgeModule, RCTTurboModule>
37
+
38
+ - (NSNumber *)multiply:(double)a
39
+ b:(double)b;
40
+ - (void)connectToDevice:(NSString *)deviceId;
41
+ - (void)disconnectFromDevice:(NSString *)deviceId;
42
+ - (void)fetchHrData:(NSString *)deviceId;
43
+ - (void)scanDevices;
44
+ - (void)disposeHrStream;
45
+
46
+ @end
47
+
48
+ @interface NativePolarBridgeSpecBase : NSObject {
49
+ @protected
50
+ facebook::react::EventEmitterCallback _eventEmitterCallback;
51
+ }
52
+ - (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;
53
+
54
+
55
+ @end
56
+
57
+ namespace facebook::react {
58
+ /**
59
+ * ObjC++ class for module 'NativePolarBridge'
60
+ */
61
+ class JSI_EXPORT NativePolarBridgeSpecJSI : public ObjCTurboModule {
62
+ public:
63
+ NativePolarBridgeSpecJSI(const ObjCTurboModule::InitParams &params);
64
+ };
65
+ } // namespace facebook::react
66
+
67
+ NS_ASSUME_NONNULL_END
68
+ #endif // RNPolarBridgeSpec_H
@@ -0,0 +1,66 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleCpp.js
8
+ */
9
+
10
+ #include "RNPolarBridgeSpecJSI.h"
11
+
12
+ namespace facebook::react {
13
+
14
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_multiply(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
15
+ return static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->multiply(
16
+ rt,
17
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber(),
18
+ count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asNumber()
19
+ );
20
+ }
21
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_connectToDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
22
+ static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->connectToDevice(
23
+ rt,
24
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
25
+ );
26
+ return jsi::Value::undefined();
27
+ }
28
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
29
+ static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->disconnectFromDevice(
30
+ rt,
31
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
32
+ );
33
+ return jsi::Value::undefined();
34
+ }
35
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
36
+ static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->fetchHrData(
37
+ rt,
38
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
39
+ );
40
+ return jsi::Value::undefined();
41
+ }
42
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_scanDevices(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
43
+ static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->scanDevices(
44
+ rt
45
+ );
46
+ return jsi::Value::undefined();
47
+ }
48
+ static jsi::Value __hostFunction_NativePolarBridgeCxxSpecJSI_disposeHrStream(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
49
+ static_cast<NativePolarBridgeCxxSpecJSI *>(&turboModule)->disposeHrStream(
50
+ rt
51
+ );
52
+ return jsi::Value::undefined();
53
+ }
54
+
55
+ NativePolarBridgeCxxSpecJSI::NativePolarBridgeCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
56
+ : TurboModule("PolarBridge", jsInvoker) {
57
+ methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativePolarBridgeCxxSpecJSI_multiply};
58
+ methodMap_["connectToDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_connectToDevice};
59
+ methodMap_["disconnectFromDevice"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_disconnectFromDevice};
60
+ methodMap_["fetchHrData"] = MethodMetadata {1, __hostFunction_NativePolarBridgeCxxSpecJSI_fetchHrData};
61
+ methodMap_["scanDevices"] = MethodMetadata {0, __hostFunction_NativePolarBridgeCxxSpecJSI_scanDevices};
62
+ methodMap_["disposeHrStream"] = MethodMetadata {0, __hostFunction_NativePolarBridgeCxxSpecJSI_disposeHrStream};
63
+ }
64
+
65
+
66
+ } // namespace facebook::react
@@ -0,0 +1,116 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleH.js
8
+ */
9
+
10
+ #pragma once
11
+
12
+ #include <ReactCommon/TurboModule.h>
13
+ #include <react/bridging/Bridging.h>
14
+
15
+ namespace facebook::react {
16
+
17
+
18
+ class JSI_EXPORT NativePolarBridgeCxxSpecJSI : public TurboModule {
19
+ protected:
20
+ NativePolarBridgeCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
21
+
22
+ public:
23
+ virtual double multiply(jsi::Runtime &rt, double a, double b) = 0;
24
+ virtual void connectToDevice(jsi::Runtime &rt, jsi::String deviceId) = 0;
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 scanDevices(jsi::Runtime &rt) = 0;
28
+ virtual void disposeHrStream(jsi::Runtime &rt) = 0;
29
+
30
+ };
31
+
32
+ template <typename T>
33
+ class JSI_EXPORT NativePolarBridgeCxxSpec : public TurboModule {
34
+ public:
35
+ jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
36
+ return delegate_.create(rt, propName);
37
+ }
38
+
39
+ std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& runtime) override {
40
+ return delegate_.getPropertyNames(runtime);
41
+ }
42
+
43
+ static constexpr std::string_view kModuleName = "PolarBridge";
44
+
45
+ protected:
46
+ NativePolarBridgeCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
47
+ : TurboModule(std::string{NativePolarBridgeCxxSpec::kModuleName}, jsInvoker),
48
+ delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
49
+
50
+
51
+ private:
52
+ class Delegate : public NativePolarBridgeCxxSpecJSI {
53
+ public:
54
+ Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
55
+ NativePolarBridgeCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {
56
+
57
+ }
58
+
59
+ double multiply(jsi::Runtime &rt, double a, double b) override {
60
+ static_assert(
61
+ bridging::getParameterCount(&T::multiply) == 3,
62
+ "Expected multiply(...) to have 3 parameters");
63
+
64
+ return bridging::callFromJs<double>(
65
+ rt, &T::multiply, jsInvoker_, instance_, std::move(a), std::move(b));
66
+ }
67
+ void connectToDevice(jsi::Runtime &rt, jsi::String deviceId) override {
68
+ static_assert(
69
+ bridging::getParameterCount(&T::connectToDevice) == 2,
70
+ "Expected connectToDevice(...) to have 2 parameters");
71
+
72
+ return bridging::callFromJs<void>(
73
+ rt, &T::connectToDevice, jsInvoker_, instance_, std::move(deviceId));
74
+ }
75
+ void disconnectFromDevice(jsi::Runtime &rt, jsi::String deviceId) override {
76
+ static_assert(
77
+ bridging::getParameterCount(&T::disconnectFromDevice) == 2,
78
+ "Expected disconnectFromDevice(...) to have 2 parameters");
79
+
80
+ return bridging::callFromJs<void>(
81
+ rt, &T::disconnectFromDevice, jsInvoker_, instance_, std::move(deviceId));
82
+ }
83
+ void fetchHrData(jsi::Runtime &rt, jsi::String deviceId) override {
84
+ static_assert(
85
+ bridging::getParameterCount(&T::fetchHrData) == 2,
86
+ "Expected fetchHrData(...) to have 2 parameters");
87
+
88
+ return bridging::callFromJs<void>(
89
+ rt, &T::fetchHrData, jsInvoker_, instance_, std::move(deviceId));
90
+ }
91
+ void scanDevices(jsi::Runtime &rt) override {
92
+ static_assert(
93
+ bridging::getParameterCount(&T::scanDevices) == 1,
94
+ "Expected scanDevices(...) to have 1 parameters");
95
+
96
+ return bridging::callFromJs<void>(
97
+ rt, &T::scanDevices, jsInvoker_, instance_);
98
+ }
99
+ void disposeHrStream(jsi::Runtime &rt) override {
100
+ static_assert(
101
+ bridging::getParameterCount(&T::disposeHrStream) == 1,
102
+ "Expected disposeHrStream(...) to have 1 parameters");
103
+
104
+ return bridging::callFromJs<void>(
105
+ rt, &T::disposeHrStream, jsInvoker_, instance_);
106
+ }
107
+
108
+ private:
109
+ friend class NativePolarBridgeCxxSpec;
110
+ T *instance_;
111
+ };
112
+
113
+ Delegate delegate_;
114
+ };
115
+
116
+ } // namespace facebook::react
@@ -0,0 +1,13 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ multiply(a: number, b: number): number;
6
+ connectToDevice(deviceId: string): void;
7
+ disconnectFromDevice(deviceId: string): void;
8
+ fetchHrData(deviceId: string): void;
9
+ scanDevices(): void;
10
+ disposeHrStream(): void;
11
+ }
12
+
13
+ export default TurboModuleRegistry.getEnforcing<Spec>('PolarBridge');
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import PolarBridge from './NativePolarBridge';
4
+ export function multiply(a, b) {
5
+ return PolarBridge.multiply(a, b);
6
+ }
7
+ export function connectToDevice(deviceId) {
8
+ return PolarBridge.connectToDevice(deviceId);
9
+ }
10
+ export function disconnectFromDevice(deviceId) {
11
+ return PolarBridge.disconnectFromDevice(deviceId);
12
+ }
13
+ export function scanDevices() {
14
+ return PolarBridge.scanDevices();
15
+ }
16
+ export function fetchHrData(deviceId) {
17
+ return PolarBridge.fetchHrData(deviceId);
18
+ }
19
+ export function disposeHrStream() {
20
+ return PolarBridge.disposeHrStream();
21
+ }
22
+ export const emittedEventId = Object.freeze({
23
+ SCAN_DEVICE_FOUND: 'onDeviceFound',
24
+ SCAN_DEVICE_ERROR: 'onScanError',
25
+ SCAN_DEVICE_COMPLETE: 'onScanComplete',
26
+ POLAR_HR_DATA: 'PolarHrData',
27
+ POLAR_HR_ERROR: 'PolarHrError',
28
+ POLAR_HR_COMPLETE: 'PolarHrComplete'
29
+ });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PolarBridge","multiply","a","b","connectToDevice","deviceId","disconnectFromDevice","scanDevices","fetchHrData","disposeHrStream","emittedEventId","Object","freeze","SCAN_DEVICE_FOUND","SCAN_DEVICE_ERROR","SCAN_DEVICE_COMPLETE","POLAR_HR_DATA","POLAR_HR_ERROR","POLAR_HR_COMPLETE"],"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,EAAE;EAC3B,OAAOP,WAAW,CAACO,WAAW,CAAC,CAAC;AAClC;AAEA,OAAO,SAASC,WAAWA,CAACH,QAAgB,EAAE;EAC5C,OAAOL,WAAW,CAACQ,WAAW,CAACH,QAAQ,CAAC;AAC1C;AAEA,OAAO,SAASI,eAAeA,CAAA,EAAE;EAC/B,OAAOT,WAAW,CAACS,eAAe,CAAC,CAAC;AACtC;AAEA,OAAO,MAAMC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC1CC,iBAAiB,EAAE,eAAe;EAClCC,iBAAiB,EAAE,aAAa;EAChCC,oBAAoB,EAAE,gBAAgB;EACtCC,aAAa,EAAE,aAAa;EAC5BC,cAAc,EAAE,cAAc;EAC9BC,iBAAiB,EAAE;AACrB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,2 @@
1
+ export let presets: string[];
2
+ //# sourceMappingURL=babel.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"babel.config.d.ts","sourceRoot":"","sources":["../../babel.config.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("eslint").Linter.Config<import("eslint").Linter.RulesRecord>[];
2
+ export default _default;
3
+ //# sourceMappingURL=eslint.config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint.config.d.mts","sourceRoot":"","sources":["../../eslint.config.mjs"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,3 @@
1
+ declare const _exports: import("@react-native-community/cli-types").UserDependencyConfig;
2
+ export = _exports;
3
+ //# sourceMappingURL=react-native.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-native.config.d.ts","sourceRoot":"","sources":["../../react-native.config.js"],"names":[],"mappings":"wBACU,OAAO,mCAAmC,EAAE,oBAAoB"}
@@ -0,0 +1,12 @@
1
+ import type { TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ multiply(a: number, b: number): number;
4
+ connectToDevice(deviceId: string): void;
5
+ disconnectFromDevice(deviceId: string): void;
6
+ fetchHrData(deviceId: string): void;
7
+ scanDevices(): void;
8
+ disposeHrStream(): void;
9
+ }
10
+ declare const _default: Spec;
11
+ export default _default;
12
+ //# sourceMappingURL=NativePolarBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativePolarBridge.d.ts","sourceRoot":"","sources":["../../../src/NativePolarBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,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,IAAI,CAAC;IACxC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,IAAI,IAAI,CAAC;IACpB,eAAe,IAAI,IAAI,CAAC;CACzB;;AAED,wBAAqE"}