问题标签 [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 回答
338 浏览

python - 如何将基于 L2CAP 的蓝牙相机快门(AB 快门 3)连接到 Linux 并在 Python 中获取关键事件?

目标

我有一个HITSLAM 相机快门蓝牙按钮(这是一个 AB 快门 3 设备,一种常见的蓝牙相机遥控器),我想使用蓝牙连接到我的 NVIDIA Jetson Nano,这样我就可以使用按钮的输入来完成某些任务。

我做了什么

我正在使用 PyBluez 库进行连接。我使用以下内容找出 AB Shutter 3 使用的端口和协议(target_device_addressAB Shutter 3 的设备地址在哪里):

这就是我获取要连接的端口 (17) 和它使用的协议 (L2CAP) 的方式。

现在,我尝试使用以下方法连接到它:

我还使用了 Python 的本机socket库(产生了相同的结果):

它根据它成功连接hcitool,之后我等待用户输入:

问题

  • 该设备实际上并未显示为/dev/input/. 当我通过 GUI 手动连接它时,它显示为/dev/input/event5.
  • 连接后,我的脚本没有捕获任何输入。

我的问题

  • 它如何根据hcitool con尚未注册为输入设备(并注册任何输入)进行连接?
  • 你建议做什么?我到处寻找,似乎没有得到适当的解决方案。有一种解决方法可以实现一个bluetoothctl用于连接蓝牙遥控器的 bash 脚本,但对我来说,为什么 Python 无法建立此连接并检索信息是没有意义的。
0 投票
0 回答
140 浏览

windows - 在 Windows 上使用 BLE L2CAP CoC

我正在尝试使用 Windows PC 作为 Central 并将其连接到 Android 智能手机使用BluetoothAdapter#listenUsingL2capChannel()打开的 BLE L2CAP CoC 。在查看专门用于在 Windows 上使用蓝牙的 MSDN 文档后发现,我认为我必须实现类似于Bluetooth Echo L2CAP Client Profile Driver的内核模式驱动程序。但看起来用于打开 l2cap 通道的 BRB 并非旨在支持基于 LE Credit 的流控制模式(我假设这是配置 Android 打开的通道的模式)。这导致了一个结论,即不能在 Windows 上直接通过 BLE L2CAP 通道使用传输。

我期望的答案是对我的结论的确认或矛盾,并分享使用 BLE 在 Android 和 Windows 之间建立交互的经验。使用 GATT 是唯一的选择吗?

0 投票
0 回答
114 浏览

windows - 服务 GUID 与蓝牙中的服务器名称和服务类之间的区别

我一直在研究 windows wdf 示例中的蓝牙回声服务器示例。我想了解l2cap bt驱动程序的实现,但我还是有点困惑。

下面我列出了示例中的代码。

在这里,我们有一个 GUID 和一个由 bt 服务器开发者发布的服务的名称。如果客户端想要连接到服务器,它必须知道该信息。

以下是客户端连接到服务器的方式:

我的问题是:如果我有一部手机或平板电脑,并且可以使用 WSALookupServiceXXXX 从我的 bt 列表设备中选择它怎么办。如何仍然使用或连接到 l2cap 驱动程序?如果我是客户端,如何获取外部服务器设备的 GUID?反之,客户端如何知道服务器的 GUID 服务器?GUID 和服务类 ID(bt 配置文件)是两个不同的东西,不是吗?

最好的,

0 投票
0 回答
31 浏览

c++ - wdf windows 示例中的首选 PSM 是什么?

我一直在研究 WDF Windows 的回声位样本。

server.c 中有一个注册 PSM 的函数BthEchoSrvRegisterPSM

它看起来像这样:

我的问题是什么是“我们首选的 PSM”?PSM 不是定义为特定服务吗?如何为远程设备设置它?它从何而来?

0 投票
1 回答
253 浏览

bluetooth - Bluez L2CAP CoC 到基于 Android / iOS Credit 的流失败

我一直在尝试使用 createL2capChannel 或 createInsecureL2capChannel (和 iOS)从 Android 连接到已创建 BTPROTO_L2CAP SOCK_SEQPACKET 蓝牙套接字的树莓派,它正在接受,运行 Bluez 5.50 但他们在 LE Credit Based Flow 步骤失败.

使用 nRF BLE 嗅探器运行 WireShark 我看到它在基于 LE Credit 的连接响应中失败,不支持 LE_PSM:

我尝试了各种 PSM:0x1001、0xf3、0x25,没有任何区别。我还看到 BlueKitche BTStack 工作,所以我知道 iOS / Android 代码是可以的。

有谁知道如何实际配置 Bluez 以正确支持 Pi 上基于 LE L2Cap CoC 信用的流程?

0 投票
0 回答
27 浏览

bluetooth - L2CAP 回声垃圾邮件

我正在使用 Linux 和 Bluez 开发 BT Classic 应用程序,但我在连接逻辑方面遇到了一些困难。我使用监控工具 btmon,我看到的大部分流量是这样的:

每隔 30-40 毫秒,我会收到来自远程设备的回显请求,我的控制器会对此做出响应。我可以以某种方式阻止这种回声垃圾邮件的发生(连接设置左右)吗?这可能不是我其他问题的原因,但能够测试它会很好。而且更容易监控。

0 投票
0 回答
32 浏览

python-3.x - 无法通过本地控制器的 l2cap 原始套接字发送数据 - [Errno 107] 传输端点未连接

我尝试通过 l2cap 层连接到我的本地蓝牙控制器,以查看我使用 SDP 协议支持哪些服务。**不想使用 sdptool

错误结果:

任何想法,谢谢

0 投票
0 回答
185 浏览

sockets - 为什么 BlueZ 中有两种不同的套接字选项(RFCOMM 和 L2CAP)?

我正在做蓝牙套接字编程,我对 BlueZ 提供的套接字几乎没有疑问。

当我们处理 TCP/IP 套接字编程时,我们通常可以选择 TCP 或 UDP 作为我们的传输协议。据我所知,这两种协议是互斥的(我们只能选择其中一种)。

但是,我发现 BlueZ 为我们提供了 L2CAP 和 RFCOMM 套接字。例如,在 中pybluez,我们可以选择bluetooth.L2CAPbluetooth.RFCOMM作为参数来构造一个套接字。

我的问题是:在蓝牙堆栈中是否执行不同的功能和不同的级别L2CAPRFCOMM换句话说,我想它们都是缺一不可的,那我们怎么可能只选择其中一个作为协议来构造套接字呢?

我是不是误会了什么?还是只是代码中指定的socket只是决定了socket在蓝牙栈中的入口位置,L2CAP和RFCOMM都还在工作?如果是这样,为什么 BlueZ 会为我们提供两个不同的套接字条目?

我已经阅读了这里的介绍:https ://people.csail.mit.edu/albert/bluez-intro/x95.html ,我知道指定 L2CAP 或 RFCOMM,我们可以有不同的设置,比如数量港口。但我仍然无法获得使用哪些协议以及它们存在的原因。

我是蓝牙新手,非常感谢您的帮助!谢谢!

0 投票
0 回答
44 浏览

c - 寻求有关如何跟踪收到的 L2CAP 数据包之间经过的时间的建议

我的背景是 EE 这是我的第一个 StackO 问题(双重打击),所以如果问题表述不当,我提前道歉。

我已经扩展了 BTstack 库中的示例程序(移植到 Raspberry Pi 3b+ 的 C 语言中的“le_data_channel_server”),允许它接收、确认和响应随附的 iOS 应用程序发送给它的 L2CAP 数据包。我正在处理的项目要求实现“超时”功能,如果程序在过去 40 毫秒内没有收到 L2CAP 数据包,它会执行某些操作。iOS 应用程序在它打算这样做时每 30 毫秒可靠地发送 L2CAP 数据包。示例 pi 程序基本上由一个带有许多嵌套 switch case 的 packet_handler 函数组成。

我尝试通过调用 btstack 函数“btstack_run_loop_get_time_ms()”来实现该功能,该函数在“L2CAP_DATA_PACKET”案例开始时提供自程序开始运行以来经过的时间,以记录在变量中接收数据包的时间“time1”,当在“time2”中接收到后续数据包时,使用标志变量和 if 语句交替更新哪个时间变量。将两者相减可以很好地跟踪连续接收数据包时经过的时间。但是,我只关心没有收到数据包的情况,因此当没有达到“L2CAP_DATA_PACKET”的情况时,我知道这个实现不会真正按照我需要的方式工作。有没有一种方法可以让我在后台运行一个计时器,1)可以在收到数据包时重置,2)在 40 毫秒过去后触发中断或更改全局变量而没有达到“L2CAP_DATA_PACKET”?依赖到达“L2CAP_DATA_PACKET”的时间是一个坏主意,因为程序可能会在其他区域花费时间,而它仍在接收数据包?任何和所有的建议/建议将不胜感激。达到是一个坏主意,因为该程序可能会在仍在接收数据包的同时在其他区域花费时间?任何和所有的建议/建议将不胜感激。到达是一个坏主意,因为程序可能会在仍在接收数据包的同时在其他区域花费时间?任何和所有的建议/建议将不胜感激。

0 投票
0 回答
33 浏览

linux - L2CAP 蓝牙:消息太长

我想在两个蓝牙设备之间使用 L2CAP 协议发送消息。这是我的客户代码:

我的服务器代码与https://people.csail.mit.edu/albert/bluez-intro/x559.html中出现的完全相同,但缓冲区大小为 65535。

当我尝试增加bluetooth_buff的长度 -tam_bluetooth_buff变量 - 我得到这个错误

DATA_BLUETOOTH_BUFFER请注意,例如,如果是 128 而不是 256,则一切正常。

请帮忙!!问候