1use core::ffi::c_double;
4
5use crate::V5_DeviceT;
6
7#[repr(C, packed)]
8#[derive(Default, Debug, Copy, Clone, PartialEq)]
9pub struct V5_DeviceGpsRaw {
10 pub x: c_double,
11 pub y: c_double,
12 pub z: c_double,
13 pub w: c_double,
14}
15
16#[repr(C, packed)]
17#[derive(Default, Debug, Copy, Clone, PartialEq)]
18pub struct V5_DeviceGpsAttitude {
19 pub pitch: c_double, pub roll: c_double, pub yaw: c_double, pub position_x: c_double,
25 pub position_y: c_double,
26 pub position_z: c_double,
27
28 pub az: c_double,
30 pub el: c_double,
31 pub rot: c_double,
32}
33
34#[repr(C, packed)]
35#[derive(Default, Debug, Copy, Clone, PartialEq)]
36pub struct V5_DeviceGpsQuaternion {
37 pub x: c_double,
38 pub y: c_double,
39 pub z: c_double,
40 pub w: c_double,
41}
42
43unsafe extern "system" {
44 pub fn vexDeviceGpsReset(device: V5_DeviceT);
45 pub fn vexDeviceGpsHeadingGet(device: V5_DeviceT) -> c_double;
46 pub fn vexDeviceGpsDegreesGet(device: V5_DeviceT) -> c_double;
47 pub fn vexDeviceGpsQuaternionGet(device: V5_DeviceT, data: *mut V5_DeviceGpsQuaternion);
48 pub fn vexDeviceGpsAttitudeGet(device: V5_DeviceT, data: *mut V5_DeviceGpsAttitude, bRaw: bool);
49 pub fn vexDeviceGpsRawGyroGet(device: V5_DeviceT, data: *mut V5_DeviceGpsRaw);
50 pub fn vexDeviceGpsRawAccelGet(device: V5_DeviceT, data: *mut V5_DeviceGpsRaw);
51 pub fn vexDeviceGpsStatusGet(device: V5_DeviceT) -> u32;
52 pub fn vexDeviceGpsModeSet(device: V5_DeviceT, mode: u32);
53 pub fn vexDeviceGpsModeGet(device: V5_DeviceT) -> u32;
54 pub fn vexDeviceGpsDataRateSet(device: V5_DeviceT, rate: u32);
55 pub fn vexDeviceGpsOriginSet(device: V5_DeviceT, ox: c_double, oy: c_double);
56 pub fn vexDeviceGpsOriginGet(device: V5_DeviceT, ox: *mut c_double, oy: *mut c_double);
57 pub fn vexDeviceGpsRotationSet(device: V5_DeviceT, value: c_double);
58 pub fn vexDeviceGpsRotationGet(device: V5_DeviceT) -> c_double;
59 pub fn vexDeviceGpsInitialPositionSet(
60 device: V5_DeviceT,
61 initial_x: c_double,
62 initial_y: c_double,
63 initial_rotation: c_double,
64 );
65 pub fn vexDeviceGpsErrorGet(device: V5_DeviceT) -> c_double;
66}