【问题标题】:How you use SCO in BLUEZ?你如何在BLUEZ中使用SCO?
【发布时间】:2021-07-09 13:03:11
【问题描述】:

我尝试使用 Bluez 的 SCO。我按照例子:https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/tools/scotest.c

我的代码是这样的:

sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, BTPROTO_SCO);
if (sk < 0) {
    syslog(LOG_ERR, "Can't create socket: %s (%d)",
                        strerror(errno), errno);
    return -1;
}


/* Connect to remote device */
memset(&addr, 0, sizeof(addr));
addr.sco_family = AF_BLUETOOTH;
str2ba(svr, &addr.sco_bdaddr);

if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    syslog(LOG_ERR, "Can't connect: %s (%d)",
                        strerror(errno), errno);
}

/* Get connection information */
memset(&conn, 0, sizeof(conn));
optlen = sizeof(conn);

if (getsockopt(sk, SOL_SCO, SCO_CONNINFO, &conn, &optlen) < 0) {
    syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)",
                        strerror(errno), errno);
}


if( recv(sk,buffer, bufferSize,0) < 0) {
    syslog(LOG_ERR, "Can't read: %s (%d)",
                        strerror(errno), errno);
}

每当我尝试读取数据时,都会收到错误消息:“无法读取:功能未实现 (38)” 当我尝试使用 getsockopt 时,我收到一条错误消息,提示未连接传输端点。

不知道怎么解决。我使用 Ubuntu 20.04 和 bluetoothd -v == 5.53

【问题讨论】:

    标签: c sockets ubuntu bluez


    【解决方案1】:

    HFP SLC 应该在 SCO 连接之前建立。 HFP Service Level Connection (SLC) 将由 oFono 建立,写入 SCO 数据由 pulseaudio 实现。

    首先确保 HFP 配置文件已连接,然后您可以尝试使用上述代码。

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 2015-04-22
      • 2012-07-01
      • 2021-07-04
      • 2018-05-19
      • 2014-04-16
      • 2016-05-14
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多