如何在linux的设备驱动程序级别实现蓝牙低功耗?
每个新的蓝牙版本都有新的蓝牙堆栈代码吗?
答案 0 :(得分:2)
Bluez是Linux蓝牙的堆栈。蓝牙的新版本导致了代码的变化,但它不是完全重写或类似的任何激烈。较新版本的蓝牙通常是现有协议的扩展,但低能耗除外。在Linux的内核级别完全支持Low Energy,但是没有很多便利库可以与LE进行更高级别的交互。
由于Bluez与LE的不完整性,我不得不直接与内核代码交互以实现LE的功能。此外,我不得不使用Bluez 5.x不支持的旧内核,并且必须使用Bluez 4.x。
答案 1 :(得分:1)
Tim和jhonnash已经为您的问题提供了全面的信息。但是,我想从Android Mobile的角度添加一个更多信息。
新版Android使用Bluedroid作为蓝牙堆栈。这与Bluez完全不同。
Bluez的功能分布在用户空间和内核空间中。 RFCOMM,HCI和L2CAP等所有协议都在内核级实现,而Profile则在用户空间实现。 Tim提到,为了支持低能耗,Bluez必须在内核级别和用户空间提供支持。这有时很难跟踪和理解。任何新的更改可能需要在内核和用户空间代码中进行修改。
另一方面,Bluedroid比Bluez有一些优势。 Bluedroid在用户领域实现了其完整的功能。因此,只需要在用户级代码中添加任何新功能。不依赖于内核代码。
另外,回答你的问题“每个新的蓝牙版本都有新的蓝牙堆栈代码吗?”蓝牙新版本不需要完全重写蓝牙版本向后兼容,因此只有那些代码部分被添加到现有的新堆栈中。
此致
答案 2 :(得分:0)
因为你的问题不完全清楚,这就是为什么我也试图提供所有可用的协议来访问linux的蓝牙低能量堆栈。
在UHID Driver“HoG(HAT over GATT / Bluetooth-Low-Energy):GATT是在用户空间实现的蓝牙协议。当用户空间打开LE(低能耗)蓝牙连接时设备,设备可以通过GATT宣传HID功能。“ 由于GATT服务已在此链接中正确定义。 可以有除GATT之外的其他协议来访问Low-energy devices。 HID Over GATT的实施是以这种方式完成的。