如何在蓝牙中测试sco数据包

如何在蓝牙中测试sco数据包

问题 : 监控主从蓝牙之间的 sco 数据包。

问题描述。我有小型内部蓝牙设备(在 Linux fedora 操作系统中开发)并配置为从设备。

我对以下事情感兴趣:

  1. Master连接到我们内置的设备并建立sco链接。我如何验证链接是否已建立?

  2. 主站向从站发送 sco 数据包,从站向主站发送回(环回)相同的数据包。完全不知道该怎么做?

到目前为止我做了什么:

  1. 好吧,我已经将我们的内置设备配置为从属设备,并通过蓝牙成功连接到 Windows 笔记本电脑。

  2. 我已在内部 BT 设备中启用耳机配置文件,并且可以在 Windows 上看到耳机图标。

  3. 在 Linux 端,通过 C++ 代码,我已修改/etc/asound.conf为包含连接设备的 mac 地址(在我的情况下为 Windows 笔记本电脑)。
    示例如下所示

    pcm.btheadset {
       type plug
       slave {
           pcm {
               type bluetooth
               device DC:A9:71:8D:2D:C6
               profile "auto"
           }
       }
    
  4. 然后通过命令在我的内部 BT 上播放声音aplay -D btheadset " path of audio_file"

我可以在 Windows 笔记本电脑上成功听到声音。

到目前为止,一切都很好。
现在当我这样做时hciconfig -a

acl 数据包增加但 sco 仍为 0

RX bytes:1041 acl:456 sco:0 events:36 errors:0
TX bytes:1347 acl:567 sco:0 commands:34 errors:0

这能证明音频可以工作但不能通过 sco 工作吗?

  1. 我发现我没有 btsco 驱动程序或hcid.conf文件。您认为这可能是一个问题吗?

  2. 如果我的音频通过 sco 工作,有人可以给我提供一个如何测试的示例吗hcidump

  3. 如何循环回master?

答案1

经过几天与 Ubuntu 频繁崩溃的斗争,终于成功了。

以下是我尝试过的步骤。请作为参考,因为我很可能忘记写一些步骤

...................................................... ................................................. 概述问题之一:尝试将Linux操作系统连接到BT耳机并建立sco链接来播放音乐

UBuntu 配置:内核版本:3.0.0-32-generic Ubuntu Verion ->11.10

测试设备:JABRA EASY GO 耳机.................................................. ................................................ 1) 安装以上版本的Ubuntu。这个 Ubuntu 版本不再受支持,但由于我的内部设备使用几乎相同的内核版本,所以我坚持使用这个版本。

2) 配置 apt-get 源列表。由于安装的版本不再支持,apt-get 将无法工作。要使其正常工作,请修改 /etc/apt/sources.list。示例->

sudo sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

sudo apt-get update && sudo apt-get dist-upgrade 3) 我建议安装 synaptic 以及安装软件包和缺少的库。

4) 安装以下软件包 -->

 bluez-hcidump 
 bluez-utils
 libbluetooth1 
 libbluetooth1-dev
 install automake-1.7 and autoconfig
 cvs

5)谷歌下载btsco的源代码或者其他选择

使用以下命令

cvs -d:pserver:[电子邮件受保护]:/cvsroot/bluetooth-alsa 登录 cvs -d:pserver:[电子邮件受保护]:/cvsroot/bluetooth-alsa co btsco 6) 现在正在编译和安装

i) 转到 btsco 目录

ii) ./bootstrap 问题:如果错误/警告:在库安装 libbsdl1.2-dev 中找不到宏“AM_PATH_SDL”

一旦 bootsrap 通过执行配置 ii) ./configure 问题:

如果缺少 bluetooth/bluetooth.h -> 安装 libbluetooth-dev 软件包要求 dbus-1>=0.36 不满足且未找到 dbus-glib -> 安装 libdbus-glib-1-dev iii) make

问题:./libtool:第 841 行:X--tag=CXX:找不到命令以及更多类似的错误

要解决该错误:下载 libtool-1.5.24 tar 包。提取它并进行配置和制作。现在再次在 btsco 上进行配置,并将可执行的 libtool 从 libtool 目录复制到 btsco。

iv) make install v) make mainatiner-clean O/p : btsco 已成功构建,您可以在 /usr/local/bin 中找到它。

7) 构建内核模块

i) cd /usr/src/btsco/kernel

ii) 使

问题:我假设您会收到大量错误。打开btsco.can并逐步处理每个错误

1 错误 sound/driver.h 未找到 bla bla -> 在 btsco.c 文件中注释该内容 2 注释 #include 因为这现在已过时 3) 添加

#include<linux/smp.h> #include<linux/muxtex.h> 4) DEFINE_MUTEX(os_mutex);

5) snd_assert 已过时,因此将 uit 替换为 if 语句示例

if( bt_sco->播放 == NULL) {

6) 用从 net .. tahnks 复制到那个家伙的下面的函数替换kill_proc(再次过时)链接:http://www.linuxquestions.org/questions/linux-kernel-70/is-there-any-kill_proc-replacement-for-proprietary-linux-kernel-drivers-4175460017/

int my_kill_proc(pid_t pid, int sig) { int error = -ESRCH; /* 默认返回值/ 结构体任务结构体p;结构任务结构* t = NULL; struct pid* pspid; rcu_read_lock(); p = &init_task; /* 从初始化开始/ do { if (p->pid == pid) { /pid(不是 tgid)匹配吗?/t=p;
休息; } p = next_task(p); /
“这不是您要找的任务”/ } while (p != &init_task); /当我们回到 init 时停止 */ if (t != NULL) { pspid = t->pids[PIDTYPE_PID].pid;如果(pspid!= NULL)错误=kill_pid(pspid,sig,1); rcu_read_unlock();返回错误;然后而不是kill_proc应该是

my_kill_proc( bt_sco->thread_pid, SIGINT )
6) 将错误 long int 的 %d 替换为 %lu

7) 将 lock_kernal 替换为 mutex_lock( &os_mutex) 与解锁相同

希望之后make会成功

8) make install 9) depmod -e 10 0 make clean

11)modprobe snd_bt_sco

......................................

现在运行btsco

a) hciconfig hci0 语音 0X0060

b) hcitool 扫描

获取 JABRA 的 mac_addre4ss

c) /usr/local/bin/btsco -r -v mac_addrees

如果出现错误 ?: control open (hw:1),则 jabra 不支持 sco 或未加载内核模块

d) 在另一个终端上执行 -> sudo hcidump -i hci0 sco 来监控 sco 数据包

e) 建立 jabr 连接后,运行 aplay -Dplughw:Headset /home/my_home_dir/my_sample_fiile.wav

相关内容