问题标签 [l2cap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
403 浏览

bluetooth-lowenergy - 无法从 ble 信标中获取温度读数 .. 我现在已经束手无策了。我猜这需要一个超级英雄

我有一项任务需要从 BLE 信标读取 2 个参数。文档严重缺乏,经过相当多的努力,我设法获得了一些关于从 BLE Beacon 读取数据的基本信息。

要读取的参数是
1) 传感器的电池电压
2) 温度 信标具有内置温度传感器。

我想我已经尝试了几乎所有流行的 Python BLE 库,但我似乎无法从信标中读取温度读数。“我认为”我能够读取电压。我之所以说“我认为”是因为该值似乎与最小文档中提供的值相匹配。而且当我将信标放入充电器时,我可以看到值上升 - 这表明它是电压读数。由于我无法读取温度(因为文档中提到的 UUID,该值似乎没有改变)。我已经尝试以所描述的所有可能的方式和方法启用传感器 - 通过写 01:00 等。我花了相当多的时间对这件事进行逆向工程。我运行了一个数据包嗅探器并设法捕获了在信标和移动应用程序之间传输的数据(他们有一个移动应用程序)。但话又说回来,我无法弄清楚信标和应用程序之间的温度读数是如何通信的。让我把整个东西分成更小的块。

硬件:可以读取电压和温度的 BLE 信标。温度传感器内置在信标中。信标本身来自德州仪器,但温度、电压感应部分由第三方完成。他们为我们提供了一些最少的信息,并且很难理解其中的一些句子,因为他们无法用英语交流。

获取数据的顺序是这样的

  1. 扫描信标
  2. 找到信标后,连接到它
  3. 启用通知
  4. 设置通知间隔
  5. 获取电压和温度读数。

我已经能够真正快速地完成前 4 个,并且是第 5 个的“一半”,即获得电压部分。当我说真正快速时,我的意思是我当时几乎没有可用的文档。

根据我拥有的信息,数据位于这些特征/UUID 中。另请注意,UUID 不是标准的 128 位,这导致我在使用某些库时出现问题。但是经过一些尝试后,我开始使用句柄等对它们进行读/写。我打印的句柄和其他东西是我使用PYGATT( gatttool的 Python 包装器)读取的。

UUID 被标记为第 1、第 2、第 3 和第 4 个参数,关于参数有以下说明

这是最小的,因此没有大文件。它所做的就是——移动应用程序连接到信标,然后通知开始,移动应用程序检索温带读数。就像我提到的那样,我似乎没有读取电压的问题,这只是我卡在的温度。我已经做了一个星期了。我想我已经尝试了几乎所有我能想到的东西。我什至列举了所有可写的特征,并尝试写出像 1 这样的数字(启用传感器?)。如果可能的话,我本可以立即为此提供赏金。我很少被一个问题困住这么久。这让我有点发疯。我快要崩溃了——我想是时候成为超级英雄了——有人在吗?:) 如果有人能指出问题所在,我可以提供所需的每一点信息。我什至写了一个科尔多瓦应用程序......并从我的安卓手机上尝试了很多东西。我可以连接...写入特性,读取东西等,但温度准备好了,不!!!它只是不会让步。我得到的只是相同的一组值(我使用 JSON.stringify 来显示 A、B 和 C)。我可以稍后再考虑字节顺序。我想这是一个较小的问题。

信标与第三方移动应用程序之间的通信很好,它能够很好地读取温度信息。

我一直在查看 Wireshark 数据,我相当确定在这个阶段正在传达温度数据。但是当我解码“值”时,它看起来像是电压。它提到了 l2cap,但我不确定如何在这里使用它来发送温度读数(如果它首先使用它)。

更新:写到每一个可写的特征。在每个可写特征上写入 1、0100、2、7 等值。同时,我正在读取每个可读特征(在循环中)并与前一组值进行比较(只是真/假)。这似乎是一种快速简便的方法来了解是否有变化。不想冒险将十六进制转换为浮点数。我可以稍后弄清楚字节顺序。

从嗅探的数据(wireshark)中,我只能看到信标上发生了 3 次写入。

0 投票
1 回答
198 浏览

bluetooth-lowenergy - 在 STM32L4 + BlueNRG 上使用 L2CAP

我是 BLE 新手,我对 L2CAP 协议感到困惑。我已经阅读了与 L2CAP 相关的蓝牙核心规范,并且我了解它提供了特别的分段和重传功能。我还在 STM32CubeL4 中找到了一些代码来实现 L2CAP 相关命令,如连接参数更新请求。

我不明白的是: - L2CAP 协议是否在 STMicro 提供的软件中完全实现?我没有找到驱动程序或 HAL 这样做。- 中央主机和外围主机如何启用 SAR 功能?

0 投票
2 回答
2579 浏览

ios - L2CAP 通道数据传输

我正在使用面向连接的通道开发 BLE 应用程序。我使用北欧半导体 nrf52 作为外围设备和 iPhone 6 作为中央管理器。

我使用了蓝牙 SIG 提供的预定义 PSM 值,即 0x0025。我能够连接到外围设备并成功打开 L2CAP 通道。

我收到以下错误:

**[CoreBluetooth] 警告:未知错误:436

2018-06-08 10:03:17.532709-0400 BluetoothTest[407:62057] [CoreBluetooth] **没有已知的通道匹配对等体与 psm 37****

请让我知道如何进行以及错误代码 436 的含义

下面是我的代码:

0 投票
1 回答
4151 浏览

linux - bluetooth connection fail with bluetoothctl command

I tried bluetooth connection test in the Ubuntu under Vmware environment. Ubuntu is 14.04 lts, Bluetooth is USB-dongle and BT stack is Bluez 5.35. I don't use pulseaudio.

