1mod bits;
2use std::fmt::Debug;
3
4pub use bits::*;
5
6use crate::MemoryFile;
7
8#[repr(C)]
9#[derive(Default)]
10pub struct Line([[u8; 26]; 5]);
11
12impl Debug for Line {
13 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14 let mut ret = String::new();
15
16 for line in &self.0 {
17 ret += &String::from_utf8_lossy(line);
18 ret += "\n";
19 }
20
21 write!(f, "{}", ret.trim_end_matches('\n'))
22 }
23}
24
25#[repr(C)]
26#[derive(Debug)]
27pub struct FlightData {
28 pub x: f32, pub y: f32, pub z: f32, pub x_dot: f32, pub y_dot: f32, pub z_dot: f32, pub alpha: f32, pub beta: f32, pub gamma: f32, pub pitch: f32, pub roll: f32, pub yaw: f32, pub mach: f32, pub kias: f32, pub vt: f32, pub gs: f32, pub wind_offset: f32, pub nozzle_pos: f32, pub internal_fuel: f32, pub external_fuel: f32, pub fuel_flow: f32, pub rpm: f32, pub ftit: f32, pub gear_pos: f32, pub speed_brake: f32, pub epu_fuel: f32, pub oil_pressure: f32, pub light_bits: LightBits, pub head_pitch: f32, pub head_roll: f32, pub head_yaw: f32, pub light_bits2: LightBits2, pub light_bits3: LightBits3, pub chaff_count: f32, pub flare_count: f32, pub nose_gear_pos: f32, pub left_gear_pos: f32, pub right_gear_pos: f32, pub adi_ils_hor_pos: f32, pub adi_ils_ver_pos: f32, pub course_state: i32, pub heading_state: i32, pub total_states: i32, pub course_deviation: f32, pub desired_course: f32, pub distance_to_beacon: f32, pub bearing_to_beacon: f32, pub current_heading: f32, pub desired_heading: f32, pub deviation_limit: f32, pub half_deviation_limit: f32, pub localizer_course: f32, pub airbase_x: f32, pub airbase_y: f32, pub total_values: f32, pub trim_pitch: f32, pub trim_roll: f32, pub trim_yaw: f32, pub hsi_bits: HsiBits, pub dedlines: Line, pub invert: Line, pub pfllines: Line, pub pflinvert: Line, pub ufc_tchan: i32,
121 pub aux_tchan: i32,
122
123 pub rwr_object_count: i32,
125 pub rwr_symbol: [i32; 40],
126 pub bearing: [f32; 40],
127 pub missile_activity: [u32; 40],
128 pub missile_launch: [u32; 40],
129 pub selected: [u32; 40],
130 pub lethality: [f32; 40],
131 pub new_detection: [u32; 40],
132
133 pub fwd: f32,
135 pub aft: f32,
136 pub total: f32,
137
138 pub version_num: i32, pub head_x: f32, pub head_y: f32, pub head_z: f32, pub main_power: i32, }
148
149impl Default for FlightData {
150 fn default() -> Self {
151 Self {
152 x: Default::default(),
153 y: Default::default(),
154 z: Default::default(),
155 x_dot: Default::default(),
156 y_dot: Default::default(),
157 z_dot: Default::default(),
158 alpha: Default::default(),
159 beta: Default::default(),
160 gamma: Default::default(),
161 pitch: Default::default(),
162 roll: Default::default(),
163 yaw: Default::default(),
164 mach: Default::default(),
165 kias: Default::default(),
166 vt: Default::default(),
167 gs: Default::default(),
168 wind_offset: Default::default(),
169 nozzle_pos: Default::default(),
170 internal_fuel: Default::default(),
171 external_fuel: Default::default(),
172 fuel_flow: Default::default(),
173 rpm: Default::default(),
174 ftit: Default::default(),
175 gear_pos: Default::default(),
176 speed_brake: Default::default(),
177 epu_fuel: Default::default(),
178 oil_pressure: Default::default(),
179 light_bits: Default::default(),
180 head_pitch: Default::default(),
181 head_roll: Default::default(),
182 head_yaw: Default::default(),
183 light_bits2: Default::default(),
184 light_bits3: Default::default(),
185 chaff_count: Default::default(),
186 flare_count: Default::default(),
187 nose_gear_pos: Default::default(),
188 left_gear_pos: Default::default(),
189 right_gear_pos: Default::default(),
190 adi_ils_hor_pos: Default::default(),
191 adi_ils_ver_pos: Default::default(),
192 course_state: Default::default(),
193 heading_state: Default::default(),
194 total_states: Default::default(),
195 course_deviation: Default::default(),
196 desired_course: Default::default(),
197 distance_to_beacon: Default::default(),
198 bearing_to_beacon: Default::default(),
199 current_heading: Default::default(),
200 desired_heading: Default::default(),
201 deviation_limit: Default::default(),
202 half_deviation_limit: Default::default(),
203 localizer_course: Default::default(),
204 airbase_x: Default::default(),
205 airbase_y: Default::default(),
206 total_values: Default::default(),
207 trim_pitch: Default::default(),
208 trim_roll: Default::default(),
209 trim_yaw: Default::default(),
210 hsi_bits: Default::default(),
211 dedlines: Default::default(),
212 invert: Default::default(),
213 pfllines: Default::default(),
214 pflinvert: Default::default(),
215 ufc_tchan: Default::default(),
216 aux_tchan: Default::default(),
217 rwr_object_count: Default::default(),
218 rwr_symbol: [0; 40],
219 bearing: [0.0; 40],
220 missile_activity: [0; 40],
221 missile_launch: [0; 40],
222 selected: [0; 40],
223 lethality: [0.0; 40],
224 new_detection: [0; 40],
225 fwd: Default::default(),
226 aft: Default::default(),
227 total: Default::default(),
228 version_num: Default::default(),
229 head_x: Default::default(),
230 head_y: Default::default(),
231 head_z: Default::default(),
232 main_power: Default::default(),
233 }
234 }
235}
236
237unsafe impl Send for FlightData {}
238unsafe impl Sync for FlightData {}
239
240impl FlightData {
241 pub fn new<'a>() -> Result<MemoryFile<'a, Self>, Box<dyn std::error::Error + Send + Sync>> {
242 let file = unsafe { MemoryFile::<'a, Self>::new("FalconSharedMemoryArea")? };
243 Ok(file)
244 }
245}