Merge branch 'playback-example' into develop
This commit is contained in:
71
C/playbackExample/src/chrome.c
Normal file
71
C/playbackExample/src/chrome.c
Normal file
@@ -0,0 +1,71 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
//
|
||||
//DISCLAIMERS
|
||||
// No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND,
|
||||
// EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
|
||||
// THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY
|
||||
// THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED,
|
||||
// WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN
|
||||
// ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS,
|
||||
// HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT
|
||||
// SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
|
||||
// THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS."
|
||||
//
|
||||
// Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES
|
||||
// GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
|
||||
// RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES
|
||||
// OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING
|
||||
// FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE
|
||||
// UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT,
|
||||
// TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
|
||||
// IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
#include "chrome.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void displayStart(char* version)
|
||||
{
|
||||
printf("X-Plane Connect Playback Example [Version %s]\n", version);
|
||||
printf("(c) 2013-2015 United States Government as represented by the Administrator\n");
|
||||
printf("of the National Aeronautics and Space Administration. All Rights Reserved.\n");
|
||||
}
|
||||
|
||||
int displayMenu(char* title, char* opts[], size_t count)
|
||||
{
|
||||
printf("\n");
|
||||
printf("+---------------------------------------------- +\n");
|
||||
printf("| %-42s |\n", title);
|
||||
printf("+---------------------------------------------- +\n");
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
printf("| %2u. %-40s |\n", i + 1, opts[i]);
|
||||
}
|
||||
printf("+---------------------------------------------- +\n");
|
||||
printf("Please select an option: ");
|
||||
|
||||
int opt;
|
||||
scanf("%d", &opt);
|
||||
return opt;
|
||||
}
|
||||
|
||||
void displayMsg(char* msg)
|
||||
{
|
||||
printf("%s\n", msg);
|
||||
}
|
||||
|
||||
void getString(char* prompt, char buffer[255])
|
||||
{
|
||||
printf("%s: ", prompt);
|
||||
scanf("%255s", buffer);
|
||||
}
|
||||
|
||||
int getInt(char* prompt)
|
||||
{
|
||||
printf("%s: ", prompt);
|
||||
int result;
|
||||
scanf("%d", &result);
|
||||
return result;
|
||||
}
|
||||
40
C/playbackExample/src/chrome.h
Normal file
40
C/playbackExample/src/chrome.h
Normal file
@@ -0,0 +1,40 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
//
|
||||
//DISCLAIMERS
|
||||
// No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND,
|
||||
// EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
|
||||
// THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY
|
||||
// THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED,
|
||||
// WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN
|
||||
// ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS,
|
||||
// HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT
|
||||
// SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
|
||||
// THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS."
|
||||
//
|
||||
// Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES
|
||||
// GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
|
||||
// RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES
|
||||
// OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING
|
||||
// FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE
|
||||
// UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT,
|
||||
// TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
|
||||
// IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
#ifndef XPC_PLAYBACKEX_CHROME_H_
|
||||
#define XPC_PLAYBACKEX_CHROME_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
void displayStart(char* version);
|
||||
|
||||
int displayMenu(char* title, char* opts[], size_t count);
|
||||
|
||||
void displayMsg(char* msg);
|
||||
|
||||
void getString(char* prompt, char buffer[255]);
|
||||
|
||||
int getInt(char* prompt);
|
||||
|
||||
#endif
|
||||
70
C/playbackExample/src/main.c
Normal file
70
C/playbackExample/src/main.c
Normal file
@@ -0,0 +1,70 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
//
|
||||
//DISCLAIMERS
|
||||
// No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND,
|
||||
// EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
|
||||
// THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY
|
||||
// THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED,
|
||||
// WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN
|
||||
// ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS,
|
||||
// HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT
|
||||
// SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
|
||||
// THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS."
|
||||
//
|
||||
// Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES
|
||||
// GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
|
||||
// RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES
|
||||
// OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING
|
||||
// FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE
|
||||
// UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT,
|
||||
// TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
|
||||
// IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
#include "chrome.h"
|
||||
#include "playback.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char* mainOpts[3] =
|
||||
{
|
||||
"Record X-Plane",
|
||||
"Playback File",
|
||||
"Exit"
|
||||
};
|
||||
char path[256] = { 0 };
|
||||
|
||||
displayStart("1.2.0.0");
|
||||
while (1)
|
||||
{
|
||||
switch (displayMenu("What would you like to do?", mainOpts, 3))
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
getString("Enter save file path", path);
|
||||
int interval = getInt("Enter interval between frames (milliseconds)");
|
||||
int duration = getInt("Enter duration to record for (seconds)");
|
||||
|
||||
record(path, interval, duration);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
getString("Enter path to saved playback file", path);
|
||||
int interval = getInt("Enter interval between frames (milliseconds)");
|
||||
|
||||
playback(path, interval);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
displayMsg("Exiting.");
|
||||
return 0;
|
||||
default:
|
||||
displayMsg("Unrecognized option.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
106
C/playbackExample/src/playback.c
Normal file
106
C/playbackExample/src/playback.c
Normal file
@@ -0,0 +1,106 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
//
|
||||
//DISCLAIMERS
|
||||
// No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND,
|
||||
// EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
|
||||
// THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY
|
||||
// THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED,
|
||||
// WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN
|
||||
// ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS,
|
||||
// HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT
|
||||
// SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
|
||||
// THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS."
|
||||
//
|
||||
// Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES
|
||||
// GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
|
||||
// RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES
|
||||
// OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING
|
||||
// FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE
|
||||
// UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT,
|
||||
// TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
|
||||
// IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
#include "playback.h"
|
||||
|
||||
#include "chrome.h"
|
||||
|
||||
#include "xplaneConnect.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
void playbackSleep(int ms)
|
||||
{
|
||||
#ifdef WIN32
|
||||
Sleep(ms);
|
||||
#else
|
||||
uSleep(ms * 1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
void record(char* path, int interval, int duration)
|
||||
{
|
||||
FILE* fd = fopen(path, "w");
|
||||
int count = duration * 1000 / interval;
|
||||
if (!fd)
|
||||
{
|
||||
displayMsg("Unable to open output file.");
|
||||
return;
|
||||
}
|
||||
if (count < 1)
|
||||
{
|
||||
displayMsg("Duration is less than one iteration.");
|
||||
return;
|
||||
}
|
||||
displayMsg("Recording...");
|
||||
|
||||
XPCSocket sock = openUDP("127.0.0.1");
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
float posi[7];
|
||||
int result = getPOSI(sock, posi, 0);
|
||||
playbackSleep(interval);
|
||||
if (result < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
fprintf(fd, "%f, %f, %f, %f, %f, %f, %f\n", posi[0], posi[1], posi[2], posi[3], posi[4], posi[5], posi[6]);
|
||||
}
|
||||
closeUDP(sock);
|
||||
displayMsg("Recording Complete");
|
||||
}
|
||||
|
||||
void playback(char* path, int interval)
|
||||
{
|
||||
FILE* fd = fopen(path, "r");
|
||||
if (!fd)
|
||||
{
|
||||
displayMsg("Unable to open output file.");
|
||||
return;
|
||||
}
|
||||
displayMsg("Starting Playback...");
|
||||
|
||||
XPCSocket sock = openUDP("127.0.0.1");
|
||||
float posi[7];
|
||||
while (!feof(fd) && !ferror(fd))
|
||||
{
|
||||
int result = fscanf(fd, "%f, %f, %f, %f, %f, %f, %f\n",
|
||||
&posi[0], &posi[1], &posi[2], &posi[3], &posi[4], &posi[5], &posi[6]);
|
||||
playbackSleep(interval);
|
||||
if (result != 7)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sendPOSI(sock, posi, 7, 0);
|
||||
}
|
||||
closeUDP(sock);
|
||||
displayMsg("Playback Complete");
|
||||
}
|
||||
32
C/playbackExample/src/playback.h
Normal file
32
C/playbackExample/src/playback.h
Normal file
@@ -0,0 +1,32 @@
|
||||
//Copyright (c) 2013-2015 United States Government as represented by the Administrator of the
|
||||
//National Aeronautics and Space Administration. All Rights Reserved.
|
||||
//
|
||||
//DISCLAIMERS
|
||||
// No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND,
|
||||
// EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT
|
||||
// THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY
|
||||
// THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED,
|
||||
// WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN
|
||||
// ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS,
|
||||
// HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT
|
||||
// SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
|
||||
// THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS."
|
||||
//
|
||||
// Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES
|
||||
// GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF
|
||||
// RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES
|
||||
// OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING
|
||||
// FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE
|
||||
// UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT,
|
||||
// TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE
|
||||
// IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
#ifndef XPC_PLAYBACKEX_PLAYBACK_H_
|
||||
#define XPC_PLAYBACKEX_PLAYBACK_H_
|
||||
|
||||
void record(char* path, int interval, int duration);
|
||||
|
||||
void playback(char* path, int interval);
|
||||
|
||||
#endif
|
||||
22
C/playbackExample/win/playbackExample.sln
Normal file
22
C/playbackExample/win/playbackExample.sln
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.40629.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "playbackExample", "playbackExample.vcxproj", "{40781C32-3EE6-4B3C-A94F-E128BD41E21C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{40781C32-3EE6-4B3C-A94F-E128BD41E21C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{40781C32-3EE6-4B3C-A94F-E128BD41E21C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{40781C32-3EE6-4B3C-A94F-E128BD41E21C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{40781C32-3EE6-4B3C-A94F-E128BD41E21C}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
89
C/playbackExample/win/playbackExample.vcxproj
Normal file
89
C/playbackExample/win/playbackExample.vcxproj
Normal file
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{40781C32-3EE6-4B3C-A94F-E128BD41E21C}</ProjectGuid>
|
||||
<RootNamespace>playbackExample</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<IncludePath>../../src;../src;$(IncludePath)</IncludePath>
|
||||
<SourcePath>../../src;../src;$(SourcePath)</SourcePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<IncludePath>../../src;../src;$(IncludePath)</IncludePath>
|
||||
<SourcePath>../../src;../src;$(SourcePath)</SourcePath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="../src/chrome.h" />
|
||||
<ClInclude Include="../src/playback.h" />
|
||||
<ClInclude Include="..\..\src\xplaneConnect.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="../src/chrome.c" />
|
||||
<ClCompile Include="../src/main.c" />
|
||||
<ClCompile Include="../src/playback.c" />
|
||||
<ClCompile Include="..\..\src\xplaneConnect.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
42
C/playbackExample/win/playbackExample.vcxproj.filters
Normal file
42
C/playbackExample/win/playbackExample.vcxproj.filters
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="../src/chrome.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="../src/playback.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\xplaneConnect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="../src/chrome.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="../src/main.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="../src/playback.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\xplaneConnect.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
22
Java/Examples/Playback/.idea/compiler.xml
generated
Normal file
22
Java/Examples/Playback/.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<resourceExtensions />
|
||||
<wildcardResourcePatterns>
|
||||
<entry name="!?*.java" />
|
||||
<entry name="!?*.form" />
|
||||
<entry name="!?*.class" />
|
||||
<entry name="!?*.groovy" />
|
||||
<entry name="!?*.scala" />
|
||||
<entry name="!?*.flex" />
|
||||
<entry name="!?*.kt" />
|
||||
<entry name="!?*.clj" />
|
||||
<entry name="!?*.aj" />
|
||||
</wildcardResourcePatterns>
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="false">
|
||||
<processorPath useClasspath="true" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
||||
3
Java/Examples/Playback/.idea/copyright/profiles_settings.xml
generated
Normal file
3
Java/Examples/Playback/.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings default="" />
|
||||
</component>
|
||||
1
Java/Examples/Playback/.idea/description.html
generated
Normal file
1
Java/Examples/Playback/.idea/description.html
generated
Normal file
@@ -0,0 +1 @@
|
||||
<html>Simple <b>Java</b> application that includes a class with <code>main()</code> method</html>
|
||||
9
Java/Examples/Playback/.idea/libraries/XPlaneConnect.xml
generated
Normal file
9
Java/Examples/Playback/.idea/libraries/XPlaneConnect.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="XPlaneConnect">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/../../out/artifacts/XPlaneConnect_jar/XPlaneConnect.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
12
Java/Examples/Playback/.idea/misc.xml
generated
Normal file
12
Java/Examples/Playback/.idea/misc.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points version="2.0" />
|
||||
</component>
|
||||
<component name="ProjectKey">
|
||||
<option name="state" value="project://e2804f05-5315-4fc6-a121-c522a6c26470" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
8
Java/Examples/Playback/.idea/modules.xml
generated
Normal file
8
Java/Examples/Playback/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/Playback.iml" filepath="$PROJECT_DIR$/Playback.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
3
Java/Examples/Playback/.idea/project-template.xml
generated
Normal file
3
Java/Examples/Playback/.idea/project-template.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<template>
|
||||
<input-field default="com.company">IJ_BASE_PACKAGE</input-field>
|
||||
</template>
|
||||
6
Java/Examples/Playback/.idea/vcs.xml
generated
Normal file
6
Java/Examples/Playback/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="" />
|
||||
</component>
|
||||
</project>
|
||||
12
Java/Examples/Playback/Playback.iml
Normal file
12
Java/Examples/Playback/Playback.iml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="XPlaneConnect" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
141
Java/Examples/Playback/src/gov/nasa/xpc/Main.java
Normal file
141
Java/Examples/Playback/src/gov/nasa/xpc/Main.java
Normal file
@@ -0,0 +1,141 @@
|
||||
package gov.nasa.xpc;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Main
|
||||
{
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
String[] mainOpts = new String[] { "Record X-Plane", "Playback File", "Exit" };
|
||||
|
||||
System.out.println("X-Plane Connect Playback Example [Version 1.2.0.0]\n");
|
||||
System.out.println("(c) 2013-2015 United States Government as represented by the Administrator\n");
|
||||
System.out.println("of the National Aeronautics and Space Administration. All Rights Reserved.\n");
|
||||
while(true)
|
||||
{
|
||||
int result = displayMenu("What would you like to do?", mainOpts);
|
||||
}
|
||||
// char* mainOpts[3] =
|
||||
// {
|
||||
// "Record X-Plane",
|
||||
// "Playback File",
|
||||
// "Exit"
|
||||
// };
|
||||
// char path[256] = { 0 };
|
||||
//
|
||||
// displayStart("1.2.0.0");
|
||||
// while (1)
|
||||
// {
|
||||
// switch (displayMenu("What would you like to do?", mainOpts, 3))
|
||||
// {
|
||||
// case 1:
|
||||
// {
|
||||
// getString("Enter save file path", path);
|
||||
// int interval = getInt("Enter interval between frames (milliseconds)");
|
||||
// int duration = getInt("Enter duration to record for (seconds)");
|
||||
//
|
||||
// record(path, interval, duration);
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// getString("Enter path to saved playback file", path);
|
||||
// int interval = getInt("Enter interval between frames (milliseconds)");
|
||||
//
|
||||
// playback(path, interval);
|
||||
// break;
|
||||
// }
|
||||
// case 3:
|
||||
// displayMsg("Exiting.");
|
||||
// return 0;
|
||||
// default:
|
||||
// displayMsg("Unrecognized option.");
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return 0;
|
||||
|
||||
}
|
||||
|
||||
private static int displayMenu(String title, String[] opts) throws IOException
|
||||
{
|
||||
System.out.println();
|
||||
System.out.println("+---------------------------------------------- +\n");
|
||||
System.out.println(String.format("| %1$-42s |\n", title));
|
||||
System.out.println("+---------------------------------------------- +\n");
|
||||
for(int i = 0; i < opts.length; ++i)
|
||||
{
|
||||
System.out.println(String.format("| %1$2d. %2$-40s |\n", i + 1, opts[i]));
|
||||
|
||||
}
|
||||
System.out.println("+---------------------------------------------- +\n");
|
||||
System.out.print("Please select an option: ");
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
String result = reader.readLine();
|
||||
|
||||
return Integer.parseInt(result);
|
||||
}
|
||||
|
||||
public static void record(String path, int interval, int duration) throws IOException
|
||||
{
|
||||
int count = duration * 1000 / interval;
|
||||
if (count < 1)
|
||||
{
|
||||
throw new IllegalArgumentException("duration is less than one interval.");
|
||||
}
|
||||
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(path)))
|
||||
{
|
||||
System.out.println("Recording...");
|
||||
try (XPlaneConnect xpc = new XPlaneConnect())
|
||||
{
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
float[] posi = xpc.getPOSI(0);
|
||||
writer.write(String.format("%1$f, %2$f, %3$f, %4$f, %5$f, %6$f, %7$f\n",
|
||||
posi[0], posi[1], posi[2], posi[3], posi[4], posi[5], posi[6]));
|
||||
try
|
||||
{
|
||||
Thread.sleep(interval);
|
||||
}
|
||||
catch (InterruptedException ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("Recording Complete");
|
||||
}
|
||||
}
|
||||
|
||||
public static void playback(String path, int interval) throws IOException
|
||||
{
|
||||
try(Scanner reader = new Scanner(new FileReader(path)))
|
||||
{
|
||||
System.out.println("Starting playback...");
|
||||
try (XPlaneConnect xpc = new XPlaneConnect())
|
||||
{
|
||||
while(reader.hasNextLine())
|
||||
{
|
||||
float[] posi = new float[7];
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
posi[i] = reader.nextFloat();
|
||||
reader.skip(", ");
|
||||
}
|
||||
reader.nextLine();
|
||||
xpc.sendPOSI(posi);
|
||||
try
|
||||
{
|
||||
Thread.sleep(interval);
|
||||
}
|
||||
catch (InterruptedException ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
32
MATLAB/PlaybackExample/Playback.m
Normal file
32
MATLAB/PlaybackExample/Playback.m
Normal file
@@ -0,0 +1,32 @@
|
||||
%% X-Plane Connect MATLAB Recording Example Script
|
||||
% This script demonstrates how to playback recorded data from X-Plane.
|
||||
% (See Record.m)
|
||||
% Before running this script, ensure that the XPC plugin is installed and
|
||||
% X-Plane is running.
|
||||
%% Import XPC
|
||||
addpath('../')
|
||||
import XPlaneConnect.*
|
||||
|
||||
%% Setup
|
||||
% Create variables and open connection to X-Plane
|
||||
path = 'MyRecording.txt'; % File containing stored data
|
||||
interval = 0.1; % Time between snapshots in seconds
|
||||
Socket = openUDP(); % Open connection to X-Plane
|
||||
fd = fopen(path, 'r'); % Open file
|
||||
|
||||
disp('X-Plane Connect Playback Example Script');
|
||||
fprintf('Playing back ''%s'' in %fs increments.\n', path, interval);
|
||||
|
||||
%% Start Recording
|
||||
count = floor(duration / interval);
|
||||
for i = 1:count
|
||||
posi = fscanf(fd, '%f, %f, %f, %f, %f, %f, %f\n');
|
||||
sendPOSI(posi);
|
||||
pause(interval);
|
||||
end
|
||||
|
||||
%% Close connection and file
|
||||
closeUDP(Socket);
|
||||
fclose(fd);
|
||||
|
||||
disp('Recording complete.');
|
||||
34
MATLAB/PlaybackExample/Record.m
Normal file
34
MATLAB/PlaybackExample/Record.m
Normal file
@@ -0,0 +1,34 @@
|
||||
%% X-Plane Connect MATLAB Recording Example Script
|
||||
% This script demonstrates how to record data from X-Plane that can later
|
||||
% be played back. (See Playback.m)
|
||||
% Before running this script, ensure that the XPC plugin is installed and
|
||||
% X-Plane is running.
|
||||
%% Import XPC
|
||||
addpath('../')
|
||||
import XPlaneConnect.*
|
||||
|
||||
%% Setup
|
||||
% Create variables and open connection to X-Plane
|
||||
path = 'MyRecording.txt'; % File to save the data in
|
||||
interval = 0.1; % Time between snapshots in seconds
|
||||
duration = 10; % Time to record for in seconds
|
||||
Socket = openUDP(); % Open connection to X-Plane
|
||||
fd = fopen(path, 'w'); % Open file
|
||||
|
||||
disp('X-Plane Connect Recording Example Script');
|
||||
fprintf('Recording to ''%s'' for $f seconds in %fs increments.\n', path, duration, interval);
|
||||
|
||||
%% Start Recording
|
||||
count = floor(duration / interval);
|
||||
for i = 1:count
|
||||
posi = getPOSI();
|
||||
fprintf(fd, '%f, %f, %f, %f, %f, %f, %f\n', ...
|
||||
posi(1), posi(2), posi(3), posi(4), posi(5), posi(6), posi(7));
|
||||
pause(interval);
|
||||
end
|
||||
|
||||
%% Close connection and file
|
||||
closeUDP(Socket);
|
||||
fclose(fd);
|
||||
|
||||
disp('Recording complete.');
|
||||
82
Python/src/playbackExample.py
Normal file
82
Python/src/playbackExample.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from time import sleep
|
||||
import xpc
|
||||
|
||||
def record(path, interval = 0.1, duration = 60):
|
||||
try:
|
||||
fd = open(path, "w")
|
||||
except:
|
||||
print "Unable to open file."
|
||||
return
|
||||
|
||||
count = int(duration / interval)
|
||||
if count < 1:
|
||||
print "duration is less than a single frame."
|
||||
return
|
||||
|
||||
with xpc.XPlaneConnect("localhost", 49009, 0, 1000) as client:
|
||||
print "Recording..."
|
||||
for i in range(0, count):
|
||||
try:
|
||||
posi = client.getPOSI()
|
||||
fd.write("{0}, {1}, {2}, {3}, {4}, {5}, {6}\n".format(posi))
|
||||
except:
|
||||
print "Error reading position"
|
||||
continue
|
||||
sleep(interval);
|
||||
print "Recording Complete"
|
||||
fd.close()
|
||||
|
||||
def playback(path, interval):
|
||||
try:
|
||||
fd = open(path, "r")
|
||||
except:
|
||||
print "Unable to open file."
|
||||
return
|
||||
|
||||
with xpc.XPlaneConnect("localhost", 49009, 0, 1000) as client:
|
||||
print "Starting Playback..."
|
||||
for line in fd:
|
||||
try:
|
||||
posi = [ float(x) for x in line.split(',') ]
|
||||
posi = client.sendPOSI(posi)
|
||||
except:
|
||||
print "Error sending position"
|
||||
continue
|
||||
sleep(interval);
|
||||
print "Playback Complete"
|
||||
fd.close()
|
||||
|
||||
def printMenu(title, opts):
|
||||
print "\n+---------------------------------------------- +"
|
||||
print "| {0:42} |\n".format(title)
|
||||
print "+---------------------------------------------- +"
|
||||
for i in range(0,len(opts)):
|
||||
print "| {0:2}. {1:40} |".format(i + 1, opts[i])
|
||||
print "+---------------------------------------------- +"
|
||||
return int(raw_input("Please select and option: "))
|
||||
|
||||
def ex():
|
||||
print "X-Plane Connect Playback Example [Version 1.2.0]"
|
||||
print "(c) 2013-2015 United States Government as represented by the Administrator"
|
||||
print "of the National Aeronautics and Space Administration. All Rights Reserved."
|
||||
|
||||
mainOpts = [ "Record X-Plane", "Playback File", "Exit" ]
|
||||
|
||||
while True:
|
||||
opt = printMenu("What would you like to do?", mainOpts)
|
||||
if opt == 1:
|
||||
path = raw_input("Enter save file path: ")
|
||||
interval = float(raw_input("Enter interval between frames (seconds): "))
|
||||
duration = float(raw_input("Enter duration to record for (seconds): "))
|
||||
record(path, interval, duration)
|
||||
elif opt == 2:
|
||||
path = raw_input("Enter save file path: ")
|
||||
interval = float(raw_input("Enter interval between frames (seconds): "))
|
||||
playback(path, interval)
|
||||
elif opt == 3:
|
||||
return;
|
||||
else:
|
||||
print "Unrecognized option."
|
||||
|
||||
if __name__ == "__main__":
|
||||
ex()
|
||||
@@ -5,7 +5,7 @@
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>3c7a940d-17c8-4e91-882f-9bc8b1d2f54b</ProjectGuid>
|
||||
<ProjectHome>.</ProjectHome>
|
||||
<StartupFile>src\example.py</StartupFile>
|
||||
<StartupFile>src\playbackExample.py</StartupFile>
|
||||
<SearchPath>
|
||||
</SearchPath>
|
||||
<WorkingDirectory>.</WorkingDirectory>
|
||||
@@ -24,8 +24,11 @@
|
||||
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="src\playbackExample.py">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="src\xpc.py" />
|
||||
<Compile Include="src\example.py">
|
||||
<Compile Include="src\basicExample.py">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user