Skip to content

Commit

Permalink
Create Struct directly in interface files, rather than using a dict a…
Browse files Browse the repository at this point in the history
…nd creating the Struct in fg_if
  • Loading branch information
julianneswinoga committed Jan 21, 2024
1 parent a88f5bc commit 091519b
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 220 deletions.
124 changes: 62 additions & 62 deletions flightgear_python/ctrls_v27.py
Expand Up @@ -4,7 +4,7 @@
See https://github.com/FlightGear/flightgear/blob/619226e9d069d2a3e8ebf8658fb5441ca8a2c233/src/Network/net_ctrls.hxx
"""

from construct import Array, Enum, Const, Bytes, Int32ub, Float64b, BitStruct, Bit, BitsInteger
from construct import Struct, Array, Enum, Const, Bytes, Int32ub, Float64b, BitStruct, Bit, BitsInteger

RESERVED_SPACE = 25 #: Constant value from define

Expand All @@ -14,70 +14,70 @@

# Big endian
#: Ctrls v27 structure
ctrls_struct = {
'version': Const(27, Int32ub),
'_padding0': Bytes(4), # TODO: Not documented, probably due to struct packing
'aileron': Float64b, # -1 ... 1
'elevator': Float64b, # -1 ... 1
'rudder': Float64b, # -1 ... 1
'aileron_trim': Float64b, # -1 ... 1
'elevator_trim': Float64b, # -1 ... 1
'rudder_trim': Float64b, # -1 ... 1
'flaps': Float64b, # 0 ... 1
'spoilers': Float64b,
'speedbrake': Float64b,
'flaps_power': Enum(Int32ub, unavailable=0, available=1),
'flap_motor_ok': Int32ub,
'num_engines': Int32ub,
'master_bat': Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'master_alt': Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'magnetos': Array(FG_MAX_ENGINES, Int32ub),
'starter_power': Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
ctrls_struct = Struct(
'version' / Const(27, Int32ub),
'_padding0' / Bytes(4), # TODO: Not documented, probably due to struct packing
'aileron' / Float64b, # -1 ... 1
'elevator' / Float64b, # -1 ... 1
'rudder' / Float64b, # -1 ... 1
'aileron_trim' / Float64b, # -1 ... 1
'elevator_trim' / Float64b, # -1 ... 1
'rudder_trim' / Float64b, # -1 ... 1
'flaps' / Float64b, # 0 ... 1
'spoilers' / Float64b,
'speedbrake' / Float64b,
'flaps_power' / Enum(Int32ub, unavailable=0, available=1),
'flap_motor_ok' / Int32ub,
'num_engines' / Int32ub,
'master_bat' / Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'master_alt' / Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'magnetos' / Array(FG_MAX_ENGINES, Int32ub),
'starter_power' / Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
# throttle needs to be moved forward 1 double?
'_padding3': Bytes(4), # TODO: Not documented, probably due to struct packing
'throttle': Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'mixture': Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'condition': Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'fuel_pump_power': Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'prop_advance': Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'feed_tank_to': Array(4, Int32ub),
'reverse': Array(4, Int32ub),
'engine_ok': Array(FG_MAX_ENGINES, Int32ub),
'mag_left_ok': Array(FG_MAX_ENGINES, Int32ub),
'mag_right_ok': Array(FG_MAX_ENGINES, Int32ub),
'spark_plugs_ok': Array(FG_MAX_ENGINES, Enum(Int32ub, fouled=0, ok=1)),
'oil_press_status': Array(FG_MAX_ENGINES, Enum(Int32ub, normal=0, low=1, full_fail=2)),
'fuel_pump_ok': Array(FG_MAX_ENGINES, Int32ub),
'num_tanks': Int32ub,
'fuel_selector': Array(FG_MAX_TANKS, Enum(Int32ub, off=0, on=1)),
'xfer_pump': Array(5, Int32ub), # specifies transfer from array value tank to tank specified by int value
'cross_feed': Enum(Int32ub, off=0, on=1),
'_padding4': Bytes(4), # TODO: Not documented, probably due to struct packing
'brake_left': Float64b,
'brake_right': Float64b,
'copilot_brake_left': Float64b,
'copilot_brake_right': Float64b,
'brake_parking': Float64b,
'gear_handle': Enum(Int32ub, up=0, down=1),
'master_avionics': Enum(Int32ub, off=0, on=1),
'comm_1_MHz': Float64b, # TODO: Frequencies are all screwed up. Garbage data
'comm_2_MHz': Float64b,
'nav_1_MHz': Float64b,
'nav_2_MHz': Float64b,
'wind_speed_kt': Float64b,
'wind_dir_deg': Float64b,
'turbulence_norm': Float64b,
'temp_c': Float64b,
'press_inhg': Float64b,
'hground_m': Float64b, # ground elevation
'magvar_deg': Float64b, # local magnetic variation
'icing': Int32ub,
'speedup': Int32ub, # integer speedup multiplier
'freeze': BitStruct( # Default is big-endian
'_padding3' / Bytes(4), # TODO: Not documented, probably due to struct packing
'throttle' / Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'mixture' / Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'condition' / Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'fuel_pump_power' / Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, on=1)),
'prop_advance' / Array(FG_MAX_ENGINES, Float64b), # 0 ... 1
'feed_tank_to' / Array(4, Int32ub),
'reverse' / Array(4, Int32ub),
'engine_ok' / Array(FG_MAX_ENGINES, Int32ub),
'mag_left_ok' / Array(FG_MAX_ENGINES, Int32ub),
'mag_right_ok' / Array(FG_MAX_ENGINES, Int32ub),
'spark_plugs_ok' / Array(FG_MAX_ENGINES, Enum(Int32ub, fouled=0, ok=1)),
'oil_press_status' / Array(FG_MAX_ENGINES, Enum(Int32ub, normal=0, low=1, full_fail=2)),
'fuel_pump_ok' / Array(FG_MAX_ENGINES, Int32ub),
'num_tanks' / Int32ub,
'fuel_selector' / Array(FG_MAX_TANKS, Enum(Int32ub, off=0, on=1)),
'xfer_pump' / Array(5, Int32ub), # specifies transfer from array value tank to tank specified by int value
'cross_feed' / Enum(Int32ub, off=0, on=1),
'_padding4' / Bytes(4), # TODO: Not documented, probably due to struct packing
'brake_left' / Float64b,
'brake_right' / Float64b,
'copilot_brake_left' / Float64b,
'copilot_brake_right' / Float64b,
'brake_parking' / Float64b,
'gear_handle' / Enum(Int32ub, up=0, down=1),
'master_avionics' / Enum(Int32ub, off=0, on=1),
'comm_1_MHz' / Float64b, # TODO: Frequencies are all screwed up. Garbage data
'comm_2_MHz' / Float64b,
'nav_1_MHz' / Float64b,
'nav_2_MHz' / Float64b,
'wind_speed_kt' / Float64b,
'wind_dir_deg' / Float64b,
'turbulence_norm' / Float64b,
'temp_c' / Float64b,
'press_inhg' / Float64b,
'hground_m' / Float64b, # ground elevation
'magvar_deg' / Float64b, # local magnetic variation
'icing' / Int32ub,
'speedup' / Int32ub, # integer speedup multiplier
'freeze' / BitStruct( # Default is big-endian
other=BitsInteger((Int32ub.sizeof() * 8) - 3), # Rest of uint32 minus the 3 flags
fuel=Bit,
position=Bit,
master=Bit,
),
'_reserved': Bytes(Int32ub.length * RESERVED_SPACE),
}
'_reserved' / Bytes(Int32ub.length * RESERVED_SPACE),
)
122 changes: 61 additions & 61 deletions flightgear_python/fdm_v24.py
Expand Up @@ -4,71 +4,71 @@
See https://github.com/FlightGear/flightgear/blob/00efc0960f880b50ed25eba4bc15a0ff84abaf9f/src/Network/net_fdm.hxx
"""

