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