Added support for Streamdeck Pedal and updated UI to better fit the Packed UI style

This commit is contained in:
2026-02-27 22:47:08 +01:00
committed by erik
parent 5a70f775f1
commit 93faae5cc8
1463 changed files with 306917 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
import type { Dimension } from './id.js';
export interface StreamDeckControlDefinitionBase {
type: 'button' | 'encoder' | 'lcd-segment';
row: number;
column: number;
}
export interface StreamDeckButtonControlDefinitionBase extends StreamDeckControlDefinitionBase {
type: 'button';
index: number;
hidIndex: number;
feedbackType: 'none' | 'rgb' | 'lcd';
}
export interface StreamDeckButtonControlDefinitionNoFeedback extends StreamDeckButtonControlDefinitionBase {
feedbackType: 'none';
}
export interface StreamDeckButtonControlDefinitionRgbFeedback extends StreamDeckButtonControlDefinitionBase {
feedbackType: 'rgb';
}
export interface StreamDeckButtonControlDefinitionLcdFeedback extends StreamDeckButtonControlDefinitionBase {
feedbackType: 'lcd';
pixelSize: Dimension;
}
export type StreamDeckButtonControlDefinition = StreamDeckButtonControlDefinitionNoFeedback | StreamDeckButtonControlDefinitionRgbFeedback | StreamDeckButtonControlDefinitionLcdFeedback;
export interface StreamDeckEncoderControlDefinition extends StreamDeckControlDefinitionBase {
type: 'encoder';
index: number;
hidIndex: number;
/** Whether the encoder has a central led */
hasLed: boolean;
/** The number of steps in encoder led rings (if any) */
ledRingSteps: number;
/** Encoding offset of the ring leds */
lcdRingOffset?: number;
}
export interface StreamDeckLcdSegmentControlDefinition extends StreamDeckControlDefinitionBase {
type: 'lcd-segment';
id: 0;
columnSpan: number;
rowSpan: number;
pixelSize: Dimension;
/**
* Whether the LCD segment supports drawing regions
*/
drawRegions: boolean;
}
export type StreamDeckControlDefinition = StreamDeckButtonControlDefinition | StreamDeckEncoderControlDefinition | StreamDeckLcdSegmentControlDefinition;
//# sourceMappingURL=controlDefinition.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"controlDefinition.d.ts","sourceRoot":"","sources":["../src/controlDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,WAAW,+BAA+B;IAC/C,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAA;IAE1C,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qCAAsC,SAAQ,+BAA+B;IAC7F,IAAI,EAAE,QAAQ,CAAA;IAEd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAEhB,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;CACpC;AACD,MAAM,WAAW,2CAA4C,SAAQ,qCAAqC;IACzG,YAAY,EAAE,MAAM,CAAA;CACpB;AACD,MAAM,WAAW,4CAA6C,SAAQ,qCAAqC;IAC1G,YAAY,EAAE,KAAK,CAAA;CACnB;AAED,MAAM,WAAW,4CAA6C,SAAQ,qCAAqC;IAC1G,YAAY,EAAE,KAAK,CAAA;IAEnB,SAAS,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,MAAM,iCAAiC,GAC1C,2CAA2C,GAC3C,4CAA4C,GAC5C,4CAA4C,CAAA;AAE/C,MAAM,WAAW,kCAAmC,SAAQ,+BAA+B;IAC1F,IAAI,EAAE,SAAS,CAAA;IAEf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAEhB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAA;IAEf,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,qCAAsC,SAAQ,+BAA+B;IAC7F,IAAI,EAAE,aAAa,CAAA;IACnB,EAAE,EAAE,CAAC,CAAA;IAEL,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IAEf,SAAS,EAAE,SAAS,CAAA;IAEpB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,MAAM,2BAA2B,GACpC,iCAAiC,GACjC,kCAAkC,GAClC,qCAAqC,CAAA"}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=controlDefinition.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"controlDefinition.js","sourceRoot":"","sources":["../src/controlDefinition.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,5 @@
import type { StreamDeckButtonControlDefinition, StreamDeckControlDefinition } from './controlDefinition.js';
import type { Dimension } from './id.js';
export declare function generateButtonsGrid(width: number, height: number, pixelSize: Dimension, rtl?: boolean, columnOffset?: number, rowOffset?: number): StreamDeckButtonControlDefinition[];
export declare function freezeDefinitions(controls: StreamDeckControlDefinition[]): Readonly<StreamDeckControlDefinition[]>;
//# sourceMappingURL=controlsGenerator.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"controlsGenerator.d.ts","sourceRoot":"","sources":["../src/controlsGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAC5G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,UAAQ,EACX,YAAY,SAAI,EAChB,SAAS,SAAI,GACX,iCAAiC,EAAE,CAqBrC;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,2BAA2B,EAAE,GAAG,QAAQ,CAAC,2BAA2B,EAAE,CAAC,CAElH"}

View File

@@ -0,0 +1,33 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateButtonsGrid = generateButtonsGrid;
exports.freezeDefinitions = freezeDefinitions;
function generateButtonsGrid(width, height, pixelSize, rtl = false, columnOffset = 0, rowOffset = 0) {
const controls = [];
for (let row = 0; row < height; row++) {
for (let column = 0; column < width; column++) {
const index = row * width + column;
const hidIndex = rtl ? flipKeyIndex(width, index) : index;
controls.push({
type: 'button',
row: row + rowOffset,
column: column + columnOffset,
index,
hidIndex,
feedbackType: 'lcd',
pixelSize,
});
}
}
return controls;
}
function flipKeyIndex(columns, keyIndex) {
// Horizontal flip
const half = (columns - 1) / 2;
const diff = ((keyIndex % columns) - half) * -half;
return keyIndex + diff;
}
function freezeDefinitions(controls) {
return Object.freeze(controls.map((control) => Object.freeze(control)));
}
//# sourceMappingURL=controlsGenerator.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"controlsGenerator.js","sourceRoot":"","sources":["../src/controlsGenerator.ts"],"names":[],"mappings":";;AAGA,kDA4BC;AASD,8CAEC;AAvCD,SAAgB,mBAAmB,CAClC,KAAa,EACb,MAAc,EACd,SAAoB,EACpB,GAAG,GAAG,KAAK,EACX,YAAY,GAAG,CAAC,EAChB,SAAS,GAAG,CAAC;IAEb,MAAM,QAAQ,GAAwC,EAAE,CAAA;IAExD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,CAAA;YAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAEzD,QAAQ,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,GAAG,GAAG,SAAS;gBACpB,MAAM,EAAE,MAAM,GAAG,YAAY;gBAC7B,KAAK;gBACL,QAAQ;gBACR,YAAY,EAAE,KAAK;gBACnB,SAAS;aACT,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,QAAgB;IACtD,kBAAkB;IAClB,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IAClD,OAAO,QAAQ,GAAG,IAAI,CAAA;AACvB,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAuC;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACxE,CAAC"}

View File

@@ -0,0 +1,27 @@
import type { EventEmitter } from 'eventemitter3';
export interface HIDDeviceEvents {
error: [data: any];
input: [keys: Uint8Array];
}
/**
* The expected interface for a HIDDevice.
* This is to be implemented by any wrapping libraries to translate their platform specific devices into a common and simpler form
*/
export interface HIDDevice extends EventEmitter<HIDDeviceEvents> {
close(): Promise<void>;
sendFeatureReport(data: Uint8Array): Promise<void>;
getFeatureReport(reportId: number, reportLength: number): Promise<Uint8Array>;
sendReports(buffers: Uint8Array[]): Promise<void>;
getDeviceInfo(): Promise<HIDDeviceInfo>;
getChildDeviceInfo(): Promise<ChildHIDDeviceInfo | null>;
}
export interface HIDDeviceInfo {
readonly path: string | undefined;
readonly productId: number;
readonly vendorId: number;
}
export interface ChildHIDDeviceInfo extends HIDDeviceInfo {
readonly serialNumber: string;
readonly tcpPort: number;
}
//# sourceMappingURL=hid-device.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"hid-device.d.ts","sourceRoot":"","sources":["../src/hid-device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAClB,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,CAAC,eAAe,CAAC;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE7E,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjD,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IAEvC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;CACxD;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACxB"}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=hid-device.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"hid-device.js","sourceRoot":"","sources":["../src/hid-device.ts"],"names":[],"mappings":""}

27
node_modules/@elgato-stream-deck/core/dist/id.d.ts generated vendored Normal file
View File

@@ -0,0 +1,27 @@
export type KeyIndex = number;
export type EncoderIndex = number;
export type Dimension = {
width: number;
height: number;
};
export declare enum DeviceModelId {
ORIGINAL = "original",
ORIGINALV2 = "originalv2",
ORIGINALMK2 = "original-mk2",
ORIGINALMK2SCISSOR = "original-mk2-scissor",
MINI = "mini",
XL = "xl",
PEDAL = "pedal",
PLUS = "plus",
NEO = "neo",
STUDIO = "studio",
MODULE6 = "6-module",
MODULE15 = "15-module",
MODULE32 = "32-module",
NETWORK_DOCK = "network-dock",
GALLEON_K100 = "galleon-k100"
}
export declare const MODEL_NAMES: {
[key in DeviceModelId]: string;
};
//# sourceMappingURL=id.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAE7B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzD,oBAAY,aAAa;IACxB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,WAAW,iBAAiB;IAC5B,kBAAkB,yBAAyB;IAC3C,IAAI,SAAS;IACb,EAAE,OAAO;IACT,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,aAAa;IACpB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;CAC7B;AAED,eAAO,MAAM,WAAW,EAAE;KAAG,GAAG,IAAI,aAAa,GAAG,MAAM;CAgBzD,CAAA"}

39
node_modules/@elgato-stream-deck/core/dist/id.js generated vendored Normal file
View File

@@ -0,0 +1,39 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MODEL_NAMES = exports.DeviceModelId = void 0;
var DeviceModelId;
(function (DeviceModelId) {
DeviceModelId["ORIGINAL"] = "original";
DeviceModelId["ORIGINALV2"] = "originalv2";
DeviceModelId["ORIGINALMK2"] = "original-mk2";
DeviceModelId["ORIGINALMK2SCISSOR"] = "original-mk2-scissor";
DeviceModelId["MINI"] = "mini";
DeviceModelId["XL"] = "xl";
DeviceModelId["PEDAL"] = "pedal";
DeviceModelId["PLUS"] = "plus";
DeviceModelId["NEO"] = "neo";
DeviceModelId["STUDIO"] = "studio";
DeviceModelId["MODULE6"] = "6-module";
DeviceModelId["MODULE15"] = "15-module";
DeviceModelId["MODULE32"] = "32-module";
DeviceModelId["NETWORK_DOCK"] = "network-dock";
DeviceModelId["GALLEON_K100"] = "galleon-k100";
})(DeviceModelId || (exports.DeviceModelId = DeviceModelId = {}));
exports.MODEL_NAMES = {
[DeviceModelId.ORIGINAL]: 'Stream Deck',
[DeviceModelId.MINI]: 'Stream Deck Mini',
[DeviceModelId.XL]: 'Stream Deck XL',
[DeviceModelId.ORIGINALV2]: 'Stream Deck',
[DeviceModelId.ORIGINALMK2]: 'Stream Deck MK.2',
[DeviceModelId.ORIGINALMK2SCISSOR]: 'Stream Deck MK.2 (Scissor)',
[DeviceModelId.PLUS]: 'Stream Deck +',
[DeviceModelId.PEDAL]: 'Stream Deck Pedal',
[DeviceModelId.NEO]: 'Stream Deck Neo',
[DeviceModelId.STUDIO]: 'Stream Deck Studio',
[DeviceModelId.MODULE6]: 'Stream Deck 6 Module',
[DeviceModelId.MODULE15]: 'Stream Deck 15 Module',
[DeviceModelId.MODULE32]: 'Stream Deck 32 Module',
[DeviceModelId.NETWORK_DOCK]: 'Stream Deck Network Dock',
[DeviceModelId.GALLEON_K100]: 'Galleon K100 SD',
};
//# sourceMappingURL=id.js.map

1
node_modules/@elgato-stream-deck/core/dist/id.js.map generated vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":";;;AAMA,IAAY,aAgBX;AAhBD,WAAY,aAAa;IACxB,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,6CAA4B,CAAA;IAC5B,4DAA2C,CAAA;IAC3C,8BAAa,CAAA;IACb,0BAAS,CAAA;IACT,gCAAe,CAAA;IACf,8BAAa,CAAA;IACb,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,qCAAoB,CAAA;IACpB,uCAAsB,CAAA;IACtB,uCAAsB,CAAA;IACtB,8CAA6B,CAAA;IAC7B,8CAA6B,CAAA;AAC9B,CAAC,EAhBW,aAAa,6BAAb,aAAa,QAgBxB;AAEY,QAAA,WAAW,GAAuC;IAC9D,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,aAAa;IACvC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,kBAAkB;IACxC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,gBAAgB;IACpC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa;IACzC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,kBAAkB;IAC/C,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,4BAA4B;IAChE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,eAAe;IACrC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,mBAAmB;IAC1C,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,iBAAiB;IACtC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,oBAAoB;IAC5C,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,sBAAsB;IAC/C,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,uBAAuB;IACjD,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,uBAAuB;IACjD,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,0BAA0B;IACxD,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,iBAAiB;CAC/C,CAAA"}

