zoukankan      html  css  js  c++  java
  • arm linux串口蓝牙工具移植及使用【转】

    本文转载自:http://blog.csdn.net/hclydao/article/details/51451725

    p6212中串口蓝牙在linux下的使用记录

    一、linux蓝牙工具移植

    主要使用到的工具及相关库如下:

        bluez-libs-3.36

        libxml2-2.7.4

        dbus-1.0.2

        glib-2.24.2

        bluez-utils-3.36

        openobex-1.5

    下载相应的源码解压,按照上面的顺序进行编译.

        bluez-libs-3.36中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    修改mk.sh权限直接运行,完成编译与安装,下同

    libxml2-2.7.4中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    dbus-1.0.2中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo ac_cv_have_abstract_sockets=yes>arm-linux.cache  
    3. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --cache-file=arm-linux.cache --with-x=no  
    4. make   
    5. make install  

    glib-2.24.2中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo ac_cv_type_long_long=yes>arm-linux.cache  
    3. echo glib_cv_stack_grows=no>>arm-linux.cache  
    4. echo glib_cv_uscore=no>>arm-linux.cache  
    5. echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache  
    6. echo ac_cv_func_posix_getgrgid_r=yes>>arm-linux.cache  
    7. #echo gt_cv_have_gettext=no>>arm-linux.cache  
    8. export NM=nm  
    9. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --cache-file=arm-linux.cache  
    10. make   
    11. make install  

    bluez-utils-3.36中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --enable-test  
    3. make   
    4. make install  

    openobex-1.5中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --enable-apps --enable-bluetooth CFLAGS=-I/usr/bluez/include LDFLAGS=-L/usr/bluez/lib CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    同时需要修改configure文件11311行将

    [java] view plain copy
     
    1. #  { (exit 1); exit 1; }; }  
    2. { (echo 1); echo 1; }; }  

    将上面的exit 1这一行注释增加下面echo 1这行,忽悠掉这个错误

    所有文件都会安装在/usr/bluez目录下。拷贝/usr/bluez目录下所有文件到目标板/usr目录下

    对于我使用的这个模块wifi和bt是一起的,在android下能正常使用,在linux下bt要正常识别还需要另一个工具brcm_patchram_plus最后我会给下载地址,同时还需要固件文件bcm43438a0.hcd这个可以直接从android文件系统下拷贝过来.

    二、使用说明
    加载完ap6212模块驱动后,因为这个有电源控制,所以首先要给bt上电,执行rfkill list查看bt对应的控制节点,如下图

    可以看到bt对应的是0节点

    在/usr/sbin下新建一个脚本命名为btstart内容如下:

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo 1 > /sys/class/rfkill/rfkill0/state  
    3. brcm_patchram_plus --patchram /etc/firmware/bcm43438a0.hcd --baudrate 3000000 --enable_lpm --enable_hci --no2bytes /dev/ttyAMA1 &  

    echo 1 >xxxx是给bt上电

    后面这个是加载固件,这里我的bt接的是串口1对应的串口设备节点是/dev/ttyAMA1,波特率设置为3M

    保存这个脚本,修改权限后执行

    等待几秒会出现Done setting line discpline说明设置已经完成,此时就可以查看到bt设备了,执行hciconfig -a

    正常识别到后,接着就来看怎么使用.

    首先需要开启dbus守护进程,hcid需要这个

    前面已经将安装到的/usr/bluez下的文件全部拷贝到了目标板的/usr目录下,此时在目标板会有/usr/etc/dbus-1/system.conf文件

    修改system.conf文件第18行

    [java] view plain copy
     
    1. <!-- Run as special user -->  
    2. <user>messagebus</user>  

    将messagebus改为root或者已经存在的用户名.

    然后修改/usrc/etc/bluetooth/hcid.conf

    [java] view plain copy
     
    1. #  
    2. # HCI daemon configuration file.  
    3. #  
    4.   
    5. # HCId options  
    6. options {  
    7.     # Automatically initialize new devices  
    8.     autoinit yes;  
    9.   
    10.     # Security Manager mode  
    11.     #   none - Security manager disabled  
    12.     #   auto - Use local PIN for incoming connections  
    13.     #   user - Always ask user for a PIN  
    14.     #  
    15.     security user;  
    16.   
    17.     # Pairing mode  
    18.     #   none  - Pairing disabled  
    19.     #   multi - Allow pairing with already paired devices  
    20.     #   once  - Pair once and deny successive attempts  
    21.     pairing multi;  
    22.   
    23.     # Default PIN code for incoming connections  
    24.     passkey "BlueZ";  
    25. }  
    26.   
    27. # Default settings for HCI devices  
    28. device {  
    29.     # Local device name  
    30.     #   %d - device id  
    31.     #   %h - host name  
    32.     name "BlueZ (%d)";  
    33.   
    34.     # Local device class  
    35.     class 0x000100;  
    36.   
    37.     # Default packet type  
    38.     #pkt_type DH1,DM1,HV1;  
    39.   
    40.     # Inquiry and Page scan  
    41.     iscan enable; pscan enable;  
    42.   
    43.     # Default link mode  
    44.     #   none   - no specific policy   
    45.     #   accept - always accept incoming connections  
    46.     #   master - become master on incoming connections,  
    47.     #            deny role switch on outgoing connections  
    48.     lm accept;  
    49.   
    50.     # Default link policy  
    51.     #   none    - no specific policy  
    52.     #   rswitch - allow role switch  
    53.     #   hold    - allow hold mode  
    54.     #   sniff   - allow sniff mode  
    55.     #   park    - allow park mode  
    56.     lp rswitch,hold,sniff,park;  
    57. }  

    将security后的user改为auto 将passkey后的"BlueZ"改为"0000"改成简单点的

    其中name "BlueZ (%d)";后的"BlueZ (%d)"将会成为其它设备识别到本设备时的bt的名字

    passkey为其它设备主动发起配对时需要的密码,security设置为auto后,其它设备输入密码正常,就会自动与本设备进行配对,并显示配对成功.如果本设备主动发起配对,此时密码就不是这里设置的这个密码了.

    修改完成后,还需要做一些链接,新建btup脚本,内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. hciconfig hci0 up  
    3. hciconfig hci0 iscan  
    4.   
    5. if [ ! -d /usr/bluez/etc/dbus-1 ]; then  
    6.     if [ ! -d /usr/bluez/etc ]; then  
    7.         mkdir -p /usr/bluez/etc  
    8.     fi  
    9.     ln -s /usr/etc/dbus-1 /usr/bluez/etc/dbus-1  
    10. fi  
    11.   
    12. #for dbus  
    13. if [ ! -d /usr/bluez/var/run/dbus ]; then  
    14.     if [ ! -d /var/run/dbus ]; then  
    15.         mkdir -p /var/run/dbus  
    16.     fi  
    17.   
    18.     if [ ! -d /usr/bluez/var/run ]; then  
    19.         mkdir -p /usr/bluez/var/run  
    20.     fi  
    21.   
    22.     ln -s /var/run/dbus /usr/bluez/var/run/dbus  
    23. fi  
    24.   
    25. if [ ! -d /usr/bluez/lib/bluetooth/plugins ]; then  
    26.     if [ ! -d /usr/bluez/lib/bluetooth ]; then  
    27.         mkdir -p /usr/bluez/lib/bluetooth  
    28.     fi  
    29.     ln -s /usr/lib/bluetooth/plugins /usr/bluez/lib/bluetooth/plugins  
    30. fi  
    31.   
    32. dbus-daemon --system  
    33. hcid -f /usr/etc/bluetooth/hcid.conf -n -d &  

    上面的这些链接的创建是为了下面这两条命令能正常执行,也可以先不创建先一条一条命令执行后面会报错,然后根据错误来创建链接.

    最后一条命令

    hcid -f /usr/etc/bluetooth/hcid.conf -n -d &

    中的-n -d可以去掉,这里方便调试我才加上

    执行btup脚本,此时会有很多打印信息输出如下图:

    此时打开手机蓝牙进行扫描,就可以看到我们的设备了,如下图

    点击我们的设备进行配对,输入前面我们设置好的密码0000就可以配对成功,如下图:

    此时我们在本设备端进行扫描如下图:

    以下把我移植的设备称为我的设备,其它带蓝牙的设备称为其它设备

    我们需要通过其它设备的OBEX Object Push信道才能正常向其它设备发送文件

    我们通过sdptool查看其它设备的具体信息如下图是查看的123(68:DF:DD:49:87:AF)设备的具体信息:

    或者可以使用sdptool search OPUSH查找周围设备的具有OPUSH功能的设备

    可以看到设备123(68:DF:DD:49:87:AF)中OBEX Object Push功能所在通道是4

    此时我们可以通过这个通道给123设备发送文件,执行如下命令

    接着输入c进行连接

    这里会超时,不用管,然后输入p 1.png 1.png

    这里p后面第一个参数1.png是我的设备上已经存在的在根目录下的1.png文件后面的1.png是以什么名字发送给其它设备,输入后回车,123设备上就会有相关提示

    选择接收后,我的设备会输出很多信息,如下图

    传送完成后,就可以在123设备上查看文件内容了

    上面是发送,接下来是接收, 输入q退出刚才的obex_test命令

    执行sdptool brower local查看我的设备bt下的OBEX Object Push所对应的通道

    默认情况是没有这个功能的,增加这OPUSH功能

    在执行sdptool brower local查看,此时就会出现这个功能

    对应的是通道9

    通过查看local可以看到对应的地址是FF:FF:FF:00:00:00

    这里我们执行如下

    然后输入s,输入s后,马上在123设备端,通过bt给我的设备发送文件

    如果能正常接收调试信息输出如下:

    接收完成后会保存在根目录下.

    ============================================
    作者:hclydao
    http://blog.csdn.net/hclydao
    版权没有,但是转载请保留此段声明

    ============================================

  • 相关阅读:
    解释器模式
    享元模式
    中介者模式
    职责链模式
    命令模式
    桥接模式
    Java迭代器Iterator
    [Swift]LeetCode1247. 交换字符使得字符串相同 | Minimum Swaps to Make Strings Equal
    [Swift]LeetCode1248. 统计「优美子数组」| Count Number of Nice Subarrays
    [Swift]LeetCode1239. 串联字符串的最大长度 | Maximum Length of a Concatenated String with Unique Characters
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7605201.html
Copyright © 2011-2022 走看看