54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
'use strict'
|
|
/*
|
|
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
|
|
|
|
A buffer builder that simplifies the creation of payloads for BLE messages
|
|
*/
|
|
import log from 'loglevel'
|
|
|
|
export default class BufferBuilder {
|
|
constructor () {
|
|
this._dataArray = []
|
|
}
|
|
|
|
writeUInt8 (value) {
|
|
const buffer = Buffer.alloc(1)
|
|
try {
|
|
buffer.writeUInt8(value || 0)
|
|
} catch (error) {
|
|
log.warn(error)
|
|
}
|
|
this._dataArray.push(buffer)
|
|
}
|
|
|
|
writeUInt16LE (value) {
|
|
const buffer = Buffer.alloc(2)
|
|
try {
|
|
buffer.writeUInt16LE(value || 0)
|
|
} catch (error) {
|
|
log.warn(error)
|
|
}
|
|
this._dataArray.push(buffer)
|
|
}
|
|
|
|
writeUInt24LE (value) {
|
|
const _value = value || 0
|
|
const buffer = Buffer.alloc(3)
|
|
if (value > 0xffffff || value < 0) {
|
|
log.warn(new RangeError(`The value of "value" is out of range. It must be >= 0 and <= ${0xffffff}. Received ${value}`))
|
|
} else {
|
|
try {
|
|
buffer.writeUInt8(_value & 255)
|
|
buffer.writeUInt16LE(_value >> 8, 1)
|
|
} catch (error) {
|
|
log.warn(error)
|
|
}
|
|
}
|
|
this._dataArray.push(buffer)
|
|
}
|
|
|
|
getBuffer () {
|
|
return Buffer.concat(this._dataArray)
|
|
}
|
|
}
|