funlogic-io/zwave-serialapi

View on GitHub
lib/serialapi/functions/func-14.js

Summary

Maintainability
A
0 mins
Test Coverage
const consts = require('../consts')
const { transmitStatusFormat } = require('./formats')
const funcUtils = require('./func-utils')

const name = 'sendDataMulti'
const funcId = consts.FUNC_ID_ZW_SEND_DATA_MULTI

function encodeTransmitOptions (options) {
  let result = 0x00
  if (options.acknoledge) result |= consts.TRANSMIT_OPTION_ACK
  if (options.lowPower) result |= consts.TRANSMIT_OPTION_LOW_POWER
  if (options.autoRoute) result |= consts.TRANSMIT_OPTION_AUTO_ROUTE
  if (options.noRoute) result |= consts.TRANSMIT_OPTION_NO_ROUTE
  if (options.explore) result |= consts.TRANSMIT_OPTION_EXPLORE
  return result
}

function encodeRequestData (request, params) {
  const transmitOptions = request.transmitOptions || {
    acknoledge: true,
    lowPower: false,
    autoRoute: true,
    explore: false
  }

  const data = []
  const command = request.command

  data.push(request.nodeIds.length)
  data.push(...request.nodeIds)
  data.push(command.length)
  data.push(...command)
  data.push(encodeTransmitOptions(transmitOptions))
  data.push(params.callbackId)

  return data
}

function decodeCallbackData (reader, result) {
  const callbackId = reader.readByte()
  result.txStatus = reader.readByte(txStatus => transmitStatusFormat.format(txStatus))
  return { callbackId }
}

module.exports = {
  name,
  funcId,
  encodeRequest: funcUtils.buildRequestEncoder(funcId, encodeRequestData),
  decodeResponse: funcUtils.buildBooleanResponseDecoder(funcId),
  decodeCallback: funcUtils.buildCallbackDecoder(funcId, decodeCallbackData)
}