zoukankan      html  css  js  c++  java
  • debian下蓝牙适配器的配置和使用

    本文打算将蓝牙适配器和手机蓝牙进行配对。

    买了个支持蓝牙4.0协议的蓝牙适配器,将其插入到pc(debian 7.4)的usb口。

    查看手机蓝牙信息:

    选择手机中"设置"->"关于手机"->"状态信息"可以看到蓝牙地址是18:DC:56:D2:1C:1A

    pc上安装蓝牙工具:

    sudo apt-get install bluez bluez-hcidump

    查看系统输出信息:

    $ dmesg | tail -n 4
    [25259.408121] usb 1-1.2: new full-speed USB device number 32 using ehci_hcd
    [25259.614615] usb 1-1.2: New USB device found, idVendor=0a12, idProduct=0001
    [25259.614621] usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
    [25259.614626] usb 1-1.2: Product: CSR8510 A10

    查看蓝牙适配器设备信息:

    $ lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
    Bus 001 Device 031: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Bus 002 Device 003: ID 046d:c05a Logitech, Inc. Optical Mouse M90
    Bus 003 Device 002: ID 413c:2003 Dell Computer Corp. Keyboard
    $ lsusb -s 001:031 -v
    
    Bus 001 Device 031: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Couldn't open device, some information will be missing
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass          224 Wireless
      bDeviceSubClass         1 Radio Frequency
      bDeviceProtocol         1 Bluetooth
      bMaxPacketSize0        64
      idVendor           0x0a12 Cambridge Silicon Radio, Ltd
      idProduct          0x0001 Bluetooth Dongle (HCI mode)
      bcdDevice           88.91
      iManufacturer           0 
      iProduct                2 
      iSerial                 0 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength          177
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           3
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0010  1x 16 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0000  1x 0 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0000  1x 0 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       1
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0009  1x 9 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0009  1x 9 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       2
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0011  1x 17 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0011  1x 17 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       3
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0019  1x 25 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0019  1x 25 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       4
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0021  1x 33 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0021  1x 33 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       5
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0031  1x 49 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0031  1x 49 bytes
            bInterval               1

    安装bluez后,会提供两个工具hciconfig和hcitool进行蓝牙相关的配置。

    查看当前蓝牙适配器参数配置:

    $ sudo hciconfig -a
    hci0:    Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING PSCAN 
        RX bytes:3639 acl:0 sco:0 events:169 errors:0
        TX bytes:745 acl:0 sco:0 commands:47 errors:0
        Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: RSWITCH HOLD SNIFF PARK 
        Link mode: SLAVE ACCEPT 
        Name: 'debian-0'
        Class: 0x420100
        Service Classes: Networking, Telephony
        Device Class: Computer, Uncategorized
        HCI Version: 4.0 (0x6)  Revision: 0x22bb
        LMP Version: 4.0 (0x6)  Subversion: 0x22bb
        Manufacturer: Cambridge Silicon Radio (10)

    蓝牙适配器的mac地址是: 00:1A:7D:DA:71:13,名称是debian-0。

    查看蓝牙适配器提供的各种功能:

    $ sdptool browse local
    Browsing FF:FF:FF:00:00:00 ...
    Service Name: SIM Access Server
    Service RecHandle: 0x10000
    Service Class ID List:
      "SIM Access" (0x112d)
      "Generic Telephony" (0x1204)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 8
    Profile Descriptor List:
      "SIM Access" (0x112d)
        Version: 0x0101
    
    Service Name: Headset Audio Gateway
    Service RecHandle: 0x10001
    Service Class ID List:
      "Headset Audio Gateway" (0x1112)
      "Generic Audio" (0x1203)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 12
    Profile Descriptor List:
      "Headset" (0x1108)
        Version: 0x0102
    
    Service Name: Hands-Free Audio Gateway
    Service RecHandle: 0x10002
    Service Class ID List:
      "Handsfree Audio Gateway" (0x111f)
      "Generic Audio" (0x1203)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 13
    Profile Descriptor List:
      "Handsfree" (0x111e)
        Version: 0x0105
    
    Service Name: AVRCP TG
    Service RecHandle: 0x10003
    Service Class ID List:
      "AV Remote Target" (0x110c)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 23
      "AVCTP" (0x0017)
        uint16: 0x103
    Profile Descriptor List:
      "AV Remote" (0x110e)
        Version: 0x0103
    
    Service Name: AVRCP CT
    Service RecHandle: 0x10004
    Service Class ID List:
      "AV Remote" (0x110e)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 23
      "AVCTP" (0x0017)
        uint16: 0x103
    Profile Descriptor List:
      "AV Remote" (0x110e)
        Version: 0x0100
    
    Service Name: Dial-Up Networking
    Service RecHandle: 0x10005
    Service Class ID List:
      "Dialup Networking" (0x1103)
      "Generic Networking" (0x1201)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 1
    Profile Descriptor List:
      "Dialup Networking" (0x1103)
        Version: 0x0100
    
    Service Name: OBEX Object Push
    Service RecHandle: 0x10006
    Service Class ID List:
      "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 9
      "OBEX" (0x0008)
    Profile Descriptor List:
      "OBEX Object Push" (0x1105)
        Version: 0x0100
    
    Service Name: OBEX File Transfer
    Service RecHandle: 0x10007
    Service Class ID List:
      "OBEX File Transfer" (0x1106)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 10
      "OBEX" (0x0008)
    Profile Descriptor List:
      "OBEX File Transfer" (0x1106)
        Version: 0x0100

    扫描蓝牙设备:

    $ hcitool scan
    Scanning ...
        C4:17:FE:F6:65:FF    PC-201209031236
        CC:52:AF:4F:52:16    HR-6F1397D64651
        18:DC:56:D2:1C:1A    Coolpad 8297

    使用hcitool获取手机蓝牙信息:

    $ hcitool name 18:DC:56:D2:1C:1A
    Coolpad 8297
    $ sudo hcitool info 18:DC:56:D2:1C:1A
    Requesting information ...
        BD Address:  18:DC:56:D2:1C:1A
        Device Name: Coolpad 8297
        LMP Version: 4.0 (0x6) LMP Subversion: 0x0
        Manufacturer: MediaTek, Inc. (70)
        Features page 0: 0xbf 0x3e 0x8d 0xfe 0xdb 0xff 0x5b 0x87
            <3-slot packets> <5-slot packets> <encryption> <slot offset> 
            <timing accuracy> <role switch> <sniff mode> <RSSI> 
            <channel quality> <SCO link> <HV2 packets> <HV3 packets> 
            <CVSD> <power control> <transparent SCO> <broadcast encrypt> 
            <EDR ACL 2 Mbps> <EDR ACL 3 Mbps> <enhanced iscan> 
            <interlaced iscan> <interlaced pscan> <inquiry with RSSI> 
            <extended SCO> <EV4 packets> <EV5 packets> <AFH cap. slave> 
            <AFH class. slave> <LE support> <3-slot EDR ACL> 
            <5-slot EDR ACL> <sniff subrating> <pause encryption> 
            <AFH cap. master> <AFH class. master> <EDR eSCO 2 Mbps> 
            <EDR eSCO 3 Mbps> <3-slot EDR eSCO> <extended inquiry> 
            <LE and BR/EDR> <simple pairing> <encapsulated PDU> 
            <non-flush flag> <LSTO> <inquiry TX power> <EPC> 
            <extended features> 
        Features page 1: 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        Features page 2: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    配置蓝牙适配器使得能被其他设备搜索到:

    $ sudo hciconfig hci0 iscan

    这时在手机中搜索蓝牙设备可以搜索到"debian-0",但是使用手机配对时提示“PIN或者配对密钥不正确,无法和debian-0进行配对"。

    在执行下面几条命令:

    $ sudo hciconfig hci0 pscan
    $ sudo hciconfig hci0 noencrypt
    $ sudo hciconfig hci0 noauth

    然后在手机里可以对"debian-0"配对即可配对成功。

    此时可以在pc上执行l2ping命令 :

    host@debian:~$ sudo l2ping  -c 3 18:DC:56:D2:1C:1A
    [sudo] password for host: 
    Ping: 18:DC:56:D2:1C:1A from 00:1A:7D:DA:71:13 (data size 44) ...
    44 bytes from 18:DC:56:D2:1C:1A id 0 time 15.00ms
    44 bytes from 18:DC:56:D2:1C:1A id 1 time 26.16ms
    44 bytes from 18:DC:56:D2:1C:1A id 2 time 26.14ms
    3 sent, 3 received, 0% loss

    如果不使用上面的hciconfig命令来进行配置,也可以使用blueman或者gnome-bluetooth来配置蓝牙,安装这些工具:

    sudo apt-get install blueman gnome-bluetooth

    这两个工具都是图形化界面,使用起来相当方便,只是需要从手机端发起配对请求,然后在pc端和手机端分别进行确认即完成配对。

    然后可以在pc端用蓝牙来向手机发送文件。

    上面这两种情况下都是在手机端发起配对请求,之后也只是能通过蓝牙发文件。

    但我希望能够使用bluez系列工具中提供的命令行工具从pc端发起配对请求,以便于以后将蓝牙适配器用到嵌入式开发板上。

    参考《在linux下蓝牙使用rfcomm连接》 、《BluetoothUser》以及《Bluetooth_Mouse》进行操作,但都没成功,

    这是因为我使用的bluez版本是4.99,没有bluez5中的bluetoothctl工具,也没有bluez4中的hidd工具,也没有常用的bluez3中的/etc/bluetooth/hcid.conf配置文件,

    进行配对时总是会因为pin或者key的问题而导致配对失败,导致网络上大部分教程都不适用于这个版本。

    最终我选用了另一种方式,先从手机来对蓝牙设备进行配对,然后将其模式修改成master,再从pc下执行命令就可以了。

    首先配置rfcomm,修改/etc/bluetooth/rfcomm.conf(其实我不确定是否需要该配置,只是在参考网络文章时修改了这个配置文件):

    host@debian:~$ cat /etc/bluetooth/rfcomm.conf 
    #
    # RFCOMM configuration file.
    #
    
    rfcomm0 {
        # Automatically bind the device at startup
        bind no;
    
        # Bluetooth address of the device
        device 18:DC:56:D2:1C:1A;
    
        # RFCOMM channel for the connection
        channel    1;
    
        # Description of the connection
        comment "Example Bluetooth device";
    }

    重启蓝牙服务:

    sudo /etc/init.d/bluetooth restart

    可以使用hcidump(类似于tcpdump工具能够打印bluez中每步都执行了什么功能,可以用于调试):

    sudo hcidump -Xt

    按照前面的步骤从手机来对蓝牙适配器进行配对,可以配对成功。

    查看hci0(类似于网卡的eth0接口)的连接模式(link mode,可以是master或者slave):

    $ sudo hciconfig hci0 lm
    hci0:    Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
        Link mode: SLAVE ACCEPT 

    将其连接模式从SLAVE修改为master:

    sudo hciconfig hci0 lm master

    这时查看连接模式:

    $ sudo hciconfig hci0 lm
    [sudo] password for host: 
    hci0:    Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
        Link mode: MASTER 

    已经将link mode修改为master模式。

    使用rfcomm来连接手机蓝牙设备:

    $ sudo rfcomm connect hci0 18:DC:56:D2:1C:1A
    Connected /dev/rfcomm0 to 18:DC:56:D2:1C:1A on channel 1
    Press CTRL-C for hangup

    连接成功,查看连接信息:

    $ sudo hcitool  con
    Connections:
        < ACL 18:DC:56:D2:1C:1A handle 72 state 1 lm MASTER AUTH ENCRYPT 

    可以执行hcitool中的cmd命令,例如下面的命令将当前设备的名称改成"ABCD":

    $ sudo hcitool cmd 0x03 0x0013 0x41 0x42 0x43 0x44
    < HCI Command: ogf 0x03, ocf 0x0013, plen 4
      41 42 43 44 
    > HCI Event: 0x0e plen 4
      01 13 0C 00 

    此时在hcidump对应窗口显示下面的信息:

    2014-06-18 15:04:22.929405 < HCI Command: Write Local Name (0x03|0x0013) plen 4
        name 'ABCDBCD'
    2014-06-18 15:04:22.930381 > HCI Event: Command Complete (0x0e) plen 4
        Write Local Name (0x03|0x0013) ncmd 1
        status 0x00
    2014-06-18 15:04:22.930474 < HCI Command: Read Local Name (0x03|0x0014) plen 0
    2014-06-18 15:04:22.947378 > HCI Event: Command Complete (0x0e) plen 252
        Read Local Name (0x03|0x0014) ncmd 1
        status 0x00 name 'ABCD'

    使用hciconfig工具也可以查看到当前蓝牙适配器名称:

    $ sudo hciconfig hci0 name
    hci0:    Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
        Name: 'ABCD'

    可以看到蓝牙适配器的名称已经被改成ABCD了。

    还有其他很多命令都可以用hcitool hci0 cmd来进行配置,《利用 hcitool 通过hci 命令与芯片交互》中提供了其他的一些命令,感兴趣的话可以自己玩玩看。

    也可以下载《蓝牙4.0规范》,从704-1103页有关于蓝牙命令的详细说明。

  • 相关阅读:
    分享几个个人觉得挺漂亮的导航 Jquery
    C#程序打成 一键安装包InstallShield
    腾讯显IP的API
    C#综合揭秘——细说事务
    2012最新JQuery插件
    Flex各种用法及使用技巧一
    win7管理员账户的启用方法
    禁用win7休眠
    win7下移动文件夹
    win7下转移搜狗文件临时文件夹和IE临时文件夹的方法
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3792836.html
Copyright © 2011-2022 走看看