Silverlightによる高度なWindows Embedded Compact 7ア...
Transcript of Silverlightによる高度なWindows Embedded Compact 7ア...
Silverlightによる高度なWindows Embedded Compact 7アプリケーション開発
株式会社富士通ソフトウェアテクノロジーズ
杉本 拓也、相澤 陽介
Agenda
• はじめに
• Windows Embedded Compact 7とSilverlight
• 開発環境
• デモ
~はじめに~ 組み込みデバイス開発の現状
組み込みデバイス開発を取り巻く状況
接続性
• クラウド・ネットワーク・他のデバイスとの接続
レガシーな機能
• リアルタイム性・省電力・安定性
開発コストの削減
• ソフトウェア・ハードウェアコスト・開発期間の短縮
新しいユーザインターフェース
• スマートフォンのようなUI・気持ち良い・見栄え良い
ユーザインターフェース
Hi Resolution Rich UI OpenGL
Animation
Alpha
Blending
Multi Touch Gesture NUI
Windows Embedded Compact 7と Silverlight for Windows Embedded
Silverlight for Windows Embedded
• 新しい開発環境
• 新しいグラフィックアーキテクチャ
• Silverlightを利用したアプリケーション開発・実行環境を追加
• Expression Blend 3によるUIのデザイン
• Visual Studioによるプログラミング
• デザイナーとプログラマーの分業
Windows Embedded Compact 7の開発環境
Platform Builder Smart Device Project
アプリケーション
C++ .NET
C/ C++
C++ XAML
C/C++/MFC/ATL/.NETCF
ハードウェア
Silverlight for Windows Embedded
Windows Embedded CE OS・ドライバ
C/ C++
Microsoft Expression Blend 3
開発の流れ
Silverlightアプリケーション
XAML file for Silverlight
Visual Studio in C# code
XAML File
Visual Studio “C++” code
Silverlight アプリケーション
Windows Vista / Windows 7のアプリケーション開発 Windows Embedded Compactのアプリケーション開発
Microsoft Expression Blend 3
例
10
デザイナーとプログラマーの分離
デザイン BMP/PNG/JPG/PSD…
リソース化
プログラミング
レビュー
プログラミング
デザイナー プログラマー
•ロジックを考えながらのデザイン •異なるツールによるプロトタイプ •実際のアプリケーションとの差異
•ロジック以外にUIに関するコードの記載 •デザイナーの要求
デザイナーとプログラマーの分離
デザイン リソース化
プログラミング
レビュー
デザイナー プログラマー
•デザイン・アニメーションはデザイナーが設計・決定
•UI以外の実ロジックのみのコーディング
アニメーション XAML
デザイン プログラミング
WPF XAML
Silverlight XAML
WPF・Silverlight・for Windows Embedded
Silverlight for Windows
Embedded
Windows Presentation Foundation (WPF) は.NET Framework に含まれるユーザインタフェースサブシステムである。 WPFは、ユーザインタフェースとロジックを明確に区別する一貫したプログラミングモデルを提供する。
Silverlightはアニメーション、ベクターグラフィックスの表示や音声・動画再生などの機能を備える、いわゆるリッチインターネットアプリケーション (RIA) のプラットフォームである。
Silverlight for Windows Embedded Silverlightテクノロジーを利用し.NETの変わりにコードをC++で記載可能
Windows Embedded Compact 7
これまでのアプリケーション開発 • GDI/MFCをベースとしたカスタムコントロール • オーナードロー • 非Winデザインを実装するには多くのコードを実装 • デザイナーとの意識・要求の壁
今後のアプリケーション開発 新しいプラットフォームによってリッチなUI開発が可能に!
Browser TV Music Photo
サンプルホームスクリーン
Silverlight for Embedded based Sample Home Screen SYSGEN_XRSHELL
サンプルホームスクリーン
開発環境の構築
環境構築
• 開発マシンのハードウェアスペック – 約55 GB以上のハードディスクスペース – 最低
• 1.6 GHz CPU, 384 MB RAM, 1024x768 ディスプレイ, 5400 RPM ハードディスク
– 推奨 • 2.2 GHz以上のCPU, 1024 MB以上の RAM, 1280x1024ディスプレイ,
7200 RPM以上のハードディスク
• OS – Windows XP Service Pack 3 – Windows Vista Service Pack 2 – Windows 7
• その他 – Visual Studio 2008 SP1 (全コンポーネント) – Expression Blend 3 (for Windows Embedded Silverlight Tools) – .NET Framework 3.5
インストール手順
Visual Studio
2008 SP1
Windows Embedded Compact 7
Expression Blend 3
(optional)
Virtual PC
(optional)
開発環境(Silverlight for Windows Embedded関連)
開発環境
• Public\common\sdk\inc,lib
• SYSGEN Variable – SYSGEN_XAML_RUNTIME
– SYSGEN_XAMLMSGBOX
– BSP_XRPLUGIN_DDRAW
– BSP_XRPLUGIN_OPENGL
• Header File – XamlRuntime.h
• Library – xamlruntime.lib
• Sample – %_WINCEROOT%\PUBLIC\COMMON\OAK\XamlRuntime
Effects.
Hardware Recommendations
複雑さ User experience Designer experience
GPU/CPU RAM
プレミアム 密集したUI リッチなアニメーション 流れるようなGUI マルチレイヤー
800x600以上 スクリーンの25%以上のアニメーション 20fps以上のアニメーション Vector/pathの多用
• GPU+Dual 1GHzプロセッサー
512 MB以上
High シンプルなアニメーション
15fps程度のアニメーション GPUで処理できる範囲の効果
• GPU無し+Dual 1GHzプロセッサー
• GPU+1GHzプロセッサー
256 MB以上
スタンダード アニメーション無し アニメーション無し • GPU無し+550MHzプロセッサー
• GPU+550MHzプロセッサー
128 MB以上
GPU Recommendations for DirectDraw
コンポーネント 推奨
GPUメモリー 20MBのビデオメモリー
BltとFillに対するハードウェアアクセラレート
•下記のハードウェアアクセラレート機能
•AlphaBlend •SRCCOPY •Strech •Fill
GPU Recommendations for OpenGL API
コンポーネント 推奨
OpenGL API •OpenGL Embedded Systems (ES) 2.0 •OpenGL API コンフォーマンステストの通過(Khronos) •vertex shader •fragment shader
OpenX関連格納場所
種別 ファイル名 格納場所
各種ライブラリ libGLESv1_CM.lib
libGLESv2.lib
libOpenVG.lib
libEGL.lib
%_WINCEROOT%\public\common\sdk\%_TG
TCPU%\%WINCEDEBUG%
OpenGL ES 1.1 gl.h
glext.h
glplatform.h
%_WINCEROOT%\public\common\sdk\inc\GL
ES
OpenGL ES 2.0 gl2.h
gl2ext.h
gl2platform.h
%_WINCEROOT%\public\common\sdk\inc\GL
ES2
Open VG openvg.h %_WINCEROOT%\public\common\sdk\inc\V
G
EGL 1.4 egl.h
eglext.h
eglplatform.h
%_WINCEROOT%\public\common\sdk\inc\E
GL
Khronos Khronos_types.h %_WINCEROOT%\public\common\sdk\inc
XAMLRENDERPLUGIN
• 用途
– Silverlight for Windows Embeddedの描画処理をハードウェアアクセラレータを利用するためのプラグイン
• 場所
– %_WINCEROOT%\PUBLIC\COMMON\OAK\XAMLRENDERPLUGIN
• GDI
• Ddraw
• OpenGL
• プラグインの大まかな処理
– 描画サーフェースの作成と管理
– 最終的なディスプレイへのイメージの描画処理
XAMLRENDERPLUGINから読み解く
• OpenGL
– COpenGLSurface::Initialize
• XRPixelFormat_pixelColor16bpp_R5G6B5
• XRPixelFormat_pixelColor32bpp_A8R8G8B8
• Ddraw
– CDDrawSurface::CreateDDrawSurface
• XRPixelFormat_pixelColor32bpp_A8R8G8B8
• XRPixelFormat_pixelColor32bpp_X8R8G8B8
• XRPixelFormat_pixelColor16bpp_R5G6B5
Windows Embedded Silverlight Tools (WEST)
Windows Embedded Silverlight Tools (WEST)
29
ツール名 概要
Create Platform Builder Subproject…
Expression BlendプロジェクトをPlatform Builderサブプロジェクトに変換
Windows Embedded Event イベントハンドラーを追加
Update Silverlight for Windows Embedded Project…
Expression Blendプロジェクトの変更をPlatform Builderサブプロジェクトに反映
WEST : Create Platform Builder Subproject… • SilverlightのOS Designへの組み込み
– メニューから[Create Platform Builder Subproject…]を選択
– ウィザードに従って、 Expression BlendプロジェクトをPlatform Builderサブプロジェクトに変換
– ソリューションエクスプローラーのSubprojectを右クリックし、[Add Existing Subproject]を選択
– 先に変換したサブプロジェクトを選択
WEST : Windows Embedded Event
• イベントハンドラの追加が可能
WESTからの主な出力物
• VSプロジェクト一式
• ソース
– WinMain.cpp
– App.cpp, App.h
– MainPage.cpp, MainPage.h
– XXX.rc, resource.h
– StdAfx.h, StdAfx.cpp
Stdafx.h
// Windows Header Files:
#include <windows.h>
// Xaml Runtime Header Files
#include <XamlRuntime.h>
#include <XRDelegate.h>
#include <XRPtr.h>
#include <XRCustomControl.h>
WinMain.cpp
#include "stdafx.h" #include "App.h" // ============================================================================ // WinMain // // Description: Set the window creation parameters for this application. // // Parameters: hInstance - Handle to the current instance of the application. // hInstPrev - This parameter is always NULL. // lpCmdLine - Command line for the application, excluding the program name. // nCmdShow - Specifies how the window is to be shown. // ============================================================================ INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hInstPrev*/, LPWSTR /*lpCmdLine*/, int /*nShowCmd*/) { App AppInstance; HRESULT hr = AppInstance.Initialize(hInstance); if(SUCCEEDED(hr)) { hr = AppInstance.Run(); } return AppInstance.GetWinMainResultCode(); }
App.cpp(1)
//======================================================
// InitializeComponent
//
// Description: Load the Application resource dictionary if one exists.
//======================================================
HRESULT App::InitializeComponent()
{
XRXamlSource appXaml(GetHInstance(), IDR_SILVERLIGHTAPPLICATION1_APP);
HRESULT hr = m_pApplication->LoadResourceDictionary(&appXaml,NULL);
return hr;
} // InitializeComponent
App.cpp(2)
//========================================================== // OnStartup // // Description: OnStartup is called after the visual host is created. // and before the message loop is entered. //========================================================== HRESULT App::OnStartup() { HRESULT hr = S_OK; IXRFrameworkElementPtr pRoot; hr = m_pVisualHost->GetRootElement(&pRoot); if (SUCCEEDED(hr)) { // TODO: Add one time initialization code here. } return hr; } // OnStartup
App.cpp(3)
//========================================================== // CreateHost // // Description: Create the visual host. // // Parameters: pCreateParams - The parameters used for creating the // visual host's window //========================================================== HRESULT App::CreateHost(XRWindowCreateParams* pCreateParams) { XRPtr<IXRCustomUserControl> pControl; HRESULT hr = E_FAIL; hr = m_pApplication->CreateObject(__uuidof(MainPage),&pControl); if (SUCCEEDED(hr)) { hr = m_pApplication->CreateHostFromElementTree(pControl, pCreateParams, &m_pVisualHost); } return hr; }
App.cpp(4)
#pragma region RegisterUserControls Generated Code // ============================================================================ // RegisterUserControls // // Description: Register all XRCustomUserControl implemenations here. // WARNING: DO NOT EDIT THIS ALWAYS-GENERATED FUNCTION // ============================================================================ HRESULT App::RegisterUserControls() { HRESULT hr = S_OK; static PFN_XRCUC_REGISTER pfn[] = { &MainPage::Register, }; for (int i=0; i<_countof(pfn) && SUCCEEDED(hr); i++) { hr = pfn[i](); if (FAILED(hr)) { RETAILMSG(1,(L"RegisterUserControls failed.")); } } return hr; } // RegisterUserControls // ============================================================================ // WARNING: DO NOT EDIT THIS ALWAYS-GENERATED FUNCTION // ============================================================================ #pragma endregion RegisterUserControls Generated Code
Demo
その他注意事項
注意事項・その他
• アプリケーションのスタックサイズ
– デフォルト64Kでは足りない場合がある
• Imaging関連のカタログ追加
– SYSGEN_IMAGING(BMP/JPG/ICO/PNG/GIF)の追加を忘れずに
• Silverlightとの相違点
– http://msdn.microsoft.com/en-us/library/ee501848(v=WinEmbedded.70).aspx
参考:MSDN
• Windows Embedded Compact
– http://msdn.microsoft.com/en-us/library/ee504813(v=WinEmbedded.0).aspx
– Windows Embedded Compact 7
• http://msdn.microsoft.com/en-US/library/gg154201(v=WinEmbedded.70).aspx
– Silverlight for Windows Embedded
• http://msdn.microsoft.com/en-US/library/ee502198(v=WinEmbedded.70).aspx
© 2011 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.