Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

Smart Devices Remote Tools Framework Powertoy 1.0

マイクロソフトダウンロードサイトより「Smart Devices Remote Tools Framework Powertoy 1.0」がダウンロード可能になりました。

この製品はCoreCon上で動作するリモートツールを簡単に開発するためのSDKです。このSDKの位置づけを説明するためには非常に長いストーリーが必要になります。

-------------------------------------------------

Visual Studio 2005以降(実際にはVisual Studio .NET 2003から、らしいですが)は Windows CEターゲットとの接続に以前からある"Platform Manager"に代わって、"Connection Manager"と"Core Connectivity 1.0"(略してCoreCon1.0)の組み合わせが利用されるようになりました。

Platform ManagerはWindows CEにおけるアプリ層の接続方法として長年使われてきました。Platform Managerはある意味"接続マネージング層"なわけで、たとえばPlatform Builderを使うと、具体的な接続伝送路としてTCP/IP、KITL、ActiveSyncを自由にOSイメージに追加することが可能です。Pocket PCやWindows Mobileではこの中の"ActiveSync"接続が標準的に利用されてきました。

ところが、長年使われてきたPlatform Manager/ActiveSyncの組み合わせですが、以下のような欠点が指摘されるようになりました。

 一つのデスクトップPCに同時には1つのCE Deviceしか接続することが出来ない

 (標準では)接続に関してセキュリティ機能が無い(端末側で接続を禁止できない)

さらにActiveSyncがCEのRASコンポーネントをそのまま使用しているため、ActiveSyncでPlatform Managerを使用している場合は以下の制限も加わります。

- CE OS上で無いと動作しない(OSダウンロード向けやカーネルデバッガ向けとしては使用できない)

- USB接続時でもシリアル通信をモデル化したため、パフォーマンスに問題あり

パフォーマンスの問題はTCP/IPトランスポート設定Remote NDISを使ったUSBや、Ethernetを使用した場合には軽減されますが、Windows Mobile用のデフォルト接続方法であるシリアルベースのActiveSyncが遅すぎるという点では誰もが納得していたはずです。

一方、カーネルデバッガ接続は(Windows CE.NET で KITLが導入されるまで)シリアル接続または素のイーサネット接続"のみ"がサポートされており、Transportという考え方はありませんでした。が、これもCE.NET以降はKITL(Kernel Independent Transport Layer)の導入により複数のトランスポートがサポートされ、むしろPlatform Managerとの機能の重複を招いてしまっていました。

Platform Managerに関して

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedebug5/html/wce50conplatformmanagerapi.asp

KITL Transport

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedebug5/html/wce50conKITLTransport.asp

-----------------------------------------------

Visual Studio .NET向けに開発された"Core Connectivity"は、当初PlatformManagerに依存しない素の伝送路を目指していたように思われます。以前の[Windows CE 5.0のx86エミュレータでVS2005を使う」の記事に見たように、Core ConnectivityはTCP/IP接続さえ出来れば接続可能なように設計されているようです。この考え方はやがて「KITL的な使い方も可能」の方向へ向かったようで、実際にWindows CE 6ではOSのダウンロードとカーネルデバッガ接続をCoreConnectivity(2.0?)でも行う方向のようです。

ところで先日カーネルデバッガ動作中のCE 5.0デバイスと、Visual Studio 2005付属のリモートツールを動かしている時、これらが"Core Connectivity"ベースで動いていることを発見いました。VS2005のリモートツールは見た目は以前と変わりませんが ActiveSyncを使ってConManClientなどリモート側に必要なツールを送り込んで起動しています。以前は"Windows CE Platform Manager Configuration"だった設定ダイアログ名が"Windows CE Connectivity Manager Configuration"と改められています。

Core Connectivity

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedebug5/html/wce50conCoreConInfrastructure.asp

APP315: VSD Core Connectivity Framework & Remote Tools

-----------------------------------------------

さて、今回リリースされた「Smart Devices Remote Tools Framework Powertoy 1.0」ですが、これはリモートツール開発用の上位ライブラリ、との位置づけになると思います。Connection Manager / Core ConnectionにはPlatform Managerに匹敵する規模の多数の機能が含まれるわけですが、リモートツールを開発するには必ずしもすべて使う必要はありません。ツール開発者はCoreConが使いたいわけではなく、ツールを開発したいわけで、このSDKを利用するとそれが簡単にできるというわけです。

まず、API自体はディスパッチインターフェースをサポートしたCOMベースで、通常デバイス側はC++で、PC側はC++またはC#(Managedコード)で構築します。(COM Interopが考慮され、C#で十分な記述が可能なようになっています)。プロジェクトをビルドすると、デバイスサイドのexeとPCサイドのPlugin DLLがともにビルドされるのですが、その後BUNDLEというステップを経て、.cetoolという拡張子を持つBUNDLEファイルが作成されます。これは前記ビルド済みバイナリとXML情報ファイルを1つのファイルにまとめたもので、このBundleファイルをダブルクリックして"開く"と、Microsoft Remote Tools Shellからロードされた状態でリモートツールがPC上で実行され、Platform Managerと同様に接続ダイアログが開きます。あとは接続デバイスを選択しOKを押すとデバイス側バイナリがPUSHされツールの実行が始まるというわけです。

このしくみはデスクトップPCのマネージメントコンソール(MMC)の仕組みと類似したところがあり、単一のUIシェルEXEに対してロードするBundleを取り替えることにより、さまざまなツールを実行できるように考えられています。

ただ、いくつかサンプルプロジェクトをビルドしてみましたが、標準ではARMV4とARMV4Iのみビルドするようになっており、(MS製のツールはともかく)ユーザーがビルドするものだとARM以外のプラットフォームで動作するCEデバイスは必ずしもサポートされないのかな、といった印象です。あと、PC側は.NET Framework上で動いていると思われ、起動や終了が(従来のリモートツールと比べて)少し時間がかかるかな、と感じました。

Remotetoolsframework

エミュレータを2つ起動し、それぞれに接続してみました。