registry: Speaker, StepSpeaker, EqualizerController, PlaybackController, PlaybackStateReporter, InputController, ChannelController

Seven descriptors written from their pages replace seven stubs. All are version 3; 1.5.2 announced Speaker,
StepSpeaker, EqualizerController and PlaybackStateReporter as version 1, and all but ChannelController without
a property. StepSpeaker has no properties object in discovery and PlaybackController one without fields, next
to supportedOperations; a directive for an operation the device did not list is answered with
INVALID_DIRECTIVE. The equalizer declares bands, modes or both under "configurations", a TV its inputs from
the 61 names of the page.

Not described: the lineup of ChannelController, whose discovery example the page folds away. The discovery
examples of InputController spell one key "friendNames"; the fixtures have friendlyNames, as its table does.
62 examples of the six pages are saved as fixtures. 241 tests pass, 215 before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
David 2026-09-28 20:54:53 +00:00
parent c59cf3ff10
commit d7dfc5b122
113 changed files with 3948 additions and 47 deletions

View file

@ -0,0 +1,63 @@
/**
* The bands of an equalizer, its modes, or both. Discovery lists bands for a device declared with bands and mode
* for one declared with modes. A band or a mode the device does not have is answered with INVALID_VALUE.
*/
export declare const EqualizerController: import("../types.js").InterfaceDescriptor<{
bands: {
name: string;
value: import("../schema.js").Schema<import("../schema.js").InferShape<{
name: import("../schema.js").EnumSchema<"BASS" | "MIDRANGE" | "TREBLE">;
value: import("../schema.js").Schema<number>;
}>[]>;
};
mode: {
name: string;
value: import("../schema.js").EnumSchema<"TV" | "MOVIE" | "MUSIC" | "NIGHT" | "SPORT">;
};
}, {
SetMode: {
name: string;
payload: import("../schema.js").Schema<import("../schema.js").InferShape<{
mode: import("../schema.js").EnumSchema<"TV" | "MOVIE" | "MUSIC" | "NIGHT" | "SPORT">;
}>>;
};
SetBands: {
name: string;
payload: import("../schema.js").Schema<import("../schema.js").InferShape<{
bands: import("../schema.js").Schema<import("../schema.js").InferShape<{
name: import("../schema.js").EnumSchema<"BASS" | "MIDRANGE" | "TREBLE">;
value: import("../schema.js").Schema<number>;
}>[]>;
}>>;
};
AdjustBands: {
name: string;
payload: import("../schema.js").Schema<import("../schema.js").InferShape<{
bands: import("../schema.js").Schema<import("../schema.js").InferShape<{
name: import("../schema.js").EnumSchema<"BASS" | "MIDRANGE" | "TREBLE">;
levelDelta: import("../schema.js").OptionalSchema<number>;
levelDirection: import("../schema.js").EnumSchema<"UP" | "DOWN">;
}>[]>;
}>>;
note: string;
};
ResetBands: {
name: string;
payload: import("../schema.js").Schema<import("../schema.js").InferShape<{
bands: import("../schema.js").Schema<import("../schema.js").InferShape<{
name: import("../schema.js").EnumSchema<"BASS" | "MIDRANGE" | "TREBLE">;
}>[]>;
}>>;
};
}, import("../schema.js").InferShape<{
/** The bands of the device and the levels they take. Left out for a device that has modes only. */
bands: import("../schema.js").OptionalSchema<import("../schema.js").InferShape<{
supported: import("../schema.js").Schema<("BASS" | "MIDRANGE" | "TREBLE")[]>;
range: import("../schema.js").Schema<import("../schema.js").InferShape<{
minimum: import("../schema.js").Schema<number>;
maximum: import("../schema.js").Schema<number>;
}>>;
}>>;
/** Left out for a device that has bands only. */
modes: import("../schema.js").OptionalSchema<("TV" | "MOVIE" | "MUSIC" | "NIGHT" | "SPORT")[]>;
}>, false>;