64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
'use strict'
|
|
/*
|
|
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
|
|
|
|
This manager creates a module to listen to ANT+ devices.
|
|
This currently can be used to get the heart rate from ANT+ heart rate sensors.
|
|
|
|
Requires an ANT+ USB stick, the following models might work:
|
|
- Garmin USB or USB2 ANT+ or an off-brand clone of it (ID 0x1008)
|
|
- Garmin mini ANT+ (ID 0x1009)
|
|
*/
|
|
import log from 'loglevel'
|
|
import Ant from 'ant-plus'
|
|
import EventEmitter from 'node:events'
|
|
|
|
function createAntManager () {
|
|
const emitter = new EventEmitter()
|
|
const antStick = new Ant.GarminStick2()
|
|
const antStick3 = new Ant.GarminStick3()
|
|
// it seems that we have to use two separate heart rate sensors to support both old and new
|
|
// ant sticks, since the library requires them to be bound before open is called
|
|
const heartrateSensor = new Ant.HeartRateSensor(antStick)
|
|
const heartrateSensor3 = new Ant.HeartRateSensor(antStick3)
|
|
|
|
heartrateSensor.on('hbData', (data) => {
|
|
emitter.emit('heartrateMeasurement', { heartrate: data.ComputedHeartRate, batteryLevel: data.BatteryLevel })
|
|
})
|
|
|
|
heartrateSensor3.on('hbData', (data) => {
|
|
emitter.emit('heartrateMeasurement', { heartrate: data.ComputedHeartRate, batteryLevel: data.BatteryLevel })
|
|
})
|
|
|
|
antStick.on('startup', () => {
|
|
log.info('classic ANT+ stick found')
|
|
heartrateSensor.attach(0, 0)
|
|
})
|
|
|
|
antStick3.on('startup', () => {
|
|
log.info('mini ANT+ stick found')
|
|
heartrateSensor3.attach(0, 0)
|
|
})
|
|
|
|
antStick.on('shutdown', () => {
|
|
log.info('classic ANT+ stick lost')
|
|
})
|
|
|
|
antStick3.on('shutdown', () => {
|
|
log.info('mini ANT+ stick lost')
|
|
})
|
|
|
|
if (!antStick.open()) {
|
|
log.debug('classic ANT+ stick NOT found')
|
|
}
|
|
|
|
if (!antStick3.open()) {
|
|
log.debug('mini ANT+ stick NOT found')
|
|
}
|
|
|
|
return Object.assign(emitter, {
|
|
})
|
|
}
|
|
|
|
export { createAntManager }
|