diff --git a/Python/src/example.py b/Python/src/example.py new file mode 100644 index 0000000..f381e5d --- /dev/null +++ b/Python/src/example.py @@ -0,0 +1,72 @@ +from time import sleep +import xpc + +def ex(): + print "X-Plane Connect example script" + print "Setting up simulation" + with xpc.XPlaneConnect() as client: + # Verify connection + try: + # If X-Plane does not respond to the request, a timeout error + # will be raised. + client.getDREF("sim/test/test_float") + except: + print "Error establishing connection to X-Plane." + print "Exiting..." + return + + # Set position of the player aircraft + print "Setting position" + # Lat Lon Alt Pitch Roll Yaw Gear + posi = [37.524, -122.06899, 2500, 0, 0, 0, 1] + client.sendPOSI(posi) + + # Set position of a non-player aircraft + print "Setting NPC position" + # Lat Lon Alt Pitch Roll Yaw Gear + posi = [37.52465, -122.06899, 2500, 0, 20, 0, 1] + client.sendPOSI(posi, 1) + + # Set angle of attack, velocity, and orientation using the DATA command + print "Setting orientation" + data = [\ + [18, 0, -998, 0, -998, -998, -998, -998, -998],\ + [ 3, 130, 130, 130, 130, -998, -998, -998, -998],\ + [16, 0, 0, 0, -998, -998, -998, -998, -998]\ + ] + client.sendDATA(data) + + # Set control surfaces and throttle of the player aircraft using sendCTRL + print "Setting controls" + ctrl = [0.0, 0.0, 0.0, 0.8] + client.sendCTRL(ctrl) + + # Pause the sim + print "Pausing" + client.pauseSim(True) + sleep(2) + + # Toggle pause state to resume + print "Resuming" + client.pauseSim(False) + + # Stow landing gear using a dataref + print "Stowing gear" + gear_dref = "sim/cockpit/switches/gear_handle_status" + client.sendDREF(gear_dref, 0) + + # Let the sim run for a bit. + sleep(4) + + # Make sure gear was stowed successfully + gear_status = client.getDREF(gear_dref) + if gear_status[0] == 0: + print "Gear stowed" + else: + print "Error stowing gear" + + print "End of Python client example" + raw_input("Press any key to exit...") + +if __name__ == "__main__": + ex() \ No newline at end of file diff --git a/Python/src/xpc.py b/Python/src/xpc.py index 5138d55..13d3bbd 100644 --- a/Python/src/xpc.py +++ b/Python/src/xpc.py @@ -43,6 +43,13 @@ class XPlaneConnect(object): def __del__(self): self.close() + # Define __enter__ and __exit__ to support the `with` construct. + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + def close(self): '''Closes the specified connection and releases resources associated with it.''' if self.socket is not None: @@ -117,7 +124,7 @@ class XPlaneConnect(object): if len(data) > 134: raise ValueError("Too many rows in data.") - buffer = struct.pack("<4sxB", "DATA", len(data)) + buffer = struct.pack("<4sx", "DATA") for row in data: if len(row) != 9: raise ValueError("Row does not contain exactly 9 values. <" + str(row) + ">") diff --git a/Python/xplaneConnect.pyproj b/Python/xplaneConnect.pyproj index 0919359..c288a9c 100644 --- a/Python/xplaneConnect.pyproj +++ b/Python/xplaneConnect.pyproj @@ -5,7 +5,7 @@ 2.0 3c7a940d-17c8-4e91-882f-9bc8b1d2f54b . - src\xpc.py + src\example.py .