from construct import Array, Enum, Const, Bytes, Int32ub, Int32sb, Float64b, Float32b
from construct import Struct, Array, Enum, Const, Bytes, Int32ub, Int32sb, Float64b, Float32b

FG_MAX_ENGINES = 4 #: Constant value from enum
FG_MAX_WHEELS = 3 #: Constant value from enum
FG_MAX_TANKS = 4 #: Constant value from enum

# Big endian
#: FDM v24 structure
fdm_struct = {
'version': Const(24, Int32ub),
'_padding': Bytes(4),
'lon_rad': Float64b,
'lat_rad': Float64b,
'alt_m': Float64b,
'agl_m': Float32b,
'phi_rad': Float32b,
'theta_rad': Float32b,
'psi_rad': Float32b,
'alpha_rad': Float32b,
'beta_rad': Float32b,
'phidot_rad_per_s': Float32b,
'thetadot_rad_per_s': Float32b,
'psidot_rad_per_s': Float32b,
'vcas': Float32b, # calibrated airspeed
'climb_rate_ft_per_s': Float32b,
'v_north_ft_per_s': Float32b,
'v_east_ft_per_s': Float32b,
'v_down_ft_per_s': Float32b,
'v_body_u': Float32b, # ECEF velocity in body frame
'v_body_v': Float32b, # ECEF velocity in body frame
'v_body_w': Float32b, # ECEF velocity in body frame
'A_X_pilot_ft_per_s_per_s': Float32b,
'A_Y_pilot_ft_per_s_per_s': Float32b,
'A_Z_pilot_ft_per_s_per_s': Float32b,
'stall_warning': Float32b, # 0.0 - 1.0 indicating the amount of stall
'slip_deg': Float32b, # slip ball deflection
'num_engines': Int32ub,
'eng_state': Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, cranking=1, running=2)), # Engine state
'rpm': Array(FG_MAX_ENGINES, Float32b),
'fuel_flow_gal_per_hr': Array(FG_MAX_ENGINES, Float32b),
'fuel_px_psi': Array(FG_MAX_ENGINES, Float32b),
'egt_deg_F': Array(FG_MAX_ENGINES, Float32b),
'cht_deg_F': Array(FG_MAX_ENGINES, Float32b),
'mp_osi': Array(FG_MAX_ENGINES, Float32b), # Manifold pressure
'tit': Array(FG_MAX_ENGINES, Float32b), # Turbine Inlet Temperature
'oil_temp_deg_F': Array(FG_MAX_ENGINES, Float32b),
'oil_px_psi': Array(FG_MAX_ENGINES, Float32b),
'num_tanks': Int32ub, # Max number of fuel tanks
'fuel_quantity': Array(FG_MAX_TANKS, Float32b),
'num_wheels': Int32ub,
'wow': Array(FG_MAX_WHEELS, Int32ub),
'gear_pos': Array(FG_MAX_WHEELS, Float32b),
'gear_steer': Array(FG_MAX_WHEELS, Float32b),
'gear_compression': Array(FG_MAX_WHEELS, Float32b),
'cur_time_s': Int32ub, # current unix time
'warp_s': Int32sb, # offset in seconds to unix time
'visibility_m': Float32b,
'elevator': Float32b,
'elevator_trim_tab': Float32b,
'left_flap': Float32b,
'right_flap': Float32b,
'left_aileron': Float32b,
'right_aileron': Float32b,
'rudder': Float32b,
'nose_wheel': Float32b,
'speedbrake': Float32b,
'spoilers': Float32b,
}
fdm_struct = Struct(
'version' / Const(24, Int32ub),
'_padding' / Bytes(4),
'lon_rad' / Float64b,
'lat_rad' / Float64b,
'alt_m' / Float64b,
'agl_m' / Float32b,
'phi_rad' / Float32b,
'theta_rad' / Float32b,
'psi_rad' / Float32b,
'alpha_rad' / Float32b,
'beta_rad' / Float32b,
'phidot_rad_per_s' / Float32b,
'thetadot_rad_per_s' / Float32b,
'psidot_rad_per_s' / Float32b,
'vcas' / Float32b, # calibrated airspeed
'climb_rate_ft_per_s' / Float32b,
'v_north_ft_per_s' / Float32b,
'v_east_ft_per_s' / Float32b,
'v_down_ft_per_s' / Float32b,
'v_body_u' / Float32b, # ECEF velocity in body frame
'v_body_v' / Float32b, # ECEF velocity in body frame
'v_body_w' / Float32b, # ECEF velocity in body frame
'A_X_pilot_ft_per_s_per_s' / Float32b,
'A_Y_pilot_ft_per_s_per_s' / Float32b,
'A_Z_pilot_ft_per_s_per_s' / Float32b,
'stall_warning' / Float32b, # 0.0 - 1.0 indicating the amount of stall
'slip_deg' / Float32b, # slip ball deflection
'num_engines' / Int32ub,
'eng_state' / Array(FG_MAX_ENGINES, Enum(Int32ub, off=0, cranking=1, running=2)), # Engine state
'rpm' / Array(FG_MAX_ENGINES, Float32b),
'fuel_flow_gal_per_hr' / Array(FG_MAX_ENGINES, Float32b),
'fuel_px_psi' / Array(FG_MAX_ENGINES, Float32b),
'egt_deg_F' / Array(FG_MAX_ENGINES, Float32b),
'cht_deg_F' / Array(FG_MAX_ENGINES, Float32b),
'mp_osi' / Array(FG_MAX_ENGINES, Float32b), # Manifold pressure
'tit' / Array(FG_MAX_ENGINES, Float32b), # Turbine Inlet Temperature
'oil_temp_deg_F' / Array(FG_MAX_ENGINES, Float32b),
'oil_px_psi' / Array(FG_MAX_ENGINES, Float32b),
'num_tanks' / Int32ub, # Max number of fuel tanks
'fuel_quantity' / Array(FG_MAX_TANKS, Float32b),
'num_wheels' / Int32ub,
'wow' / Array(FG_MAX_WHEELS, Int32ub),
'gear_pos' / Array(FG_MAX_WHEELS, Float32b),
'gear_steer' / Array(FG_MAX_WHEELS, Float32b),
'gear_compression' / Array(FG_MAX_WHEELS, Float32b),
'cur_time_s' / Int32ub, # current unix time
'warp_s' / Int32sb, # offset in seconds to unix time
'visibility_m' / Float32b,
'elevator' / Float32b,
'elevator_trim_tab' / Float32b,
'left_flap' / Float32b,
'right_flap' / Float32b,
'left_aileron' / Float32b,
'right_aileron' / Float32b,
'rudder' / Float32b,
'nose_wheel' / Float32b,
'speedbrake' / Float32b,
'spoilers' / Float32b,
)

0 comments on commit 091519b

Please sign in to comment.