/* * Application interface library for the AVIRT driver * * avirt.h - AVIRT Application interface library header * * Copyright (C) 2018, 2019 Fiberdyne Systems Pty Ltd * Author: Mark Farrugia * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library. If not, see . */ #ifndef _AVIRT_H_ #define _AVIRT_H_ #include /** * snd_avirt_stream_new - Create a stream in AVIRT * @name: The name of the stream * @channels: The number of channels for the stream * @direction: The stream direction * (SND_PCM_STREAM_PLAYBACK or SND_PCM_STREAM_CAPTURE) * @map: The audio path to map this stream to * @return: 0 on success, negative ERRNO otherwise * * Each stream creates a PCM device for the AVIRT sound card. * Streams will not appear to the user-space until `snd_avirt_card_seal()` * is called. */ int snd_avirt_stream_new(const char *name, unsigned int channels, int direction, const char *map); /** * snd_avirt_card_seal - Finalize AVIRT stream creation and register sound card * @return: 0 on success, negative ERRNO otherwise * * This should be called once all streams have been created via * `snd_avirt_stream_new()`. Calling this function will register the AVIRT * sound card to the user-space, and will configure all mapped lower-level * Audio Paths for the given stream configuration. * * NOTE: Once this function is called, no more streams may be added. */ int snd_avirt_card_seal(); /** * snd_avirt_pcm_info - Get PCM info for a given PCM name * @pcm_name: The PCM name of which to retrieve the PCM info * @pcm_info: The PCM info struct to populate * @return: 0 on success, negative ERRNO otherwise * * Can be used to retrieve a `snd_pcm_info_t` struct for a given PCM device from * it's name. Useful for retrieving card index and PCM index for a PCM. */ int snd_avirt_pcm_info(const char *pcm_name, snd_pcm_info_t *pcm_info); /** * snd_avirt_card_index_get - Get the ALSA card index for an AVIRT card * @avirt_idx: The AVIRT internal index (TD MF: perhaps change to UID?) * @return: The ALSA card index on success, negative ERRNO otherwise */ int snd_avirt_card_index_get(int avirt_idx); /** * snd_avirt_ctl_set_volume - Set an ALSA mixer volume value * @name: The ALSA volume control name to set * @volume: The volume to set * @return: 0 on success, negative ERRNO otherwise */ int snd_avirt_ctl_set_volume(const char *name, long volume); /** * snd_avirt_ctl_set_volume - Get an ALSA mixer volume value * @name: The ALSA volume control name to get * @volume: Populate this with the gotten value * @return: 0 on success, negative ERRNO otherwise */ int snd_avirt_ctl_get_volume(const char *name, long *volume); #endif // _AVIRT_H_