UNPKG

@blackmagic-controller/core

Version:

An npm module for interfacing with the Blackmagic usb/bluetooth controllers

74 lines 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultLedService = void 0; const util_js_1 = require("../../util.js"); class DefaultLedService { #device; // readonly #controls: readonly BlackmagicControllerControlDefinition[] #bufferSize = 32; // Future: this may need to vary #lastPrimaryBuffer; constructor(device, _controls) { this.#device = device; // this.#controls = controls this.#lastPrimaryBuffer = this.#createBuffer(null); // TODO - flashing buffers? } #createBuffer(copyExisting) { const buffer = new Uint8Array(this.#bufferSize); if (copyExisting) { buffer.set(this.#lastPrimaryBuffer); } else { buffer[0] = 0x02; } return buffer; } async setControlColors(values) { this.#lastPrimaryBuffer = this.#createBuffer(this.#lastPrimaryBuffer); for (const value of values) { if (value.type === 'button') { this.#setButtonValue(value.control, value.red, value.green, value.blue); } else { this.#setTBarValue(value.control, value.leds); } } await this.#device.sendReports([this.#lastPrimaryBuffer]); } #setButtonValue(control, red, green, blue) { const buttonOffset = 3; const firstBitIndex = (control.encodedIndex - 1) * 3; const firstByteIndex = Math.floor(firstBitIndex / 8); const firstBitIndexInValue = firstBitIndex % 8; const view = (0, util_js_1.uint8ArrayToDataView)(this.#lastPrimaryBuffer); let uint16Value = view.getUint16(buttonOffset + firstByteIndex, true); uint16Value = maskValue(uint16Value, 1 << firstBitIndexInValue, red); uint16Value = maskValue(uint16Value, 1 << (firstBitIndexInValue + 1), green); uint16Value = maskValue(uint16Value, 1 << (firstBitIndexInValue + 2), blue); view.setUint16(buttonOffset + firstByteIndex, uint16Value, true); } #setTBarValue(control, values) { let value = 0; values.forEach((v, i) => { if (v) value |= 1 << i; }); const view = (0, util_js_1.uint8ArrayToDataView)(this.#lastPrimaryBuffer); view.setUint16(1, value, true); } async clearPanel() { this.#lastPrimaryBuffer = this.#createBuffer(null); await this.#device.sendReports([this.#lastPrimaryBuffer]); // TODO - flashing buffers? } } exports.DefaultLedService = DefaultLedService; function maskValue(value, mask, set) { if (set) { return value | mask; } else { return value & ~mask; } } //# sourceMappingURL=default.js.map