zigbee-herdsman 6.0.2 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/package.json +12 -3
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/dependabot.yml +0 -22
- package/.github/workflows/ci.yml +0 -69
- package/.github/workflows/release-please.yml +0 -18
- package/.github/workflows/stale.yml +0 -20
- package/.github/workflows/typedoc.yaml +0 -47
- package/.release-please-manifest.json +0 -3
- package/.vscode/extensions.json +0 -3
- package/.vscode/settings.json +0 -11
- package/biome.json +0 -98
- package/examples/join-and-log.js +0 -24
- package/release-please-config.json +0 -9
- package/src/adapter/adapter.ts +0 -189
- package/src/adapter/adapterDiscovery.ts +0 -666
- package/src/adapter/const.ts +0 -12
- package/src/adapter/deconz/adapter/deconzAdapter.ts +0 -877
- package/src/adapter/deconz/driver/constants.ts +0 -246
- package/src/adapter/deconz/driver/driver.ts +0 -1540
- package/src/adapter/deconz/driver/frame.ts +0 -11
- package/src/adapter/deconz/driver/frameParser.ts +0 -753
- package/src/adapter/deconz/driver/parser.ts +0 -45
- package/src/adapter/deconz/driver/writer.ts +0 -22
- package/src/adapter/deconz/types.d.ts +0 -13
- package/src/adapter/ember/adapter/emberAdapter.ts +0 -2265
- package/src/adapter/ember/adapter/endpoints.ts +0 -86
- package/src/adapter/ember/adapter/oneWaitress.ts +0 -324
- package/src/adapter/ember/adapter/tokensManager.ts +0 -782
- package/src/adapter/ember/consts.ts +0 -178
- package/src/adapter/ember/enums.ts +0 -1746
- package/src/adapter/ember/ezsp/buffalo.ts +0 -1392
- package/src/adapter/ember/ezsp/consts.ts +0 -148
- package/src/adapter/ember/ezsp/enums.ts +0 -1114
- package/src/adapter/ember/ezsp/ezsp.ts +0 -9061
- package/src/adapter/ember/ezspError.ts +0 -10
- package/src/adapter/ember/types.ts +0 -866
- package/src/adapter/ember/uart/ash.ts +0 -1960
- package/src/adapter/ember/uart/consts.ts +0 -109
- package/src/adapter/ember/uart/enums.ts +0 -192
- package/src/adapter/ember/uart/parser.ts +0 -48
- package/src/adapter/ember/uart/queues.ts +0 -247
- package/src/adapter/ember/uart/writer.ts +0 -53
- package/src/adapter/ember/utils/initters.ts +0 -58
- package/src/adapter/ember/utils/math.ts +0 -73
- package/src/adapter/events.ts +0 -21
- package/src/adapter/ezsp/adapter/backup.ts +0 -109
- package/src/adapter/ezsp/adapter/ezspAdapter.ts +0 -614
- package/src/adapter/ezsp/driver/commands.ts +0 -2497
- package/src/adapter/ezsp/driver/consts.ts +0 -11
- package/src/adapter/ezsp/driver/driver.ts +0 -1002
- package/src/adapter/ezsp/driver/ezsp.ts +0 -802
- package/src/adapter/ezsp/driver/frame.ts +0 -101
- package/src/adapter/ezsp/driver/index.ts +0 -4
- package/src/adapter/ezsp/driver/multicast.ts +0 -78
- package/src/adapter/ezsp/driver/parser.ts +0 -81
- package/src/adapter/ezsp/driver/types/basic.ts +0 -201
- package/src/adapter/ezsp/driver/types/index.ts +0 -239
- package/src/adapter/ezsp/driver/types/named.ts +0 -2330
- package/src/adapter/ezsp/driver/types/struct.ts +0 -844
- package/src/adapter/ezsp/driver/uart.ts +0 -460
- package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +0 -44
- package/src/adapter/ezsp/driver/utils/index.ts +0 -32
- package/src/adapter/ezsp/driver/writer.ts +0 -64
- package/src/adapter/index.ts +0 -3
- package/src/adapter/serialPort.ts +0 -58
- package/src/adapter/socketPortUtils.ts +0 -16
- package/src/adapter/tstype.ts +0 -78
- package/src/adapter/z-stack/adapter/adapter-backup.ts +0 -519
- package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +0 -457
- package/src/adapter/z-stack/adapter/endpoints.ts +0 -57
- package/src/adapter/z-stack/adapter/manager.ts +0 -543
- package/src/adapter/z-stack/adapter/tstype.ts +0 -6
- package/src/adapter/z-stack/adapter/zStackAdapter.ts +0 -1190
- package/src/adapter/z-stack/constants/af.ts +0 -27
- package/src/adapter/z-stack/constants/common.ts +0 -285
- package/src/adapter/z-stack/constants/dbg.ts +0 -23
- package/src/adapter/z-stack/constants/index.ts +0 -11
- package/src/adapter/z-stack/constants/mac.ts +0 -128
- package/src/adapter/z-stack/constants/sapi.ts +0 -25
- package/src/adapter/z-stack/constants/sys.ts +0 -72
- package/src/adapter/z-stack/constants/util.ts +0 -82
- package/src/adapter/z-stack/constants/utils.ts +0 -14
- package/src/adapter/z-stack/constants/zdo.ts +0 -103
- package/src/adapter/z-stack/models/startup-options.ts +0 -13
- package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +0 -44
- package/src/adapter/z-stack/structs/entries/address-manager-table.ts +0 -19
- package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +0 -12
- package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +0 -21
- package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +0 -19
- package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +0 -21
- package/src/adapter/z-stack/structs/entries/channel-list.ts +0 -8
- package/src/adapter/z-stack/structs/entries/has-configured.ts +0 -16
- package/src/adapter/z-stack/structs/entries/index.ts +0 -16
- package/src/adapter/z-stack/structs/entries/nib.ts +0 -66
- package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +0 -15
- package/src/adapter/z-stack/structs/entries/nwk-key.ts +0 -13
- package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +0 -8
- package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +0 -20
- package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +0 -19
- package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +0 -33
- package/src/adapter/z-stack/structs/entries/security-manager-table.ts +0 -22
- package/src/adapter/z-stack/structs/index.ts +0 -4
- package/src/adapter/z-stack/structs/serializable-memory-object.ts +0 -14
- package/src/adapter/z-stack/structs/struct.ts +0 -367
- package/src/adapter/z-stack/structs/table.ts +0 -198
- package/src/adapter/z-stack/unpi/constants.ts +0 -33
- package/src/adapter/z-stack/unpi/frame.ts +0 -62
- package/src/adapter/z-stack/unpi/index.ts +0 -4
- package/src/adapter/z-stack/unpi/parser.ts +0 -56
- package/src/adapter/z-stack/unpi/writer.ts +0 -21
- package/src/adapter/z-stack/utils/channel-list.ts +0 -40
- package/src/adapter/z-stack/utils/index.ts +0 -2
- package/src/adapter/z-stack/utils/network-options.ts +0 -26
- package/src/adapter/z-stack/znp/buffaloZnp.ts +0 -175
- package/src/adapter/z-stack/znp/definition.ts +0 -2713
- package/src/adapter/z-stack/znp/index.ts +0 -2
- package/src/adapter/z-stack/znp/parameterType.ts +0 -22
- package/src/adapter/z-stack/znp/tstype.ts +0 -44
- package/src/adapter/z-stack/znp/utils.ts +0 -10
- package/src/adapter/z-stack/znp/znp.ts +0 -342
- package/src/adapter/z-stack/znp/zpiObject.ts +0 -148
- package/src/adapter/zboss/adapter/zbossAdapter.ts +0 -526
- package/src/adapter/zboss/commands.ts +0 -1184
- package/src/adapter/zboss/consts.ts +0 -9
- package/src/adapter/zboss/driver.ts +0 -422
- package/src/adapter/zboss/enums.ts +0 -360
- package/src/adapter/zboss/frame.ts +0 -227
- package/src/adapter/zboss/reader.ts +0 -65
- package/src/adapter/zboss/types.ts +0 -0
- package/src/adapter/zboss/uart.ts +0 -428
- package/src/adapter/zboss/utils.ts +0 -58
- package/src/adapter/zboss/writer.ts +0 -49
- package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +0 -27
- package/src/adapter/zigate/adapter/zigateAdapter.ts +0 -618
- package/src/adapter/zigate/driver/LICENSE +0 -17
- package/src/adapter/zigate/driver/buffaloZiGate.ts +0 -212
- package/src/adapter/zigate/driver/commandType.ts +0 -418
- package/src/adapter/zigate/driver/constants.ts +0 -150
- package/src/adapter/zigate/driver/frame.ts +0 -197
- package/src/adapter/zigate/driver/messageType.ts +0 -287
- package/src/adapter/zigate/driver/parameterType.ts +0 -32
- package/src/adapter/zigate/driver/ziGateObject.ts +0 -146
- package/src/adapter/zigate/driver/zigate.ts +0 -423
- package/src/adapter/zoh/adapter/utils.ts +0 -27
- package/src/adapter/zoh/adapter/zohAdapter.ts +0 -838
- package/src/buffalo/buffalo.ts +0 -342
- package/src/buffalo/index.ts +0 -1
- package/src/controller/controller.ts +0 -1022
- package/src/controller/database.ts +0 -124
- package/src/controller/events.ts +0 -52
- package/src/controller/greenPower.ts +0 -603
- package/src/controller/helpers/index.ts +0 -1
- package/src/controller/helpers/installCodes.ts +0 -107
- package/src/controller/helpers/request.ts +0 -96
- package/src/controller/helpers/requestQueue.ts +0 -125
- package/src/controller/helpers/zclFrameConverter.ts +0 -47
- package/src/controller/helpers/zclTransactionSequenceNumber.ts +0 -19
- package/src/controller/index.ts +0 -6
- package/src/controller/model/device.ts +0 -1249
- package/src/controller/model/endpoint.ts +0 -1105
- package/src/controller/model/entity.ts +0 -23
- package/src/controller/model/group.ts +0 -424
- package/src/controller/model/index.ts +0 -5
- package/src/controller/model/zigbeeEntity.ts +0 -30
- package/src/controller/touchlink.ts +0 -189
- package/src/controller/tstype.ts +0 -274
- package/src/index.ts +0 -12
- package/src/models/backup-storage-legacy.ts +0 -48
- package/src/models/backup-storage-unified.ts +0 -47
- package/src/models/backup.ts +0 -37
- package/src/models/index.ts +0 -5
- package/src/models/network-options.ts +0 -11
- package/src/utils/backup.ts +0 -152
- package/src/utils/index.ts +0 -5
- package/src/utils/logger.ts +0 -20
- package/src/utils/patchBigIntSerialization.ts +0 -8
- package/src/utils/queue.ts +0 -76
- package/src/utils/types.d.ts +0 -3
- package/src/utils/utils.ts +0 -19
- package/src/utils/wait.ts +0 -5
- package/src/utils/waitress.ts +0 -96
- package/src/zspec/consts.ts +0 -84
- package/src/zspec/enums.ts +0 -22
- package/src/zspec/index.ts +0 -3
- package/src/zspec/tstypes.ts +0 -18
- package/src/zspec/utils.ts +0 -247
- package/src/zspec/zcl/buffaloZcl.ts +0 -1220
- package/src/zspec/zcl/definition/cluster.ts +0 -5915
- package/src/zspec/zcl/definition/clusters-typegen.ts +0 -588
- package/src/zspec/zcl/definition/clusters-types.ts +0 -7331
- package/src/zspec/zcl/definition/consts.ts +0 -24
- package/src/zspec/zcl/definition/enums.ts +0 -203
- package/src/zspec/zcl/definition/foundation.ts +0 -329
- package/src/zspec/zcl/definition/manufacturerCode.ts +0 -729
- package/src/zspec/zcl/definition/status.ts +0 -69
- package/src/zspec/zcl/definition/tstype.ts +0 -377
- package/src/zspec/zcl/index.ts +0 -11
- package/src/zspec/zcl/utils.ts +0 -321
- package/src/zspec/zcl/zclFrame.ts +0 -356
- package/src/zspec/zcl/zclHeader.ts +0 -102
- package/src/zspec/zcl/zclStatusError.ts +0 -10
- package/src/zspec/zdo/buffaloZdo.ts +0 -2336
- package/src/zspec/zdo/definition/clusters.ts +0 -722
- package/src/zspec/zdo/definition/consts.ts +0 -16
- package/src/zspec/zdo/definition/enums.ts +0 -99
- package/src/zspec/zdo/definition/status.ts +0 -105
- package/src/zspec/zdo/definition/tstypes.ts +0 -1062
- package/src/zspec/zdo/index.ts +0 -7
- package/src/zspec/zdo/utils.ts +0 -76
- package/src/zspec/zdo/zdoStatusError.ts +0 -10
- package/test/adapter/adapter.test.ts +0 -1062
- package/test/adapter/ember/ash.test.ts +0 -337
- package/test/adapter/ember/consts.ts +0 -131
- package/test/adapter/ember/emberAdapter.test.ts +0 -3449
- package/test/adapter/ember/ezsp.test.ts +0 -385
- package/test/adapter/ember/ezspBuffalo.test.ts +0 -93
- package/test/adapter/ember/ezspError.test.ts +0 -12
- package/test/adapter/ember/math.test.ts +0 -206
- package/test/adapter/ezsp/frame.test.ts +0 -30
- package/test/adapter/ezsp/uart.test.ts +0 -181
- package/test/adapter/z-stack/adapter.test.ts +0 -3984
- package/test/adapter/z-stack/constants.test.ts +0 -33
- package/test/adapter/z-stack/structs.test.ts +0 -115
- package/test/adapter/z-stack/unpi.test.ts +0 -213
- package/test/adapter/z-stack/znp.test.ts +0 -1284
- package/test/adapter/zboss/fixZdoResponse.test.ts +0 -179
- package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +0 -81
- package/test/adapter/zigate/zdo.test.ts +0 -187
- package/test/adapter/zoh/utils.test.ts +0 -36
- package/test/adapter/zoh/zohAdapter.test.ts +0 -1307
- package/test/benchOptions.ts +0 -14
- package/test/buffalo.test.ts +0 -431
- package/test/controller.bench.ts +0 -214
- package/test/controller.test.ts +0 -8702
- package/test/greenpower.test.ts +0 -1408
- package/test/mockAdapters.ts +0 -65
- package/test/mockDevices.ts +0 -598
- package/test/requests.bench.ts +0 -229
- package/test/testUtils.ts +0 -20
- package/test/tsconfig.json +0 -9
- package/test/utils/math.ts +0 -19
- package/test/utils.test.ts +0 -279
- package/test/vitest.config.mts +0 -26
- package/test/zcl.test.ts +0 -2831
- package/test/zspec/utils.test.ts +0 -68
- package/test/zspec/zcl/buffalo.test.ts +0 -1374
- package/test/zspec/zcl/frame.test.ts +0 -960
- package/test/zspec/zcl/utils.test.ts +0 -273
- package/test/zspec/zdo/buffalo.test.ts +0 -1850
- package/test/zspec/zdo/utils.test.ts +0 -241
- package/tsconfig.json +0 -24
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
import {MockBinding} from "@serialport/binding-mock";
|
|
2
|
-
import type {Mock, MockInstance} from "vitest";
|
|
3
|
-
import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest";
|
|
4
|
-
import {EzspStatus} from "../../../src/adapter/ember/enums";
|
|
5
|
-
import {Ezsp} from "../../../src/adapter/ember/ezsp/ezsp";
|
|
6
|
-
import {
|
|
7
|
-
ASH_ACK_FIRST_BYTES,
|
|
8
|
-
adapterSONOFFDongleE,
|
|
9
|
-
INCOMING_MESSAGE_HANDLER_FN2_ASH_RAW,
|
|
10
|
-
MESSAGE_SENT_HANDLER_FN0_ASH_RAW,
|
|
11
|
-
MESSAGE_SENT_HANDLER_FN1_ASH_RAW,
|
|
12
|
-
RCED_DATA_VERSION,
|
|
13
|
-
RCED_DATA_VERSION_RES,
|
|
14
|
-
RCED_DATA_WITH_CRC_ERROR,
|
|
15
|
-
RCED_ERROR_WATCHDOG_BYTES,
|
|
16
|
-
RECD_ERROR_ACK_TIMEOUT_BYTES,
|
|
17
|
-
RECD_RSTACK_BYTES,
|
|
18
|
-
SEND_ACK_FIRST_BYTES,
|
|
19
|
-
SEND_DATA_VERSION,
|
|
20
|
-
SEND_RST_BYTES,
|
|
21
|
-
SEND_UNICAST_REPLY_FN0_ASH_RAW,
|
|
22
|
-
SET_POLICY_REPLY_FN1_ASH_RAW,
|
|
23
|
-
} from "./consts";
|
|
24
|
-
|
|
25
|
-
const emitFromSerial = async (ezsp: Ezsp, data: Buffer, skipAdvanceTimers = false): Promise<void> => {
|
|
26
|
-
//@ts-expect-error private
|
|
27
|
-
ezsp.ash.serialPort.port.emitData(Buffer.from(data));
|
|
28
|
-
|
|
29
|
-
if (!skipAdvanceTimers) {
|
|
30
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const advanceTime100ms = async (times: number): Promise<void> => {
|
|
35
|
-
for (let i = 0; i < times; i++) {
|
|
36
|
-
await vi.advanceTimersByTimeAsync(100);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const advanceTimeToRSTACK = async (): Promise<void> => {
|
|
41
|
-
// mock time waited for real RSTACK (avg time of 1100ms)
|
|
42
|
-
await advanceTime100ms(10);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const POST_RSTACK_SERIAL_BYTES = Buffer.from([...SEND_RST_BYTES, ...ASH_ACK_FIRST_BYTES]);
|
|
46
|
-
const mocks: Mock[] = [];
|
|
47
|
-
|
|
48
|
-
describe("Ember Ezsp Layer", () => {
|
|
49
|
-
const openOpts = {path: "/dev/ttyACM0", baudRate: 115200, binding: MockBinding};
|
|
50
|
-
let ezsp: Ezsp;
|
|
51
|
-
|
|
52
|
-
beforeAll(() => {
|
|
53
|
-
vi.useRealTimers();
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
afterAll(() => {});
|
|
57
|
-
|
|
58
|
-
beforeEach(() => {
|
|
59
|
-
for (const mock of mocks) {
|
|
60
|
-
mock.mockClear();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
ezsp = new Ezsp(openOpts);
|
|
64
|
-
MockBinding.createPort("/dev/ttyACM0", {record: true, ...adapterSONOFFDongleE});
|
|
65
|
-
vi.useFakeTimers();
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
afterEach(async () => {
|
|
69
|
-
vi.useRealTimers();
|
|
70
|
-
await ezsp.stop();
|
|
71
|
-
MockBinding.reset();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it("Starts ASH layer normally", async () => {
|
|
75
|
-
const startResult = ezsp.start();
|
|
76
|
-
|
|
77
|
-
await advanceTimeToRSTACK();
|
|
78
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
79
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
80
|
-
//@ts-expect-error private
|
|
81
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
82
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it("Starts ASH layer ignoring noise from port", async () => {
|
|
86
|
-
const ashEmitSpy = vi.spyOn(ezsp.ash, "emit");
|
|
87
|
-
// @ts-expect-error private
|
|
88
|
-
const onAshFatalErrorSpy = vi.spyOn(ezsp, "onAshFatalError");
|
|
89
|
-
const startResult = ezsp.start();
|
|
90
|
-
|
|
91
|
-
await advanceTime100ms(2);
|
|
92
|
-
await emitFromSerial(ezsp, RCED_DATA_WITH_CRC_ERROR, true);
|
|
93
|
-
await advanceTimeToRSTACK();
|
|
94
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
95
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
96
|
-
//@ts-expect-error private
|
|
97
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
98
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
99
|
-
expect(ezsp.ash.counters.rxCrcErrors).toStrictEqual(1);
|
|
100
|
-
expect(ashEmitSpy).not.toHaveBeenCalled();
|
|
101
|
-
expect(onAshFatalErrorSpy).not.toHaveBeenCalled();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it("Starts ASH layer even when received ERROR from port", async () => {
|
|
105
|
-
const startResult = ezsp.start();
|
|
106
|
-
|
|
107
|
-
await advanceTime100ms(2);
|
|
108
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_ERROR_ACK_TIMEOUT_BYTES), true);
|
|
109
|
-
await advanceTimeToRSTACK();
|
|
110
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
111
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
112
|
-
//@ts-expect-error private
|
|
113
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
114
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("Starts ASH layer when received ERROR RESET_WATCHDOG from port", async () => {
|
|
118
|
-
const startResult = ezsp.start();
|
|
119
|
-
|
|
120
|
-
await advanceTime100ms(2);
|
|
121
|
-
await emitFromSerial(ezsp, Buffer.from(RCED_ERROR_WATCHDOG_BYTES), true);
|
|
122
|
-
await advanceTimeToRSTACK();
|
|
123
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
124
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
125
|
-
//@ts-expect-error private
|
|
126
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
127
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("Starts ASH layer when received duplicate RSTACK from port right after first ACK", async () => {
|
|
131
|
-
const ashEmitSpy = vi.spyOn(ezsp.ash, "emit");
|
|
132
|
-
let restart: () => Promise<EzspStatus>;
|
|
133
|
-
// @ts-expect-error private
|
|
134
|
-
const onAshFatalErrorSpy = vi.spyOn(ezsp, "onAshFatalError").mockImplementationOnce((_status: EzspStatus): void => {
|
|
135
|
-
// mimic EmberAdapter onNcpNeedsResetAndInit
|
|
136
|
-
restart = async () => {
|
|
137
|
-
vi.useRealTimers();
|
|
138
|
-
await ezsp.stop();
|
|
139
|
-
vi.useFakeTimers();
|
|
140
|
-
|
|
141
|
-
ezsp = new Ezsp(openOpts);
|
|
142
|
-
const startResult = ezsp.start();
|
|
143
|
-
|
|
144
|
-
await advanceTimeToRSTACK();
|
|
145
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
146
|
-
return await Promise.resolve(startResult);
|
|
147
|
-
};
|
|
148
|
-
});
|
|
149
|
-
const startResult = ezsp.start();
|
|
150
|
-
|
|
151
|
-
await advanceTimeToRSTACK();
|
|
152
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
153
|
-
//@ts-expect-error private
|
|
154
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
155
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
156
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS); // dup is received after this returns
|
|
157
|
-
expect(ezsp.checkConnection()).toBeFalsy();
|
|
158
|
-
// @ts-expect-error set via emit
|
|
159
|
-
expect(restart).toBeDefined();
|
|
160
|
-
// @ts-expect-error set via emit
|
|
161
|
-
await expect(restart()).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
162
|
-
//@ts-expect-error private
|
|
163
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
164
|
-
expect(ashEmitSpy).toHaveBeenCalledWith("fatalError", EzspStatus.HOST_FATAL_ERROR);
|
|
165
|
-
expect(onAshFatalErrorSpy).toHaveBeenCalledWith(EzspStatus.HOST_FATAL_ERROR);
|
|
166
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
it("Starts ASH layer with messy hardware flow control", async () => {
|
|
170
|
-
// https://github.com/Koenkk/zigbee-herdsman/issues/943
|
|
171
|
-
const ashEmitSpy = vi.spyOn(ezsp.ash, "emit");
|
|
172
|
-
let restart: () => Promise<EzspStatus>;
|
|
173
|
-
// @ts-expect-error private
|
|
174
|
-
const onAshFatalErrorSpy = vi.spyOn(ezsp, "onAshFatalError").mockImplementationOnce((_status: EzspStatus): void => {
|
|
175
|
-
// mimic EmberAdapter onNcpNeedsResetAndInit
|
|
176
|
-
restart = async () => {
|
|
177
|
-
vi.useRealTimers();
|
|
178
|
-
await ezsp.stop();
|
|
179
|
-
vi.useFakeTimers();
|
|
180
|
-
|
|
181
|
-
ezsp = new Ezsp(openOpts);
|
|
182
|
-
const startResult = ezsp.start();
|
|
183
|
-
|
|
184
|
-
await advanceTimeToRSTACK();
|
|
185
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
186
|
-
return await Promise.resolve(startResult);
|
|
187
|
-
};
|
|
188
|
-
});
|
|
189
|
-
const startResult = ezsp.start();
|
|
190
|
-
|
|
191
|
-
await advanceTime100ms(2);
|
|
192
|
-
await emitFromSerial(ezsp, Buffer.from(RCED_ERROR_WATCHDOG_BYTES), true);
|
|
193
|
-
await advanceTimeToRSTACK();
|
|
194
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
195
|
-
//@ts-expect-error private
|
|
196
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
197
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
198
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS); // dup is received after this returns
|
|
199
|
-
expect(ezsp.checkConnection()).toBeFalsy();
|
|
200
|
-
// @ts-expect-error set via emit
|
|
201
|
-
expect(restart).toBeDefined();
|
|
202
|
-
// @ts-expect-error set via emit
|
|
203
|
-
await expect(restart()).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
204
|
-
//@ts-expect-error private
|
|
205
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
206
|
-
expect(ashEmitSpy).toHaveBeenCalledWith("fatalError", EzspStatus.HOST_FATAL_ERROR);
|
|
207
|
-
expect(onAshFatalErrorSpy).toHaveBeenCalledWith(EzspStatus.HOST_FATAL_ERROR);
|
|
208
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it("Restarts ASH layer when received ERROR from port", async () => {
|
|
212
|
-
let restart: () => Promise<EzspStatus>;
|
|
213
|
-
// @ts-expect-error private
|
|
214
|
-
const onAshFatalErrorSpy = vi.spyOn(ezsp, "onAshFatalError").mockImplementationOnce((_status: EzspStatus): void => {
|
|
215
|
-
// mimic EmberAdapter onNcpNeedsResetAndInit
|
|
216
|
-
restart = async () => {
|
|
217
|
-
vi.useRealTimers();
|
|
218
|
-
await ezsp.stop();
|
|
219
|
-
vi.useFakeTimers();
|
|
220
|
-
|
|
221
|
-
ezsp = new Ezsp(openOpts);
|
|
222
|
-
const startResult = ezsp.start();
|
|
223
|
-
|
|
224
|
-
await advanceTimeToRSTACK();
|
|
225
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
226
|
-
return await Promise.resolve(startResult);
|
|
227
|
-
};
|
|
228
|
-
});
|
|
229
|
-
const startResult = ezsp.start();
|
|
230
|
-
|
|
231
|
-
await advanceTimeToRSTACK();
|
|
232
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
233
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
234
|
-
//@ts-expect-error private
|
|
235
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
236
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
237
|
-
// started clean
|
|
238
|
-
|
|
239
|
-
const version = ezsp.ezspVersion(13);
|
|
240
|
-
|
|
241
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
242
|
-
await emitFromSerial(ezsp, RCED_DATA_VERSION);
|
|
243
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
244
|
-
await expect(version).resolves.toStrictEqual(RCED_DATA_VERSION_RES);
|
|
245
|
-
//@ts-expect-error private
|
|
246
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(
|
|
247
|
-
Buffer.from([...POST_RSTACK_SERIAL_BYTES, ...SEND_DATA_VERSION, ...SEND_ACK_FIRST_BYTES]),
|
|
248
|
-
);
|
|
249
|
-
|
|
250
|
-
await vi.advanceTimersByTimeAsync(10000); // any time after startup sequence
|
|
251
|
-
|
|
252
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_ERROR_ACK_TIMEOUT_BYTES));
|
|
253
|
-
expect(ezsp.checkConnection()).toBeFalsy();
|
|
254
|
-
// @ts-expect-error set via emit
|
|
255
|
-
expect(restart).toBeDefined();
|
|
256
|
-
// @ts-expect-error set via emit
|
|
257
|
-
await expect(restart()).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
258
|
-
//@ts-expect-error private
|
|
259
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
260
|
-
expect(onAshFatalErrorSpy).toHaveBeenCalledWith(EzspStatus.HOST_FATAL_ERROR);
|
|
261
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
it("Throws on send command with ASH connection problem", async () => {
|
|
265
|
-
const startResult = ezsp.start();
|
|
266
|
-
|
|
267
|
-
await advanceTimeToRSTACK();
|
|
268
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
269
|
-
await expect(startResult).resolves.toStrictEqual(EzspStatus.SUCCESS);
|
|
270
|
-
//@ts-expect-error private
|
|
271
|
-
expect(ezsp.ash.serialPort.port.recording).toStrictEqual(POST_RSTACK_SERIAL_BYTES);
|
|
272
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
273
|
-
// started clean
|
|
274
|
-
|
|
275
|
-
// mimic error that doesn't trigger FATAL_ERROR event
|
|
276
|
-
await ezsp.ash.stop();
|
|
277
|
-
|
|
278
|
-
await expect(ezsp.ezspVersion(13)).rejects.toThrow(EzspStatus[EzspStatus.NOT_CONNECTED]);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
describe("When connected", () => {
|
|
282
|
-
let callbackDispatchSpy: MockInstance;
|
|
283
|
-
const mockResponseWaiterResolve = vi.fn();
|
|
284
|
-
let ashSendExecSpy: MockInstance;
|
|
285
|
-
|
|
286
|
-
beforeEach(async () => {
|
|
287
|
-
const startResult = ezsp.start();
|
|
288
|
-
|
|
289
|
-
await advanceTimeToRSTACK();
|
|
290
|
-
await emitFromSerial(ezsp, Buffer.from(RECD_RSTACK_BYTES));
|
|
291
|
-
await startResult;
|
|
292
|
-
expect(ezsp.checkConnection()).toBeTruthy();
|
|
293
|
-
|
|
294
|
-
callbackDispatchSpy = vi.spyOn(ezsp, "callbackDispatch").mockImplementation(vi.fn());
|
|
295
|
-
ashSendExecSpy = vi.spyOn(ezsp.ash, "sendExec");
|
|
296
|
-
|
|
297
|
-
mockResponseWaiterResolve.mockClear();
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
it("Parses successive valid incoming frames", async () => {
|
|
301
|
-
// @ts-expect-error private
|
|
302
|
-
ezsp.responseWaiter = {timer: setTimeout(() => {}, 15000), resolve: mockResponseWaiterResolve};
|
|
303
|
-
|
|
304
|
-
await emitFromSerial(ezsp, Buffer.from(SEND_UNICAST_REPLY_FN0_ASH_RAW, "hex"));
|
|
305
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
306
|
-
|
|
307
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(0);
|
|
308
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(1);
|
|
309
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledWith(EzspStatus.SUCCESS);
|
|
310
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=52:"SEND_UNICAST" Seq=39 Len=10]`);
|
|
311
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(1);
|
|
312
|
-
|
|
313
|
-
await emitFromSerial(ezsp, Buffer.from(MESSAGE_SENT_HANDLER_FN1_ASH_RAW, "hex"));
|
|
314
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
315
|
-
|
|
316
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(1);
|
|
317
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(1);
|
|
318
|
-
expect(ezsp.callbackFrameToString).toStrictEqual(`[CBFRAME: ID=63:"MESSAGE_SENT_HANDLER" Seq=39 Len=26]`);
|
|
319
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=52:"SEND_UNICAST" Seq=39 Len=10]`);
|
|
320
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(2);
|
|
321
|
-
|
|
322
|
-
await emitFromSerial(ezsp, Buffer.from(INCOMING_MESSAGE_HANDLER_FN2_ASH_RAW, "hex"));
|
|
323
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
324
|
-
|
|
325
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(2);
|
|
326
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(1);
|
|
327
|
-
expect(ezsp.callbackFrameToString).toStrictEqual(`[CBFRAME: ID=69:"INCOMING_MESSAGE_HANDLER" Seq=39 Len=42]`);
|
|
328
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=52:"SEND_UNICAST" Seq=39 Len=10]`);
|
|
329
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(3);
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
it("Parses valid incoming callback frame while waiting for response frame", async () => {
|
|
333
|
-
// @ts-expect-error private
|
|
334
|
-
ezsp.responseWaiter = {timer: setTimeout(() => {}, 15000), resolve: mockResponseWaiterResolve};
|
|
335
|
-
|
|
336
|
-
await emitFromSerial(ezsp, Buffer.from(MESSAGE_SENT_HANDLER_FN0_ASH_RAW, "hex"));
|
|
337
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
338
|
-
|
|
339
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(1);
|
|
340
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(0);
|
|
341
|
-
expect(ezsp.callbackFrameToString).toStrictEqual(`[CBFRAME: ID=63:"MESSAGE_SENT_HANDLER" Seq=39 Len=26]`);
|
|
342
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=0:"VERSION" Seq=0 Len=0]`);
|
|
343
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(1);
|
|
344
|
-
|
|
345
|
-
await emitFromSerial(ezsp, Buffer.from(SET_POLICY_REPLY_FN1_ASH_RAW, "hex"));
|
|
346
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
347
|
-
|
|
348
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(1);
|
|
349
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(1);
|
|
350
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledWith(EzspStatus.SUCCESS);
|
|
351
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=85:"SET_POLICY" Seq=79 Len=9]`);
|
|
352
|
-
expect(ezsp.callbackFrameToString).toStrictEqual(`[CBFRAME: ID=63:"MESSAGE_SENT_HANDLER" Seq=39 Len=26]`);
|
|
353
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(2);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it("Parses invalid incoming frame", async () => {
|
|
357
|
-
vi.spyOn(ezsp, "validateReceivedFrame").mockReturnValueOnce(EzspStatus.ERROR_WRONG_DIRECTION);
|
|
358
|
-
|
|
359
|
-
// @ts-expect-error private
|
|
360
|
-
ezsp.responseWaiter = {timer: setTimeout(() => {}, 15000), resolve: mockResponseWaiterResolve};
|
|
361
|
-
|
|
362
|
-
await emitFromSerial(ezsp, Buffer.from(SEND_UNICAST_REPLY_FN0_ASH_RAW, "hex"));
|
|
363
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
364
|
-
|
|
365
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(0);
|
|
366
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(1);
|
|
367
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledWith(EzspStatus.ERROR_WRONG_DIRECTION);
|
|
368
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=52:"SEND_UNICAST" Seq=39 Len=10]`);
|
|
369
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(1);
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
it("Parses invalid incoming callback frame", async () => {
|
|
373
|
-
vi.spyOn(ezsp, "validateReceivedFrame").mockReturnValueOnce(EzspStatus.ERROR_WRONG_DIRECTION);
|
|
374
|
-
|
|
375
|
-
await emitFromSerial(ezsp, Buffer.from(MESSAGE_SENT_HANDLER_FN0_ASH_RAW, "hex"));
|
|
376
|
-
await vi.advanceTimersByTimeAsync(1000);
|
|
377
|
-
|
|
378
|
-
expect(callbackDispatchSpy).toHaveBeenCalledTimes(0);
|
|
379
|
-
expect(mockResponseWaiterResolve).toHaveBeenCalledTimes(0);
|
|
380
|
-
expect(ezsp.callbackFrameToString).toStrictEqual(`[CBFRAME: ID=63:"MESSAGE_SENT_HANDLER" Seq=39 Len=26]`);
|
|
381
|
-
expect(ezsp.frameToString).toStrictEqual(`[FRAME: ID=0:"VERSION" Seq=0 Len=0]`);
|
|
382
|
-
expect(ashSendExecSpy).toHaveBeenCalledTimes(1);
|
|
383
|
-
});
|
|
384
|
-
});
|
|
385
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from "vitest";
|
|
2
|
-
import {SLStatus} from "../../../src/adapter/ember/enums";
|
|
3
|
-
import {EzspBuffalo} from "../../../src/adapter/ember/ezsp/buffalo";
|
|
4
|
-
import {
|
|
5
|
-
EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX,
|
|
6
|
-
EZSP_FRAME_CONTROL_COMMAND,
|
|
7
|
-
EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK,
|
|
8
|
-
EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET,
|
|
9
|
-
EZSP_FRAME_CONTROL_SLEEP_MODE_MASK,
|
|
10
|
-
EZSP_FRAME_ID_INDEX,
|
|
11
|
-
EZSP_MAX_FRAME_LENGTH,
|
|
12
|
-
EZSP_PARAMETERS_INDEX,
|
|
13
|
-
EZSP_SEQUENCE_INDEX,
|
|
14
|
-
} from "../../../src/adapter/ember/ezsp/consts";
|
|
15
|
-
import {EzspFrameID} from "../../../src/adapter/ember/ezsp/enums";
|
|
16
|
-
import {lowByte} from "../../../src/adapter/ember/utils/math";
|
|
17
|
-
|
|
18
|
-
describe("Ember EZSP Buffalo", () => {
|
|
19
|
-
let buffalo: EzspBuffalo;
|
|
20
|
-
|
|
21
|
-
beforeAll(async () => {});
|
|
22
|
-
|
|
23
|
-
afterAll(async () => {});
|
|
24
|
-
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
buffalo = new EzspBuffalo(Buffer.alloc(EZSP_MAX_FRAME_LENGTH));
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
afterEach(() => {});
|
|
30
|
-
|
|
31
|
-
it("Is empty after init", () => {
|
|
32
|
-
expect(buffalo.getWritten()).toStrictEqual(Buffer.from([]));
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it("Writes & read at position without altering internal position tracker", () => {
|
|
36
|
-
// mock send `version` command logic flow
|
|
37
|
-
buffalo.setPosition(EZSP_PARAMETERS_INDEX);
|
|
38
|
-
buffalo.setCommandByte(EZSP_FRAME_ID_INDEX, lowByte(EzspFrameID.VERSION));
|
|
39
|
-
buffalo.setCommandByte(EZSP_SEQUENCE_INDEX, 0);
|
|
40
|
-
buffalo.setCommandByte(
|
|
41
|
-
EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX,
|
|
42
|
-
EZSP_FRAME_CONTROL_COMMAND |
|
|
43
|
-
(0x00 & EZSP_FRAME_CONTROL_SLEEP_MODE_MASK) |
|
|
44
|
-
((0x00 << EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET) & EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK),
|
|
45
|
-
);
|
|
46
|
-
buffalo.writeUInt8(12); // desiredProtocolVersion
|
|
47
|
-
|
|
48
|
-
expect(buffalo.getWritten()).toStrictEqual(Buffer.from([0x00, 0x00, 0x00, 0x0c]));
|
|
49
|
-
|
|
50
|
-
expect(buffalo.getCommandByte(EZSP_FRAME_ID_INDEX)).toStrictEqual(lowByte(EzspFrameID.VERSION));
|
|
51
|
-
expect(buffalo.getCommandByte(EZSP_SEQUENCE_INDEX)).toStrictEqual(0);
|
|
52
|
-
expect(buffalo.getCommandByte(EZSP_EXTENDED_FRAME_CONTROL_LB_INDEX)).toStrictEqual(
|
|
53
|
-
EZSP_FRAME_CONTROL_COMMAND |
|
|
54
|
-
(0x00 & EZSP_FRAME_CONTROL_SLEEP_MODE_MASK) |
|
|
55
|
-
((0x00 << EZSP_FRAME_CONTROL_NETWORK_INDEX_OFFSET) & EZSP_FRAME_CONTROL_NETWORK_INDEX_MASK),
|
|
56
|
-
);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it("Maps EmberStatus/EzspStatus to SLStatus", () => {
|
|
60
|
-
buffalo.setCommandByte(0, 0x00);
|
|
61
|
-
buffalo.setCommandByte(1, 0x00);
|
|
62
|
-
buffalo.setCommandByte(2, 0x00);
|
|
63
|
-
buffalo.setCommandByte(3, 0x00);
|
|
64
|
-
// zero always zero
|
|
65
|
-
buffalo.setPosition(0);
|
|
66
|
-
expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.OK);
|
|
67
|
-
buffalo.setPosition(0);
|
|
68
|
-
expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.OK);
|
|
69
|
-
buffalo.setPosition(0);
|
|
70
|
-
expect(buffalo.readStatus(0x0e)).toStrictEqual(SLStatus.OK);
|
|
71
|
-
buffalo.setPosition(0);
|
|
72
|
-
expect(buffalo.readStatus(0x0e, false)).toStrictEqual(SLStatus.OK);
|
|
73
|
-
|
|
74
|
-
buffalo.setCommandByte(0, 0x02);
|
|
75
|
-
buffalo.setPosition(0);
|
|
76
|
-
expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.INVALID_PARAMETER);
|
|
77
|
-
buffalo.setPosition(0);
|
|
78
|
-
expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR);
|
|
79
|
-
|
|
80
|
-
buffalo.setCommandByte(0, 0x9c);
|
|
81
|
-
buffalo.setPosition(0);
|
|
82
|
-
expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.ZIGBEE_NETWORK_OPENED);
|
|
83
|
-
buffalo.setPosition(0);
|
|
84
|
-
expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR);
|
|
85
|
-
|
|
86
|
-
// no mapped value
|
|
87
|
-
buffalo.setCommandByte(0, 0x4b);
|
|
88
|
-
buffalo.setPosition(0);
|
|
89
|
-
expect(buffalo.readStatus(0x0d)).toStrictEqual(SLStatus.BUS_ERROR);
|
|
90
|
-
buffalo.setPosition(0);
|
|
91
|
-
expect(buffalo.readStatus(0x0d, false)).toStrictEqual(SLStatus.ZIGBEE_EZSP_ERROR);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import {describe, expect, it} from "vitest";
|
|
2
|
-
import {EzspError} from "../../../src/adapter/ember/ezspError";
|
|
3
|
-
import {EzspStatus} from "../../../src/adapter/ezsp/driver/types";
|
|
4
|
-
|
|
5
|
-
describe("Ezsp Error", () => {
|
|
6
|
-
it("Creates error", () => {
|
|
7
|
-
const error = new EzspError(EzspStatus.ASH_ACK_TIMEOUT);
|
|
8
|
-
|
|
9
|
-
expect(error.message).toStrictEqual("ASH_ACK_TIMEOUT");
|
|
10
|
-
expect(error.code).toStrictEqual(EzspStatus.ASH_ACK_TIMEOUT);
|
|
11
|
-
});
|
|
12
|
-
});
|