1.蓝牙
OSI 模型 蓝牙栈
应用层 profile
表示层 RFcomm/bnep/sdp
会话层 L2CAP L2CAP logical link control and adapation protocol
传输层 主机控制接口(HCI)硬件读、写数据的协议
网络层 链接管理器
数据链路层 链接控制器
物理层 无线
操作系统从支持HCI开始
下面三层是蓝牙硬件部分
连接蓝牙硬件和微控制器之间常用UART
bluez蓝牙功能是传统内核一部分 ,linux蓝牙协议栈
用户空间
/dev/rfcommx
pppx
bnepx
内核空间
hido.ko(hid)
bnep.ko kbneepd(网络封装层)
rfcomm.ko krfcommd(串行模拟层)
bluettooth.ko(核心,sysfs,套接字)
i2cap.ko
hci_uart.ko
hci_usb,ko
sco.ko(音频)
hci_vhci.ko(虚拟HCI)
蓝牙套接字
目的
发现其他蓝牙设备,并通过蓝牙读写数据。
在通过蓝牙建立通信频道中有两个角色:发起方和接受方。接受方进行配置后等待发起方建立连接。一旦连接建立,两方是对等的,都可以发送或接受数据。这个API可以在两方进行编程。
结构关系
蓝牙套接字API支持在L2CAP和RFCOMM层上的通信。API基于客户端套接字API,客户端套接字API是允许客户端和远程设备连接或者让远程设备连接自身,并在断开前发送和接收数据标准API。蓝牙套接字API中还为蓝牙的应用加入了适当的类型和常量
描述
API有五个关键的概念:套接字地址,远程设备询问,RFCOMM命令和选项,L2CAP命令和HCI命令
套接字地址
每个蓝牙设备都有一个唯一的48位地址,封装在TBTDevAddr。
套接字API通过TSockAddr封装了一个泛化的通信终点,而蓝牙则提供了一个专门的版本TBTSockAddr,里面添加了蓝牙设备地址。
远程设备质询
客户端能通过RHostResolver询问远程设备是否可用。一个TinquirySockAddr类型的参数用来提供这样地询问:主要是用来限制对设备细节类的发现。
命令和选项
我们能够通过调用RSocket::Ioctl()发送命令到一个RFCOMM套接字。套接字的选项则能够分别通过Rsocket::GetOpt()和Rsocket::SetOpt()来设置。
通过Rsocket::Ioctl(),我们能发送命令到L2CAP套接字和HCI层。
MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。[1]
MAC地址是网卡决定的,是固定的。
MAC(Media Access Control,
介质访问控制)地址,也叫硬件地址,长度是48比特(6
字节),由16进制的数字组成,分为前24位和后24位:
MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。
bluetooth.ko 负责蓝牙套接字系列AF_bluetooth导出到用户空间,负责生成相关的SYSFS入口。
i2cap.ko 完成L2CAP适配层,负责分段和重组
bnep.ko 在蓝牙上运行TCP/IP应用程序,必须通过BNEP的L2CAP模拟以太网端口
hci.uart.ko /hci,usb.ko HCI 包
rfcomm.ko 在蓝牙上运行串口应用程序 。
SCO;synchronous oriented 面向同步连接层 处理音频
设备实例 CF卡
卡与内核之间的第一个连接点是UART驱动程序
drivers/serial/serial_cs.c
配药机
RFCOMM在蓝牙上模拟串行端口
在蓝牙上有两种不同的建网方法:
1.直接在BNEP上运行TCP/IP ,称为PAN(personal area network)
2. 在RFCOMM上的PPP上运行TCP/IP,称为DUN(dialup networkiong ,拨号网)
drivers/bluetooth
红外
点对点数据通信,通信方式两种
1.SIR: standard IR 标准IR
支持115.20Kbaud;
FIR (fast IR) 支持4Mbit的传输带宽
IRDA: infrared data association 红外数据协会
http://irda.sourceforg.net
dongle是能插到串行端口或USB端口的IR设备,具有连接到UART的片上IR控制器.
IRcomm 能模拟串行模拟端口
dongle驱动程序是一套负责改变通信速率等操作。有四个入口点】
open()
reset()
change_speed()
close()
IRDA 底层驱动程序
drivers/net/irda
协议
net/irda
头文件
include/net/irda
数据结构
dongle_driver
drivers/net/irda/sir_dev.h
dongle驱动程序入口点
sie_dev
drivers/net/irda/sir_dev.
标示一SIR设备
内核编程接口
irda_register_dongle()
drivers/net/irda/sir_dongle.c 注册dongle驱动程序
irda_unregister_dongle()
drivers/net/irda/sir_dongle.c 注销dongle驱动程序
sirdev_raw_write() drivers/net/irda/sir_dev.c 向连接到IR设备上的的串行端口上写数据
sirdev_raw_read() drivers/net/irda/sir_dev.c 连接到IR设备上的的串行端口上读数据
WIFI
wireless local area network 无线局域网
IEEE802.11a 5GHZ ISM
IEEE802.11b/g 2.4GHZ
wlan 类似有限以太网,他们都是同一个地址分配MAC地址,都作为网络接口出现在操作系统中
WLAO MAC包含在ARP地址解析协议
802.11 WLAN标准采用了冲突避免机制(CSM/CA) ,以太网采用冲突检测机制。
WLAN帧需要确认(ACK)
WEP(wire equivalent privacy)有线等效加密40bit
支持两种通信模式
1.Ad_hoc模式,一组相邻站无需通过接入点可以直接互相通信
2.基础设施模式:数据交互需要经过一个接入点进行。接入点周期性低广播SSID (service set identifer 服务标识)将不同WLAN区别开
无线扩展项目(wireless extensions) 定义了通用Linux API与WLAN驱动程序通信方式1.标准工具iwconfig
2.特殊操作iwpriv
3.wifi专用统计用proc/net/wireless
CDMApl2303驱动程序在检测到的USB-串行端口转换器上生成了一个串行接口/dev/ttyUSB0
usb核心将设备与PL2303驱动程序绑定。