Fix facilities rgData
Some checks failed
CI / Rust checks (push) Failing after 53s
Security / Audit (push) Failing after 29s

This commit is contained in:
2024-10-22 12:31:35 +02:00
parent 6f1c647687
commit ae7111ac33

View File

@@ -3,6 +3,10 @@ use std::{collections::HashMap, ffi::c_void};
use tracing::{error, span, trace, warn, Level}; use tracing::{error, span, trace, warn, Level};
use crate::bindings::{
SIMCONNECT_DATA_FACILITY_AIRPORT, SIMCONNECT_DATA_FACILITY_NDB, SIMCONNECT_DATA_FACILITY_VOR,
SIMCONNECT_DATA_FACILITY_WAYPOINT,
};
use crate::domain::{ use crate::domain::{
Airport, ClientEvent, ClientEventRequest, Notification, Object, SystemEvent, Airport, ClientEvent, ClientEventRequest, Notification, Object, SystemEvent,
SystemEventRequest, Waypoint, CLIENT_EVENT_DISCRIMINANT_START, NDB, VOR, SystemEventRequest, Waypoint, CLIENT_EVENT_DISCRIMINANT_START, NDB, VOR,
@@ -255,18 +259,22 @@ impl SimConnect {
event._base.dwRequestID, event._base.dwRequestID,
); );
let data = (0..event._base.dwArraySize as usize) let as_pointer = event.rgData.as_ptr();
.map(|i| { let s = unsafe {
// `rgData` is defined as a 1-element array, but it is actually a variable-length array. core::slice::from_raw_parts(
let record = unsafe { event.rgData.get_unchecked(i) }; as_pointer as *mut SIMCONNECT_DATA_FACILITY_AIRPORT,
event._base.dwArraySize as usize,
)
};
Airport { let data = s
ident: fixed_c_str_to_string(&record.Ident), .iter()
region: fixed_c_str_to_string(&record.Region), .map(|record| Airport {
lat: record.Latitude, ident: fixed_c_str_to_string(&record.Ident),
lon: record.Longitude, region: fixed_c_str_to_string(&record.Region),
alt: record.Altitude, lat: record.Latitude,
} lon: record.Longitude,
alt: record.Altitude,
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -284,19 +292,23 @@ impl SimConnect {
event._base.dwRequestID, event._base.dwRequestID,
); );
let data = (0..event._base.dwArraySize as usize) let as_pointer = event.rgData.as_ptr();
.map(|i| { let s = unsafe {
// `rgData` is defined as a 1-element array, but it is actually a variable-length array. core::slice::from_raw_parts(
let record = unsafe { event.rgData.get_unchecked(i) }; as_pointer as *mut SIMCONNECT_DATA_FACILITY_WAYPOINT,
event._base.dwArraySize as usize,
)
};
Waypoint { let data = s
ident: fixed_c_str_to_string(&record._base.Ident), .iter()
region: fixed_c_str_to_string(&record._base.Region), .map(|record| Waypoint {
lat: record._base.Latitude, ident: fixed_c_str_to_string(&record._base.Ident),
lon: record._base.Longitude, region: fixed_c_str_to_string(&record._base.Region),
alt: record._base.Altitude, lat: record._base.Latitude,
mag_var: record.fMagVar, lon: record._base.Longitude,
} alt: record._base.Altitude,
mag_var: record.fMagVar,
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -314,20 +326,24 @@ impl SimConnect {
event._base.dwRequestID, event._base.dwRequestID,
); );
let data = (0..event._base.dwArraySize as usize) let as_pointer = event.rgData.as_ptr();
.map(|i| { let s = unsafe {
// `rgData` is defined as a 1-element array, but it is actually a variable-length array. core::slice::from_raw_parts(
let record = unsafe { event.rgData.get_unchecked(i) }; as_pointer as *mut SIMCONNECT_DATA_FACILITY_NDB,
event._base.dwArraySize as usize,
)
};
NDB { let data = s
ident: fixed_c_str_to_string(&record._base._base.Ident), .iter()
region: fixed_c_str_to_string(&record._base._base.Region), .map(|record| NDB {
lat: record._base._base.Latitude, ident: fixed_c_str_to_string(&record._base._base.Ident),
lon: record._base._base.Longitude, region: fixed_c_str_to_string(&record._base._base.Region),
alt: record._base._base.Altitude, lat: record._base._base.Latitude,
mag_var: record._base.fMagVar, lon: record._base._base.Longitude,
frequency: record.fFrequency, alt: record._base._base.Altitude,
} mag_var: record._base.fMagVar,
frequency: record.fFrequency,
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -345,11 +361,17 @@ impl SimConnect {
event._base.dwRequestID, event._base.dwRequestID,
); );
let data = (0..event._base.dwArraySize as usize) let as_pointer = event.rgData.as_ptr();
.map(|i| { let s = unsafe {
// `rgData` is defined as a 1-element array, but it is actually a variable-length array. core::slice::from_raw_parts(
let record = unsafe { event.rgData.get_unchecked(i) }; as_pointer as *mut SIMCONNECT_DATA_FACILITY_VOR,
event._base.dwArraySize as usize,
)
};
let data = s
.iter()
.map(|record| {
let has_nav_signal = record.Flags let has_nav_signal = record.Flags
& bindings::SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL & bindings::SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL
== bindings::SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL; == bindings::SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL;