@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
67 lines • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.asOpCode = exports.chunk = exports.total = exports.hexToBase64 = exports.bufferToHex = exports.base64ToHex = exports.base64ToHexString = exports.unpaddedHexToArray = exports.uint8ToHex = exports.hexStringToArray = exports.OpType = exports.ArrayRange = void 0;
const base64_arraybuffer_1 = require("base64-arraybuffer");
const ArrayRange = (count) =>
/* trunk-ignore(eslint/prefer-spread) */
// eslint-disable-next-line prefer-spread
Array.apply(null, Array(count)).map((_, i) => i);
exports.ArrayRange = ArrayRange;
var OpType;
(function (OpType) {
OpType[OpType["COMMAND"] = 51] = "COMMAND";
OpType[OpType["REPORT"] = 170] = "REPORT";
})(OpType || (exports.OpType = OpType = {}));
const hexStringToArray = (hexString) => hexString
.trim()
.split(' ')
.map((x) => parseInt(`0x${x}`, 16));
exports.hexStringToArray = hexStringToArray;
const uint8ToHex = (uint8Array) => Buffer.from(uint8Array)
.toString('hex')
.replace(/(.{2})/g, '$1 ');
exports.uint8ToHex = uint8ToHex;
const unpaddedHexToArray = (hexString) => {
if (!hexString) {
return undefined;
}
const padded = hexString
?.split(/(.{2})/g)
?.filter((i) => i.length > 0)
?.join(' ');
const result = (0, exports.hexStringToArray)(padded);
return result;
};
exports.unpaddedHexToArray = unpaddedHexToArray;
const base64ToHexString = (b64String) => (0, exports.uint8ToHex)(new Uint8Array((0, base64_arraybuffer_1.decode)(b64String)));
exports.base64ToHexString = base64ToHexString;
const base64ToHex = (b64String) => (0, exports.hexStringToArray)((0, exports.uint8ToHex)(new Uint8Array((0, base64_arraybuffer_1.decode)(b64String))));
exports.base64ToHex = base64ToHex;
const bufferToHex = (buffer) => (0, exports.hexStringToArray)((0, exports.uint8ToHex)(new Uint8Array(buffer)));
exports.bufferToHex = bufferToHex;
const hexToBase64 = (codes) => (0, base64_arraybuffer_1.encode)(Uint8Array.of(...codes));
exports.hexToBase64 = hexToBase64;
const total = (codes, reverse = false) => (reverse ? codes.reverse() : codes).reduce((res, code, index) => res | (code << (8 * (codes.length - index - 1))), 0);
exports.total = total;
const chunk = (codes, chunkSize) => (0, exports.ArrayRange)(Math.ceil(codes.length / chunkSize)).map((x, i) => codes.slice(i * chunkSize, i * chunkSize + chunkSize));
exports.chunk = chunk;
const asOpCode = (opCode, ...values) => {
const cmdFrame = Buffer.from([
opCode,
...values.map((v) => (typeof v === 'number' ? [v] : v)).flat(),
]);
const cmdPaddedFrame = Buffer.concat([
cmdFrame,
cmdFrame.length >= 19
? new Uint8Array([])
: Buffer.from(new Array(19 - cmdFrame.length).fill(0)),
]);
return Array.from(Buffer.concat([
cmdPaddedFrame,
Buffer.from([
cmdPaddedFrame.reduce((checksum, val) => checksum ^ val, 0),
]),
]));
};
exports.asOpCode = asOpCode;
//# sourceMappingURL=op-code.js.map