132
高性能 USB スタック USBX ホストスタック・ユーザガイド Express Logic 858.613.6640 Toll Free 888.THREADX FAX 858.521.4259 http://www.expresslogic.com

USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

高性能 USB スタック

USBX ホストスタック・ユーザガイド

Express Logic 858.613.6640

Toll Free 888.THREADX FAX

858.521.4259

http://www.expresslogic.com

Page 2: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

©1999-2014 by Express Logic, Inc.

All rights reserved.This document and the associated USBX software are the sole property of Express Logic, Inc. Each contains proprietary information of Express Logic, Inc. Reproduction or duplication by any means of any portion of this document without the prior written consent of Express Logic, Inc. is expressly forbidden.

Express Logic, Inc.は、USBX の設計または信頼性を向上するために、随時に予告なく、本書に記

載する仕様を変更する権利を留保します。本書の内容については万全を期していますが、本書の正

確性について Express Logic, Inc.が保証するものではありません。

商標

FileX および ThreadX は Express Logic, Inc.の登録商標であり、USBX、NetX、picokernel、preemption-threshold、event-chaining は、Express Logic, Inc.の商標です。

保証の制限

Express Logic, Inc.は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり

に動作すること、USBX 製品が中断もしくは欠陥なしに動作すること、または USBX 製品に見つかる

いかなる欠陥も保障期間後に補正されることにつき、一切保証するものではありません。Express Logic, Inc.は USBX 製品に関し、市場性および特定の目的への適合性を含めて、明示あるいは黙

示を問わず一切責任を負わないものとします。Express Logic, Inc.、そのディーラ、販売店、代理店

または従業員から口頭もしくは書面で情報または助言が与えられた場合、それにより、他の保証が

生じるものでもなく、またこの保証の範囲がいかなる形であれ拡大するものでもありません。また、ラ

イセンス取得者はそのような情報または助言に依拠してはなりません。

パート番号: 000-1010 改訂 5.7 版

Page 3: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

目次 目次 ............................................................................................................... 3

本書について ................................................................................................. 6

第 1 章 USBX の概要 ............................................................................... 7

USBX の機能 .............................................................................................................. 7 製品ハイライト .............................................................................................................. 8 USBX の強力なサービス .............................................................................................. 8

複数ホストコントローラのサポート ......................................................................... 8 USB ソフトウェアスケジューラ .............................................................................. 8 USB デバイスフレームワークの完全なサポート ..................................................... 8 使いやすい API ................................................................................................... 8

第 2 章 USBX のインストール .................................................................. 10

ホストについて ........................................................................................................... 10 コンピュータの種類 ............................................................................................ 10 ダウンロード用インタフェース .............................................................................. 10 デバッグツール .................................................................................................. 10 必要なハードディスク容量 .................................................................................. 10 ターゲットについて ............................................................................................. 10

コンフィギュレーションオプション .................................................................................. 13 ソースコードツリー ...................................................................................................... 15 USBX リソースの初期化 ............................................................................................. 16 USB ホストコントローラの定義 .................................................................................... 17 ホストクラスの定義 ..................................................................................................... 18 トラブルシューティング ................................................................................................ 20 USBX バージョン ID ................................................................................................... 20

第 3 章 USBX ホストスタックのファンクション コンポーネント...................... 21

実行概要 ................................................................................................................... 21 初期化 .............................................................................................................. 22 アプリケーションインタフェースコール .................................................................. 22 USB ホストスタック API ...................................................................................... 22 USB ホストクラス API ........................................................................................ 22

ルートハブ ................................................................................................................. 23 ハブクラス .................................................................................................................. 23 USB ホストスタック ..................................................................................................... 23

Page 4: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

トポロジマネージャ ..................................................................................................... 23 USB クラスのバインド ................................................................................................. 23 USBX API ................................................................................................................. 24 ホストコントローラ ....................................................................................................... 24

ルートハブ ......................................................................................................... 25 電力管理 .......................................................................................................... 25 エンドポイント .................................................................................................... 25 転送 ................................................................................................................. 25

USB デバイスのフレームワーク .................................................................................. 26 デバイス記述子 ................................................................................................. 28 コンフィギュレーション記述子 .............................................................................. 31 インタフェース記述子 ......................................................................................... 33 エンドポイント記述子.......................................................................................... 36 ストリング記述子 ............................................................................................... 39 ファンクショナル記述子 ...................................................................................... 41 メモリ内の USBX デバイス記述子フレームワーク ................................................ 41

第 4 章 USBX ホストサービスの説明 ....................................................... 43

ux_host_stack_initialize ................................................................................... 44 ux_host_stack_endpoint_transfer_abort .......................................................... 45 ux_host_stack_class_get ................................................................................. 46 ux_host_stack_class_register .......................................................................... 47 ux_host_stack_class_instance_create ............................................................. 48 ux_host_stack_class_instance_destroy ........................................................... 49 ux_host_stack_class_instance_get .................................................................. 50 ux_host_stack_device_configuration_get ........................................................ 51 ux_host_stack_device_configuration_select .................................................... 52 ux_host_stack_device_get ............................................................................... 54 ux_host_stack_interface_endpoint_get ............................................................ 55 ux_host_stack_hcd_register ............................................................................ 57 ux_host_stack_configuration_interface_get ..................................................... 59 ux_host_stack_interface_setting_select ........................................................... 60 ux_host_stack_transfer_request_abort ............................................................ 61 ux_host_stack_transfer_request ...................................................................... 62

第 5 章 USBX ホストクラスの API ........................................................... 64

ux_host_class_printer_read ............................................................................. 65 ux_host_class_printer_write ............................................................................. 66 ux_host_class_printer_soft_reset .................................................................... 67 ux_host_class_printer_status_get .................................................................... 68 ux_host_class_audio_read .............................................................................. 69 ux_host_class_audio_write .............................................................................. 70 ux_host_class_audio_control_get .................................................................... 71 ux_host_class_audio_control_value_set .......................................................... 72 ux_host_class_audio_streaming_sampling_set ............................................... 73 ux_host_class_audio_streaming_sampling_get ............................................... 74 ux_host_class_hid_client_register ................................................................... 76 ux_host_class_hid_report_callback_register .................................................... 77

Page 5: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_periodic_report_start ......................................................... 78 ux_host_class_hid_periodic_report_stop ......................................................... 79 ux_host_class_hid_report_get ......................................................................... 80 ux_host_class_hid_report_set ......................................................................... 81 ux_host_class_asix_read ................................................................................. 82 ux_host_class_asix_write ................................................................................ 83 ux_host_class_cdc_acm_read ......................................................................... 84 ux_host_class_cdc_acm _write ....................................................................... 85 ux_host_class_cdc_acm_ioctl .......................................................................... 86 ux_host_class_pima_session_open ................................................................. 88 ux_host_class_pima_session_close ................................................................ 89 ux_host_class_pima_storage_ids_get ............................................................. 90 ux_host_class_pima_storage_info_get ............................................................ 91 ux_host_class_pima_num_objects_get ........................................................... 92 ux_host_class_pima_object_handles_get ........................................................ 95 ux_host_class_pima_object_info_get .............................................................. 97 ux_host_class_pima_object_info_send ............................................................ 99 ux_host_class_pima_object_open ................................................................. 101 ux_host_class_pima_object_get .................................................................... 102 ux_host_class_pima_object_send ................................................................. 104 ux_host_class_pima_thumb_get .................................................................... 106 ux_host_class_pima_object_delete ............................................................... 108 ux_host_class_pima_object_close ................................................................. 109 ux_host_class_gser_read .............................................................................. 110 ux_host_class_gser_write .............................................................................. 111 ux_host_class_gser_ioctl ............................................................................... 112 ux_host_class_gser_reception_start .............................................................. 114 ux_host_class_gser_reception_stop .............................................................. 115

第 6 章 USBX DPUMP クラスについて .................................................. 116

USBX DPUMP ホストクラス ..................................................................................... 117 USBX DPUMP デバイスクラス ................................................................................. 119

第 7 章 ピクトブリッジの実装 .................................................................. 120

ピクトブリッジクライアントの実装 ................................................................................ 121 ux_pictbridge_jobinfo_object_data_read ........................................................ 125

ピクトブリッジホストの実装 ........................................................................................ 126 ux_pictbridge_application_object_data_write ................................................. 128

第 8 章 USBX OTG .............................................................................. 129

インデックス ................................................................................................ 132

Page 6: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

本書について 本書では、Express Logic, Inc.の高性能USBファウンデーションソフトウェアUSBXについて包括的

に説明します。

本書は、組み込み式リアルタイムソフトウェアの開発者を対象にしています。開発者は、標準的なリ

アルタイムオペレーティングシステムファンクション、USB 仕様、および C プログラミング言語に精通

していることとします。

USB 関連の技術的な情報については、http://www.USB.org/developers から USB 仕様書および

USB クラス仕様書をダウンロードして参照してください。

本書の構成

第 1 章では、USB について紹介します。

第2章では、ThreadXアプリケーションにUSBXをインストールして使用するための基本

手順を説明します。

第 3 章では、USBX の機能の概要と USB の基本事項を説明します。

第4章では、ホストモードのUSBXへのアプリケーションのインタフェースについて詳述し

ます。

第 5 章は、「USBX DPUMP クラスについて」と題しています。

第 6 章は、「USBX Pictbridge の実装」と題しています。

第 7 章は、「USBX OTG」と題しています。

Page 7: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 1 章 USBX の概要 USBX は、組み込みアプリケーション対応の本格的 USB スタックです。この章では USBX の概要を

紹介し、その用途と利点を説明します。

USBX の機能 USBX は、現行の USB Specification 1.1、2.0、および OTG をサポートします。スケーラブルに設計

してあるため、1 つだけのデバイスを接続する簡易 USB テクノロジから、複数のデバイスとカスケー

ドハブを備えた複雑なテクノロジまで対応します。USBプロトコルで可能な制御転送、バルク転送、イ

ンタラプト転送、アイソクロナス転送をすべて USBX でサポートします。

USBX はホスト側、デバイス側の両方をサポートします。いずれの側も、次の 3 つのレイヤで構成さ

れます。

• 制御レイヤ • スタックレイヤ • クラスレイヤ

USB 各相の関係は次のようになっています。

クラスドライバ クラスドライバ

ホストスタック

ホストコントローラドライバ

ホストコントローラ

デバイススタック

ホストコントローラドライバ

デバイスコントローラ

ホスト 側 デバイス側

Page 8: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

製品ハイライト ThreadX プロセッサの完全なサポートロイヤルティなし 完全な ANSI C ソースコード リアルタイムパフォーマンス迅速なテクニカルサポート 複数のクラスサポート 複数のクラスインスタンス ThreadX、FileX、NetX とのクラス統合 複数コンフィギュレーション対応の USB デバイスのサポート USB 複合デバイスのサポート カスケードハブのサポート USB 電力管理のサポート USB OTG のサポート TraceX のトレースイベントのエクスポート

USBX の強力なサービス

複数ホストコントローラのサポート USBXは、並列実行される複数の USBホストコントローラをサポートできます。これにより、市販され

ている USB 2.0ホストコントローラの大半で採用している下位互換方式の USB 2.0規格を USBX で

サポートできます。

USB ソフトウェアスケジューラ ハードウェアリスト処理機能のないUSBコントローラをサポートするにはUSBソフトウェアスケジュー

ラが必要ですが、そのスケジューラをUSBXに内蔵しています。USBXのソフトウェアスケジューラは、

各USB転送を所定の頻度と優先度に応じて編成し、USBコントローラに命令して転送をそれぞれ実

行します。

USB デバイスフレームワークの完全なサポート 複数コンフィギュレーション、複数インタフェース、複数代替設定などをともなう、最高度の USB デバ

イスをサポートすることができます。

使いやすい API USBX は、最高の組み込み USB スタックを、わかりやすく簡単に使える形で提供します。USBX の

API により、直感的かつ一貫したサービスが得られます。付属の USBX クラス API を使用すれば、

ユーザアプリケーション側で複雑な USB プロトコルを理解する必要がありません。

Page 9: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX
Page 10: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 2 章 USBX のインストール

ホストについて

コンピュータの種類 組み込み開発は通常、IBM-PC または Unix のホストコンピュータ上で実行されます。ホスト側でアプ

リケーションをコンパイル、リンク、配置した後、ターゲットハードウェアにアプリケーションをダウン

ロードして実行します。

ダウンロード用インタフェース ターゲットへのダウンロードは通常、RS-232 シリアルインタフェースを介して行いますが、パラレルイ

ンタフェースや、USB、Ethernet を使用する例も増えています。対応するオプションに関する開発

ツールドキュメントを参照してください。

デバッグツール デバッグは一般に、プログラムイメージダウンロード用と同じリンクで実行されます。デバッガには、

BDM(Background Debug Monitor)や ICE(In-Circuit Emulator)ツールを介してターゲット上で実

行する小型のモニタプログラムを初め、各種があります。このうち、実際のターゲットハードウェアを

最も強力にデバッグできるのは、もちろん ICE ツールです。

必要なハードディスク容量 USBXのソースコードはASCII形式で提供され、コンピュータのハードディスクに約 500KBの空き容

量が必要です。その他のホストシステム要件とオプションについては、付属の「readme_usbx.txt」ファイルで確認してください。

ターゲットについて USBX は、ホストモードのターゲット上に 24KB~64KB の読み取り専用メモリ(ROM)が必要です。

必要なメモリ容量は、使用するコントローラ、および USBX にリンクする USB クラスにより異なります。

さらに、USBX グローバルデータ構造とグローバルメモリプール用には、ターゲットに 32KB のランダ

ムアクセスメモリ(RAM)が必要になります。このメモリプールは、USB で実行するデバイス数、およ

び USB コントローラの種類に応じて調整することも可能です。USBX デバイス側では、デバイスコン

トローラの種類に応じて約10~12KのROMが必要です。RAMメモリの使用量は、デバイスでエミュ

レートするクラスの種類により異なります。

さらに USBX では、マルチスレッド保護のために ThreadX の セマフォ、ミューテックス、スレッドを必

要とし、また USB バストポロジの監視のために I/O の中断と周期処理を必要とします。

Page 11: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

製品の配布

USBX パッケージには、標準とプレミアムの 2 種類があります。標準パッケージでは最小限のソース

コードを備えているの対し、プレミアムパッケージには USBX ソースコードを一式完備しています。い

ずれのパッケージも 1 枚の CD で出荷されます。

配布 CD の内容は、ターゲットプロセッサ、開発ツール、USBX パッケージにより異なります。以下は、

ほとんどの製品配布に共通する重要ファイルのリストです。

readme_usbx.txt USBX ポートに関するファイルで、ターゲットプロセッサ、開発ツールな

どが含まれています。

ux_api.h すべてのシステム equate、データ構造、サービスプロトタイプを記述し

た C ヘッダファイルです。

ux_port.h 開発ツール向けのデータ定義と構造をすべて記述した C ヘッダファイ

ルです。

ux.lib USBX Cライブラリのバイナリバージョンです。標準パッケージで配布さ

れます。。

demo_usbx.c 簡単な USBX デモを記述した C ファイルです。

ファイル名はすべて小文字で表します。これにより、コマンドを Unix 開発プラットフォームに簡単に変

換することができます。

USBX のインストールは簡単明快です。以下に示す全般的な方法は、ほぼすべてのインストールに

適 用 さ れ ま す 。 た だ し 、 実 際 の 開 発 ツ ー ル 環 境 に 応 じ た 変 更 点 に つ い て は 、

「readme_usbx_generic.txt」で確認してください。

ステップ 1 USBX 配布ディスクをバックアップし、安全な場所に保管しておきます。

ステップ 2 ホストハードドライブ上で以前にThreadXをインストールしたのと同じディレクトリを

使用します。USBX 名はすべて一意となっているため、以前にインストールした

USBX と干渉することはありません。

ステップ 3 tx_application_defineまたはその先頭付近に ux_system_initializeのコールを追

加します。tx_application_define.追加した場所で USBX リソースが初期化され

ます。

ステップ 4 ux_host_stack_initialize へのコールを追加します。

ステップ 5 必要な USBX を初期化するためのコールを 1 つ以上追加します。

ステップ 6 システム内で使用可能なホストコントローラを初期化するためのコールを 1 つ以上

追加します。

ステップ 7 低レベルのハードウェア初期化と割り込みベクトルのルーティングを追加するため

に、tx_low_level_initialize.c ファイルの修正が必要になる場合があります。ハード

ウェアプラットフォームごとに異なるステップとなるため、ここでは説明しません。

Page 12: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ステップ 8 アプリケーションソースコードをコンパイルし、それを USBX と ThreadX のランタイ

ムライブラリとリンクし(USB ストレージクラスや USB ネットワーククラスをコンパイ

ルするときはFileXやNetxも必要になる場合があります)、またux.a(またはux.lib)と tx.a(または tx.lib)にもリンクします。結果をターゲットにダウンロードすれば実行

できます。

Page 13: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

コンフィギュレーションオプション USBX ライブラリの構築用にいくつかのコンフィギュレーションオプションがあります。オプションはす

べて ux_port.h に置かれています。

各コンフィギュレーションオプションについて、以下に詳述します。配布ディスクで提供される

readme_usbx.txt ファイルに、その他の開発ツールオプションが記述されています。

UX_PERIODIC_RATE

個々のハードウェアプラットフォームにおける秒あたりのティック数です。デフォルトは 1000、すなわ

ちミリ秒あたり 1 ティックです。

UX_MAX_CLASS_DRIVER

USBX でロード可能なクラスの最大数です。クラスコンテナを表す値であり、1 クラスのインスタンス

数ではありません。例えば、USBXの実装にハブクラス、プリンタクラス、およびストレージクラスが必

要な場合、これらのクラスに属するデバイス数とは無関係に、UX_MAX_CLASS_DRIVER値を3に設定できます。

UX_MAX_HCD

システムで使用可能なホストコントローラの数です。USB 1.1 対応には、この値は通常 1 に設定され、

USB 2.0 対応には 2 以上に設定できます。この値は、同時に実行する並列ホストコントローラの数を

表すものです。例えば、実行する OHCI のインスタンスが 2 つある場合、または EHCI コントローラ 1つと OHCI コントローラが 1 つを実行する場合は、UX_MAX_HCD を 2 に設定します。

UX_MAX_DEVICES

USBにアタッチ可能なデバイスの最大数を表します。1つのUSBに対する理論上の最大数は、通常

127 個です。メモリ節約のためにこの値を下げることが可能です。システム内の USB バス数とはか

かわりなく、デバイスの合計数を表す値であるので留意してください。

Page 14: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

UX_MAX_ED

コントローラプール内の ED の最大数を表します。この値は、1 つのコントローラにみに割り当てられ

ます。複数のコントローラのインスタンスがある場合は、各々のコントローラにこの値が使用されま

す。

UX_MAX_TD および UX_MAX_ISO_TD

コントローラプール内の正規 TD とアイソクロナス TD の最大数を表します。この値は、1 つのコント

ローラにみに割り当てられます。複数のコントローラのインスタンスがある場合は、各々のコントロー

ラにこの値が使用されます。

UX_THREAD_STACK_SIZE

USBX スレッドに関するスタックサイズ(単位: バイト)です。通常は、使用するプロセッサとホストコン

トローラに応じて 1024~2048 バイトが可能です。

UX_THREAD_PRIORITY_ENUM

バストポロジをモニタする USBX 列挙スレッドの ThreadX 優先度値です。

UX_THREAD_PRIORITY_CLASS

標準 USBX スレッドの ThreadX 優先度値です。

UX_THREAD_PRIORITY_KEYBOARD

USBX HID キーボードクラスの ThreadX 優先度値です。

UX_THREAD_PRIORITY_HCD

ホストコントローラスレッドの ThreadX 優先度値です。

UX_NO_TIME_SLICE

1 を指定した場合、ThreadX ターゲットポートはタイムスライスを使用しません。

UX_MAX_HOST_LUN

ホストストレージクラスドライバに表される SCSI 論理ユニットの最大数を表します

Page 15: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ソースコードツリー USBX の各ファイルは、いくつかのディレクトリで提供されます。

USBX コア

