Fix facilities rgData
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user