1#![allow(non_snake_case)]
2#![deny(clippy::pedantic)]
3#![allow(clippy::missing_panics_doc)]
4#![allow(clippy::missing_safety_doc)]
5
6#![doc = include_str!("../README.md")]
7
8extern crate libc;
9extern crate libloading as lib;
10
11use libc::{c_float, c_int};
12
13#[cfg(target_arch = "x86")]
14#[must_use]
15unsafe fn get_library() -> lib::Library {
16 lib::Library::new("RailDriver.dll").unwrap()
17}
18
19#[cfg(target_arch = "x86_64")]
20#[must_use]
21unsafe fn get_library() -> lib::Library {
22 lib::Library::new("RailDriver64.dll").unwrap()
23}
24
25#[must_use]
26pub unsafe fn GetRailSimValue(id: c_int, modifier: c_int) -> c_float {
27 let rd = get_library();
28 rd.get::<unsafe extern "C" fn(c_int, c_int) -> c_float>(b"GetRailSimValue")
29 .unwrap()(id, modifier)
30}
31
32pub unsafe fn SetRailSimValue(id: c_int, value: c_int) {
33 let rd = get_library();
34 rd.get::<unsafe extern "C" fn(c_int, c_int)>(b"SetRailSimValue")
35 .unwrap()(id, value);
36}
37
38pub unsafe fn SetRailDriverConnected(isConnected: bool) {
39 let rd = get_library();
40 rd.get::<unsafe extern "C" fn(bool)>(b"SetRailDriverConnected")
41 .unwrap()(isConnected);
42}
43
44#[must_use]
45pub unsafe fn GetNextRailDriverId(start: c_int) -> c_int {
46 let rd = get_library();
47 rd.get::<unsafe extern "C" fn(c_int) -> c_int>(b"GetNextRailDriverId")
48 .unwrap()(start)
49}
50
51#[must_use]
52pub unsafe fn GetRailDriverValue(id: c_int) -> c_float {
53 let rd = get_library();
54 rd.get::<unsafe extern "C" fn(c_int) -> c_float>(b"GetRailDriverValue")
55 .unwrap()(id)
56}
57
58#[must_use]
59pub unsafe fn GetControllerValue(controllerId: c_int, getType: c_int) -> c_float {
60 let rd = get_library();
61 rd.get::<unsafe extern "C" fn(c_int, c_int) -> c_float>(b"GetControllerValue")
62 .unwrap()(controllerId, getType)
63}
64
65pub unsafe fn SetControllerValue(controllerId: c_int, value: c_float) {
66 let rd = get_library();
67 rd.get::<unsafe extern "C" fn(c_int, c_float)>(b"SetControllerValue")
68 .unwrap()(controllerId, value);
69}
70
71#[must_use]
72pub unsafe fn GetRailSimConnected() -> bool {
73 let rd = get_library();
74 rd.get::<unsafe extern "C" fn() -> bool>(b"GetRailSimConnected")
75 .unwrap()()
76}
77
78pub unsafe fn SetRailSimConnected(isConnected: bool) {
79 let rd = get_library();
80 rd.get::<unsafe extern "C" fn(bool)>(b"SetRailSimConnected")
81 .unwrap()(isConnected);
82}
83
84#[must_use]
85pub unsafe fn GetRailSimLocoChanged() -> bool {
86 let rd = get_library();
87 rd.get::<unsafe extern "C" fn() -> bool>(b"GetRailSimLocoChanged")
88 .unwrap()()
89}
90
91#[must_use]
92pub unsafe fn GetRailSimCombinedThrottleBrake() -> bool {
93 let rd = get_library();
94 rd.get::<unsafe extern "C" fn() -> bool>(b"GetRailSimCombinedThrottleBrake")
95 .unwrap()()
96}