Archive for 2012/02

Windows Embedded Compact 7 で OpenMP

Visual Studio 2005 以降の Visual C++ は、OpenMP 2.0 をサポートしています。OpenMP は、共有メモリ型の並列処理を記述するための仕組みで、C/C++ と Fortran に対する仕様が、OpenMP Architecture Review Board (OpenMP ARB) によって策定・公開されています。OpenMP の詳細は、OpenMP ARB の Web サイト、および、Visual Studio のリファレンスをご覧ください:

 Open MP
 http://openmp.org/

 OpenMP C and C++ Application Program Interface
 http://msdn.microsoft.com/en-us/library/8y6825×5(v=vs.90).aspx

なお、OpenMP 仕様の最新版は、2011年の 3.1 ですが、Visual C++ がサポートしているのは 2.0 です。

さて、この OpenMP 2.0 は、Windows Embedded Compact 7 (WEC 7) で対応が追加されました。OpenMP のカタログ項目は、Platform Builder の Catalog Items View に表示されるツリーの、以下の位置にあります:

 Core OS
  Windows Embedded Compact
   Application and Services Development
    C Libraries and Runtimes
★    OpenMP Runtime

対応する Sysgen 変数は、SYSGEN_OPENMP です。これについては、リファレンスの次のページに書かれています:

 C Libraries and Runtimes Catalog Items and Sysgen Variables (Windows Embedded Compact 7)
 http://msdn.microsoft.com/en-us/library/gg155191.aspx

ただし、デスクトップ版の Windows(Windows7 など)とは異なり、WEC 7 の OpenMP 対応では、C/C++ コンパイラの pragma に制限があり、以下のものは使えません。

 omp dynamic
 omp threadprivate

これについては、リファレンスの次のページをご覧ください:

 C/C++ Libraries for Windows Embedded Compact (Windows Embedded Compact 7)
 http://msdn.microsoft.com/en-us/library/ee479345.aspx

さらに、WEC 7 の場合は、SMP 対応のボード、つまり、カーネルがマルチコアに対応していなければ、OpenMP を使用できないということが、先ほど述べたカタログ項目のリファレンスのページに書かれています。

マルチコアのプロセッサを搭載した WEC 7 対応のボードをお持ちの方は、試してみると面白いかも知れませんね。Visula C++ で OpenMP を使う場合は、以下のリファレンスページが参考になるでしょう:

 OpenMP in Visual C++
 http://msdn.microsoft.com/en-us/library/tt15eb9t(v=vs.90).aspx

Add comment 2012/02/29 koga

WEC 7 の USB Audio ドライバ

Windows Embedded Compact 7 (WEC 7) で追加になった機能の中に、USB Audio のクラスドライバがあります。このドライバを組み込めば、オーディオ出力のハードウェアがないデバイスでも、USB Audio アダプタを使って音声出力できます。今回は、実際に動作確認してみた結果を紹介します。

■USB Audio アダプタ
今回動作確認に使ったのは、エアリア社製の「響音4」という製品です:
 http://www.area-powers.jp/product/usb_product/product/kyo-on/u1sounds4.html

家電量販店の店頭で購入しましたが、¥2,000未満の価格で、お手頃です。購入して、Windows 7 の PC に接続してみたところ、パッケージの箱の説明どおり、付属ドライバのインストール無しで、動作しました。つまり、USB Audio の規格に合致しているので、Windows 7 の標準ドライバで動作します。Windpows 7 のデバイスマネージャでデバイス情報を見たところ、USB の Vendor ID が 0D8C ですから、台湾の C-Media Electronics 社のチップセットを使っているようです:
 http://www.cmedia.com.tw/ProductsIndex.aspx

■USB Audio クラスドライバ
WEC 7 の USB Audio クラスドライバは、リファレンスに簡単な説明が載っています。

 http://msdn.microsoft.com/en-us/library/gg158818.aspx (USB Host Driver Catalog Items and Sysgen Variables)

上のページを見ると、SYSGEN_USB_AUDIO という Sysgen 変数が定義されると組み込まれ、出力と入力をサポートしているようです。このドライバのソースコードは、WEC 7 のソースツリーで、以下の場所にあります。
 %_WINCEROOT%/public/COMMON/oak/drivers/wavedev/wavedev2/usb/

このソースを見ると、wavemain.cpp にある Waveform Audio Driver の関数実装のうち、WAV_IOControl() において、入力デバイスに対するメッセージ(WIDM_*)の応答動作も実装されており、出力と入力をどちらもサポートしていることが分かります。Waveform Audio Driver については、リファレンスをご覧ください:
 http://msdn.microsoft.com/en-us/library/ee485907.aspx (Waveform Audio Driver Reference)

■USB Audio 機能の組み込み
USB Audio クラスドライバを OS イメージに組み込むには、Platform Builder のカタログ項目ビュー(Catalog Items View)で、次のカタログ項目を選択して下さい:

 <OS Design 名>
  Core OS
   Device Drivers
    USB
     USB Host
      USB Class Drivers
★      USB Audio Class Driver

USB ポート(USB ホストのポート)を搭載した WEC 7 デバイスであれば、これにより、音声出力できるようになります。USB Audio クラスドライバのレジストリ設定ファイル(usbaudio.reg)を見ると分かりますが、Audio クラスを宣言する全ての USB デバイスに対して、このドライバを USB Host Client Driver として登録する設定になっており、USB Audio デバイスの Vendor ID や Product ID を意識する必要は、ありません。

弊社が BSP を提供している CPU ボードである、アットマークテクノ社の Armadillo-440 で試してみたところ、冒頭で紹介した USB Audio アダプタ(エアリア社の響音4)を使って、ヘッドフォンに音声出力できました。エクスプローラのディレクトリアイコンをダブルクリック(ダブルタップ)した際などに、効果音が出力されます。Armadillo-400 シリーズ用 BSP の、公開している評価版では、Armadillo-440 液晶モデルの音声出力インタフェースをサポートしていませんが、USB Audio アダプタと組み合わせれば、WEC 7 の USB Audio クラスドライバを使って音声出力できるというわけです。

さらに、DirectShow と Windows Music Player、および、MP3 と WMA のコーデックを OS イメージへ組み込むことにより、MP3 や WMA の音楽ファイルを再生できることも確認できました。

以上、WEC 7 で追加された USB Audio クラスドライバの紹介です。興味のある方は、ぜひ試してみて下さい。

Add comment 2012/02/12 koga


Categories

Links

Posts by Authors

Recent Posts

Calendar

2012年2月
« 1月   3月 »
 1234
567891011
12131415161718
19202122232425
26272829  

Posts by Month

Posts by Category

Meta