抽屉里躺着一个GameSir T1d,是当年买Ryze/DJI Tello无人机时配的蓝牙手柄。想把它连到电脑上打游戏,结果什么反应都没有。它只支持蓝牙低功耗,说的还是GameSir自家的GATT协议,不是正经手柄用的HID规范。Linux、Windows、Android、SteamOS全都当它不存在,GameSir官方也说了,这手柄只认Tello。
但它其实还能跟电脑通过BLE通信,只是不需要配对。所以一个小的桥接程序就能读取它的输入报告,再通过Linux的uinput创建一个虚拟的Xbox 360手柄。Steam、SDL和大多数Linux游戏就会把它当成一个普通的有线手柄。硬件不用做任何改动。
![]()
有人的孩子已经拿它玩线上游戏了,反馈还不错。Tello无人机早就没了,但至少这个手柄没进垃圾填埋场。
![]()
你需要准备什么
一个GameSir T1d手柄,背面标签上写着FCC ID: 2AF9ST1D。T1s长得一样但主板不同,这份指南不适用。一台蓝牙4.0或更新版本的Linux电脑。Python 3。大约15分钟时间。
第一步:下载文件
需要三个文件:t1d-bridge.py是桥接程序;60-t1d-bridge-uinput.rules是一条udev规则,让桌面用户能创建虚拟手柄;t1d-probe.py是可选的,用来打印手柄的GATT表和解码后的输入。三个文件都是MIT许可。
第二步:安装bleak和python-evdev
bleak通过BlueZ跟BLE通信,python-evdev负责创建虚拟手柄。
第三步:让用户能创建虚拟手柄
那条规则给/dev/uinput打了uaccess标签,登录的桌面用户就能访问它。运行桥接程序不需要sudo,不用改用户组,也不用重新登录。加--selftest参数可以创建虚拟手柄并让它动起来,不需要连接真实手柄。
第四步:校准摇杆,只做一次
打开手柄:按住电源键2秒,四个LED闪烁,等待连接。然后花10秒钟,让两个摇杆慢慢转完整个圆周,并推到每个角落。每个轴的真实范围会保存在~/.config/t1d-bridge/.json里。跳过这一步的话,磨损的摇杆可能到不了满行程。
第五步:运行
打开任意手柄测试工具,比如evtest、Steam的手柄设置、KDE的手柄控制器页面,移动摇杆看看。手柄休眠再唤醒后,桥接程序会自动重连。按Ctrl-C停止,会释放所有按键和轴。
![]()
协议是怎么工作的
手柄开机后广播为Gamesir-T1d-XXXX,接受普通的BLE连接,不需要配对或绑定。输入以通知形式到达特征值00008651-0000-1000-8000-00805f9b34fb,每个报告20字节。
在实际设备上发现了三件事:报告只在有变化时才到达,没有空闲心跳,手柄放着不动只会发5秒一次的状态包;每次开机后所有轴都读到正好512,固件在启动时把摇杆归零了,所以第一个报告说明不了真实的静止位置,桥接程序会从摇杆静止的第一秒开始采样中心点;值变化时报告最多每14毫秒一次,对游戏来说够用。
这个布局最早由dg-hub和ElishaAz破解,后来用t1d-probe.py在自己的手柄上做了验证。
摇杆漂移:数字说明了什么
在Tello上,松开摇杆后无人机会自己漂移,晃一晃摇杆能好一阵子。静止时,摇杆读数是714/317(左)和764/512(右),而不是512/512。固件发送的是原始ADC值,没有校准也没有死区,所以这些值会直接传到无人机或游戏里。
每个摇杆轴是一个碳膜电位器:金属滑片在电阻轨道上滑动。记录原始值揭示了真正的故障。没有手指碰它时,左摇杆的Y轴在4秒内从823爬到1023,然后停在正好1023——ADC量程的顶端——持续20秒。一个没人碰的轴停在极限值,说明滑片跟轨道失去了接触:ADC输入浮到了供电电压。在无人机上那就是满舵,不是轻微漂移。晃动摇杆能把滑片刮回轨道上,这就是为什么晃一晃有用。
同一个电位器推到最底时也只能到大约720,而不是1023。那是Tello的油门,用得最多的轴,轨道底部已经磨损了。
桥接程序怎么处理这些问题
- 中心点:每次连接时从第一个静止秒采样。按C1加C2可以重新采样。
- 范围:每个轴的每一侧都按自己测得的行程缩放,所以一个最高只到720的电位器仍然能输出满值。精确的极限值(0和1023)永远不会被学成范围,因为在磨损的电位器上它们是接触中断,不是行程。
- 死区:15%,径向,剩余行程重新缩放到满输出。
- 中断:--rail-timeout 2把停在极限值2秒的轴当作居中处理,直到它移动。它也会切断有意的满舵保持超过2秒的情况,所以默认是关闭的。
硬件修复,从最便宜的开始
接触清洁剂。打开外壳,往每个电位器的槽里喷塑料安全的电子接触清洁剂(DeoxIT D5或类似产品,不要用WD-40),然后让摇杆转圈30秒。大约15分钟,通常能管几个月。
换新的摇杆模块。电位器模块只要几美元,但会以同样的方式再次磨损。霍尔效应模块(GuliKit、K-Silver)是另一种选择。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.