我尝试使用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
HFP SLC应在SCO连接之前建立。HFP服务级别连接(SLC(将由oFono建立,SCO数据的写入由pulseudio实现。
首先确保HFP配置文件已连接,然后您可以尝试使用上面的代码。