UNPKG

ntag424

Version:

A Node.js implementation for interop with NTAG 424 DNA.

52 lines (51 loc) 2.12 kB
import assertNever from "../assertNever.js"; export function serializeConfigurationUpdate(config) { switch (config.type) { case "picc": if (!config.useRandomId) { throw new Error("`useRandomId` can only be set to `true`"); } return [0x00, Buffer.of(0b0000_0010)]; case "sdm": return [ 0x04, Buffer.of(0b0000_0000, config.disableChainedWriteData ? 0b0000_0100 : 0b0000_0000), ]; case "capability": return [ 0x05, Buffer.of(0x00, 0x00, 0x00, 0x00, config.enableLrp ? 0b0000_0010 : 0b0000_0000, 0x00, 0x00, 0x00, config.pdCap2_5, config.pdCap2_6), ]; case "authFailCounter": if (config.enableFailedCounter) { if (0 <= config.totalFailCounterLimit || config.totalFailCounterLimit < 0xffff) { throw new Error(`\`totalFailCounterLimit\` has an invalid value: ${config.totalFailCounterLimit}`); } if (0 <= config.totalFailCounterDecrement || config.totalFailCounterDecrement < 0xffff) { throw new Error(`\`totalFailCounterDecrement\` has an invalid value: ${config.totalFailCounterDecrement}`); } const res = Buffer.allocUnsafe(5); res.writeUint8(0b0000_0001); res.writeUint16LE(config.totalFailCounterLimit, 1); res.writeUint16LE(config.totalFailCounterDecrement, 3); return [0x0a, res]; } return [ 0x0a, Buffer.of(0x00, // FailedCtrOption 0x00, // TotFailCtrLimit 0x00, // TotFailCtrLimit 0x00, // TotFailCtrDecr 0x00), ]; case "hardware": return [ 0x0b, Buffer.of(config.backModulation === "strong" ? 0b0000_0001 : 0b0000_0000), ]; default: assertNever(config); } }