mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
More documentation changes (rawmidi, timer)
This commit is contained in:
parent
56fac8ab14
commit
2ca5ace9cb
11 changed files with 197 additions and 20 deletions
|
|
@ -78,7 +78,8 @@ EXCLUDE = ../src/control/control_local.h \
|
|||
../src/seq/seq_local.h
|
||||
RECURSIVE = YES
|
||||
FILE_PATTERNS = *.c *.h
|
||||
EXAMPLE_PATH = ../test/pcm.c ../test/latency.c
|
||||
EXAMPLE_PATH = ../test/pcm.c ../test/latency.c ../test/rawmidi.c \
|
||||
../test/timer.c
|
||||
QUIET = YES
|
||||
|
||||
EXTRACT_ALL = NO
|
||||
|
|
@ -87,7 +88,7 @@ SHOW_INCLUDE_FILES = NO
|
|||
JAVADOC_AUTOBRIEF = NO
|
||||
INHERIT_DOCS = YES
|
||||
ENABLED_SECTIONS = ""
|
||||
PREDEFINED = DOXYGEN PIC "DOC_HIDDEN"
|
||||
PREDEFINED = DOXYGEN PIC "DOC_HIDDEN" "ATTRIBUTE_UNUSED="
|
||||
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES # doxygen 1.2.6 option
|
||||
|
||||
|
|
|
|||
|
|
@ -30,8 +30,13 @@ may be placed in the library code instead of the kernel driver.</P>
|
|||
<H2>API links</H2>
|
||||
|
||||
<UL>
|
||||
<LI>Page \ref control explains the primitive controls API
|
||||
<LI>Page \ref hcontrol explains the high-level primitive controls API
|
||||
<LI>Page \ref pcm explains the design of PCM (digital audio) API
|
||||
<LI>Page \ref pcm_plugins explains the design of PCM (digital audio) plugins
|
||||
<LI>Page \ref rawmidi explains the design of RawMidi API
|
||||
<LI>Page \ref timer explains the design of Timer API
|
||||
<LI>Page \ref seq explains the design of Sequencer API
|
||||
</UL>
|
||||
|
||||
<H2>Configuration</H2>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ extern "C" {
|
|||
/**
|
||||
* \defgroup Control Control Interface
|
||||
* The control interface.
|
||||
* See \ref control page for more details.
|
||||
* \{
|
||||
*/
|
||||
|
||||
|
|
@ -398,6 +399,7 @@ void snd_ctl_elem_value_set_iec958(snd_ctl_elem_value_t *obj, const snd_aes_iec9
|
|||
* \defgroup HControl Highlevel Control Interface
|
||||
* \ingroup Control
|
||||
* The highlevel control interface.
|
||||
* See \ref hcontrol page for more details.
|
||||
* \{
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* \defgroup RawMidi RawMidi Interface
|
||||
* The RawMidi Interface.
|
||||
* The RawMidi Interface. See \ref rawmidi page for more details.
|
||||
* \{
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@
|
|||
* \author Abramo Bagnara <abramo@alsa-project.org>
|
||||
* \author Takashi Iwai <tiwai@suse.de>
|
||||
* \date 1998-2001
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Application interface library for the ALSA driver
|
||||
*
|
||||
*
|
||||
|
|
@ -34,7 +35,8 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* \defgroup Sequencer MIDI Sequencer
|
||||
* MIDI Sequencer Interface
|
||||
* MIDI Sequencer Interface.
|
||||
* See \ref seq page for more details.
|
||||
* \{
|
||||
*/
|
||||
|
||||
|
|
@ -44,7 +46,7 @@ extern "C" {
|
|||
/** Sequencer handle */
|
||||
typedef struct _snd_seq snd_seq_t;
|
||||
|
||||
/** \internal */
|
||||
/** Allocate and initialize array on stack \internal */
|
||||
#define SND_ALLOCA(type,ptr) \
|
||||
do {\
|
||||
assert(ptr);\
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* \defgroup Timer Timer Interface
|
||||
* Timer Interface
|
||||
* Timer Interface. See \ref timer page for more details.
|
||||
* \{
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
* \date 2000
|
||||
*
|
||||
* CTL interface is designed to access primitive controls.
|
||||
* See \ref control page for more details.
|
||||
*/
|
||||
/*
|
||||
* Control Interface - main file
|
||||
|
|
@ -27,6 +28,18 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \page control Control interface
|
||||
|
||||
<P>Control interface is designed to access primitive controls. There is
|
||||
also interface notifying about control and structure changes.
|
||||
|
||||
\section control_general_overview General overview
|
||||
|
||||
The primitive controls can be integer, boolean, enumerators, bytes
|
||||
and IEC958 structure.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* HCTL interface is designed to access preloaded and sorted primitive controls.
|
||||
* Callbacks may be used for event handling.
|
||||
* See \ref hcontrol page for more details.
|
||||
*/
|
||||
/*
|
||||
* Control Interface - highlevel API
|
||||
|
|
@ -30,6 +31,17 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \page hcontrol High level control interface
|
||||
|
||||
<P> High level control interface is designed to access preloaded and sorted primitive controls.
|
||||
|
||||
\section hcontrol_general_overview General overview
|
||||
|
||||
<P> High level control interface caches the accesses to primitive controls
|
||||
to reduce overhead accessing the real controls in kernel drivers.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
|
|
|||
|
|
@ -5,19 +5,7 @@
|
|||
* \author Abramo Bagnara <abramo@alsa-project.org>
|
||||
* \date 2000-2001
|
||||
*
|
||||
* RawMidi Interface is designed to write or read raw (unchanged) MIDI
|
||||
* data over the MIDI line. MIDI stands Musical Instrument Digital Interface
|
||||
* and more information about this standard can be found at
|
||||
* http://www.midi.org.
|
||||
*
|
||||
* RawMidi devices are opened exclusively for a selected direction.
|
||||
* While more than one process may not open a given MIDI device in the same
|
||||
* direction simultaneously, separate processes may open a single MIDI device
|
||||
* in different directions (i.e. process one opens a MIDI device in write
|
||||
* direction and process two opens the same device in read direction). MIDI
|
||||
* devices return EBUSY error to applications when other applications have
|
||||
* already opened the requested direction (nonblock behaviour) or wait
|
||||
* until the device is not available (block behaviour).
|
||||
* See the \ref rawmidi page for more details.
|
||||
*/
|
||||
/*
|
||||
*
|
||||
|
|
@ -37,6 +25,112 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \page rawmidi RawMidi interface
|
||||
|
||||
<P>RawMidi Interface is designed to write or read raw (unchanged) MIDI
|
||||
data over the MIDI line without any timestamps defined in interface. MIDI
|
||||
stands Musical Instrument Digital Interface and more information about
|
||||
this standard can be found at http://www.midi.org.
|
||||
|
||||
\section rawmidi_general_overview General overview
|
||||
|
||||
The rawmidi implementation uses ring buffers to store outgoing and incoming
|
||||
MIDI stream. The buffer size is tunable and drivers report underruns for incoming
|
||||
stream as well.
|
||||
|
||||
\section rawmidi_open Open handling
|
||||
|
||||
RawMidi devices are opened exclusively for a selected direction.
|
||||
While more than one process may not open a given MIDI device in the same
|
||||
direction simultaneously, separate processes may open a single MIDI device
|
||||
in different directions (i.e. process one opens a MIDI device in write
|
||||
direction and process two opens the same device in read direction).
|
||||
|
||||
\subsection rawmidi_open_nonblock Nonblocking open (flag)
|
||||
|
||||
Using #SND_RAWMIDI_NONBLOCK flag for snd_rawmidi_open() or snd_rawmidi_open_lconf()
|
||||
instruct device driver to return the -EBUSY error when device is already occupied
|
||||
with another application. This flag also changes behaviour of snd_rawmidi_write()
|
||||
and snd_rawmidi_read() returning -EAGAIN when no more bytes can be processed.
|
||||
|
||||
Note: In opposite (default) behaviour, application is blocked until device resources
|
||||
are free.
|
||||
|
||||
\subsection rawmidi_open_append Append open (flag)
|
||||
|
||||
Using #SND_RAWMIDI_APPEND flag (output only) instruct device driver to append
|
||||
contents of written buffer - passed by snd_rawmidi_write() - atomically
|
||||
to output ring buffer in the kernel space. This flag also means that device
|
||||
is not opened exclusively, so more applications can share given rawmidi device.
|
||||
|
||||
\subsection rawmidi_open_sync Sync open (flag)
|
||||
|
||||
Using #SND_RAWMIDI_SYNC flag (output only) assures that the contents of output
|
||||
buffer specified using snd_rawmidi_write() is always drained before the function
|
||||
exits. This behaviour is same like 'snd_rawmidi_write() followed by
|
||||
snd_rawmidi_drain() immediately'.
|
||||
|
||||
\subsection rawmidi_io I/O handling
|
||||
|
||||
There is only standard read/write access to device internal ring buffer. Use
|
||||
snd_rawmidi_read() and snd_rawmidi_write() functions to obtain / write MIDI bytes.
|
||||
|
||||
\subsection rawmidi_dev_names RawMidi naming conventions
|
||||
|
||||
The ALSA library uses a generic string representation for names of devices.
|
||||
The devices might be virtual, physical or a mix of both. The generic string
|
||||
is passed to \link ::snd_rawmidi_open() \endlink or \link ::snd_rawmidi_open_lconf() \endlink.
|
||||
It contains two parts: device name and arguments. Devices and arguments are described
|
||||
in configuration files. The usual place for default definitions is at /usr/share/alsa/alsa.conf.
|
||||
|
||||
\subsection rawmidi_dev_names_default
|
||||
|
||||
The default device is equal to hw device. The defaults are used:
|
||||
|
||||
defaults.rawmidi.card 0
|
||||
defaults.rawmidi.device 0
|
||||
defaults.rawmidi.subdevice -1
|
||||
|
||||
These defaults can be freely overwritten in local cofiguration files.
|
||||
|
||||
Example:
|
||||
|
||||
\code
|
||||
default
|
||||
\endcode
|
||||
|
||||
\subsection rawmidi_dev_names_hw HW device
|
||||
|
||||
The hw device description uses the hw plugin. The three arguments (in order: CARD,DEV,SUBDEV)
|
||||
specify card number or identifier, device number and subdevice number (-1 means any).
|
||||
|
||||
Example:
|
||||
|
||||
\code
|
||||
hw
|
||||
hw:0
|
||||
hw:0,0
|
||||
hw:supersonic,1
|
||||
hw:soundwave,1,2
|
||||
hw:DEV=1,CARD=soundwave,SUBDEV=2
|
||||
\endcode
|
||||
|
||||
\section rawmidi_examples Examples
|
||||
|
||||
The full featured examples with cross-links:
|
||||
|
||||
\par Simple input/output test program
|
||||
\ref example_test_rawmidi "example code"
|
||||
\par
|
||||
This example shows open and read/write rawmidi operations.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* \example ../test/rawmidi.c
|
||||
* \anchor example_test_rawmidi
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
* \author Abramo Bagnara <abramo@alsa-project.org>
|
||||
* \author Takashi Iwai <tiwai@suse.de>
|
||||
* \date 2000-2001
|
||||
*
|
||||
* See \ref seq page for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
@ -26,6 +28,12 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \page seq Sequencer interface
|
||||
|
||||
<P>Description...
|
||||
|
||||
*/
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <sys/poll.h>
|
||||
#include "seq_local.h"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
* \date 1998-2001
|
||||
*
|
||||
* Timer Interface is designed to access timers.
|
||||
* See \ref timer page for more details.
|
||||
*/
|
||||
/*
|
||||
* Timer Interface - main file
|
||||
|
|
@ -27,6 +28,45 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \page timer Timer interface
|
||||
|
||||
<P> Timer interface is designed to use internal timers in sound hardware, but
|
||||
it can be driven with any timer.
|
||||
|
||||
\section timer_general_overview General overview
|
||||
|
||||
The timer implementation uses ring buffer to store information about timing
|
||||
events. In this buffer is recorded count of ticks and current tick resolution
|
||||
in nanoseconds.
|
||||
|
||||
\section timer_open Opening
|
||||
|
||||
Timer devices can be opened in two ways. When #SND_TIMER_OPEN_NONBLOCK flag
|
||||
is used, then the open functions return immediately with -EBUSY error code when
|
||||
resources are occupied with another application. When #SND_TIMER_OPEN_NONBLOCK
|
||||
is not used (by default) the open functions block the application requesting
|
||||
device until resources are not free.
|
||||
|
||||
\section timer_events Events
|
||||
|
||||
Events are read via snd_timer_read() function.
|
||||
|
||||
\section timer_examples Examples
|
||||
|
||||
The full featured examples with cross-links:
|
||||
|
||||
\par Simple timer test program
|
||||
\ref example_test_timer "example code"
|
||||
\par
|
||||
This example shows opening a timer device and reading of timer events.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* \example ../test/timer.c
|
||||
* \anchor example_test_timer
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue