UNPKG

@blackmagic-controller/core

Version:

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

159 lines 7.63 kB
import { BlackmagicControllerBase } from './base.js'; import { BlackmagicControllerModelId } from '../info.js'; import { createBasicButtonDefinition, freezeDefinitions } from '../controlsGenerator.js'; import { CallbackHook } from '../services/callback-hook.js'; import { DefaultPropertiesService } from '../services/properties/default.js'; import { DefaultInputService } from '../services/input/default.js'; import { LedBuffer } from '../services/led/ledBuffer.js'; const resolveReplayEditorControls = [ createBasicButtonDefinition(0, 0, 'undo', 0x65, null), createBasicButtonDefinition(0, 1, 'new-tline', 0x3e, null), createBasicButtonDefinition(0, 6, 'cue', 0x3f, 0), createBasicButtonDefinition(0, 7, 'run', 0x40, 1), createBasicButtonDefinition(0, 8, 'dump', 0x41, 2), createBasicButtonDefinition(0, 10, 'go-to-end', 0x6b, null), createBasicButtonDefinition(0, 11, 'input-view', 0x42, 3), createBasicButtonDefinition(0, 12, 'multi-src', 0x43, 4), createBasicButtonDefinition(0, 14, 'single-clip', 0x44, 5), createBasicButtonDefinition(1, 1, 'trim-all', 0x3d, null), createBasicButtonDefinition(1, 3, 'ripl-del', 0x2b, null), createBasicButtonDefinition(1, 4, 'video-only', 0x25, 6), createBasicButtonDefinition(1, 5, 'auto-sting', 0x45, 7), createBasicButtonDefinition(1, 6, 'ramp-down', 0x46, null), createBasicButtonDefinition(1, 7, 'speed-pos', 0x47, 8), createBasicButtonDefinition(1, 9, 'sync-bin', 0x1f, null), createBasicButtonDefinition(1, 10, 'add-mark', 0x68, null), createBasicButtonDefinition(1, 11, 'full-view', 0x2d, 9), createBasicButtonDefinition(2, 4, 'audio-only', 0x26, 10), createBasicButtonDefinition(2, 5, 'sel-sting', 0x48, 11), createBasicButtonDefinition(2, 6, 'slow', 0x49, null), createBasicButtonDefinition(2, 7, 'set-speed', 0x4a, 12), createBasicButtonDefinition(2, 9, 'split', 0x2f, null), createBasicButtonDefinition(2, 10, 'snap', 0x2e, 13), createBasicButtonDefinition(2, 11, 'mv-view', 0x4b, 14), createBasicButtonDefinition(2, 12, 'source', 0x1a, null), createBasicButtonDefinition(2, 14, 'timeline', 0x1b, null), createBasicButtonDefinition(3, 0, 'live-speed', 0x63, 15), createBasicButtonDefinition(3, 1, 'smart-insert', 0x01, null), createBasicButtonDefinition(3, 2, 'appnd', 0x02, null), createBasicButtonDefinition(3, 3, 'ripl-owr', 0x03, null), createBasicButtonDefinition(4, 1, 'close-up', 0x04, 16), createBasicButtonDefinition(4, 2, 'place-on-top', 0x05, null), createBasicButtonDefinition(4, 3, 'src-owr', 0x06, null), createBasicButtonDefinition(4, 4, 'set-poi', 0x4d, 17), createBasicButtonDefinition(4, 5, 'go-to-poi', 0x4c, null), createBasicButtonDefinition(4, 6, '2sec', 0x5d, 18), createBasicButtonDefinition(4, 7, '3sec', 0x5e, 19), createBasicButtonDefinition(4, 8, '4sec', 0x5f, 20), createBasicButtonDefinition(4, 9, '5sec', 0x60, 21), createBasicButtonDefinition(4, 10, '6sec', 0x61, 22), createBasicButtonDefinition(4, 11, '7sec', 0x62, 23), createBasicButtonDefinition(4, 12, 'slow-jog', 0x69, -4), // this negative is a hack, to differentiate them to the special command createBasicButtonDefinition(4, 13, 'jog-jog', 0x1d, -1), // this negative is a hack, to differentiate them to the special command createBasicButtonDefinition(4, 14, 'scrl-jog', 0x1e, -3), // this negative is a hack, to differentiate them to the special command createBasicButtonDefinition(5, 1, 'in', 0x07, null), createBasicButtonDefinition(5, 3, 'out', 0x08, null), createBasicButtonDefinition(5, 4, 'all-cams', 0x64, 24), createBasicButtonDefinition(5, 5, 'cams-9-16', 0x5c, 25), createBasicButtonDefinition(5, 6, 'title1', 0x4e, 26), createBasicButtonDefinition(5, 7, 'title2', 0x4f, 27), createBasicButtonDefinition(5, 8, 'title3', 0x50, 28), createBasicButtonDefinition(5, 9, 'title4', 0x51, 29), createBasicButtonDefinition(5, 10, 'title5', 0x52, 30), createBasicButtonDefinition(5, 11, 'title6', 0x53, 31), createBasicButtonDefinition(6, 1, 'trim-in', 0x09, null), createBasicButtonDefinition(6, 2, 'trim-out', 0x0a, null), createBasicButtonDefinition(6, 3, 'roll', 0x0b, null), createBasicButtonDefinition(7, 1, 'slip', 0x67, null), createBasicButtonDefinition(7, 2, 'slide', 0x66, null), createBasicButtonDefinition(7, 3, 'trans-dur', 0x0e, null), createBasicButtonDefinition(7, 4, 'cam1', 0x54, 32), createBasicButtonDefinition(7, 5, 'cam2', 0x55, 33), createBasicButtonDefinition(7, 6, 'cam3', 0x56, 34), createBasicButtonDefinition(7, 7, 'cam4', 0x57, 35), createBasicButtonDefinition(7, 8, 'cam5', 0x58, 36), createBasicButtonDefinition(7, 9, 'cam6', 0x59, 37), createBasicButtonDefinition(7, 10, 'cam7', 0x5a, 38), createBasicButtonDefinition(7, 11, 'cam8', 0x5b, 39), createBasicButtonDefinition(8, 1, 'cut', 0x0f, 40), createBasicButtonDefinition(8, 2, 'dis', 0x10, 41), createBasicButtonDefinition(8, 3, 'trans', 0x22, 42), createBasicButtonDefinition(8, 4, 'stop-play', 0x3c, null), { type: 'tbar', id: 0, row: 4, column: 0, columnSpan: 1, rowSpan: 5, ledSegments: 16, ledBitIndex: 43, }, { type: 'jog', id: 0, row: 5, column: 12, columnSpan: 3, rowSpan: 4, }, ]; const resolveReplayEditorProperties = { MODEL: BlackmagicControllerModelId.DaVinciResolveReplayEditor, CONTROLS: freezeDefinitions(resolveReplayEditorControls), }; export function ResolveReplayEditorFactory(device, options) { const events = new CallbackHook(); return new BlackmagicControllerBase(device, options, { deviceProperties: resolveReplayEditorProperties, events, properties: new DefaultPropertiesService(device, { batteryReportId: 7, firmwareReportId: 1, serialReportId: 8, }), inputService: new DefaultInputService(resolveReplayEditorProperties, events, { buttonReportId: 0x04, tbarReportId: 0x0a, jogReportId: 0x03, batteryReportId: 0x06, }), led: new ResolveReplayLedService(device), }); } class ResolveReplayLedService { #device; #primaryBuffer = new LedBuffer(0x09, 9); #jobBuffer = new LedBuffer(0x04, 2); constructor(device) { this.#device = device; } async setControlColors(values) { this.#primaryBuffer.prepareNewBuffers(); this.#jobBuffer.prepareNewBuffers(); let changedPrimary = false; let changedJob = false; for (const value of values) { if (value.type === 'button-on-off' && value.control.ledBitIndex < 0) { changedJob = true; this.#jobBuffer.maskControlBits(-value.control.ledBitIndex - 1, [value.on]); } else { changedPrimary = true; this.#primaryBuffer.setControlColor(value); } } const result = []; if (changedJob) result.push(...this.#jobBuffer.getBuffers()); if (changedPrimary) result.push(...this.#primaryBuffer.getBuffers()); await this.#device.sendReports(result); } async clearPanel() { this.#jobBuffer.clearBuffers(); this.#primaryBuffer.clearBuffers(); await this.#device.sendReports([...this.#jobBuffer.getBuffers(), ...this.#primaryBuffer.getBuffers()]); } } //# sourceMappingURL=resolve-replay-editor.js.map