USBX デバイススタック

USBX ホストスタック

USBX デバイス コントローラ

USBX ホスト コントローラ

USBX ネットワーク

USBX の例

Windows ホストファイル

USBX OTG

USBX デバイス

クラス

USBX ホストクラス

Page 16: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

各ファイルを名前で識別できるように、以下の表記法を採用しています。

ファイル接尾名 ファイルの説明 ux_host_stack USBX ホストスタックのコアファイル ux_host_class USBX ホストスタックのクラスファイル ux_hcd USBX ホストスタックのコントローラドライバファイル ux_device_stack USBX デバイススタックのコアファイル ux_device_class USBX デバイススタックのクラスファイル ux_dcd USBX デバイススタックのコントローラドライバファイル ux_otg USBX OTG コントローラドライバ関連ファイル ux_pictbridge USBX ピクトブリッジファイル ux_utility USBX ユーティリティファンクション demo_usbx USBX のデモファイル

USBX リソースの初期化 USBX は、自身のメモリマネージャを備えています。先に USBX にメモリを割り当てておかないと、

USBX のホスト側やデバイス側を初期化することができません。メモリキャッシュが可能なシステム

にも、USBX メモリマネージャは対応します。

次のファンクションは、USBX メモリリソースを 128K の正規メモリで、かつキャッシュセーフメモリ用

プールを別途に設けずに初期化します。

/* Initialize USBX Memory */ ux_system_initialize(memory_pointer,(128*1024),UX_NULL,0);

ux_system_initialize のプロトタイプは次の通りです。

UINT ux_system_initialize(VOID *regular_memory_pool_start, ULONG regular_memory_size, VOID *cache_safe_memory_pool_start, ULONG cache_safe_memory_size)

入力パラメータ:

VOID *regular_memory_pool_start 正規メモリプールの先頭 ULONG regular_memory_size 正規メモリプールのサイズ VOID *cache_safe_memory_pool_start キャッシュセーフメモリプールの先頭 ULONG cache_safe_memory_size キャッシュセーフメモリプールのサイズ

すべてのシステムでキャッシュセーフメモリの定義が必要なわけではありません。そのようなシステ

ムでは、メモリポインタの初期化時に渡される値はUX_NULLに、プールの値は0にそれぞれ設定さ

れます。その場合、USBX はキャッシュセーフメモリに代えて正規メモリプールを使用します。

Page 17: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

正規メモリがキャッシュセーフではなく、またコントローラが DMA メモリを実行する必要がある場合

(OHCI、EHCI などのコントローラの場合)、キャッシュセーフメモリにメモリプールを定義することが

必要です。

USB ホストコントローラの定義 USBX がホストモードで動作するためには、USB ホストコントローラを 1 つ以上定義する必要があり

ます。この定義は、アプリケーション初期化ファイルに記述します。下の例では、OHCI USB デバイ

スコントローラを指しています。EHCI などその他のコントローラでは、そのコントローラの名前とファ

ンクションエントリ定義を適宜変更しなければなりません。

次の行は、OHCI コントローラの定義を実行します。

ux_host_stack_hcd_register("ux_hcd_ohci", ux_hcd_ohci_initialize, 0xd0000, 0x0a);

ux_host_stack_hcd_register のプロトタイプは次の通りです。

UINT_ux_host_stack_hcd_register(CHAR_PTR hcd_name, UINT (*hcd_initialize_function)(struct UX_HCD_STRUCT *), ULONG hcd_param1, ULONG hcd_param2);

ux_host_stack_hcd_register ファンクションは次のパラメータを使用します。

hcd_name: コントローラ名のストリング hcd_initialize_function: コントローラの初期化ファンクション hcd_param1: 通常は、コントローラで使用する IO 値またはメモリ hcd_param2: 通常は、コントローラで使用する IRQ

前の例では次のようになります。

ux_hcd_ohci が OHCI コントローラの名前、ux_hcd_ohci_initialize が OHCI コントロー

ラの初期化ルーチン、0xd0000 が OHCI コントローラレジスタがメモリ上で可視となって

いるアドレス、そして 0x0a が OHCI で使用する IRQ です。

USBX では、現在、以下のコントローラをサポートしています。他のコントローラのサポートも予定さ

れています。

ホストコントローラ名 商標およびプロセッサ(参考)

EHCI Generic 2.0 USB ホストコントローラ

OHCI Generic 1.1 USB ホストコントローラ

ISP1161 NXP 1.1 組み込み離散ホストコントローラ

ISP1362 NXP 2.0 組み込み離散ホストコントローラ

PIC32 Microchip 組み込み 1.1 ホストコントローラ RX Renesas RX62 組み込みホストコントローラ SH2A Renesas SH2A ベースの組み込みホストコントローラ

Page 18: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

STM32 ST Micro STM32 F1/F2/F4 組み込みホストコントローラ MUSB Mentor ジェネリックホストコントローラ

以下は、1つのOHCIコントローラといくつかのクラスを用いて、USBXをホストモードで初期化すると

きの例です。

UINT status; /* Initialize USBX.*/ ux_system_initialize(memory_ptr, (128*1024),0,0); /* The code below is required for installing the USBX host stack.*/ status = ux_host_stack_initialize(UX_NULL); /* If status equals UX_SUCCESS, host stack has been initialized.*/ /* Register all the host classes for this USBX implementation.*/ status = ux_host_class_register("ux_host_class_hub",

ux_host_class_hub_entry); /* If status equals UX_SUCCESS, host class has been registered.*/ status = ux_host_class_register("ux_host_class_storage",

ux_host_class_storage_entry); /* If status equals UX_SUCCESS, host class has been registered.*/ status = ux_host_class_register("ux_host_class_printer",

ux_host_class_printer_entry); /* If status equals UX_SUCCESS, host class has been registered.*/ status = ux_host_class_register("ux_host_class_audio",

ux_host_class_audio_entry); /* If status equals UX_SUCCESS, host class has been registered.*/ /* Register all the USB host controllers available in this system.*/ status = ux_host_stack_hcd_register("ux_hcd_ohci",

ux_hcd_ohci_initialize, 0x300000, 0x0a);

/* If status equals UX_SUCCESS, USB host controllers have been registered.*/

ホストクラスの定義 1 つ以上のホストクラスを USBX で定義する必要があります。USB スタックで USB デバイスをコン

フィギュレーションした後にUSBデバイスを駆動するためにUSBクラスが必要になります。USBクラ

スは USB デバイスに特化しています。

Page 19: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USB デバイス記述子に含まれるインタフェース数に応じ、1 つの USB デバイスを駆動するために 1つまたは複数のクラスが必要になることがあります。

以下は、HUB クラスの登録例です。

status = ux_host_stack_class_register("ux_host_class_hub", ux_host_class_hub_entry);

ux_host_class_register のプロトタイプは次の通りです。

UINT ux_host_staack_class_register(CHAR_PTR class_name, UINT (*class_entry_address) (struct UX_HOST_CLASS_COMMAND_STRUCT *))

class_name はクラス名、class_entry_address はクラスのエンドポイントです。

HUB クラスの初期化例において: ux_host_class_hub はハブの名前です。

ux_host_class_hub_entry は HUB クラスのエンドポイントです。

Page 20: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

トラブルシューティング USBX には、デモファイルとシミュレーション環境が付属しています。最初に、ターゲットハードウェア

または特定のデモプラットフォームでデモプラットフォームを実行してみるのがよいでしょう。

デモシステムが機能しない場合、以下の方法で問題を絞り込んでください。

USBX バージョン ID USBX の現在のバージョンは、実行時にユーザからもアプリケーションソフトウェアからも確認できま

す。

プログラマは、usbx.txt ファイルを調べて USBバージョンを取得できます。このファイルには、対応す

るポートのバージョン履歴も記載されています。アプリケーションソフトウェアでは、ux_port.h に定義

されているグローバルストリング_ux_version_id を調べて USBX バージョンを取得できます。

Page 21: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 3 章 USBX ホストスタックのファンクション コンポーネント

この章では、USBX の高性能埋め込み USB ホストスタックについて、ファンクションの観点から説明

します。

実行概要 USBX は、次のコンポーネントから構成されます。

初期化 アプリケーションインタフェースコール ルートハブ ハブクラス ホストクラス USB ホストスタック ホストコントローラ

USBX ホストスタックを下の図に示します。

キーボード クライアント

マウスク ライアント

リモート

コントロール クライアント

ハブクラス

アイソクロナス クラス

非同期クラス

HID クラス

USB スタック

OHCI EHCI

ソフトウェア スケジューラ

コントローラドライバ

Page 22: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

初期化 USBXをアクティブ化するには、ファンクションux_system_initializeをコールする必要があります。

このファンクションは USBX のメモリリソースを初期化します。

USBXホスト機能をアクティブ化するには、ファンクションux_host_stack_initializeをコールする必

要があります。ThreadXスレッド、ミューテックス、セマフォなど、USBXホストスタックで使用するすべ

てのリソースがこのファンクションで初期化されます。

1つ以上のUSBホストコントローラと 1つ以上のUSBクラスをアクティブ化するのは、アプリケーショ

ン初期化での処理になります。スタックにクラスが登録され、ホストコントローラ初期化ファンクション

がコールされたら、バスがアクティブになり、デバイス発見が開始できます。ホストコントローラのルー

トハブが、アタッチされているデバイスを検出した場合、USB トポロジを担当する USB 列挙スレッド

がウェイクアップし、デバイスの列挙処理に進みます。

ルートハブおよび下流ハブの性質上、ホストコントローラ初期化ファンクションが返ったときに、アタッ

チされているすべての USB デバイスがまだ完全にコンフィギュレーションされていない可能性があり

ます。USBハブの列挙に際し、特にルートハブと USBデバイスの間に 1つ以上のハブがある場合、

すべてが列挙されるまでに数秒かかることがあります。

アプリケーションインタフェースコール USBX の API には、次の 2 つのレベルがあります。

USB ホストスタック API USB ホストクラス API

通常、USBXアプリケーションではどのUSBホストスタックAPIもコールする必要がありません。ほと

んどのアプリケーションは、USB クラス API にのみアクセスします。

USB ホストスタック API ホストスタックAPIは、USBXコンポーネント(ホストクラスとホストコントローラ)の登録、デバイスのコ

ンフィギュレーション、および使用可能なデバイスエンドポイントの転送要求を担当します。

USB ホストクラス API クラス APIは、USBクラスごとに特化しています。USBクラス用の一般的な APIのほとんどは、デバ

イスのオープン/クローズ、デバイスとの読み書きなどのサービスを提供します。

Page 23: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ルートハブ ホストコントローラの各インスタンスには、1つ以上の USB ルートハブがあります。ルートハブの数は、

コントローラの性質によって決まるか、またはコントローラから特定のレジスタを読み出すことで取得

できます。

ハブクラス ハブクラスは、USB ハブの駆動を担当します。USB ハブは、スタンドアロンハブのほか、キーボード、

モニタなど複合デバイスの一部とすることも可能です。ハブには、自己電力形とバス電力形がありま

す。バス電力ハブでは、最大 4 つまでの下流ポートを搭載でき、また使用電力が 100mA 未満の自

己電力またはバス電力のデバイスのみが接続可能です。各ハブのカスケード化が可能です。最大 5つのハブを相互に接続できます。

USB ホストスタック USB ホストスタックは、USBX の中核部分です。次の 3 つの主要機能を持ちます。

• USB のトポロジの管理 • 1 つ以上のクラスへの USB デバイスのバインド • デバイス記述子問い合わせと USB 転送を実行するための、API をクラスに提供

トポロジマネージャ 新しいデバイスが接続されるまたはデバイスの接続が外されると、USB スタックトポロジスレッドが

ウェイクアップされます。ルートハブでも正規ハブでも、デバイスの接続を受け付けることができます。

USB にデバイスが接続されると、トポロジマネージャがデバイス記述子を取得します。この記述子に

は、そのデバイスで可能なコンフィギュレーションの数が示されています。ほとんどのデバイスは、1つのコンフィギュレーションのみを備えています。接続先ポートでの使用可能電力に従って、異なる

動作が可能なデバイスもあります。そのようなデバイスには、使用可能電力に応じて複数のコンフィ

ギュレーションがあり、選択できるようにしてあります。トポロジマネージャによりコンフィギュレーショ

ンされたデバイスには、コンフィギュレーション記述子に指定されている電力が供給できるようになり

ます。

USB クラスのバインド デバイスがコンフィギュレーションされたらトポロジマネージャは、クラスマネージャがデバイスインタ

フェース記述子を見ながらデバイス発見を続行するようにさせます。各デバイスには 1 つ以上のイン

タフェース記述子を持つことができます。

インタフェースとは、デバイスに含まれるファンクションです。例えば、USB スピーカには、オーディオ

ストリーミング用、オーディオコントロール用、各種スピーカボタンの管理用のインタフェースが各 1個、

合計 3 個のインタフェースがあります。

Page 24: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

クラスマネージャには、デバイスインタフェースを 1 つ以上のクラスに結合するメカニズムが 2 つあり

ます。すなわち、インタフェース記述子に含まれている PID/VID(製品 ID とベンダ ID)の組み合わせ

を使用するメカニズムと、クラス/サブクラス/プロトコルの組合せを使用するメカニズムがありま

す。

PID/VID の組み合わせは、ジェネリッククラスによる駆動ができないインタフェースに対して有効です。

クラス/サブクラス/プロトコルの組合せは、USB-IF認定のクラス(プリンタ、ハブ、ストレージ、オー

ディオ、HID など)に属するインタフェースで使用されます。

クラスマネージャには、USBX の初期化で登録されたクラスのリストがあります。クラスマネージャは、

クラスを 1 つずつコールしていき、そのデバイスのインタフェースの管理をいずれかのクラスが引き

受けるようになるまでコールを続けます。1 つのクラスでは 1 つのインタフェースのみを管理できます。

USB オーディオスピーカの例では、インタフェースの各々に対してクラスマネージャがすべてのクラ

スをコールします。

あるクラスがインタフェースを引き受けたら、そのクラスの新しいインスタンスが作成されます。次にク

ラスマネージャは、そのインタフェースのデフォルトの代替設定を探します。各デバイスでは、個々の

インタフェースごとに 1 つ以上の代替設定を設けることができます。クラスで他の代替設定への変更

が決定されるまでは、デフォルトの代替設定 0 が使用されます。

デフォルトの代替設定時には、クラスマネージャは代替設定に含まれるすべてのエンドポイントをマ

ウントします。各エンドポイントのマウントに成功すると、クラスマネージャは最後にそのクラスに返り、

インタフェースの初期化が完成します。

USBX API USB スタックから、一定数の API がエクスポートされます。これらは、USB クラスがデバイスでの問

い合わせおよび特定のエンドポイントでの USB 転送を実行するための API です。これら API につい

ては、リフェレンスマニュアルに詳述されています。

ホストコントローラ ホストコントローラドライバは、特定の種類のUSBコントローラを駆動する任にあたります。USBホス

トコントローラは複数のコントローラを内蔵できます。例えば、ある種のインテル PC チップセットは 2つの UHCIコントローラを搭載しています。また、一部の USB 2.0コントローラには、EHCIコントロー

ラのインスタンス 1 つに加え、OHCI コントローラのインスタンスを複数搭載しているものがあります。

ホストコントローラでは、同一のコントローラのみの複数のインスタンスを管理します。ほとんどの

USB 2.0ホストコントローラを駆動するためには、USBX の初期化時に OCHI コントローラと EHCI コントローラの両方を初期化することが必要になります。

ホストコントローラは、以下のものを管理の対象とします。

ルートハブ Power Management Endpoints Transfers

Page 25: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ルートハブ ルートハブ管理では、各コントローラポートに電源を投入し、挿入されているデバイスがあるかどうか

を判定します。この機能を USBX ジェネリックルートハブが使用し、コントローラの下流ポートに問い

合わせを行います。

電力管理 電力管理処理は、中断/再開信号を扱うための機能です。ギャングモードにしてコントローラのすべ

ての下流ポートに同時に影響するようにするか、または(コントローラ側で対応している場合は)各

ポートに対して個別に使用します。

エンドポイント エンドポイント管理では、コントローラへの物理エンドポイントを作成または破壊することができます。

物理エンドポイントとはメモリエンティティのことで、マスターDMA をサポートするコントローラで解析

される場合と、コントローラに書き込まれている場合があります。物理エンドポイントには、コントロー

ラにより実行されるトランザクション情報が含まれています。

転送 転送管理とは、作成した各エンドポイントでクラスがトランザクションを実行するためのものです。各

論理エンドポイントには、USB転送要求用のTRANSFER REQUESTというコンポーネントが含まれ

ています。TRANSFER REQUEST は、トランザクションを記述するためにスタックで使用されます。

この TRANSFER REQUEST がスタックとコントローラに渡され、コントローラではその能力に応じて

いくつかのサブトランザクションに分割することができます。

Page 26: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USB デバイスのフレームワーク USB デバイスは、記述子のツリーで表されます。記述子は次の 6 種類に大別されます。

デバイス記述子 コンフィギュレーション記述子 インタフェース記述子 エンドポイント記述子 ストリング記述子 ファンクショナル記述子

USB デバイスは、ごく簡潔に記述することが可能で、その場合は次のようになります。

上の図では、デバイスに含まれるコンフィギュレーションは 1 つだけです。このコンフィギュレーション

に 1 つのインタフェースがアタッチされています。すなわち、このデバイスではファンクションが 1 つだ

け、エンドポイントも 1 つだけです。デバイス記述子にストリング記述子をアタッチして、デバイスの識

別を可視化しています。

デバイス 記述子

ストリング 記述子

コンフィギュレーション 記述子

インタフェース 記述子

エンドポイント 記述子

Page 27: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

逆に、もっと複雑なデバイスも可能で、その場合は次のようになります。

上の図では、デバイス記述子にコンフィギュレーション記述子が 2 つアタッチされています。このデバ

イスでは、電力モードが 2つある場合や、標準クラスや各社独自のクラスで駆動される場合などがあ

ります。

最初のコンフィギュレーションには 2 つのインタフェースがアタッチされている、すなわち 2 つの論理

ファンクションを持っています。最初のファンクションには、エンドポイント記述子が 3 つ、ファンクショ

ナル記述子が 1 つあります。ファンクショナル記述子は、例えばインタフェースの駆動を担うクラスが

使用し、このインタフェースに関してジェネリック記述子には含まれていないような追加情報を取得し

たりします。

デバイス記述子 ストリング記述子

コンフィギュレーション 記述子

コンフィギュレーション 記述子

インタフェース 記述子

インタフェース 記述子

インタフェース 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

ファンクショナル 記述子

ファンクショナル 記述子

ファンクショナル 記述子

Page 28: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

デバイス記述子 各 USB デバイスには、デバイス記述子が 1 つあります。この記述子には、デバイス識別子、サポー

トしているコンフィギュレーションの数、およびデバイスのコンフィギュレーションに使用するデフォルト

の制御エンドポイントの特性が記述されます。

オフ セット フィールド サイズ 値 説明

0 BLength 1 数値 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 デバイス記述子の型 2 bcdUSB 2 BCD USB 仕様リリース番号(2 進化 10 進数)

例例: 2.10は 0x210と等しい。このフィールドには、デバ

イスとその記述子が準拠する USB 仕様のリリース番号

を示します。 4 bDeviceClass 1 クラス クラスコード(USB-IF により割り当てられる)。

このフィールドを 0 にリセットすると、コンフィギュレーショ

ン内の各インタフェースが自身のクラス情報を指定し、

それぞれのインタフェースが独立して動作します。 このフィールドを 1~0xFE の値に設定すると、デバイス

はインタフェースごとに異なるクラス仕様をサポートする

ことになり、各インタフェースは独立して動作しない場合

があります。この値は、インタフェースの集合に使用され

るクラス定義を特定します。 このフィールドを 0xFFに設定すると、ベンダ固有のデバ

イスクラスになります。 5 bDeviceSubClass 1 サブクラス サブクラスコード(USB-IF により割り当てられる)。

これらのコードはbDeviceClassフィールドの値に修飾さ

れます。bDeviceClass フィールドが 0 にリセットされた

場合は、このフィールドも 0 にリセットする必要がありま

す。bDeviceClass フィールドが 0xFF に設定されない場

合、すべての値が USB による割り当て用に予約されま

す。 6 bDeviceProtocol 1 プロトコル プロトコルコード(USB-IF により割り当てられる)。

こ れ ら の コ ー ド は bDeviceClass フ ィ ー ル ド と

bDeviceSubClass フィールドの値に修飾されます。イン

タフェースベースではなくクラスベースのクラス固有プロ

トコルをサポートするデバイスでは、デバイスが使用す

るプロトコルを、デバイスクラスの仕様の定義に従ってこ

のコードで識別します。このフィールドを 0 にリセットする

と、デバイスはクラス固有プロトコルをデバイスベースで

使用しません。 ただし、インタフェースベースでクラス固有プロトコルを

使用することはできます。 このフィールドを 0xFF に設定すると、デバイスはベンダ

固有プロトコルをデバイスベースで使用します。 7 bMaxPacketSize0 1 数値 エンドポイント 0 の最大パケットサイズ(バイトサイズ 8、

16、32、または 64 のみが有効) 8 idVendor 2 ID ベンダ ID(USB-IF により割り当てられる)

Page 29: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

10 idProduct 2 ID 製品 ID(メーカーにより割り当てられる) 12 bcdDevice 2 BCD デバイスリリース番号(2 進化 10 進数) 14 iManufacturer 1 インデックス メーカーを記述するストリング記述子のインデックス 15 iProduct 1 インデックス 製品を記述するストリング記述子のインデックス 16 iSerialNumber 1 インデックス デバイスのシリアル番号を記述するストリング記述子の

インデックス 17 bNumConfiguration

s 1 数値 可能なコンフィギュレーションの数

USBX では、USB デバイス記述子を次のように定義します。

typedef struct UX_DEVICE_DESCRIPTOR_STRUCT {

UINT bLength; UINT bDescriptorType; USHORT bcdUSB; UINT bDeviceClass; UINT bDeviceSubClass; UINT bDeviceProtocol; UINT bMaxPacketSize0; USHORT idVendor; USHORT idProduct; USHORT bcdDevice; UINT iManufacturer; UINT iProduct; UINT iSerialNumber; UINT bNumConfigurations;

} UX_DEVICE_DESCRIPTOR;

USB デバイス記述子は、以下のデバイスコンテナの一部となっています。

typedef struct UX_DEVICE_STRUCT {

ULONG ux_device_handle; ULONG ux_device_type; ULONG ux_device_state; ULONG ux_device_address; ULONG ux_device_speed; ULONG ux_device_port_location; ULONG ux_device_max_power; ULONG ux_device_power_source; UINT ux_device_current_configuration; TX_SEMAPHORE ux_device_protection_semaphore; struct UX_DEVICE_STRUCT *ux_device_parent; struct UX_HOST_CLASS_STRUCT *ux_device_class; VOID *ux_device_class_instance; struct UX_HCD_STRUCT *ux_device_hcd; struct UX_CONFIGURATION_STRUCT *ux_device_first_configuration; struct UX_DEVICE_STRUCT *ux_device_next_device; struct UX_DEVICE_DESCRIPTOR_STRUCT ux_device_descriptor;

Page 30: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

struct UX_ENDPOINT_STRUCT ux_device_control_endpoint; struct UX_HUB_TT_STRUCT ux_device_hub_tt[UX_MAX_TT];

} UX_DEVICE;

変数名 変数の説明 ux_device_handle デバイスのハンドル。通常は、デバイスのこの構造のイン

スタンスのアドレスです。 ux_device_type 廃止された値。不使用。 ux_device_state デバイスステート。次のいずれかの値を設定できます。

UX_DEVICE_RESET 0 UX_DEVICE_ATTACHED 1 UX_DEVICE_ADDRESSED 2 UX_DEVICE_CONFIGURED 3 UX_DEVICE_SUSPENDED 4 UX_DEVICE_RESUMED 5 UX_DEVICE_SELF_POWERED_STATE 6 UX_DEVICE_SELF_POWERED_STATE 7 UX_DEVICE_REMOTE_WAKEUP 8 UX_DEVICE_BUS_RESET_COMPLETED 9 UX_DEVICE_REMOVED 10 UX_DEVICE_FORCE_DISCONNECT 11

ux_device_address SET_ADDRESS コマンドが受け付けられた後のデバイス

のアドレス(1~127)。 ux_device_speed デバイスの速度。

UX_LOW_SPEED_DEVICE 0 UX_FULL_SPEED_DEVICE 1 UX_HIGH_SPEED_DEVICE 2

ux_device_port_location 親デバイス(ルートハブまたはハブ)のポートのインデック

ス。 ux_device_max_power 選択されたコンフィギュレーションにおいてデバイスに取り

込める最大電力(単位、mA)。 ux_device_power_source 次の 2 つのいずれかの値が可能です。

UX_DEVICE_BUS_POWERED 1 UX_DEVICE_SELF_POWERED 2

ux_device_current_configuration このデバイスで現在使用しているコンフィギュレーションの

インデックス。 ux_device_parent このデバイスの親のデバイスコンテナポインタ。ポインタが

NULL なら、コントローラのルートハブが親です。

Page 31: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_device_class このデバイスを所有するクラス型へのポインタ。 ux_device_class_instance このデバイスを所有するクラスのインスタンスへのポイン

タ。 ux_device_hcd このデバイスがアタッチされる USB ホストコントローライン

スタンス。 ux_device_first_configuration このデバイスの 1 番目のコンフィギュレーションコンテナへ

のポインタ。 ux_device_next_device USBX により検出されるいずれかのバスにあるデバイス

のうち、デバイスリストに含まれる次のデバイスへのポイ

ンタ。 ux_device_descriptor USB device descriptor. ux_device_control_endpoint このデバイスで使用するデフォルトの制御エンドポイントの

記述子。 ux_device_hub_tt デバイスのハブ TT の配列。

コンフィギュレーション記述子 コンフィギュレーション記述子には、特定のデバイスコンフィギュレーションに関する情報を記述しま

す。USB デバイスには、1 つ以上のコンフィギュレーション記述子を含めることができます。デバイス

記述子の bNumConfigurations フィールドに、コンフィギュレーション記述子の数が示されます。コン

フィギュレーション記述子のbConfigurationValueフィールドの値は、それがSet Configuration要求

へのパラメータとして使用された場合、その値に対応するコンフィギュレーションをデバイスが取るよ

うになります。

コンフィギュレーション記述子には、コンフィギュレーションで提供されるインタフェースの数を記述し

ます。各インタフェースは、デバイス内での論理ファンクションを表すもので、それぞれ独立して動作

することが可能です。例えば USBオーディオスピーカでは、オーディオストリーミングインタフェース、

オーディオコントロールインタフェース、各種スピーカボタンの管理用のHIDインタフェースが各1個、

合計 3 個のインタフェースを設けることができます。

ホストがコンフィギュレーション記述子に対して GET_DESCRIPTOR 要求を発行すると、関連するイ

ンタフェース記述子とエンドポイント記述子がすべて返されます。

Page 32: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

オフセット フィールド サイズ 値 説明 0 bLength 1 数値 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 コンフィギュレーション 2 wTotalLength 2 数値 このコンフィギュレーションに対して返される

データの合計長さ。このコンフィギュレーション

に対して返されるすべての記述子(コンフィギュ

レーション、インタフェース、エンドポイント、お

よびクラス固有またはベンダ固有)を組合わせ

た長さが含まれます。 4 bNumInterfaces 1 数値 このコンフィギュレーションでサポートされるイ

ンタフェースの合計数。 5 bConfigurationValue 1 数値 このコンフィギュレーションを選択するために

Set Configuration の引数として使用する値。 6 iConfiguration 1 インデックス このコンフィギュレーションを記述するストリン

グ記述子のインデックス。 7 bMAttributes 1 ビットマップ コンフィギュレーション特性 D7 バス電力

D6 自己電力 D5 リモートウェイクアップ D4..0 予約済み(0 にリセット) バスからの電力およびローカル電源を使用す

るデバイスコンフィギュレーションでは、D7 と

D6 の両方をセットします。実行時の実際の電

源は、Get Status デバイス要求を使用して決

定することも可能です。 デバイスコンフィギュレーションがリモートウェイ

クアップをサポートする場合は、D5 を 1 に設定

します。 8 MaxPower 1 mA デバイスが完全に機能するときに、このコン

フィギュレーションにおいてバスから供給される

電力に対する USBデバイスの最大消費電力。 2mA 単位で表します(例: 50 = 100mA)。 注: コンフィギュレーションがバス電力か自己電

力かは、デバイスコンフィギュレーションで報告

します。 デバイスは現在自己電力で動作しているかど

うかは、デバイスステータスで報告します。デ

バイスの外部電源から接続が切断したときは、

デバイスがデバイスステータスを更新し、自己

電力ではなくなっていることを示します。

Page 33: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USBX では USB コンフィギュレーション記述子を次のように定義します。

typedef struct UX_CONFIGURATION_DESCRIPTOR_STRUCT {

UINT bLength; UINT bDescriptorType; USHORT wTotalLength; UINT bNumInterfaces; UINT bConfigurationValue; UINT iConfiguration; UINT bmAttributes; UINT MaxPower;

} UX_CONFIGURATION_DESCRIPTOR;

USB コンフィギュレーション記述子は、以下のコンフィギュレーションコンテナの一部となっています。

typedef struct UX_CONFIGURATION_STRUCT {

ULONG ux_configuration_handle; ULONG ux_configuration_state; struct UX_CONFIGURATION_DESCRIPTOR_STRUCT ux_configuration_descriptor; struct UX_INTERFACE_STRUCT *ux_configuration_first_interface; struct UX_CONFIGURATION_STRUCT *ux_configuration_next_configuration; struct UX_DEVICE_STRUCT *ux_configuration_device;

} UX_CONFIGURATION;

変数名 変数の説明 ux_configuration_handle コンフィギュレーションのハンドル。通常は、コンフィギュ

レーションのこの構造のインスタンスのアドレスです。 ux_configuration_state コンフィギュレーションのステート ux_configuration_descriptor USB device descriptor. ux_configuration_first_interface このコンフィギュレーションの 1 番目のインタフェースへの

ポインタ ux_configuration_next_configuration 同じデバイスの次のコンフィギュレーションへのポインタ ux_configuration_device このコンフィギュレーションのデバイス所有者へのポインタ

インタフェース記述子 インタフェース記述子には、コンフィギュレーション内の特定のインタフェースについて記述します。イ

ンタフェースとは、USBデバイス内の論理ファンクションです。コンフィギュレーションには 1つ以上の

インタフェースを備えています。各インタフェースには、コンフィギュレーションに含まれるエンドポイン

トの一意のセットを記述する、エンドポイント記述子が 0 個以上含まれます。2 つ以上のインタフェー

スをサポートするコンフィギュレーションでは、指定されたコンフィギュレーションについて

GET_DESCRIPTOR 要求から返されるデータに含まれるインタフェース記述子に、各インタフェース

のエンドポイント記述子が従います。

Page 34: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

インタフェース記述子は、必ずコンフィギュレーション記述子の一部として返されます。

GET_DESCRIPTOR 要求からインタフェース記述子に直接アクセスすることはできません。

デバイスをコンフィギュレーションした後にエンドポイントやその特性を変更できるように、代替設定を

インタフェースに含めることができます。インタフェースのデフォルト設定では、常に代替設定が 0 で

す。現在の代替設定をクラスから変更することで、インタフェースの挙動および関連するエンドポイン

トの特性を変更することができます。代替設定の選択やデフォルト設定への復帰には、

SET_INTERFACE 要求を使用します。

代替設定を使用することで、他のインタフェースを作動させたままでデバイスのコンフィギュレーショ

ンを一部変更することができます。1 つまたは複数のインタフェースに対して代替設定を備えている

コンフィギュレーションでは、別のインタフェース記述子とその関連エンドポイントが代替設定ごとに

含まれます。

2 つの代替設定を持つ 1 つのインタフェースを記述したデバイスコンフィギュレーションの場合、この

コンフィギュレーションに GET_DESCRIPTOR 要求を発行すると、コンフィギュレーション記述子が

返され、 次に bInterfaceNumber フィールドと bAlternateSetting フィールドが共に 0 に設定されたイ

ンタフェース記述子が返され、その次にその設定のエンドポイント記述子が返されます。その後に、

もう 1 つのインタフェース記述子およびそれに関連するエンドポイント記述子が返されてきます。2 番

目のインタフェース記述子では、bInterfaceNumber フィールドは 0 に設定されていますが、

bAlternateSetting フィールドは 1 に設定されています。つまり、この代替設定は 1 番目のインタ

フェースに属するものです。

関連するエンドポイントを持たないインタフェースもありますが、その場合は、デフォルトの制御エンド

ポイントのみが有効なインターフェイスとなっています。

代替設定は主に、インタフェースに関連する周期的エンドポイントへの要求帯域幅を変更するために

使用されます。例えば USB スピーカのストリーミングインタフェースの場合、1 番目の代替設定には、

アイソクロナスエンドポイントでの帯域幅需要として 0 を設定します。その他の代替設定では、オー

ディオストリーミング周波数に応じて異なる帯域幅要件が選択できます。

インタフェースの USB 記述子は次のようになっています。

オフ セット

フィールド サイズ 値 記述子

0 bLength 1 数値 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 インタフェース記述子の型 2 bInterfaceNumber 1 数値 インタフェースの番号。このコンフィギュレーションで

サポートされる並列インタフェースの配列内のイン

デックスを示す、ゼロベースの値。 3 bAltenateSetting 1 数値 前のフィールドで示したインタフェースに対する代替

設定を選択するための値。 4 bNumEndpoints 1 数値 この値を 0 に設定すると、このインタフェースはエ

ンドポイント 0 のみを使用します。

Page 35: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

5 bInterfaceClass 1 クラス クラスコード(USB により割り当てられる)。 この値を 0にリセットすると、インタフェースは

USB 指定のどのデバイスクラスにも属さなく

なります。 このフィールドを 0xFF に設定すると、インタ

フェースクラスはベンダ固有になります。 その他の値はすべて、USB による割り当て

用に予約されています。 6 bInterfaceSubClas

s 1 サブクラス サブクラスコード(USB により割り当てられ

る)。 これらのコードは bInterfaceClass フィールド

の値に修飾されます。bInterfaceClassフィー

ルドが 0 にリセットされた場合は、このフィー

ルドも 0 にリセットする必要があります。

bInterfaceClass フィールドが 0xFF に設定さ

れない場合、すべての値が USB による割り

当て用に予約されます。 7 bInterfaceProtocol 1 プロトコル プロトコルコード(USB により割り当てられ

る)。これらのコードはbInterfaceClassフィー

ルドと bInterfaceSubClass フィールドの値に

修飾されます。クラス固有要求をインタフェー

スでサポートする場合、デバイスクラスの仕

様に従ってデバイスが使用するプロトコル

を、このコードで特定します。 このフィールドを 0 にリセットすると、デバイス

はこのインタフェースにクラス固有プロトコル

を使用しません。このフィールドを 0xFF に設

定すると、デバイスはこのインタフェースにベ

ンダ固有プロトコルを使用します。 8 iInterface 1 インデックス このインタフェースを記述するストリング記述

子のインデックス。

USBX では、USB インタフェース記述子を次のように定義します。

typedef struct UX_INTERFACE_DESCRIPTOR_STRUCT {

UINT bLength; UINT bDescriptorType; UINT bInterfaceNumber; UINT bAlternateSetting; UINT bNumEndpoints; UINT bInterfaceClass; UINT bInterfaceSubClass; UINT bInterfaceProtocol; UINT iInterface;

} UX_INTERFACE_DESCRIPTOR;

Page 36: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USB インタフェース記述子は、以下のインタフェースコンテナの一部となっています。

typedef struct UX_INTERFACE_STRUCT {

ULONG ux_interface_handle; ULONG ux_interface_state; ULONG ux_interface_current_alternate_setting; struct UX_INTERFACE_DESCRIPTOR_STRUCT ux_interface_descriptor; struct UX_HOST_CLASS_STRUCT *ux_interface_class; VOID *ux_interface_class_instance; struct UX_ENDPOINT_STRUCT *ux_interface_first_endpoint; struct UX_INTERFACE_STRUCT *ux_interface_next_interface; struct UX_CONFIGURATION_STRUCT *ux_interface_configuration;

} UX_INTERFACE;

変数名 変数の説明 ux_interface_handle インタフェースのハンドル。通常は、インタフェースのこの構造

のインスタンスのアドレスです。 ux_interface_state インタフェースのステート ux_interface_descriptor USB インタフェース記述子 ux_interface_class このインタフェースを所有するクラス型へのポインタ ux_interface_class_instance このインタフェースを所有するクラスのインスタンスへのポイン

タ ux_interface_first_endpoint このインタフェースで登録される 1 番目のエンドポイントへのポ

インタ ux_interface_next_interface このコンフィギュレーションに関連する次のインタフェースへの

ポインタ ux_interface_configuration このインタフェースのコンフィギュレーション所有者へのポインタ

エンドポイント記述子 インタフェースに関連するエンドポイントには、それぞれ自身のエンドポイント記述子があります。こ

の記述子には、各エンドポイントに関し、その帯域幅要件、関連する最大ペイロード、周期性、およ

び方向を、それぞれホストスタックで決定するのに必要な情報を記述します。エンドポイント記述子は

常に、コンフィギュレーションに対する GET_DESCRIPTOR コマンドによって返されます。

デバイス記述子に関連するデフォルトの制御エンドポイントは、インタフェースに関連するエンドポイ

ントの一部とはカウントされないため、この記述子では返されません。

インタフェースの代替設定の切り替えをホストソフトウェアが要求するときは、関連するすべてのエン

ドポイントとその USB リソースが新しい代替設定に従って修正されます。

デフォルトの制御エンドポイントを除き、エンドポイントをインタフェース間で共有することはできませ

ん。

Page 37: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

オフセット フィールド サイズ 値 説明 0 bLength 1 数値 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 エンドポイント記述子の型 2 bEndpointAddress 1 エンドポイント この記述子に記述されるUSBデバイス上のエンドポイ

ントのアドレス。アドレスは次のようにエンコードされま

す。 ビット 3~0: エンドポイント番号 ビット 6~4:予約(0 にリセット) ビット 7: 方向(制御エンドポイントの場合は無視) 0 = OUT エンドポイント 1 = IN エンドポイント

3 bmAttributes 1 ビットマップ このフィールドには、bConfigurationValue を用いてエ

ンドポイントをコンフィギュレーションするときの、エンド

ポイントの属性を記述します。 ビット 1~0: 転送の種類 00 = 制御 01 = アイソクロナス 10 = バルク 11 = インタラプト アイソクロナスエンドポイントでない場合は、ビット 5~2 は予約されていて、0 に設定する必要があります。ア

イソクロナスの場合は、次のように定義されます。 ビット 3~2:同期の種類 00 = 同期なし 01 = 非同期 10 = 適応 11 = 同期 ビット 5~4:使用法の種類 00 = データエンドポイント 01 = フィードバックエンドポイント 10 = インプリシット・フィードバックデータエンドポイント

4 wMaxPacketSize 2 数値 このコンフィギュレーションを選択したときにこのエンド

ポイントで送受信可能な最大パケットサイズ。 アイソクロナスエンドポイントの場合は、(マイクロ)フ

レームあたりのデータペイロードに必要となるバス時

間を、この値でスケジュールに予約します。パイプで実

際に使用される帯域幅(継続ベース)は、予約した帯

域幅より少ない場合があります。実際に使用した帯域

幅は、デバイスから通常の非 USB 定義のメカニズム

を介して必要に応じて報告されます。 すべてのエンドポイントについて、ビット 10~0 で最大

パケットサイズを指定します。

Page 38: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

高速アイソクロナスおよびインタラプトのエンド

ポイントの場合は: ビット 12~11 では、マイクロフレームあたりの

追加トランザクション機会数を指定します。 00 = なし(1 トランザクション/マイクロフレー

ム) 01 = 1 additional (2 per microframe) 10 = 2 つ追加(3/マイクロフレーム) 11 = 予約

