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 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;
|
||||||
|
Reference in New Issue
Block a user