• android-bluetooth移植碰到的问题



    http://blog.csdn.net/andyhuabing/article/details/7543529


    前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下,备忘而已。

    1、内核增加配置
    make menuconfig -> Networking support -> Bluetooth subsystem support -->
    进行选择BT选项,至少选择如下几项:
    CONFIG_BT=y
    CONFIG_BT_RFCOMM=y
    #
    # Bluetooth device drivers
    #
    CONFIG_BT_HCIBTUSB=y
    ONFIG_BT_HCIBFUSB=y

    其它的根据平台特性增减

    此内核是否配置成功,可以在代码 systemluetoothluedroid下的bluetooth.c文件
    中加打印:
    init_rfkill() 函数
    如果没有配置ok的话则:
          snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id);
          fd = open(path, O_RDONLY);
          if (fd < 0) {
              LOGW("open(%s) failed: %s (%d) ", path, strerror(errno), errno);
              return -1;
          }
    会打开文件失败的。

    2、android系统配置
    build argetoardgeneric下面的generic.mk增加:
    BOARD_HAVE_BLUETOOTH := true

    这个是由于编译相关蓝牙代码时需要这个宏,请看:systemluetoothandroid.mk
    ifeq ($(BOARD_HAVE_BLUETOOTH),true)
      include $(all-subdir-makefiles)
    endif
    在 externalluetooth 也同样存在此宏起作用

    3、启动项修改 init.rc
    systemcore ootdir下init.rc文件增加:

    service hciattach /system/bin/hciattach -n -s 115200 /dev/ttyS2 bcm2035 115200
    user bluetooth
    group bluetooth net_bt_admin   
    disabled 
    oneshot

    请放在 service bluetoothd /system/bin/bluetoothd -n 类似这种语句的后面任意位置即可

    4、代码修改
    systemluetoothluedroid下的bluetooth.c文件

    这里由于在机顶盒上没有电源管理这块,所以对于power的操作代码需要屏蔽掉

    简单的方法就是注掉函数:set_bluetooth_power 及 check_bluetooth_power


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

    附加在linux平台上调试及开发详细步骤:

    1. 驱动配置与安装

       1.1 配置选项:

    [*] Networking support  --->                

    <M>   Bluetooth subsystem support  ---> //蓝牙子系统必须选择

    <M>   L2CAP protocol suppor        //逻辑链路控制和适配协议。

    <M>   SCO links support            //蓝牙语音和耳机支持

    <M>   RFCOMM protocol suppor       //面向流的传输协议,支持拨号网络等

    [*]   RFCOMM TTY support          

    <*>   BNEP protocol support       //蓝牙网络封装协议,自组网支持

    [*]   Multicast filter support     //蓝牙多播,支持支持BNEP

    [*]   Protocol filter support //蓝牙多播,支持支持支持BNEP

    <*>   HIDP protocol support        //基本支持协议

    Bluetooth device drivers  --->

    <*> HCI USB driver               //USB蓝牙模块支持

    <M>HCI UART driver               //基于串口,CF卡或PCMCIA的蓝牙

    <*> HCI BlueFRITZ! USB driver

    <*> HCI VHCI (Virtual HCI device) driver

           其余的选项,根据自己的蓝牙设备进行调整。

    !!!注意:将选项置于M,才可编译出ko

      1.2 安装与卸载: 

         命令:insmod,rmmod 

    !!!注意:驱动需顺序安装 hci.ko -> btusb.ko -> l2cap.ko ->rfcomm.ko -> sco.ko

    2. 配置文件

    2.1 将配置文件复制到相应的目录下。

    install目录下的文件复制到根文件系统下对应的目录。

    主要的库文件:libbluetooth.so,libdbus-1.so,libexpat.so,libglib-2.0.so,libusb.so

    2.2 需要开机启动dbus服务。

    /kmod/load 添加 . bluez_init 

    !!!注意“.”与”bluez_init”之间有空格。

    重启后,执行ps

    888 messageb  2928 S    dbus-daemon --config-file=/usr/share/bluetooth/etc/d

    889 root      3000 S    sh bluetoothd_server

    900 root      4364 S    bluetoothd –udev

    可以看到有这三个进程,表示dbus服务启动了。

    3. 耳机使用

    2.1 把耳机置于可搜索状态,(长按耳机开关键约10S左右,蓝色背景灯会闪三下后,处于长亮状态)

    2.2 连接成功后蓝色背景灯会变成闪烁状态。

    2.3耳机处于开机状态里,蓝色背景灯会不停的闪烁;若电量不足时,闪烁几下就会停止;长时间不用的话,也会停止闪烁,处于休眠状态,此时需要再次开机,才可使用。

    4. 测试命令:

    3.1设备状态 /system/xbin/

    命令:hciconfig 

    返回信息:

    hci0:   Type: BR/EDR  Bus: USB

            BD Address: 00:15:83:4D:F8:51  ACL MTU: 310:10  SCO MTU: 64:8

            DOWN 

            RX bytes:2410 acl:21 sco:0 events:119 errors:0

            TX bytes:1155 acl:21 sco:0 commands:39 errors:0

    说明:DOWN表示设备没有启动。添加-a选项查看更多信息。

    3.1.启动设备  

    命令:先执行hciconfig hci0 up,再执行hciconfig.

    返回信息:

    hci0:   Type: BR/EDR  Bus: USB

            BD Address: 00:15:83:4D:F8:51  ACL MTU: 310:10  SCO MTU: 64:8

            UP RUNNING PSCAN 

            RX bytes:3097 acl:21 sco:0 events:144 errors:0

            TX bytes:1749 acl:21 sco:0 commands:64 errors:0

    说明:UP RUNNING 表示设备已经启动,PSCAN表设备处于可见状态。

    3.2.扫描可用接入点  

    命令:hcitool scan

    返回信息:

    00:23:78:D9:0B:AB       BT2035

        00:1D:FD:2E:AB:C1       Nokia 3110c

    说明:00:23:78:D9:0B:AB即为蓝牙耳机地址,BT2035为设备名字。

    3.3.配对。  

    命令:agent -a hci0 0000 00:23:78:D9:0B:AB

    返回信息:

    Pincode request for device /org/bluez/897/hci0/dev_00_23_78_D9_0B_AB

    Agent has been released

    __io_canceled=0,__io_terminated=1

    说明:__io_canceled=0,__io_terminated=1表示配对成功。若失败则值为相反。

    __io_canceled=1,__io_terminated=0

    3.4.搜索服务。

    命令:sdptool browse 00:23:78:D9:0B:AB

    3.5.获取蓝牙适配器 dbus服务地址。

    命令:dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter

    返回信息:

    method return sender=:1.0 -> dest=:1.2 reply_serial=2

        object path "/org/bluez/872/hci0"

    说明:/org/bluez/872/hci0 是蓝牙适配器的路径。该路径并不是固定的。删除的时候会用到该路径。

    3.6.查询蓝牙适配器下已经完成配对的设备。

    命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.GetProperties

    返回信息:

    dict entry(

             string "Devices"

             variant             array [

                   object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"

                ]

          )

    说明:若有object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"该路径,表示蓝牙连接成功。

    3.7.配对删除命令: 

    命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.RemoveDevice objpath:/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB

    返回信息:

    method return sender=:1.0 -> dest=:1.4 reply_serial=2

    3.8.录音测试

    命令:arecord -d 10 -f cd -r 8000 -c 1 -t wav -D bluetooth /root/bluez_cap.wav或者 hstest record /root/bluez_cap.wav  00:23:78:D9:0B:AB 1

    3.9.ALSA放音测试 

    命令:aplay -D bluetooth -c 1 /root/bluez_cap.wav 或者 hstest play /root/bluez_cap.wav  00:23:78:D9:0B:AB 1

    arecordaplay两个命令的参数说明如下: 

      -D bluetooth:设备名,与单板“/root/.asoundrc”文件中的“pcm.bluetooth”对应。 

      -c 1:通道数,蓝牙耳机通常只支持单声道。 

      -d 10:录音时间为 10 秒。 

      -f cd:录音格式。 

      -r 8000:采样率。 

      -t wav:输出文件格式。 

      具体参数细节可通过“aplay h”或“arecord h”命令查询。



  • 相关阅读:
    Styles和Themes
    Activity返回值
    Android BaseAdapter 例子
    Android流量统计TrafficStats类的使用
    Javascript屏蔽IE和Firefox浏览器默认按键响应(快捷键功能)
    拍照技巧笔记
    android开发录音和播放录音的例子
    Eclipse快捷键大全(android开发)
    Android SQLite 添加、更新和删除行
    绑定Enum到ASP.NET数据绑定控件的完美解决方案[05/26修订]——增加支持第三方枚举描述,支持二进制与过的枚举值
  • 原文地址:https://www.cnblogs.com/ztguang/p/12645401.html
Copyright © 2020-2023  润新知