openmixer — generated API reference
    Preparing search index...

    Interface FieldCapability

    Whether one field of a resource can be read or written on this instance — per-instance, not per-type. A desk that cannot honour a control says so rather than accepting the write and dropping it. code names the machine-readable why; reason is its log-edge prose.

    interface FieldCapability {
        args?: Readonly<Record<string, string | number>>;
        code?: RefusalCode;
        derivedFrom?: string;
        limit?: ControlLimit;
        readable: boolean;
        reason?: string;
        taper?: Taper;
        values?: readonly (string | number)[];
        writable: boolean;
    }
    Index
    args?: Readonly<Record<string, string | number>>

    The named fields the refusal's sentence needs, merged into the registry's own { field }.

    Without this a capability could say WHY but never WHICH: "the stagebox is not reachable" and "S-0808 aa:bb:cc:dd:ee:ff is not present" are the difference between a message an operator reads past and one they can act on. field is added by the registry and wins, so a capability cannot mislabel the field it refused.

    derivedFrom?: string

    The field this one RE-EXPRESSES, when it is the same fact in another unit.

    A fader's db and its position are one fact: the value is the dB and the position is its realisation through the taper, so writing either moves the same thing and any frame carrying one carries both. Saying so keeps a reader from counting two facts where there is one — a client that drew two controls, or a coverage battery that demanded a second broadcast.

    limit?: ControlLimit

    What values are legal ON THIS INSTANCE — absent for a field with no numeric travel.

    Without it a capability says whether a control may be written but never what it may be written TO, so a client must find the travel elsewhere, and "elsewhere" is a constant compiled into its bundle. A desk whose head amp reports 0..55 and a surface built against 0..60 disagree with no refusal anywhere: the knob simply lies at the top of its throw.

    readable: boolean
    reason?: string
    taper?: Taper

    How this field's 0..1 surface position maps to its value, when the two differ.

    A fader is ADDRESSED by position and READ in dB, and the curve between them belongs to the device. A client that draws an etched scale or labels a drag needs that curve and must not invent one — an invented taper puts the ticks in the wrong places and prints a number the desk does not play. Handed over as data, it lets a surface render a throw it does not implement.

    values?: readonly (string | number)[]

    The legal MEMBERS of a closed vocabulary ON THIS INSTANCE — absent for a field that is not enumerated.

    limit says this for a numeric travel and states the reason: a capability that says a field may be written but never what it may be written TO sends the client looking elsewhere, and "elsewhere" is a constant compiled into its bundle. An enumerated field has the same hole and it is worse, because a name set cannot be guessed from a min and a max: a surface offering eight feed points against a desk serving nine is not off by a rounding error, it is missing a point with no refusal anywhere to say so.

    The codec already carries this set (FieldCodec.values) and the boot-time travels door already publishes it. This is the per-instance door saying the same thing, so the two answers cannot describe different desks.

    writable: boolean