aboutsummaryrefslogtreecommitdiff
path: root/src/pcm.c
diff options
context:
space:
mode:
authorTaylor Holberton <taylorcholberton@gmail.com>2016-12-24 20:33:33 -0800
committerTaylor Holberton <taylorcholberton@gmail.com>2016-12-24 20:33:33 -0800
commitc6f908ee871c995c193c2dcbd8ec9bfd69045689 (patch)
tree66ea691ece1c1f072bd86f3789daa13662389395 /src/pcm.c
parentbd6ed24d37fab13e782b8cd17152e4e796480914 (diff)
Added pcm_open_by_name()
This function parses a PCM name similar to the ALSA library. This is done so that the differences between alsa-lib and tinyalsa are a little more transparent to the user.
Diffstat (limited to 'src/pcm.c')
-rw-r--r--src/pcm.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/pcm.c b/src/pcm.c
index b69316a..62e8d40 100644
--- a/src/pcm.c
+++ b/src/pcm.c
@@ -859,6 +859,36 @@ int pcm_close(struct pcm *pcm)
return 0;
}
+/** Opens a PCM by it's name.
+ * @param name The name of the PCM.
+ * The name is given in the format: <i>hw</i>:<b>card</b>,<b>device</b>
+ * @param flags Specify characteristics and functionality about the pcm.
+ * May be a bitwise AND of the following:
+ * - @ref PCM_IN
+ * - @ref PCM_OUT
+ * - @ref PCM_MMAP
+ * - @ref PCM_NOIRQ
+ * - @ref PCM_MONOTONIC
+ * @param config The hardware and software parameters to open the PCM with.
+ * @returns On success, returns an initialized pcm, ready for reading or writing.
+ * On error, returns NULL.
+ * @ingroup libtinyalsa-pcm
+ */
+struct pcm *pcm_open_by_name(const char *name,
+ unsigned int flags,
+ const struct pcm_config *config)
+{
+ unsigned int card, device;
+ if ((name[0] != 'h')
+ || (name[1] != 'w')
+ || (name[2] != ':')) {
+ return NULL;
+ } else if (sscanf(&name[3], "%u,%u", &card, &device) != 2) {
+ return NULL;
+ }
+ return pcm_open(card, device, flags, config);
+}
+
/** Opens a PCM.
* @param card The card that the pcm belongs to.
* The default card is zero.