UNPKG

zigbee-herdsman

Version:

An open source ZigBee gateway solution with node.js.

93 lines (79 loc) 3.84 kB
import {SLStatus} from "../../../src/adapter/ember/enums"; import {EzspBuffalo} from "../../../src/adapter/ember/ezsp/buffalo"; import { EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX, EZSP_FRAME_CONTROL_COMMAND, EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK, EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET, EZSP_FRAME_CONTROL_SLEEP_MODE_MASK, EZSP_FRAME_ID_INDEX, EZSP_MAX_FRAME_LENGTH, EZSP_PARAMETERS_INDEX, EZSP_SEQUENCE_INDEX, } from "../../../src/adapter/ember/ezsp/consts"; import {EzspFrameID} from "../../../src/adapter/ember/ezsp/enums"; import {lowByte} from "../../../src/adapter/ember/utils/math"; describe("Ember EZSP Buffalo", () => { let buffalo: EzspBuffalo; beforeAll(async () => {}); afterAll(async () => {}); beforeEach(() => { buffalo = new EzspBuffalo(Buffer.alloc(EZSP_MAX_FRAME_LENGTH)); }); afterEach(() => {}); it("Is empty after init", () => { expect(buffalo.getWritten()).toStrictEqual(Buffer.from([])); }); it("Writes & read at position without altering internal position tracker", () => { // mock send `version` command logic flow buffalo.setPosition(EZSP_PARAMETERS_INDEX); buffalo.setCommandByte(EZSP_FRAME_ID_INDEX, lowByte(EzspFrameID.VERSION)); buffalo.setCommandByte(EZSP_SEQUENCE_INDEX, 0); buffalo.setCommandByte( EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX, EZSP_FRAME_CONTROL_COMMAND | (0x00 & EZSP_FRAME_CONTROL_SLEEP_MODE_MASK) | ((0x00 << EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET) & EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK), ); buffalo.writeUInt8(12); // desiredProtocolVersion expect(buffalo.getWritten()).toStrictEqual(Buffer.from([0x00, 0x00, 0x00, 0x0c])); expect(buffalo.getCommandByte(EZSP_FRAME_ID_INDEX)).toStrictEqual(lowByte(EzspFrameID.VERSION)); expect(buffalo.getCommandByte(EZSP_SEQUENCE_INDEX)).toStrictEqual(0); expect(buffalo.getCommandByte(EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX)).toStrictEqual( EZSP_FRAME_CONTROL_COMMAND | (0x00 & EZSP_FRAME_CONTROL_SLEEP_MODE_MASK) | ((0x00 << EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET) & EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK), ); }); it("Maps EmberStatus/EzspStatus to SLStatus", () => { buffalo.setCommandByte(0, 0x00); buffalo.setCommandByte(1, 0x00); buffalo.setCommandByte(2, 0x00); buffalo.setCommandByte(3, 0x00); // zero always zero buffalo.setPosition(0); expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.OK); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.OK); buffalo.setPosition(0); expect(buffalo.readStatus(0x0e)).toStrictEqual(SLStatus.OK); buffalo.setPosition(0); expect(buffalo.readStatus(0x0e, false)).toStrictEqual(SLStatus.OK); buffalo.setCommandByte(0, 0x02); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.INVALID_PARAMETER); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR); buffalo.setCommandByte(0, 0x9c); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.ZIGBEE_NETWORK_OPENED); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR); // no mapped value buffalo.setCommandByte(0, 0x4b); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.BUS_ERROR); buffalo.setPosition(0); expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR); }); });