#controller #steam #input

steamy-controller

用于与Steam控制器交互的库

4个版本

使用旧Rust 2015

0.2.1 2016年8月31日
0.2.0 2016年4月27日
0.1.1 2016年3月29日
0.1.0 2016年3月28日

音频类别中排名第425位

WTFPL许可证

39KB
932

Steam控制器处理

Rust库,用于与Steam控制器协同工作。

请求

所有请求都是通过64字节的HID功能发送完成的,第1个字节包含ID,第2个字节包含数据包的大小,然后是负载,其余部分用0x00填充。

某些请求有响应,某些没有,响应的布局与请求相同。在列出的响应中只显示负载。

检查连接

当使用转接线时,可以检查控制器状态。

  • 0xb4 id
  • 0x00 size

响应

  • 0x01表示已断开连接,0x02表示已连接

构建细节

可以获取设备信息,它是一个键/值对的列表,键为1字节,值为4字节。

  • 0x83 id
  • 0x00 size

Keys

  • 0x0a是引导加载程序构建日期。
  • 0x04是控制器固件构建日期。
  • 0x05是无线电固件构建日期。

序列号

可以请求序列号。

  • 0xae id
  • 0x15 size
  • 0x00表示主板,0x01表示控制器

响应

  • 0x00
  • [u8; 10] 序列号

接收器信息

如果控制器处于无线模式,可以获取接收器的信息。

  • 0xa1 id
  • 0x00 size

响应

  • i32 固件构建日期。
  • 10字节的 ヽ(´ー` )ノ
  • [u8; 10] 接收器序列号

控制

所有控制都通过64字节的HID功能发送完成,第一个字节包含ID,第二个字节包含数据包大小,然后是有效负载,其余部分用0x00填充。

禁用蜥蜴模式

所谓的蜥蜴模式可以被禁用。

  • 0x81 ID
  • 0x00 size

启用蜥蜴模式

所谓的蜥蜴模式可以被启用。

  • 0x85 ID
  • 0x00 size

反馈

反馈可以发送到任何垫片。

  • 0x8f ID
  • 0x08 大小
  • 0x00 用于右侧,0x01 用于左侧
  • u16 用于振幅
  • u16 用于周期
  • u16 用于计数

传感器和超时

可以启用或禁用陀螺仪和加速度计,并可以更改空闲超时。

  • 0x87 ID
  • 0x15 size
  • 0x32
  • u16 超时
  • 0x18 0x00 0x00 0x31 0x02 0x00 0x08 0x07 0x00 0x07 0x07 0x00 0x30
  • 0x00 用于禁用,0x14 用于禁用
  • 0x00 0x2e

LED亮度

可以控制LED亮度。

  • 0x87 ID
  • 0x03 大小
  • 0x2d
  • u80 .. 100 之间

通知声音测试

可以测试每个通知声音。

  • 0xb6 ID
  • 0x04 大小
  • u8 声音ID

通知声音更改

可以更改打开和关闭的通知声音。

  • 0xc1 ID
  • 0x10 大小
  • u8 打开声音ID
  • u8 关闭声音ID
  • 0xff 0xff 0x03 0x09
  • 0x05 0xff 0xff 0xff
  • 0xff 0xff 0xff 0xff
  • 0xff 0xff

协议

support/中有一个脚本来帮助逆向工程协议,以下是我目前所知的内容。

头部

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            0x0100             |      Type     |      Size     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

类型

这是一个1字节的标志。

  • 0x01 表示设备正在发送输入。
  • 0x03 表示设备正在发送电源事件。
  • 0x04 表示设备处于空闲状态。

大小

表示数据包的大小。

电源

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Event     |                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

事件

它是一个无符号字符。

  • 0x01 表示关闭电源。
  • 0x02 表示开启电源。

空闲

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Sequence                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Something?          |      0x64     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

序列

它是一个小端无符号整型,每次读取时都会增加1。

是什么?

似乎每次从输入转到空闲时都会重置,并以某种指数曲线增加。

输入

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Sequence                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Buttons                    |  Left Trigger |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Right Trigger |                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Left Pad X           |           Left Pad Y          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Right Pad X           |          Right Pad Y          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Left Trigger Precise     |      Right Trigger Precise    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |       Acceleration Pitch      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Acceleration Yaw        |       Acceleration Roll       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Orientation Pitch       |        Orientation Yaw        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Orientation Roll        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

序列

它是一个小端无符号整型,每次读取时都会增加1。

按钮

这是一个24位集,以下值是按大端存储的。

  • 0b100000000000000000000000 A按钮已被按下。
  • 0b001000000000000000000000 B按钮已被按下。
  • 0b010000000000000000000000 按下了 X 按钮。
  • 0b000100000000000000000000 按下了 Y 按钮。
  • 0b000000000000000000000010 按下了摇杆。
  • 0b000000000000000000001000 摇杆被触摸。
  • 0b000000000000000000010000 按下了模拟摇杆。
  • 0b000000000000000001000000 模拟摇杆被触摸。
  • 0b000000000001000000000000 按下了摇杆下侧。
  • 0b000000000000010000000000 按下了摇杆左侧。
  • 0b000000000000001000000000 按下了摇杆右侧。
  • 0b000000000000000100000000 按下了摇杆上侧。
  • 0b000000000000000000000100 按下了触控板。
  • 0b000000000000000001000000 触控板被触摸。
  • 0b000000000001000000000000 按下了返回按钮。
  • 0b000000000010000000000000 按下了主页按钮。
  • 0b000000000100000000000000 按下了前进按钮。
  • 0b000010000000000000000000 按下了左侧护盾。
  • 0b000001000000000000000000 按下了右侧护盾。
  • 0b000000001000000000000000 按下了左侧握把。
  • 0b000000000000000000000001 按下了右侧握把。
  • 0b000000100000000000000000 左侧扳机完全按下。
  • 0b000000010000000000000000 右侧扳机完全按下。

左侧扳机

它是一个表示扳机施加压力的无符号字节。

右侧扳机

它是一个表示扳机施加压力的无符号字节。

左侧摇杆 X

它是一个小端有符号短整型。

左侧摇杆 Y

它是一个小端有符号短整型。

右侧摇杆 X

它是一个小端有符号短整型。

右侧摇杆 Y

它是一个小端有符号短整型。

方向翻滚

它是一个小端有符号短整型。

方向偏航

它是一个小端有符号短整型。

方向俯仰

它是一个小端有符号短整型。

加速度翻滚

它是一个小端有符号短整型。

加速度偏航

它是一个小端有符号短整型。

加速度俯仰

它是一个小端有符号短整型。

是什么?

有一些东西,我不知道是什么。

依赖项

~380KB