ビット 15~13は予約済みで、0に設定する必要があり

ます。 6 bInterval 1 数値 データ転送用にエンドポイントをポーリングする間

隔数値。 デバイスの動作速度に応じてフレーム数またはマ

イクロフレーム数で表します(1 ミリ秒または 125 マ

イクロ秒単位)。 全速/高速アイソクロナスエンドポイントでは、この

値を 1~16 の範囲に設定する必要があります。

bInterva 値は、2 x bInterval - 1 の値の指数として

使用されます。例えば、bInterval を 4 にすると、8 (24-1)の周期になります。 全速/低速インタラプトエンドポイントでは、この

フィールドの値は 1~255 が可能です。 高速インタラプトエンドポイントでは、bInterva 値は、2×bInterval - 1 の値の指数として使用されま

す。例えば、bIntervalを 4にすると、8 (24-1)の周期

になります。この値は 1~16 とします。 高速バルク/制御 OUT エンドポイントでは、

bInterval でエンドポイントの最大 NAK 率を指定する

必要があります。0 は、NAK が絶対に発生しないこと

を示します。その他の値では、bInterval×マイクロ秒

ごとに NAK 数が高々1 となります。 この値は 0~255 の範囲内である必要があります。

USBX では USB エンドポイント記述子を次のように定義します。

typedef struct UX_ENDPOINT_DESCRIPTOR_STRUCT {

UINT bLength; UINT bDescriptorType; UINT bEndpointAddress; UINT bmAttributes; USHORT wMaxPacketSize; UINT bInterval;

} UX_ENDPOINT_DESCRIPTOR;

Page 39: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USB エンドポイント記述子は、以下のエンドポイントコンテナの一部となっています。

typedef struct UX_ENDPOINT_STRUCT {

ULONG ux_endpoint_handle; ULONG ux_endpoint_state; VOID *ux_endpoint_ed; struct UX_ENDPOINT_DESCRIPTOR_STRUCT ux_endpoint_descriptor; struct UX_ENDPOINT_STRUCT *ux_endpoint_next_endpoint; struct UX_INTERFACE_STRUCT *ux_endpoint_interface; struct UX_DEVICE_STRUCT *ux_endpoint_device; struct UX_TRANSFER REQUEST_STRUCT ux_endpoint_transfer request;

} UX_ENDPOINT;

Variable Name 変数の説明 ux_endpoint_handle エンドポイントのハンドル。通常は、エンドポイントのこの構造の

インスタンスのアドレスです。 ux_endpoint_state エンドポイントのステート ux_endpoint_ed ホストコントローラレイヤでの物理エンドポイントへのポインタ ux_endpoint_descriptor USB エンドポイント記述子 ux_endpoint_next_endpoint 同じインタフェースに属する次のエンドポイントへのポインタ ux_endpoint_interface このエンドポイントインタフェースを所有するインタフェースへの

ポインタ ux_endpoint_device 親デバイスコンテナへのポインタ ux_endpoint_transfer request デバイスとの間でデータを送受信するための USB 転送要求

ストリング記述子 ストリング記述子はオプションです。デバイスでストリング記述子をサポートしていない場合は、デバ

イス記述子、コンフィギュレーション記述子、インタフェース記述子にそれぞれ含まれるストリング記

述子への参照は、すべて 0 にリセットする必要があります。

ストリング記述子では UNICODE エンコーディングを使用します。これにより、いくつかの文字セット

をサポートすることができます。USB デバイス内のストリングは、複数の言語のサポートが可能です。

ストリング記述子を要求するときにリクエスタは、USB-IF で定義されている言語を使用して目的の言

語を指定します。現在定義されている USB LANGID のリストを、USBX の附属書??に載せてありま

す。すべての言語に対してストリングインデックスをゼロにすると、デバイスでサポートしている 2バイ

トの LANGIDコードの配列を含むストリング記述子が返ります。なお、UNICODEストリングは 0では

終わりません。代わりに、記述子の先頭バイトに含まれる配列のサイズから 2 を差し引いてストリン

グ配列のサイズが計算されます。

Page 40: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USB ストリング記述子 0 は、次のようにエンコードされます。

オフセット フィールド サイズ 値 説明 0 bLength 1 N+2 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 ストリング記述子の型。 2 wLANGID[0] 2 数値 LANGID コード 0 .. …] .. … … N wLANGID[n] 2 数値 LANGID コード n

Page 41: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

その他の USB ストリング記述子は、次のようにエンコードされます。

オフセット フィールド サイズ 値 説明 0 bLength 1 数値 この記述子のサイズ(単位、バイト) 1 bDescriptorType 1 定数 ストリング記述子の型。 2 bString N 数値 UNICODE エンコードストリング

USBX では、非ゼロ長の USB ストリング記述子を次のように定義します。

typedef struct UX_STRING_DESCRIPTOR_STRUCT {

UINT bLength; UINT bDescriptorType; USHORT bString[1];

} UX_STRING_DESCRIPTOR;

ファンクショナル記述子 ファンクション記述子は、クラス固有記述子とも呼ばれます。この記述子は通常、ジェネリック記述子

と同じ基本構造を用い、追加の情報がクラスで使用できるようになります。例えば USB オーディオス

ピーカの場合では、オーディオクラスがクラス固有記述子を使用することで、サポートされるオーディ

オ周波数の種類を代替設定ごとに取得することができます。

メモリ内の USBX デバイス記述子フレームワーク USBX では、ほとんどのデバイス記述子、すなわちストリング記述子とファンクション記述子を除くす

べての記述子が、メモリに保持されます。次の図に、各記述子がどのように保存され、互いにどのよ

うに関係するかを示します。

Page 42: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

デバイス

デバイス 記述子

コンフィギュレーション

コンフィギュレーション 述

デバイス コンテナ

デバイス 記述子

コンフィギュ レーション コンテナ

コンフィギュ レーション 記述子

インタフェース コンテナ

(代替設定 0)

インタフェース

インタフェース コンテナ

(代替設定 1)

インタフェース

インタフェース 記述子

エンドポイント コンテナ

エンドポイント コンテナ

エンドポイント コンテナ

エンドポイント コンテナ

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

エンドポイント 記述子

デバイス コンテナ

コンフィギュ レーション コンテナ

デバイス 記述子

コンフィギュ レーション 記述子

インタフェース コンテナ

インタフェース 記述子

Page 43: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 4 章 USBX ホストサービスの説明

Page 44: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_initialize ホスト操作用に USBX を初期化

プロトタイプ

UINT ux_host_stack_initialize(UINT (*system_change_function) (ULONG, UX_HOST_CLASS *))

説明

USB ホストスタックを初期化するファンクションです。与えられたメモリ領域が USBX 内部で

の使用用にセットアップされます。UX_SUCCESSが返されたら、USBXはホストコントローラ

とクラスの登録が可能になります。

入力パラメータ

system_change_function アプリケーションにデバイスの変更を通知するため

のオプションのコールバックルーチンへのポインタ

返却値

UX_SUCCESS (0x00) 初期化成功。

Example

UINT status; /* Initialize USBX for host operation, without notification. */ status = ux_host_stack_initialize(UX_NULL); /* If status equals UX_SUCCESS, USBX has been successfully initialized for host operation.*/

Page 45: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_endpoint_transfer_abort エンドポイントへの転送要求にアタッチされているすべてのトランザクションをアボート

プロトタイプ

UINT ux_host_stack_endpoint_transfer_abort(UX_ENDPOINT *endpoint)

説明

エンドポイントにアタッチされている特定の転送要求に関し、すべてのトランザクションを(アク

ティブか保留中かにかかわりなく)取り消すファンクションです。転送要求にコールバックファ

ンクションがアタッチされているときは、UX_TRANSACTION_ABORTED ステータスでコー

ルバックファンクションがコールされます。

入力パラメータ

endpoint エンドポイントへのポインタ

返却値

UX_SUCCESS (0x00) エラーなし。

UX_ENDPOINT_HANDLE_UNKNOWN (0x53) エンドポイントハンドルが無効で

す。

UX_HOST_CLASS_PRINTER *printer; UINT status; /* Get the instance for this class.*/ printer = (UX_HOST_CLASS_PRINTER *) command -> ux_host_class_command_instance; /* The printer is being shut down.*/ printer -> printer_state = UX_HOST_CLASS_INSTANCE_SHUTDOWN; /* We need to abort transactions on the bulk out pipe.*/ status = ux_host_stack_endpoint_transfer_abort

(printer -> printer_bulk_out_endpoint); /* If status equals UX_SUCCESS, the operation was successful */

Page 46: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_class_get クラスコンテナへのポインタを取得

プロトタイプ

UINT ux_host_stack_class_get(UCHAR *class_name, UX_HOST_CLASS **class)

説明

クラスコンテナへのポインタを返すファンクションです。クラスまたはアプリケーションでデバイ

スをオープンしようとするときに、クラスでは、インスタンスを検索するために USB スタックか

らクラスのコンテナを取得する必要があります。

パラメータ

class_name Pointer to the class name.

class クラスの名前に関し、クラスコンテナを記述したファ

ンクションコールにより更新されたポインタ

返却値

UX_SUCCESS (0x00) エラーなし。返却時に、クラスフィールドが

クラスコンテナへのポインタとともにファイ

ル化されます。

UX_HOST_CLASS_UNKNOWN (0x59) スタックにとって不明のクラスです。

UX_HOST_CLASS *printer_container; UINT status; /* Get the container for this class. */ status = ux_host_stack_class_get("ux_host_class_printer",

&printer_container); /* If status equals UX_SUCCESS, the operation was successful */

Page 47: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_class_register USB スタックに USB クラスを登録

プロトタイプ

UINT ux_host_stack_class_register(CHAR_PTR class_name, UINT (*class_entry_address) (struct UX_HOST_CLASS_COMMAND_STRUCT *))

説明

USBスタックにUSBクラスを登録するファンクションです。以下のようなコマンドを送信するた

めには、クラスは USB スタックへのエントリポイントを指定する必要があります。

UX_HOST_CLASS_COMMAND_QUERY UX_HOST_CLASS_COMMAND_ACTIVATE UX_HOST_CLASS_COMMAND_DESTROY

パラメータ

class_name クラス名へのポインタについては、USBX の USB ク

ラスの下にあるファイル ux_system_initialize.cに有

効なエントリが見つかります。

class_entry_address クラスのエントリファンクションのアドレス

返却値

UX_SUCCESS (0x00) クラスが正常にインストールされま

した。

UX_MEMORY_INSUFFICIENT (0x12) このクラスを保存するためのメモリ

が不足しています。

UX_HOST_CLASS_ALREADY_INSTALLED (0x58) ホストクラスは既にインストールさ

れています。

UINT status; /* Register all the classes for this implementation.*/ status = ux_host_stack_class_register("ux_host_class_hub",

ux_host_class_hub_entry); /* If status equals UX_SUCCESS, class was successfully installed.*/

Page 48: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_class_instance_create クラスコンテナに新しいクラスインスタンスを作成

プロトタイプ

UINT ux_host_stack_class_instance_create(UX_HOST_CLASS *class, VOID *class_instance)

説明

クラスコンテナに新しいクラスインスタンスを作成するファンクションです。クラスの複雑さを軽

減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、メインス

タックにあるクラスコンテナに各クラスがアタッチされています。

パラメータ

class クラスコンテナへのポインタ

class_instance 作成するクラスインスタンスへのポインタ

返却値

UX_SUCCESS (0x00) クラスインスタンスがクラスコンテナにアタッチされま

した。

Example

UINT status; UX_HOST_CLASS_PRINTER *printer; /* Obtain memory for this class instance.*/ printer = ux_memory_allocate(UX_NO_ALIGN,

sizeof(UX_HOST_CLASS_PRINTER)); if (printer == UX_NULL)

return(UX_MEMORY_INSUFFICIENT); /* Store the class container into this instance.*/ printer -> printer_class = command -> ux_host_class; /* Create this class instance. */ status = ux_host_stack_class_instance_create(printer -> printer_class,

(VOID *)printer); /* If status equals UX_SUCCESS, the class instance was successfully created and attached to the class container.*/

Page 49: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_class_instance_destroy クラスコンテナのクラスインスタンスを破棄

プロトタイプ

UINT ux_host_stack_class_instance_destroy(UX_HOST_CLASS *class, VOID *class_instance);

説明

クラスコンテナのクラスインスタンスを破棄するファンクションです。

パラメータ

class クラスコンテナへのポインタ

class_instance 破棄するインスタンスへのポインタ

返却値

UX_SUCCESS (0x00) クラスインスタンスが破棄されま

した。.

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) クラスインスタンスがクラスコンテ

ナにアタッチされていません。

UINT status; UX_HOST_CLASS_PRINTER *printer; /* Get the instance for this class. */ printer = (UX_HOST_CLASS_PRINTER *) command -> ux_host_class_command_instance; /* The printer is being shut down. */ printer -> printer_state = UX_HOST_CLASS_INSTANCE_SHUTDOWN; /* Destroy the instance.*/ status = ux_host_stack_class_instance_destroy(printer -> printer_class,

(VOID *) printer); /* If status equals UX_SUCCESS, the class instance was successfully destroyed.*/

Page 50: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_class_instance_get 特定のクラスへのクラスインスタンスポインタを取得

プロトタイプ

UINT ux_host_stack_class_instance_get(UX_HOST_CLASS *class, UINT class_index, VOID **class_instance)

説明

特定のクラスへのクラスインスタンスポインタを返すファンクションです。クラスの複雑さを軽

減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、クラスコ

ンテナに各クラスがアタッチされています。このファンクションは、クラスコンテナ内でクラスイ

ンスタンスを検索するために使用されます。

パラメータ

class クラスコンテナへのポインタ

class_index コンテナにアタッチされているクラスのリスト内で、

ファンクションコールが使用するインデックス

class_instance ファンクションコールにより返されるインスタンスへの

ポインタ

返却値

UX_SUCCESS (0x00) クラスインスタンスが見つかりま

した。

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) これ以上のクラスインスタンスは

クラスコンテナにアタッチされて

いません。

UINT status; UX_HOST_CLASS_PRINTER *printer; /* Obtain memory for this class instance.*/ printer = ux_memory_allocate(UX_NO_ALIGN,

sizeof(UX_HOST_CLASS_PRINTER)); if (printer == UX_NULL)

return(UX_MEMORY_INSUFFICIENT); /* Search for instance index 2.*/ status = ux_host_stack_class_instance_get(class, 2, (VOID *) printer); /* If status equals UX_SUCCESS, the class instance was found.*/

Page 51: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_device_configuration_get コンフィギュレーションコンテナへのポインタを取得

プロトタイプ

UINT ux_host_device_stack_configuration_get(UX_DEVICE *device, UINT configuration_index, UX_CONFIGURATION **configuration)

説明

デバイスハンドルとコンフィギュレーションインデックスに基づいて、コンフィギュレーションコン

テナを返すファンクションです。

パラメータ

device 要求されたコンフィギュレーションを所有するデバイ

スコンテナへのポインタ

configuration_index 検索対象のコンフィギュレーションのインデックス

configuration 返却対象のコンフィギュレーションコンテナへのポイ

ンタのアドレス

返却値

UX_SUCCESS (0x00) コンフィギュレーションが見つか

りました。

UX_DEVICE_HANDLE_UNKNOWN (0x50) デバイスコンテナが存在しません。

UX_CONFIGURATION_HANDLE_UNKNOWN (0x51) インデックスのコンフィギュレー

ションハンドルが存在しません。

UINT status; UX_HOST_CLASS_PRINTER *printer; /* If the device has been configured already, we don't need to do it again.*/ if (printer -> printer_device -> ux_device_state == UX_DEVICE_CONFIGURED) return(UX_SUCCESS); /* A printer normally has one configuration, retrieve 1st configuration only.*/ status = ux_host_stack_device_configuration_get(printer ->

printer_device, 0, configuration); /* If status equals UX_SUCCESS, the configuration was found.*/

Page 52: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_device_configuration_select デバイスに特定のコンフィギュレーションを選択

プロトタイプ

UINT ux_host_stack_device_configuration_select (UX_CONFIGURATION *configuration)

説明

デバイスに特定のコンフィギュレーションを選択するファンクションです。このコンフィギュレー

ションをデバイスに設定すると、デフォルトでは、各デバイスインタフェースとそれに関連する

代替設定 0 がデバイス上でアクティブになります。特定のインタフェースの設定をデバイスク

ラ ス や イ ン タ フ ェ ー ス ク ラ ス で 変 更 し よ う と す る 場 合 は 、

ux_host_stack_interface_setting_select サービスコールを発行する必要があります。

パラメータ

configuration このサービスに対して有効にすべきコンフィギュレー

ションコンテナへのポインタ

返却値

UX_SUCCESS (0x00) コンフィギュレーションの選択に成功しました。

UX_CONFIGURATION_HANDLE_UNKNOWN (0x51) コンフィギュレーションハンドルが存在しません。

UX_OVER_CURRENT_CONDITION (0x43) このコンフィギュレーションに対してバス上に過電流

状態が存在します。

UINT status; UX_HOST_CLASS_PRINTER *printer; /* If the device has been configured already, we don't need to do it again.*/ if (printer -> printer_device -> ux_device_state == UX_DEVICE_CONFIGURED) return(UX_SUCCESS); /* A printer normally has one configuration - retrieve 1st

configuration only.*/ status = ux_host_stack_device_configuration_get(printer ->

printer_device, 0,configuration); /* If status equals UX_SUCCESS, the configuration selection was successful.*/

Page 53: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* If valid configuration, ask USBX to set this configuration.*/ status = ux_host_stack_device_configuration_select(configuration); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 54: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_device_get デバイスコンテナへのポインタを取得

プロトタイプ

UINT ux_host_stack_device_get(ULONG device_index, UX_DEVICE **device)

説明

デバイスコンテナを、デバイスのインデックスに基づいて返すファンクションです。デバイスイ

ンデックスは 0 で始まります。複数のコントローラを備えることも可能で、しかもバイトインデッ

クスでは不十分なため、インデックスが ULONG 型であることに注意してください。また、デバ

イスインデックスは、バス固有のデバイスアドレスとは異なります。

パラメータ

device_index デバイスのインデックス

device 返却対象のデバイスコンテナへのポインタのアドレス

返却値

UX_SUCCESS (0x00) デバイスコンテナが存在し、返されました。

UX_DEVICE_HANDLE_UNKNOWN (0x50) デバイスが不明です。

UINT status; /* Locate the first device in USBX.*/ status = ux_host_stack_device_get(0, device); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 55: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_interface_endpoint_get エンドポイントコンテナを取得

プロトタイプ

UINT ux_host_stack_interface_endpoint_get(UX_INTERFACE *interface, UINT endpoint_index, UX_ENDPOINT **endpoint)

説明

インタフェースハンドルとエンドポイントインデックスに基づいて、エンドポイントコンテナを返

すファンクションです。エンドポイントの検索に先立ち、インタフェースの代替設定が選択され

ているか、またはデフォルト設定が使用されているものとします。

パラメータ

interface 要求されたエンドポイントを含むインタフェースコンテ

ナへのポインタ

Endpoint_index このインタフェースに入っているエンドポイントのイン

デックス

endpoint 返却対象のエンドポイントコンテナのアドレス

返却値

UX_SUCCESS (0x00) エンドポイントコンテナが存在し、

返されました。

UX_INTERFACE_HANDLE_UNKNOWN (0x52) 指定されたインタフェースが存在

しません。

UX_ENDPOINT_HANDLE_UNKNOWN (0x53) エンドポイントインデックスが存

在しません。

UINT status; UX_HOST_CLASS_PRINTER *printer; for (endpoint_index = 0; endpoint_index < printer -> printer_interface ->

ux_interface_descriptor.bNumEndpoints; endpoint_index++) { status = ux_host_stack_interface_endpoint_get

(printer ->printer_interface, endpoint_index, &endpoint); if (status == UX_SUCCESS) {

Page 56: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Check if endpoint is bulk and OUT.*/ if (((endpoint -> ux_endpoint_descriptor.bEndpointAddress &

UX_ENDPOINT_DIRECTION) == UX_ENDPOINT_OUT) && ((endpoint -> ux_endpoint_descriptor.bmAttributes &

UX_MASK_ENDPOINT_TYPE) == UX_BULK_ENDPOINT)) return(UX_SUCCESS) } }

