Home | History | Annotate | Download | only in alsa
      1 /**
      2  * \file include/rawmidi.h
      3  * \brief Application interface library for the ALSA driver
      4  * \author Jaroslav Kysela <perex (at) perex.cz>
      5  * \author Abramo Bagnara <abramo (at) alsa-project.org>
      6  * \author Takashi Iwai <tiwai (at) suse.de>
      7  * \date 1998-2001
      8  *
      9  * Application interface library for the ALSA driver
     10  */
     11 /*
     12  *   This library is free software; you can redistribute it and/or modify
     13  *   it under the terms of the GNU Lesser General Public License as
     14  *   published by the Free Software Foundation; either version 2.1 of
     15  *   the License, or (at your option) any later version.
     16  *
     17  *   This program is distributed in the hope that it will be useful,
     18  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     19  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     20  *   GNU Lesser General Public License for more details.
     21  *
     22  *   You should have received a copy of the GNU Lesser General Public
     23  *   License along with this library; if not, write to the Free Software
     24  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
     25  *
     26  */
     27 
     28 #ifndef __ALSA_RAWMIDI_H
     29 #define __ALSA_RAWMIDI_H
     30 
     31 #ifdef __cplusplus
     32 extern "C" {
     33 #endif
     34 
     35 /**
     36  *  \defgroup RawMidi RawMidi Interface
     37  *  The RawMidi Interface. See \ref rawmidi page for more details.
     38  *  \{
     39  */
     40 
     41 /** dlsym version for interface entry callback */
     42 #define SND_RAWMIDI_DLSYM_VERSION	_dlsym_rawmidi_001
     43 
     44 /** RawMidi information container */
     45 typedef struct _snd_rawmidi_info snd_rawmidi_info_t;
     46 /** RawMidi settings container */
     47 typedef struct _snd_rawmidi_params snd_rawmidi_params_t;
     48 /** RawMidi status container */
     49 typedef struct _snd_rawmidi_status snd_rawmidi_status_t;
     50 
     51 /** RawMidi stream (direction) */
     52 typedef enum _snd_rawmidi_stream {
     53 	/** Output stream */
     54 	SND_RAWMIDI_STREAM_OUTPUT = 0,
     55 	/** Input stream */
     56 	SND_RAWMIDI_STREAM_INPUT,
     57 	SND_RAWMIDI_STREAM_LAST = SND_RAWMIDI_STREAM_INPUT
     58 } snd_rawmidi_stream_t;
     59 
     60 /** Append (flag to open mode) \hideinitializer */
     61 #define SND_RAWMIDI_APPEND	0x0001
     62 /** Non blocking mode (flag to open mode) \hideinitializer */
     63 #define SND_RAWMIDI_NONBLOCK	0x0002
     64 /** Write sync mode (Flag to open mode) \hideinitializer */
     65 #define SND_RAWMIDI_SYNC	0x0004
     66 
     67 /** RawMidi handle */
     68 typedef struct _snd_rawmidi snd_rawmidi_t;
     69 
     70 /** RawMidi type */
     71 typedef enum _snd_rawmidi_type {
     72 	/** Kernel level RawMidi */
     73 	SND_RAWMIDI_TYPE_HW,
     74 	/** Shared memory client RawMidi (not yet implemented) */
     75 	SND_RAWMIDI_TYPE_SHM,
     76 	/** INET client RawMidi (not yet implemented) */
     77 	SND_RAWMIDI_TYPE_INET,
     78 	/** Virtual (sequencer) RawMidi */
     79 	SND_RAWMIDI_TYPE_VIRTUAL
     80 } snd_rawmidi_type_t;
     81 
     82 int snd_rawmidi_open(snd_rawmidi_t **in_rmidi, snd_rawmidi_t **out_rmidi,
     83 		     const char *name, int mode);
     84 int snd_rawmidi_open_lconf(snd_rawmidi_t **in_rmidi, snd_rawmidi_t **out_rmidi,
     85 			   const char *name, int mode, snd_config_t *lconf);
     86 int snd_rawmidi_close(snd_rawmidi_t *rmidi);
     87 int snd_rawmidi_poll_descriptors_count(snd_rawmidi_t *rmidi);
     88 int snd_rawmidi_poll_descriptors(snd_rawmidi_t *rmidi, struct pollfd *pfds, unsigned int space);
     89 int snd_rawmidi_poll_descriptors_revents(snd_rawmidi_t *rawmidi, struct pollfd *pfds, unsigned int nfds, unsigned short *revent);
     90 int snd_rawmidi_nonblock(snd_rawmidi_t *rmidi, int nonblock);
     91 size_t snd_rawmidi_info_sizeof(void);
     92 /** \hideinitializer
     93  * \brief allocate an invalid #snd_rawmidi_info_t using standard alloca
     94  * \param ptr returned pointer
     95  */
     96 #define snd_rawmidi_info_alloca(ptr) do { assert(ptr); *ptr = (snd_rawmidi_info_t *) alloca(snd_rawmidi_info_sizeof()); memset(*ptr, 0, snd_rawmidi_info_sizeof()); } while (0)
     97 int snd_rawmidi_info_malloc(snd_rawmidi_info_t **ptr);
     98 void snd_rawmidi_info_free(snd_rawmidi_info_t *obj);
     99 void snd_rawmidi_info_copy(snd_rawmidi_info_t *dst, const snd_rawmidi_info_t *src);
    100 unsigned int snd_rawmidi_info_get_device(const snd_rawmidi_info_t *obj);
    101 unsigned int snd_rawmidi_info_get_subdevice(const snd_rawmidi_info_t *obj);
    102 snd_rawmidi_stream_t snd_rawmidi_info_get_stream(const snd_rawmidi_info_t *obj);
    103 int snd_rawmidi_info_get_card(const snd_rawmidi_info_t *obj);
    104 unsigned int snd_rawmidi_info_get_flags(const snd_rawmidi_info_t *obj);
    105 const char *snd_rawmidi_info_get_id(const snd_rawmidi_info_t *obj);
    106 const char *snd_rawmidi_info_get_name(const snd_rawmidi_info_t *obj);
    107 const char *snd_rawmidi_info_get_subdevice_name(const snd_rawmidi_info_t *obj);
    108 unsigned int snd_rawmidi_info_get_subdevices_count(const snd_rawmidi_info_t *obj);
    109 unsigned int snd_rawmidi_info_get_subdevices_avail(const snd_rawmidi_info_t *obj);
    110 void snd_rawmidi_info_set_device(snd_rawmidi_info_t *obj, unsigned int val);
    111 void snd_rawmidi_info_set_subdevice(snd_rawmidi_info_t *obj, unsigned int val);
    112 void snd_rawmidi_info_set_stream(snd_rawmidi_info_t *obj, snd_rawmidi_stream_t val);
    113 int snd_rawmidi_info(snd_rawmidi_t *rmidi, snd_rawmidi_info_t * info);
    114 size_t snd_rawmidi_params_sizeof(void);
    115 /** \hideinitializer
    116  * \brief allocate an invalid #snd_rawmidi_params_t using standard alloca
    117  * \param ptr returned pointer
    118  */
    119 #define snd_rawmidi_params_alloca(ptr) do { assert(ptr); *ptr = (snd_rawmidi_params_t *) alloca(snd_rawmidi_params_sizeof()); memset(*ptr, 0, snd_rawmidi_params_sizeof()); } while (0)
    120 int snd_rawmidi_params_malloc(snd_rawmidi_params_t **ptr);
    121 void snd_rawmidi_params_free(snd_rawmidi_params_t *obj);
    122 void snd_rawmidi_params_copy(snd_rawmidi_params_t *dst, const snd_rawmidi_params_t *src);
    123 int snd_rawmidi_params_set_buffer_size(snd_rawmidi_t *rmidi, snd_rawmidi_params_t *params, size_t val);
    124 size_t snd_rawmidi_params_get_buffer_size(const snd_rawmidi_params_t *params);
    125 int snd_rawmidi_params_set_avail_min(snd_rawmidi_t *rmidi, snd_rawmidi_params_t *params, size_t val);
    126 size_t snd_rawmidi_params_get_avail_min(const snd_rawmidi_params_t *params);
    127 int snd_rawmidi_params_set_no_active_sensing(snd_rawmidi_t *rmidi, snd_rawmidi_params_t *params, int val);
    128 int snd_rawmidi_params_get_no_active_sensing(const snd_rawmidi_params_t *params);
    129 int snd_rawmidi_params(snd_rawmidi_t *rmidi, snd_rawmidi_params_t * params);
    130 int snd_rawmidi_params_current(snd_rawmidi_t *rmidi, snd_rawmidi_params_t *params);
    131 size_t snd_rawmidi_status_sizeof(void);
    132 /** \hideinitializer
    133  * \brief allocate an invalid #snd_rawmidi_status_t using standard alloca
    134  * \param ptr returned pointer
    135  */
    136 #define snd_rawmidi_status_alloca(ptr) do { assert(ptr); *ptr = (snd_rawmidi_status_t *) alloca(snd_rawmidi_status_sizeof()); memset(*ptr, 0, snd_rawmidi_status_sizeof()); } while (0)
    137 int snd_rawmidi_status_malloc(snd_rawmidi_status_t **ptr);
    138 void snd_rawmidi_status_free(snd_rawmidi_status_t *obj);
    139 void snd_rawmidi_status_copy(snd_rawmidi_status_t *dst, const snd_rawmidi_status_t *src);
    140 void snd_rawmidi_status_get_tstamp(const snd_rawmidi_status_t *obj, snd_htimestamp_t *ptr);
    141 size_t snd_rawmidi_status_get_avail(const snd_rawmidi_status_t *obj);
    142 size_t snd_rawmidi_status_get_xruns(const snd_rawmidi_status_t *obj);
    143 int snd_rawmidi_status(snd_rawmidi_t *rmidi, snd_rawmidi_status_t * status);
    144 int snd_rawmidi_drain(snd_rawmidi_t *rmidi);
    145 int snd_rawmidi_drop(snd_rawmidi_t *rmidi);
    146 ssize_t snd_rawmidi_write(snd_rawmidi_t *rmidi, const void *buffer, size_t size);
    147 ssize_t snd_rawmidi_read(snd_rawmidi_t *rmidi, void *buffer, size_t size);
    148 const char *snd_rawmidi_name(snd_rawmidi_t *rmidi);
    149 snd_rawmidi_type_t snd_rawmidi_type(snd_rawmidi_t *rmidi);
    150 snd_rawmidi_stream_t snd_rawmidi_stream(snd_rawmidi_t *rawmidi);
    151 
    152 /** \} */
    153 
    154 #ifdef __cplusplus
    155 }
    156 #endif
    157 
    158 #endif /* __RAWMIDI_H */
    159 
    160