NXP

嵌入式linux下实现蓝牙bluetooth实现个人局域网PAN

2019-07-12 12:45发布

Bluetooth 个人区域网 (PAN) 是一种技术,可让您在移动计算机、移动电话以及手持设备之间创建使用无线链接的以太网网络。可以连接到以下类型的启用 Bluetooth 且使用 PAN 的设备:个人区域网用户 (PANU) 设备、小组临时网络 (GN) 设备或网络访问点 (NAP) 设备。 以下是有关每种设备功能的详细信息:
  • PANU 设备。 连接到启用 Bluetooth 的 PANU 设备会创建包括计算机与该设备的临时网络。
  • GN 设备。 连接到启用 Bluetooth 的 GN 设备会创建一个临时网络,该网络包括计算机、GN 设备以及其他任何连接到相同 GN 设备的 PANU 设备。
  • NAP 设备。 连接到启用 Bluetooth 的 NAP 设备可让您将计算机连接到更大的网络,如家庭网络、公司网络或 Internet。 注意
    • 有些移动电话和个人数字助理 (PDA) 只使用拨号网络,有些设备只使用 PAN,而有些设备则同时使用这两种服务。若要找到启用 Bluetooth 的设备使用何种服务,请查看与该设备一起提供的信息。 最近公司要在网络测试设备A上实现蓝牙个人局域网PAN。也就是通过pc机上接个usb的蓝牙,连接到A设备上后要求pc机能和A在一个网络里,所有在测试时,如果能够ping基本就没问题了。 下面是A设备上的蓝牙配置: /etc/bluetooth>ls -R .: hcid.conf pan pin rfcomm.conf ./pan: dev-up udhcpd.conf /etc/bluetooth>
      上面是目录结构。 由于之前已经支持蓝牙功能,我只是在该目录下添加了别人给的pan目录,下面依次把每个文件的内容贴出来, 首先是hcid.conf文件内容: # # HCI daemon configuration file. # # HCId options options { # Automatically initialize new devices autoinit no; # Security Manager mode # none - Security manager disabled # auto - Use local PIN for incoming connections # user - Always ask user for a PIN # security auto; # Pairing mode # none - Pairing disabled # multi - Allow pairing with already paired devices # once - Pair once and deny successive attempts pairing multi; # PIN helper         pin_helper /usr/local/sbin/btpin_helper.sh;                                                                                                                       # D-Bus PIN helper                                                               #dbus_pin_helper;                                                        }                                                                                                                                                                 # Default settings for HCI devices                                               device {                                                                                 # Local device name                                                              #   %d - device id                                                               #   %h - host name                                                               name "BlueZ (%d)";                                                                                                                                                # Local device class                                                             class 0x3e0100;                                                                                                                                                   # Default packet type                                                            #pkt_type DH1,DM1,HV1;                                                                                                                                            # Inquiry and Page scan                                                          iscan enable; pscan enable;                                                                                                                                       # Default link mode              #   none   - no specific policy                                                  #   accept - always accept incoming connections                                  #   master - become master on incoming connections,                              #            deny role switch on outgoing connections                            lm accept;                                                                                                                                                        # Default link policy                                                            #   none    - no specific policy                                                 #   rswitch - allow role switch                                                  #   hold    - allow hold mode                                                    #   sniff   - allow sniff mode                                                   #   park    - allow park mode                                                    lp rswitch,hold,sniff,park;                                                                                                                                       # Authentication and Encryption (Security Mode 3)                                auth enable;                                                                     encrypt enable;                                                          }      
      下面是pin文件里的内容: 789 下面是rfcomm.conf文件内容: # RFCOMM configuration file. # rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 1; # Description of the connection comment "Example Bluetooth device"; } ~下面是dev-up文件内容: #!/bin/sh ifconfig $1 10.0.10.1 udhcpd /etc/bluetooth/pan/udhcpd.conf下面是udhcpd.conf文件内容: start 10.0.10.2 #default: 192.168.0.20 end 10.0.10.100 #default: 192.168.0.254interface       bnep0           #default: eth0 opt     dns     10.0.10.1 192.168.48.10                                          option  subnet  255.255.255.0                                                    opt     router  10.0.10.1                                                        opt     wins    10.0.10.10                                                       option  dns     129.219.13.81   # appened to above DNS servers for a total of 3  option  domain  local                                                            option  lease   864000          # 10 days of seconds   当pc机连接上A设备是,A设备会增加一个虚拟网卡bnep0。 根据ubuntu10.04版本下/etc/bluetooth/network.conf文件的介绍: [General] # Disable link encryption: default=false #DisableSecurity=true [PANU Role] # Network interface name for PANU for connections. default:bnep%d # (up to 16 characters) #Interface= # PAN user connection interface up script. default:none Script=avahi-autoipd [GN Role] # Network Interface name for Group Network server. default:pan0 #Interface= # Group Network connection interface up script. default:none Script=avahi-autoipd [NAP Role] # Network Interface name for Network Access Point server. default:pan1 #Interface= # Network Access Point connection interface up script. default:none Script=dhclient
      这里使用到的角 {MOD}应该是 PANU Role。不过我也管不了那么多了,反正pc和A设备在一个网络,ping通也没问题就可以了。
    linux下比较有名的蓝牙开发库BlueZ,安装如下: sudo apt-get install libbluetooth-dev  主要有下几个文件: bluetooth.h  bnep.h  cmtp.h  hci.h  hci_lib.h  hidp.h  l2cap.h  rfcomm.h  sco.h  sdp.h  sdp_lib.h
    编译时加入 -lbluetooth  下面的地址有些使用例子: http://bbs.chinaunix.net/thread-2013602-1-1.html