49
node_modules/@elgato-stream-deck/core/dist/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,49 @@
import type { HIDDevice } from './hid-device.js';
import { DeviceModelId } from './id.js';
import type { StreamDeck } from './types.js';
import type { OpenStreamDeckOptions } from './models/base.js';
import type { PropertiesService } from './services/properties/interface.js';
export * from './types.js';
export * from './id.js';
export * from './controlDefinition.js';
export type { PreparedBuffer } from './preparedBuffer.js';
export type { HIDDevice, HIDDeviceInfo, HIDDeviceEvents, ChildHIDDeviceInfo } from './hid-device.js';
export type { OpenStreamDeckOptions } from './models/base.js';
export { StreamDeckProxy } from './proxy.js';
export type { PropertiesService } from './services/properties/interface.js';
export { uint8ArrayToDataView } from './util.js';
export { parseAllFirmwareVersionsHelper } from './services/properties/all-firmware.js';
/** Elgato vendor id */
export declare const VENDOR_ID = 4057;
/** Corsair vendor id */
export declare const CORSAIR_VENDOR_ID = 6940;
export declare enum DeviceModelType {
STREAMDECK = "streamdeck",
PEDAL = "pedal",
NETWORK_DOCK = "network-dock"
}
export interface DeviceModelSpec {
id: DeviceModelId;
type: DeviceModelType;
productIds: number[];
vendorId: number;
productName: string;
/**
* If needing to filter by usage
*/
hidUsage?: number;
/**
* If needing to filter by interface number
*/
hidInterface?: number;
factory: (device: HIDDevice, options: Required<OpenStreamDeckOptions>, tcpPropertiesService?: PropertiesService) => StreamDeck | Promise<StreamDeck>;
hasNativeTcp: boolean;
}
/** List of all the known models, and the classes to use them */
export declare const DEVICE_MODELS2: {
[key in DeviceModelId]: Omit<DeviceModelSpec, 'id' | 'productName'>;
};
/** @deprecated maybe? */
export declare const DEVICE_MODELS: DeviceModelSpec[];
export declare function getStreamDeckModelName(modelId: DeviceModelId): string;
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAe,MAAM,SAAS,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAS7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAI3E,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,wBAAwB,CAAA;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpG,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAA;AAEtF,uBAAuB;AACvB,eAAO,MAAM,SAAS,OAAS,CAAA;AAC/B,wBAAwB;AACxB,eAAO,MAAM,iBAAiB,OAAS,CAAA;AAEvC,oBAAY,eAAe;IAC1B,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,YAAY,iBAAiB;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,aAAa,CAAA;IACjB,IAAI,EAAE,eAAe,CAAA;IACrB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,OAAO,EAAE,CACR,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,oBAAoB,CAAC,EAAE,iBAAiB,KACpC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAErC,YAAY,EAAE,OAAO,CAAA;CACrB;AAED,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE;KAAG,GAAG,IAAI,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,aAAa,CAAC;CA4HjG,CAAA;AAED,yBAAyB;AACzB,eAAO,MAAM,aAAa,EAAE,eAAe,EAKzC,CAAA;AAEF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAErE"}

154
node_modules/@elgato-stream-deck/core/dist/index.js generated vendored Normal file
View File

@@ -0,0 +1,154 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEVICE_MODELS = exports.DEVICE_MODELS2 = exports.DeviceModelType = exports.CORSAIR_VENDOR_ID = exports.VENDOR_ID = exports.parseAllFirmwareVersionsHelper = exports.uint8ArrayToDataView = exports.StreamDeckProxy = void 0;
exports.getStreamDeckModelName = getStreamDeckModelName;
const tslib_1 = require("tslib");
const id_js_1 = require("./id.js");
const original_js_1 = require("./models/original.js");
const _6_key_js_1 = require("./models/6-key.js");
const _32_key_js_1 = require("./models/32-key.js");
const _15_key_js_1 = require("./models/15-key.js");
const plus_js_1 = require("./models/plus.js");
const pedal_js_1 = require("./models/pedal.js");
const neo_js_1 = require("./models/neo.js");
const studio_js_1 = require("./models/studio.js");
const network_dock_js_1 = require("./models/network-dock.js");
const galleon_k100_js_1 = require("./models/galleon-k100.js");
tslib_1.__exportStar(require("./types.js"), exports);
tslib_1.__exportStar(require("./id.js"), exports);
tslib_1.__exportStar(require("./controlDefinition.js"), exports);
var proxy_js_1 = require("./proxy.js");
Object.defineProperty(exports, "StreamDeckProxy", { enumerable: true, get: function () { return proxy_js_1.StreamDeckProxy; } });
var util_js_1 = require("./util.js");
Object.defineProperty(exports, "uint8ArrayToDataView", { enumerable: true, get: function () { return util_js_1.uint8ArrayToDataView; } });
var all_firmware_js_1 = require("./services/properties/all-firmware.js");
Object.defineProperty(exports, "parseAllFirmwareVersionsHelper", { enumerable: true, get: function () { return all_firmware_js_1.parseAllFirmwareVersionsHelper; } });
/** Elgato vendor id */
exports.VENDOR_ID = 0x0fd9;
/** Corsair vendor id */
exports.CORSAIR_VENDOR_ID = 0x1b1c;
var DeviceModelType;
(function (DeviceModelType) {
DeviceModelType["STREAMDECK"] = "streamdeck";
DeviceModelType["PEDAL"] = "pedal";
DeviceModelType["NETWORK_DOCK"] = "network-dock";
})(DeviceModelType || (exports.DeviceModelType = DeviceModelType = {}));
/** List of all the known models, and the classes to use them */
exports.DEVICE_MODELS2 = {
[id_js_1.DeviceModelId.ORIGINAL]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x0060],
vendorId: exports.VENDOR_ID,
factory: original_js_1.StreamDeckOriginalFactory,
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.MINI]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x0063, 0x0090, 0x00b3],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _6_key_js_1.StreamDeck6KeyFactory)(id_js_1.DeviceModelId.MINI, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.XL]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x006c, 0x008f],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _32_key_js_1.StreamDeck32KeyFactory)(id_js_1.DeviceModelId.XL, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.ORIGINALV2]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x006d],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _15_key_js_1.StreamDeck15KeyFactory)(id_js_1.DeviceModelId.ORIGINALV2, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.ORIGINALMK2]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x0080],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _15_key_js_1.StreamDeck15KeyFactory)(id_js_1.DeviceModelId.ORIGINALMK2, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.ORIGINALMK2SCISSOR]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x00a5],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _15_key_js_1.StreamDeck15KeyFactory)(id_js_1.DeviceModelId.ORIGINALMK2SCISSOR, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.PLUS]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x0084],
vendorId: exports.VENDOR_ID,
factory: plus_js_1.StreamDeckPlusFactory,
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.PEDAL]: {
type: DeviceModelType.PEDAL,
productIds: [0x0086],
vendorId: exports.VENDOR_ID,
factory: pedal_js_1.StreamDeckPedalFactory,
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.NEO]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x009a],
vendorId: exports.VENDOR_ID,
factory: neo_js_1.StreamDeckNeoFactory,
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.STUDIO]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x00aa],
vendorId: exports.VENDOR_ID,
factory: studio_js_1.StreamDeckStudioFactory,
hasNativeTcp: true,
},
[id_js_1.DeviceModelId.MODULE6]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x00b8],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _6_key_js_1.StreamDeck6KeyFactory)(id_js_1.DeviceModelId.MODULE6, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.MODULE15]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x00b9],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _15_key_js_1.StreamDeck15KeyFactory)(id_js_1.DeviceModelId.MODULE15, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.MODULE32]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x00ba],
vendorId: exports.VENDOR_ID,
factory: (...args) => (0, _32_key_js_1.StreamDeck32KeyFactory)(id_js_1.DeviceModelId.MODULE32, ...args),
hasNativeTcp: false,
},
[id_js_1.DeviceModelId.NETWORK_DOCK]: {
type: DeviceModelType.NETWORK_DOCK,
productIds: [0xffff], // Note: This isn't a real product id, but matches what is reported when querying the device
vendorId: exports.VENDOR_ID,
factory: network_dock_js_1.NetworkDockFactory,
hasNativeTcp: true,
},
[id_js_1.DeviceModelId.GALLEON_K100]: {
type: DeviceModelType.STREAMDECK,
productIds: [0x2b18],
vendorId: exports.CORSAIR_VENDOR_ID,
factory: galleon_k100_js_1.GalleonK100Factory,
hidUsage: 0x01,
hidInterface: 0,
hasNativeTcp: false,
},
};
/** @deprecated maybe? */
exports.DEVICE_MODELS = Object.entries(exports.DEVICE_MODELS2).map(([id, spec]) => {
const modelId = id;
return { id: modelId, productName: id_js_1.MODEL_NAMES[modelId], ...spec };
});
function getStreamDeckModelName(modelId) {
return id_js_1.MODEL_NAMES[modelId] || 'Unknown Stream Deck';
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,7 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
import { type DeviceModelId } from '../id.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare function StreamDeck15KeyFactory(model: DeviceModelId, device: HIDDevice, options: Required<OpenStreamDeckOptions>, _tcpPropertiesService?: PropertiesService): StreamDeckBase;
//# sourceMappingURL=15-key.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"15-key.d.ts","sourceRoot":"","sources":["../../src/models/15-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,UAAU,CAAA;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAe5E,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,qBAAqB,CAAC,EAAE,iBAAiB,GACvC,cAAc,CAUhB"}

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeck15KeyFactory = StreamDeck15KeyFactory;
const base_js_1 = require("./base.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const base15KeyProperties = {
SUPPORTS_RGB_KEY_FILL: false, // TODO - verify SUPPORTS_RGB_KEY_FILL
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)((0, controlsGenerator_js_1.generateButtonsGrid)(5, 3, { width: 72, height: 72 })),
KEY_SPACING_HORIZONTAL: 25,
KEY_SPACING_VERTICAL: 25,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
function StreamDeck15KeyFactory(model, device, options, _tcpPropertiesService) {
const properties = {
...base15KeyProperties,
MODEL: model,
PRODUCT_NAME: id_js_1.MODEL_NAMES[model],
};
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, properties, null);
return new base_js_1.StreamDeckBase(device, options, services);
}
//# sourceMappingURL=15-key.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"15-key.js","sourceRoot":"","sources":["../../src/models/15-key.ts"],"names":[],"mappings":";;AAsBA,wDAeC;AAnCD,uCAA0C;AAE1C,uDAA4D;AAC5D,oCAA0D;AAC1D,kEAAgF;AAGhF,MAAM,mBAAmB,GAA6D;IACrF,qBAAqB,EAAE,KAAK,EAAE,sCAAsC;IAEpE,QAAQ,EAAE,IAAA,wCAAiB,EAAC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjF,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;CAC7B,CAAA;AAED,SAAgB,sBAAsB,CACrC,KAAoB,EACpB,MAAiB,EACjB,OAAwC,EACxC,qBAAyC;IAEzC,MAAM,UAAU,GAA6B;QAC5C,GAAG,mBAAmB;QACtB,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,mBAAW,CAAC,KAAK,CAAC;KAChC,CAAA;IAED,MAAM,QAAQ,GAAG,IAAA,0CAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAE5E,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC"}

View File

@@ -0,0 +1,7 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
import { type DeviceModelId } from '../id.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare function StreamDeck32KeyFactory(model: DeviceModelId, device: HIDDevice, options: Required<OpenStreamDeckOptions>, _tcpPropertiesService?: PropertiesService): StreamDeckBase;
//# sourceMappingURL=32-key.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"32-key.d.ts","sourceRoot":"","sources":["../../src/models/32-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,UAAU,CAAA;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAe5E,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,qBAAqB,CAAC,EAAE,iBAAiB,GACvC,cAAc,CAShB"}

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeck32KeyFactory = StreamDeck32KeyFactory;
const base_js_1 = require("./base.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const base32KeyProperties = {
SUPPORTS_RGB_KEY_FILL: false, // rev2 doesn't support it, even though rev1 does
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)((0, controlsGenerator_js_1.generateButtonsGrid)(8, 4, { width: 96, height: 96 })),
KEY_SPACING_HORIZONTAL: 32,
KEY_SPACING_VERTICAL: 39,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
function StreamDeck32KeyFactory(model, device, options, _tcpPropertiesService) {
const properties = {
...base32KeyProperties,
MODEL: model,
PRODUCT_NAME: id_js_1.MODEL_NAMES[model],
};
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, properties, null);
return new base_js_1.StreamDeckBase(device, options, services);
}
//# sourceMappingURL=32-key.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"32-key.js","sourceRoot":"","sources":["../../src/models/32-key.ts"],"names":[],"mappings":";;AAsBA,wDAcC;AAlCD,uCAA0C;AAE1C,uDAA4D;AAC5D,oCAA0D;AAC1D,kEAAgF;AAGhF,MAAM,mBAAmB,GAA6D;IACrF,qBAAqB,EAAE,KAAK,EAAE,iDAAiD;IAE/E,QAAQ,EAAE,IAAA,wCAAiB,EAAC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjF,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;CAC7B,CAAA;AAED,SAAgB,sBAAsB,CACrC,KAAoB,EACpB,MAAiB,EACjB,OAAwC,EACxC,qBAAyC;IAEzC,MAAM,UAAU,GAA6B;QAC5C,GAAG,mBAAmB;QACtB,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,mBAAW,CAAC,KAAK,CAAC;KAChC,CAAA;IACD,MAAM,QAAQ,GAAG,IAAA,0CAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAE5E,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC"}

View File

@@ -0,0 +1,6 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions, StreamDeckBase } from './base.js';
import { type DeviceModelId } from '../id.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare function StreamDeck6KeyFactory(model: DeviceModelId, device: HIDDevice, options: Required<OpenStreamDeckOptions>, _tcpPropertiesService?: PropertiesService): StreamDeckBase;
//# sourceMappingURL=6-key.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"6-key.d.ts","sourceRoot":"","sources":["../../src/models/6-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGtE,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,UAAU,CAAA;AAI1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAa5E,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,qBAAqB,CAAC,EAAE,iBAAiB,GACvC,cAAc,CAehB"}

View File

