Android 10 L2CAP 连接 IOException 超时 Wii 平衡板
Posted
技术标签:
【中文标题】Android 10 L2CAP 连接 IOException 超时 Wii 平衡板【英文标题】:Android 10 L2CAP connection IOException timeout Wii Balance Board 【发布时间】:2020-05-16 16:01:05 【问题描述】:背景
很久以前,我的任务是为 Wii 平衡板制作一个 android 应用程序,经过一番折腾后,我发现 android 不再支持 L2CAP。更多 research 导致了解它正在 Android 10 中重新添加。随着 Android 10 的推出,我现在一直在尝试破解它。
问题
所以我目前的简单目标是创建与 Wii 平衡板的连接。
我的连接方法是:
开始发现
将发现的蓝牙设备添加到列表中
当你点击一个设备时,它会尝试像这样打开一个套接字:
bluetoothSocket = btDevice.createInsecureL2capChannel(port);
正如WiiBrew 网站上所述,我使用 psm 值 0x13 作为输入,使用 0x11 作为输出。
然后我使用bluetoothSocket.connect
并继续接收 IOException(超时错误)
我也尝试过同时使用createL2capChannel
和createInsecureL2capChannel
,结果相同
我能够成功地使用btDevice.createBond()
与设备配对,然后将手机的BT 地址向后使用.setpin()
,Wii 平衡板只是充当“哑”输入设备。 (不确定是否需要配对/好主意)
以上是我尝试连接的简化流程。我还尝试使用 Paul Burton 的 fitscales 存储库中的 BalanceBoard.java
更新所有旧蓝牙代码,但我仍然会超时。
【问题讨论】:
【参考方案1】:您查看过 bt_stack 日志吗?
这是我尝试用 wiimote 打开套接字的过程:
04-05 12:25:04.949 E/bt_stack(4895): [ERROR:btif_sock_l2cap.cc(244)] SOCK_LIST: free(id = 4) - NO app_fd!
04-05 12:25:04.949 I/bt_stack(4895): [INFO:btsnoop.cc(323)] clear_l2cap_whitelist: Clearing whitelist from l2cap channel. conn_handle=65535 cid=65:0
04-05 12:25:04.949 E/bt_l2cap(4895): L2CA_FreeLePSM: Invalid PSM=19 value!
04-05 12:25:40.141 I/bt_stack(4895): [INFO:btsnoop.cc(323)] clear_l2cap_whitelist: Clearing whitelist from l2cap channel. conn_handle=1 cid=66:64
04-05 12:25:55.736 I/bt_stack(4895): [INFO:btsnoop.cc(323)] clear_l2cap_whitelist: Clearing whitelist from l2cap channel. conn_handle=2 cid=67:65
我相信这就是问题所在,我只是一个新手,所以我不确定可以做些什么。我知道旧的连接方式将 fd 作为参数传递给蓝牙套接字构造函数,但我认为这不再可能了
【讨论】:
仅供参考,在此文件中生成了无效的 PSM 值错误:android.googlesource.com/platform/system/bt/+/master/stack/…,并且 PSM 范围限制为 0x80 到 0xFF。范围常量在此文件中:android.googlesource.com/platform/system/bt/+/refs/heads/master/…,您可以看到它们定义为 LE_DYNAMIC_PSM_START 和 LE_DYNAMIC_PSM_END。以上是关于Android 10 L2CAP 连接 IOException 超时 Wii 平衡板的主要内容,如果未能解决你的问题,请参考以下文章