Page 57: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_hcd_register USB スタックに USB コントローラを登録

プロトタイプ

UINT ux_host_stack_hcd_register(CHAR_PTR hcd_name, UINT (*hcd_function)(struct UX_HCD_STRUCT *), ULONG hcd_param1, ULONG hcd_param2)

説明

USB スタックに USBコントローラを登録するファンクションです。このファンクションは主に、こ

のコントローラで使用しているメモリを割り当て、コントローラに初期化コマンドを渡します。

パラメータ

hcd_name ホストコントローラの名前使用可能なコントローラとし

て、次のものがあります。 "ux_hcd_ohci" "ux_hcd_ehci" "ux_hcd_isp1161"

hcd_function ホストコントローラに含まれていて、初期化を担うファ

ンクション。使用可能なコントローラエントリファンク

ションとして、次のものがあります。 ux_hcd_ehci_initialize ux_hcd_ohci_initialize ux_hcd_isp1161_initialize

hcd_param1 hcd で使用している IO またはメモリリソース。

hcd_param2 ホストコントローラで使用している IRQ。

返却値

UX_SUCCESS (0x00) コントローラが正しく初期化されました。

UX_MEMORY_INSUFFICIENT (0x12) このコントローラのためのメモリが不足し

ています。

UX_PORT_RESET_FAILED (0x31) コントローラのリセットに失敗しました。

UX_CONTROLLER_INIT_FAILED (0x32) コントローラが正しく初期化されませんで

した。

Page 58: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

UINT status; /* Initialize an OHCI controller mapped at address 0xd0000 and using

IRQ 10.*/ status = ux_host_stack_hcd_register("ux_hcd_ohci",

ux_hcd_ohci_initialize, 0xd0000, 0x0a);

/* If status equals UX_SUCCESS, the controller was initialized

properly.*/ /* Note that the application must also setup a call to the interrupt

handler for the OHCI controller.The function for OHCI is called _ux_hch_ohci_interrupt_handler.*/

Page 59: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_configuration_interface_get インタフェースコンテナポインタを取得

プロトタイプ

UINT ux_host_stack_configuration_interface_get (UX_CONFIGURATION *configuration, UINT interface_index, UINT alternate_setting_index, UX_INTERFACE **interface)

説明

コンフィギュレーションハンドル、インタフェースインデックス、および代替設定インデックスに

基づいて、インタフェースコンテナを返すファンクションです。

パラメータ

configuration インタフェースを所有するコンフィギュレーションコン

テナへのポインタ

interface_index 検索対象のインデックス

alternate_setting_index インタフェースに含まれている、検索対象の代替

設定

interface 返却対象のインタフェースコンテナポインタのアド

レス

返却値

UX_SUCCESS (0x00) インタフェースインデックスと代替

設定に対応するインタフェースコ

ンテナが見つかり、返されまし

た。

UX_CONFIGURATION_HANDLE_UNKNOWN (0x51) コンフィギュレーションが存在しま

せん。

UX_INTERFACE_HANDLE_UNKNOWN (0x52) インタフェースが存在しません。

UINT status; /* Search for the default alternate setting on the first interface for the

printer.*/ status = ux_host_stack_configuration_interface_get(configuration, 0, 0,

&printer -> printer_interface); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 60: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_interface_setting_select インタフェースの代替設定を選択

プロトタイプ

UINT ux_host_stack_interface_setting_select(UX_INTERFACE *interface)

説明

選択したコンフィギュレーションに属するあるインタフェースについて、特定の代替設定を選

択するファンクションです。このファンクションは、デフォルトの代替設定から新しい設定に変

更するため、またはデフォルトの代替設定に戻すために使用します。 新しい代替設定を選択したときは、以前のエンドポイント特性が無効になるため、リロードが

必要になります。

入力パラメータ

interface 選択対象の代替設定が入っているインタフェースコ

ンテナへのポインタ

返却値

UX_SUCCESS (0x00) このインタフェースの代替設定が正

常に選択されました。

UX_INTERFACE_HANDLE_UNKNOWN (0x52) インタフェースが存在しません。

Example

UINT status; /* Select a new alternate setting for this interface.*/ status = ux_host_stack_interface_setting_select(interface); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 61: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_transfer_request_abort 保留中の転送要求をアボート

プロトタイプ

UINT ux_host_stack_transfer_request_abort(UX_TRANSFER REQUEST *transfer request)

説明

以前に提出されて保留中の転送要求をアボートするファンクションです。特定の転送要求の

みが取り消されます。このファンクションのコールバックには、 UX_TRANSFER REQUEST_STATUS_ABORT ステータスが含まれます。

パラメータ

transfer request アボート対象の転送要求へのポインタ

返却値

UX_SUCCESS (0x00) この転送要求に対する USB 転送が取り消されまし

た。

UINT status; /* The following example illustrates this service.*/ status = ux_host_stack_transfer_request_abort(transfer request); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 62: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_stack_transfer_request USB 転送を要求

プロトタイプ

UINT ux_host_stack_transfer_request(UX_TRANSFER REQUEST *transfer request)

説明

USB トランザクションを実行するファンクションです。転送要求の入力時に、このトランザク

ション用に選択されたエンドポイントパイプと、転送に関連するパラメータ(データペイロード、

トランザクション長)が指定されます。制御パイプでは、トランザクションはブロッキングになり

ます。制御転送の 3 つのフェーズが完了したとき、または以前のエラーがある場合に限り、ト

ランザクションが返ります。その他のパイプでは、USBスタックがUSB上でのトランザクション

をスケジュールしますが、そのトランザクションの完了を待つことはありません。非ブロッキン

グパイプでの転送要求では、各々に完了ルーチンハンドラを指定しなければなりません。 ファンクションコールが返るときに、転送要求のステータスにトランザクションの結果が含まれ

ているため、このステータスを調べることが望まれます。

入力パラメータ

transfer_request 転送要求へのポインタ。転送要求には、転送に必要

なすべての情報が含まれます。

返却値

UX_SUCCESS (0x00) この転送要求に対する USB 転送が正しく

スケジュールされました。 転送要求が完了するときに、転送要求の

ステータスコードを調べることが望まれま

す。

UX_MEMORY_INSUFFICIENT (0x12) 必要なコントローラリソースを割り当てる

ためのメモリが不足しています。

UINT status; /* Create a transfer request for the SET_CONFIGURATION request.

No data for this request.*/ transfer_request -> ux_transfer_endpoint_handle = control_endpoint; transfer_request -> ux_transfer_requested_length = 0; transfer_request -> ux_transfer_request_function =

UX_SET_CONFIGURATION;

Page 63: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_STANDARD | UX_REQUEST_TARGET_DEVICE;

transfer_request -> ux_transfer_request_value = (USHORT) configuration -> ux_configuration_descriptor.bConfigurationValue; transfer_request -> ux_transfer_request_index = 0; /* Send request to HCD layer.*/ status = ux_host_stack_transfer_request(transfer_request); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 64: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 5 章 USBX ホストクラスの API この章では、USBX クラスの API として公開されているすべての API を説明します。各クラスについ

て、以下の API について詳述します。

プリンタクラス HID クラス オーディオクラス Asix クラス CDC-ACM クラス Pima/PTP クラス Prolific クラス ストレージクラス ジェネリックシリアルクラス

Page 65: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_printer_read プリンタインタフェースから読み出す

プロトタイプ

UINT ux_host_class_printer_read(UX_HOST_CLASS_PRINTER *printer, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

プリンタインタフェースから読み出すためのファンクションです。これはブロッキングコールで

あり、エラーがあるときまたは転送が完了したときにのみ返されます。双方向プリンタでのみ

読み出しが許容されます。

パラメータ

printer プリンタクラスインスタンスへのポインタ

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 受信する長さ

actual_length 実際に受信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) プリンタが双方向でないため、ファン

クションがサポートされません。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。読み出しは未完で

す。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_printer_read(printer, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 66: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_printer_write プリンタインタフェースに書き込む

プロトタイプ

UINT ux_host_class_printer_write(UX_HOST_CLASS_PRINTER *printer, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

プリンタインタフェースに書き込むためのファンクションです。これはブロッキングコールであり、

エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

printer プリンタクラスインスタンスへのポインタ

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 送信する長さ

actual_length 実際に送信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。書き込みは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_printer_write(printer, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 67: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_printer_soft_reset プリンタにソフトリセットを実行

プロトタイプ

UINT ux_host_class_printer_soft_reset(UX_HOST_CLASS_PRINTER *printer)

説明

プリンタにソフトリセットを実行するファンクションです。

入力パラメータ

printer プリンタクラスインスタンスへのポインタ

返却値

UX_SUCCESS (0x00) リセットが完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。リセットは未完で

す。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_printer_soft_reset(printer); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 68: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_printer_status_get プリンタステータスを取得

プロトタイプ

UINT ux_host_class_printer_status_get(UX_HOST_CLASS_PRINTER *printer, ULONG *printer_status)

説明

プリンタステータスを取得するファンクションです。プリンタステータスは、LPT ステータス

(1284 規格)に類似しています。

パラメータ

printer プリンタクラスインスタンスへのポインタ

printer_status 返却対象のステータスのアドレス

返却値

UX_SUCCESS (0x00) リセットが完了しました。

UX_MEMORY_INSUFFICIENT (0x12) 操作を実行するためのメモリが不足

しています。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。リセットは未完で

す。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_printer_status_get(printer, printer_status); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 69: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_read オーディオインタフェースから読み出す

プロトタイプ

UINT ux_host_class_audio_read(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_TRANSFER_REQUEST

*audio_transfer_request)

説明

オーディオインタフェースから読み出すためのファンクションです。これは非ブロッキングコー

ルです。オーディオストリーミングインタフェース用に適切な代替設定が選択されていることを、

アプリケーションで確実にする必要があります。

パラメータ

audio オーディオクラスインスタンスへのポインタ audio_transfer_request オーディオ転送構

造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートされていま

せん。

/* The following example reads from the audio interface.*/ audio_transfer_request.ux_host_class_audio_transfer_request_completion_function =

tx_audio_transfer_completion_function; audio_transfer_request.ux_host_class_audio_transfer_request_class_instance = audio; audio_transfer_request.ux_host_class_audio_transfer_request_next_audio_audio_transfer_request =

UX_NULL; audio_transfer_request. ux_host_class_audio_transfer_request_data_pointer =

audio_buffer; audio_transfer_request.ux_host_class_audio_transfer_request_requested_length =

requested_length; audio_transfer_request.ux_host_class_audio_transfer_request_packet_length =

AUDIO_FRAME_LENGTH; status = ux_host_class_audio_read(audio, audio_transfer_request); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 70: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_write オーディオインタフェースに書き込む

プロトタイプ

UINT ux_host_class_audio_write(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_TRANSFER_REQUEST *audio_transfer_request)

説明

オーディオインタフェースに書き込むためのファンクションです。これは非ブロッキングコール

です。オーディオストリーミングインタフェース用に適切な代替設定が選択されていることを、

アプリケーションで確実にする必要があります。

パラメータ

audio オーディオクラスインスタンスへのポインタ

audio_transfer_request オーディオ転送構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しまし

た。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポート

されていません。

UX_HOST_CLASS_AUDIO_WRONG_INTERFACE (0x81) インタフェースが不正で

す。

UINT status; /* The following example writes to the audio interface */ audio_transfer_request.ux_host_class_audio_transfer_request_completion_function =

tx_audio_transfer_completion_function; audio_transfer_request.ux_host_class_audio_transfer_request_class_instance = audio; audio_transfer_request.ux_host_class_audio_transfer_request_next_audio_audio_transfer_request =

UX_NULL; audio_transfer_request.ux_host_class_audio_transfer_request_data_pointer =

audio_buffer; audio_transfer_request.ux_host_class_audio_transfer_request_requested_length =

requested_length; audio_transfer_request.ux_host_class_audio_transfer_request_packet_length =

AUDIO_FRAME_LENGTH; status = ux_host_class_audio_write(audio, audio_transfer_request); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 71: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_control_get オーディオ制御インタフェースから特定の制御を取得

プロトタイプ

UINT ux_host_class_audio_control_get(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_CONTROL *audio_control)

説明

オーディオ制御インタフェースから特定の制御を取得するファンクションです。

パラメータ

audio オーディオクラスインスタンスへのポインタ

audio_control オーディオ制御構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しま

した。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポー

トされていません。

UX_HOST_CLASS_AUDIO_WRONG_INTERFACE (0x81) インタフェースが不正で

す。

UINT status; /* The following example reads the volume control from a stereo USB speaker.*/ UX_HOST_CLASS_AUDIO_CONTROL audio_control; audio_control. ux_host_class_audio_control_channel = 1; audio_control. ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL; status = ux_host_class_audio_control_get(audio, &audio_control); /* If status equals UX_SUCCESS, the operation was successful.*/ audio_control. ux_host_class_audio_control_channel = 2; audio_control. ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL; status = ux_host_class_audio_control_get(audio, &audio_control); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 72: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_control_value_set オーディオ制御インタフェースに特定の制御を設定

プロトタイプ

UINT ux_host_class_audio_control_value_set(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_CONTROL *audio_control)

説明

オーディオ制御インタフェースに特定の制御を設定するファンクションです。

パラメータ

audio オーディオクラスインスタンスへのポインタ

audio_control オーディオ制御構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しま

した。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポー

トされていません。

UX_HOST_CLASS_AUDIO_WRONG_INTERFACE (0x81) インタフェースが不正で

す。

/* The following example sets the volume control of a stereo USB speaker.*/ UX_HOST_CLASS_AUDIO_CONTROL audio_control; UINT status; audio_control. ux_host_class_audio_control_channel = 1; audio_control. ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL; audio_control. ux_host_class_audio_control_cur = 0xf000; status = ux_host_class_audio_control_value_set(audio, &audio_control); /* If status equals UX_SUCCESS, the operation was successful.*/ current_volume = audio_control.audio_ control_cur; audio_control. ux_host_class_audio_control_channel = 2; audio_control. ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL; audio_control. ux_host_class_audio_control_cur = 0xf000; status = ux_host_class_audio_control_value_set(audio, &audio_control); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 73: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_streaming_sampling_set オーディオストリーミングインタフェースの代替設定インタフェースを設定

プロトタイプ

UINT ux_host_class_audio_streaming_sampling_set(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_SAMPLING *audio_sampling)

説明

特定のサンプリング構造に従って、オーディオストリーミングインタフェースの適切な代替設

定インタフェースを設定するファンクションです。

パラメータ

audio オーディオクラスインスタンスへのポインタ

audio_sampling オーディオサンプリング構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しまし

た。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポート

されていません。

UX_HOST_CLASS_AUDIO_WRONG_INTERFACE (0x81) インタフェースが不正で

す。

UX_NO_ALTERNATE_SETTING (0x5e) サンプリング値用の代替

設定がありません。

/* The following example sets the alternate setting interface of a stereo USB speaker.*/

UX_HOST_CLASS_AUDIO_SAMPLING audio_sampling; UINT status; sampling. ux_host_class_audio_sampling_channels = 2; sampling. ux_host_class_audio_sampling_frequency = AUDIO_FREQUENCY; sampling. ux_host_class_audio_sampling_resolution = 16; status = ux_host_class_audio_streaming_sampling_set(audio, &sampling); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 74: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_audio_streaming_sampling_get オーディオストリーミングインタフェースの可能サンプリング設定を取得

プロトタイプ

UINT ux_host_class_audio_streaming_sampling_get(UX_HOST_CLASS_AUDIO *audio, UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS *audio_sampling)

説明

オーディオストリーミングインタフェースの各代替設定に使用可能なすべてのサンプリング設

定を、1 つずつ取得するファンクションです。このファンクションの初回使用時には、呼び出し

構造ポインタ内のすべてのフィールドをリセットする必要があります。代替設定の末尾に達し

た場合を除き、返却時にストリーミング値の特定のセットが返されます。このファンクションの

再使用時には、以前のサンプリング値群を用いて次のサンプリング値群を見つけます。

パラメータ

audio オーディオクラスインスタンスへのポインタ

audio_sampling オーディオサンプリング構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しま

した。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクシ ョンがサ

ポートされていませ

ん。

UX_HOST_CLASS_AUDIO_WRONG_INTERFACE (0x81) インタフェースが不正

です。

UX_NO_ALTERNATE_SETTING (0x5e) サンプリング値用の代

替設定がありません。

/* The following example gets the sampling values for the first alternate setting interface of a stereo USB speaker.*/

UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS audio_sampling; UINT status; sampling.ux_host_class_audio_sampling_channels=0; sampling.ux_host_class_audio_sampling_frequency_low=0; sampling.ux_host_class_audio_sampling_frequency_high=0; sampling.ux_host_class_audio_sampling_resolution=0;

Page 75: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

status = ux_host_class_audio_streaming_sampling_get(audio, &sampling); /* If status equals UX_SUCCESS, the operation was successful and information could be displayed as follows:

printf("Number of channels %d, Resolution %d bits, frequency range %d- %d\n",

sampling.audio_channels, sampling.audio_resolution, sampling.audio_frequency_low, sampling.audio_frequency_high);

*/

Page 76: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_client_register HID クラスに HID クライアントを登録

プロトタイプ

UINT ux_host_class_hid_client_register(UCHAR_PTR hid_client_name, UINT (*hid_client_handler)

(struct UX_HOST_CLASS_HID_CLIENT_COMMAND_STRUCT *))

説明

HIDクラスにHIDクライアントを登録するためのファンクションです。HIDクラスでは HIDデバ

イスとHIDクライアントとの一致を見つけてからでないと、このデバイスからデータを要求する

ことができません。

パラメータ

hid_client_name HID クライアント名へのポインタ

hid_client_handler HID クライアントハンドラへのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートされて

いません。

UX_HOST_CLASS_ALREADY_INSTALLED (0x58) このクラスは既に存在します。

UINT status; /* The following example illustrates how to register a HID client, in

this case a USB mouse, to the HID class.*/ status = ux_host_class_hid_client_register("ux_host_class_hid_client_mouse",

ux_host_class_hid_mouse_entry); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 77: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_report_callback_register HID クラスからのコールバックを登録

プロトタイプ

UINT ux_host_class_hid_report_callback_register(UX_HOST_CLASS_HID *hid, UX_HOST_CLASS_HID_REPORT_CALLBACK *call_back)

説明

レポートを受信するときに HID クラスから HID クライアントへのコールバックを登録するため

のファンクションです。

パラメータ

hid HID クラスインスタンスへのポインタ

call_back コールバック構造へのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートされて

いません。

UX_HOST_CLASS_HID_REPORT_ERROR (0x79) レポートコールバック登録時に

エラーが発生しました。

UINT status; /* This example illustrates how to register a HID client, in this case

a USB mouse, to the HID class.In this case, the HID client is asking the HID class to call the client for each usage received in the HID report.*/

call_back.ux_host_class_hid_report_callback_id = 0; call_back.ux_host_class_hid_report_callback_function =

ux_host_class_hid_mouse_callback; call_back.ux_host_class_hid_report_callback_buffer = UX_NULL; call_back.ux_host_class_hid_report_callback_flags

=UX_HOST_CLASS_HID_REPORT_INDIVIDUAL_USAGE; call_back.ux_host_class_hid_report_callback_length = 0; status = ux_host_class_hid_report_callback_register(hid, &call_back); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 78: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_periodic_report_start HID クラスインスタンスの周期的エンドポイントを起動

プロトタイプ

UINT ux_host_class_hid_periodic_report_start(UX_HOST_CLASS_HID *hid)

説明

この HID クライアントにバインドされた HID クラスのインスタンスの、周期的(インタラプト)エ

ンドポイントを起動するためのファンクションです。HID クライアントがアクティブ化されるまで

HID クラスから周期的エンドポイントを起動できないため、このエンドポイントを起動してレ

ポートを受信する作業は HID クライアントに任されています。

入力パラメータ

hid HID クラスインスタンスへのポインタ

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートさ

れていません。.

UX_HOST_CLASS_HID_PERIODIC_REPORT_ERROR (0x7A) 周期的レポート内でエラー

が発生しました。

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) HID クラスインスタンスが

存在しません。

UINT status; /* The following example illustrates how to start the periodic

endpoint.*/ status = ux_host_class_hid_periodic_report_start(hid); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 79: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_periodic_report_stop HID クラスインスタンスの周期的エンドポイントを停止

プロトタイプ

UINT ux_host_class_hid_periodic_report_stop(UX_HOST_CLASS_HID *hid)

説明

この HID クライアントにバインドされた HID クラスのインスタンスの、周期的(インタラプト)エ

ンドポイントを停止するためのファンクションです。HID クライアントが非アクティブ化され、そ

のすべてのリソースが解放されるまでは、HID クラスから周期的エンドポイントを停止できな

いため、このエンドポイントを停止する作業は HID クライアントに任されています。

入力パラメータ

hid HID クラスインスタンスへのポインタ

返却値

UX_SUCCESS (0x00) 転送が完了しまし

た。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサ

ポートされていませ

ん。.

UX_HOST_CLASS_HID_PERIODIC_REPORT_ERROR (0x7A) 周期的レポート内で

エラーが発生しまし

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) HID クラスインスタン

スが存在しません。

UINT status; /* The following example illustrates how to stop the periodic

endpoint.*/ status = ux_host_class_hid_periodic_report_stop(hid); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 80: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_report_get HID クラスインスタンスからレポートを取得

プロトタイプ

UINT ux_host_class_hid_report_get(UX_HOST_CLASS_HID *hid, UX_HOST_CLASS_HID_CLIENT_REPORT *client_report)

説明

周期的エンドポイントに頼ることなく、デバイスから直接にレポートを受信するためのファンク

ションです。このレポートは制御エンドポイントから送信されますが、あたかも周期的エンドポ

イントから送信されたレポートであるかのように処理されます。

パラメータ

hid HID クラスインスタンスへのポインタ

client_report HID クライアントレポートへのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートされて

いません。

UX_HOST_CLASS_HID_REPORT_ERROR (0x70) 周期的レポート内でエラーが発

生しました。

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) HID クラスインスタンスが存在し