@@ -0,0 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeck6KeyFactory = StreamDeck6KeyFactory;
const generic_gen1_js_1 = require("./generic-gen1.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const imageWriter_js_1 = require("../services/imageWriter/imageWriter.js");
const headerGenerator_js_1 = require("../services/imageWriter/headerGenerator.js");
const base6KeyProperties = {
SUPPORTS_RGB_KEY_FILL: false, // TODO - verify this
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)((0, controlsGenerator_js_1.generateButtonsGrid)(3, 2, { width: 80, height: 80 })),
KEY_SPACING_HORIZONTAL: 28,
KEY_SPACING_VERTICAL: 28,
FULLSCREEN_PANELS: 0,
};
function StreamDeck6KeyFactory(model, device, options, _tcpPropertiesService) {
const properties = {
...base6KeyProperties,
MODEL: model,
PRODUCT_NAME: id_js_1.MODEL_NAMES[model],
};
return (0, generic_gen1_js_1.StreamDeckGen1Factory)(device, options, properties, new imageWriter_js_1.StreamdeckDefaultImageWriter(new headerGenerator_js_1.StreamdeckGen1ImageHeaderGenerator()), { colorMode: 'bgr', rotate: true, yFlip: true }, 2835);
}
//# sourceMappingURL=6-key.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"6-key.js","sourceRoot":"","sources":["../../src/models/6-key.ts"],"names":[],"mappings":";;AAqBA,sDAoBC;AAtCD,uDAAyD;AACzD,oCAA0D;AAC1D,kEAAgF;AAChF,2EAAqF;AACrF,mFAA+F;AAG/F,MAAM,kBAAkB,GAA6D;IACpF,qBAAqB,EAAE,KAAK,EAAE,qBAAqB;IAEnD,QAAQ,EAAE,IAAA,wCAAiB,EAAC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjF,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;CACpB,CAAA;AAED,SAAgB,qBAAqB,CACpC,KAAoB,EACpB,MAAiB,EACjB,OAAwC,EACxC,qBAAyC;IAEzC,MAAM,UAAU,GAA6B;QAC5C,GAAG,kBAAkB;QACrB,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,mBAAW,CAAC,KAAK,CAAC;KAChC,CAAA;IAED,OAAO,IAAA,uCAAqB,EAC3B,MAAM,EACN,OAAO,EACP,UAAU,EACV,IAAI,6CAA4B,CAAC,IAAI,uDAAkC,EAAE,CAAC,EAC1E,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAC/C,IAAI,CACJ,CAAA;AACF,CAAC"}

View File

