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

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

我对以下事情感兴趣:

  • Master连接到我们的内置设备并建立sco链接。
    如何验证链接已建立?
  • 主设备将sco数据包发送到从属设备,而从属设备发送回(loopback)
    相同的数据包要掌握。绝对不知道该怎么做?

  • 我到目前为止所做的:

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

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

    在Linux上,通过c++代码修改了/etc/asound.conf,使其包含连接设备的mac地址(在我的情况下是Windows笔记本电脑)。
    示例如下所示
    pcm.btheadset {
       type plug
       slave {
           pcm {
               type bluetooth
               device DC:A9:71:8D:2D:C6
               profile "auto"
           }
       }
    

    然后通过命令在我的内部BT上播放声音
    aplay -D btheadset " path of audio_file"
    

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

    到现在为止还挺好。
    现在当我做hciconfig -a
    acl packets have increase but sco remain at 0
    
    RX bytes:1041 acl:456 sco:0 events:36 errors:0
    TX bytes:1347 acl:567 sco:0 commands:34 errors:0
    
  • 请问这能证明音频正在运行,但不能通过sco来运行吗?
  • 我发现我没有btsco驱动程序或hcid.conf文件。做
    您认为这可能是个问题吗?
  • 如果我的音频通过sco工作,有人可以给我一个例子吗
    如何通过hcidump测试?
  • 如何将其循环回主目录?

  • 注意:
    音乐播放时,我做了hcidump并保存了文件。我将保存文件转储到wirehark中,并使用“bthci_sco”过滤数据包,但未发现任何数据包。那么想知道音乐如何运作吗?

    最佳答案

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

    以下是我尝试的步骤。请以它为引用,因为我很可能忘记编写一些步骤

    ................................................... ..................................................................
    问题概述:尝试将Linux OS连接到BT耳机并建立sco链接以播放音乐

    UBuntu配置:
    内核版本: 3.0.0-32-generic
    Ubuntu版本-> 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)我建议同时安装突触来安装软件包和缺少的库。

    4)安装以下软件包->
         bluez-hcidump
         bluez-utils
         libbluetooth1
         libbluetooth1-dev
         install automake-1.7 and autoconfig
         cvs
    

    5)谷歌下载btsco的源代码

    使用以下命令
    cvs -d:pserver:[email protected]:/cvsroot/bluetooth-alsa login
    cvs -d:pserver:[email protected]:/cvsroot/bluetooth-alsa co btsco
    

    6)现在正在编译和安装

    i)进入btsco目录

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

    一旦bootsrap通过执行配置
    ii)./配置
    问题:
  • 如果缺少蓝牙/蓝牙.h->安装libbluetooth-dev
  • 软件包要求dbus-1> = 0.36不满足&找不到dbus-glib->安装libdbus-glib-1-dev

  • iii)使

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

    解决该错误的方法:下载libtool-1.5.24 tar ball。提取并执行configure and make
    现在再次在btsco上进行配置,并将可执行的libtool从libtool目录复制到btsco。

    iv)进行安装
    v)使维护者保持清洁
    O / p:btsco构建成功,您可以在/ usr / local / bin中找到它。

    7)构建内核模块

    i)光盘/ usr / src / btsco / kernel

    ii)使

    问题:我想您会收到大量错误。打开btsco.cand逐步处理每个错误

    找不到1个错误的声音/driver.h bla bla->在btsco.c文件中进行注释
    2条评论#包括,因为这已经过时了
    3)添加
     #include< linux/smp.h>
     #include< linux/muxtex.h>
    

    4)DEFINE_MUTEX(os_mutex);

    5)snd_assert已过时,因此如果语句示例替换uit
    if( bt_sco->playback == NULL)
    {
    
    }
    

    6)将下面的函数替换为kill_proc(再次作废),该函数是从net .. tahnks复制到该家伙的以下9
    链接: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;              /* default return value */
        struct task_struct* p;
        struct task_struct* t = NULL;
        struct pid* pspid;
        rcu_read_lock();
        p = &init_task;                  /* start at init */
        do {
            if (p->pid == pid) {         /* does the pid (not tgid) match? */
            t = p;
            break;
            }
        p = next_task(p);    /* "this isn't the task you're looking for" */
        } while (p != &init_task);   /* stop when we get back to init */
        if (t != NULL) {
            pspid = t->pids[PIDTYPE_PID].pid;
            if (pspid != NULL) error = kill_pid(pspid,sig,1);
        }
        rcu_read_unlock();
        return error;
    }
    

    然后代替kill_proc应该是
    my_kill_proc( bt_sco->thread_pid, SIGINT )
    

    6)将%d to %lu替换为long long错误

    7)replace lock_kernal to mutex_lock( &os_mutex)与解锁相同

    希望之后会成功

    8)进行安装
    9)depmod -e
    10 0清洁

    11)modprobe snd_bt_sco

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

    现在运行btsco

    a)hciconfig hci0语音0X0060

    b)hcitool扫描

    获取JABRA的mac_addre4ss

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

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

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

    e)一旦建立了jabr连接
    运行aplay -D plughw:Headset /home/my_home_dir/my_sample_fiile.wav

    关于linux - 如何使用bluez库测试蓝牙中的sco数据包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26137056/

    10-11 00:10