从linux主机

时间:2017-04-30 16:09:59

标签: c linux usb alsa

我正在使用Linux(2.6.39内核)并尝试找到一种方法,允许我从主机Linux OS向Jabra设备发送卷递增/递减命令。我在Windows和Ubuntu中看到了这个功能,从PC控制音量改变了Jabra音量。

我能够接受从Jabra到主机操作系统的消费者HID卷增量/减量命令,但不是相反。此外,我可以使用HIDIOCSUSAGE ioctl向Jabra发送静音或摘机命令,但我无法在官方USB使用表document中找到音量控制的相应使用ID。

我不确定来自主机的卷命令是否确实是通过HID或某些其他API(例如snd-usb-audio内核模块)发送的。

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

然后找出该混音器控件的名称和有效范围 只执行:

system("amixer cset name='Master Playback Volume' 42");

或直接访问控件:

#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>

static void check(int err, const char *f)
{
        if (err < 0) {
                fprintf(stderr, "%s failed: %s\n", f, snd_strerror(err));
                exit(EXIT_FAILURE);
        }
}
#define CHECK(f) check(f, #f)

int main()
{
        snd_ctl_t *ctl;
        snd_ctl_elem_value_t *value;

        CHECK(snd_ctl_open(&ctl, "hw:1", 0));  // card number

        snd_ctl_elem_value_alloca(&value);
        snd_ctl_elem_value_set_interface(value, SND_CTL_ELEM_IFACE_MIXER);
        snd_ctl_elem_value_set_name(value, "Master Playback Volume");
        snd_ctl_elem_value_set_integer(value, 0, 42);
        CHECK(snd_ctl_elem_write(ctl, value));

        snd_ctl_close(ctl);
        return 0;
}