]> git.alsa-project.org Git - alsa-lib.git/commitdiff
control: Add UMP Endpoint and Block info query support
authorTakashi Iwai <tiwai@suse.de>
Mon, 22 May 2023 16:04:40 +0000 (18:04 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 6 Jun 2023 13:13:27 +0000 (15:13 +0200)
Add functions to query the UMP Endpoint and Block info via control
interface.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/control.h
include/local.h
src/Versions.in
src/control/control.c
src/control/control_hw.c
src/control/control_local.h

index a2439d78057a3ccd4870f20c5d9434df7b81ceac..41892de20fd37e3f0737f40ca54a69f828d9c632 100644 (file)
@@ -418,6 +418,8 @@ int snd_ctl_rawmidi_next_device(snd_ctl_t *ctl, int * device);
 int snd_ctl_rawmidi_info(snd_ctl_t *ctl, snd_rawmidi_info_t * info);
 int snd_ctl_rawmidi_prefer_subdevice(snd_ctl_t *ctl, int subdev);
 int snd_ctl_ump_next_device(snd_ctl_t *ctl, int *device);
+int snd_ctl_ump_endpoint_info(snd_ctl_t *ctl, snd_ump_endpoint_info_t *info);
+int snd_ctl_ump_block_info(snd_ctl_t *ctl, snd_ump_block_info_t *info);
 #endif
 int snd_ctl_set_power_state(snd_ctl_t *ctl, unsigned int state);
 int snd_ctl_get_power_state(snd_ctl_t *ctl, unsigned int *state);
index 151e3fd4d39b5b1dbc65850a408837d2aafbb889..4206d68137d980a96cb578f639cd66aee43a03e9 100644 (file)
 #include "pcm.h"
 #include "pcm_plugin.h"
 #include "rawmidi.h"
+#include "ump.h"
 #include "timer.h"
 #include "hwdep.h"
 #include "control.h"
index ee17cf289c0ec5b437182cd3b8314429b5386ebc..2acf3d1889df1e17881c06c8083005c79cfd6add 100644 (file)
@@ -154,4 +154,6 @@ ALSA_1.2.10 {
 
     @SYMBOL_PREFIX@snd_ump_*;
     @SYMBOL_PREFIX@snd_ctl_ump_next_device;
+    @SYMBOL_PREFIX@snd_ctl_ump_endpoint_info;
+    @SYMBOL_PREFIX@snd_ctl_ump_block_info;
 } ALSA_1.2.9;
index 7168ff8d2d35ee0c1d3b94a63caf3f2f0089f69f..ec01518e67f771148ada43ea1e6c0c4f98ab2503 100644 (file)
@@ -1281,6 +1281,30 @@ int snd_ctl_ump_next_device(snd_ctl_t *ctl, int *device)
        return -ENXIO;
 }
 
+/**
+ * \brief Get UMP Endpoint info about a UMP RawMidi device
+ * \param ctl CTL handle
+ * \param info UMP Endpoint info pointer
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_ctl_ump_endpoint_info(snd_ctl_t *ctl, snd_ump_endpoint_info_t *info)
+{
+       assert(ctl && info);
+       return ctl->ops->ump_endpoint_info(ctl, info);
+}
+
+/**
+ * \brief Get UMP Block info about a UMP RawMidi device
+ * \param ctl CTL handle
+ * \param info UMP Block info pointer
+ * \return 0 on success otherwise a negative error code
+ */
+int snd_ctl_ump_block_info(snd_ctl_t *ctl, snd_ump_block_info_t *info)
+{
+       assert(ctl && info);
+       return ctl->ops->ump_block_info(ctl, info);
+}
+
 /**
  * \brief Set Power State to given SND_CTL_POWER_* value and do the power management
  * \param ctl CTL handle
index 95d6d07d22d122660a24c89df79b7d5b41a902fd..df76990b98e750046769a9ffe0bba59798e2b260 100644 (file)
@@ -333,6 +333,24 @@ static int snd_ctl_hw_ump_next_device(snd_ctl_t *handle, int *device)
        return 0;
 }
 
+static int snd_ctl_hw_ump_endpoint_info(snd_ctl_t *handle,
+                                       snd_ump_endpoint_info_t *info)
+{
+       snd_ctl_hw_t *hw = handle->private_data;
+       if (ioctl(hw->fd, SNDRV_CTL_IOCTL_UMP_ENDPOINT_INFO, info) < 0)
+               return -errno;
+       return 0;
+}
+
+static int snd_ctl_hw_ump_block_info(snd_ctl_t *handle,
+                                    snd_ump_block_info_t *info)
+{
+       snd_ctl_hw_t *hw = handle->private_data;
+       if (ioctl(hw->fd, SNDRV_CTL_IOCTL_UMP_BLOCK_INFO, info) < 0)
+               return -errno;
+       return 0;
+}
+
 static int snd_ctl_hw_set_power_state(snd_ctl_t *handle, unsigned int state)
 {
        snd_ctl_hw_t *hw = handle->private_data;
@@ -388,6 +406,8 @@ static const snd_ctl_ops_t snd_ctl_hw_ops = {
        .rawmidi_info = snd_ctl_hw_rawmidi_info,
        .rawmidi_prefer_subdevice = snd_ctl_hw_rawmidi_prefer_subdevice,
        .ump_next_device = snd_ctl_hw_ump_next_device,
+       .ump_endpoint_info = snd_ctl_hw_ump_endpoint_info,
+       .ump_block_info = snd_ctl_hw_ump_block_info,
        .set_power_state = snd_ctl_hw_set_power_state,
        .get_power_state = snd_ctl_hw_get_power_state,
        .read = snd_ctl_hw_read,
index aa05bac849137fc1c7e7182b505f026010057ccc..2afa62cceee337c70c3acd8318338cc42a347f6b 100644 (file)
@@ -48,6 +48,8 @@ typedef struct _snd_ctl_ops {
        int (*rawmidi_info)(snd_ctl_t *handle, snd_rawmidi_info_t * info);
        int (*rawmidi_prefer_subdevice)(snd_ctl_t *handle, int subdev);
        int (*ump_next_device)(snd_ctl_t *handle, int *device);
+       int (*ump_endpoint_info)(snd_ctl_t *handle, snd_ump_endpoint_info_t *info);
+       int (*ump_block_info)(snd_ctl_t *handle, snd_ump_block_info_t *info);
        int (*set_power_state)(snd_ctl_t *handle, unsigned int state);
        int (*get_power_state)(snd_ctl_t *handle, unsigned int *state);
        int (*read)(snd_ctl_t *handle, snd_ctl_event_t *event);