@@ -0,0 +1,82 @@
import { EventEmitter } from 'eventemitter3';
import type { HIDDevice, HIDDeviceInfo } from '../hid-device.js';
import type { DeviceModelId, Dimension, KeyIndex } from '../id.js';
import type { FillImageOptions, FillPanelDimensionsOptions, FillPanelOptions, StreamDeck, StreamDeckEvents, StreamDeckTcpChildDeviceInfo } from '../types.js';
import type { ButtonsLcdDisplayService } from '../services/buttonsLcdDisplay/interface.js';
import type { StreamDeckButtonControlDefinition, StreamDeckControlDefinition } from '../controlDefinition.js';
import type { LcdSegmentDisplayService } from '../services/lcdSegmentDisplay/interface.js';
import type { PropertiesService } from '../services/properties/interface.js';
import type { CallbackHook } from '../services/callback-hook.js';
import type { StreamDeckInputService } from '../services/input/interface.js';
import type { EncoderLedService } from '../services/encoderLed/interface.js';
import { type PreparedBuffer } from '../preparedBuffer.js';
export type EncodeJPEGHelper = (buffer: Uint8Array, width: number, height: number) => Promise<Uint8Array>;
export interface OpenStreamDeckOptions {
encodeJPEG?: EncodeJPEGHelper;
}
export type StreamDeckProperties = Readonly<{
MODEL: DeviceModelId;
PRODUCT_NAME: string;
KEY_DATA_OFFSET: number;
SUPPORTS_RGB_KEY_FILL: boolean;
CONTROLS: Readonly<StreamDeckControlDefinition[]>;
/**
* TODO - rework this
* @deprecated
*/
KEY_SPACING_HORIZONTAL: number;
/**
* TODO - rework this
* @deprecated
*/
KEY_SPACING_VERTICAL: number;
FULLSCREEN_PANELS: number;
HAS_NFC_READER: boolean;
/** Whether this device supports child devices */
SUPPORTS_CHILD_DEVICES: boolean;
}>;
export interface StreamDeckServicesDefinition {
deviceProperties: StreamDeckProperties;
events: CallbackHook<StreamDeckEvents>;
properties: PropertiesService;
buttonsLcd: ButtonsLcdDisplayService;
inputService: StreamDeckInputService;
lcdSegmentDisplay: LcdSegmentDisplayService | null;
encoderLed: EncoderLedService | null;
}
export declare class StreamDeckBase extends EventEmitter<StreamDeckEvents> implements StreamDeck {
#private;
get CONTROLS(): Readonly<StreamDeckControlDefinition[]>;
get MODEL(): DeviceModelId;
get PRODUCT_NAME(): string;
get HAS_NFC_READER(): boolean;
protected readonly device: HIDDevice;
protected readonly deviceProperties: Readonly<StreamDeckProperties>;
constructor(device: HIDDevice, _options: Readonly<Required<OpenStreamDeckOptions>>, services: StreamDeckServicesDefinition);
protected checkValidKeyIndex(keyIndex: KeyIndex, feedbackType: StreamDeckButtonControlDefinition['feedbackType'] | null): void;
calculateFillPanelDimensions(options?: FillPanelDimensionsOptions): Dimension | null;
close(): Promise<void>;
getHidDeviceInfo(): Promise<HIDDeviceInfo>;
setBrightness(percentage: number): Promise<void>;
resetToLogo(): Promise<void>;
getFirmwareVersion(): Promise<string>;
getAllFirmwareVersions(): Promise<Record<string, string>>;
getSerialNumber(): Promise<string>;
sendPreparedBuffer(buffer: PreparedBuffer): Promise<void>;
fillKeyColor(keyIndex: KeyIndex, r: number, g: number, b: number): Promise<void>;
fillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array, options?: FillImageOptions): Promise<void>;
prepareFillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillImageOptions, jsonSafe?: boolean): Promise<PreparedBuffer>;
fillPanelBuffer(imageBuffer: Uint8Array, options?: FillPanelOptions): Promise<void>;
prepareFillPanelBuffer(imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillPanelOptions, jsonSafe?: boolean): Promise<PreparedBuffer>;
clearKey(keyIndex: KeyIndex): Promise<void>;
clearPanel(): Promise<void>;
fillLcd(...args: Parameters<StreamDeck['fillLcd']>): ReturnType<StreamDeck['fillLcd']>;
fillLcdRegion(...args: Parameters<StreamDeck['fillLcdRegion']>): ReturnType<StreamDeck['fillLcdRegion']>;
prepareFillLcdRegion(...args: Parameters<StreamDeck['prepareFillLcdRegion']>): ReturnType<StreamDeck['prepareFillLcdRegion']>;
clearLcdSegment(...args: Parameters<StreamDeck['clearLcdSegment']>): ReturnType<StreamDeck['clearLcdSegment']>;
setEncoderColor(...args: Parameters<StreamDeck['setEncoderColor']>): ReturnType<StreamDeck['setEncoderColor']>;
setEncoderRingSingleColor(...args: Parameters<StreamDeck['setEncoderRingSingleColor']>): ReturnType<StreamDeck['setEncoderRingSingleColor']>;
setEncoderRingColors(...args: Parameters<StreamDeck['setEncoderRingColors']>): ReturnType<StreamDeck['setEncoderRingColors']>;
getChildDeviceInfo(): Promise<StreamDeckTcpChildDeviceInfo | null>;
}
//# sourceMappingURL=base.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/models/base.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,167 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckBase = void 0;
const eventemitter3_1 = require("eventemitter3");
const index_js_1 = require("../index.js");
const preparedBuffer_js_1 = require("../preparedBuffer.js");
class StreamDeckBase extends eventemitter3_1.EventEmitter {
get CONTROLS() {
return this.deviceProperties.CONTROLS;
}
// get KEY_SPACING_HORIZONTAL(): number {
// return this.deviceProperties.KEY_SPACING_HORIZONTAL
// }
// get KEY_SPACING_VERTICAL(): number {
// return this.deviceProperties.KEY_SPACING_VERTICAL
// }
get MODEL() {
return this.deviceProperties.MODEL;
}
get PRODUCT_NAME() {
return this.deviceProperties.PRODUCT_NAME;
}
get HAS_NFC_READER() {
return this.deviceProperties.HAS_NFC_READER;
}
device;
deviceProperties;
// readonly #options: Readonly<Required<OpenStreamDeckOptions>>
#propertiesService;
#buttonsLcdService;
#lcdSegmentDisplayService;
#inputService;
#encoderLedService;
constructor(device, _options, services) {
super();
this.device = device;
this.deviceProperties = services.deviceProperties;
// this.#options = options
this.#propertiesService = services.properties;
this.#buttonsLcdService = services.buttonsLcd;
this.#lcdSegmentDisplayService = services.lcdSegmentDisplay;
this.#inputService = services.inputService;
this.#encoderLedService = services.encoderLed;
// propogate events
services.events?.listen((key, ...args) => this.emit(key, ...args));
this.device.on('input', (data) => this.#inputService.handleInput(data));
this.device.on('error', (err) => {
this.emit('error', err);
});
}
checkValidKeyIndex(keyIndex, feedbackType) {
const buttonControl = this.deviceProperties.CONTROLS.find((control) => control.type === 'button' && control.index === keyIndex);
if (!buttonControl) {
throw new TypeError(`Expected a valid keyIndex`);
}
if (feedbackType && buttonControl.feedbackType !== feedbackType) {
throw new TypeError(`Expected a keyIndex with expected feedbackType`);
}
}
calculateFillPanelDimensions(options) {
return this.#buttonsLcdService.calculateFillPanelDimensions(options);
}
async close() {
return this.device.close();
}
async getHidDeviceInfo() {
return this.device.getDeviceInfo();
}
async setBrightness(percentage) {
return this.#propertiesService.setBrightness(percentage);
}
async resetToLogo() {
return this.#propertiesService.resetToLogo();
}
async getFirmwareVersion() {
return this.#propertiesService.getFirmwareVersion();
}
async getAllFirmwareVersions() {
return this.#propertiesService.getAllFirmwareVersions();
}
async getSerialNumber() {
return this.#propertiesService.getSerialNumber();
}
async sendPreparedBuffer(buffer) {
const packets = (0, preparedBuffer_js_1.unwrapPreparedBufferToBuffer)(this.deviceProperties.MODEL, buffer);
await this.device.sendReports(packets);
}
async fillKeyColor(keyIndex, r, g, b) {
this.checkValidKeyIndex(keyIndex, null);
await this.#buttonsLcdService.fillKeyColor(keyIndex, r, g, b);
}
async fillKeyBuffer(keyIndex, imageBuffer, options) {
this.checkValidKeyIndex(keyIndex, 'lcd');
await this.#buttonsLcdService.fillKeyBuffer(keyIndex, imageBuffer, options);
}
async prepareFillKeyBuffer(keyIndex, imageBuffer, options, jsonSafe) {
return this.#buttonsLcdService.prepareFillKeyBuffer(keyIndex, imageBuffer, options, jsonSafe);
}
async fillPanelBuffer(imageBuffer, options) {
await this.#buttonsLcdService.fillPanelBuffer(imageBuffer, options);
}
async prepareFillPanelBuffer(imageBuffer, options, jsonSafe) {
return this.#buttonsLcdService.prepareFillPanelBuffer(imageBuffer, options, jsonSafe);
}
async clearKey(keyIndex) {
this.checkValidKeyIndex(keyIndex, null);
await this.#buttonsLcdService.clearKey(keyIndex);
}
async clearPanel() {
const ps = [];
ps.push(this.#buttonsLcdService.clearPanel());
if (this.#lcdSegmentDisplayService)
ps.push(this.#lcdSegmentDisplayService.clearAllLcdSegments());
if (this.#encoderLedService)
ps.push(this.#encoderLedService.clearAll());
await Promise.all(ps);
}
async fillLcd(...args) {
if (!this.#lcdSegmentDisplayService)
throw new Error('Not supported for this model');
return this.#lcdSegmentDisplayService.fillLcd(...args);
}
async fillLcdRegion(...args) {
if (!this.#lcdSegmentDisplayService)
throw new Error('Not supported for this model');
return this.#lcdSegmentDisplayService.fillLcdRegion(...args);
}
async prepareFillLcdRegion(...args) {
if (!this.#lcdSegmentDisplayService)
throw new Error('Not supported for this model');
return this.#lcdSegmentDisplayService.prepareFillLcdRegion(...args);
}
async clearLcdSegment(...args) {
if (!this.#lcdSegmentDisplayService)
throw new Error('Not supported for this model');
return this.#lcdSegmentDisplayService.clearLcdSegment(...args);
}
async setEncoderColor(...args) {
if (!this.#encoderLedService)
throw new Error('Not supported for this model');
return this.#encoderLedService.setEncoderColor(...args);
}
async setEncoderRingSingleColor(...args) {
if (!this.#encoderLedService)
throw new Error('Not supported for this model');
return this.#encoderLedService.setEncoderRingSingleColor(...args);
}
async setEncoderRingColors(...args) {
if (!this.#encoderLedService)
throw new Error('Not supported for this model');
return this.#encoderLedService.setEncoderRingColors(...args);
}
async getChildDeviceInfo() {
const info = await this.device.getChildDeviceInfo();
if (!info)
return null;
const model = index_js_1.DEVICE_MODELS.find((m) => m.productIds.includes(info.productId) && m.vendorId === info.vendorId);
if (!model)
return null;
return {
...info,
model: model.id,
};
}
}
exports.StreamDeckBase = StreamDeckBase;
//# sourceMappingURL=base.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare function GalleonK100Factory(device: HIDDevice, options: Required<OpenStreamDeckOptions>, _tcpPropertiesService?: PropertiesService): Promise<StreamDeckBase>;
//# sourceMappingURL=galleon-k100.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"galleon-k100.d.ts","sourceRoot":"","sources":["../../src/models/galleon-k100.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAgC,MAAM,WAAW,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAK1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAiE5E,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,qBAAqB,CAAC,EAAE,iBAAiB,GACvC,OAAO,CAAC,cAAc,CAAC,CAWzB"}

View File

@@ -0,0 +1,88 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GalleonK100Factory = GalleonK100Factory;
const base_js_1 = require("./base.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const galleonK100_js_1 = require("../services/encoderLed/galleonK100.js");
const generic_js_1 = require("../services/lcdSegmentDisplay/generic.js");
const k100Controls = (0, controlsGenerator_js_1.generateButtonsGrid)(3, 4, { width: 160, height: 160 }, false, 0, 2);
k100Controls.push({
type: 'encoder',
row: 0,
column: 0,
index: 0,
hidIndex: 0,
hasLed: false,
ledRingSteps: 4,
lcdRingOffset: 3,
}, {
type: 'encoder',
row: 0,
column: 2,
index: 1,
hidIndex: 1,
hasLed: false,
ledRingSteps: 4,
lcdRingOffset: 1,
}, {
type: 'lcd-segment',
row: 1,
column: 0,
columnSpan: 3,
rowSpan: 1,
id: 0,
pixelSize: Object.freeze({
width: 720,
height: 384,
}),
drawRegions: true,
});
const galleonK100Properties = {
MODEL: id_js_1.DeviceModelId.GALLEON_K100,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.GALLEON_K100],
SUPPORTS_RGB_KEY_FILL: true,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)(k100Controls),
KEY_SPACING_HORIZONTAL: 64,
KEY_SPACING_VERTICAL: 64,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
const lcdSegmentControls = galleonK100Properties.CONTROLS.filter((control) => control.type === 'lcd-segment');
async function GalleonK100Factory(device, options, _tcpPropertiesService) {
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, galleonK100Properties, null, true);
services.encoderLed = new galleonK100_js_1.GalleonK100EncoderLedService(device, galleonK100Properties.CONTROLS);
services.lcdSegmentDisplay = new generic_js_1.StreamdeckDefaultLcdService(options.encodeJPEG, device, lcdSegmentControls);
const streamDeck = new GalleonK100StreamDeck(device, options, services);
// Wait for the device to be ready
await new Promise((resolve) => setTimeout(resolve, 200));
return streamDeck;
}
class GalleonK100StreamDeck extends base_js_1.StreamDeckBase {
#pingInterval;
constructor(device, options, services) {
super(device, options, services);
// Stop the ping upon error
device.on('error', () => this.#stopPing());
this.#pingInterval = setInterval(this.#sendPing, 500);
this.#sendPing();
}
async close() {
this.#stopPing();
return super.close();
}
#sendPing = () => {
this.device.sendFeatureReport(new Uint8Array([0x03, 0x27])).catch((e) => {
// Emit as an error on the streamdeck
this.emit('error', e);
this.#stopPing();
});
};
#stopPing() {
// Stop pinging
clearInterval(this.#pingInterval);
}
}
//# sourceMappingURL=galleon-k100.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"galleon-k100.js","sourceRoot":"","sources":["../../src/models/galleon-k100.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,8 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions, StreamDeckProperties } from './base.js';
import { StreamDeckBase } from './base.js';
import type { StreamdeckImageWriter } from '../services/imageWriter/types.js';
import type { FillImageTargetOptions } from '../util.js';
export type StreamDeckGen1Properties = Omit<StreamDeckProperties, 'KEY_DATA_OFFSET' | 'HAS_NFC_READER' | 'SUPPORTS_CHILD_DEVICES'>;
export declare function StreamDeckGen1Factory(device: HIDDevice, options: Required<OpenStreamDeckOptions>, properties: StreamDeckGen1Properties, imageWriter: StreamdeckImageWriter, targetOptions: FillImageTargetOptions, bmpImagePPM: number): StreamDeckBase;
//# sourceMappingURL=generic-gen1.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generic-gen1.d.ts","sourceRoot":"","sources":["../../src/models/generic-gen1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAiBxD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAC1C,oBAAoB,EACpB,iBAAiB,GAAG,gBAAgB,GAAG,wBAAwB,CAC/D,CAAA;AAED,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,UAAU,EAAE,wBAAwB,EACpC,WAAW,EAAE,qBAAqB,EAClC,aAAa,EAAE,sBAAsB,EACrC,WAAW,EAAE,MAAM,GACjB,cAAc,CAmBhB"}

View File

@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckGen1Factory = StreamDeckGen1Factory;
const base_js_1 = require("./base.js");
const gen1_js_1 = require("../services/properties/gen1.js");
const default_js_1 = require("../services/buttonsLcdDisplay/default.js");
const bitmap_js_1 = require("../services/imagePacker/bitmap.js");
const callback_hook_js_1 = require("../services/callback-hook.js");
const gen1_js_2 = require("../services/input/gen1.js");
function extendDevicePropertiesForGen1(rawProps) {
return {
...rawProps,
KEY_DATA_OFFSET: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
}
function StreamDeckGen1Factory(device, options, properties, imageWriter, targetOptions, bmpImagePPM) {
const fullProperties = extendDevicePropertiesForGen1(properties);
const events = new callback_hook_js_1.CallbackHook();
return new base_js_1.StreamDeckBase(device, options, {
deviceProperties: fullProperties,
events,
properties: new gen1_js_1.Gen1PropertiesService(device),
buttonsLcd: new default_js_1.DefaultButtonsLcdService(imageWriter, new bitmap_js_1.BitmapButtonLcdImagePacker(targetOptions, bmpImagePPM), device, fullProperties),
lcdSegmentDisplay: null,
inputService: new gen1_js_2.ButtonOnlyInputService(fullProperties, events),
encoderLed: null,
});
}
//# sourceMappingURL=generic-gen1.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generic-gen1.js","sourceRoot":"","sources":["../../src/models/generic-gen1.ts"],"names":[],"mappings":";;AA0BA,sDA0BC;AAlDD,uCAA0C;AAG1C,4DAAsE;AACtE,yEAAmF;AACnF,iEAA8E;AAC9E,mEAA2D;AAE3D,uDAAkE;AAElE,SAAS,6BAA6B,CAAC,QAAkC;IACxE,OAAO;QACN,GAAG,QAAQ;QACX,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,KAAK;QACrB,sBAAsB,EAAE,KAAK;KAC7B,CAAA;AACF,CAAC;AAOD,SAAgB,qBAAqB,CACpC,MAAiB,EACjB,OAAwC,EACxC,UAAoC,EACpC,WAAkC,EAClC,aAAqC,EACrC,WAAmB;IAEnB,MAAM,cAAc,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,IAAI,+BAAY,EAAoB,CAAA;IAEnD,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE;QAC1C,gBAAgB,EAAE,cAAc;QAChC,MAAM;QACN,UAAU,EAAE,IAAI,+BAAqB,CAAC,MAAM,CAAC;QAC7C,UAAU,EAAE,IAAI,qCAAwB,CACvC,WAAW,EACX,IAAI,sCAA0B,CAAC,aAAa,EAAE,WAAW,CAAC,EAC1D,MAAM,EACN,cAAc,CACd;QACD,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI,gCAAsB,CAAC,cAAc,EAAE,MAAM,CAAC;QAChE,UAAU,EAAE,IAAI;KAChB,CAAC,CAAA;AACH,CAAC"}

View File

@@ -0,0 +1,6 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions, StreamDeckProperties, StreamDeckServicesDefinition } from './base.js';
import type { PropertiesService } from '../services/properties/interface.js';
export type StreamDeckGen2Properties = Omit<StreamDeckProperties, 'KEY_DATA_OFFSET'>;
export declare function createBaseGen2Properties(device: HIDDevice, options: Required<OpenStreamDeckOptions>, properties: StreamDeckGen2Properties, propertiesService: PropertiesService | null, disableXYFlip?: boolean): StreamDeckServicesDefinition;
//# sourceMappingURL=generic-gen2.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generic-gen2.d.ts","sourceRoot":"","sources":["../../src/models/generic-gen2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAA;AAS1G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAS5E,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAA;AAEpF,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,UAAU,EAAE,wBAAwB,EACpC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,EAC3C,aAAa,CAAC,EAAE,OAAO,GACrB,4BAA4B,CAmB9B"}

View File

@@ -0,0 +1,30 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBaseGen2Properties = createBaseGen2Properties;
const imageWriter_js_1 = require("../services/imageWriter/imageWriter.js");
const headerGenerator_js_1 = require("../services/imageWriter/headerGenerator.js");
const default_js_1 = require("../services/buttonsLcdDisplay/default.js");
const callback_hook_js_1 = require("../services/callback-hook.js");
const gen2_js_1 = require("../services/properties/gen2.js");
const jpeg_js_1 = require("../services/imagePacker/jpeg.js");
const gen2_js_2 = require("../services/input/gen2.js");
function extendDevicePropertiesForGen2(rawProps) {
return {
...rawProps,
KEY_DATA_OFFSET: 3,
};
}
function createBaseGen2Properties(device, options, properties, propertiesService, disableXYFlip) {
const fullProperties = extendDevicePropertiesForGen2(properties);
const events = new callback_hook_js_1.CallbackHook();
return {
deviceProperties: fullProperties,
events,
properties: propertiesService ?? new gen2_js_1.Gen2PropertiesService(device),
buttonsLcd: new default_js_1.DefaultButtonsLcdService(new imageWriter_js_1.StreamdeckDefaultImageWriter(new headerGenerator_js_1.StreamdeckGen2ImageHeaderGenerator()), new jpeg_js_1.JpegButtonLcdImagePacker(options.encodeJPEG, !disableXYFlip), device, fullProperties),
lcdSegmentDisplay: null,
inputService: new gen2_js_2.Gen2InputService(fullProperties, events),
encoderLed: null,
};
}
//# sourceMappingURL=generic-gen2.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generic-gen2.js","sourceRoot":"","sources":["../../src/models/generic-gen2.ts"],"names":[],"mappings":";;AAqBA,4DAyBC;AA5CD,2EAAqF;AACrF,mFAA+F;AAC/F,yEAAmF;AACnF,mEAA2D;AAE3D,4DAAsE;AACtE,6DAA0E;AAC1E,uDAA4D;AAG5D,SAAS,6BAA6B,CAAC,QAAkC;IACxE,OAAO;QACN,GAAG,QAAQ;QACX,eAAe,EAAE,CAAC;KAClB,CAAA;AACF,CAAC;AAID,SAAgB,wBAAwB,CACvC,MAAiB,EACjB,OAAwC,EACxC,UAAoC,EACpC,iBAA2C,EAC3C,aAAuB;IAEvB,MAAM,cAAc,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,IAAI,+BAAY,EAAoB,CAAA;IAEnD,OAAO;QACN,gBAAgB,EAAE,cAAc;QAChC,MAAM;QACN,UAAU,EAAE,iBAAiB,IAAI,IAAI,+BAAqB,CAAC,MAAM,CAAC;QAClE,UAAU,EAAE,IAAI,qCAAwB,CACvC,IAAI,6CAA4B,CAAC,IAAI,uDAAkC,EAAE,CAAC,EAC1E,IAAI,kCAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,EAChE,MAAM,EACN,cAAc,CACd;QACD,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI,0BAAgB,CAAC,cAAc,EAAE,MAAM,CAAC;QAC1D,UAAU,EAAE,IAAI;KAChB,CAAA;AACF,CAAC"}

View File

@@ -0,0 +1,5 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
export declare function StreamDeckNeoFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>): StreamDeckBase;
//# sourceMappingURL=neo.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"neo.d.ts","sourceRoot":"","sources":["../../src/models/neo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AA8D1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAKhH"}

View File

@@ -0,0 +1,54 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckNeoFactory = StreamDeckNeoFactory;
const base_js_1 = require("./base.js");
const id_js_1 = require("../id.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const neo_js_1 = require("../services/lcdSegmentDisplay/neo.js");
const neoControls = (0, controlsGenerator_js_1.generateButtonsGrid)(4, 2, { width: 96, height: 96 });
neoControls.push({
type: 'button',
row: 2,
column: 0,
index: 8,
hidIndex: 8,
feedbackType: 'rgb',
}, {
type: 'lcd-segment',
row: 2,
column: 1,
columnSpan: 2,
rowSpan: 1,
id: 0,
pixelSize: {
width: 248,
height: 58,
},
drawRegions: false,
}, {
type: 'button',
row: 2,
column: 3,
index: 9,
hidIndex: 9,
feedbackType: 'rgb',
});
const neoProperties = {
MODEL: id_js_1.DeviceModelId.NEO,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.NEO],
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)(neoControls),
KEY_SPACING_HORIZONTAL: 30,
KEY_SPACING_VERTICAL: 30,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
SUPPORTS_RGB_KEY_FILL: true,
};
const lcdSegmentControls = neoProperties.CONTROLS.filter((control) => control.type === 'lcd-segment');
function StreamDeckNeoFactory(device, options) {
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, neoProperties, null);
services.lcdSegmentDisplay = new neo_js_1.StreamDeckNeoLcdService(options.encodeJPEG, device, lcdSegmentControls);
return new base_js_1.StreamDeckBase(device, options, services);
}
//# sourceMappingURL=neo.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"neo.js","sourceRoot":"","sources":["../../src/models/neo.ts"],"names":[],"mappings":";;AAgEA,oDAKC;AAnED,uCAA0C;AAC1C,oCAAqD;AAErD,uDAA4D;AAC5D,kEAAgF;AAEhF,iEAA8E;AAE9E,MAAM,WAAW,GAAkC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;AACvG,WAAW,CAAC,IAAI,CACf;IACC,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,KAAK;CACnB,EACD;IACC,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IAEV,EAAE,EAAE,CAAC;IAEL,SAAS,EAAE;QACV,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,EAAE;KACV;IAED,WAAW,EAAE,KAAK;CAClB,EACD;IACC,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,KAAK;CACnB,CACD,CAAA;AAED,MAAM,aAAa,GAA6B;IAC/C,KAAK,EAAE,qBAAa,CAAC,GAAG;IACxB,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,GAAG,CAAC;IAE5C,QAAQ,EAAE,IAAA,wCAAiB,EAAC,WAAW,CAAC;IAExC,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;IAC7B,qBAAqB,EAAE,IAAI;CAC3B,CAAA;AACD,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CACvD,CAAC,OAAO,EAAoD,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAC7F,CAAA;AAED,SAAgB,oBAAoB,CAAC,MAAiB,EAAE,OAAwC;IAC/F,MAAM,QAAQ,GAAG,IAAA,0CAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;IAC/E,QAAQ,CAAC,iBAAiB,GAAG,IAAI,gCAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAExG,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC"}

View File

@@ -0,0 +1,6 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare function NetworkDockFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>, _tcpPropertiesService?: PropertiesService): StreamDeckBase;
//# sourceMappingURL=network-dock.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"network-dock.d.ts","sourceRoot":"","sources":["../../src/models/network-dock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,WAAW,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAwB5E,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,qBAAqB,CAAC,EAAE,iBAAiB,GACvC,cAAc,CAYhB"}

View File

@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NetworkDockFactory = NetworkDockFactory;
const base_js_1 = require("./base.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const callback_hook_js_1 = require("../services/callback-hook.js");
const fake_js_1 = require("../services/buttonsLcdDisplay/fake.js");
const fake_js_2 = require("../services/input/fake.js");
const network_dock_js_1 = require("../services/properties/network-dock.js");
const networkDockProperties = {
MODEL: id_js_1.DeviceModelId.NETWORK_DOCK,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.NETWORK_DOCK],
KEY_DATA_OFFSET: 0,
SUPPORTS_RGB_KEY_FILL: false,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)([]),
KEY_SPACING_HORIZONTAL: 0,
KEY_SPACING_VERTICAL: 0,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: true,
};
function NetworkDockFactory(device, options, _tcpPropertiesService) {
const events = new callback_hook_js_1.CallbackHook();
return new base_js_1.StreamDeckBase(device, options, {
deviceProperties: networkDockProperties,
events,
properties: new network_dock_js_1.NetworkDockPropertiesService(device),
buttonsLcd: new fake_js_1.FakeLcdService(),
lcdSegmentDisplay: null,
inputService: new fake_js_2.FakeInputService(),
encoderLed: null,
});
}
//# sourceMappingURL=network-dock.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"network-dock.js","sourceRoot":"","sources":["../../src/models/network-dock.ts"],"names":[],"mappings":";;AA6BA,gDAgBC;AA3CD,uCAA0C;AAC1C,oCAAqD;AACrD,kEAA2D;AAG3D,mEAA2D;AAC3D,mEAAsE;AACtE,uDAA4D;AAC5D,4EAAqF;AAErF,MAAM,qBAAqB,GAAyB;IACnD,KAAK,EAAE,qBAAa,CAAC,YAAY;IACjC,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,YAAY,CAAC;IACrD,eAAe,EAAE,CAAC;IAElB,qBAAqB,EAAE,KAAK;IAE5B,QAAQ,EAAE,IAAA,wCAAiB,EAAC,EAAE,CAAC;IAE/B,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,CAAC;IAEvB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,IAAI;CAC5B,CAAA;AAED,SAAgB,kBAAkB,CACjC,MAAiB,EACjB,OAAwC,EACxC,qBAAyC;IAEzC,MAAM,MAAM,GAAG,IAAI,+BAAY,EAAoB,CAAA;IAEnD,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE;QAC1C,gBAAgB,EAAE,qBAAqB;QACvC,MAAM;QACN,UAAU,EAAE,IAAI,8CAA4B,CAAC,MAAM,CAAC;QACpD,UAAU,EAAE,IAAI,wBAAc,EAAE;QAChC,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI,0BAAgB,EAAE;QACpC,UAAU,EAAE,IAAI;KAChB,CAAC,CAAA;AACH,CAAC"}

View File

@@ -0,0 +1,4 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions, StreamDeckBase } from './base.js';
export declare function StreamDeckOriginalFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>): StreamDeckBase;
//# sourceMappingURL=original.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"original.d.ts","sourceRoot":"","sources":["../../src/models/original.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAoBtE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,cAAc,CASrH"}

View File

@@ -0,0 +1,20 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckOriginalFactory = StreamDeckOriginalFactory;
const generic_gen1_js_1 = require("./generic-gen1.js");
const id_js_1 = require("../id.js");
const imageWriter_js_1 = require("../services/imageWriter/imageWriter.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const originalProperties = {
MODEL: id_js_1.DeviceModelId.ORIGINAL,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.ORIGINAL],
SUPPORTS_RGB_KEY_FILL: false,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)((0, controlsGenerator_js_1.generateButtonsGrid)(5, 3, { width: 72, height: 72 }, true)),
KEY_SPACING_HORIZONTAL: 25,
KEY_SPACING_VERTICAL: 25,
FULLSCREEN_PANELS: 0,
};
function StreamDeckOriginalFactory(device, options) {
return (0, generic_gen1_js_1.StreamDeckGen1Factory)(device, options, originalProperties, new imageWriter_js_1.StreamdeckOriginalImageWriter(), { colorMode: 'bgr', xFlip: true }, 3780);
}
//# sourceMappingURL=original.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"original.js","sourceRoot":"","sources":["../../src/models/original.ts"],"names":[],"mappings":";;AAqBA,8DASC;AA3BD,uDAAyD;AACzD,oCAAqD;AACrD,2EAAsF;AACtF,kEAAgF;AAEhF,MAAM,kBAAkB,GAA6B;IACpD,KAAK,EAAE,qBAAa,CAAC,QAAQ;IAC7B,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,QAAQ,CAAC;IACjD,qBAAqB,EAAE,KAAK;IAE5B,QAAQ,EAAE,IAAA,wCAAiB,EAAC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAEvF,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;CACpB,CAAA;AAED,SAAgB,yBAAyB,CAAC,MAAiB,EAAE,OAAwC;IACpG,OAAO,IAAA,uCAAqB,EAC3B,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,IAAI,8CAA6B,EAAE,EACnC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EACjC,IAAI,CACJ,CAAA;AACF,CAAC"}

View File

@@ -0,0 +1,5 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
export declare function StreamDeckPedalFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>): StreamDeckBase;
//# sourceMappingURL=pedal.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"pedal.d.ts","sourceRoot":"","sources":["../../src/models/pedal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,WAAW,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAqD1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAYlH"}

View File

@@ -0,0 +1,61 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckPedalFactory = StreamDeckPedalFactory;
const base_js_1 = require("./base.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const pedal_js_1 = require("../services/properties/pedal.js");
const fake_js_1 = require("../services/buttonsLcdDisplay/fake.js");
const callback_hook_js_1 = require("../services/callback-hook.js");
const gen1_js_1 = require("../services/input/gen1.js");
const pedalControls = [
{
type: 'button',
row: 0,
column: 0,
index: 0,
hidIndex: 0,
feedbackType: 'none',
},
{
type: 'button',
row: 0,
column: 1,
index: 1,
hidIndex: 1,
feedbackType: 'none',
},
{
type: 'button',
row: 0,
column: 2,
index: 2,
hidIndex: 2,
feedbackType: 'none',
},
];
const pedalProperties = {
MODEL: id_js_1.DeviceModelId.PEDAL,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.PEDAL],
KEY_DATA_OFFSET: 3,
SUPPORTS_RGB_KEY_FILL: false,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)(pedalControls),
KEY_SPACING_HORIZONTAL: 0,
KEY_SPACING_VERTICAL: 0,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
function StreamDeckPedalFactory(device, options) {
const events = new callback_hook_js_1.CallbackHook();
return new base_js_1.StreamDeckBase(device, options, {
deviceProperties: pedalProperties,
events,
properties: new pedal_js_1.PedalPropertiesService(device),
buttonsLcd: new fake_js_1.FakeLcdService(),
lcdSegmentDisplay: null,
inputService: new gen1_js_1.ButtonOnlyInputService(pedalProperties, events),
encoderLed: null,
});
}
//# sourceMappingURL=pedal.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"pedal.js","sourceRoot":"","sources":["../../src/models/pedal.ts"],"names":[],"mappings":";;AAuDA,wDAYC;AAjED,uCAA0C;AAC1C,oCAAqD;AAErD,kEAA2D;AAC3D,8DAAwE;AACxE,mEAAsE;AAEtE,mEAA2D;AAC3D,uDAAkE;AAElE,MAAM,aAAa,GAAkC;IACpD;QACC,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,MAAM;KACpB;IACD;QACC,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,MAAM;KACpB;IACD;QACC,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,MAAM;KACpB;CACD,CAAA;AAED,MAAM,eAAe,GAAyB;IAC7C,KAAK,EAAE,qBAAa,CAAC,KAAK;IAC1B,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,KAAK,CAAC;IAC9C,eAAe,EAAE,CAAC;IAClB,qBAAqB,EAAE,KAAK;IAE5B,QAAQ,EAAE,IAAA,wCAAiB,EAAC,aAAa,CAAC;IAE1C,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,CAAC;IAEvB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;CAC7B,CAAA;AAED,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,OAAwC;IACjG,MAAM,MAAM,GAAG,IAAI,+BAAY,EAAoB,CAAA;IAEnD,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE;QAC1C,gBAAgB,EAAE,eAAe;QACjC,MAAM;QACN,UAAU,EAAE,IAAI,iCAAsB,CAAC,MAAM,CAAC;QAC9C,UAAU,EAAE,IAAI,wBAAc,EAAE;QAChC,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI,gCAAsB,CAAC,eAAe,EAAE,MAAM,CAAC;QACjE,UAAU,EAAE,IAAI;KAChB,CAAC,CAAA;AACH,CAAC"}

View File

@@ -0,0 +1,5 @@
import type { HIDDevice } from '../hid-device.js';
import type { OpenStreamDeckOptions } from './base.js';
import { StreamDeckBase } from './base.js';
export declare function StreamDeckPlusFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>): StreamDeckBase;
//# sourceMappingURL=plus.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"plus.d.ts","sourceRoot":"","sources":["../../src/models/plus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAsF1C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAKjH"}

View File

@@ -0,0 +1,72 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckPlusFactory = StreamDeckPlusFactory;
const base_js_1 = require("./base.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const generic_js_1 = require("../services/lcdSegmentDisplay/generic.js");
const plusControls = (0, controlsGenerator_js_1.generateButtonsGrid)(4, 2, { width: 120, height: 120 });
plusControls.push({
type: 'lcd-segment',
row: 2,
column: 0,
columnSpan: 4,
rowSpan: 1,
id: 0,
pixelSize: Object.freeze({
width: 800,
height: 100,
}),
drawRegions: true,
}, {
type: 'encoder',
row: 3,
column: 0,
index: 0,
hidIndex: 0,
hasLed: false,
ledRingSteps: 0,
}, {
type: 'encoder',
row: 3,
column: 1,
index: 1,
hidIndex: 1,
hasLed: false,
ledRingSteps: 0,
}, {
type: 'encoder',
row: 3,
column: 2,
index: 2,
hidIndex: 2,
hasLed: false,
ledRingSteps: 0,
}, {
type: 'encoder',
row: 3,
column: 3,
index: 3,
hidIndex: 3,
hasLed: false,
ledRingSteps: 0,
});
const plusProperties = {
MODEL: id_js_1.DeviceModelId.PLUS,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.PLUS],
SUPPORTS_RGB_KEY_FILL: true,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)(plusControls),
KEY_SPACING_HORIZONTAL: 99,
KEY_SPACING_VERTICAL: 40,
FULLSCREEN_PANELS: 0,
HAS_NFC_READER: false,
SUPPORTS_CHILD_DEVICES: false,
};
const lcdSegmentControls = plusProperties.CONTROLS.filter((control) => control.type === 'lcd-segment');
function StreamDeckPlusFactory(device, options) {
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, plusProperties, null, true);
services.lcdSegmentDisplay = new generic_js_1.StreamdeckDefaultLcdService(options.encodeJPEG, device, lcdSegmentControls);
return new base_js_1.StreamDeckBase(device, options, services);
}
//# sourceMappingURL=plus.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"plus.js","sourceRoot":"","sources":["../../src/models/plus.ts"],"names":[],"mappings":";;AAwFA,sDAKC;AA3FD,uCAA0C;AAE1C,uDAA4D;AAC5D,oCAAqD;AACrD,kEAAgF;AAEhF,yEAAsF;AAEtF,MAAM,YAAY,GAAkC,IAAA,0CAAmB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1G,YAAY,CAAC,IAAI,CAChB;IACC,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IAEV,EAAE,EAAE,CAAC;IAEL,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;KACX,CAAC;IAEF,WAAW,EAAE,IAAI;CACjB,EACD;IACC,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,CAAC;CACf,EACD;IACC,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,CAAC;CACf,EACD;IACC,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,CAAC;CACf,EACD;IACC,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IAEX,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,CAAC;CACf,CACD,CAAA;AAED,MAAM,cAAc,GAA6B;IAChD,KAAK,EAAE,qBAAa,CAAC,IAAI;IACzB,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,IAAI,CAAC;IAC7C,qBAAqB,EAAE,IAAI;IAE3B,QAAQ,EAAE,IAAA,wCAAiB,EAAC,YAAY,CAAC;IAEzC,sBAAsB,EAAE,EAAE;IAC1B,oBAAoB,EAAE,EAAE;IAExB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;CAC7B,CAAA;AACD,MAAM,kBAAkB,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CACxD,CAAC,OAAO,EAAoD,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAC7F,CAAA;AAED,SAAgB,qBAAqB,CAAC,MAAiB,EAAE,OAAwC;IAChG,MAAM,QAAQ,GAAG,IAAA,0CAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACtF,QAAQ,CAAC,iBAAiB,GAAG,IAAI,wCAA2B,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAE5G,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC"}

