Android蓝牙结构分析
《Android蓝牙结构分析》 Android系统的蓝牙功能是基于Linux内核的蓝牙协议栈构建的,其核心在于Linux蓝牙驱动代码,这部分代码主要集中在bluez框架内。本文将概述Android蓝牙结构,重点关注整体流程,以便对蓝牙工作原理有一个基本的理解。 蓝牙驱动的核心在于HCI(Host Controller Interface),它在主机端扮演着关键角色,为上层协议提供了一个独立于具体硬件实现的统一接口。HCI在硬件中通常由固件实现,与主机端的驱动通过UART、USB或PC Card等方式进行通信。在Linux内核中,`net/hci_core.c`是HCI的主要实现,它作为一个框架,整合了不同通信方式并提供了公共函数。 在`hci_core.c`中,有两个关键的任务:`hci_cmd_task`和`hci_rx_task`。前者负责从命令队列`cmd_q`中取出CMD(命令)并利用`hci_send_frame`发送;后者则从接收队列`rx_q`中取出数据,根据数据类型分发到相应的上层协议进行处理。数据包分为三种类型:HCI_EVENT_PKT用于处理通信事件,如连接建立、断开等;HCI_ACLDATA_PKT用于异步非连接的数据传输;HCI_SCODATA_PKT用于同步面向连接的数据传输。 HCI为上层提供的接口包括发送SCO、ACL数据包,发送命令,注册/注销协议以及设备,以及其他辅助功能。例如,`hci_send_sco`和`hci_send_acl`分别用于发送SCO和ACL数据包,而`hci_register_proto/hci_unregister_proto`用于管理上层协议。 `net/hci_conn.c`文件中包含了连接管理、认证和加密的相关函数,这些函数负责维护连接状态。`net/hci_event.c`则处理事件,通过状态机更新连接状态。`hci_si_event`和`hci_event_packet`分别用于发送和处理事件。 `net/hci_sock.c`为上层应用程序提供了一个socket接口,使得应用可以通过socket操作来访问HCI。例如,`hci_sock_init`注册了BTPROTO_HCI类型的family,而`hci_sock_sendmsg`和`hci_sock_recvmsg`分别处理发送和接收消息。 `net/hci_sysfs.c`实现了sysfs文件系统接口,允许用户通过文件系统操作蓝牙设备。而`net/l2cap.c`是L2CAP(Logical Link Control and Adaptation Protocol)的实现,L2CAP位于HCI之上,提供服务质量、分组处理等功能。L2CAP也通过bt_sock_register提供了sock接口,如`l2cap_sock_create`用于创建sock,`l2cap_sock_sendmsg`则通过HCI将消息传递给下层设备。 Android蓝牙结构涉及从硬件驱动到上层协议栈的多个层次,每个层次都有特定的职责,共同确保蓝牙连接的稳定性和效率。了解这个结构对于开发和调试蓝牙应用至关重要,也为后续深入研究蓝牙技术打下了基础。
剩余6页未读,继续阅读
- 平步青云p2013-11-13对kernel的了解,很有帮助,就是介绍还不够全,不够详细
- 梦无痕2013-03-21资料不好,不值得下载
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助