1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use super::*;
#[derive(Debug, Clone, Copy)]
pub struct ControllerAxisEvent {
pub timestamp: u32,
pub joystick_id: fermium::SDL_JoystickID,
pub axis: ControllerAxis,
pub value: i16,
}
impl From<fermium::SDL_ControllerAxisEvent> for ControllerAxisEvent {
fn from(ev: fermium::SDL_ControllerAxisEvent) -> Self {
Self {
timestamp: ev.timestamp,
joystick_id: ev.which,
axis: ControllerAxis::from(fermium::SDL_GameControllerAxis::from(
ev.axis,
)),
value: ev.value,
}
}
}
impl From<ControllerAxisEvent> for fermium::SDL_ControllerAxisEvent {
fn from(ev: ControllerAxisEvent) -> Self {
Self {
type_: fermium::SDL_CONTROLLERAXISMOTION as u32,
timestamp: ev.timestamp,
which: ev.joystick_id,
axis: ev.axis as u8,
value: ev.value,
padding1: 0,
padding2: 0,
padding3: 0,
padding4: 0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum ControllerAxis {
Invalid = fermium::SDL_CONTROLLER_AXIS_INVALID as u8,
LeftX = fermium::SDL_CONTROLLER_AXIS_LEFTX as u8,
LeftY = fermium::SDL_CONTROLLER_AXIS_LEFTY as u8,
RightX = fermium::SDL_CONTROLLER_AXIS_RIGHTX as u8,
RightY = fermium::SDL_CONTROLLER_AXIS_RIGHTY as u8,
TriggerLeft = fermium::SDL_CONTROLLER_AXIS_TRIGGERLEFT as u8,
TriggerRight = fermium::SDL_CONTROLLER_AXIS_TRIGGERRIGHT as u8,
}
impl From<fermium::SDL_GameControllerAxis> for ControllerAxis {
fn from(gca: fermium::SDL_GameControllerAxis) -> Self {
match gca {
fermium::SDL_CONTROLLER_AXIS_LEFTX => ControllerAxis::LeftX,
fermium::SDL_CONTROLLER_AXIS_LEFTY => ControllerAxis::LeftY,
fermium::SDL_CONTROLLER_AXIS_RIGHTX => ControllerAxis::RightX,
fermium::SDL_CONTROLLER_AXIS_RIGHTY => ControllerAxis::RightY,
fermium::SDL_CONTROLLER_AXIS_TRIGGERLEFT => ControllerAxis::TriggerLeft,
fermium::SDL_CONTROLLER_AXIS_TRIGGERRIGHT => ControllerAxis::TriggerRight,
_ => ControllerAxis::Invalid,
}
}
}