I used bluetoothctl command to scan, pairing and connection. But the connection is fail. Below is the log of bluetoothctl

I found above bluez doesn't have a2dp profile. Actually, bluez5.x and pulseaudio is combined closely. If don't use pulseaudio, user has to add extra profile(a2dp, or hspag).

Below code is sample for add a2dpsink , a2dpsource and haspag.

After that, the bluez has a2dp, hspag profile without pulseaudio. I can check it with "show" command of the bluetoothctl.

The bluetooth connection still fail even though a2dp profile is added. Through btmon trace, the rfcomm connection is disconnected, and next, l2cap connection is also disconnected. I don't know what i'm missing. What do i need other to run bluez 5.35 without pulseaudio?

0 投票
0 回答
659 浏览

android - 是否可以使用蓝牙建立 L2CAP 套接字连接?

我有一系列蓝牙耳机,希望能够直接连接到他们的 AVRCP 配置文件。

主要的症结在于没有公开可访问的方法来构建 L2CAP 套接字。从理论上讲,下面的代码应该可以工作,但是我收到了 permssion denied 错误。
我的清单中有这些:

代码片段在这里:

它正在寻找构造函数,但抛出 IllegalAccessException。有没有人有幸说服 Android 蓝牙建立除 RFCOMM 之外的任何连接类型?和/或是否有可能取得更大成功的不同方法?

(PS:addln 只是向文本视图发送消息,所以我可以看到发生了什么)

0 投票
1 回答
241 浏览

bluetooth - 解释 AVRCP 数据包

经过一番折腾,我得到了一个 pybluez 脚本,可以连接到各种设备上的 AVRCP 配置文件,并阅读响应。

代码片段:

当我按下听筒上的按钮时,我得到的结果如下:

仔细阅读规范后,看起来我看到的是 PASSTHROUGH 命令,其中 44 是“PLAY”操作命令,而 46 是“PAUSE”(我认为)我不知道 10 11 0e 是什么意思,除了从第一个字节似乎是某种序列号这一事实来看。我的问题是三方面的:

  1. 我不知道在哪里可以找到有效 operation_id 的列表。它在规范中提到,但除了一些随机示例之外没有定义。
  2. 规范再次引用了子单元类型和 ID(在上例中为 48),但没有定义它们 AFAICT。
  3. 没有提到前三个字节是什么。它们甚至可能是 L2CAP 的一部分,与 AVRCP 没有直接关系,我对 pybluez 还不够熟悉。

在上述任何一点上的任何帮助都会有所帮助。编辑:作为参考,AVRCP 规范的详细信息似乎在这里:https ://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=119996

0 投票
1 回答
5672 浏览

android - 如何在 Android 中实例化 L2Cap 套接字?

我看到蓝牙套接字可以是 TYPE_L2CAP 类型,但蓝牙套接字的构造函数似乎是私有的,我只能找到一种方法来实例化 RFCOMM 类型的套接字。如何获取和使用 L2CAP 套接字?Android真的支持吗?

0 投票
0 回答
274 浏览

ios - iOS 上的多个 L2CAP 通道 (rdar://46227689)

我正在尝试在 iPhone 和在 MacOS 上运行的应用程序之间打开两个 L2CAP 通道。

MacOS 应用发布了两个频道:PSM=193PSM=194.

我在 iOS 应用上打开这些频道:

然后我得到成功的委托回调:

有趣的是输出......:

使用不同的通道实例但使用相同的 PSM 调用委托回调。在 MacOS 应用程序上,我确实收到了该频道194已打开的回调。但是,当我向通道写入一些数据时194,它实际上是发送到193我打开的第一个通道。我做错了什么还是CoreBluetooth错误?

0 投票
1 回答
66 浏览

ios - 设置 NSStreams 的正确方法?

我正在编写一个点对点蓝牙聊天应用程序。我目前正在做的是:

我目前面临self.channelCBL2CAPChannel 问题是它为每对通道生成新线程,最终有太多线程挂起。

在这种情况下设置CBL2CAPChannels 的正确方法是什么?Apple 的文档为此使用了主线程,这是出乎意料的,当有很多连接时可能会导致问题。

0 投票
1 回答
1224 浏览

ios - 如何通过 CBL2CAPChannel 发送和接收数据

我正在尝试在 2 个 iOS 设备之间打开 L2CAP 通道并双向传输数据。其中一个设备充当中心设备,另一个设备充当外围设备。

在外围方面:

我像这样发布 L2CAPChannel:

尝试了真假加密。

然后,一旦频道发布,我从 didPublishL2CAPChannel 委托方法中获取 PSM,并创建一个具有包含 PSM 作为其值的特征的服务,并开始宣传它。

在中央一侧:

我扫描外围设备,找到正确的外围设备,连接到它,开始发现服务,然后一旦发现服务,我就会发现特征。我找到了特征,读取了它的值并获得了 PSM。然后我这样做:

然后我在通道打开的委托方法中得到回调并执行以下操作:

这打印:

再次在外围方面:

我在委托方法中得到回调:

这打印:

到目前为止,似乎通道是双向打开的。我只是想知道上面印刷品中的信息是什么“......没有中央礼物!......”

过了一会儿,我开始在控制台中收到这样的消息:

我不知道这些是什么意思。有什么建议么?

我还在两边都实现了 StreamDelegate 方法:

但是上面的委托方法永远不会被调用。我尝试像这样写入输出流(从中心端的 didOpen 通道委托方法调用 tryToWrite):

结果是:

根据文档,这意味着写入失败。

请告诉我我错过了什么?打开通道后我得到的错误是什么?写入和读取数据的正确方法是什么?