View File

@@ -0,0 +1,7 @@
import type { HIDDevice } from '../hid-device.js';
import { StreamDeckBase, type OpenStreamDeckOptions } from './base.js';
import { type StreamDeckGen2Properties } from './generic-gen2.js';
import type { PropertiesService } from '../services/properties/interface.js';
export declare const studioProperties: StreamDeckGen2Properties;
export declare function StreamDeckStudioFactory(device: HIDDevice, options: Required<OpenStreamDeckOptions>, propertiesService?: PropertiesService): StreamDeckBase;
//# sourceMappingURL=studio.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../src/models/studio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAA4B,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAI3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AA6B5E,eAAO,MAAM,gBAAgB,EAAE,wBAc9B,CAAA;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACxC,iBAAiB,CAAC,EAAE,iBAAiB,GACnC,cAAc,CAWhB"}

View File

@@ -0,0 +1,49 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.studioProperties = void 0;
exports.StreamDeckStudioFactory = StreamDeckStudioFactory;
const base_js_1 = require("./base.js");
const generic_gen2_js_1 = require("./generic-gen2.js");
const id_js_1 = require("../id.js");
const controlsGenerator_js_1 = require("../controlsGenerator.js");
const studio_js_1 = require("../services/properties/studio.js");
const studio_js_2 = require("../services/encoderLed/studio.js");
const studioControls = [
{
type: 'encoder',
row: 0,
column: 0,
index: 0,
hidIndex: 0,
hasLed: true,
ledRingSteps: 24,
},
...(0, controlsGenerator_js_1.generateButtonsGrid)(16, 2, { width: 144, height: 112 }, false, 1),
{
type: 'encoder',
row: 0,
column: 17,
index: 1,
hidIndex: 1,
hasLed: true,
ledRingSteps: 24,
lcdRingOffset: 12,
},
];
exports.studioProperties = {
MODEL: id_js_1.DeviceModelId.STUDIO,
PRODUCT_NAME: id_js_1.MODEL_NAMES[id_js_1.DeviceModelId.STUDIO],
SUPPORTS_RGB_KEY_FILL: true,
CONTROLS: (0, controlsGenerator_js_1.freezeDefinitions)(studioControls),
KEY_SPACING_HORIZONTAL: 0, // TODO
KEY_SPACING_VERTICAL: 0, // TODO
FULLSCREEN_PANELS: 2,
HAS_NFC_READER: true,
SUPPORTS_CHILD_DEVICES: true,
};
function StreamDeckStudioFactory(device, options, propertiesService) {
const services = (0, generic_gen2_js_1.createBaseGen2Properties)(device, options, exports.studioProperties, propertiesService ?? new studio_js_1.StudioPropertiesService(device), true);
services.encoderLed = new studio_js_2.StudioEncoderLedService(device, studioControls);
return new base_js_1.StreamDeckBase(device, options, services);
}
//# sourceMappingURL=studio.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../../src/models/studio.ts"],"names":[],"mappings":";;;AAmDA,0DAeC;AAjED,uCAAsE;AACtE,uDAA2F;AAC3F,oCAAqD;AACrD,kEAAgF;AAGhF,gEAA0E;AAC1E,gEAA0E;AAE1E,MAAM,cAAc,GAAkC;IACrD;QACC,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QAEX,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,EAAE;KAChB;IACD,GAAG,IAAA,0CAAmB,EAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE;QACC,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QAEX,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;KACjB;CACD,CAAA;AAEY,QAAA,gBAAgB,GAA6B;IACzD,KAAK,EAAE,qBAAa,CAAC,MAAM;IAC3B,YAAY,EAAE,mBAAW,CAAC,qBAAa,CAAC,MAAM,CAAC;IAC/C,qBAAqB,EAAE,IAAI;IAE3B,QAAQ,EAAE,IAAA,wCAAiB,EAAC,cAAc,CAAC;IAE3C,sBAAsB,EAAE,CAAC,EAAE,OAAO;IAClC,oBAAoB,EAAE,CAAC,EAAE,OAAO;IAEhC,iBAAiB,EAAE,CAAC;IAEpB,cAAc,EAAE,IAAI;IACpB,sBAAsB,EAAE,IAAI;CAC5B,CAAA;AAED,SAAgB,uBAAuB,CACtC,MAAiB,EACjB,OAAwC,EACxC,iBAAqC;IAErC,MAAM,QAAQ,GAAG,IAAA,0CAAwB,EACxC,MAAM,EACN,OAAO,EACP,wBAAgB,EAChB,iBAAiB,IAAI,IAAI,mCAAuB,CAAC,MAAM,CAAC,EACxD,IAAI,CACJ,CAAA;IACD,QAAQ,CAAC,UAAU,GAAG,IAAI,mCAAuB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAEzE,OAAO,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC"}

