From 851027d912f42f980504136d1f659ca5dc37392c Mon Sep 17 00:00:00 2001 From: Nick Banks Date: Wed, 9 Nov 2016 07:25:34 -0800 Subject: [PATCH] Add an initial Windows Universal App for OpenThread (#951) * Add an initial Windows Universal App for OpenThread --- .appveyor.yml | 2 + .gitignore | 2 + .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1400 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 19426 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 6841 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 2500 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 746 bytes etc/visual-studio/Assets/StoreLogo.png | Bin 0 -> 645 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 4758 bytes etc/visual-studio/OpenThread.vcxproj | 107 +++++ etc/visual-studio/OpenThread.vcxproj.filters | 57 +++ etc/visual-studio/openthread.sln | 24 ++ examples/apps/windows/App.xaml | 35 ++ examples/apps/windows/App.xaml.cpp | 146 +++++++ examples/apps/windows/App.xaml.h | 50 +++ examples/apps/windows/MainPage.xaml | 285 ++++++++++++ examples/apps/windows/MainPage.xaml.cpp | 407 ++++++++++++++++++ examples/apps/windows/MainPage.xaml.h | 80 ++++ .../apps/windows/OpenThread_TemporaryKey.pfx | Bin 0 -> 2454 bytes examples/apps/windows/Package.appxmanifest | 30 ++ examples/apps/windows/pch.cpp | 29 ++ examples/apps/windows/pch.h | 46 ++ 22 files changed, 1300 insertions(+) create mode 100644 etc/visual-studio/Assets/LockScreenLogo.scale-200.png create mode 100644 etc/visual-studio/Assets/SplashScreen.scale-200.png create mode 100644 etc/visual-studio/Assets/Square150x150Logo.scale-200.png create mode 100644 etc/visual-studio/Assets/Square44x44Logo.scale-200.png create mode 100644 etc/visual-studio/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 etc/visual-studio/Assets/StoreLogo.png create mode 100644 etc/visual-studio/Assets/Wide310x150Logo.scale-200.png create mode 100644 etc/visual-studio/OpenThread.vcxproj create mode 100644 etc/visual-studio/OpenThread.vcxproj.filters create mode 100644 examples/apps/windows/App.xaml create mode 100644 examples/apps/windows/App.xaml.cpp create mode 100644 examples/apps/windows/App.xaml.h create mode 100644 examples/apps/windows/MainPage.xaml create mode 100644 examples/apps/windows/MainPage.xaml.cpp create mode 100644 examples/apps/windows/MainPage.xaml.h create mode 100644 examples/apps/windows/OpenThread_TemporaryKey.pfx create mode 100644 examples/apps/windows/Package.appxmanifest create mode 100644 examples/apps/windows/pch.cpp create mode 100644 examples/apps/windows/pch.h diff --git a/.appveyor.yml b/.appveyor.yml index bf7d74102..8f35dc7b5 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -60,3 +60,5 @@ test_script: artifacts: - path: release name: release +- path: build\bin\AppPackages + name: app diff --git a/.gitignore b/.gitignore index 36ea568b8..6c2aa02e4 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ config.log config.status doc/Doxyfile doc/html +etc/visual-studio/BundleArtifacts +etc/visual-studio/Generated Files include/openthread-config.h include/openthread-config.h.in include/stamp-h1 diff --git a/etc/visual-studio/Assets/LockScreenLogo.scale-200.png b/etc/visual-studio/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..1e16718752ddd689c2c9eed5ac2c00d43d77fd42 GIT binary patch literal 1400 zcmV-;1&8{HP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE200009 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 literal 0 HcmV?d00001 diff --git a/etc/visual-studio/Assets/StoreLogo.png b/etc/visual-studio/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..61d6a334b92b3d2de5a750f478dec80c23809208 GIT binary patch literal 645 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 literal 0 HcmV?d00001 diff --git a/etc/visual-studio/OpenThread.vcxproj b/etc/visual-studio/OpenThread.vcxproj new file mode 100644 index 000000000..1c4de0dc6 --- /dev/null +++ b/etc/visual-studio/OpenThread.vcxproj @@ -0,0 +1,107 @@ + + + + + {f8c22844-9b93-4978-80df-8af2b37a7abb} + Thread + en-US + 14.0 + true + Windows Store + 10.0.10586.0 + 10.0.10240.0 + 10.0 + + + + Application + true + v140 + + + Application + false + true + v140 + true + + + + + + + + + ..\..\examples\apps\windows\OpenThread_TemporaryKey.pfx + + + ..\..\build\obj\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\build\bin\$(Platform)\$(Configuration)\app\ + True + ..\..\build\bin\AppPackages\ + Never + + + + /bigobj %(AdditionalOptions) + 4453;28204 + + %(AdditionalIncludeDirectories); + ..\..\examples\apps\windows; + ..\..\include; + + + + + %(AdditionalDependencies); + ..\..\build\bin\$(Platform)\$(Configuration)\dll\otApi.lib; + + + + + + + ..\..\examples\apps\windows\App.xaml + + + ..\..\examples\apps\windows\MainPage.xaml + + + + + Designer + + + Designer + + + + + Designer + + + + + + + + + + + + + + + ..\..\examples\apps\windows\App.xaml + + + ..\..\examples\apps\windows\MainPage.xaml + + + Create + + + + + + \ No newline at end of file diff --git a/etc/visual-studio/OpenThread.vcxproj.filters b/etc/visual-studio/OpenThread.vcxproj.filters new file mode 100644 index 000000000..ac15ec70e --- /dev/null +++ b/etc/visual-studio/OpenThread.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + f8c22844-9b93-4978-80df-8af2b37a7abb + + + cf539bf1-44af-4a06-be13-5941f6ac2623 + bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png + + + + + + + + + + + + + + + + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + + + + + + + \ No newline at end of file diff --git a/etc/visual-studio/openthread.sln b/etc/visual-studio/openthread.sln index 825fdfd2c..d76e83ddc 100644 --- a/etc/visual-studio/openthread.sln +++ b/etc/visual-studio/openthread.sln @@ -48,6 +48,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "otLwf", "otLwf.vcxproj", "{ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "otApi", "otApi.vcxproj", "{ED0EA262-C222-42C7-98D3-E70C72978ED2}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenThread", "OpenThread.vcxproj", "{F8C22844-9B93-4978-80DF-8AF2B37A7ABB}" + ProjectSection(ProjectDependencies) = postProject + {ED0EA262-C222-42C7-98D3-E70C72978ED2} = {ED0EA262-C222-42C7-98D3-E70C72978ED2} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM = Debug|ARM @@ -240,6 +245,24 @@ Global {ED0EA262-C222-42C7-98D3-E70C72978ED2}.Release|x64.Build.0 = Release|x64 {ED0EA262-C222-42C7-98D3-E70C72978ED2}.Release|x86.ActiveCfg = Release|Win32 {ED0EA262-C222-42C7-98D3-E70C72978ED2}.Release|x86.Build.0 = Release|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|ARM.ActiveCfg = Debug|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|ARM.Build.0 = Debug|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|ARM.Deploy.0 = Debug|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x64.ActiveCfg = Debug|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x64.Build.0 = Debug|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x64.Deploy.0 = Debug|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x86.ActiveCfg = Debug|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x86.Build.0 = Debug|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Debug|x86.Deploy.0 = Debug|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|ARM.ActiveCfg = Release|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|ARM.Build.0 = Release|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|ARM.Deploy.0 = Release|ARM + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x64.ActiveCfg = Release|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x64.Build.0 = Release|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x64.Deploy.0 = Release|x64 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x86.ActiveCfg = Release|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x86.Build.0 = Release|Win32 + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB}.Release|x86.Deploy.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -259,5 +282,6 @@ Global {9EEF9DCD-EA8F-4154-BD02-AB2B31CEC324} = {76EA541E-CAB1-4DB5-A39F-E3DB2A78CDDD} {3F1F7F6C-2A33-4635-9880-08FC5BC4E435} = {61E8A4A0-8138-49DB-97B4-3BEC87C8E133} {ED0EA262-C222-42C7-98D3-E70C72978ED2} = {61E8A4A0-8138-49DB-97B4-3BEC87C8E133} + {F8C22844-9B93-4978-80DF-8AF2B37A7ABB} = {76EA541E-CAB1-4DB5-A39F-E3DB2A78CDDD} EndGlobalSection EndGlobal diff --git a/examples/apps/windows/App.xaml b/examples/apps/windows/App.xaml new file mode 100644 index 000000000..45bbb4ff7 --- /dev/null +++ b/examples/apps/windows/App.xaml @@ -0,0 +1,35 @@ + + + + diff --git a/examples/apps/windows/App.xaml.cpp b/examples/apps/windows/App.xaml.cpp new file mode 100644 index 000000000..8fffb144d --- /dev/null +++ b/examples/apps/windows/App.xaml.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2016, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "pch.h" +#include "MainPage.xaml.h" + +using namespace Thread; + +using namespace Platform; +using namespace Windows::ApplicationModel; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Interop; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; + +///

+/// Initializes the singleton application object. This is the first line of authored code +/// executed, and as such is the logical equivalent of main() or WinMain(). +/// +App::App() +{ + InitializeComponent(); + Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending); +} + +/// +/// Invoked when the application is launched normally by the end user. Other entry points +/// will be used such as when the application is launched to open a specific file. +/// +/// Details about the launch request and process. +void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) +{ +#if _DEBUG + // Show graphics profiling information while debugging. + if (IsDebuggerPresent()) + { + // Display the current frame rate counters + DebugSettings->EnableFrameRateCounter = true; + } +#endif + auto rootFrame = dynamic_cast(Window::Current->Content); + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == nullptr) + { + // Create a Frame to act as the navigation context and associate it with + // a SuspensionManager key + rootFrame = ref new Frame(); + + rootFrame->NavigationFailed += ref new Windows::UI::Xaml::Navigation::NavigationFailedEventHandler(this, &App::OnNavigationFailed); + + if (e->PreviousExecutionState == ApplicationExecutionState::Terminated) + { + // TODO: Restore the saved session state only when appropriate, scheduling the + // final launch steps after the restore is complete + } + + if (e->PrelaunchActivated == false) + { + if (rootFrame->Content == nullptr) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments); + } + // Place the frame in the current Window + Window::Current->Content = rootFrame; + // Ensure the current window is active + Window::Current->Activate(); + } + } + else + { + if (e->PrelaunchActivated == false) + { + if (rootFrame->Content == nullptr) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments); + } + // Ensure the current window is active + Window::Current->Activate(); + } + } +} + +/// +/// Invoked when application execution is being suspended. Application state is saved +/// without knowing whether the application will be terminated or resumed with the contents +/// of memory still intact. +/// +/// The source of the suspend request. +/// Details about the suspend request. +void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e) +{ + (void) sender; // Unused parameter + (void) e; // Unused parameter + + //TODO: Save application state and stop any background activity +} + +/// +/// Invoked when Navigation to a certain page fails +/// +/// The Frame which failed navigation +/// Details about the navigation failure +void App::OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e) +{ + throw ref new FailureException("Failed to load Page " + e->SourcePageType.Name); +} diff --git a/examples/apps/windows/App.xaml.h b/examples/apps/windows/App.xaml.h new file mode 100644 index 000000000..52ef3aab5 --- /dev/null +++ b/examples/apps/windows/App.xaml.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2016, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "App.g.h" + +namespace Thread +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + ref class App sealed + { + protected: + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override; + + internal: + App(); + + private: + void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e); + void OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e); + }; +} diff --git a/examples/apps/windows/MainPage.xaml b/examples/apps/windows/MainPage.xaml new file mode 100644 index 000000000..4bfb3503e --- /dev/null +++ b/examples/apps/windows/MainPage.xaml @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +