@voltras/node-sdk 0.1.2 → 0.2.0
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/README.md +122 -31
- package/dist/cjs/bluetooth/adapters/native.js +36 -34
- package/dist/cjs/bluetooth/adapters/native.js.map +1 -1
- package/dist/cjs/bluetooth/adapters/node.js +9 -7
- package/dist/cjs/bluetooth/adapters/node.js.map +1 -1
- package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js +6 -4
- package/dist/cjs/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
- package/dist/cjs/bluetooth/adapters/web.js +7 -5
- package/dist/cjs/bluetooth/adapters/web.js.map +1 -1
- package/dist/cjs/bluetooth/controllers/scanner-controller.js +0 -2
- package/dist/cjs/bluetooth/controllers/scanner-controller.js.map +1 -1
- package/dist/cjs/index.js +19 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/hooks.js +2 -6
- package/dist/cjs/react/hooks.js.map +1 -1
- package/dist/cjs/sdk/notification-dispatcher.js +47 -0
- package/dist/cjs/sdk/notification-dispatcher.js.map +1 -0
- package/dist/cjs/sdk/reconnect-handler.js +61 -0
- package/dist/cjs/sdk/reconnect-handler.js.map +1 -0
- package/dist/cjs/sdk/voltra-client.js +206 -72
- package/dist/cjs/sdk/voltra-client.js.map +1 -1
- package/dist/cjs/shared/index.js +5 -1
- package/dist/cjs/shared/index.js.map +1 -1
- package/dist/cjs/shared/logger.js +54 -0
- package/dist/cjs/shared/logger.js.map +1 -0
- package/dist/cjs/voltra/index.js +15 -12
- package/dist/cjs/voltra/index.js.map +1 -1
- package/dist/cjs/voltra/models/device.js +13 -0
- package/dist/cjs/voltra/models/device.js.map +1 -1
- package/dist/cjs/voltra/protocol/commands.js +127 -210
- package/dist/cjs/voltra/protocol/commands.js.map +1 -1
- package/dist/cjs/voltra/protocol/constants/ble-config.js +24 -0
- package/dist/cjs/voltra/protocol/constants/ble-config.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants/connection-commands.js +55 -0
- package/dist/cjs/voltra/protocol/constants/connection-commands.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants/enums.js +117 -0
- package/dist/cjs/voltra/protocol/constants/enums.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants/index.js +32 -0
- package/dist/cjs/voltra/protocol/constants/index.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants/message-types.js +70 -0
- package/dist/cjs/voltra/protocol/constants/message-types.js.map +1 -0
- package/dist/cjs/voltra/protocol/constants/timing.js +21 -0
- package/dist/cjs/voltra/protocol/constants/timing.js.map +1 -0
- package/dist/cjs/voltra/protocol/data/protocol-data.generated.js +7 -0
- package/dist/cjs/voltra/protocol/data/protocol-data.generated.js.map +1 -0
- package/dist/cjs/voltra/protocol/telemetry-decoder.js +122 -6
- package/dist/cjs/voltra/protocol/telemetry-decoder.js.map +1 -1
- package/dist/cjs/voltra/protocol/types.js +9 -0
- package/dist/cjs/voltra/protocol/types.js.map +1 -0
- package/dist/esm/bluetooth/adapters/native.js +36 -34
- package/dist/esm/bluetooth/adapters/native.js.map +1 -1
- package/dist/esm/bluetooth/adapters/node.js +9 -7
- package/dist/esm/bluetooth/adapters/node.js.map +1 -1
- package/dist/esm/bluetooth/adapters/web-bluetooth-base.js +6 -4
- package/dist/esm/bluetooth/adapters/web-bluetooth-base.js.map +1 -1
- package/dist/esm/bluetooth/adapters/web.js +7 -5
- package/dist/esm/bluetooth/adapters/web.js.map +1 -1
- package/dist/esm/bluetooth/controllers/scanner-controller.js +0 -2
- package/dist/esm/bluetooth/controllers/scanner-controller.js.map +1 -1
- package/dist/esm/index.js +3 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/hooks.js +1 -5
- package/dist/esm/react/hooks.js.map +1 -1
- package/dist/esm/sdk/notification-dispatcher.js +44 -0
- package/dist/esm/sdk/notification-dispatcher.js.map +1 -0
- package/dist/esm/sdk/reconnect-handler.js +57 -0
- package/dist/esm/sdk/reconnect-handler.js.map +1 -0
- package/dist/esm/sdk/voltra-client.js +204 -70
- package/dist/esm/sdk/voltra-client.js.map +1 -1
- package/dist/esm/shared/index.js +1 -0
- package/dist/esm/shared/index.js.map +1 -1
- package/dist/esm/shared/logger.js +49 -0
- package/dist/esm/shared/logger.js.map +1 -0
- package/dist/esm/voltra/index.js +3 -8
- package/dist/esm/voltra/index.js.map +1 -1
- package/dist/esm/voltra/models/device.js +13 -0
- package/dist/esm/voltra/models/device.js.map +1 -1
- package/dist/esm/voltra/protocol/commands.js +117 -209
- package/dist/esm/voltra/protocol/commands.js.map +1 -1
- package/dist/esm/voltra/protocol/constants/ble-config.js +18 -0
- package/dist/esm/voltra/protocol/constants/ble-config.js.map +1 -0
- package/dist/esm/voltra/protocol/constants/connection-commands.js +49 -0
- package/dist/esm/voltra/protocol/constants/connection-commands.js.map +1 -0
- package/dist/esm/voltra/protocol/constants/enums.js +114 -0
- package/dist/esm/voltra/protocol/constants/enums.js.map +1 -0
- package/dist/esm/voltra/protocol/constants/index.js +12 -0
- package/dist/esm/voltra/protocol/constants/index.js.map +1 -0
- package/dist/esm/voltra/protocol/constants/message-types.js +64 -0
- package/dist/esm/voltra/protocol/constants/message-types.js.map +1 -0
- package/dist/esm/voltra/protocol/constants/timing.js +18 -0
- package/dist/esm/voltra/protocol/constants/timing.js.map +1 -0
- package/dist/esm/voltra/protocol/data/protocol-data.generated.js +5 -0
- package/dist/esm/voltra/protocol/data/protocol-data.generated.js.map +1 -0
- package/dist/esm/voltra/protocol/telemetry-decoder.js +124 -8
- package/dist/esm/voltra/protocol/telemetry-decoder.js.map +1 -1
- package/dist/esm/voltra/protocol/types.js +8 -0
- package/dist/esm/voltra/protocol/types.js.map +1 -0
- package/dist/types/bluetooth/adapters/native.d.ts.map +1 -1
- package/dist/types/bluetooth/adapters/node.d.ts.map +1 -1
- package/dist/types/bluetooth/adapters/web-bluetooth-base.d.ts.map +1 -1
- package/dist/types/bluetooth/adapters/web.d.ts.map +1 -1
- package/dist/types/bluetooth/controllers/scanner-controller.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/react/hooks.d.ts.map +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/index.d.ts.map +1 -1
- package/dist/types/sdk/notification-dispatcher.d.ts +29 -0
- package/dist/types/sdk/notification-dispatcher.d.ts.map +1 -0
- package/dist/types/sdk/reconnect-handler.d.ts +55 -0
- package/dist/types/sdk/reconnect-handler.d.ts.map +1 -0
- package/dist/types/sdk/types.d.ts +35 -0
- package/dist/types/sdk/types.d.ts.map +1 -1
- package/dist/types/sdk/voltra-client.d.ts +77 -2
- package/dist/types/sdk/voltra-client.d.ts.map +1 -1
- package/dist/types/shared/index.d.ts +1 -0
- package/dist/types/shared/index.d.ts.map +1 -1
- package/dist/types/shared/logger.d.ts +39 -0
- package/dist/types/shared/logger.d.ts.map +1 -0
- package/dist/types/voltra/index.d.ts +3 -3
- package/dist/types/voltra/index.d.ts.map +1 -1
- package/dist/types/voltra/models/device.d.ts +11 -1
- package/dist/types/voltra/models/device.d.ts.map +1 -1
- package/dist/types/voltra/protocol/commands.d.ts +47 -87
- package/dist/types/voltra/protocol/commands.d.ts.map +1 -1
- package/dist/types/voltra/protocol/constants/ble-config.d.ts +16 -0
- package/dist/types/voltra/protocol/constants/ble-config.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants/connection-commands.d.ts +37 -0
- package/dist/types/voltra/protocol/constants/connection-commands.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants/enums.d.ts +72 -0
- package/dist/types/voltra/protocol/constants/enums.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants/index.d.ts +12 -0
- package/dist/types/voltra/protocol/constants/index.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants/message-types.d.ts +52 -0
- package/dist/types/voltra/protocol/constants/message-types.d.ts.map +1 -0
- package/dist/types/voltra/protocol/constants/timing.d.ts +18 -0
- package/dist/types/voltra/protocol/constants/timing.d.ts.map +1 -0
- package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts +3 -0
- package/dist/types/voltra/protocol/data/protocol-data.generated.d.ts.map +1 -0
- package/dist/types/voltra/protocol/telemetry-decoder.d.ts +15 -2
- package/dist/types/voltra/protocol/telemetry-decoder.d.ts.map +1 -1
- package/dist/types/voltra/protocol/types.d.ts +247 -0
- package/dist/types/voltra/protocol/types.d.ts.map +1 -0
- package/package.json +8 -7
- package/dist/cjs/voltra/protocol/constants.js +0 -136
- package/dist/cjs/voltra/protocol/constants.js.map +0 -1
- package/dist/cjs/voltra/protocol/data/chains.json +0 -830
- package/dist/cjs/voltra/protocol/data/eccentric.json +0 -1598
- package/dist/cjs/voltra/protocol/data/protocol.json +0 -54
- package/dist/cjs/voltra/protocol/data/weights.json +0 -62
- package/dist/esm/voltra/protocol/constants.js +0 -130
- package/dist/esm/voltra/protocol/constants.js.map +0 -1
- package/dist/esm/voltra/protocol/data/chains.json +0 -830
- package/dist/esm/voltra/protocol/data/eccentric.json +0 -1598
- package/dist/esm/voltra/protocol/data/protocol.json +0 -54
- package/dist/esm/voltra/protocol/data/weights.json +0 -62
- package/dist/types/voltra/protocol/constants.d.ts +0 -103
- package/dist/types/voltra/protocol/constants.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -7,8 +7,9 @@ SDK for connecting to and controlling Voltra fitness devices.
|
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
- **Device Control**: Configure weight (5-200 lbs), chains (0-100 lbs), and eccentric load (-195% to +195%)
|
|
10
|
+
- **Device Control**: Configure weight (5-200 lbs, any integer), chains (0-100 lbs), inverse chains (0-100 lbs), and eccentric load (-195% to +195%)
|
|
11
11
|
- **Real-time Telemetry**: Stream position, velocity, and force data during workouts
|
|
12
|
+
- **Device Notifications**: Rep/set boundaries, mode confirmations, settings updates, battery level
|
|
12
13
|
- **Recording Lifecycle**: Prepare, start, and stop recording with motor engagement control
|
|
13
14
|
- **Cross-platform**: Web browsers, Node.js, and React Native
|
|
14
15
|
- **Multi-device**: Connect to and control multiple devices simultaneously
|
|
@@ -48,9 +49,10 @@ const selectedDevice = devices[0]; // In a real app, user would choose
|
|
|
48
49
|
const client = await manager.connect(selectedDevice);
|
|
49
50
|
|
|
50
51
|
// 4. Configure resistance settings
|
|
51
|
-
await client.setWeight(50);
|
|
52
|
-
await client.setChains(25);
|
|
53
|
-
await client.
|
|
52
|
+
await client.setWeight(50); // 5-200 lbs (any integer)
|
|
53
|
+
await client.setChains(25); // 0-100 lbs (reverse resistance)
|
|
54
|
+
await client.setInverseChains(15); // 0-100 lbs (progressive resistance)
|
|
55
|
+
await client.setEccentric(10); // -195 to +195 (eccentric load %)
|
|
54
56
|
|
|
55
57
|
// 5. Subscribe to real-time telemetry
|
|
56
58
|
client.onFrame((frame: TelemetryFrame) => {
|
|
@@ -90,24 +92,27 @@ Control the device's resistance in three ways:
|
|
|
90
92
|
|
|
91
93
|
| Setting | Range | Description |
|
|
92
94
|
|---------|-------|-------------|
|
|
93
|
-
| **Weight** | 5-200 lbs | Primary resistance (
|
|
95
|
+
| **Weight** | 5-200 lbs | Primary resistance (any integer value) |
|
|
94
96
|
| **Chains** | 0-100 lbs | Reverse resistance - reduces load as you extend |
|
|
97
|
+
| **Inverse Chains** | 0-100 lbs | Progressive resistance - increases load as you extend |
|
|
95
98
|
| **Eccentric** | -195% to +195% | Adjusts eccentric (lowering) phase relative to concentric |
|
|
96
99
|
|
|
97
100
|
```typescript
|
|
98
101
|
// Set all resistance parameters
|
|
99
|
-
await client.setWeight(75);
|
|
100
|
-
await client.setChains(20);
|
|
101
|
-
await client.
|
|
102
|
+
await client.setWeight(75); // 75 lbs primary resistance
|
|
103
|
+
await client.setChains(20); // 20 lbs chain reduction
|
|
104
|
+
await client.setInverseChains(10); // 10 lbs progressive resistance
|
|
105
|
+
await client.setEccentric(-25); // 25% less resistance on eccentric
|
|
102
106
|
|
|
103
107
|
// Query current settings
|
|
104
108
|
console.log(client.settings);
|
|
105
|
-
// { weight: 75, chains: 20, eccentric: -25 }
|
|
109
|
+
// { weight: 75, chains: 20, inverseChains: 10, eccentric: -25, mode: 1, battery: 85 }
|
|
106
110
|
|
|
107
111
|
// Get available values for each setting
|
|
108
|
-
const weights = client.getAvailableWeights();
|
|
109
|
-
const chains = client.getAvailableChains();
|
|
110
|
-
const
|
|
112
|
+
const weights = client.getAvailableWeights(); // [5, 6, 7, ..., 200]
|
|
113
|
+
const chains = client.getAvailableChains(); // [0, 1, 2, ..., 100]
|
|
114
|
+
const inverseChains = client.getAvailableInverseChains(); // [0, 1, 2, ..., 100]
|
|
115
|
+
const eccentric = client.getAvailableEccentric(); // [-195, -190, ..., 195]
|
|
111
116
|
```
|
|
112
117
|
|
|
113
118
|
### Recording Lifecycle
|
|
@@ -134,7 +139,7 @@ console.log(client.isRecording); // true when state === 'active'
|
|
|
134
139
|
|
|
135
140
|
### Real-time Telemetry
|
|
136
141
|
|
|
137
|
-
Receive movement data at ~
|
|
142
|
+
Receive movement data at ~11 Hz when recording:
|
|
138
143
|
|
|
139
144
|
```typescript
|
|
140
145
|
// Subscribe to telemetry frames
|
|
@@ -142,7 +147,7 @@ const unsubscribe = client.onFrame((frame) => {
|
|
|
142
147
|
console.log({
|
|
143
148
|
sequence: frame.sequence, // Packet sequence number
|
|
144
149
|
timestamp: frame.timestamp, // Unix ms when received
|
|
145
|
-
phase: frame.phase, //
|
|
150
|
+
phase: frame.phase, // MovementPhase enum
|
|
146
151
|
position: frame.position, // Position in movement (0-600)
|
|
147
152
|
velocity: frame.velocity, // Current velocity
|
|
148
153
|
force: frame.force, // Force being applied
|
|
@@ -153,34 +158,108 @@ const unsubscribe = client.onFrame((frame) => {
|
|
|
153
158
|
unsubscribe();
|
|
154
159
|
```
|
|
155
160
|
|
|
156
|
-
###
|
|
161
|
+
### Events and Notifications
|
|
157
162
|
|
|
158
|
-
|
|
163
|
+
The SDK provides a comprehensive event system for real-time device notifications:
|
|
159
164
|
|
|
160
165
|
```typescript
|
|
161
|
-
// Subscribe to all events
|
|
166
|
+
// Subscribe to all events with full type safety
|
|
162
167
|
client.subscribe((event) => {
|
|
163
168
|
switch (event.type) {
|
|
169
|
+
// Connection events
|
|
164
170
|
case 'connectionStateChanged':
|
|
165
171
|
console.log('State:', event.state);
|
|
166
172
|
// 'disconnected' | 'connecting' | 'authenticating' | 'connected'
|
|
167
173
|
break;
|
|
174
|
+
case 'connected':
|
|
175
|
+
console.log(`Connected to ${event.deviceName}`);
|
|
176
|
+
break;
|
|
177
|
+
case 'disconnected':
|
|
178
|
+
console.log(`Disconnected from ${event.deviceId}`);
|
|
179
|
+
break;
|
|
180
|
+
|
|
181
|
+
// Recording events
|
|
168
182
|
case 'recordingStateChanged':
|
|
169
183
|
console.log('Recording:', event.state);
|
|
170
184
|
break;
|
|
185
|
+
|
|
186
|
+
// Telemetry events
|
|
171
187
|
case 'frame':
|
|
172
188
|
console.log('Telemetry:', event.frame);
|
|
173
189
|
break;
|
|
190
|
+
|
|
191
|
+
// Workout boundary events (device-detected)
|
|
192
|
+
case 'repBoundary':
|
|
193
|
+
console.log('Rep completed!');
|
|
194
|
+
break;
|
|
195
|
+
case 'setBoundary':
|
|
196
|
+
console.log('Set completed!');
|
|
197
|
+
break;
|
|
198
|
+
|
|
199
|
+
// Device notification events
|
|
200
|
+
case 'modeConfirmed':
|
|
201
|
+
console.log('Mode confirmed:', event.mode);
|
|
202
|
+
break;
|
|
203
|
+
case 'settingsUpdate':
|
|
204
|
+
console.log('Device settings:', event.settings);
|
|
205
|
+
break;
|
|
206
|
+
case 'batteryUpdate':
|
|
207
|
+
console.log('Battery:', event.battery, '%');
|
|
208
|
+
break;
|
|
209
|
+
|
|
174
210
|
case 'error':
|
|
175
211
|
console.error('Error:', event.error);
|
|
176
212
|
break;
|
|
177
213
|
}
|
|
178
214
|
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
#### Convenience Subscription Methods
|
|
218
|
+
|
|
219
|
+
Subscribe to specific event types with dedicated methods:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
// Telemetry frames (~11 Hz during recording)
|
|
223
|
+
const unsubFrame = client.onFrame((frame) => {
|
|
224
|
+
updateUI(frame.position, frame.velocity, frame.force);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// Rep boundaries (device detects rep completion)
|
|
228
|
+
const unsubRep = client.onRepBoundary(() => {
|
|
229
|
+
repCount++;
|
|
230
|
+
playRepSound();
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Set boundaries (device detects set completion)
|
|
234
|
+
const unsubSet = client.onSetBoundary(() => {
|
|
235
|
+
logSetComplete();
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// Mode confirmations (after setMode())
|
|
239
|
+
const unsubMode = client.onModeConfirmed((mode) => {
|
|
240
|
+
console.log('Mode now active:', mode);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// Settings updates (device reports current state)
|
|
244
|
+
const unsubSettings = client.onSettingsUpdate((settings) => {
|
|
245
|
+
// settings: { baseWeight?, chains?, eccentric?, trainingMode? }
|
|
246
|
+
syncUIWithDevice(settings);
|
|
247
|
+
});
|
|
179
248
|
|
|
180
|
-
//
|
|
181
|
-
client.
|
|
182
|
-
|
|
249
|
+
// Battery level updates
|
|
250
|
+
const unsubBattery = client.onBatteryUpdate((battery) => {
|
|
251
|
+
showBatteryIndicator(battery);
|
|
183
252
|
});
|
|
253
|
+
|
|
254
|
+
// Connection state changes
|
|
255
|
+
const unsubConnection = client.onConnectionStateChange((state) => {
|
|
256
|
+
updateConnectionUI(state);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// Unsubscribe when done
|
|
260
|
+
unsubFrame();
|
|
261
|
+
unsubRep();
|
|
262
|
+
// ... etc
|
|
184
263
|
```
|
|
185
264
|
|
|
186
265
|
## Platform-Specific Setup
|
|
@@ -323,7 +402,7 @@ try {
|
|
|
323
402
|
} catch (error) {
|
|
324
403
|
if (error instanceof InvalidSettingError) {
|
|
325
404
|
console.log(`Invalid ${error.setting}: ${error.value}`);
|
|
326
|
-
console.log('Available values:', error.
|
|
405
|
+
console.log('Available values:', error.validValues);
|
|
327
406
|
}
|
|
328
407
|
}
|
|
329
408
|
```
|
|
@@ -372,15 +451,23 @@ Controls a single connected device.
|
|
|
372
451
|
|
|
373
452
|
| Method | Description |
|
|
374
453
|
|--------|-------------|
|
|
375
|
-
| `setWeight(lbs)` | Set weight (5-200
|
|
454
|
+
| `setWeight(lbs)` | Set weight (5-200, any integer) |
|
|
376
455
|
| `setChains(lbs)` | Set chains (0-100) |
|
|
456
|
+
| `setInverseChains(lbs)` | Set inverse chains (0-100) |
|
|
377
457
|
| `setEccentric(percent)` | Set eccentric (-195 to +195) |
|
|
458
|
+
| `setMode(mode)` | Set training mode |
|
|
378
459
|
| `prepareRecording()` | Pre-engage motor for low-latency start |
|
|
379
460
|
| `startRecording()` | Start recording (engages motor) |
|
|
380
461
|
| `stopRecording()` | Stop recording (disengages motor) |
|
|
381
462
|
| `endSet()` | End set but stay prepared |
|
|
382
|
-
| `onFrame(callback)` | Subscribe to telemetry frames |
|
|
383
463
|
| `subscribe(callback)` | Subscribe to all events |
|
|
464
|
+
| `onFrame(callback)` | Subscribe to telemetry frames |
|
|
465
|
+
| `onRepBoundary(callback)` | Subscribe to rep completion events |
|
|
466
|
+
| `onSetBoundary(callback)` | Subscribe to set completion events |
|
|
467
|
+
| `onModeConfirmed(callback)` | Subscribe to mode confirmation events |
|
|
468
|
+
| `onSettingsUpdate(callback)` | Subscribe to device settings updates |
|
|
469
|
+
| `onBatteryUpdate(callback)` | Subscribe to battery level updates |
|
|
470
|
+
| `onConnectionStateChange(callback)` | Subscribe to connection state changes |
|
|
384
471
|
| `disconnect()` | Disconnect from device |
|
|
385
472
|
| `dispose()` | Clean up resources |
|
|
386
473
|
|
|
@@ -390,21 +477,26 @@ Controls a single connected device.
|
|
|
390
477
|
| `isConnected` | boolean | Whether connected |
|
|
391
478
|
| `recordingState` | string | 'idle' \| 'preparing' \| 'ready' \| 'active' \| 'stopping' |
|
|
392
479
|
| `isRecording` | boolean | Whether recording is active |
|
|
393
|
-
| `settings` | object | Current { weight, chains, eccentric } |
|
|
480
|
+
| `settings` | object | Current { weight, chains, inverseChains, eccentric, mode, battery } |
|
|
394
481
|
| `connectedDeviceId` | string | Connected device ID |
|
|
395
482
|
| `connectedDeviceName` | string | Connected device name |
|
|
396
483
|
|
|
397
484
|
### TelemetryFrame
|
|
398
485
|
|
|
399
486
|
```typescript
|
|
487
|
+
import { MovementPhase } from '@voltras/node-sdk';
|
|
488
|
+
|
|
400
489
|
interface TelemetryFrame {
|
|
401
|
-
sequence: number;
|
|
402
|
-
timestamp: number;
|
|
403
|
-
phase:
|
|
404
|
-
position: number;
|
|
405
|
-
velocity: number;
|
|
406
|
-
force: number;
|
|
490
|
+
sequence: number; // Packet sequence number
|
|
491
|
+
timestamp: number; // Unix ms when received
|
|
492
|
+
phase: MovementPhase; // Movement phase (see MovementPhase enum)
|
|
493
|
+
position: number; // Position in movement (0-600)
|
|
494
|
+
velocity: number; // Current velocity
|
|
495
|
+
force: number; // Force being applied (signed)
|
|
407
496
|
}
|
|
497
|
+
|
|
498
|
+
// MovementPhase enum values:
|
|
499
|
+
// IDLE = 0, CONCENTRIC = 1, HOLD = 2, ECCENTRIC = 3, UNKNOWN = -1
|
|
408
500
|
```
|
|
409
501
|
|
|
410
502
|
## Documentation
|
|
@@ -419,7 +511,6 @@ Step-by-step tutorials for using the SDK in your app:
|
|
|
419
511
|
|
|
420
512
|
### Technical Deep-Dives
|
|
421
513
|
|
|
422
|
-
- [Bluetooth Protocol](./docs/concepts/bluetooth-protocol.md) - BLE protocol, commands, telemetry format
|
|
423
514
|
- [Platform Adapters](./docs/concepts/platform-adapters.md) - How adapters work across platforms
|
|
424
515
|
|
|
425
516
|
### Other
|
|
@@ -18,6 +18,8 @@ const react_native_ble_plx_1 = require("react-native-ble-plx");
|
|
|
18
18
|
// @ts-ignore - React Native imports may not be available in all environments
|
|
19
19
|
const react_native_1 = require("react-native");
|
|
20
20
|
const base_1 = require("./base");
|
|
21
|
+
const logger_1 = require("../../shared/logger");
|
|
22
|
+
const log = (0, logger_1.createLogger)('NativeBLE');
|
|
21
23
|
/**
|
|
22
24
|
* Request Android Bluetooth permissions at runtime.
|
|
23
25
|
* Android 12+ requires BLUETOOTH_SCAN and BLUETOOTH_CONNECT.
|
|
@@ -28,7 +30,7 @@ async function requestAndroidBLEPermissions() {
|
|
|
28
30
|
return true;
|
|
29
31
|
}
|
|
30
32
|
const apiLevel = react_native_1.Platform.Version;
|
|
31
|
-
|
|
33
|
+
log.debug('Android API level:', apiLevel);
|
|
32
34
|
try {
|
|
33
35
|
if (typeof apiLevel === 'number' && apiLevel >= 31) {
|
|
34
36
|
// Android 12+ (API 31+)
|
|
@@ -39,7 +41,7 @@ async function requestAndroidBLEPermissions() {
|
|
|
39
41
|
]);
|
|
40
42
|
const allGranted = Object.values(results).every((result) => result === react_native_1.PermissionsAndroid.RESULTS.GRANTED);
|
|
41
43
|
if (!allGranted) {
|
|
42
|
-
|
|
44
|
+
log.warn('Not all permissions granted:', results);
|
|
43
45
|
}
|
|
44
46
|
return allGranted;
|
|
45
47
|
}
|
|
@@ -54,7 +56,7 @@ async function requestAndroidBLEPermissions() {
|
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
catch (error) {
|
|
57
|
-
|
|
59
|
+
log.error('Permission request error:', error);
|
|
58
60
|
return false;
|
|
59
61
|
}
|
|
60
62
|
}
|
|
@@ -121,19 +123,19 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
121
123
|
async handleAppStateChange(nextAppState) {
|
|
122
124
|
if (nextAppState === 'active') {
|
|
123
125
|
// App came to foreground
|
|
124
|
-
|
|
126
|
+
log.debug('App became active');
|
|
125
127
|
// Check if we were connected and got disconnected
|
|
126
128
|
if (this.lastConnectedDeviceId &&
|
|
127
129
|
this.connectionState === 'disconnected' &&
|
|
128
130
|
!this.isReconnecting) {
|
|
129
|
-
|
|
131
|
+
log.debug('Was connected before, attempting auto-reconnect...');
|
|
130
132
|
await this.attemptReconnect();
|
|
131
133
|
}
|
|
132
134
|
else if (this.device) {
|
|
133
135
|
// Check if device is still connected
|
|
134
136
|
const isConnected = await this.device.isConnected();
|
|
135
137
|
if (!isConnected) {
|
|
136
|
-
|
|
138
|
+
log.debug('Device disconnected while in background, attempting reconnect...');
|
|
137
139
|
this.setConnectionState('disconnected');
|
|
138
140
|
await this.attemptReconnect();
|
|
139
141
|
}
|
|
@@ -152,31 +154,31 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
152
154
|
this.onReconnectStart?.();
|
|
153
155
|
while (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
154
156
|
this.reconnectAttempts++;
|
|
155
|
-
|
|
157
|
+
log.debug(`Reconnect attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts}`);
|
|
156
158
|
try {
|
|
157
159
|
await this.connect(this.lastConnectedDeviceId);
|
|
158
|
-
|
|
160
|
+
log.debug('Reconnect successful');
|
|
159
161
|
this.isReconnecting = false;
|
|
160
162
|
this.reconnectAttempts = 0;
|
|
161
163
|
this.onReconnectSuccess?.();
|
|
162
164
|
return;
|
|
163
165
|
}
|
|
164
166
|
catch (error) {
|
|
165
|
-
|
|
167
|
+
log.warn(`Reconnect attempt ${this.reconnectAttempts} failed:`, error);
|
|
166
168
|
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
167
169
|
await new Promise((resolve) => setTimeout(resolve, this.reconnectDelayMs));
|
|
168
170
|
}
|
|
169
171
|
}
|
|
170
172
|
}
|
|
171
173
|
// All attempts failed
|
|
172
|
-
|
|
174
|
+
log.error('Auto-reconnect failed after all attempts');
|
|
173
175
|
this.isReconnecting = false;
|
|
174
176
|
this.onReconnectFailed?.(new Error('Auto-reconnect failed'));
|
|
175
177
|
}
|
|
176
178
|
async waitForPoweredOn() {
|
|
177
179
|
return new Promise((resolve, reject) => {
|
|
178
180
|
const subscription = this.manager.onStateChange((state) => {
|
|
179
|
-
|
|
181
|
+
log.debug('Bluetooth state:', state);
|
|
180
182
|
if (state === react_native_ble_plx_1.State.PoweredOn) {
|
|
181
183
|
subscription.remove();
|
|
182
184
|
resolve();
|
|
@@ -191,7 +193,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
191
193
|
}
|
|
192
194
|
else if (state === react_native_ble_plx_1.State.PoweredOff) {
|
|
193
195
|
// Don't reject yet - user might turn it on
|
|
194
|
-
|
|
196
|
+
log.debug('Bluetooth is off - waiting for user to enable');
|
|
195
197
|
}
|
|
196
198
|
}, true);
|
|
197
199
|
// Timeout after 10 seconds
|
|
@@ -202,19 +204,19 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
202
204
|
});
|
|
203
205
|
}
|
|
204
206
|
async scan(timeout) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
+
log.debug('Starting scan...');
|
|
208
|
+
log.debug('Looking for service:', this.bleConfig.serviceUUID);
|
|
207
209
|
if (this.bleConfig.deviceNamePrefix) {
|
|
208
|
-
|
|
210
|
+
log.debug('Device name prefix:', this.bleConfig.deviceNamePrefix);
|
|
209
211
|
}
|
|
210
212
|
// Request Android permissions first
|
|
211
213
|
const hasPermissions = await requestAndroidBLEPermissions();
|
|
212
214
|
if (!hasPermissions) {
|
|
213
215
|
throw new Error('Bluetooth permissions not granted. Please enable in Settings.');
|
|
214
216
|
}
|
|
215
|
-
|
|
217
|
+
log.debug('Permissions granted');
|
|
216
218
|
await this.waitForPoweredOn();
|
|
217
|
-
|
|
219
|
+
log.debug('Bluetooth is powered on');
|
|
218
220
|
const devices = [];
|
|
219
221
|
const seen = new Set();
|
|
220
222
|
const prefix = this.bleConfig.deviceNamePrefix;
|
|
@@ -223,18 +225,18 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
223
225
|
this.manager.startDeviceScan(null, // No service filter - scan for all devices
|
|
224
226
|
{ allowDuplicates: false }, (error, device) => {
|
|
225
227
|
if (error) {
|
|
226
|
-
|
|
228
|
+
log.error('Scan error:', error);
|
|
227
229
|
return;
|
|
228
230
|
}
|
|
229
231
|
if (device) {
|
|
230
232
|
// Log all devices with names for debugging
|
|
231
233
|
if (device.name) {
|
|
232
|
-
|
|
234
|
+
log.debug(`Found device: ${device.name} (${device.id})`);
|
|
233
235
|
}
|
|
234
236
|
// Check if device matches filter (if prefix is configured)
|
|
235
237
|
const matchesFilter = !prefix || device.name?.startsWith(prefix) || device.localName?.startsWith(prefix);
|
|
236
238
|
if (matchesFilter && !seen.has(device.id) && (device.name || device.localName)) {
|
|
237
|
-
|
|
239
|
+
log.debug(`Found matching device: ${device.name || device.localName}`);
|
|
238
240
|
seen.add(device.id);
|
|
239
241
|
devices.push({
|
|
240
242
|
id: device.id,
|
|
@@ -247,7 +249,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
247
249
|
// Stop scan after timeout
|
|
248
250
|
setTimeout(() => {
|
|
249
251
|
this.manager.stopDeviceScan();
|
|
250
|
-
|
|
252
|
+
log.debug(`Scan complete. Found ${devices.length} device(s)`);
|
|
251
253
|
resolve(devices);
|
|
252
254
|
}, timeout * 1000);
|
|
253
255
|
});
|
|
@@ -273,22 +275,22 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
273
275
|
// If immediate write is provided, send it NOW before anything else
|
|
274
276
|
// This is critical for devices that require fast authentication
|
|
275
277
|
if (options?.immediateWrite) {
|
|
276
|
-
|
|
278
|
+
log.debug('Sending immediate auth write...');
|
|
277
279
|
const base64 = bytesToBase64(options.immediateWrite);
|
|
278
280
|
await device.writeCharacteristicWithResponseForService(this.bleConfig.serviceUUID, this.bleConfig.writeCharUUID, base64);
|
|
279
|
-
|
|
281
|
+
log.debug('Immediate auth write sent');
|
|
280
282
|
}
|
|
281
283
|
// Now request MTU (optional, may fail on some devices)
|
|
282
284
|
try {
|
|
283
285
|
await device.requestMTU(512);
|
|
284
286
|
}
|
|
285
287
|
catch (mtuError) {
|
|
286
|
-
|
|
288
|
+
log.debug('MTU request failed (non-fatal):', mtuError);
|
|
287
289
|
}
|
|
288
290
|
// Set up disconnect listener BEFORE setting up characteristic monitors
|
|
289
291
|
// This ensures we can clean up subscriptions before the error propagates
|
|
290
292
|
this.disconnectSubscription = device.onDisconnected((error, _disconnectedDevice) => {
|
|
291
|
-
|
|
293
|
+
log.debug('Device disconnected', error ? `(error: ${error.message})` : '');
|
|
292
294
|
// Mark as disconnecting to prevent monitor errors from crashing
|
|
293
295
|
this.isDisconnecting = true;
|
|
294
296
|
// Clean up subscriptions IMMEDIATELY to prevent RxJava crash
|
|
@@ -304,10 +306,10 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
304
306
|
if (error) {
|
|
305
307
|
// Ignore errors if we're disconnecting - this prevents the Android crash
|
|
306
308
|
if (this.isDisconnecting || !this.device) {
|
|
307
|
-
|
|
309
|
+
log.debug('Notification error during disconnect (ignored):', error.message);
|
|
308
310
|
return;
|
|
309
311
|
}
|
|
310
|
-
|
|
312
|
+
log.error('Notification error:', error);
|
|
311
313
|
return;
|
|
312
314
|
}
|
|
313
315
|
if (characteristic?.value) {
|
|
@@ -321,10 +323,10 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
321
323
|
if (error) {
|
|
322
324
|
// Ignore errors if we're disconnecting - this prevents the Android crash
|
|
323
325
|
if (this.isDisconnecting || !this.device) {
|
|
324
|
-
|
|
326
|
+
log.debug('Write char error during disconnect (ignored):', error.message);
|
|
325
327
|
return;
|
|
326
328
|
}
|
|
327
|
-
|
|
329
|
+
log.error('Write char notification error:', error);
|
|
328
330
|
return;
|
|
329
331
|
}
|
|
330
332
|
if (characteristic?.value) {
|
|
@@ -335,7 +337,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
335
337
|
this.setConnectionState('connected');
|
|
336
338
|
}
|
|
337
339
|
catch (error) {
|
|
338
|
-
|
|
340
|
+
log.error('Connect error:', error);
|
|
339
341
|
this.setConnectionState('disconnected');
|
|
340
342
|
throw error;
|
|
341
343
|
}
|
|
@@ -348,7 +350,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
348
350
|
this.notifySubscription.remove();
|
|
349
351
|
}
|
|
350
352
|
catch (e) {
|
|
351
|
-
|
|
353
|
+
log.debug('Error removing notify subscription:', e);
|
|
352
354
|
}
|
|
353
355
|
this.notifySubscription = null;
|
|
354
356
|
}
|
|
@@ -357,7 +359,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
357
359
|
this.writeSubscription.remove();
|
|
358
360
|
}
|
|
359
361
|
catch (e) {
|
|
360
|
-
|
|
362
|
+
log.debug('Error removing write subscription:', e);
|
|
361
363
|
}
|
|
362
364
|
this.writeSubscription = null;
|
|
363
365
|
}
|
|
@@ -369,7 +371,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
369
371
|
this.disconnectSubscription.remove();
|
|
370
372
|
}
|
|
371
373
|
catch (e) {
|
|
372
|
-
|
|
374
|
+
log.debug('Error removing disconnect subscription:', e);
|
|
373
375
|
}
|
|
374
376
|
this.disconnectSubscription = null;
|
|
375
377
|
}
|
|
@@ -386,7 +388,7 @@ class NativeBLEAdapter extends base_1.BaseBLEAdapter {
|
|
|
386
388
|
await this.device.cancelConnection();
|
|
387
389
|
}
|
|
388
390
|
catch (error) {
|
|
389
|
-
|
|
391
|
+
log.error('Disconnect error:', error);
|
|
390
392
|
}
|
|
391
393
|
this.device = null;
|
|
392
394
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/bluetooth/adapters/native.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/bluetooth/adapters/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
46
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
47
|
exports.NodeBLEAdapter = void 0;
|
|
48
48
|
const web_bluetooth_base_1 = require("./web-bluetooth-base");
|
|
49
|
+
const logger_1 = require("../../shared/logger");
|
|
50
|
+
const log = (0, logger_1.createLogger)('NodeBLE');
|
|
49
51
|
// Dynamic import for webbluetooth to avoid bundling issues in non-Node environments
|
|
50
52
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
53
|
let BluetoothClass = null;
|
|
@@ -111,7 +113,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
|
|
|
111
113
|
return new Promise((resolve, reject) => {
|
|
112
114
|
const timeoutId = setTimeout(() => {
|
|
113
115
|
// Timeout - return discovered devices
|
|
114
|
-
|
|
116
|
+
log.debug(`Scan timeout. Found ${this.discoveredDevices.length} device(s)`);
|
|
115
117
|
resolve(this.discoveredDevices);
|
|
116
118
|
}, timeout * 1000);
|
|
117
119
|
// Create a new Bluetooth instance with deviceFound in constructor
|
|
@@ -132,7 +134,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
|
|
|
132
134
|
// Add to discovered list
|
|
133
135
|
if (!this.discoveredDevices.find((d) => d.id === device.id)) {
|
|
134
136
|
this.discoveredDevices.push(discoveredDevice);
|
|
135
|
-
|
|
137
|
+
log.debug(`Found device: ${device.name}`);
|
|
136
138
|
}
|
|
137
139
|
// Check if we should select this device
|
|
138
140
|
let shouldSelect = false;
|
|
@@ -146,7 +148,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
|
|
|
146
148
|
shouldSelect = true;
|
|
147
149
|
}
|
|
148
150
|
if (shouldSelect) {
|
|
149
|
-
|
|
151
|
+
log.debug(`Selected device: ${device.name}`);
|
|
150
152
|
this.selectedDevice = device;
|
|
151
153
|
clearTimeout(timeoutId);
|
|
152
154
|
selectFn();
|
|
@@ -171,7 +173,7 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
|
|
|
171
173
|
clearTimeout(timeoutId);
|
|
172
174
|
if (error.name === 'NotFoundError') {
|
|
173
175
|
// No device selected
|
|
174
|
-
|
|
176
|
+
log.debug('No device selected');
|
|
175
177
|
resolve(this.discoveredDevices);
|
|
176
178
|
}
|
|
177
179
|
else {
|
|
@@ -192,15 +194,15 @@ class NodeBLEAdapter extends web_bluetooth_base_1.WebBluetoothBase {
|
|
|
192
194
|
throw new Error('No device selected. Call scan() first.');
|
|
193
195
|
}
|
|
194
196
|
if (this.selectedDevice.id !== deviceId) {
|
|
195
|
-
|
|
197
|
+
log.warn(`Device ID mismatch: expected ${this.selectedDevice.id}, got ${deviceId}`);
|
|
196
198
|
}
|
|
197
199
|
// Connect to GATT server
|
|
198
200
|
await this.connectToDevice(this.selectedDevice);
|
|
199
201
|
// Handle immediate write if provided (for authentication)
|
|
200
202
|
if (options?.immediateWrite) {
|
|
201
|
-
|
|
203
|
+
log.debug('Sending immediate auth write...');
|
|
202
204
|
await this.write(options.immediateWrite);
|
|
203
|
-
|
|
205
|
+
log.debug('Immediate auth write sent');
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
208
|
/**
|