View File

@@ -0,0 +1,16 @@
import type { DeviceModelId } from './id.js';
/**
* This represents a buffer that has been prepared for sending to a Stream Deck.
* Note: The result is only guaranteed to be valid for this specific StreamDeck and the same library version, but is safe to store externally.
* If it sent to the wrong model, the result is undefined behaviour.
*
* This is an opaque type, and should not be viewed/inspected directly.
*
* It may be serialized to JSON, but only if it was generated with the `jsonSafe` flag set to `true`.
*/
export interface PreparedBuffer {
readonly __internal__: never;
}
export declare function wrapBufferToPreparedBuffer(modelId: DeviceModelId, type: string, buffers: Uint8Array[], jsonSafe: boolean): PreparedBuffer;
export declare function unwrapPreparedBufferToBuffer(modelId: DeviceModelId, prepared: PreparedBuffer): Uint8Array[];
//# sourceMappingURL=preparedBuffer.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"preparedBuffer.d.ts","sourceRoot":"","sources":["../src/preparedBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC5B;AASD,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,OAAO,GACf,cAAc,CAmBhB;AAED,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,aAAa,EAEtB,QAAQ,EAAE,cAAc,GACtB,UAAU,EAAE,CA0Bd"}

View File

@@ -0,0 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapBufferToPreparedBuffer = wrapBufferToPreparedBuffer;
exports.unwrapPreparedBufferToBuffer = unwrapPreparedBufferToBuffer;
function wrapBufferToPreparedBuffer(modelId, type, buffers, jsonSafe) {
let encodedBuffers = buffers;
if (jsonSafe) {
// Use Base64 encoding for binary-safe string conversion
if (typeof Buffer !== 'undefined') {
encodedBuffers = buffers.map((b) => Buffer.from(b).toString('base64'));
}
else {
encodedBuffers = buffers.map((b) => btoa(String.fromCharCode(...b)));
}
}
return {
if_you_change_this_you_will_break_everything: 'This is a encoded form of the buffer, exactly as the Stream Deck expects it. Do not touch this object, or you can crash your stream deck',
modelId,
type,
do_not_touch: encodedBuffers,
};
}
function unwrapPreparedBufferToBuffer(modelId,
// type: string,
prepared) {
const preparedInternal = prepared;
if (preparedInternal.modelId !== modelId)
throw new Error('Prepared buffer is for a different model!');
// if (preparedInternal.type !== type) throw new Error('Prepared buffer is for a different type!')
return preparedInternal.do_not_touch.map((b) => {
if (typeof b === 'string') {
// Decode from Base64 for binary-safe conversion
if (typeof Buffer !== 'undefined') {
// Fast path for Node.js
return Buffer.from(b, 'base64');
}
else {
// Browser fallback
return new Uint8Array(atob(b)
.split('')
.map((char) => char.charCodeAt(0)));
}
}
else if (b instanceof Uint8Array) {
return b;
}
else {
throw new Error('Prepared buffer is not a string or Uint8Array!');
}
});
}
//# sourceMappingURL=preparedBuffer.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"preparedBuffer.js","sourceRoot":"","sources":["../src/preparedBuffer.ts"],"names":[],"mappings":";;AAsBA,gEAwBC;AAED,oEA8BC;AAxDD,SAAgB,0BAA0B,CACzC,OAAsB,EACtB,IAAY,EACZ,OAAqB,EACrB,QAAiB;IAEjB,IAAI,cAAc,GAA+C,OAAO,CAAA;IAExE,IAAI,QAAQ,EAAE,CAAC;QACd,wDAAwD;QACxD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QACvE,CAAC;aAAM,CAAC;YACP,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,CAAC;IACF,CAAC;IAED,OAAO;QACN,4CAA4C,EAC3C,0IAA0I;QAC3I,OAAO;QACP,IAAI;QACJ,YAAY,EAAE,cAAc;KACgB,CAAA;AAC9C,CAAC;AAED,SAAgB,4BAA4B,CAC3C,OAAsB;AACtB,gBAAgB;AAChB,QAAwB;IAExB,MAAM,gBAAgB,GAAG,QAA6C,CAAA;IACtE,IAAI,gBAAgB,CAAC,OAAO,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAEtG,kGAAkG;IAElG,OAAO,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,gDAAgD;YAChD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnC,wBAAwB;gBACxB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACP,mBAAmB;gBACnB,OAAO,IAAI,UAAU,CACpB,IAAI,CAAC,CAAC,CAAC;qBACL,KAAK,CAAC,EAAE,CAAC;qBACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnC,CAAA;YACF,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,CAAA;QACT,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QAClE,CAAC;IACF,CAAC,CAAC,CAAA;AACH,CAAC"}

63
node_modules/@elgato-stream-deck/core/dist/proxy.d.ts generated vendored Normal file
View File

@@ -0,0 +1,63 @@
import type { EventEmitter } from 'eventemitter3';
import type { DeviceModelId } from './id.js';
import type { StreamDeck, StreamDeckEvents } from './types.js';
import type { StreamDeckControlDefinition } from './controlDefinition.js';
/**
* A minimal proxy around a StreamDeck instance.
* This is intended to be used by libraries wrapping this that want to add more methods to the StreamDeck
*/
export declare class StreamDeckProxy implements StreamDeck {
protected readonly device: StreamDeck;
constructor(device: StreamDeck);
get CONTROLS(): Readonly<StreamDeckControlDefinition[]>;
get MODEL(): DeviceModelId;
get PRODUCT_NAME(): string;
get HAS_NFC_READER(): boolean;
calculateFillPanelDimensions(...args: Parameters<StreamDeck['calculateFillPanelDimensions']>): ReturnType<StreamDeck['calculateFillPanelDimensions']>;
close(): Promise<void>;
getHidDeviceInfo(...args: Parameters<StreamDeck['getHidDeviceInfo']>): ReturnType<StreamDeck['getHidDeviceInfo']>;
sendPreparedBuffer(...args: Parameters<StreamDeck['sendPreparedBuffer']>): ReturnType<StreamDeck['sendPreparedBuffer']>;
fillKeyColor(...args: Parameters<StreamDeck['fillKeyColor']>): ReturnType<StreamDeck['fillKeyColor']>;
fillKeyBuffer(...args: Parameters<StreamDeck['fillKeyBuffer']>): ReturnType<StreamDeck['fillKeyBuffer']>;
prepareFillKeyBuffer(...args: Parameters<StreamDeck['prepareFillKeyBuffer']>): ReturnType<StreamDeck['prepareFillKeyBuffer']>;
fillPanelBuffer(...args: Parameters<StreamDeck['fillPanelBuffer']>): ReturnType<StreamDeck['fillPanelBuffer']>;
prepareFillPanelBuffer(...args: Parameters<StreamDeck['prepareFillPanelBuffer']>): ReturnType<StreamDeck['prepareFillPanelBuffer']>;
clearKey(...args: Parameters<StreamDeck['clearKey']>): ReturnType<StreamDeck['clearKey']>;
clearPanel(...args: Parameters<StreamDeck['clearPanel']>): ReturnType<StreamDeck['clearPanel']>;
setBrightness(...args: Parameters<StreamDeck['setBrightness']>): ReturnType<StreamDeck['setBrightness']>;
resetToLogo(...args: Parameters<StreamDeck['resetToLogo']>): ReturnType<StreamDeck['resetToLogo']>;
getFirmwareVersion(): Promise<string>;
getAllFirmwareVersions(): ReturnType<StreamDeck['getAllFirmwareVersions']>;
getSerialNumber(): Promise<string>;
fillLcd(...args: Parameters<StreamDeck['fillLcd']>): ReturnType<StreamDeck['fillLcd']>;
setEncoderColor(...args: Parameters<StreamDeck['setEncoderColor']>): ReturnType<StreamDeck['setEncoderColor']>;
setEncoderRingSingleColor(...args: Parameters<StreamDeck['setEncoderRingSingleColor']>): ReturnType<StreamDeck['setEncoderRingSingleColor']>;
setEncoderRingColors(...args: Parameters<StreamDeck['setEncoderRingColors']>): ReturnType<StreamDeck['setEncoderRingColors']>;
fillLcdRegion(...args: Parameters<StreamDeck['fillLcdRegion']>): ReturnType<StreamDeck['fillLcdRegion']>;
prepareFillLcdRegion(...args: Parameters<StreamDeck['prepareFillLcdRegion']>): ReturnType<StreamDeck['prepareFillLcdRegion']>;
clearLcdSegment(...args: Parameters<StreamDeck['clearLcdSegment']>): ReturnType<StreamDeck['clearLcdSegment']>;
getChildDeviceInfo(...args: Parameters<StreamDeck['getChildDeviceInfo']>): ReturnType<StreamDeck['getChildDeviceInfo']>;
/**
* EventEmitter
*/
eventNames(): Array<EventEmitter.EventNames<StreamDeckEvents>>;
listeners<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T): Array<EventEmitter.EventListener<StreamDeckEvents, T>>;
listenerCount(event: EventEmitter.EventNames<StreamDeckEvents>): number;
emit<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, ...args: EventEmitter.EventArgs<StreamDeckEvents, T>): boolean;
/**
* Add a listener for a given event.
*/
on<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, fn: EventEmitter.EventListener<StreamDeckEvents, T>, context?: unknown): this;
addListener<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, fn: EventEmitter.EventListener<StreamDeckEvents, T>, context?: unknown): this;
/**
* Add a one-time listener for a given event.
*/
once<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, fn: EventEmitter.EventListener<StreamDeckEvents, T>, context?: unknown): this;
/**
* Remove the listeners of a given event.
*/
removeListener<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, fn?: EventEmitter.EventListener<StreamDeckEvents, T>, context?: unknown, once?: boolean): this;
off<T extends EventEmitter.EventNames<StreamDeckEvents>>(event: T, fn?: EventEmitter.EventListener<StreamDeckEvents, T>, context?: unknown, once?: boolean): this;
removeAllListeners(event?: EventEmitter.EventNames<StreamDeckEvents>): this;
}
//# sourceMappingURL=proxy.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}

153
node_modules/@elgato-stream-deck/core/dist/proxy.js generated vendored Normal file
View File

