/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * Focusrite Control Protocol Driver for ALSA * * Copyright (c) 2024-2025 by Geoffrey D. Bennett <g at b4.vu>
*/ /* * DOC: FCP (Focusrite Control Protocol) User-Space API * * This header defines the interface between the FCP kernel driver and * user-space programs to enable the use of the proprietary features * available in Focusrite USB audio interfaces. This includes Scarlett * 2nd Gen, 3rd Gen, 4th Gen, Clarett USB, Clarett+, and Vocaster * series devices. * * The interface is provided via ALSA's hwdep interface. Opening the * hwdep device requires CAP_SYS_RAWIO privileges as this interface * provides near-direct access. * * For details on the FCP protocol, refer to the kernel scarlett2 * driver in sound/usb/mixer_scarlett2.c and the fcp-support project * at https://github.com/geoffreybennett/fcp-support * * For examples of using these IOCTLs, see the fcp-server source in * the fcp-support project. * * IOCTL Interface * -------------- * FCP_IOCTL_PVERSION: * Returns the protocol version supported by the driver. * * FCP_IOCTL_INIT: * Initialises the protocol and synchronises sequence numbers * between the driver and device. Must be called at least once * before sending commands. Can be safely called again at any time. * * FCP_IOCTL_CMD: * Sends an FCP command to the device and returns the response. * Requires prior initialisation via FCP_IOCTL_INIT. * * FCP_IOCTL_SET_METER_MAP: * Configures the Level Meter control's mapping between device * meters and control channels. Requires FCP_IOCTL_INIT to have been * called first. The map size and number of slots cannot be changed * after initial configuration, although the map itself can be * updated. Once configured, the Level Meter remains functional even * after the hwdep device is closed. * * FCP_IOCTL_SET_METER_LABELS: * Set the labels for the Level Meter control. Requires * FCP_IOCTL_SET_METER_MAP to have been called first. labels[] * should contain a sequence of null-terminated labels corresponding * to the control's channels.
*/ #ifndef __UAPI_SOUND_FCP_H #define __UAPI_SOUND_FCP_H
/* Get protocol version */ #define FCP_IOCTL_PVERSION _IOR('S', 0x60, int)
/* Start the protocol */
/* Step 0 and step 2 responses are variable length and placed in * resp[] one after the other.
*/ struct fcp_init {
__u16 step0_resp_size;
__u16 step2_resp_size;
__u32 init1_opcode;
__u32 init2_opcode;
__u8 resp[];
} __attribute__((packed));
/* The request data is placed in data[] and the response data will * overwrite it.
*/ struct fcp_cmd {
__u32 opcode;
__u16 req_size;
__u16 resp_size;
__u8 data[];
} __attribute__((packed)); #define FCP_IOCTL_CMD _IOWR('S', 0x65, struct fcp_cmd)
/* Set the meter map */ struct fcp_meter_map {
__u16 map_size;
__u16 meter_slots;
__s16 map[];
} __attribute__((packed)); #define FCP_IOCTL_SET_METER_MAP _IOW('S', 0x66, struct fcp_meter_map)
/* Set the meter labels */ struct fcp_meter_labels {
__u16 labels_size; char labels[];
} __attribute__((packed)); #define FCP_IOCTL_SET_METER_LABELS _IOW('S', 0x67, struct fcp_meter_labels)
#endif/* __UAPI_SOUND_FCP_H */
Messung V0.5
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.