蓝牙驱动浅析

本文解析了Android 2.3版本中使用高通芯片和Linux 2.6.35.7内核的蓝牙驱动实现细节。从GPIO初始化、uart配置到hci核心层,详细介绍了蓝牙数据收发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bluetooth driver in Android2.3

使用高通芯片,linux2.6.35.7

board-vital2.c初始化蓝牙GPIO,bt_gpio_table中配置GPIO。设置了UART1的RTS,CTS,TX,RX引脚和蓝牙模块的RESET,SHUTDOWN,WAKE,HOST_WAKE引脚,bcm_bt_lpm_device变量将被注册到platform_device,设置WAKE,HOST_WAKE两个引脚的触发函数。
bcm_bt_lpm.c动态设置GPIO,实现broadcom
android/external/bluetooth/bluez/tools目录实现了bluez上下层通讯的模块
bccmd----Utility for the CSR BCCMD interface。bccmd.c中有很多command,一部分命令式对PSKEY的管理。transport_write通过串口发送命令给蓝牙模
    块。transport_read通过串口读取蓝牙模块参数。transport_open/transport_close函数控制设备的开关/dev/ttyS*
hciattach.c---HCI UART driver initialization utility。初始化UART1,然后不断poll。初始化uart1时,调用TIOCSETD,设置N_HCI的line discipline    到hci_ldisc。之后调用HCIUARTSETFLAGS,设置Uart的流控方式。之后调用HCIUARTSETPROTO,进入hci_uart_set_proto(),设置HCI的ldisc到hci_uart。>    最后注册hci_uart到hci的devices,hci_dev_list,向tasklit中注册hci_cmd_task,hci_rx_task,hci_tx_task。最后向rfkill注册RFKILL_TYPE_BLUETOO    TH。
hci_ldisc.c向tty注册hci_uart设备。初始化h4和ibs。

hci_h4.c向hci_uart注册hci_h4。


ttydriver->uart->msm_serial->hci_ldisc->hci_h4->hci_core->l2cap

数据的接收流程:
1,uart口取得蓝牙模块的数据。代码中使用msm_serial.c/msm_serial_hs.c(DMA)/msm_serial_hs_lite.c。通过msm_startup()注册了msm_irq中断获取数据。然后通过handle_rx()向tty写数据。之后调>    用tty_flip_buffer_push()-->flush_to_ldisc()中的disc->ops->receive_buf()将数据发给ldisc。
2,uart口通过ldisc传数据给hci_uart。在hci_ldisc.c中调用hci_uart_tty_receive()函数。
3,hci_uart传给其上的hci_h4。hci_uart.c中通过hu->proto->recv()向hci_h4层发送数据。
4,hci_h4传给hci层。h4_recv()-->hci_recv_frame()调用tasklet_schedule(&hdev->rx_task),该rx_task对应hci_rx_task(),其中会分成socket,even    t,acl,sco四类数据分发。
5,hci层对四类数据进行处理,acl会传给l2cap层。
6,l2cap层再通过socket传给rfcomm层。


可参见http://blog.chinaunix.net/uid-741742-id-359310.html


3. 蓝牙驱动介绍............................................................................................................................................... 4 3.1 串口驱动介绍........................................................................................................................................ 5 3.2 初始化.................................................................................................................................................... 5 3.2.1 模块上电........................................................................................................................................ 5 3.2.2 PSKEY的设置................................................................................................................................. 6 3.3 HCIATTACH的工作原理.......................................................................................................................... 7 3.3.1 Hci_uar和bcsp层的加入................................................................................................................. 9 3.3.2 hci层的加入.................................................................................................................................. 10 3.3.3 hci_attach的内核处理.................................................................................................................. 11 4. 数据在驱动的传递流程.............................................................................................................................. 13 4.1 UART层的数据接收.............................................................................................................................. 13 4.2 HCI_UART的数据接收.......................................................................................................................... 14 4.3 BCSP层的处理...................................................................................................................................... 15 4.4 HCI层及以上的处理............................................................................................................................. 15 4.5 数据流程的总结.................................................................................................................................. 17 5. 扫描过程的分析......................................................................................................................................... 18 5.1 用户使用例子...................................................................................................................................... 18 5.2 用HCITOOL扫描时的逻辑..................................................................................................................... 18 5.2.1 上层逻辑...................................................................................................................................... 18 5.2.2 内核层逻辑.................................................................................................................................. 19 5.3 通过DBUS触发的逻辑.......................................................................................................................... 21 5.3.1 上层逻辑之adapter dbus方法的建立........................................................................................... 21 5.3.2 上层扫描方法的调用................................................................................................................... 22 5.3.3 Dbus触发的扫描对应于内核层的处理........................................................................................ 25 5.3.4 上层的扫描数据收集................................................................................................................... 26 5.3.5 Hci_send_frame的讨论................................................................................................................. 28 6. A2DP的使用过程........................................................................................................................................ 28 6.1 如何使用.............................................................................................................................................. 28 6.2 服务的激活.......................................................................................................................................... 29 6.3 设备的创建.......................................................................................................................................... 30 6.3.1............................................................................................................................................................. 33 6.3.2............................................................................................................................................................. 33 6.3.3............................................................................................................................................................. 33 6.3.4............................................................................................................................................................. 33 6.4 设备的连接.......................................................................................................................................... 33
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值