openrowingmonitor/app/ble/pm5/characteristic/ControlTransmit.js

45 lines
1.3 KiB
JavaScript

'use strict'
/*
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
Implementation of the ControlTransmit Characteristic as defined in:
https://www.concept2.co.uk/files/pdf/us/monitors/PM5_BluetoothSmartInterfaceDefinition.pdf
Used to transmit controls to the central
*/
import bleno from '@abandonware/bleno'
import { getFullUUID } from '../Pm5Constants.js'
import log from 'loglevel'
import BufferBuilder from '../../BufferBuilder.js'
export default class ControlTransmit extends bleno.Characteristic {
constructor () {
super({
// id for ControlTransmit as defined in the spec
uuid: getFullUUID('0022'),
value: null,
properties: ['notify']
})
this._updateValueCallback = null
}
onSubscribe (maxValueSize, updateValueCallback) {
log.debug(`ControlTransmit - central subscribed with maxSize: ${maxValueSize}`)
this._updateValueCallback = updateValueCallback
return this.RESULT_SUCCESS
}
onUnsubscribe () {
log.debug('ControlTransmit - central unsubscribed')
this._updateValueCallback = null
return this.RESULT_UNLIKELY_ERROR
}
notify (data) {
if (this._updateValueCallback) {
const bufferBuilder = new BufferBuilder()
this._updateValueCallback(bufferBuilder.getBuffer())
return this.RESULT_SUCCESS
}
}
}