27#include <simgear/io/lowlevel.hxx>
28#include <simgear/timing/sg_time.hxx>
39#if defined( _MSC_VER )
41#elif defined( __MINGW32__ )
44# include <netinet/in.h>
58 if ( sgIsLittleEndian() ) {
62 Double_Overlay = (
int *) &x;
63 Holding_Buffer = Double_Overlay [0];
65 Double_Overlay [0] = htonl (Double_Overlay [1]);
66 Double_Overlay [1] = htonl (Holding_Buffer);
75 if ( sgIsLittleEndian() ) {
79 Float_Overlay = (
int *) &x;
80 Holding_Buffer = Float_Overlay [0];
82 Float_Overlay [0] = htonl (Holding_Buffer);
96 net->
longitude = props->getDoubleValue(
"position/longitude-deg")
97 * SG_DEGREES_TO_RADIANS;
98 net->
latitude = props->getDoubleValue(
"position/latitude-deg")
99 * SG_DEGREES_TO_RADIANS;
100 net->
altitude = props->getDoubleValue(
"position/altitude-ft")
102 net->
agl = props->getDoubleValue(
"position/altitude-agl-ft")
104 net->
phi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/roll-deg") );
105 net->
theta = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/pitch-deg") );
106 net->
psi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/heading-deg") );
107 net->
alpha = props->getDoubleValue(
"orientation/alpha-deg")
108 * SG_DEGREES_TO_RADIANS;
109 net->
beta = props->getDoubleValue(
"orientation/beta-deg")
110 * SG_DEGREES_TO_RADIANS;
111 net->
phidot = props->getDoubleValue(
"orientation/roll-rate-degps")
112 * SG_DEGREES_TO_RADIANS;
113 net->
thetadot = props->getDoubleValue(
"orientation/pitch-rate-degps")
114 * SG_DEGREES_TO_RADIANS;
115 net->
psidot = props->getDoubleValue(
"orientation/yaw-rate-degps")
116 * SG_DEGREES_TO_RADIANS;
118 net->
vcas = props->getDoubleValue(
"velocities/airspeed-kt");
119 net->
climb_rate = props->getDoubleValue(
"velocities/vertical-speed-fps");
121 net->
v_north = props->getDoubleValue(
"velocities/speed-north-fps", 0.0);
122 net->
v_east = props->getDoubleValue(
"velocities/speed-east-fps", 0.0);
123 net->
v_down = props->getDoubleValue(
"velocities/speed-down-fps", 0.0);
124 net->
v_body_u = props->getDoubleValue(
"velocities/uBody-fps", 0.0);
125 net->
v_body_v = props->getDoubleValue(
"velocities/vBody-fps", 0.0);
126 net->
v_body_w = props->getDoubleValue(
"velocities/wBody-fps", 0.0);
128 net->
A_X_pilot = props->getDoubleValue(
"accelerations/pilot/x-accel-fps_sec", 0.0);
129 net->
A_Y_pilot = props->getDoubleValue(
"/accelerations/pilot/y-accel-fps_sec", 0.0);
130 net->
A_Z_pilot = props->getDoubleValue(
"/accelerations/pilot/z-accel-fps_sec", 0.0);
132 net->
stall_warning = props->getDoubleValue(
"/sim/alarms/stall-warning", 0.0);
134 = props->getDoubleValue(
"/instrumentation/slip-skid-ball/indicated-slip-skid");
139 SGPropertyNode *node = props->getNode(
"engines/engine",
i,
true);
140 if ( node->getBoolValue(
"running" ) ) {
142 }
else if ( node->getBoolValue(
"cranking" ) ) {
147 net->
rpm[
i] = node->getDoubleValue(
"rpm" );
148 net->
fuel_flow[
i] = node->getDoubleValue(
"fuel-flow-gph" );
149 net->
fuel_px[
i] = node->getDoubleValue(
"fuel-px-psi" );
150 net->
egt[
i] = node->getDoubleValue(
"egt-degf" );
152 net->
cht[
i] = node->getDoubleValue(
"cht-degf" );
153 net->
mp_osi[
i] = node->getDoubleValue(
"mp-osi" );
154 net->
tit[
i] = node->getDoubleValue(
"tit" );
155 net->
oil_temp[
i] = node->getDoubleValue(
"oil-temperature-degf" );
156 net->
oil_px[
i] = node->getDoubleValue(
"oil-pressure-psi" );
162 SGPropertyNode *node = props->getNode(
"/consumables/fuel/tank",
i,
true);
169 SGPropertyNode *node = props->getNode(
"/gear/gear",
i,
true);
170 net->
wow[
i] = node->getIntValue(
"wow");
171 net->
gear_pos[
i] = node->getDoubleValue(
"position-norm");
172 net->
gear_steer[
i] = node->getDoubleValue(
"steering-norm");
178 net->
cur_time = time.get_cur_time();
179 net->
warp = props->getIntValue(
"/sim/time/warp");
180 net->
visibility = props->getDoubleValue(
"/environment/visibility-m");
183 SGPropertyNode *node = props->getNode(
"/surface-positions",
true);
184 net->
elevator = node->getDoubleValue(
"elevator-pos-norm" );
186 = node->getDoubleValue(
"elevator-trim-tab-pos-norm" );
188 net->
left_flap = node->getDoubleValue(
"flap-pos-norm" );
189 net->
right_flap = node->getDoubleValue(
"flap-pos-norm" );
190 net->
left_aileron = node->getDoubleValue(
"left-aileron-pos-norm" );
191 net->
right_aileron = node->getDoubleValue(
"right-aileron-pos-norm" );
192 net->
rudder = node->getDoubleValue(
"rudder-pos-norm" );
193 net->
nose_wheel = node->getDoubleValue(
"nose-wheel-pos-norm" );
194 net->
speedbrake = node->getDoubleValue(
"speedbrake-pos-norm" );
195 net->
spoilers = node->getDoubleValue(
"spoilers-pos-norm" );
197 if ( net_byte_order ) {
278 if ( net_byte_order ) {
359 props->setDoubleValue(
"position/latitude-deg",
360 net->
latitude * SG_RADIANS_TO_DEGREES);
361 props->setDoubleValue(
"position/longitude-deg",
363 props->setDoubleValue(
"position/altitude-ft",
366 if ( net->
agl > -9000 ) {
367 props->setDoubleValue(
"position/altitude-agl-ft",
368 net->
agl * SG_METER_TO_FEET );
371 - props->getDoubleValue(
"environment/ground-elevation-m");
372 props->setDoubleValue(
"position/altitude-agl-ft",
373 agl_m * SG_METER_TO_FEET );
375 props->setDoubleValue(
"orientation/roll-deg",
376 net->
phi * SG_RADIANS_TO_DEGREES);
377 props->setDoubleValue(
"orientation/pitch-deg",
378 net->
theta * SG_RADIANS_TO_DEGREES);
379 props->setDoubleValue(
"orientation/heading-deg",
380 net->
psi * SG_RADIANS_TO_DEGREES);
381 props->setDoubleValue(
"orientation/alpha-deg",
382 net->
alpha * SG_RADIANS_TO_DEGREES );
383 props->setDoubleValue(
"orientation/side-slip-rad",
384 net->
beta * SG_RADIANS_TO_DEGREES );
385 props->setDoubleValue(
"orientation/roll-rate-degps",
386 net->
phidot * SG_RADIANS_TO_DEGREES);
387 props->setDoubleValue(
"orientation/pitch-rate-degps",
388 net->
thetadot * SG_RADIANS_TO_DEGREES);
389 props->setDoubleValue(
"orientation/yaw-rate-degps",
390 net->
psidot * SG_RADIANS_TO_DEGREES);
391 props->setDoubleValue(
"velocities/airspeed-kt", net->
vcas);
392 props->setDoubleValue(
"velocities/vertical-speed-fps", net->
climb_rate);
393 props->setDoubleValue(
"velocities/speed-north-fps", net->
v_north);
394 props->setDoubleValue(
"velocities/speed-east-fps", net->
v_east);
395 props->setDoubleValue(
"velocities/speed-down-fps", net->
v_down);
396 props->setDoubleValue(
"velocities/uBody-fps", net->
v_body_u);
397 props->setDoubleValue(
"velocities/vBody-fps", net->
v_body_v);
398 props->setDoubleValue(
"velocities/wBody-fps", net->
v_body_w);
399 props->setDoubleValue(
"accelerations/pilot/x-accel-fps_sec",
401 props->setDoubleValue(
"accelerations/pilot/y-accel-fps_sec",
403 props->setDoubleValue(
"accelerations/pilot/z-accel-fps_sec",
406 props->setDoubleValue(
"/sim/alarms/stall-warning", net->
stall_warning );
407 props->setDoubleValue(
"/instrumentation/slip-skid-ball/indicated-slip-skid",
409 props->setBoolValue(
"/instrumentation/slip-skid-ball/override",
true );
412 SGPropertyNode *node = props->getNode(
"engines/engine",
i,
true );
419 node->setBoolValue(
"cranking",
false );
420 node->setBoolValue(
"running",
false );
422 node->setBoolValue(
"cranking",
true );
423 node->setBoolValue(
"running",
false );
425 node->setBoolValue(
"cranking",
false );
426 node->setBoolValue(
"running",
true );
429 node->setDoubleValue(
"rpm", net->
rpm[
i] );
430 node->setDoubleValue(
"fuel-flow-gph", net->
fuel_flow[
i] );
431 node->setDoubleValue(
"fuel-px-psi", net->
fuel_px[
i] );
432 node->setDoubleValue(
"egt-degf", net->
egt[
i] );
433 node->setDoubleValue(
"cht-degf", net->
cht[
i] );
434 node->setDoubleValue(
"mp-osi", net->
mp_osi[
i] );
435 node->setDoubleValue(
"tit", net->
tit[
i] );
436 node->setDoubleValue(
"oil-temperature-degf", net->
oil_temp[
i] );
437 node->setDoubleValue(
"oil-pressure-psi", net->
oil_px[
i] );
441 SGPropertyNode * node
442 = props->getNode(
"/consumables/fuel/tank",
i,
true);
447 SGPropertyNode * node = props->getNode(
"/gear/gear",
i,
true);
448 node->setDoubleValue(
"wow", net->
wow[
i] );
449 node->setDoubleValue(
"position-norm", net->
gear_pos[
i] );
450 node->setDoubleValue(
"steering-norm", net->
gear_steer[
i] );
464 SGPropertyNode *node = props->getNode(
"/surface-positions",
true);
465 node->setDoubleValue(
"elevator-pos-norm", net->
elevator);
466 node->setDoubleValue(
"elevator-trim-tab-pos-norm",
470 node->setDoubleValue(
"flap-pos-norm", net->
left_flap);
471 node->setDoubleValue(
"flap-pos-norm", net->
right_flap);
472 node->setDoubleValue(
"left-aileron-pos-norm", net->
left_aileron);
473 node->setDoubleValue(
"right-aileron-pos-norm", net->
right_aileron);
474 node->setDoubleValue(
"rudder-pos-norm", net->
rudder);
475 node->setDoubleValue(
"nose-wheel-pos-norm", net->
nose_wheel);
476 node->setDoubleValue(
"speedbrake-pos-norm", net->
speedbrake);
477 node->setDoubleValue(
"spoilers-pos-norm", net->
spoilers);
479 SG_LOG( SG_IO, SG_ALERT,
480 "Error: version mismatch in Net FGFDM2Props()" );
481 SG_LOG( SG_IO, SG_ALERT,
483 SG_LOG( SG_IO, SG_ALERT,
484 "\tNeeds to upgrade net_fdm.hxx and recompile." );
501 dds->
longitude = props->getDoubleValue(
"position/longitude-deg")
502 * SG_DEGREES_TO_RADIANS;
503 dds->
latitude = props->getDoubleValue(
"position/latitude-deg")
504 * SG_DEGREES_TO_RADIANS;
505 dds->
altitude = props->getDoubleValue(
"position/altitude-ft")
507 dds->
agl = props->getDoubleValue(
"position/altitude-agl-ft")
509 dds->
phi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/roll-deg") );
510 dds->
theta = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/pitch-deg") );
511 dds->
psi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/heading-deg") );
512 dds->
alpha = props->getDoubleValue(
"orientation/alpha-deg")
513 * SG_DEGREES_TO_RADIANS;
514 dds->
beta = props->getDoubleValue(
"orientation/beta-deg")
515 * SG_DEGREES_TO_RADIANS;
516 dds->
phidot = props->getDoubleValue(
"orientation/roll-rate-degps")
517 * SG_DEGREES_TO_RADIANS;
518 dds->
thetadot = props->getDoubleValue(
"orientation/pitch-rate-degps")
519 * SG_DEGREES_TO_RADIANS;
520 dds->
psidot = props->getDoubleValue(
"orientation/yaw-rate-degps")
521 * SG_DEGREES_TO_RADIANS;
523 dds->
vcas = props->getDoubleValue(
"velocities/airspeed-kt");
524 dds->
climb_rate = props->getDoubleValue(
"velocities/vertical-speed-fps");
526 dds->
v_north = props->getDoubleValue(
"velocities/speed-north-fps", 0.0);
527 dds->
v_east = props->getDoubleValue(
"velocities/speed-east-fps", 0.0);
528 dds->
v_down = props->getDoubleValue(
"velocities/speed-down-fps", 0.0);
529 dds->
v_body_u = props->getDoubleValue(
"velocities/uBody-fps", 0.0);
530 dds->
v_body_v = props->getDoubleValue(
"velocities/vBody-fps", 0.0);
531 dds->
v_body_w = props->getDoubleValue(
"velocities/wBody-fps", 0.0);
533 dds->
A_X_pilot = props->getDoubleValue(
"accelerations/pilot/x-accel-fps_sec", 0.0);
534 dds->
A_Y_pilot = props->getDoubleValue(
"/accelerations/pilot/y-accel-fps_sec", 0.0);
535 dds->
A_Z_pilot = props->getDoubleValue(
"/accelerations/pilot/z-accel-fps_sec", 0.0);
537 dds->
stall_warning = props->getDoubleValue(
"/sim/alarms/stall-warning", 0.0);
539 = props->getDoubleValue(
"/instrumentation/slip-skid-ball/indicated-slip-skid");
544 SGPropertyNode *node = props->getNode(
"engines/engine",
i,
true);
545 if ( node->getBoolValue(
"running" ) ) {
547 }
else if ( node->getBoolValue(
"cranking" ) ) {
552 dds->
rpm[
i] = node->getDoubleValue(
"rpm" );
553 dds->
fuel_flow[
i] = node->getDoubleValue(
"fuel-flow-gph" );
554 dds->
fuel_px[
i] = node->getDoubleValue(
"fuel-px-psi" );
555 dds->
egt[
i] = node->getDoubleValue(
"egt-degf" );
557 dds->
cht[
i] = node->getDoubleValue(
"cht-degf" );
558 dds->
mp_osi[
i] = node->getDoubleValue(
"mp-osi" );
559 dds->
tit[
i] = node->getDoubleValue(
"tit" );
560 dds->
oil_temp[
i] = node->getDoubleValue(
"oil-temperature-degf" );
561 dds->
oil_px[
i] = node->getDoubleValue(
"oil-pressure-psi" );
567 SGPropertyNode *node = props->getNode(
"/consumables/fuel/tank",
i,
true);
570 dds->
capacity_m3[
i] = node->getDoubleValue(
"capacity-m3");
571 dds->
unusable_m3[
i] = node->getDoubleValue(
"unusable-m3");
573 dds->
level_m3[
i] = node->getDoubleValue(
"level-m3");
579 SGPropertyNode *node = props->getNode(
"/gear/gear",
i,
true);
580 dds->
wow[
i] = node->getIntValue(
"wow");
581 dds->
gear_pos[
i] = node->getDoubleValue(
"position-norm");
582 dds->
gear_steer[
i] = node->getDoubleValue(
"steering-norm");
588 dds->
cur_time = time.get_cur_time();
589 dds->
warp = props->getIntValue(
"/sim/time/warp");
590 dds->
visibility = props->getDoubleValue(
"/environment/visibility-m");
593 SGPropertyNode *node = props->getNode(
"/surface-positions",
true);
594 dds->
elevator = node->getDoubleValue(
"elevator-pos-norm" );
596 = node->getDoubleValue(
"elevator-trim-tab-pos-norm" );
598 dds->
left_flap = node->getDoubleValue(
"flap-pos-norm" );
599 dds->
right_flap = node->getDoubleValue(
"flap-pos-norm" );
600 dds->
left_aileron = node->getDoubleValue(
"left-aileron-pos-norm" );
601 dds->
right_aileron = node->getDoubleValue(
"right-aileron-pos-norm" );
602 dds->
rudder = node->getDoubleValue(
"rudder-pos-norm" );
603 dds->
nose_wheel = node->getDoubleValue(
"nose-wheel-pos-norm" );
604 dds->
speedbrake = node->getDoubleValue(
"speedbrake-pos-norm" );
605 dds->
spoilers = node->getDoubleValue(
"spoilers-pos-norm" );
617 props->setDoubleValue(
"position/latitude-deg",
618 dds->
latitude * SG_RADIANS_TO_DEGREES);
619 props->setDoubleValue(
"position/longitude-deg",
621 props->setDoubleValue(
"position/altitude-ft",
624 if ( dds->
agl > -9000 ) {
625 props->setDoubleValue(
"position/altitude-agl-ft",
626 dds->
agl * SG_METER_TO_FEET );
629 - props->getDoubleValue(
"environment/ground-elevation-m");
630 props->setDoubleValue(
"position/altitude-agl-ft",
631 agl_m * SG_METER_TO_FEET );
633 props->setDoubleValue(
"orientation/roll-deg",
634 dds->
phi * SG_RADIANS_TO_DEGREES);
635 props->setDoubleValue(
"orientation/pitch-deg",
636 dds->
theta * SG_RADIANS_TO_DEGREES);
637 props->setDoubleValue(
"orientation/heading-deg",
638 dds->
psi * SG_RADIANS_TO_DEGREES);
639 props->setDoubleValue(
"orientation/alpha-deg",
640 dds->
alpha * SG_RADIANS_TO_DEGREES );
641 props->setDoubleValue(
"orientation/side-slip-rad",
642 dds->
beta * SG_RADIANS_TO_DEGREES );
643 props->setDoubleValue(
"orientation/roll-rate-degps",
644 dds->
phidot * SG_RADIANS_TO_DEGREES);
645 props->setDoubleValue(
"orientation/pitch-rate-degps",
646 dds->
thetadot * SG_RADIANS_TO_DEGREES);
647 props->setDoubleValue(
"orientation/yaw-rate-degps",
648 dds->
psidot * SG_RADIANS_TO_DEGREES);
649 props->setDoubleValue(
"velocities/airspeed-kt", dds->
vcas);
650 props->setDoubleValue(
"velocities/vertical-speed-fps", dds->
climb_rate);
651 props->setDoubleValue(
"velocities/speed-north-fps", dds->
v_north);
652 props->setDoubleValue(
"velocities/speed-east-fps", dds->
v_east);
653 props->setDoubleValue(
"velocities/speed-down-fps", dds->
v_down);
654 props->setDoubleValue(
"velocities/uBody-fps", dds->
v_body_u);
655 props->setDoubleValue(
"velocities/vBody-fps", dds->
v_body_v);
656 props->setDoubleValue(
"velocities/wBody-fps", dds->
v_body_w);
657 props->setDoubleValue(
"accelerations/pilot/x-accel-fps_sec",
659 props->setDoubleValue(
"accelerations/pilot/y-accel-fps_sec",
661 props->setDoubleValue(
"accelerations/pilot/z-accel-fps_sec",
664 props->setDoubleValue(
"/sim/alarms/stall-warning", dds->
stall_warning );
665 props->setDoubleValue(
"/instrumentation/slip-skid-ball/indicated-slip-skid",
667 props->setBoolValue(
"/instrumentation/slip-skid-ball/override",
true );
670 SGPropertyNode *node = props->getNode(
"engines/engine",
i,
true );
676 node->setBoolValue(
"cranking",
false );
677 node->setBoolValue(
"running",
false );
679 node->setBoolValue(
"cranking",
true );
680 node->setBoolValue(
"running",
false );
682 node->setBoolValue(
"cranking",
false );
683 node->setBoolValue(
"running",
true );
686 node->setDoubleValue(
"rpm", dds->
rpm[
i] );
687 node->setDoubleValue(
"fuel-flow-gph", dds->
fuel_flow[
i] );
688 node->setDoubleValue(
"fuel-px-psi", dds->
fuel_px[
i] );
689 node->setDoubleValue(
"egt-degf", dds->
egt[
i] );
690 node->setDoubleValue(
"cht-degf", dds->
cht[
i] );
691 node->setDoubleValue(
"mp-osi", dds->
mp_osi[
i] );
692 node->setDoubleValue(
"tit", dds->
tit[
i] );
693 node->setDoubleValue(
"oil-temperature-degf", dds->
oil_temp[
i] );
694 node->setDoubleValue(
"oil-pressure-psi", dds->
oil_px[
i] );
698 SGPropertyNode * node
699 = props->getNode(
"/consumables/fuel/tank",
i,
true);
702 node->setDoubleValue(
"capacity-m3", dds->
capacity_m3[
i]);
703 node->setDoubleValue(
"unusable-m3", dds->
unusable_m3[
i]);
705 node->setDoubleValue(
"level-m3", dds->
level_m3[
i]);
709 SGPropertyNode * node = props->getNode(
"/gear/gear",
i,
true);
710 node->setDoubleValue(
"wow", dds->
wow[
i] );
711 node->setDoubleValue(
"position-norm", dds->
gear_pos[
i] );
712 node->setDoubleValue(
"steering-norm", dds->
gear_steer[
i] );
725 SGPropertyNode *node = props->getNode(
"/surface-positions",
true);
726 node->setDoubleValue(
"elevator-pos-norm", dds->
elevator);
727 node->setDoubleValue(
"elevator-trim-tab-pos-norm",
731 node->setDoubleValue(
"flap-pos-norm", dds->
left_flap);
732 node->setDoubleValue(
"flap-pos-norm", dds->
right_flap);
733 node->setDoubleValue(
"left-aileron-pos-norm", dds->
left_aileron);
734 node->setDoubleValue(
"right-aileron-pos-norm", dds->
right_aileron);
735 node->setDoubleValue(
"rudder-pos-norm", dds->
rudder);
736 node->setDoubleValue(
"nose-wheel-pos-norm", dds->
nose_wheel);
737 node->setDoubleValue(
"speedbrake-pos-norm", dds->
speedbrake);
738 node->setDoubleValue(
"spoilers-pos-norm", dds->
spoilers);
740 SG_LOG( SG_IO, SG_ALERT,
741 "Error: version mismatch in DDS FGFDM2Props()" );
742 SG_LOG( SG_IO, SG_ALERT,
744 SG_LOG( SG_IO, SG_ALERT,
745 "\tNeeds to upgrade DDS/dds_fdm.hxx and recompile." );
756 static SGPropertyNode *nav_freq
757 = props->getNode(
"/instrumentation/nav/frequencies/selected-mhz",
true);
758 static SGPropertyNode *nav_target_radial
759 = props->getNode(
"/instrumentation/nav/radials/target-radial-deg",
true);
760 static SGPropertyNode *nav_inrange
761 = props->getNode(
"/instrumentation/nav/in-range",
true);
762 static SGPropertyNode *nav_loc
763 = props->getNode(
"/instrumentation/nav/nav-loc",
true);
764 static SGPropertyNode *nav_gs_dist_signed
765 = props->getNode(
"/instrumentation/nav/gs-distance",
true);
766 static SGPropertyNode *nav_loc_dist
767 = props->getNode(
"/instrumentation/nav/nav-distance",
true);
768 static SGPropertyNode *nav_reciprocal_radial
769 = props->getNode(
"/instrumentation/nav/radials/reciprocal-radial-deg",
true);
770 static SGPropertyNode *nav_gs_deflection
771 = props->getNode(
"/instrumentation/nav/gs-needle-deflection",
true);
778 net->
longitude = props->getDoubleValue(
"position/longitude-deg")
779 * SG_DEGREES_TO_RADIANS;
780 net->
latitude = props->getDoubleValue(
"position/latitude-deg")
781 * SG_DEGREES_TO_RADIANS;
782 net->
altitude = props->getDoubleValue(
"position/altitude-ft")
784 net->
phi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/roll-deg") );
785 net->
theta = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/pitch-deg") );
786 net->
psi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/heading-deg") );
789 net->
vcas = props->getDoubleValue(
"velocities/airspeed-kt");
790 net->
climb_rate = props->getDoubleValue(
"velocities/vertical-speed-fps");
795 SGPropertyNode *node = props->getNode(
"/consumables/fuel/tank",
i,
true);
801 net->
cur_time = time.get_cur_time();
802 net->
warp = props->getIntValue(
"/sim/time/warp");
803 net->
ground_elev = props->getDoubleValue(
"environment/ground-elevation-m");
807 net->
nav_radial = nav_target_radial->getDoubleValue();
808 net->
in_range = nav_inrange->getBoolValue();
810 if ( nav_loc->getBoolValue() ) {
813 = nav_gs_dist_signed->getDoubleValue()
817 net->
dist_nm = nav_loc_dist->getDoubleValue()
822 = nav_reciprocal_radial->getDoubleValue()
823 - nav_target_radial->getDoubleValue();
843 if ( nav_loc->getBoolValue() ) {
846 = nav_gs_deflection->getDoubleValue()
853#if defined( FG_USE_NETWORK_BYTE_ORDER )
888#if defined( FG_USE_NETWORK_BYTE_ORDER )
924 props->setDoubleValue(
"position/latitude-deg",
925 net->
latitude * SG_RADIANS_TO_DEGREES);
926 props->setDoubleValue(
"position/longitude-deg",
928 props->setDoubleValue(
"position/altitude-ft",
931 props->setDoubleValue(
"orientation/roll-deg",
932 net->
phi * SG_RADIANS_TO_DEGREES);
933 props->setDoubleValue(
"orientation/pitch-deg",
934 net->
theta * SG_RADIANS_TO_DEGREES);
935 props->setDoubleValue(
"orientation/heading-deg",
936 net->
psi * SG_RADIANS_TO_DEGREES);
938 props->setDoubleValue(
"velocities/airspeed-kt", net->
vcas);
939 props->setDoubleValue(
"velocities/vertical-speed-fps", net->
climb_rate);
942 SGPropertyNode * node
943 = props->getNode(
"/consumables/fuel/tank",
i,
true);
948 props->setLongValue(
"/sim/time/cur-time-override", net->
cur_time);
951 props->setIntValue(
"/sim/time/warp", net->
warp);
954 props->setDoubleValue(
"/instrumentation/nav[0]/frequencies/selected-mhz",
956 props->setBoolValue(
"/instrumentation/nav[0]/in-range", net->
in_range > 0);
957 props->setDoubleValue(
"/instrumentation/dme/indicated-distance-nm", net->
dist_nm );
958 props->setDoubleValue(
"/instrumentation/nav[0]/heading-needle-deflection",
960 props->setDoubleValue(
"/instrumentation/nav[0]/gs-needle-deflection",
963 SG_LOG( SG_IO, SG_ALERT,
964 "Error: version mismatch in FGNetNativeGUI2Props()" );
965 SG_LOG( SG_IO, SG_ALERT,
967 SG_LOG( SG_IO, SG_ALERT,
968 "\tNeed to upgrade net_fdm.hxx and recompile." );
975 static SGPropertyNode *nav_freq
976 = props->getNode(
"/instrumentation/nav/frequencies/selected-mhz",
true);
977 static SGPropertyNode *nav_target_radial
978 = props->getNode(
"/instrumentation/nav/radials/target-radial-deg",
true);
979 static SGPropertyNode *nav_inrange
980 = props->getNode(
"/instrumentation/nav/in-range",
true);
981 static SGPropertyNode *nav_loc
982 = props->getNode(
"/instrumentation/nav/nav-loc",
true);
983 static SGPropertyNode *nav_gs_dist_signed
984 = props->getNode(
"/instrumentation/nav/gs-distance",
true);
985 static SGPropertyNode *nav_loc_dist
986 = props->getNode(
"/instrumentation/nav/nav-distance",
true);
987 static SGPropertyNode *nav_reciprocal_radial
988 = props->getNode(
"/instrumentation/nav/radials/reciprocal-radial-deg",
true);
989 static SGPropertyNode *nav_gs_deflection
990 = props->getNode(
"/instrumentation/nav/gs-needle-deflection",
true);
997 dds->
longitude = props->getDoubleValue(
"position/longitude-deg")
998 * SG_DEGREES_TO_RADIANS;
999 dds->
latitude = props->getDoubleValue(
"position/latitude-deg")
1000 * SG_DEGREES_TO_RADIANS;
1001 dds->
altitude = props->getDoubleValue(
"position/altitude-ft")
1003 dds->
phi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/roll-deg") );
1004 dds->
theta = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/pitch-deg") );
1005 dds->
psi = SGMiscd::deg2rad( props->getDoubleValue(
"orientation/heading-deg") );
1008 dds->
vcas = props->getDoubleValue(
"velocities/airspeed-kt");
1009 dds->
climb_rate = props->getDoubleValue(
"velocities/vertical-speed-fps");
1014 SGPropertyNode *node = props->getNode(
"/consumables/fuel/tank",
i,
true);
1020 dds->
cur_time = time.get_cur_time();
1021 dds->
warp = props->getIntValue(
"/sim/time/warp");
1022 dds->
ground_elev = props->getDoubleValue(
"environment/ground-elevation-m");
1025 dds->
tuned_freq = nav_freq->getDoubleValue();
1026 dds->
nav_radial = nav_target_radial->getDoubleValue();
1027 dds->
in_range = nav_inrange->getBoolValue();
1029 if ( nav_loc->getBoolValue() ) {
1032 = nav_gs_dist_signed->getDoubleValue()
1036 dds->
dist_nm = nav_loc_dist->getDoubleValue()
1041 = nav_reciprocal_radial->getDoubleValue()
1042 - nav_target_radial->getDoubleValue();
1065 if ( nav_loc->getBoolValue() ) {
1068 = nav_gs_deflection->getDoubleValue()
1086 props->setDoubleValue(
"position/latitude-deg",
1087 dds->
latitude * SG_RADIANS_TO_DEGREES);
1088 props->setDoubleValue(
"position/longitude-deg",
1090 props->setDoubleValue(
"position/altitude-ft",
1093 props->setDoubleValue(
"orientation/roll-deg",
1094 dds->
phi * SG_RADIANS_TO_DEGREES);
1095 props->setDoubleValue(
"orientation/pitch-deg",
1096 dds->
theta * SG_RADIANS_TO_DEGREES);
1097 props->setDoubleValue(
"orientation/heading-deg",
1098 dds->
psi * SG_RADIANS_TO_DEGREES);
1100 props->setDoubleValue(
"velocities/airspeed-kt", dds->
vcas);
1101 props->setDoubleValue(
"velocities/vertical-speed-fps", dds->
climb_rate);
1104 SGPropertyNode * node
1105 = props->getNode(
"/consumables/fuel/tank",
i,
true);
1110 props->setLongValue(
"/sim/time/cur-time-override", dds->
cur_time);
1113 props->setIntValue(
"/sim/time/warp", dds->
warp );
1116 props->setDoubleValue(
"/instrumentation/nav[0]/frequencies/selected-mhz",
1118 props->setBoolValue(
"/instrumentation/nav[0]/in-range", dds->
in_range > 0);
1119 props->setDoubleValue(
"/instrumentation/dme/indicated-distance-nm", dds->
dist_nm );
1120 props->setDoubleValue(
"/instrumentation/nav[0]/heading-needle-deflection",
1122 props->setDoubleValue(
"/instrumentation/nav[0]/gs-needle-deflection",
1125 SG_LOG( SG_IO, SG_ALERT,
1126 "Error: version mismatch in FGNetNativeGUI2Props()" );
1127 SG_LOG( SG_IO, SG_ALERT,
1129 SG_LOG( SG_IO, SG_ALERT,
1130 "\tNeed to upgrade net_fdm.hxx and recompile." );
1139 bool net_byte_order )
1142 SGPropertyNode *node;
1143 SGPropertyNode *fuelpump;
1144 SGPropertyNode *tempnode;
1147 node = props->getNode(
"/controls/flight",
true);
1149 net->
aileron = node->getDoubleValue(
"aileron" );
1150 net->
elevator = node->getDoubleValue(
"elevator" );
1151 net->
rudder = node->getDoubleValue(
"rudder" );
1152 net->
aileron_trim = node->getDoubleValue(
"aileron-trim" );
1153 net->
elevator_trim = node->getDoubleValue(
"elevator-trim" );
1154 net->
rudder_trim = node->getDoubleValue(
"rudder-trim" );
1155 net->
flaps = node->getDoubleValue(
"flaps" );
1156 net->
speedbrake = node->getDoubleValue(
"speedbrake" );
1157 net->
spoilers = node->getDoubleValue(
"spoilers" );
1159 = props->getDoubleValue(
"/systems/electrical/outputs/flaps", 1.0 ) >= 1.0;
1160 net->
flap_motor_ok = node->getBoolValue(
"flaps-serviceable" );
1165 node = props->getNode(
"/controls/engines/engine",
i );
1166 fuelpump = props->getNode(
"/systems/electrical/outputs/fuel-pump",
i );
1168 tempnode = node->getChild(
"starter");
1169 if ( tempnode != NULL ) {
1172 tempnode = node->getChild(
"master-bat");
1173 if ( tempnode != NULL ) {
1176 tempnode = node->getChild(
"master-alt");
1177 if ( tempnode != NULL ) {
1181 net->
throttle[
i] = node->getDoubleValue(
"throttle", 0.0 );
1182 net->
mixture[
i] = node->getDoubleValue(
"mixture", 0.0 );
1183 net->
prop_advance[
i] = node->getDoubleValue(
"propeller-pitch", 0.0 );
1184 net->
condition[
i] = node->getDoubleValue(
"condition", 0.0 );
1185 net->
magnetos[
i] = node->getIntValue(
"magnetos", 0 );
1194 if ( fuelpump != NULL ) {
1201 SGPropertyNode *faults = node->getChild(
"faults", 0,
true );
1202 net->
engine_ok[
i] = faults->getBoolValue(
"serviceable",
true );
1204 = faults->getBoolValue(
"left-magneto-serviceable",
true );
1206 = faults->getBoolValue(
"right-magneto-serviceable",
true);
1208 = faults->getBoolValue(
"spark-plugs-serviceable",
true );
1210 = faults->getIntValue(
"oil-pressure-status", 0 );
1212 = faults->getBoolValue(
"fuel-pump-serviceable",
true );
1216 node = props->getNode(
"/controls/fuel/tank",
i);
1217 if ( node->getChild(
"fuel_selector") != 0 ) {
1219 = node->getChild(
"fuel_selector")->getBoolValue();
1224 node = props->getNode(
"/controls/gear",
true);
1225 net->
brake_left = node->getChild(
"brake-left")->getDoubleValue();
1226 net->
brake_right = node->getChild(
"brake-right")->getDoubleValue();
1228 = node->getChild(
"copilot-brake-left")->getDoubleValue();
1230 = node->getChild(
"copilot-brake-right")->getDoubleValue();
1231 net->
brake_parking = node->getChild(
"brake-parking")->getDoubleValue();
1233 net->
gear_handle = props->getBoolValue(
"/controls/gear/gear-down" );
1235 net->
master_avionics = props->getBoolValue(
"/controls/switches/master-avionics");
1237 net->
wind_speed_kt = props->getDoubleValue(
"/environment/wind-speed-kt");
1238 net->
wind_dir_deg = props->getDoubleValue(
"/environment/wind-from-heading-deg");
1240 props->getDoubleValue(
"/environment/turbulence/magnitude-norm");
1242 net->
temp_c = props->getDoubleValue(
"/environment/temperature-degc");
1243 net->
press_inhg = props->getDoubleValue(
"/environment/pressure-sea-level-inhg");
1245 net->
hground = props->getDoubleValue(
"/position/ground-elev-m");
1246 net->
magvar = props->getDoubleValue(
"/environment/magnetic-variation-deg");
1248 net->
icing = props->getBoolValue(
"/hazards/icing/wing");
1250 net->
speedup = props->getIntValue(
"/sim/speed-up");
1252 if ( honor_freezes ) {
1253 if ( props->getBoolValue(
"/sim/freeze/master") ) {
1256 if ( props->getBoolValue(
"/sim/freeze/position") ) {
1259 if ( props->getBoolValue(
"/sim/freeze/fuel") ) {
1264 if ( net_byte_order ) {
1328 bool net_byte_order )
1332 SGPropertyNode * node;
1334 if ( net_byte_order ) {
1394 SG_LOG( SG_IO, SG_ALERT,
1395 "Version mismatch with raw controls packet format." );
1396 SG_LOG( SG_IO, SG_ALERT,
1398 <<
" but is receiving version = " << net->
version );
1400 node = props->getNode(
"/controls/flight",
true);
1401 node->setDoubleValue(
"aileron", net->
aileron );
1402 node->setDoubleValue(
"elevator", net->
elevator );
1403 node->setDoubleValue(
"rudder", net->
rudder );
1404 node->setDoubleValue(
"aileron-trim", net->
aileron_trim );
1405 node->setDoubleValue(
"elevator-trim", net->
elevator_trim );
1406 node->setDoubleValue(
"rudder-trim", net->
rudder_trim );
1407 node->setDoubleValue(
"flaps", net->
flaps );
1408 node->setDoubleValue(
"speedbrake", net->
speedbrake );
1410 node->setDoubleValue(
"spoilers", net->
spoilers );
1412 props->setBoolValue(
"/systems/electrical/outputs/flaps", net->
flaps_power > 0 );
1413 node->setBoolValue(
"flaps-serviceable", net->
flap_motor_ok > 0 );
1417 node = props->getNode(
"/controls/engines/engine",
i);
1418 node->getChild(
"throttle" )->setDoubleValue( net->
throttle[
i] );
1419 node->getChild(
"mixture" )->setDoubleValue( net->
mixture[
i] );
1420 node->getChild(
"propeller-pitch" )
1422 node->getChild(
"condition" )
1424 node->getChild(
"magnetos" )->setDoubleValue( net->
magnetos[
i] );
1425 node->getChild(
"starter" )->setDoubleValue( net->
starter_power[
i] );
1426 node->getChild(
"feed_tank" )->setIntValue( net->
feed_tank_to[
i] );
1427 node->getChild(
"reverser" )->setBoolValue( net->
reverse[
i] > 0 );
1429 SGPropertyNode *faults = node->getNode(
"faults",
true );
1430 faults->setBoolValue(
"serviceable", net->
engine_ok[
i] > 0 );
1431 faults->setBoolValue(
"left-magneto-serviceable",
1433 faults->setBoolValue(
"right-magneto-serviceable",
1435 faults->setBoolValue(
"spark-plugs-serviceable",
1438 faults->setBoolValue(
"fuel-pump-serviceable", net->
fuel_pump_ok[
i] > 0);
1441 props->setBoolValue(
"/systems/electrical/outputs/fuel-pump",
1445 node = props->getNode(
"/controls/fuel/tank",
i );
1446 node->getChild(
"fuel_selector" )
1450 node = props->getNode(
"/controls/gear" );
1451 if ( node != NULL ) {
1452 node->getChild(
"brake-left" )->setDoubleValue( net->
brake_left );
1453 node->getChild(
"brake-right" )->setDoubleValue( net->
brake_right );
1454 node->getChild(
"copilot-brake-left" )
1456 node->getChild(
"copilot-brake-right" )
1458 node->getChild(
"brake-parking" )->setDoubleValue( net->
brake_parking );
1461 node = props->getNode(
"/controls/gear",
true );
1462 node->setBoolValue(
"gear-down", net->
gear_handle > 0 );
1467 node = props->getNode(
"/controls/switches",
true );
1468 node->setBoolValue(
"master-bat", net->
master_bat[0] != 0 );
1469 node->setBoolValue(
"master-alt", net->
master_alt[0] != 0 );
1472 node = props->getNode(
"/environment",
true );
1473 node->setDoubleValue(
"wind-speed-kt", net->
wind_speed_kt );
1474 node->setDoubleValue(
"wind-from-heading-deg", net->
wind_dir_deg );
1475 node->setDoubleValue(
"turbulence/magnitude-norm", net->
turbulence_norm );
1476 node->setDoubleValue(
"magnetic-variation-deg", net->
magvar );
1478 node->setDoubleValue(
"/environment/temperature-degc",
1480 node->setDoubleValue(
"/environment/pressure-sea-level-inhg",
1485 props->setDoubleValue(
"/hazards/icing/wing", net->
icing);
1487 node = props->getNode(
"/radios",
true );
1488 node->setDoubleValue(
"comm/frequencies/selected-mhz[0]", net->
comm_1 );
1489 node->setDoubleValue(
"nav/frequencies/selected-mhz[0]", net->
nav_1 );
1490 node->setDoubleValue(
"nav[1]/frequencies/selected-mhz[0]", net->
nav_2 );
1492 props->setDoubleValue(
"/sim/speed-up", net->
speedup );
1494 if ( honor_freezes ) {
1495 node = props->getNode(
"/sim/freeze",
true );
1496 node->setBoolValue(
"master", (net->
freeze & 0x01) > 0 );
1497 node->setBoolValue(
"position", (net->
freeze & 0x02) > 0 );
1498 node->setBoolValue(
"fuel", (net->
freeze & 0x04) > 0 );
1508 SGPropertyNode *node;
1509 SGPropertyNode *fuelpump;
1510 SGPropertyNode *tempnode;
1513 node = props->getNode(
"/controls/flight",
true);
1515 dds->
aileron = node->getDoubleValue(
"aileron" );
1516 dds->
elevator = node->getDoubleValue(
"elevator" );
1517 dds->
rudder = node->getDoubleValue(
"rudder" );
1518 dds->
aileron_trim = node->getDoubleValue(
"aileron-trim" );
1519 dds->
elevator_trim = node->getDoubleValue(
"elevator-trim" );
1520 dds->
rudder_trim = node->getDoubleValue(
"rudder-trim" );
1521 dds->
flaps = node->getDoubleValue(
"flaps" );
1522 dds->
speedbrake = node->getDoubleValue(
"speedbrake" );
1523 dds->
spoilers = node->getDoubleValue(
"spoilers" );
1525 = props->getDoubleValue(
"/systems/electrical/outputs/flaps", 1.0 ) >= 1.0;
1526 dds->
flap_motor_ok = node->getBoolValue(
"flaps-serviceable" );
1531 node = props->getNode(
"/controls/engines/engine",
i );
1532 fuelpump = props->getNode(
"/systems/electrical/outputs/fuel-pump",
i );
1534 tempnode = node->getChild(
"starter");
1535 if ( tempnode != NULL ) {
1538 tempnode = node->getChild(
"master-bat");
1539 if ( tempnode != NULL ) {
1542 tempnode = node->getChild(
"master-alt");
1543 if ( tempnode != NULL ) {
1547 dds->
throttle[
i] = node->getDoubleValue(
"throttle", 0.0 );
1548 dds->
mixture[
i] = node->getDoubleValue(
"mixture", 0.0 );
1549 dds->
prop_advance[
i] = node->getDoubleValue(
"propeller-pitch", 0.0 );
1550 dds->
condition[
i] = node->getDoubleValue(
"condition", 0.0 );
1551 dds->
magnetos[
i] = node->getIntValue(
"magnetos", 0 );
1560 if ( fuelpump != NULL ) {
1567 SGPropertyNode *faults = node->getChild(
"faults", 0,
true );
1568 dds->
engine_ok[
i] = faults->getBoolValue(
"serviceable",
true );
1570 = faults->getBoolValue(
"left-magneto-serviceable",
true );
1572 = faults->getBoolValue(
"right-magneto-serviceable",
true);
1574 = faults->getBoolValue(
"spark-plugs-serviceable",
true );
1576 = faults->getIntValue(
"oil-pressure-status", 0 );
1578 = faults->getBoolValue(
"fuel-pump-serviceable",
true );
1582 node = props->getNode(
"/controls/fuel/tank",
i);
1583 if ( node->getChild(
"fuel_selector") != 0 ) {
1585 = node->getChild(
"fuel_selector")->getBoolValue();
1590 node = props->getNode(
"/controls/gear",
true);
1591 dds->
brake_left = node->getChild(
"brake-left")->getDoubleValue();
1592 dds->
brake_right = node->getChild(
"brake-right")->getDoubleValue();
1594 = node->getChild(
"copilot-brake-left")->getDoubleValue();
1596 = node->getChild(
"copilot-brake-right")->getDoubleValue();
1597 dds->
brake_parking = node->getChild(
"brake-parking")->getDoubleValue();
1599 dds->
gear_handle = props->getBoolValue(
"/controls/gear/gear-down" );
1601 dds->
master_avionics = props->getBoolValue(
"/controls/switches/master-avionics");
1603 dds->
wind_speed_kt = props->getDoubleValue(
"/environment/wind-speed-kt");
1604 dds->
wind_dir_deg = props->getDoubleValue(
"/environment/wind-from-heading-deg");
1606 props->getDoubleValue(
"/environment/turbulence/magnitude-norm");
1608 dds->
temp_c = props->getDoubleValue(
"/environment/temperature-degc");
1609 dds->
press_inhg = props->getDoubleValue(
"/environment/pressure-sea-level-inhg");
1611 dds->
hground = props->getDoubleValue(
"/position/ground-elev-m");
1612 dds->
magvar = props->getDoubleValue(
"/environment/magnetic-variation-deg");
1614 dds->
icing = props->getBoolValue(
"/hazards/icing/wing");
1616 dds->
speedup = props->getIntValue(
"/sim/speed-up");
1618 if ( honor_freezes ) {
1619 if ( props->getBoolValue(
"/sim/freeze/master") ) {
1622 if ( props->getBoolValue(
"/sim/freeze/position") ) {
1625 if ( props->getBoolValue(
"/sim/freeze/fuel") ) {
1637 SGPropertyNode * node;
1640 SG_LOG( SG_IO, SG_ALERT,
1641 "Version mismatch with raw controls packet format." );
1642 SG_LOG( SG_IO, SG_ALERT,
1644 <<
" but is receiving version = " << dds->
version );
1646 node = props->getNode(
"/controls/flight",
true);
1647 node->setDoubleValue(
"aileron", dds->
aileron );
1648 node->setDoubleValue(
"elevator", dds->
elevator );
1649 node->setDoubleValue(
"rudder", dds->
rudder );
1650 node->setDoubleValue(
"aileron-trim", dds->
aileron_trim );
1651 node->setDoubleValue(
"elevator-trim", dds->
elevator_trim );
1652 node->setDoubleValue(
"rudder-trim", dds->
rudder_trim );
1653 node->setDoubleValue(
"flaps", dds->
flaps );
1654 node->setDoubleValue(
"speedbrake", dds->
speedbrake );
1656 node->setDoubleValue(
"spoilers", dds->
spoilers );
1658 props->setBoolValue(
"/systems/electrical/outputs/flaps", dds->
flaps_power > 0 );
1659 node->setBoolValue(
"flaps-serviceable", dds->
flap_motor_ok > 0 );
1663 node = props->getNode(
"/controls/engines/engine",
i);
1664 node->getChild(
"throttle" )->setDoubleValue( dds->
throttle[
i] );
1665 node->getChild(
"mixture" )->setDoubleValue( dds->
mixture[
i] );
1666 node->getChild(
"propeller-pitch" )
1668 node->getChild(
"condition" )
1670 node->getChild(
"magnetos" )->setDoubleValue( dds->
magnetos[
i] );
1671 node->getChild(
"starter" )->setDoubleValue( dds->
starter_power[
i] );
1672 node->getChild(
"feed_tank" )->setIntValue( dds->
feed_tank_to[
i] );
1673 node->getChild(
"reverser" )->setBoolValue( dds->
reverse[
i] > 0 );
1675 SGPropertyNode *faults = node->getNode(
"faults",
true );
1676 faults->setBoolValue(
"serviceable", dds->
engine_ok[
i] > 0 );
1677 faults->setBoolValue(
"left-magneto-serviceable",
1679 faults->setBoolValue(
"right-magneto-serviceable",
1681 faults->setBoolValue(
"spark-plugs-serviceable",
1684 faults->setBoolValue(
"fuel-pump-serviceable", dds->
fuel_pump_ok[
i] > 0);
1687 props->setBoolValue(
"/systems/electrical/outputs/fuel-pump",
1691 node = props->getNode(
"/controls/fuel/tank",
i );
1692 node->getChild(
"fuel_selector" )
1696 node = props->getNode(
"/controls/gear" );
1697 if ( node != NULL ) {
1698 node->getChild(
"brake-left" )->setDoubleValue( dds->
brake_left );
1699 node->getChild(
"brake-right" )->setDoubleValue( dds->
brake_right );
1700 node->getChild(
"copilot-brake-left" )
1702 node->getChild(
"copilot-brake-right" )
1704 node->getChild(
"brake-parking" )->setDoubleValue( dds->
brake_parking );
1707 node = props->getNode(
"/controls/gear",
true );
1708 node->setBoolValue(
"gear-down", dds->
gear_handle > 0 );
1713 node = props->getNode(
"/controls/switches",
true );
1714 node->setBoolValue(
"master-bat", dds->
master_bat[0] != 0 );
1715 node->setBoolValue(
"master-alt", dds->
master_alt[0] != 0 );
1718 node = props->getNode(
"/environment",
true );
1719 node->setDoubleValue(
"wind-speed-kt", dds->
wind_speed_kt );
1720 node->setDoubleValue(
"wind-from-heading-deg", dds->
wind_dir_deg );
1721 node->setDoubleValue(
"turbulence/magnitude-norm", dds->
turbulence_norm );
1722 node->setDoubleValue(
"magnetic-variation-deg", dds->
magvar );
1724 node->setDoubleValue(
"/environment/temperature-degc",
1726 node->setDoubleValue(
"/environment/pressure-sea-level-inhg",
1731 props->setDoubleValue(
"/hazards/icing/wing", dds->
icing);
1733 node = props->getNode(
"/radios",
true );
1734 node->setDoubleValue(
"comm/frequencies/selected-mhz[0]", dds->
comm_1 );
1735 node->setDoubleValue(
"nav/frequencies/selected-mhz[0]", dds->
nav_1 );
1736 node->setDoubleValue(
"nav[1]/frequencies/selected-mhz[0]", dds->
nav_2 );
1738 props->setDoubleValue(
"/sim/speed-up", dds->
speedup );
1740 if ( honor_freezes ) {
1741 node = props->getNode(
"/sim/freeze",
true );
1742 node->setBoolValue(
"master", (dds->
freeze & 0x01) > 0 );
1743 node->setBoolValue(
"position", (dds->
freeze & 0x02) > 0 );
1744 node->setBoolValue(
"fuel", (dds->
freeze & 0x04) > 0 );
double copilot_brake_left
uint32_t fuel_pump_ok[FG_MAX_ENGINES]
uint32_t starter_power[FG_MAX_ENGINES]
double mixture[FG_MAX_ENGINES]
double copilot_brake_right
double prop_advance[FG_MAX_ENGINES]
uint32_t master_bat[FG_MAX_ENGINES]
double condition[FG_MAX_ENGINES]
uint32_t master_alt[FG_MAX_ENGINES]
uint32_t mag_left_ok[FG_MAX_ENGINES]
uint32_t engine_ok[FG_MAX_ENGINES]
uint32_t fuel_selector[FG_MAX_TANKS]
uint32_t mag_right_ok[FG_MAX_ENGINES]
uint32_t spark_plugs_ok[FG_MAX_ENGINES]
double throttle[FG_MAX_ENGINES]
uint32_t oil_press_status[FG_MAX_ENGINES]
uint32_t fuel_pump_power[FG_MAX_ENGINES]
uint32_t magnetos[FG_MAX_ENGINES]
uint32_t wow[FG_MAX_WHEELS]
float cht[FG_MAX_ENGINES]
float fuel_flow[FG_MAX_ENGINES]
float mp_osi[FG_MAX_ENGINES]
float gear_steer[FG_MAX_WHEELS]
float gear_pos[FG_MAX_WHEELS]
float tit[FG_MAX_ENGINES]
float egt[FG_MAX_ENGINES]
float oil_temp[FG_MAX_ENGINES]
float rpm[FG_MAX_ENGINES]
uint32_t eng_state[FG_MAX_ENGINES]
float gear_compression[FG_MAX_WHEELS]
float fuel_quantity[FG_MAX_TANKS]
float fuel_px[FG_MAX_ENGINES]
float oil_px[FG_MAX_ENGINES]
float course_deviation_deg
float fuel_quantity[FG_MAX_TANKS]
#define FG_DDS_CTRLS_VERSION
#define FG_DDS_FDM_VERSION
#define FG_DDS_GUI_VERSION
void FGGUI2Props< FGNetGUI >(SGPropertyNode *props, FGNetGUI *net)
void FGProps2Ctrls< FGNetCtrls >(SGPropertyNode *props, FGNetCtrls *net, bool honor_freezes, bool net_byte_order)
void FGCtrls2Props< FGNetCtrls >(SGPropertyNode *props, FGNetCtrls *net, bool honor_freezes, bool net_byte_order)
static void htond(double &x)
void FGFDM2Props< FGNetFDM >(SGPropertyNode *props, FGNetFDM *net, bool net_byte_order)
void FGProps2GUI< FGNetGUI >(SGPropertyNode *props, FGNetGUI *net)
void FGProps2FDM< FGNetFDM >(SGPropertyNode *props, FGNetFDM *net, bool net_byte_order)
static void htonf(float &x)
void FGCtrls2Props(SGPropertyNode *props, T *net, bool honor_freezes, bool net_byte_order)
void FGGUI2Props(SGPropertyNode *props, T *net)
void FGProps2GUI(SGPropertyNode *props, T *net)
void FGProps2Ctrls(SGPropertyNode *props, T *net, bool honor_freezes, bool net_byte_order)
void FGProps2FDM(SGPropertyNode *props, T *net, bool net_byte_order=true)
void FGFDM2Props(SGPropertyNode *props, T *net, bool net_byte_order=true)
const uint32_t FG_NET_CTRLS_VERSION
const uint32_t FG_NET_GUI_VERSION
uint16_t fuel_selector[8]
float copilot_brake_right
uint16_t oil_press_status[4]
uint32_t starter_power[4]
uint32_t fuel_pump_power[4]
float gear_compression[16]
float course_deviation_deg