@@ -0,0 +1,153 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamDeckProxy = void 0;
/**
* A minimal proxy around a StreamDeck instance.
* This is intended to be used by libraries wrapping this that want to add more methods to the StreamDeck
*/
class StreamDeckProxy {
device;
constructor(device) {
this.device = device;
}
get CONTROLS() {
return this.device.CONTROLS;
}
// public get KEY_SPACING_VERTICAL(): number {
// return this.device.KEY_SPACING_VERTICAL
// }
// public get KEY_SPACING_HORIZONTAL(): number {
// return this.device.KEY_SPACING_HORIZONTAL
// }
get MODEL() {
return this.device.MODEL;
}
get PRODUCT_NAME() {
return this.device.PRODUCT_NAME;
}
get HAS_NFC_READER() {
return this.device.HAS_NFC_READER;
}
calculateFillPanelDimensions(...args) {
return this.device.calculateFillPanelDimensions(...args);
}
async close() {
return this.device.close();
}
async getHidDeviceInfo(...args) {
return this.device.getHidDeviceInfo(...args);
}
async sendPreparedBuffer(...args) {
return this.device.sendPreparedBuffer(...args);
}
async fillKeyColor(...args) {
return this.device.fillKeyColor(...args);
}
async fillKeyBuffer(...args) {
return this.device.fillKeyBuffer(...args);
}
async prepareFillKeyBuffer(...args) {
return this.device.prepareFillKeyBuffer(...args);
}
async fillPanelBuffer(...args) {
return this.device.fillPanelBuffer(...args);
}
async prepareFillPanelBuffer(...args) {
return this.device.prepareFillPanelBuffer(...args);
}
async clearKey(...args) {
return this.device.clearKey(...args);
}
async clearPanel(...args) {
return this.device.clearPanel(...args);
}
async setBrightness(...args) {
return this.device.setBrightness(...args);
}
async resetToLogo(...args) {
return this.device.resetToLogo(...args);
}
async getFirmwareVersion() {
return this.device.getFirmwareVersion();
}
async getAllFirmwareVersions() {
return this.device.getAllFirmwareVersions();
}
async getSerialNumber() {
return this.device.getSerialNumber();
}
async fillLcd(...args) {
return this.device.fillLcd(...args);
}
async setEncoderColor(...args) {
return this.device.setEncoderColor(...args);
}
async setEncoderRingSingleColor(...args) {
return this.device.setEncoderRingSingleColor(...args);
}
async setEncoderRingColors(...args) {
return this.device.setEncoderRingColors(...args);
}
async fillLcdRegion(...args) {
return this.device.fillLcdRegion(...args);
}
async prepareFillLcdRegion(...args) {
return this.device.prepareFillLcdRegion(...args);
}
async clearLcdSegment(...args) {
return this.device.clearLcdSegment(...args);
}
async getChildDeviceInfo(...args) {
return this.device.getChildDeviceInfo(...args);
}
/**
* EventEmitter
*/
eventNames() {
return this.device.eventNames();
}
listeners(event) {
return this.device.listeners(event);
}
listenerCount(event) {
return this.device.listenerCount(event);
}
emit(event, ...args) {
return this.device.emit(event, ...args);
}
/**
* Add a listener for a given event.
*/
on(event, fn, context) {
this.device.on(event, fn, context);
return this;
}
addListener(event, fn, context) {
this.device.addListener(event, fn, context);
return this;
}
/**
* Add a one-time listener for a given event.
*/
once(event, fn, context) {
this.device.once(event, fn, context);
return this;
}
/**
* Remove the listeners of a given event.
*/
removeListener(event, fn, context, once) {
this.device.removeListener(event, fn, context, once);
return this;
}
off(event, fn, context, once) {
this.device.off(event, fn, context, once);
return this;
}
removeAllListeners(event) {
this.device.removeAllListeners(event);
return this;
}
}
exports.StreamDeckProxy = StreamDeckProxy;
//# sourceMappingURL=proxy.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,31 @@
import type { HIDDevice } from '../../hid-device.js';
import type { Dimension, KeyIndex } from '../../id.js';
import type { StreamDeckProperties } from '../../models/base.js';
import type { FillPanelDimensionsOptions, FillImageOptions, FillPanelOptions } from '../../types.js';
import type { StreamdeckImageWriter } from '../imageWriter/types.js';
import type { ButtonsLcdDisplayService } from './interface.js';
import type { ButtonLcdImagePacker } from '../imagePacker/interface.js';
import { type PreparedBuffer } from '../../preparedBuffer.js';
export declare class DefaultButtonsLcdService implements ButtonsLcdDisplayService {
#private;
constructor(imageWriter: StreamdeckImageWriter, imagePacker: ButtonLcdImagePacker, device: Pick<HIDDevice, 'sendReports' | 'sendFeatureReport'>, deviceProperties: Readonly<StreamDeckProperties>);
private getLcdButtonControls;
private calculateLcdGridSpan;
private calculateDimensionsFromGridSpan;
calculateFillPanelDimensions(options: FillPanelDimensionsOptions | undefined): Dimension | null;
clearPanel(): Promise<void>;
clearKey(keyIndex: KeyIndex): Promise<void>;
fillKeyColor(keyIndex: KeyIndex, r: number, g: number, b: number): Promise<void>;
fillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillImageOptions): Promise<void>;
private prepareFillKeyBufferInner;
prepareFillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array | Uint8ClampedArray, options: FillImageOptions | undefined, jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
fillPanelBuffer(imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillPanelOptions): Promise<void>;
private prepareFillPanelBufferInner;
prepareFillPanelBuffer(imageBuffer: Uint8Array | Uint8ClampedArray, options: FillPanelOptions | undefined, jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
private sendKeyRgb;
private fillImageRangeControl;
private prepareFillImageRangeControl;
private checkRGBValue;
private checkSourceFormat;
}
//# sourceMappingURL=default.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/services/buttonsLcdDisplay/default.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAY,MAAM,gBAAgB,CAAA;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAA4B,MAAM,6BAA6B,CAAA;AACjG,OAAO,EAA8B,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEzF,qBAAa,wBAAyB,YAAW,wBAAwB;;gBAOvE,WAAW,EAAE,qBAAqB,EAClC,WAAW,EAAE,oBAAoB,EACjC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,mBAAmB,CAAC,EAC5D,gBAAgB,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IAQjD,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,+BAA+B;IAqBhC,4BAA4B,CAAC,OAAO,EAAE,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI;IASzF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwChF,aAAa,CACzB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;YAKF,yBAAyB;IA6B1B,oBAAoB,CAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,CAAC;IAKb,eAAe,CAC3B,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;YAKF,2BAA2B;IAsD5B,sBAAsB,CAClC,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,CAAC;YAKZ,UAAU;YAIV,qBAAqB;YASrB,4BAA4B;IAiB1C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,iBAAiB;CAazB"}

View File