ません。

UX_BUFFER_OVERFLOW (0x5d) 提供されたバッファは、未圧縮の

レポートを収容する大きさがあり

ません。

UX_HOST_CLASS_HID_CLIENT_REPORT input_report; UINT status; /* The following example illustrates how to get a report.*/ input_report.ux_host_class_hid_client_report = hid_report; input_report.ux_host_class_hid_client_report_buffer = buffer; input_report.ux_host_class_hid_client_report_length = length; input_report.ux_host_class_hid_client_flags =

UX_HOST_CLASS_HID_REPORT_INDIVIDUAL_USAGE; status = ux_host_class_hid_report_get(hid, &input_report); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 81: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_hid_report_set レポートを送信

プロトタイプ

UINT ux_host_class_hid_report_set(UX_HOST_CLASS_HID *hid, UX_HOST_CLASS_HID_CLIENT_REPORT *client_report)

説明

レポートをデバイスに直接送信するためのファンクションです。

パラメータ

hid HID クラスインスタンスへのポインタ

client_report HID クライアントレポートへのポインタ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_FUNCTION_NOT_SUPPORTED (0x54) ファンクションがサポートされて

いません。

UX_HOST_CLASS_HID_REPORT_ERROR (0x70) 周期的レポート内でエラーが発

生しました。

UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) HID クラスインスタンスが存在し

ません。

UX_BUFFER_OVERFLOW (0x5d) 提供されたバッファは、未圧縮の

レポートを収容する大きさがあり

ません。

/* The following example illustrates how to send a report.*/ UX_HOST_CLASS_HID_CLIENT_REPORT input_report; input_report.ux_host_class_hid_client_report = hid_report; input_report.ux_host_class_hid_client_report_buffer = buffer; input_report.ux_host_class_hid_client_report_length = length; input_report.ux_host_class_hid_client_report_flags =

UX_HOST_CLASS_HID_REPORT_INDIVIDUAL_USAGE; status = ux_host_class_hid_report_set(hid, &input_report); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 82: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_asix_read Asix インタフェースから読み出す

プロトタイプ

UINT ux_host_class_asix_read(UX_HOST_CLASS_ASIX *asix, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

Asix インタフェースから読み出すためのファンクションです。これはブロッキングコールであり、

エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

Asix クラスインスタンスへのポインタ

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 受信する長さ

actual_length 実際に受信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。読み出しは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_asix_read(asix, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 83: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_asix_write Axis インタフェースに書き込む

プロトタイプ

UINT ux_host_class_asix_write(UX_HOST_CLASS_ASIX *asix, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

Axis インタフェースに書き込むためのファンクションです。これはブロッキングコールであり、

エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

Asix クラスインスタンスへのポインタ

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 送信する長さ

actual_length 実際に送信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。書き込みは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_asix_write(asix, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 84: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_cdc_acm_read cdc_acm インタフェースから読み出す

プロトタイプ

UINT ux_host_class_cdc_acm_read(UX_HOST_CLASS_CDC_ACM *cdc_acm, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

cdc_acm インタフェースから読み出すためのファンクションです。これはブロッキングコール

であり、エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

cdc_acm cdc_acm インスタンスへのポインタ。

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 受信する長さ

actual_length 実際に受信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。読み出しは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_cdc_acm_read(cdc_acm, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 85: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_cdc_acm _write cdc_acm インタフェースに書き込む

プロトタイプ

UINT ux_host_class_cdc_acm_write(UX_HOST_CLASS_CDC_ACM *cdc_acm, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

cdc_acmインタフェースに書き込むためのファンクションです。これはブロッキングコールであ

り、エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

cdc_acm cdc_acm インスタンスへのポインタ。

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 送信する長さ

actual_length 実際に送信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。書き込みは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_cdc_acm_write(cdc_acm, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 86: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_cdc_acm_ioctl cdc_acm インタフェースに ioctl ファンクションを実行

プロトタイプ

UINT ux_host_class_cdc_acm_ioctl(UX_HOST_CLASS_CDC_ACM *cdc_acm, ULONG ioctl_function, VOID *parameter)

説明

特定の ioctl ファンクションを cdc_acm インタフェースに対して実行するファンクションです。こ

れはブロッキングコールであり、エラーがあるときまたはコマンドが完了したときにのみ返され

ます。

パラメータ

cdc_acm cdc_acm インスタンスへのポインタ。

ioctl_function 実行対象の ioctlファンクション。許容される ioctlファ

ンクションは、下の表の中のいずれかです。

parameter ioctl 固有のパラメータへのポインタ。

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_MEMORY_INSUFFICIENT (0x12) メモリが不足しています。

UX_HOST_CLASS_UNKNOWN (0x59) クラスインスタンスが間違っていま

す。

UX_FUNCTION_NOT_SUPPORTED (0x54) 未定義の ioctl ファンクションです。

IOCTL ファンクションの一覧

UX_HOST_CLASS_CDC_ACM_IOCTL_SET_LINE_CODING UX_HOST_CLASS_CDC_ACM_IOCTL_GET_LINE_CODING UX_HOST_CLASS_CDC_ACM_IOCTL_SET_LINE_STATE UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK UX_HOST_CLASS_CDC_ACM_IOCTL_ABORT_IN_PIPE UX_HOST_CLASS_CDC_ACM_IOCTL_ABORT_OUT_PIPE UX_HOST_CLASS_CDC_ACM_IOCTL_NOTIFICATION_CALLBACK UX_HOST_CLASS_CDC_ACM_IOCTL_GET_DEVICE_STATUS

Page 87: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

Example

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_cdc_acm_write(cdc_acm, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 88: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_session_open イニシエータとレスポンダの間でセッションをオープン

プロトタイプ

UINT ux_host_class_pima_session_open(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session)

説明

PIMA イニシエータと PIMA レスポンダの間でセッションをオープンするファンクションです。

セッションが正常にオープンしたら、ほとんどの PIMA コマンドが実行できます。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

返却値

UX_SUCCESS (0x00) セッションが正常にオープンしま

した。 UX_HOST_CLASS_PIMA_RC_SESSION_ALREADY_OPENED (0x201E) セッションは既にオープンしてい

ます。

/* Open a pima session. */ status = ux_host_class_pima_session_open(pima, pima_session); if (status != UX_SUCCESS)

return(UX_PICTBRIDGE_ERROR_SESSION_NOT_OPEN);

Page 89: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_session_close イニシエータとレスポンダの間でセッションをクローズ

プロトタイプ

UINT ux_host_class_pima_session_close(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session)

説明

PIMA イニシエータと PIMA レスポンダの間でオープンされていたセッションをクローズする

ファンクションです。セッションがクローズしたら、ほとんどのPIMAコマンドは実行できなくなり

ます。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

返却値

UX_SUCCESS (0x00) セッションがクローズしました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session);

Page 90: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_storage_ids_get レスポンダからストレージ ID 配列を取得

プロトタイプ

UINT ux_host_class_pima_storage_ids_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG *storage_ids_array, ULONG storage_id_length)

説明

レスポンダからストレージ ID 配列を取得するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

storage_ids_array 返されるストレージ ID の配列

storage_id_length ストレージ配列の長さ

返却値

UX_SUCCESS (0x00) ストレージ ID 配列に入力されました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Get the number of storage IDs. */ status = ux_host_class_pima_storage_ids_get(pima, pima_session,

pictbridge -> ux_pictbridge_storage_ids, 64); if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session); return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);

}

Page 91: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_storage_info_get レスポンダからストレージ情報を取得

プロトタイプ

UINT ux_host_class_pima_storage_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, UX_HOST_CLASS_PIMA_STORAGE *storage)

説明

値 storage_id のストレージコンテナに関するストレージ情報を取得するためのファンクション

です。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

storage_id ストレージコンテナの ID

storage ストレージ情報コンテナへのポインタ

返却値

UX_SUCCESS (0x00) ストレージ情報が取得されました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Get the first storage ID info container. */ status = ux_host_class_pima_storage_info_get(pima, pima_session,

pictbridge -> ux_pictbridge_storage_ids[0], (UX_HOST_CLASS_PIMA_STORAGE *)pictbridge -> ux_pictbridge_storage);

if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pictbridge ->

ux_pictbridge_pima, pima_session); return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE); }

Page 92: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_num_objects_get レスポンダからストレージコンテナ上のオブジェクト数を取得

プロトタイプ

UINT ux_host_class_pima_num_objects_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, ULONG object_format_code)

説明

特定のフォーマットコードに一致する storage_id 値を持つ特定のストレージコンテナにおいて、

保存されているオブジェクトの数を取得するファンクションです。オブジェクトの数は、

ux_host_class_pima_session_nb_objects of the pima_session 構造のフィールドに返され

ます。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

storage_id ストレージコンテナの ID

object_format_code オブジェクトフォーマットコードフィルタ

object_format_code には、次のいずれかの値を設定できます。

オブジェクト フォーマット

コード 説明//グループ名 USBX コード

0x3000 Undefined: 未定義の非イメー

ジオブジェクト UX_HOST_CLASS_PIMA_OFC_UNDEFINED

0x3001 Association: アソシエーション

(例: フォルダ) UX_HOST_CLASS_PIMA_OFC_ASSOCIATION

0x3002 Script: デバイスモデル固有の

スクリプト UX_HOST_CLASS_PIMA_OFC_SCRIPT

0x3003 Executable: デバイスモデル

固有のバイナリ実行形式 UX_HOST_CLASS_PIMA_OFC_EXECUTABLE

0x3004 Text: テキストファイル UX_HOST_CLASS_PIMA_OFC_TEXT

0x3005 HTML: HyperText Markup Language ファイル(テキスト) UX_HOST_CLASS_PIMA_OFC_HTML

0x3006 DPOF: Digital Print Order Format ファイル(テキスト) UX_HOST_CLASS_PIMA_OFC_DPOF

0x3007 AIFF オーディオクリップ UX_HOST_CLASS_PIMA_OFC_AIFF

0x3008 WAV オーディオクリップ UX_HOST_CLASS_PIMA_OFC_WAV

0x3009 MP3 オーディオクリップ UX_HOST_CLASS_PIMA_OFC_MP3

Page 93: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

0x300A AVI ビデオクリップ UX_HOST_CLASS_PIMA_OFC_AVI

0x300B MPEG ビデオクリップ UX_HOST_CLASS_PIMA_OFC_MPEG

0x300C ASF: Microsoft Advanced Streaming Format(ビデオ) UX_HOST_CLASS_PIMA_OFC_ASF

0x3800 Undefined: 未定のイメージオ

ブジェクト UX_HOST_CLASS_PIMA_OFC_QT

0x3801 EXIF/JPEG: Exchangeable File Format(JEIDA 規格)

UX_HOST_CLASS_PIMA_OFC_EXIF_JPEG

0x3802 TIFF/EP: Tag Image File Format for Electronic Photography

UX_HOST_CLASS_PIMA_OFC_TIFF_EP

0x3803 FlashPix: 構造化ストレージイ

メージフォーマット UX_HOST_CLASS_PIMA_OFC_FLASHPIX

0x3804 BMP: Microsoft Windows Bitmap ファイル UX_HOST_CLASS_PIMA_OFC_BMP

0x3805 CIFF: Canon Camera Image File Format UX_HOST_CLASS_PIMA_OFC_CIFF

0x3806 Undefined Reserved

0x3807 GIF: Graphics Interchange Format UX_HOST_CLASS_PIMA_OFC_GIF

0x3808 JFIF: JPEG File Interchange Format UX_HOST_CLASS_PIMA_OFC_JFIF

0x3809 PCD: PhotoCD Image Pac UX_HOST_CLASS_PIMA_OFC_PCD

0x380A PICT: Quickdraw Image Format UX_HOST_CLASS_PIMA_OFC_PICT

0x380B PNG: Portable Network Graphics UX_HOST_CLASS_PIMA_OFC_PNG

0x380C Undefined Reserved

0x380D TIFF: Tag Image File Format UX_HOST_CLASS_PIMA_OFC_TIFF

0x380E

TIFF/IT: Tag Image File Format for Information Technology(グラフィックアー

ト)

UX_HOST_CLASS_PIMA_OFC_TIFF_IT

0x380F JP2: JPEG2000 Baseline File Format UX_HOST_CLASS_PIMA_OFC_JP2

0x3810 JPX: JPEG2000 Extended File Format UX_HOST_CLASS_PIMA_OFC_JPX

MSN が

0011 のその

他すべての

コード

任意の未定義コード;将来使用

MSN が

1011 のその

他すべての

コード

任意のベンダ定義コード ベンダ定義タイプ: イメージ

Page 94: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Get the number of objects on all containers matching a SCRIPT object. */

status = ux_host_class_pima_num_objects_get(pima, pima_session, UX_PICTBRIDGE_ALL_CONTAINERS, UX_PICTBRIDGE_OBJECT_SCRIPT);

if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session); return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);

} else

/* The number of objects is returned in the field: pima_session - > ux_host_class_pima_session_nb_objects */

Page 95: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_handles_get レスポンダからオブジェクトハンドルを取得

プロトタイプ

UINT ux_host_class_pima_object_handles_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG *object_handles_array, ULONG object_handles_length, ULONG storage_id, ULONG object_format_code, ULONG object_handle_association)

説明

storage_id パラメータで示したストレージコンテナに存在するオブジェクトハンドルの配列を

返します。すべての記憶域にわたる集合リストが望まれる場合は、この値を0xFFFFFFFFに

設定するものとします。

パラメータ

pima PIMA クラスインスタンスへのポインタ pima_session PIMA セッションへのポインタ object_handes_array 返されるハンドルの配列 object_handles_length 配列の長さ storage_id ストレージコンテナの ID object_format_code オ ブ ジ ェ ク ト の フ ォ ー マ ッ ト コ ー ド

(ux_host_class_pima_num_objects_get ファンク

ションの項で示した表を参照) object_handle_association オプションのオブジェクトアソシエーション値

オブジェクトハンドルアソシエーションとしては、下の表に示すいずれかの値が可能です。

アソシエーションコード アソシエーションの種類 AssociationDesc 解釈

0x0000 Undefined Undefined 0x0001 GenericFolder 不使用 0x0002 Album 予約済み 0x0003 TimeSequence DefaultPlaybackDelta 0x0004 HorizontalPanoramic 不使用 0x0005 VerticalPanoramic 不使用 0x0006 2DPanoramic ImagesPerRow 0x0007 AncillaryData Undefined

ビット 15 を 0 に設定し

た、その他すべての値 Reserved Undefined

ビット 15 を 1 に設定し

た、すべての値 Vendor-Defined Vendor-Defined

Page 96: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Get the array of objects handles on the container. */ status = ux_host_class_pima_object_handles_get(pima, pima_session,

pictbridge -> ux_pictbridge_object_handles_array, 4 * pima_session -> ux_host_class_pima_session_nb_objects, UX_PICTBRIDGE_ALL_CONTAINERS, UX_PICTBRIDGE_OBJECT_SCRIPT, 0);

if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session); return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);

}

Page 97: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_info_get レスポンダからオブジェクト情報を取得

プロトタイプ

UINT ux_host_class_pima_object_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object)

説明

オブジェクトハンドルのオブジェクト情報を取得するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

object オブジェクト情報コンテナへのポインタ

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

Page 98: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* We search for an object that is a picture or a script. */ object_index = 0; while (object_index < pima_session ->

ux_host_class_pima_session_nb_objects) {

/* Get the object info structure. */ status = ux_host_class_pima_object_info_get(pima, pima_session,

pictbridge -> ux_pictbridge_object_handles_array[object_index], pima_object);

if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session); return(UX_PICTBRIDGE_ERROR_INVALID_OBJECT_HANDLE );

} }

Page 99: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_info_send レスポンダにオブジェクト情報を送信

プロトタイプ

UINT ux_host_class_pima_object_info_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, ULONG parent_object_id, UX_HOST_CLASS_PIMA_OBJECT *object)

説明

値 storage_id を持つストレージコンテナに関するストレージ情報を送信するためのファンク

ションです。オブジェクトをレスポンダに送信する前に、イニシエータでこのコマンドを使用す

ることが望まれます。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

storage_id 格納先ストレージ ID

parent_object_id オブジェクトを置くところの、レスポンダの親オブジェ

クトハンドル

object オブジェクト情報コンテナへのポインタ

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

Page 100: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Send a script info. */ status = ux_host_class_pima_object_info_send(pima, pima_session,

0, 0, pima_object); if (status != UX_SUCCESS) {

/* Close the pima session. */ status = ux_host_class_pima_session_close(pima, pima_session); return(UX_ERROR );

}

Page 101: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_open レスポンダに保存されているオブジェクトをオープン

プロトタイプ

UINT ux_host_class_pima_object_open(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object)

説明

読み出しまたは書き込みの前にレスポンダのオブジェクトをオープンするファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

object オブジェクト情報コンテナへのポインタ

返却値

UX_SUCCESS (0x00) 転送が完了しました。 UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。 UX_HOST_CLASS_PIMA_RC_OBJECT_ALREADY_OPENED (0x2021) オブジェクトは既にオープンしていま

す。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Open the object. */ status = ux_host_class_pima_object_open(pima, pima_session,

object_handle, pima_object); /* Check status. */ if (status != UX_SUCCESS)

return(status);

Page 102: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_get レスポンダに保存されているオブジェクトを取得

プロトタイプ

UINT ux_host_class_pima_object_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object, UCHAR *object_buffer, ULONG object_buffer_length, ULONG *object_actual_length)

説明

レスポンダのオブジェクトを取得するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ pima_session PIMA セッションへのポインタ object_handles オブジェクトのハンドル object オブジェクト情報コンテナへのポインタ object_buffer オブジェクトデータのアドレス object_buffer_length 要求されたオブジェクト長さ object_actual_length 返却対象のオブジェクトの長さ

返却値

UX_SUCCESS (0x00) 転送されました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。

UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED (0x2023) オブジェクトがオープンしていません。

UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED (0x200f) オブジェクトへのアクセスが拒否されま

した。

UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER (0x2007) 転送は未完です。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモリ

が不足しています。

UX_TRANSFER_ERROR (0x23) オブジェクトの読み出し中に転送エ

ラーが発生しました。

Page 103: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Open the object. */ status = ux_host_class_pima_object_open(pima, pima_session,

object_handle, pima_object); /* Check status. */ if (status != UX_SUCCESS) return(status); /* Set the object buffer pointer. */ object_buffer = pima_object -> ux_host_class_pima_object_buffer; /* Obtain all the object data. */ while(object_length != 0) {

/* Calculate what length to request. */ if (object_length > UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER)

/* Request maximum length. */ requested_length = UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER;

else

/* Request remaining length. */ requested_length = object_length;

/* Get the object data. */ status = ux_host_class_pima_object_get(pima, pima_session,

object_handle, pima_object, object_buffer, requested_length, &actual_length);

if (status != UX_SUCCESS) {

/* We had a problem, abort the transfer. */ ux_host_class_pima_object_transfer_abort(pima, pima_session,

object_handle, pima_object); /* And close the object. */ ux_host_class_pima_object_close(pima, pima_session,

object_handle, pima_object); return(status);

} /* We have received some data, update the length remaining. */ object_length -= actual_length; /* Update the buffer address. */ object_buffer += actual_length;

} /* Close the object. */ status = ux_host_class_pima_object_close(pima, pima_session,

object_handle, pima_object);

Page 104: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_send レスポンダに保存されているオブジェクトを送信

プロトタイプ

UINT ux_host_class_pima_object_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, UX_HOST_CLASS_PIMA_OBJECT *object, UCHAR *object_buffer, ULONG object_buffer_length)

説明

レスポンダにオブジェクトを送信するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

object オブジェクト情報コンテナへのポインタ

object_buffer オブジェクトデータのアドレス

object_buffer_length 要求されたオブジェクト長さ

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。 UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED (0x2023) オブジェクトがオープンしていませ

ん。 UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED (0x200f) オブジェクトへのアクセスが拒否され

ました。

UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER (0x2007) 転送は未完です。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

UX_TRANSFER_ERROR (0x23) オブジェクトの書き込み中に転送エ

ラーが発生しました。

Page 105: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Open the object. */ status = ux_host_class_pima_object_open(pima, pima_session,

object_handle, pima_object);

/* Get the object length. */ object_length = pima_object -> ux_host_class_pima_object_compressed_size; /* Recall the object buffer address. */ pima_object_buffer = pima_object -> ux_host_class_pima_object_buffer; /* Send all the object data. */ while(object_length != 0) {

/* Calculate what length to request. */ if (object_length > UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER)

/* Request maximum length. */ requested_length = UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER;

else

/* Request remaining length. */ requested_length = object_length;

/* Send the object data. */ status = ux_host_class_pima_object_send(pima, pima_session, pima_object,

pima_object_buffer, requested_length); if (status != UX_SUCCESS) {

/* Abort the transfer. */ ux_host_class_pima_object_transfer_abort(pima, pima_session,

object_handle, pima_object); /* Return status. */ return(status);

} /* We have sent some data, update the length remaining. */ object_length -= requested_length;

} /* Close the object. */ status = ux_host_class_pima_object_close(pima, pima_session, object_handle,

pima_object);

Page 106: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_thumb_get レスポンダに保存されているサムオブジェクトを取得

プロトタイプ

UINT ux_host_class_pima_thumb_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object, UCHAR *thumb_buffer, ULONG thumb_buffer_length, ULONG *thumb_actual_length)

説明

レスポンダのサムオブジェクトを取得するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

object オブジェクト情報コンテナへのポインタ

thumb_buffer サムオブジェクトデータのアドレス

thumb_buffer_length 要求されたサムオブジェクト長さ

thumb_actual_length 返却対象のサムオブジェクトの長さ

返却値

UX_SUCCESS (0x00) 転送が完了しました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。 UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED (0x2023) オブジェクトがオープンしていません。

UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED (0x200f) オブジェクトへのアクセスが拒否されま

した。 UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER (0x2007) 転送は未完です。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモリ

が不足しています。

UX_TRANSFER_ERROR (0x23) オブジェクトの読み出し中に転送エ

ラーが発生しました。

Page 107: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Get the thumb object data. */ status = ux_host_class_pima_thumb_get(pima, pima_session,

object_handle, pima_object, object_buffer, requested_length, &actual_length);

if (status != UX_SUCCESS) {

/* And close the object. */ ux_host_class_pima_object_close(pima, pima_session, o

bject_handle, pima_object); return(status);

}

Page 108: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_delete レスポンダに保存されているオブジェクトを削除

プロトタイプ

UINT ux_host_class_pima_object_delete(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle)

説明

レスポンダのオブジェクトを削除するファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

返却値

UX_SUCCESS (0x00) オブジェクトが削除されました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。 UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED (0x200f) オブジェクトを削除できません。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Delete the object. */ status = ux_host_class_pima_object_delete(pima, pima_session,

object_handle, pima_object); /* Check status. */ if (status != UX_SUCCESS)

return(status);

Page 109: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_pima_object_close レスポンダに保存されているオブジェクトをクローズ

プロトタイプ

UINT ux_host_class_pima_object_close(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle)

説明

レスポンダのオブジェクトをクローズするファンクションです。

パラメータ

pima PIMA クラスインスタンスへのポインタ

pima_session PIMA セッションへのポインタ

object_handles オブジェクトのハンドル

返却値

UX_SUCCESS (0x00) オブジェクトがクローズしました。

UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN (0x2003) セッションがオープンしていません。 UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED (0x2023) オブジェクトがオープンしていませ

ん。

UX_MEMORY_INSUFFICIENT (0x12) PIMA コマンドを作成するためのメモ

リが不足しています。

/* Close the object. */ status = ux_host_class_pima_object_close(pima, pima_session,

object_handle, pima_object);

Page 110: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_gser_read ジェネリックシリアルインタフェースから読み出す

プロトタイプ

UINT ux_host_class_gser_read(UX_HOST_CLASS_GSER *gser, UCHAR *data_pointer, ULONG interface_index, ULONG requested_length, ULONG *actual_length)

説明

ジェネリックシリアルインタフェースから読み出すためのファンクションです。これはブロッキン

グコールであり、エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

gser クラスインスタンスへのポインタ

Interface_index 読み出し元のインタフェースインデックス

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 受信する長さ

actual_length 実際に受信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。読み出しは未完で

