ds4_rs/dualshock4/
analog_sticks.rs

1pub struct AnalogStickConfig {
2    pub block_x: usize,
3    pub block_y: usize
4}
5
6pub struct AnalogSticksConfig {
7    pub left: AnalogStickConfig,
8    pub right: AnalogStickConfig
9}
10
11pub const CONFIG:AnalogSticksConfig = AnalogSticksConfig {
12    left: AnalogStickConfig {
13        block_x: 0x01,
14        block_y: 0x02
15    },
16    right: AnalogStickConfig {
17        block_x: 0x03,
18        block_y: 0x04
19    }
20};
21
22#[derive(PartialEq, Debug)]
23pub struct AnalogStick {
24    pub x: u8,
25    pub y: u8
26}
27
28#[derive(PartialEq, Debug)]
29pub struct AnalogSticks {
30    pub left: AnalogStick,
31    pub right: AnalogStick
32}
33
34pub fn decode(buf: &[u8]) -> AnalogSticks {
35    let left = decode_analog_stick(&CONFIG.left, buf);
36    let right = decode_analog_stick(&CONFIG.right, buf);
37
38    AnalogSticks {
39        left,
40        right
41    }
42}
43
44fn decode_analog_stick(config: &AnalogStickConfig, buf: &[u8]) -> AnalogStick {
45    AnalogStick {
46        x: buf[config.block_x],
47        y: buf[config.block_y]
48    }
49}