@@ -0,0 +1,241 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultButtonsLcdService = void 0;
const preparedBuffer_js_1 = require("../../preparedBuffer.js");
class DefaultButtonsLcdService {
#imageWriter;
#imagePacker;
#device;
#deviceProperties;
constructor(imageWriter, imagePacker, device, deviceProperties) {
this.#imageWriter = imageWriter;
this.#imagePacker = imagePacker;
this.#device = device;
this.#deviceProperties = deviceProperties;
}
getLcdButtonControls() {
return this.#deviceProperties.CONTROLS.filter((control) => control.type === 'button' && control.feedbackType === 'lcd');
}
calculateLcdGridSpan(buttonsLcd) {
if (buttonsLcd.length === 0)
return null;
const allRowValues = buttonsLcd.map((button) => button.row);
const allColumnValues = buttonsLcd.map((button) => button.column);
return {
minRow: Math.min(...allRowValues),
maxRow: Math.max(...allRowValues),
minCol: Math.min(...allColumnValues),
maxCol: Math.max(...allColumnValues),
};
}
calculateDimensionsFromGridSpan(gridSpan, buttonPixelSize, withPadding) {
if (withPadding) {
// TODO: Implement padding
throw new Error('Not implemented');
}
else {
const rowCount = gridSpan.maxRow - gridSpan.minRow + 1;
const columnCount = gridSpan.maxCol - gridSpan.minCol + 1;
// TODO: Consider that different rows/columns could have different dimensions
return {
width: columnCount * buttonPixelSize.width,
height: rowCount * buttonPixelSize.height,
};
}
}
calculateFillPanelDimensions(options) {
const buttonLcdControls = this.getLcdButtonControls();
const gridSpan = this.calculateLcdGridSpan(buttonLcdControls);
if (!gridSpan || buttonLcdControls.length === 0)
return null;
return this.calculateDimensionsFromGridSpan(gridSpan, buttonLcdControls[0].pixelSize, options?.withPadding);
}
async clearPanel() {
const ps = [];
if (this.#deviceProperties.FULLSCREEN_PANELS > 0) {
// TODO - should this be a separate property?
for (let screenIndex = 0; screenIndex < this.#deviceProperties.FULLSCREEN_PANELS; screenIndex++) {
ps.push(this.#device.sendFeatureReport(new Uint8Array([0x03, 0x05, screenIndex, 0, 0, 0])));
}
// TODO - clear rgb?
}
else {
for (const control of this.#deviceProperties.CONTROLS) {
if (control.type !== 'button')
continue;
switch (control.feedbackType) {
case 'rgb':
ps.push(this.sendKeyRgb(control.hidIndex, 0, 0, 0));
break;
case 'lcd':
if (this.#deviceProperties.SUPPORTS_RGB_KEY_FILL) {
ps.push(this.sendKeyRgb(control.hidIndex, 0, 0, 0));
}
else {
const pixels = new Uint8Array(control.pixelSize.width * control.pixelSize.height * 3);
// TODO - caching?
ps.push(this.fillImageRangeControl(control, pixels, {
format: 'rgb',
offset: 0,
stride: control.pixelSize.width * 3,
}));
}
break;
case 'none':
// Do nothing
break;
}
}
}
await Promise.all(ps);
}
async clearKey(keyIndex) {
const control = this.#deviceProperties.CONTROLS.find((control) => control.type === 'button' && control.index === keyIndex);
if (!control || control.feedbackType === 'none')
throw new TypeError(`Expected a valid keyIndex`);
if (this.#deviceProperties.SUPPORTS_RGB_KEY_FILL || control.feedbackType === 'rgb') {
await this.sendKeyRgb(keyIndex, 0, 0, 0);
}
else {
const pixels = new Uint8Array(control.pixelSize.width * control.pixelSize.height * 3);
// TODO - caching?
await this.fillImageRangeControl(control, pixels, {
format: 'rgb',
offset: 0,
stride: control.pixelSize.width * 3,
});
}
}
async fillKeyColor(keyIndex, r, g, b) {
this.checkRGBValue(r);
this.checkRGBValue(g);
this.checkRGBValue(b);
const control = this.#deviceProperties.CONTROLS.find((control) => control.type === 'button' && control.index === keyIndex);
if (!control || control.feedbackType === 'none')
throw new TypeError(`Expected a valid keyIndex`);
if (this.#deviceProperties.SUPPORTS_RGB_KEY_FILL || control.feedbackType === 'rgb') {
await this.sendKeyRgb(keyIndex, r, g, b);
}
else {
// rgba is excessive here, but it makes the fill easier as it can be done in a 32bit uint
const pixelCount = control.pixelSize.width * control.pixelSize.height;
const pixels = new Uint8Array(pixelCount * 4);
const view = new DataView(pixels.buffer, pixels.byteOffset, pixels.byteLength);
// write first pixel
view.setUint8(0, r);
view.setUint8(1, g);
view.setUint8(2, b);
view.setUint8(3, 255);
// read computed pixel
const sample = view.getUint32(0);
// fill with computed pixel
for (let i = 1; i < pixelCount; i++) {
view.setUint32(i * 4, sample);
}
await this.fillImageRangeControl(control, pixels, {
format: 'rgba',
offset: 0,
stride: control.pixelSize.width * 4,
});
}
}
async fillKeyBuffer(keyIndex, imageBuffer, options) {
const packets = await this.prepareFillKeyBufferInner(keyIndex, imageBuffer, options);
await this.#device.sendReports(packets);
}
async prepareFillKeyBufferInner(keyIndex, imageBuffer, options) {
const sourceFormat = options?.format ?? 'rgb';
this.checkSourceFormat(sourceFormat);
const control = this.#deviceProperties.CONTROLS.find((control) => control.type === 'button' && control.index === keyIndex);
if (!control || control.feedbackType === 'none')
throw new TypeError(`Expected a valid keyIndex`);
if (control.feedbackType !== 'lcd')
throw new TypeError(`keyIndex ${control.index} does not support lcd feedback`);
const imageSize = control.pixelSize.width * control.pixelSize.height * sourceFormat.length;
if (imageBuffer.length !== imageSize) {
throw new RangeError(`Expected image buffer of length ${imageSize}, got length ${imageBuffer.length}`);
}
return this.prepareFillImageRangeControl(control, imageBuffer, {
format: sourceFormat,
offset: 0,
stride: control.pixelSize.width * sourceFormat.length,
});
}
async prepareFillKeyBuffer(keyIndex, imageBuffer, options, jsonSafe) {
const packets = await this.prepareFillKeyBufferInner(keyIndex, imageBuffer, options);
return (0, preparedBuffer_js_1.wrapBufferToPreparedBuffer)(this.#deviceProperties.MODEL, 'fill-key', packets, jsonSafe ?? false);
}
async fillPanelBuffer(imageBuffer, options) {
const packets = await this.prepareFillPanelBufferInner(imageBuffer, options);
await this.#device.sendReports(packets);
}
async prepareFillPanelBufferInner(imageBuffer, options) {
const sourceFormat = options?.format ?? 'rgb';
this.checkSourceFormat(sourceFormat);
const buttonLcdControls = this.getLcdButtonControls();
const panelGridSpan = this.calculateLcdGridSpan(buttonLcdControls);
if (!panelGridSpan || buttonLcdControls.length === 0) {
throw new Error(`Panel does not support being filled`);
}
const panelDimensions = this.calculateDimensionsFromGridSpan(panelGridSpan, buttonLcdControls[0].pixelSize, options?.withPadding);
const expectedByteCount = sourceFormat.length * panelDimensions.width * panelDimensions.height;
if (imageBuffer.length !== expectedByteCount) {
throw new RangeError(`Expected image buffer of length ${expectedByteCount}, got length ${imageBuffer.length}`);
}
const stride = panelDimensions.width * sourceFormat.length;
const ps = [];
for (const control of buttonLcdControls) {
const controlRow = control.row - panelGridSpan.minRow;
const controlCol = control.column - panelGridSpan.minCol;
// TODO: Consider that different rows/columns could have different dimensions
const iconSize = control.pixelSize.width * sourceFormat.length;
const rowOffset = stride * controlRow * control.pixelSize.height;
const colOffset = controlCol * iconSize;
// TODO: Implement padding
ps.push(this.prepareFillImageRangeControl(control, imageBuffer, {
format: sourceFormat,
offset: rowOffset + colOffset,
stride,
}));
}
const packets = await Promise.all(ps);
return packets.flat();
}
async prepareFillPanelBuffer(imageBuffer, options, jsonSafe) {
const packets = await this.prepareFillPanelBufferInner(imageBuffer, options);
return (0, preparedBuffer_js_1.wrapBufferToPreparedBuffer)(this.#deviceProperties.MODEL, 'fill-panel', packets, jsonSafe ?? false);
}
async sendKeyRgb(keyIndex, red, green, blue) {
await this.#device.sendFeatureReport(new Uint8Array([0x03, 0x06, keyIndex, red, green, blue]));
}
async fillImageRangeControl(buttonControl, imageBuffer, sourceOptions) {
const packets = await this.prepareFillImageRangeControl(buttonControl, imageBuffer, sourceOptions);
await this.#device.sendReports(packets);
}
async prepareFillImageRangeControl(buttonControl, imageBuffer, sourceOptions) {
if (buttonControl.feedbackType !== 'lcd')
throw new TypeError(`keyIndex ${buttonControl.index} does not support lcd feedback`);
const byteBuffer = await this.#imagePacker.convertPixelBuffer(imageBuffer, sourceOptions, buttonControl.pixelSize);
return this.#imageWriter.generateFillImageWrites({ keyIndex: buttonControl.hidIndex }, byteBuffer);
}
checkRGBValue(value) {
if (value < 0 || value > 255) {
throw new TypeError('Expected a valid color RGB value 0 - 255');
}
}
checkSourceFormat(format) {
switch (format) {
case 'rgb':
case 'rgba':
case 'bgr':
case 'bgra':
break;
default: {
const fmt = format;
throw new TypeError(`Expected a known color format not "${fmt}"`);
}
}
}
}
exports.DefaultButtonsLcdService = DefaultButtonsLcdService;
//# sourceMappingURL=default.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,15 @@
import type { Dimension, KeyIndex } from '../../id.js';
import type { ButtonsLcdDisplayService } from './interface.js';
import type { FillPanelDimensionsOptions, FillImageOptions, FillPanelOptions } from '../../types.js';
import type { PreparedBuffer } from '../../preparedBuffer.js';
export declare class FakeLcdService implements ButtonsLcdDisplayService {
calculateFillPanelDimensions(_options?: FillPanelDimensionsOptions): Dimension | null;
clearKey(_keyIndex: number): Promise<void>;
clearPanel(): Promise<void>;
fillKeyColor(_keyIndex: number, _r: number, _g: number, _b: number): Promise<void>;
fillKeyBuffer(_keyIndex: number, _imageBuffer: Uint8Array, _options?: FillImageOptions): Promise<void>;
prepareFillKeyBuffer(_keyIndex: KeyIndex, _imageBuffer: Uint8Array | Uint8ClampedArray, _options: FillImageOptions | undefined, _jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
fillPanelBuffer(_imageBuffer: Uint8Array, _options?: FillPanelOptions): Promise<void>;
prepareFillPanelBuffer(_imageBuffer: Uint8Array | Uint8ClampedArray, _options: FillPanelOptions | undefined, _jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
}
//# sourceMappingURL=fake.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../../src/services/buttonsLcdDisplay/fake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,qBAAa,cAAe,YAAW,wBAAwB;IACvD,4BAA4B,CAAC,QAAQ,CAAC,EAAE,0BAA0B,GAAG,SAAS,GAAG,IAAI;IAI/E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAG3B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGlF,aAAa,CACzB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,UAAU,EACxB,QAAQ,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC;IAGH,oBAAoB,CAChC,SAAS,EAAE,QAAQ,EACnB,YAAY,EAAE,UAAU,GAAG,iBAAiB,EAC5C,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,SAAS,EAAE,OAAO,GAAG,SAAS,GAC5B,OAAO,CAAC,cAAc,CAAC;IAIb,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAGrF,sBAAsB,CAClC,YAAY,EAAE,UAAU,GAAG,iBAAiB,EAC5C,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,SAAS,EAAE,OAAO,GAAG,SAAS,GAC5B,OAAO,CAAC,cAAc,CAAC;CAI1B"}

View File

@@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FakeLcdService = void 0;
class FakeLcdService {
calculateFillPanelDimensions(_options) {
// Not supported
return null;
}
async clearKey(_keyIndex) {
// Not supported
}
async clearPanel() {
// Not supported
}
async fillKeyColor(_keyIndex, _r, _g, _b) {
// Not supported
}
async fillKeyBuffer(_keyIndex, _imageBuffer, _options) {
// Not supported
}
async prepareFillKeyBuffer(_keyIndex, _imageBuffer, _options, _jsonSafe) {
// Not supported
throw new Error('Not supported');
}
async fillPanelBuffer(_imageBuffer, _options) {
// Not supported
}
async prepareFillPanelBuffer(_imageBuffer, _options, _jsonSafe) {
// Not supported
throw new Error('Not supported');
}
}
exports.FakeLcdService = FakeLcdService;
//# sourceMappingURL=fake.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../../../src/services/buttonsLcdDisplay/fake.ts"],"names":[],"mappings":";;;AAKA,MAAa,cAAc;IACnB,4BAA4B,CAAC,QAAqC;QACxE,gBAAgB;QAChB,OAAO,IAAI,CAAA;IACZ,CAAC;IACM,KAAK,CAAC,QAAQ,CAAC,SAAiB;QACtC,gBAAgB;IACjB,CAAC;IACM,KAAK,CAAC,UAAU;QACtB,gBAAgB;IACjB,CAAC;IACM,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAC9E,gBAAgB;IACjB,CAAC;IACM,KAAK,CAAC,aAAa,CACzB,SAAiB,EACjB,YAAwB,EACxB,QAA2B;QAE3B,gBAAgB;IACjB,CAAC;IACM,KAAK,CAAC,oBAAoB,CAChC,SAAmB,EACnB,YAA4C,EAC5C,QAAsC,EACtC,SAA8B;QAE9B,gBAAgB;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IACjC,CAAC;IACM,KAAK,CAAC,eAAe,CAAC,YAAwB,EAAE,QAA2B;QACjF,gBAAgB;IACjB,CAAC;IACM,KAAK,CAAC,sBAAsB,CAClC,YAA4C,EAC5C,QAAsC,EACtC,SAA8B;QAE9B,gBAAgB;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IACjC,CAAC;CACD;AAzCD,wCAyCC"}

View File

@@ -0,0 +1,20 @@
import type { Dimension, KeyIndex } from '../../id.js';
import type { FillImageOptions, FillPanelDimensionsOptions, FillPanelOptions } from '../../types.js';
import type { PreparedBuffer } from '../../preparedBuffer.js';
export interface GridSpan {
minRow: number;
maxRow: number;
minCol: number;
maxCol: number;
}
export interface ButtonsLcdDisplayService {
calculateFillPanelDimensions(options: FillPanelDimensionsOptions | undefined): Dimension | null;
clearPanel(): Promise<void>;
clearKey(keyIndex: KeyIndex): Promise<void>;
fillKeyColor(keyIndex: KeyIndex, r: number, g: number, b: number): Promise<void>;
fillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array, options?: FillImageOptions): Promise<void>;
prepareFillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array | Uint8ClampedArray, options: FillImageOptions | undefined, jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
fillPanelBuffer(imageBuffer: Uint8Array, options: FillPanelOptions | undefined): Promise<void>;
prepareFillPanelBuffer(imageBuffer: Uint8Array | Uint8ClampedArray, options: FillPanelOptions | undefined, jsonSafe: boolean | undefined): Promise<PreparedBuffer>;
}
//# sourceMappingURL=interface.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/services/buttonsLcdDisplay/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,MAAM,WAAW,QAAQ;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,wBAAwB;IACxC,4BAA4B,CAAC,OAAO,EAAE,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAA;IAE/F,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChF,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrG,oBAAoB,CACnB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,CAAC,CAAA;IAE1B,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9F,sBAAsB,CACrB,WAAW,EAAE,UAAU,GAAG,iBAAiB,EAC3C,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,CAAC,CAAA;CAC1B"}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/services/buttonsLcdDisplay/interface.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,15 @@
type EmitEventFn<TEvents extends {
[k: string]: any[];
}, K extends keyof TEvents> = (key: K, ...args: TEvents[K]) => void;
/**
* A simple helper that allows for the delayed registering of a listener, to avoid dependency cycles
*/
export declare class CallbackHook<TEvents extends {
[k: string]: any[];
}> {
#private;
emit<T extends keyof TEvents>(key: T, ...args: TEvents[T]): void;
listen(fn: EmitEventFn<TEvents, keyof TEvents>): void;
}
export {};
//# sourceMappingURL=callback-hook.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"callback-hook.d.ts","sourceRoot":"","sources":["../../src/services/callback-hook.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,CAAC,OAAO,SAAS;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;CAAE,EAAE,CAAC,SAAS,MAAM,OAAO,IAAI,CACnF,GAAG,EAAE,CAAC,EACN,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KACf,IAAI,CAAA;AAET;;GAEG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;CAAE;;IAG/D,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAMhE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,IAAI;CAGrD"}

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CallbackHook = void 0;
/**
* A simple helper that allows for the delayed registering of a listener, to avoid dependency cycles
*/
class CallbackHook {
#listener = null;
emit(key, ...args) {
if (!this.#listener)
throw new Error('No listener setup');
this.#listener(key, ...args);
}
listen(fn) {
this.#listener = fn;
}
}
exports.CallbackHook = CallbackHook;
//# sourceMappingURL=callback-hook.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"callback-hook.js","sourceRoot":"","sources":["../../src/services/callback-hook.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,YAAY;IACxB,SAAS,GAA+C,IAAI,CAAA;IAE5D,IAAI,CAA0B,GAAM,EAAE,GAAG,IAAgB;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAEzD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,CAAC,EAAuC;QAC7C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IACpB,CAAC;CACD;AAZD,oCAYC"}

View File

@@ -0,0 +1,13 @@
import type { EncoderIndex } from '../../id.js';
import type { StreamDeckControlDefinition } from '../../controlDefinition.js';
import type { HIDDevice } from '../../hid-device.js';
import type { EncoderLedService } from './interface.js';
export declare class GalleonK100EncoderLedService implements EncoderLedService {
#private;
constructor(device: HIDDevice, allControls: Readonly<StreamDeckControlDefinition[]>);
clearAll(): Promise<void>;
setEncoderColor(encoder: EncoderIndex, _red: number, _green: number, _blue: number): Promise<void>;
setEncoderRingSingleColor(encoder: EncoderIndex, red: number, green: number, blue: number): Promise<void>;
setEncoderRingColors(encoder: EncoderIndex, colors: number[] | Uint8Array): Promise<void>;
}
//# sourceMappingURL=galleonK100.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"galleonK100.d.ts","sourceRoot":"","sources":["../../../src/services/encoderLed/galleonK100.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,2BAA2B,EAAsC,MAAM,4BAA4B,CAAA;AACjH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,qBAAa,4BAA6B,YAAW,iBAAiB;;gBAIzD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,2BAA2B,EAAE,CAAC;IAOtE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlG,yBAAyB,CACrC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IAgBH,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA8CtG"}

View File

@@ -0,0 +1,75 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GalleonK100EncoderLedService = void 0;
class GalleonK100EncoderLedService {
#device;
#encoderControls;
constructor(device, allControls) {
this.#device = device;
this.#encoderControls = allControls.filter((control) => control.type === 'encoder');
}
async clearAll() {
const ps = [];
for (const control of this.#encoderControls) {
if (control.ledRingSteps > 0)
ps.push(this.setEncoderRingSingleColor(control.index, 0, 0, 0));
}
await Promise.all(ps);
}
async setEncoderColor(encoder, _red, _green, _blue) {
const control = this.#encoderControls.find((c) => c.index === encoder);
if (!control)
throw new Error(`Invalid encoder index ${encoder}`);
throw new Error('Encoder does not have an LED');
}
async setEncoderRingSingleColor(encoder, red, green, blue) {
const control = this.#encoderControls.find((c) => c.index === encoder);
if (!control)
throw new Error(`Invalid encoder index ${encoder}`);
if (control.ledRingSteps <= 0)
throw new Error('Encoder does not have an LED ring');
// Assume them all the same number of steps
const offset = (1 - encoder) * control.ledRingSteps;
const ps = [];
for (let i = 0; i < control.ledRingSteps; i++) {
ps.push(this.#sendEncoderPixelColor(offset + i, red, green, blue));
}
await Promise.all(ps);
}
async setEncoderRingColors(encoder, colors) {
const control = this.#encoderControls.find((c) => c.index === encoder);
if (!control)
throw new Error(`Invalid encoder index ${encoder}`);
if (control.ledRingSteps <= 0)
throw new Error('Encoder does not have an LED ring');
if (colors.length !== control.ledRingSteps * 3)
throw new Error('Invalid colors length');
let colorsArray = colors instanceof Uint8Array ? Array.from(colors) : colors;
// If there is an offset, repack the buffer to change the start point
if (control.lcdRingOffset) {
const oldColorsArray = colorsArray;
colorsArray = [];
colorsArray.push(...oldColorsArray.slice(control.lcdRingOffset * 3));
colorsArray.push(...oldColorsArray.slice(0, control.lcdRingOffset * 3));
}
// Assume them all the same number of steps
const offset = (1 - encoder) * control.ledRingSteps;
const ps = [];
for (let i = 0; i < control.ledRingSteps; i++) {
ps.push(this.#sendEncoderPixelColor(offset + i, colorsArray[i * 3], colorsArray[i * 3 + 1], colorsArray[i * 3 + 2]));
}
await Promise.all(ps);
}
async #sendEncoderPixelColor(index, red, green, blue) {
const buffer = new Uint8Array(6);
buffer[0] = 0x03;
buffer[1] = 0x24;
buffer[2] = index;
buffer[3] = red;
buffer[4] = green;
buffer[5] = blue;
await this.#device.sendFeatureReport(buffer);
}
}
exports.GalleonK100EncoderLedService = GalleonK100EncoderLedService;
//# sourceMappingURL=galleonK100.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"galleonK100.js","sourceRoot":"","sources":["../../../src/services/encoderLed/galleonK100.ts"],"names":[],"mappings":"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"}

Some files were not shown because too many files have changed in this diff Show More