す。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_gser_read(cdc_acm, interface, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 111: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_gser_write ジェネリックシリアルインタフェースに書き込む

プロトタイプ

UINT ux_host_class_gser_write(UX_HOST_CLASS_CDC_ACM *cdc_acm, ULONG interface_index, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

説明

ジェネリックシリアルインタフェースに書き込むためのファンクションです。これはブロッキング

コールであり、エラーがあるときまたは転送が完了したときにのみ返されます。

パラメータ

Gser クラスインスタンスへのポインタ

interface_index 書き込み先のインタフェース

data_pointer データペイロードのバッファアドレスへのポインタ

requested_length 送信する長さ

actual_length 実際に送信した長さ

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_TRANSFER_TIMEOUT (0x5c) 転送タイムアウト。書き込みは未完です。

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_cdc_acm_write(cdc_acm, data_pointer,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 112: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_gser_ioctl ジェネリックシリアルインタフェースに IOCTL ファンクションを実行

プロトタイプ

UINT ux_host_class_cdc_acm_ioctl(UX_HOST_CLASS_CDC_ACM *cdc_acm, ULONG interface_index, ULONG ioctl_function, VOID *parameter)

説明

特定の ioctl ファンクションを gser インタフェースに対して実行するファンクションです。これは

ブロッキングコールであり、エラーがあるときまたはコマンドが完了したときにのみ返されま

す。

パラメータ

Gser クラスインスタンスへのポインタ

Interface_index インタフェースインデックス

ioctl_function 実行対象の ioctlファンクション。許容される ioctlファ

ンクションは、下の表の中のいずれかです。

parameter ioctl 固有のパラメータへのポインタ。

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_MEMORY_INSUFFICIENT (0x12) メモリが不足しています。

UX_HOST_CLASS_UNKNOWN (0x59) クラスインスタンスが間違っています。

UX_FUNCTION_NOT_SUPPORTED (0x54) 未定義の ioctl ファンクションです。

IOCTL ファンクションの一覧

UX_HOST_CLASS_GSER_IOCTL_SET_LINE_CODING UX_HOST_CLASS_GSER_IOCTL_GET_LINE_CODING UX_HOST_CLASS_GSER_IOCTL_SET_LINE_STATE UX_HOST_CLASS_GSER_IOCTL_SEND_BREAK UX_HOST_CLASS_GSER_IOCTL_ABORT_IN_PIPE UX_HOST_CLASS_GSER_IOCTL_ABORT_OUT_PIPE UX_HOST_CLASS_GSER_IOCTL_NOTIFICATION_CALLBACK UX_HOST_CLASS_GSER_IOCTL_GET_DEVICE_STATUS

Page 113: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

UINT status; /* The following example illustrates this service.*/ status = ux_host_class_gser_write(gser, data_pointer, interface_index,

requested_length, &actual_length); /* If status equals UX_SUCCESS, the operation was successful.*/

Page 114: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_gser_reception_start ジェネリックシリアルインタフェース上で受信を起動

プロトタイプ

UINT ux_host_class_gser_reception_start(UX_HOST_CLASS_GSER *gser, UX_HOST_CLASS_GSER_RECEPTION *gser_reception)

説明

ジェネリックシリアルクラスインタフェース上での受信を起動するファンクションです。非ブロッ

キング受信に対応しています。バッファを受信したときに、アプリケーションにコールバックが

呼び込まれます。

パラメータ

Gser クラスインスタンスへのポインタ

gser_reception 受信パラメータを含む構造

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_HOST_CLASS_UNKNOWN (0x59) クラスインスタンスが間違っています。

UX_ERROR (0x01) エラー

/* Start the reception for gser. AT commands are on interface 2.*/ gser_reception.ux_host_class_gser_reception_interface_index =

UX_DEMO_GSER_AT_INTERFACE; gser_reception.ux_host_class_gser_reception_block_size =

UX_DEMO_RECEPTION_BLOCK_SIZE; gser_reception.ux_host_class_gser_reception_data_buffer =

gser_reception_buffer; gser_reception.ux_host_class_gser_reception_data_buffer_size = UX_DEMO_RECEPTION_BUFFER_SIZE;

gser_reception.ux_host_class_gser_reception_callback = tx_demo_thread_callback;

ux_host_class_gser_reception_start(gser, &gser_reception);

Page 115: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_host_class_gser_reception_stop ジェネリックシリアルインタフェース上で受信を停止

プロトタイプ

UINT ux_host_class_gser_reception_stop(UX_HOST_CLASS_GSER *gser, UX_HOST_CLASS_GSER_RECEPTION *gser_reception)

説明

ジェネリックシリアルクラスインタフェース上での受信を停止するファンクションです。

パラメータ

Gser クラスインスタンスへのポインタ

gser_reception 受信パラメータを含む構造

返却値

UX_SUCCESS (0x00) データ転送が完了しました。

UX_HOST_CLASS_UNKNOWN (0x59) クラスインスタンスが間違っています。

UX_ERROR (0x01) エラー

/* Stops the reception for gser.*/ ux_host_class_gser_reception_stop(gser, &gser_reception);

Page 116: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 6 章 USBX DPUMP クラスについて USBX には、ホスト側用とデバイス側用の DPUMP クラスが含まれています。このクラスは、それ自

体が標準クラスではありませんが、2つのバルクパイプを使用し、これらのパイプ上でデータのやりと

りをすることで、単純なデバイスを作成する方法を例示するものとなっています。DPUMP クラスを使

用すると、カスタムクラスやレガシーRS232 デバイスを起動するなどが可能です。

USB DPUMP のフローチャート

ホストアプリケーション DPUMPホストクラス USBホストスタック USBデバイススタック

パケットを書く

_ux_host_class_dpump_write

_ux_host_stack_transfer_request

転送完了を待機転送完了を待機

転送ステータスと送信データ長を受信

パケットを受信

_ux_host_class_dpump_read

_ux_host_stack_transfer_request

転送完了を待機

送信ステータス、データパケット、受信データ長を受信

転送完了を待機

_ux_device_stack_transfer_request

バルクアウト上で転送完了を待機

DPUMPデバイスクラススレッド

パケットを待機

転送完了を待機

パケットを書く

転送完了を待機

_ux_device_stack_transfer_request

バルクアウト上でインパケットを待機

Page 117: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USBX DPUMP ホストクラス DPUMP クラスのホスト側は、データの送信用、データの受信用の、2 つのファンクションを備えてい

ます。

ux_host_class_dpump_write ux_host_class_dpump_read

どちらのファンクションも、DPUMP アプリケーションの簡易化のためにブロッキングファンクションと

なっています。IN パイプと OUT パイプを同時に実行させておく必要がある場合は、またアプリケー

ション側で送信スレッドと受信スレッドを作成する必要があります。

書き込み関数のプロトタイプは次の通りです。

UINT ux_host_class_dpump_write(UX_HOST_CLASS_DPUMP *dpump, UCHAR * data_pointer, ULONG requested_length, ULONG *actual_length)

ここで、

dpump は、クラスのインスタンス data_pointer は、送信対象のバッファへのポインタ requested_length は、送信する長さ actual_length は、転送が(正常にまたは部分的に)完了した後に送信される長さ

受信ファンクションのプロトタイプは次の通りです。

UINT host_class_dpump_read(UX_HOST_CLASS_DPUMP *dpump, UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

ホスト DPUMP クラスの一例を次に示します。ここでは、アプリケーションがデバイス側へのパケット

を書き、同じパケットを受信側で受信します。

/* We start with a 'A' in buffer. */ current_char = 'A'; while(1) {

/* Initialize the write buffer.*/ ux_utility_memory_set(out_buffer, current_char,

UX_HOST_CLASS_DPUMP_PACKET_SIZE); /* Increment the character in buffer. */ current_char++; /* Check for upper alphabet limit. */ if (current_char > 'Z')

current_char = 'A';

Page 118: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* Write to the Data Pump Bulk out endpoint. */ status = ux_host_class_dpump_write (dpump, out_buffer,

UX_HOST_CLASS_DPUMP_PACKET_SIZE, &actual_length);

/* Verify that the status and the amount of data is correct. */ if ((status == UX_SUCCESS) && actual_length ==

UX_HOST_CLASS_DPUMP_PACKET_SIZE) {

/* Read to the Data Pump Bulk out endpoint. */ status = ux_host_class_dpump_read (dpump, in_buffer,

UX_HOST_CLASS_DPUMP_PACKET_SIZE, &actual_length); }

Page 119: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

USBX DPUMP デバイスクラス デバイス DPUMP クラスでは、USB ホストとの接続後に起動されるスレットを使用します。このスレッ

ドは、バルクアウト・エンドポイントに着信するパケットを待機します。パケットを受信するとスレッドは、

その内容をバルクイン・エンドポイント・バッファにコピーし、このエンドポイントにトランザクションをポ

ストします。この状態で、このエンドポイントからの読み取りの要求をホストが発行するまで待機しま

す。こうして、バルクアウト・エンドポイントとバルクイン・エンドポイントの間にループバックメカニズム

が形成されます。

Page 120: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 7 章 ピクトブリッジの実装 USBX は、ホストとデバイスの両側でピクトブリッジの完全実装をサポートします。どちらの側でも、ピ

クトブリッジは USBX PIMA クラスの上に載ります。

ピクトブリッジ規格では、デジタルスチルカメラやスマートフォンから PC を介さずに直接プリンタへの

接続を許容し、一定のピクトブリッジ対応プリンタへの直接印刷を可能にします。

カメラやスマートフォンをプリンタに接続したときに、プリンタが USB ホスト、カメラが USB デバイスで

す。しかしピクトブリッジでは、カメラがホストとして現れ、コマンドはカメラから駆動されます。カメラが

ストレージサーバであり、プリンタがストレージクライアントです。カメラがプリントクライアントであり、

当然にプリンタがプリントサーバです。

ピクトブリッジでは USB をトランスポートレイヤとして使用しますが、通信プロトコルとして PTP(Picture Transfer Protocol)を使用します。

下の図に、プリントジョブが発生したときの、DPS クライアントと DPS サーバの間でのコマンドと応答

の様子を示します。

Page 121: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ピクトブリッジクライアントの実装 クライアント側のピクトブリッジでは、USBX デバイススタックと PIMA クラスを最初に実行させておく

必要があります。

PIMA クラスのデバイスフレームワークは次のように記述されます。

UCHAR device_framework_full_speed[] = {

/* Device descriptor */ 0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x20, 0xA9, 0x04, 0xB6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* Configuration descriptor */ 0x09, 0x02, 0x27, 0x00, 0x01, 0x01, 0x00, 0xc0, 0x32, /* Interface descriptor */ 0x09, 0x04, 0x00, 0x00, 0x03, 0x06, 0x01, 0x01, 0x00, /* Endpoint descriptor (Bulk Out) */ 0x07, 0x05, 0x01, 0x02, 0x40, 0x00, 0x00, /* Endpoint descriptor (Bulk In) */ 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, /* Endpoint descriptor (Interrupt) */ 0x07, 0x05, 0x83, 0x03, 0x08, 0x00, 0x60

};

DPS_ConfigurePrintServicesDPS_ConfigurePrintServices

DPS_GetCapabilities

DPS_StartJob

DPS_GetFileInfo

DPS_GetFile

DPS_NotifyDeviceStatus

プリントデータ

ストレージデバイス ストレージサーバ プリントクライアント

DPS サービスディスカバリ

プリントサーバストレージクライアント

プリントデバイス

アプリケーションが印刷開始

ファイルデータを取得

ファイルデータ

Page 122: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

PIMA クラスでは ID フィールド 0x06 を使用しています。そのサブクラスは静止画像用の 0x01、プロ

トコルは PIMA 15740 用の 0x01 となっています。

このクラスでは、データの送受信用にバルクエンドポイントが 2 つ、イベント用にインタラプトエンドポ

イントが 1 つ、合計 3 つのエンドポイントを定義しています。

他の USBX デバイスの実装とは異なり、ピクトブリッジアプリケーションではクラス自体を定義する必

要はありません。代わりに、ファンクション ux_pictbridge_dpsclient_start を呼び出します。例を次に

示します。

/* Initialize the Pictbridge string components.*/ ux_utility_memory_copy

(pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_vendor_name, "ExpressLogic",13);

ux_utility_memory_copy (pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_product_name, "EL_Pictbridge_Camera",21);

ux_utility_memory_copy (pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_serial_no, "ABC_123",7);

ux_utility_memory_copy (pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_dpsversions, "1.0 1.1",7);

pictbridge.ux_pictbridge_dpslocal. ux_pictbridge_devinfo_vendor_specific_version = 0x0100;

/* Start the Pictbridge client. */ status = ux_pictbridge_dpsclient_start(&pictbridge); if(status != UX_SUCCESS)

return;

ピクトブリッジクライアントに渡されるパラメータは、次の通りです。

pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_vendor_name :String of Vendor name

pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_product_name :String of product name

pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_serial_no, :String of serial number

pictbridge.ux_pictbridge_dpslocal.ux_pictbridge_devinfo_dpsversions :String of version

pictbridge.ux_pictbridge_dpslocal. ux_pictbridge_devinfo_vendor_specific_version :Value set to 0x0100;

Page 123: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

次のステップでは、デバイスとホストを同期させ、情報の交換に備えさせます。

そのために、次のようにイベントフラグを待機します。

/* We should wait for the host and the client to discover one another. */ status = ux_utility_event_flags_get

(&pictbridge.ux_pictbridge_event_flags_group, UX_PICTBRIDGE_EVENT_FLAG_DISCOVERY,TX_AND_CLEAR, &actual_flags, UX_PICTBRIDGE_EVENT_TIMEOUT);

ステートマシンが DISCOVERY_COMPLETE ステートならば、カメラ側(DPS クライアント)がプリン

タとその能力に関して情報を収集します。

DPS 側 で プ リ ン ト ジ ョ ブ の 受 け 付 け が 可 能 な 状 態 で あ れ ば 、 そ の ス テ ー タ ス が

UX_PICTBRIDGE_NEW_JOB_TRUE に設定されます。これは次のように確認できます。

/* Check if the printer is ready for a print job. */ if (pictbridge.ux_pictbridge_dpsclient.ux_pictbridge_devinfo_newjobok ==

UX_PICTBRIDGE_NEW_JOB_TRUE) /* We can print something … */

次に、いくつかのプリントジョブ記述子に以下のように入力する必要があります。

/* We can start a new job.Fill in the JobConfig and PrintInfo structures.*/ jobinfo = &pictbridge.ux_pictbridge_jobinfo; /* Attach a printinfo structure to the job. */ jobinfo -> ux_pictbridge_jobinfo_printinfo_start = &printinfo; /* Set the default values for print job. */ jobinfo -> ux_pictbridge_jobinfo_quality =

UX_PICTBRIDGE_QUALITIES_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_papersize =

UX_PICTBRIDGE_PAPER_SIZES_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_papertype =

UX_PICTBRIDGE_PAPER_TYPES_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_filetype =

UX_PICTBRIDGE_FILE_TYPES_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_dateprint =

UX_PICTBRIDGE_DATE_PRINTS_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_filenameprint =

UX_PICTBRIDGE_FILE_NAME_PRINTS_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_imageoptimize =

UX_PICTBRIDGE_IMAGE_OPTIMIZES_OFF; jobinfo -> ux_pictbridge_jobinfo_layout =

UX_PICTBRIDGE_LAYOUTS_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_fixedsize =

UX_PICTBRIDGE_FIXED_SIZE_DEFAULT; jobinfo -> ux_pictbridge_jobinfo_cropping =

UX_PICTBRIDGE_CROPPINGS_DEFAULT; /* Program the callback function for reading the object data. */ jobinfo -> ux_pictbridge_jobinfo_object_data_read =

ux_demo_object_data_copy;

Page 124: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

/* This is a demo, the fileID is hardwired (1 and 2 for scripts, 3 for photo to be printed. */

printinfo.ux_pictbridge_printinfo_fileid = UX_PICTBRIDGE_OBJECT_HANDLE_PRINT;

ux_utility_memory_copy(printinfo.ux_pictbridge_printinfo_filename, "Pictbridge demo file", 20);

ux_utility_memory_copy(printinfo.ux_pictbridge_printinfo_date, "01/01/2008", 10);

/* Fill in the object info to be printed. First get the pointer to the

object container in the job info structure.*/ object = (UX_SLAVE_CLASS_PIMA_OBJECT *) jobinfo ->

ux_pictbridge_jobinfo_object; /* Store the object format:JPEG picture. */ object -> ux_device_class_pima_object_format =

UX_DEVICE_CLASS_PIMA_OFC_EXIF_JPEG; object -> ux_device_class_pima_object_compressed_size =IMAGE_LEN; object -> ux_device_class_pima_object_offset = 0; object -> ux_device_class_pima_object_handle_id =

UX_PICTBRIDGE_OBJECT_HANDLE_PRINT; object -> ux_device_class_pima_object_length = IMAGE_LEN; /* File name is in Unicode. */ ux_utility_string_to_unicode("JPEG Image", object ->

ux_device_class_pima_object_filename); /* And start the job. */ status =ux_pictbridge_dpsclient_api_start_job(&pictbridge);

以上でピクトブリッジクライアントは、実行するプリントジョブが与えられたので、アプリケーションから

コールバックを介してイメージブロック群を一度にフェッチします。このコールバックは次のフィールド

で定義されます。

jobinfo -> ux_pictbridge_jobinfo_object_data_read

そのファンクションのプロトコルは、次のように定義されます。

Page 125: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_pictbridge_jobinfo_object_data_read プリント用にユーザスペースからデータブロックをコピー

プロトタイプ

UINT ux_pictbridge_jobinfo_object_data_read(UX_PICTBRIDGE *pictbridge, UCHAR *object_buffer, ULONG object_offset, ULONG object_length, ULONG *actual_length)

説明

ターゲットのピクトブリッジプリンタにプリントするために DSP クライアントがデータブロックを

取り込む必要が生じたときに、このファンクションがコールされます。

パラメータ

pictbridge ピクトブリッジクラスインスタンスへのポインタ

object_buffer オブジェクトバッファへのポインタ

object_offset データブロックの読み出しを始める場所

object_length 返す長さ

actual_length 実際に返された長さ

返却値

UX_SUCCESS (0x00) この操作は成功しました。

UX_ERROR (0x01) アプリケーションがデータを取り込めませんでした。

/* Copy the object data. */ UINT ux_demo_object_data_copy(UX_PICTBRIDGE *pictbridge,UCHAR *object_buffer,

ULONG object_offset, ULONG object_length, ULONG *actual_length) {

/* Copy the demanded object data portion. */ ux_utility_memory_copy(object_buffer, image + object_offset,

object_length); /* Update the actual length. */ *actual_length = object_length; /* We have copied the requested data.Return OK. */ return(UX_SUCCESS);

}

Page 126: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ピクトブリッジホストの実装 ピクトブリッジのホスト実装は、クライアント実装とは異なります。

ピクトブリッジホスト環境において最初に行うことは、PIMA クラスを下の例のように登録することで

す。

status = ux_host_stack_class_register(ux_system_host_class_pima_name, ux_host_class_pima_entry);

if(status != UX_SUCCESS) return;

このクラスは、USB ホストスタックとピクトブリッジレイヤの間に挟まれる PTP レイヤです。

次のステップは、プリントサービス用のピクトブリッジのデフォルト値を次のように初期化することで

す。

ピクトブリッジのフィールド 値 DpsVersion[0] DpsVersion[1] DpsVersion[2] VendorSpecificVersion

0x00010000 0x00010001 0x00000000 0x00010000

PrintServiceAvailable 0x30010000

Qualities[0] Qualities[1] Qualities[2] Qualities[3]

UX_PICTBRIDGE_QUALITIES_DEFAULT UX_PICTBRIDGE_QUALITIES_NORMAL UX_PICTBRIDGE_QUALITIES_DRAFT UX_PICTBRIDGE_QUALITIES_FINE

PaperSizes[0] PaperSizes[1] PaperSizes[2] PaperSizes[3] PaperSizes[4]

UX_PICTBRIDGE_PAPER_SIZES_DEFAULT UX_PICTBRIDGE_PAPER_SIZES_4IX6I UX_PICTBRIDGE_PAPER_SIZES_L UX_PICTBRIDGE_PAPER_SIZES_2L UX_PICTBRIDGE_PAPER_SIZES_LETTER

PaperTypes[0] PaperTypes[1] PaperTypes[2]

UX_PICTBRIDGE_PAPER_TYPES_DEFAULT UX_PICTBRIDGE_PAPER_TYPES_PLAIN UX_PICTBRIDGE_PAPER_TYPES_PHOTO

FileTypes[0] FileTypes[1] FileTypes[2] FileTypes[3]

UX_PICTBRIDGE_FILE_TYPES_DEFAULT UX_PICTBRIDGE_FILE_TYPES_EXIF_JPEG UX_PICTBRIDGE_FILE_TYPES_JFIF UX_PICTBRIDGE_FILE_TYPES_DPOF

DatePrints[0] DatePrints[1] DatePrints[2]

UX_PICTBRIDGE_DATE_PRINTS_DEFAULT UX_PICTBRIDGE_DATE_PRINTS_OFF UX_PICTBRIDGE_DATE_PRINTS_ON

FileNamePrints[0] FileNamePrints[1] FileNamePrints[2]

UX_PICTBRIDGE_FILE_NAME_PRINTS_DEFAULT UX_PICTBRIDGE_FILE_NAME_PRINTS_OFF UX_PICTBRIDGE_FILE_NAME_PRINTS_ON

ImageOptimizes[0] UX_PICTBRIDGE_IMAGE_OPTIMIZES_DEFAULT

Page 127: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ピクトブリッジのフィールド 値 ImageOptimizes[1] ImageOptimizes[2]

UX_PICTBRIDGE_IMAGE_OPTIMIZES_OFF UX_PICTBRIDGE_IMAGE_OPTIMIZES_ON

Layouts[0] Layouts[1] Layouts[2] Layouts[3]

UX_PICTBRIDGE_LAYOUTS_DEFAULT UX_PICTBRIDGE_LAYOUTS_1_UP_BORDER UX_PICTBRIDGE_LAYOUTS_INDEX_PRINT UX_PICTBRIDGE_LAYOUTS_1_UP_BORDERLESS

FixedSizes[0] FixedSizes[1] FixedSizes[2] FixedSizes[3] FixedSizes[4] FixedSizes[5] FixedSizes[6]

UX_PICTBRIDGE_FIXED_SIZE_DEFAULT UX_PICTBRIDGE_FIXED_SIZE_35IX5I UX_PICTBRIDGE_FIXED_SIZE_4IX6I UX_PICTBRIDGE_FIXED_SIZE_5IX7I UX_PICTBRIDGE_FIXED_SIZE_7CMX10CM UX_PICTBRIDGE_FIXED_SIZE_LETTER UX_PICTBRIDGE_FIXED_SIZE_A4

Croppings[0] Croppings[1] Croppings[2]

UX_PICTBRIDGE_CROPPINGS_DEFAULT UX_PICTBRIDGE_CROPPINGS_OFF UX_PICTBRIDGE_CROPPINGS_ON

DPS ホストのステートマシンは、アイドルに設定され、新しいプリントジョブの受け付けが可能になり

ます。

これで、下の例のようにピクトブリッジのホスト部が起動可能になります。

/* Activate the pictbridge dpshost. */ status = ux_pictbridge_dpshost_start(&pictbridge, pima); if (status != UX_SUCCESS)

return;

データがプリント可能になったときに、ピクトブリッジホストファンクションにはコールバックが必要にな

ります。そのためには、次のようにピクトブリッジホスト構造にファンクションポインタを渡します。

/* Set a callback when an object is being received. */ pictbridge.ux_pictbridge_application_object_data_write =

tx_demo_object_data_write;

このファンクションは次のようなプロパティを持ちます。

Page 128: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

ux_pictbridge_application_object_data_write 印刷用にデータブロックを書き込む

プロトタイプ

UINT ux_pictbridge_application_object_data_write(UX_PICTBRIDGE *pictbridge,UCHAR *object_buffer, ULONG offset, ULONG total_length, ULONG length);

説明

ローカルプリンタにプリントするために DPS サーバが DSP クライアントからデータブロックを

取り組む必要が生じたときに、このファンクションがコールされます。

パラメータ

pictbridge ピクトブリッジクラスインスタンスへのポインタ

object_buffer オブジェクトバッファへのポインタ

object_offset データブロックの読み出しを始める場所

total_length オブジェクトの全長

length このバッファの長さ

返却値

UX_SUCCESS (0x00) この操作は成功しました。

UX_ERROR (0x01) アプリケーションがデータをプリントできませんでし

た。

/* Copy the object data. */ UINT tx_demo_object_data_write(UX_PICTBRIDGE *pictbridge,

UCHAR *object_buffer, ULONG offset, ULONG total_length, ULONG length); { UINT status;

/* Send the data to the local printer. */ status = local_printer_data_send(object_buffer, length); /* We have printed the requested data.Return status. */ return(status);

}

Page 129: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

第 8 章 USBX OTG OTG対応 USBコントローラがハードウェア設計に用意されているときは、USBXで USBの OTG機

能をサポートします。

USBXは、USBコアスタック内でOTGをサポートします。ただし、OTGが機能するためには、一定の

USB コントローラが必要です。USBX OTG コントローラのファンクションは、usbx_otg ディレクトリに

収めてあります。現在の USBX バージョンでは、すべての OTG 機能を備えた NXP LPC3131 のみ

をサポートします。

通常のコントローラドライバファンクション(ホストまたはデバイス)は従来どおりに標準の USBX usbx_device_controllersと usbx_host_controllersに収めてありますが、usbx_otgディレクトリには

特に USB コントローラに関連する OTG 機能を格納しています。

通常のホスト/デバイスのファンクションに加え、OTG コントローラ対応ファンクションには次の 4 種

類があります。

• VBUS 固有ファンクション • コントローラの起動と停止 • USB ロールマネージャ • インタラプトハンドラ

Page 130: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

VBUS ファンクション 電力管理要件に基づいて VBUS のステートを変更するために、各コントローラは VBUS マネージャ

を搭載する必要があります。このファンクションは通常、VBUSのオン/オフ切り替えのみを実行しま

す。

コントローラの起動と停止 通常の USB 実装とは異なり、OTG ではロールを変更するときに、ホストスタックとデバイススタック

(またはそのいずれか)をアクティブ/非アクティブ化する必要があります。

USB ロールマネージャ USB ロールマネージャは、USB のステートを変更するためのコマンドを受信します。遷移を必要とす

るステートが、次のようにいくつかあります。

ステート 値 説明//グループ名 UX_OTG_IDLE 0 デバイスはアイドル。通常は、何にも接続していない。 UX_OTG_IDLE_TO_HOST 1 デバイスがタイプ A コネクタに接続している。 UX_OTG_IDLE_TO_SLAVE 2 デバイスがタイプ B コネクタに接続している。 UX_OTG_HOST_TO_IDLE 3 ホストデバイスが切断された。 UX_OTG_HOST_TO_SLAVE 4 ホストからスレーブへのロール切り替え UX_OTG_SLAVE_TO_IDLE 5 スレーブデバイスが切断している UX_OTG_SLAVE_TO_HOST 6 スレーブからへホストのロール切り替え

インタラプトハンドラ OTG用のホストコントローラドライバとデバイスコントローラドライバには、従来の USBインタラプトを

超えた信号(特に SRP や VBUS による信号)をモニタするために、別種のインタラプトハンドラが必

要です。

USB OTG コントローラを初期化する方法として、ここでは NXP LPC3131 を例に説明します。

/* Initialize the LPC3131 OTG controller. */ status = ux_otg_lpc3131_initialize(0x19000000, lpc3131_vbus_function,

tx_demo_change_mode_callback); この例では、VBUS ファンクションとモード変更用コールバックを(ホストからスレーブ、またはその逆

に)渡すことで、LPC3131 を OTG モードで初期化します。

コールバックファンクションでは、単に新しいモードを記録し、保留中のスレッドをウェイクアップして

新しいステートを取らせるようにします。

void tx_demo_change_mode_callback(ULONG mode) {

/* Simply save the otg mode. */ otg_mode = mode; /* Wake up the thread that is waiting. */ ux_utility_semaphore_put(&mode_change_semaphore);

}

Page 131: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

渡されるモード値としては、以下の値が可能です。

• UX_OTG_MODE_IDLE • UX_OTG_MODE_SLAVE • UX_OTG_MODE_HOST

アプリケーションは次の変数を調べて、デバイスが何であるかを常に確認することができます。

ux_system_otg -> ux_system_otg_device_type この値としては、次のものが可能です。

• UX_OTG_DEVICE_A • UX_OTG_DEVICE_B • UX_OTG_DEVICE_IDLE

USB OTG ホストデバイスは、次のコマンドを発行することで、いつでもロールの切り替えを要求でき

ます。

/* Ask the stack to perform a HNP swap with the device. We relinquish the host role to A device.*/

ux_host_stack_role_swap(storage -> ux_host_class_storage_device);

スレーブデバイスから発行するコマンドはありませんが、スレーブデバイスではロールを変更するよ

うにステートを設定することができます。すなわち、ホストが GET_STATUS を発行したときに変更後

のロールがホストによりピックアップされ、切り替えが実行されます。

/* We are a B device, ask for role swap. The next GET_STATUS from the host will get the status change and do the HNP.*/

ux_system_otg -> ux_system_otg_slave_role_swap_flag = UX_OTG_HOST_REQUEST_FLAG;

Page 132: USBX ホストスタック・ユーザガイド · Express Logic, Inc. は、USBX 製品が使用者の要件を満たすもしくは使用者により指定されたとおり に動作すること、USBX製品が中断もしくは欠陥なしに動作すること、またはUSBX

インデックス Asix クラス ................................................. 72 CDC-ACM クラス ....................................... 72 DPUMP ................... 5, 7, 133, 134, 135, 136 EHCI コントローラ ................................ 20, 27 FileX ................................................ 2, 9, 14 HID クラス............... 72, 86, 87, 89, 91, 93, 94 LUN .......................................................... 16 NetX ....................................................... 2, 9 OHCI コントローラ ............... 15, 20, 21, 27, 65 OTG ........................ 5, 7, 8, 9, 146, 147, 148 PIMA クラス ...................... 137, 138, 139, 143 Picture Transfer Protocol ........................ 137 Prolific クラス ............................................. 72 SCSI logical unit ....................................... 16 ThreadX ................ 2, 7, 9, 11, 13, 14, 16, 25 TraceX ........................................................ 9 UNICODE ........................................... 43, 45 USB IF ..................................... 27, 31, 32, 43 USBX コンポーネント .................................. 25 USBX スレッド ............................................ 16 USBX ピクトブリッジ ......................... 5, 7, 137 USB デバイス .................................3, 4, 9, 29 USB プロトコル ...................................... 8, 10 USB ホストスタック ............ 24, 25, 26, 48, 143 VBUS .............................................. 146, 147 target ........................ 11, 13, 14, 16, 23, 142 timer tick ................................................... 15 version_id ................................................. 23 インタフェース記述子 ................. 4, 29, 37, 138 エンドポイント記述子 ......... 4, 29, 40, 138, 139 オーディオクラス ......................................... 72 クラスインスタンス .......... 9, 52, 53, 54, 55, 56,

73, 74, 75, 76, 77, 78, 80, 81, 83, 84, 95, 96, 97, 98, 99, 101, 102, 103, 104, 106, 109, 111, 113, 115, 117, 121, 123, 125, 126, 127, 128, 129, 131, 132, 142, 145

クラスコンテナ ............... 15, 50, 52, 53, 54, 55 クラスレイヤ ................................................. 8

コールバック ................ 5, 48, 49, 87, 88, 131, 141, 144, 147, 148

コントローラレイヤ ......................................... 8 コンフィギュレーション ............. 4, 9, 15, 25, 26,

29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 43, 57, 58, 59, 60, 66, 68, 71

コンフィギュレーション記述子 ..... 4, 29, 34, 138 ジェネリックシリアルクラス ........................... 72 受信スレッド ............................................. 134 初期化 .............. 14, 20, 21, 22, 25, 27, 48, 64 スタックレイヤ ............................................... 8 ストリング記述子 ............................... 4, 29, 43 ストレージクラス .......................................... 72 スレーブ ........................................... 147, 148 セマフォ .............................................. 32, 148 送信スレッド ............................................. 134 デバイスインデックス ................................... 61 デバイス記述子 .................. 4, 29, 31, 45, 138 デバイス側 ....................... 8, 11, 19, 133, 134 転送 ................................. 4, 9, 26, 27, 28, 42 電力管理 .................................... 4, 9, 28, 147 バルクアウト ..................................... 136, 138 バルクイン ........................................ 136, 139 パイプ ............................................ 41, 49, 70 ハンドル ........... 32, 33, 36, 40, 43, 49, 57, 59,

62, 66, 70, 109, 111, 115, 117, 119, 120, 121, 122, 123, 124, 125, 126, 141

ファンクショナル記述子.......................... 29, 45 プリンタクラス ............................................. 72 ホストコントローラ ........... 9, 13, 15, 16, 20, 21,

22, 25, 26, 27, 43, 48, 64 ホストスタック ...................... 19, 21, 24, 25, 40 ホスト側 ............................................... 8, 134 マスタ ......................................................... 28 メモリ不足 ............. 51, 52, 55, 64, 70, 76, 99,

103, 104, 108, 110, 111, 113, 115, 117, 121, 123, 125, 126, 129

メモリ割り当て....................................... 52, 55 ルートハブ ....... 3, 4, 24, 25, 26, 27, 28, 33, 34