...

USBX™ Host Stack ユーザーズマニュアル(参考資料)

by user

on
Category: Documents
933

views

Report

Comments

Transcript

USBX™ Host Stack ユーザーズマニュアル(参考資料)
User’s Manual
USBXTM Host Stack
ユーザーズマニュアル
(参考資料)
Renesas SynergyTM プラットフォーム
本資料は英語版を翻訳した参考資料です。内容に相違がある場合には英語版を優先します。資料によって
は英語版のバージョンが更新され、内容が変わっている場合があります。日本語版は参考用としてご使用
のうえ、最新および正式な内容については英語版のドキュメントをご参照ください。
資料番号 R11UM0008EU0570、リビジョン Rev.5.70、発行日 2015 年 10 月 1 日の翻訳版です。
www.renesas.com
Rev.5.70
2016.09
ご注意書き
1. 本資料に記載された回路、ソフトウェアおよびこれらに関連する情報は、半導体製品の動作例、応用例を説
明するものです。お客様の機器・システムの設計において、回路、ソフトウェアおよびこれらに関連する情
報を使用する場合には、お客様の責任において行ってください。これらの使用に起因して、お客様または第
三者に生じた損害に関し、当社は、一切その責任を負いません。
2. 本資料に記載されている情報は、正確を期すため慎重に作成したものですが、誤りがないことを保証するもの
ではありません。万一、本資料に記載されている情報の誤りに起因する損害がお客様に生じた場合において
も、当社は、一切その責任を負いません。
3. 本資料に記載された製品デ-タ、図、表、プログラム、アルゴリズム、応用回路例等の情報の使用に起因して
発生した第三者の特許権、著作権その他の知的財産権に対する侵害に関し、当社は、何らの責任を負うもので
はありません。当社は、本資料に基づき当社または第三者の特許権、著作権その他の知的財産権を何ら許諾す
るものではありません。
4. 当社製品を改造、改変、複製等しないでください。かかる改造、改変、複製等により生じた損害に関し、当社
は、一切その責任を負いません。
資
料
5. 当社は、当社製品の品質水準を「標準水準」および「高品質水準」に分類しており、各品質水準は、以下に示
す用途に製品が使用されることを意図しております。
標準水準:コンピュータ、OA機器、通信機器、計測機器、AV機器、家電、工作機械、パーソナル機器、
産業用ロボット等
高品質水準:輸送機器(自動車、電車、船舶等)、交通用信号機器、防災・防犯装置、各種安全装置等
当社製品は、直接生命・身体に危害を及ぼす可能性のある機器・システム(生命維持装置、人体に埋め込み使
用するもの等)、もしくは多大な物的損害を発生させるおそれのある機器・システム(原子力制御システム、
軍事機器等)に使用されることを意図しておらず、使用することはできません。たとえ、意図しない用途に当
社製品を使用したことによりお客様または第三者に損害が生じても、当社は一切その責任を負いません。なお、
ご不明点がある場合は、当社営業にお問い合わせください。
参
考
6. 当社製品をご使用の際は、当社が指定する最大定格、動作電源電圧範囲、放熱特性、実装条件その他の保証範
囲内でご使用ください。当社保証範囲を超えて当社製品をご使用された場合の故障および事故につきまして
は、当社は、一切その責任を負いません。
7. 当社は、当社製品の品質および信頼性の向上に努めていますが、半導体製品はある確率で故障が発生したり、
使用条件によっては誤動作したりする場合があります。また、当社製品は耐放射線設計については行っており
ません。当社製品の故障または誤動作が生じた場合も、人身事故、火災事故、社会的損害等を生じさせないよ
う、お客様の責任において、冗長設計、延焼対策設計、誤動作防止設計等の安全設計およびエージング処理
等、お客様の機器・システムとしての出荷保証を行ってください。特に、マイコンソフトウェアは、単独での
検証は困難なため、お客様の機器・システムとしての安全検証をお客様の責任で行ってください。
8. 当社製品の環境適合性等の詳細につきましては、製品個別に必ず当社営業窓口までお問合せください。ご使用
に際しては、特定の物質の含有・使用を規制する RoHS指令等、適用される環境関連法令を十分調査のうえ、
かかる法令に適合するようご使用ください。お客様がかかる法令を遵守しないことにより生じた損害に関し
て、当社は、一切その責任を負いません。
9. 本資料に記載されている当社製品および技術を国内外の法令および規則により製造・使用・販売を禁止されて
いる機器・システムに使用することはできません。また、当社製品および技術を大量破壊兵器の開発等の目
的、軍事利用の目的その他軍事用途に使用しないでください。当社製品または技術を輸出する場合は、「外国
為替及び外国貿易法」その他輸出関連法令を遵守し、かかる法令の定めるところにより必要な手続を行ってく
ださい。
10. お客様の転売等により、本ご注意書き記載の諸条件に抵触して当社製品が使用され、その使用から損害が生
じた場合、当社は何らの責任も負わず、お客様にてご負担して頂きますのでご了承ください。
11. 本資料の全部または一部を当社の文書による事前の承諾を得ることなく転載または複製することを禁じま
す。
注 1. 本資料において使用されている「当社」とは、ルネサス エレクトロニクス株式会社およびルネサス エレク
トロニクス株式会社がその総株主の議決権の過半数を直接または間接に保有する会社をいいます。
注 2. 本資料において使用されている「当社製品」とは、注1 において定義された当社の開発、製造製品をいいます。
(2012.4)
Renesas Synergy™プラットフォーム向け
製品情報
料
Renesas Synergy プラットフォームで USBX™を使用する
場合、以下の情報をご参照ください。
Renesas Synergy プラットフォームのサポートに関するご質
問およびお問合せは、下記のサポート窓口およびお問合せ先
へご連絡ください。
サポート窓口 https://synergygallery.renesas.com/support
お問合せ先 http://japan.renesas.com/contact/index.jsp
USBX™の
インストール
USBX™は Renesas Synergy Software Package(SSP)を
構成するコンポーネントのひとつです。お客様が SSP を
Renesas Synergy ギャラリーからダウンロードしてインス
トールすると、USBX™も同時にインストールされます。
このため、お客様が再度 USBX™を単独でインストールす
る必要はありません。
製品に含まれ
ないファイル
の扱い
SSP を通じて提供する USBX™には、以下のファイルは含
まれていません。以下のファイルの使用についての説明を
ご覧いただく必要はありません。
・readme_usbx.txt
・demo_usbx.c
参
考
資
カスタマー・
サポート
ユーザーガイド
資
料
高性能 USB スタック
参
考
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 版
目次
目次 ................................................................................................................ 3
本書について ................................................................................................... 6
第1章
USBX の概要 ................................................................................ 7
USBX の機能 ................................................................................................................ 7
製品ハイライト ................................................................................................................ 8
料
USBX の強力なサービス ............................................................................................... 8
第2章
資
複数ホストコントローラのサポート .......................................................................... 8
USB ソフトウェアスケジューラ ................................................................................ 8
USB デバイスフレームワークの完全なサポート ..................................................... 8
使いやすい API..................................................................................................... 8
USBX のインストール..................................................................... 9
ホストについて ............................................................................................................... 9
参
考
コンピュータの種類 ................................................................................................ 9
ダウンロード用インタフェース ................................................................................. 9
デバッグツール ..................................................................................................... 9
必要なハードディスク容量 ..................................................................................... 9
ターゲットについて................................................................................................. 9
コンフィギュレーションオプション.................................................................................... 12
ソースコードツリー ........................................................................................................ 14
USBX リソースの初期化 .............................................................................................. 15
USB ホストコントローラの定義 ...................................................................................... 16
ホストクラスの定義 ....................................................................................................... 17
トラブルシューティング .................................................................................................. 19
USBX バージョン ID ..................................................................................................... 19
第3章
USBX ホストスタックのファンクション コンポーネント ...................... 20
実行概要 ..................................................................................................................... 20
初期化 ................................................................................................................ 21
アプリケーションインタフェースコール ................................................................... 21
USB ホストスタック API ....................................................................................... 21
USB ホストクラス API .......................................................................................... 21
ルートハブ ................................................................................................................... 22
ハブクラス .................................................................................................................... 22
USB ホストスタック ....................................................................................................... 22
トポロジマネージャ ....................................................................................................... 22
USB クラスのバインド .................................................................................................. 22
USBX API ................................................................................................................... 23
ホストコントローラ ......................................................................................................... 23
ルートハブ........................................................................................................... 24
電力管理 ............................................................................................................ 24
エンドポイント ...................................................................................................... 24
転送.................................................................................................................... 24
USB デバイスのフレームワーク .................................................................................... 25
USBX ホストサービスの説明 ........................................................ 42
資
第4章
料
デバイス記述子 ................................................................................................... 27
コンフィギュレーション記述子 ............................................................................... 30
インタフェース記述子 ........................................................................................... 32
エンドポイント記述子 ........................................................................................... 35
ストリング記述子 ................................................................................................. 38
ファンクショナル記述子 ........................................................................................ 40
メモリ内の USBX デバイス記述子フレームワーク................................................. 40
参
考
ux_host_stack_initialize ..................................................................................... 43
ux_host_stack_endpoint_transfer_abort ........................................................... 44
ux_host_stack_class_get .................................................................................. 45
ux_host_stack_class_register ........................................................................... 46
ux_host_stack_class_instance_create .............................................................. 47
ux_host_stack_class_instance_destroy ............................................................ 48
ux_host_stack_class_instance_get ................................................................... 49
ux_host_stack_device_configuration_get ......................................................... 50
ux_host_stack_device_configuration_select ..................................................... 51
ux_host_stack_device_get ................................................................................ 53
ux_host_stack_interface_endpoint_get ............................................................. 54
ux_host_stack_hcd_register .............................................................................. 56
ux_host_stack_configuration_interface_get ...................................................... 58
ux_host_stack_interface_setting_select ............................................................ 59
ux_host_stack_transfer_request_abort ............................................................. 60
ux_host_stack_transfer_request ....................................................................... 61
第5章
USBX ホストクラスの API ............................................................ 63
ux_host_class_printer_read .............................................................................. 64
ux_host_class_printer_write .............................................................................. 65
ux_host_class_printer_soft_reset ...................................................................... 66
ux_host_class_printer_status_get ..................................................................... 67
ux_host_class_audio_read ................................................................................ 68
ux_host_class_audio_write ............................................................................... 69
ux_host_class_audio_control_get ..................................................................... 70
ux_host_class_audio_control_value_set ........................................................... 71
ux_host_class_audio_streaming_sampling_set ................................................ 72
ux_host_class_audio_streaming_sampling_get ................................................ 73
ux_host_class_hid_client_register..................................................................... 75
ux_host_class_hid_report_callback_register .................................................... 76
参
考
資
料
ux_host_class_hid_periodic_report_start .......................................................... 77
ux_host_class_hid_periodic_report_stop .......................................................... 78
ux_host_class_hid_report_get........................................................................... 79
ux_host_class_hid_report_set ........................................................................... 80
ux_host_class_asix_read .................................................................................. 81
ux_host_class_asix_write .................................................................................. 82
ux_host_class_cdc_acm_read .......................................................................... 83
ux_host_class_cdc_acm _write ......................................................................... 84
ux_host_class_cdc_acm_ioctl ........................................................................... 85
ux_host_class_pima_session_open .................................................................. 87
ux_host_class_pima_session_close ................................................................. 88
ux_host_class_pima_storage_ids_get .............................................................. 89
ux_host_class_pima_storage_info_get ............................................................. 90
ux_host_class_pima_num_objects_get ............................................................ 91
ux_host_class_pima_object_handles_get ......................................................... 94
ux_host_class_pima_object_info_get................................................................ 96
ux_host_class_pima_object_info_send ............................................................. 98
ux_host_class_pima_object_open .................................................................. 100
ux_host_class_pima_object_get ..................................................................... 101
ux_host_class_pima_object_send................................................................... 103
ux_host_class_pima_thumb_get ..................................................................... 105
ux_host_class_pima_object_delete................................................................. 107
ux_host_class_pima_object_close .................................................................. 108
ux_host_class_gser_read................................................................................ 109
ux_host_class_gser_write ............................................................................... 110
ux_host_class_gser_ioctl ................................................................................ 111
ux_host_class_gser_reception_start ............................................................... 113
ux_host_class_gser_reception_stop ............................................................... 114
第6章
USBX DPUMP クラスについて .................................................. 115
USBX DPUMP ホストクラス ....................................................................................... 116
USBX DPUMP デバイスクラス................................................................................... 118
第7章
ピクトブリッジの実装 ................................................................... 119
ピクトブリッジクライアントの実装 ................................................................................. 120
ux_pictbridge_jobinfo_object_data_read ......................................................... 124
ピクトブリッジホストの実装 .......................................................................................... 125
ux_pictbridge_application_object_data_write .................................................. 127
第8章
USBX OTG ............................................................................... 128
インデックス ................................................................................................. 131
本書について
本書では、Express Logic, Inc.の高性能 USB ファウンデーションソフトウェア USBX について包括的
に説明します。
本書は、組み込み式リアルタイムソフトウェアの開発者を対象にしています。開発者は、標準的なリ
アルタイムオペレーティングシステムファンクション、USB 仕様、および C プログラミング言語に精通
していることとします。
本書の構成
第 1 章では、USB について紹介します。
料
USB 関連の技術的な情報については、http://www.USB.org/developers から USB 仕様書および
USB クラス仕様書をダウンロードして参照してください。
資
第 2 章では、ThreadX アプリケーションに USBX をインストールして使用するための基本
手順を説明します。
第 3 章では、USBX の機能の概要と USB の基本事項を説明します。
参
考
第 4 章では、ホストモードの USBX へのアプリケーションのインタフェースについて詳述し
ます。
第 5 章は、「USBX DPUMP クラスについて」と題しています。
第 6 章は、「USBX Pictbridge の実装」と題しています。
第 7 章は、「USBX OTG」と題しています。
第 1 章 USBX の概要
USBX は、組み込みアプリケーション対応の本格的 USB スタックです。この章では USBX の概要を
紹介し、その用途と利点を説明します。
USBX の機能
USBX は、現行の USB Specification 1.1、2.0、および OTG をサポートします。スケーラブルに設計
してあるため、1 つだけのデバイスを接続する簡易 USB テクノロジから、複数のデバイスとカスケー
ドハブを備えた複雑なテクノロジまで対応します。USB プロトコルで可能な制御転送、バルク転送、イ
ンタラプト転送、アイソクロナス転送をすべて USBX でサポートします。
料
USBX はホスト側、デバイス側の両方をサポートします。いずれの側も、次の 3 つのレイヤで構成さ
れます。
資
• 制御レイヤ
• スタックレイヤ
• クラスレイヤ
参
考
USB 各相の関係は次のようになっています。
クラスドライバ
クラスドライバ
ホストスタック
デバイススタック
ホストコントローラ
ドライバ
ホストコントローラ
ドライバ
ホストコントローラ
デバイスコントローラ
ホスト 側
デバイ ス側
製品ハイライト
USBX の強力なサービス
資
複数ホストコントローラのサポート
料
ThreadX プロセッサの完全なサポートロイヤルティなし
完全な ANSI C ソースコード
リアルタイムパフォーマンス迅速なテクニカルサポート
複数のクラスサポート
複数のクラスインスタンス
ThreadX、FileX、NetX とのクラス統合
複数コンフィギュレーション対応の USB デバイスのサポート
USB 複合デバイスのサポート
カスケードハブのサポート
USB 電力管理のサポート
USB OTG のサポート
TraceX のトレースイベントのエクスポート
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 プロトコルを理解する必要がありません。
第 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 の中断と周期処理を必要とします。
製品の配布
USBX パッケージには、標準とプレミアムの 2 種類があります。標準パッケージでは最小限のソース
コードを備えているの対し、プレミアムパッケージには USBX ソースコードを一式完備しています。い
ずれのパッケージも 1 枚の CD で出荷されます。
配布 CD の内容は、ターゲットプロセッサ、開発ツール、USBX パッケージにより異なります。以下は、
ほとんどの製品配布に共通する重要ファイルのリストです。
USBX ポートに関するファイルで、ターゲットプロセッサ、開発ツールな
どが含まれています。
ux_api.h
すべてのシステム equate、データ構造、サービスプロトタイプを記述し
た C ヘッダファイルです。
ux_port.h
開発ツール向けのデータ定義と構造をすべて記述した C ヘッダファイ
ルです。
ux.lib
USBX C ライブラリのバイナリバージョンです。標準パッケージで配布さ
れます。
demo_usbx.c
簡単な USBX デモを記述した C ファイルです。
資
料
readme_usbx.txt
参
考
ファイル名はすべて小文字で表します。これにより、コマンドを 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 ファイルの修正が必要になる場合があります。ハード
ウェアプラットフォームごとに異なるステップとなるため、ここでは説明しません。
アプリケーションソースコードをコンパイルし、それを USBX と ThreadX のランタイ
ムライブラリとリンクし(USB ストレージクラスや USB ネットワーククラスをコンパイ
ルするときは FileX や Netx も必要になる場合があります)、また ux.a(または ux.lib)
と tx.a(または tx.lib)にもリンクします。結果をターゲットにダウンロードすれば実行
できます。
参
考
資
料
ステップ 8
コンフィギュレーションオプション
USBX ライブラリの構築用にいくつかのコンフィギュレーションオプションがあります。オプションはす
べて ux_port.h に置かれています。
各コンフィギュレーションオプションについて、以下に詳述します。配布ディスクで提供される
readme_usbx.txt ファイルに、その他の開発ツールオプションが記述されています。
UX_PERIODIC_RATE
個々のハードウェアプラットフォームにおける秒あたりのティック数です。デフォルトは 1000、すなわ
ちミリ秒あたり 1 ティックです。
料
UX_MAX_CLASS_DRIVER
UX_MAX_HCD
資
USBX でロード可能なクラスの最大数です。クラスコンテナを表す値であり、1 クラスのインスタンス
数ではありません。例えば、USBX の実装にハブクラス、プリンタクラス、およびストレージクラスが必
要な場合、これらのクラスに属するデバイス数とは無関係に、UX_MAX_CLASS_DRIVER 値を 3 に
設定できます。
参
考
システムで使用可能なホストコントローラの数です。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 バス数とはか
かわりなく、デバイスの合計数を表す値であるので留意してください。
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
UX_THREAD_PRIORITY_CLASS
資
バストポロジをモニタする USBX 列挙スレッドの ThreadX 優先度値です。
標準 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 論理ユニットの最大数を表します
ソースコードツリー
USBX の各ファイルは、いくつかのディレクトリで提供されます。
USBX コア
USBX
ホストスタック
USBX ホスト
コントローラ
USBX OTG
USBX ホストクラス
参
考
USBX デバイス
クラス
資
USBX デバイス
コントローラ
USBX
ネットワーク
USBX の例
料
USBX
デバイススタック
Windows
ホストファイル
各ファイルを名前で識別できるように、以下の表記法を採用しています。
ファイルの説明
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 はキャッシュセーフメモリに代えて正規メモリプールを使用します。
正規メモリがキャッシュセーフではなく、またコントローラが 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 ファンクションは次のパラメータを使用します。
コントローラ名のストリング
コントローラの初期化ファンクション
通常は、コントローラで使用する IO 値またはメモリ
通常は、コントローラで使用する IRQ
参
考
hcd_name:
hcd_initialize_function:
hcd_param1:
hcd_param2:
前の例では次のようになります。
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
SH2A
Renesas RX62 組み込みホストコントローラ
Renesas SH2A ベースの組み込みホストコントローラ
STM32
MUSB
ST Micro STM32 F1/F2/F4 組み込みホストコントローラ
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 デバイスに特化しています。
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 クラスのエンドポイントです。
トラブルシューティング
USBX には、デモファイルとシミュレーション環境が付属しています。最初に、ターゲットハードウェア
または特定のデモプラットフォームでデモプラットフォームを実行してみるのがよいでしょう。
デモシステムが機能しない場合、以下の方法で問題を絞り込んでください。
USBX バージョン ID
USBX の現在のバージョンは、実行時にユーザからもアプリケーションソフトウェアからも確認できま
す。
参
考
資
料
プログラマは、usbx.txt ファイルを調べて USB バージョンを取得できます。このファイルには、対応す
るポートのバージョン履歴も記載されています。アプリケーションソフトウェアでは、ux_port.h に定義
されているグローバルストリング_ux_version_id を調べて USBX バージョンを取得できます。
第 3 章 USBX ホストスタックのファンクション
コンポーネント
この章では、USBX の高性能埋め込み USB ホストスタックについて、ファンクションの観点から説明
します。
実行概要
資
初期化
アプリケーションインタフェースコール
ルートハブ
ハブクラス
ホストクラス
USB ホストスタック
ホストコントローラ
料
USBX は、次のコンポーネントから構成されます。
参
考
USBX ホストスタックを下の図に示します。
ハブクラス
アイソクロナス
クラス
非同期クラス
キーボード
クライアント
マウスク
ライアント
HID クラス
USB スタック
OHCI
EHCI
ソフトウェア
スケジューラ
コントローラドライバ
リモート
コントロール
クライアント
初期化
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 のほとんどは、デバ
イスのオープン/クローズ、デバイスとの読み書きなどのサービスを提供します。
ルートハブ
ホストコントローラの各インスタンスには、1 つ以上の USB ルートハブがあります。ルートハブの数は、
コントローラの性質によって決まるか、またはコントローラから特定のレジスタを読み出すことで取得
できます。
ハブクラス
料
ハブクラスは、USB ハブの駆動を担当します。USB ハブは、スタンドアロンハブのほか、キーボード、
モニタなど複合デバイスの一部とすることも可能です。ハブには、自己電力形とバス電力形がありま
す。バス電力ハブでは、最大 4 つまでの下流ポートを搭載でき、また使用電力が 100mA 未満の自
己電力またはバス電力のデバイスのみが接続可能です。各ハブのカスケード化が可能です。最大 5
つのハブを相互に接続できます。
USB ホストスタック
USB ホストスタックは、USBX の中核部分です。次の 3 つの主要機能を持ちます。
参
考
トポロジマネージャ
資
• USB のトポロジの管理
• 1 つ以上のクラスへの USB デバイスのバインド
• デバイス記述子問い合わせと USB 転送を実行するための、API をクラスに提供
新しいデバイスが接続されるまたはデバイスの接続が外されると、USB スタックトポロジスレッドが
ウェイクアップされます。ルートハブでも正規ハブでも、デバイスの接続を受け付けることができます。
USB にデバイスが接続されると、トポロジマネージャがデバイス記述子を取得します。この記述子に
は、そのデバイスで可能なコンフィギュレーションの数が示されています。ほとんどのデバイスは、1
つのコンフィギュレーションのみを備えています。接続先ポートでの使用可能電力に従って、異なる
動作が可能なデバイスもあります。そのようなデバイスには、使用可能電力に応じて複数のコンフィ
ギュレーションがあり、選択できるようにしてあります。トポロジマネージャによりコンフィギュレーショ
ンされたデバイスには、コンフィギュレーション記述子に指定されている電力が供給できるようになり
ます。
USB クラスのバインド
デバイスがコンフィギュレーションされたらトポロジマネージャは、クラスマネージャがデバイスインタ
フェース記述子を見ながらデバイス発見を続行するようにさせます。各デバイスには 1 つ以上のイン
タフェース記述子を持つことができます。
インタフェースとは、デバイスに含まれるファンクションです。例えば、USB スピーカには、オーディオ
ストリーミング用、オーディオコントロール用、各種スピーカボタンの管理用のインタフェースが各 1 個、
合計 3 個のインタフェースがあります。
クラスマネージャには、デバイスインタフェースを 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
ルートハブ
ルートハブ管理では、各コントローラポートに電源を投入し、挿入されているデバイスがあるかどうか
を判定します。この機能を USBX ジェネリックルートハブが使用し、コントローラの下流ポートに問い
合わせを行います。
電力管理
電力管理処理は、中断/再開信号を扱うための機能です。ギャングモードにしてコントローラのすべ
ての下流ポートに同時に影響するようにするか、または(コントローラ側で対応している場合は)各
ポートに対して個別に使用します。
エンドポイント
資
転送
料
エンドポイント管理では、コントローラへの物理エンドポイントを作成または破壊することができます。
物理エンドポイントとはメモリエンティティのことで、マスターDMA をサポートするコントローラで解析
される場合と、コントローラに書き込まれている場合があります。物理エンドポイントには、コントロー
ラにより実行されるトランザクション情報が含まれています。
参
考
転送管理とは、作成した各エンドポイントでクラスがトランザクションを実行するためのものです。各
論理エンドポイントには、USB 転送要求用の TRANSFER REQUEST というコンポーネントが含まれ
ています。TRANSFER REQUEST は、トランザクションを記述するためにスタックで使用されます。
この TRANSFER REQUEST がスタックとコントローラに渡され、コントローラではその能力に応じて
いくつかのサブトランザクションに分割することができます。
USB デバイスのフレームワーク
USB デバイスは、記述子のツリーで表されます。記述子は次の 6 種類に大別されます。
デバイス記述子
コンフィギュレーション記述子
インタフェース記述子
エンドポイント記述子
ストリング記述子
ファンクショナル記述子
USB デバイスは、ごく簡潔に記述することが可能で、その場合は次のようになります。
資
コンフィギュレーション
記述子
ストリング
記述子
料
デバイス
記述子
参
考
インタフェース
記述子
エンドポイント
記述子
上の図では、デバイスに含まれるコンフィギュレーションは 1 つだけです。このコンフィギュレーション
に 1 つのインタフェースがアタッチされています。すなわち、このデバイスではファンクションが 1 つだ
け、エンドポイントも 1 つだけです。デバイス記述子にストリング記述子をアタッチして、デバイスの識
別を可視化しています。
逆に、もっと複雑なデバイスも可能で、その場合は次のようになります。
デバイス記述子
コンフィギュレーション
記述子
コンフィギュレーション
記述子
エンドポイント
記述子
参
考
エンドポイント
記述子
エンドポイント
記述子
インタフェース
記述子
料
インタフェース
記述子
エンドポイント
記述子
エンドポイント
記述子
エンドポイント
記述子
エンドポイント
記述子
ファンクショナル
記述子
ファンクショナル
記述子
資
インタフェース
記述子
ストリング記述子
ファンクショナル
記述子
上の図では、デバイス記述子にコンフィギュレーション記述子が 2 つアタッチされています。このデバ
イスでは、電力モードが 2 つある場合や、標準クラスや各社独自のクラスで駆動される場合などがあ
ります。
最初のコンフィギュレーションには 2 つのインタフェースがアタッチされている、すなわち 2 つの論理
ファンクションを持っています。最初のファンクションには、エンドポイント記述子が 3 つ、ファンクショ
ナル記述子が 1 つあります。ファンクショナル記述子は、例えばインタフェースの駆動を担うクラスが
使用し、このインタフェースに関してジェネリック記述子には含まれていないような追加情報を取得し
たりします。
デバイス記述子
各 USB デバイスには、デバイス記述子が 1 つあります。この記述子には、デバイス識別子、サポー
トしているコンフィギュレーションの数、およびデバイスのコンフィギュレーションに使用するデフォルト
の制御エンドポイントの特性が記述されます。
フィールド
サイズ
値
数値
定数
BCD
BLength
bDescriptorType
bcdUSB
1
1
2
4
bDeviceClass
1
この記述子のサイズ(単位、バイト)
デバイス記述子の型
USB 仕様リリース番号(2 進化 10 進数)
例例: 2.10 は 0x210 と等しい。このフィールドには、デバ
イスとその記述子が準拠する USB 仕様のリリース番号
を示します。
クラス
クラスコード(USB-IF により割り当てられる)。
このフィールドを 0 にリセットすると、コンフィギュレーショ
ン内の各インタフェースが自身のクラス情報を指定し、
それぞれのインタフェースが独立して動作します。
このフィールドを 1~0xFE の値に設定すると、デバイス
はインタフェースごとに異なるクラス仕様をサポートする
ことになり、各インタフェースは独立して動作しない場合
があります。この値は、インタフェースの集合に使用され
るクラス定義を特定します。
このフィールドを 0xFF に設定すると、ベンダ固有のデバ
イスクラスになります。
サブクラス サブクラスコード(USB-IF により割り当てられる)。
これらのコードは bDeviceClass フィールドの値に修飾さ
れます。bDeviceClass フィールドが 0 にリセットされた
場合は、このフィールドも 0 にリセットする必要がありま
す。bDeviceClass フィールドが 0xFF に設定されない場
合、すべての値が USB による割り当て用に予約されま
す。
プロトコル プロトコルコード(USB-IF により割り当てられる)。
こ れ ら の コ ー ド は bDeviceClass フ ィ ー ル ド と
bDeviceSubClass フィールドの値に修飾されます。イン
タフェースベースではなくクラスベースのクラス固有プロ
トコルをサポートするデバイスでは、デバイスが使用す
るプロトコルを、デバイスクラスの仕様の定義に従ってこ
のコードで識別します。このフィールドを 0 にリセットする
と、デバイスはクラス固有プロトコルをデバイスベースで
使用しません。
ただし、インタフェースベースでクラス固有プロトコルを
使用することはできます。
このフィールドを 0xFF に設定すると、デバイスはベンダ
固有プロトコルをデバイスベースで使用します。
数値
エンドポイント 0 の最大パケットサイズ(バイトサイズ 8、
16、32、または 64 のみが有効)
ID
ベンダ ID(USB-IF により割り当てられる)
5
参
考
資
0
1
2
説明
料
オフ
セット
bDeviceSubClass
1
bDeviceProtocol
1
7
bMaxPacketSize0
1
8
idVendor
2
6
10
12
14
15
16
idProduct
bcdDevice
iManufacturer
iProduct
iSerialNumber
2
2
1
1
1
17
bNumConfiguration
s
1
製品 ID(メーカーにより割り当てられる)
デバイスリリース番号(2 進化 10 進数)
インデックス メーカーを記述するストリング記述子のインデックス
インデックス 製品を記述するストリング記述子のインデックス
インデックス デバイスのシリアル番号を記述するストリング記述子の
インデックス
数値
可能なコンフィギュレーションの数
ID
BCD
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;
}
struct UX_ENDPOINT_STRUCT
ux_device_control_endpoint;
struct UX_HUB_TT_STRUCT
ux_device_hub_tt[UX_MAX_TT];
UX_DEVICE;
変数名
変数の説明
デバイスのハンドル。通常は、デバイスのこの構造のイン
スタンスのアドレスです。
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
SET_ADDRESS コマンドが受け付けられた後のデバイス
のアドレス(1~127)。
参
考
ux_device_address
資
料
ux_device_handle
ux_device_speed
デバイスの速度。
UX_LOW_SPEED_DEVICE
UX_FULL_SPEED_DEVICE
UX_HIGH_SPEED_DEVICE
0
1
2
ux_device_port_location
親デバイス(ルートハブまたはハブ)のポートのインデック
ス。
ux_device_max_power
選択されたコンフィギュレーションにおいてデバイスに取り
込める最大電力(単位、mA)。
ux_device_power_source
次の 2 つのいずれかの値が可能です。
UX_DEVICE_BUS_POWERED
UX_DEVICE_SELF_POWERED
1
2
ux_device_current_configuration
このデバイスで現在使用しているコンフィギュレーションの
インデックス。
ux_device_parent
このデバイスの親のデバイスコンテナポインタ。ポインタが
NULL なら、コントローラのルートハブが親です。
このデバイスを所有するクラス型へのポインタ。
ux_device_class_instance
このデバイスを所有するクラスのインスタンスへのポイン
タ。
ux_device_hcd
このデバイスがアタッチされる USB ホストコントローライン
スタンス。
ux_device_first_configuration
このデバイスの 1 番目のコンフィギュレーションコンテナへ
のポインタ。
ux_device_next_device
USBX により検出されるいずれかのバスにあるデバイス
のうち、デバイスリストに含まれる次のデバイスへのポイ
ンタ。
ux_device_descriptor
ux_device_control_endpoint
USB device descriptor.
このデバイスで使用するデフォルトの制御エンドポイントの
記述子。
ux_device_hub_tt
デバイスのハブ TT の配列。
資
コンフィギュレーション記述子
料
ux_device_class
参
考
コンフィギュレーション記述子には、特定のデバイスコンフィギュレーションに関する情報を記述しま
す。USB デバイスには、1 つ以上のコンフィギュレーション記述子を含めることができます。デバイス
記述子の bNumConfigurations フィールドに、コンフィギュレーション記述子の数が示されます。コン
フィギュレーション記述子の bConfigurationValue フィールドの値は、それが Set Configuration 要求
へのパラメータとして使用された場合、その値に対応するコンフィギュレーションをデバイスが取るよ
うになります。
コンフィギュレーション記述子には、コンフィギュレーションで提供されるインタフェースの数を記述し
ます。各インタフェースは、デバイス内での論理ファンクションを表すもので、それぞれ独立して動作
することが可能です。例えば USB オーディオスピーカでは、オーディオストリーミングインタフェース、
オーディオコントロールインタフェース、各種スピーカボタンの管理用の HID インタフェースが各 1 個、
合計 3 個のインタフェースを設けることができます。
ホストがコンフィギュレーション記述子に対して GET_DESCRIPTOR 要求を発行すると、関連するイ
ンタフェース記述子とエンドポイント記述子がすべて返されます。
オフセット
フィールド
サイズ
値
説明
bLength
1
数値
この記述子のサイズ(単位、バイト)
1
bDescriptorType
1
定数
コンフィギュレーション
2
wTotalLength
2
数値
このコンフィギュレーションに対して返される
データの合計長さ。このコンフィギュレーション
に対して返されるすべての記述子(コンフィギュ
レーション、インタフェース、エンドポイント、お
よびクラス固有またはベンダ固有)を組合わせ
た長さが含まれます。
4
bNumInterfaces
1
数値
このコンフィギュレーションでサポートされるイ
ンタフェースの合計数。
5
bConfigurationValue
1
数値
このコンフィギュレーションを選択するために
Set Configuration の引数として使用する値。
6
iConfiguration
1
インデックス このコンフィギュレーションを記述するストリン
グ記述子のインデックス。
7
bMAttributes
1
ビットマップ
料
0
8
参
考
資
コンフィギュレーション特性 D7 バス電力
D6 自己電力 D5 リモートウェイクアップ
D4..0 予約済み(0 にリセット)
バスからの電力およびローカル電源を使用す
るデバイスコンフィギュレーションでは、D7 と
D6 の両方をセットします。実行時の実際の電
源は、Get Status デバイス要求を使用して決
定することも可能です。
デバイスコンフィギュレーションがリモートウェイ
クアップをサポートする場合は、D5 を 1 に設定
します。
MaxPower
1
mA
デバイスが完全に機能するときに、このコン
フィギュレーションにおいてバスから供給される
電力に対する USB デバイスの最大消費電力。
2mA 単位で表します(例: 50 = 100mA)。
注: コンフィギュレーションがバス電力か自己電
力かは、デバイスコンフィギュレーションで報告
します。
デバイスは現在自己電力で動作しているかど
うかは、デバイスステータスで報告します。デ
バイスの外部電源から接続が切断したときは、
デバイスがデバイスステータスを更新し、自己
電力ではなくなっていることを示します。
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
ux_configuration_first_interface
USB device descriptor.
このコンフィギュレーションの 1 番目のインタフェースへの
ポインタ
ux_configuration_next_configuration 同じデバイスの次のコンフィギュレーションへのポインタ
ux_configuration_device
このコンフィギュレーションのデバイス所有者へのポインタ
インタフェース記述子
インタフェース記述子には、コンフィギュレーション内の特定のインタフェースについて記述します。イ
ンタフェースとは、USB デバイス内の論理ファンクションです。コンフィギュレーションには 1 つ以上の
インタフェースを備えています。各インタフェースには、コンフィギュレーションに含まれるエンドポイン
トの一意のセットを記述する、エンドポイント記述子が 0 個以上含まれます。2 つ以上のインタフェー
スをサポートするコンフィギュレーションでは、指定されたコンフィギュレーションについて
GET_DESCRIPTOR 要求から返されるデータに含まれるインタフェース記述子に、各インタフェース
のエンドポイント記述子が従います。
インタフェース記述子は、必ずコンフィギュレーション記述子の一部として返されます。
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 のみを使用します。
クラス
クラスコード(USB により割り当てられる)。
この値を 0 にリセットすると、インタフェースは
USB 指定のどのデバイスクラスにも属さなく
なります。
このフィールドを 0xFF に設定すると、インタ
フェースクラスはベンダ固有になります。
その他の値はすべて、USB による割り当て
用に予約されています。
bInterfaceClass
1
6
bInterfaceSubClas
s
1
サブクラス サブクラスコード(USB により割り当てられ
る)。
これらのコードは bInterfaceClass フィールド
の値に修飾されます。bInterfaceClass フィー
ルドが 0 にリセットされた場合は、このフィー
ルドも 0 にリセットする必要があります。
bInterfaceClass フィールドが 0xFF に設定さ
れない場合、すべての値が USB による割り
当て用に予約されます。
7
bInterfaceProtocol
1
プロトコル プロトコルコード(USB により割り当てられ
る)。これらのコードは bInterfaceClass フィー
ルドと bInterfaceSubClass フィールドの値に
修飾されます。クラス固有要求をインタフェー
スでサポートする場合、デバイスクラスの仕
様に従ってデバイスが使用するプロトコル
を、このコードで特定します。
このフィールドを 0 にリセットすると、デバイス
はこのインタフェースにクラス固有プロトコル
を使用しません。このフィールドを 0xFF に設
定すると、デバイスはこのインタフェースにベ
ンダ固有プロトコルを使用します。
8
参
考
資
料
5
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;
USB インタフェース記述子は、以下のインタフェースコンテナの一部となっています。
typedef struct UX_INTERFACE_STRUCT
{
ULONG
ULONG
ULONG
struct UX_INTERFACE_DESCRIPTOR_STRUCT
struct UX_HOST_CLASS_STRUCT
VOID
struct UX_ENDPOINT_STRUCT
struct UX_INTERFACE_STRUCT
struct UX_CONFIGURATION_STRUCT
} UX_INTERFACE;
ux_interface_handle;
ux_interface_state;
ux_interface_current_alternate_setting;
ux_interface_descriptor;
*ux_interface_class;
*ux_interface_class_instance;
*ux_interface_first_endpoint;
*ux_interface_next_interface;
*ux_interface_configuration;
変数の説明
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 リソースが新しい代替設定に従って修正されます。
デフォルトの制御エンドポイントを除き、エンドポイントをインタフェース間で共有することはできませ
ん。
オフセット フィールド
サイズ
値
説明
0
bLength
1
数値
この記述子のサイズ(単位、バイト)
1
bDescriptorType
1
定数
エンドポイント記述子の型
2
bEndpointAddress
1
エンドポイント この記述子に記述される USB デバイス上のエンドポイ
ントのアドレス。アドレスは次のようにエンコードされま
す。
ビット 3~0: エンドポイント番号
ビット 6~4:予約(0 にリセット)
ビット 7: 方向(制御エンドポイントの場合は無視)
0 = OUT エンドポイント
1 = IN エンドポイント
bmAttributes
1
ビットマップ
このフィールドには、bConfigurationValue を用いてエ
ンドポイントをコンフィギュレーションするときの、エンド
ポイントの属性を記述します。
ビット 1~0: 転送の種類 00 = 制御
01 = アイソクロナス
10 = バルク
11 = インタラプト
料
3
4
参
考
資
アイソクロナスエンドポイントでない場合は、ビット 5~
2 は予約されていて、0 に設定する必要があります。ア
イソクロナスの場合は、次のように定義されます。
wMaxPacketSize
2
数値
ビット 3~2:同期の種類
00 = 同期なし 01 = 非同期
10 = 適応
11 = 同期
ビット 5~4:使用法の種類
00 = データエンドポイント
01 = フィードバックエンドポイント
10 = インプリシット・フィードバックデータエンドポイント
このコンフィギュレーションを選択したときにこのエンド
ポイントで送受信可能な最大パケットサイズ。
アイソクロナスエンドポイントの場合は、(マイクロ)フ
レームあたりのデータペイロードに必要となるバス時
間を、この値でスケジュールに予約します。パイプで実
際に使用される帯域幅(継続ベース)は、予約した帯
域幅より少ない場合があります。実際に使用した帯域
幅は、デバイスから通常の非 USB 定義のメカニズム
を介して必要に応じて報告されます。
すべてのエンドポイントについて、ビット 10~0 で最大
パケットサイズを指定します。
高速アイソクロナスおよびインタラプトのエンド
ポイントの場合は:
ビット 12~11 では、マイクロフレームあたりの
追加トランザクション機会数を指定します。
00 = なし(1 トランザクション/マイクロフレー
ム)
01 = 1 additional (2 per microframe)
10 = 2 つ追加(3/マイクロフレーム)
11 = 予約
ビット 15~13 は予約済みで、0 に設定する必要があり
ます。
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 の範囲内である必要があります。
参
考
資
料
6
USBX では USB エンドポイント記述子を次のように定義します。
typedef struct UX_ENDPOINT_DESCRIPTOR_STRUCT
{
UINT
bLength;
UINT
UINT
UINT
USHORT
UINT
bDescriptorType;
bEndpointAddress;
bmAttributes;
wMaxPacketSize;
bInterval;
} UX_ENDPOINT_DESCRIPTOR;
USB エンドポイント記述子は、以下のエンドポイントコンテナの一部となっています。
typedef struct UX_ENDPOINT_STRUCT
{
ULONG
ULONG
VOID
struct
struct
struct
struct
struct
UX_ENDPOINT_DESCRIPTOR_STRUCT
UX_ENDPOINT_STRUCT
UX_INTERFACE_STRUCT
UX_DEVICE_STRUCT
UX_TRANSFER REQUEST_STRUCT
ux_endpoint_handle;
ux_endpoint_state;
*ux_endpoint_ed;
ux_endpoint_descriptor;
*ux_endpoint_next_endpoint;
*ux_endpoint_interface;
*ux_endpoint_device;
ux_endpoint_transfer request;
} UX_ENDPOINT;
変数の説明
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 転送要求
参
考
資
料
Variable Name
ストリング記述子
ストリング記述子はオプションです。デバイスでストリング記述子をサポートしていない場合は、デバ
イス記述子、コンフィギュレーション記述子、インタフェース記述子にそれぞれ含まれるストリング記
述子への参照は、すべて 0 にリセットする必要があります。
ストリング記述子では UNICODE エンコーディングを使用します。これにより、いくつかの文字セット
をサポートすることができます。USB デバイス内のストリングは、複数の言語のサポートが可能です。
ストリング記述子を要求するときにリクエスタは、USB-IF で定義されている言語を使用して目的の言
語を指定します。現在定義されている USB LANGID のリストを、USBX の附属書??に載せてありま
す。すべての言語に対してストリングインデックスをゼロにすると、デバイスでサポートしている 2 バイ
トの LANGID コードの配列を含むストリング記述子が返ります。なお、UNICODE ストリングは 0 では
終わりません。代わりに、記述子の先頭バイトに含まれる配列のサイズから 2 を差し引いてストリン
グ配列のサイズが計算されます。
USB ストリング記述子 0 は、次のようにエンコードされます。
オフセット フィールド
サイズ
値
説明
0
bLength
1
N+2
この記述子のサイズ(単位、バイト)
1
bDescriptorType
1
定数
ストリング記述子の型。
2
wLANGID[0]
2
数値
LANGID コード 0
..
N
…]
wLANGID[n]
..
2
…
LANGID コード n
参
考
資
料
数値
…
その他の USB ストリング記述子は、次のようにエンコードされます。
オフセット
フィールド
サイズ
値
説明
0
bLength
1
数値
この記述子のサイズ(単位、バイト)
1
bDescriptorType
1
定数
ストリング記述子の型。
2
bString
N
数値
UNICODE エンコードストリング
USBX では、非ゼロ長の USB ストリング記述子を次のように定義します。
UINT
USHORT
bDescriptorType;
ファンクショナル記述子
資
bString[1];
} UX_STRING_DESCRIPTOR;
料
typedef struct UX_STRING_DESCRIPTOR_STRUCT
{
UINT
bLength;
参
考
ファンクション記述子は、クラス固有記述子とも呼ばれます。この記述子は通常、ジェネリック記述子
と同じ基本構造を用い、追加の情報がクラスで使用できるようになります。例えば USB オーディオス
ピーカの場合では、オーディオクラスがクラス固有記述子を使用することで、サポートされるオーディ
オ周波数の種類を代替設定ごとに取得することができます。
メモリ内の USBX デバイス記述子フレームワーク
USBX では、ほとんどのデバイス記述子、すなわちストリング記述子とファンクション記述子を除くす
べての記述子が、メモリに保持されます。次の図に、各記述子がどのように保存され、互いにどのよ
うに関係するかを示します。
デバイス
デバイ
スコンテナ
コンテナ
デバイス
コンテナ
デバイス
デバイス
記述子
記述子
デバイス
記述子
コンフィギュ
コンフィギュ
レーション
レーション
コンテナ
コンテナ
コンフィギュ
レーション
コンテナ
コンフィギュ
コンフィギュ
レーション
レーション
記述子
記述子
料
コンフィギュ
レーション
記述子
インタフェース
コンテナ
(代替設定 0)
インタ
インタフェース
フェース
コンテナ
コンテナ
参
考
インタフェース
記述子
資
インタフェース
コンテナ
(代替設定 1)
エンドポイント
コンテナ
エンドポイント
コンテナ
エンドポイント
記述子
エンドポイント
記述子
インタ
インタフェース
フェース
記述子
記述子
エンドポイント
コンテナ
エンドポイント
コンテナ
エンドポイント
記述子
エンドポイント
記述子
参
考
資
料
第 4 章 USBX ホストサービスの説明
ux_host_stack_initialize
ホスト操作用に USBX を初期化
プロトタイプ
UINT
ux_host_stack_initialize(UINT (*system_change_function)
(ULONG, UX_HOST_CLASS *))
説明
料
USB ホストスタックを初期化するファンクションです。与えられたメモリ領域が USBX 内部で
の使用用にセットアップされます。UX_SUCCESS が返されたら、USBX はホストコントローラ
とクラスの登録が可能になります。
入力パラメータ
アプリケーションにデバイスの変更を通知するため
のオプションのコールバックルーチンへのポインタ
返却値
UX_SUCCESS
参
考
Example
(0x00)
資
system_change_function
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.*/
ux_host_stack_endpoint_transfer_abort
エンドポイントへの転送要求にアタッチされているすべてのトランザクションをアボート
プロトタイプ
UINT
ux_host_stack_endpoint_transfer_abort(UX_ENDPOINT *endpoint)
説明
料
エンドポイントにアタッチされている特定の転送要求に関し、すべてのトランザクションを(アク
ティブか保留中かにかかわりなく)取り消すファンクションです。転送要求にコールバックファ
ンクションがアタッチされているときは、UX_TRANSACTION_ABORTED ステータスでコー
ルバックファンクションがコールされます。
入力パラメータ
エンドポイントへのポインタ
返却値
UX_SUCCESS
資
endpoint
(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 */
ux_host_stack_class_get
クラスコンテナへのポインタを取得
プロトタイプ
UINT
ux_host_stack_class_get(UCHAR *class_name, UX_HOST_CLASS **class)
説明
クラスコンテナへのポインタを返すファンクションです。クラスまたはアプリケーションでデバイ
スをオープンしようとするときに、クラスでは、インスタンスを検索するために USB スタックか
らクラスのコンテナを取得する必要があります。
料
パラメータ
Pointer to the class name.
class
クラスの名前に関し、クラスコンテナを記述したファ
ンクションコールにより更新されたポインタ
返却値
参
考
UX_SUCCESS
資
class_name
UX_HOST_CLASS_UNKNOWN
例
UX_HOST_CLASS
UINT
(0x00)
エラーなし。返却時に、クラスフィールドが
クラスコンテナへのポインタとともにファイ
ル化されます。
(0x59)
スタックにとって不明のクラスです。
*printer_container;
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 */
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
返却値
参
考
class_entry_address
資
パラメータ
クラス名へのポインタについては、USBX の USB ク
ラスの下にあるファイル ux_system_initialize.c に有
効なエントリが見つかります。
クラスのエントリファンクションのアドレス
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.*/
ux_host_stack_class_instance_create
クラスコンテナに新しいクラスインスタンスを作成
プロトタイプ
UINT
ux_host_stack_class_instance_create(UX_HOST_CLASS *class,
VOID *class_instance)
説明
料
クラスコンテナに新しいクラスインスタンスを作成するファンクションです。クラスの複雑さを軽
減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、メインス
タックにあるクラスコンテナに各クラスがアタッチされています。
パラメータ
クラスコンテナへのポインタ
class_instance
作成するクラスインスタンスへのポインタ
返却値
(0x00)
クラスインスタンスがクラスコンテナにアタッチされま
した。
参
考
UX_SUCCESS
資
class
Example
UINT
UX_HOST_CLASS_PRINTER
status;
*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.*/
ux_host_stack_class_instance_destroy
クラスコンテナのクラスインスタンスを破棄
プロトタイプ
UINT
ux_host_stack_class_instance_destroy(UX_HOST_CLASS *class,
VOID *class_instance);
説明
クラスコンテナのクラスインスタンスを破棄するファンクションです。
料
パラメータ
class
クラスコンテナへのポインタ
class_instance
破棄するインスタンスへのポインタ
(0x00)
クラスインスタンスが破棄されま
した。.
UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b)
クラスインスタンスがクラスコンテ
ナにアタッチされていません。
参
考
UX_SUCCESS
例
資
返却値
UINT
UX_HOST_CLASS_PRINTER
status;
*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.*/
ux_host_stack_class_instance_get
特定のクラスへのクラスインスタンスポインタを取得
プロトタイプ
UINT
ux_host_stack_class_instance_get(UX_HOST_CLASS *class,
UINT class_index,
VOID **class_instance)
説明
料
特定のクラスへのクラスインスタンスポインタを返すファンクションです。クラスの複雑さを軽
減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、クラスコ
ンテナに各クラスがアタッチされています。このファンクションは、クラスコンテナ内でクラスイ
ンスタンスを検索するために使用されます。
パラメータ
class_index
返却値
コンテナにアタッチされているクラスのリスト内で、
ファンクションコールが使用するインデックス
参
考
class_instance
クラスコンテナへのポインタ
資
class
ファンクションコールにより返されるインスタンスへの
ポインタ
(0x00)
クラスインスタンスが見つかりま
した。
UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b)
これ以上のクラスインスタンスは
クラスコンテナにアタッチされて
いません。
UX_SUCCESS
例
UINT
UX_HOST_CLASS_PRINTER
status;
*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.*/
ux_host_stack_device_configuration_get
コンフィギュレーションコンテナへのポインタを取得
プロトタイプ
UINT
ux_host_device_stack_configuration_get(UX_DEVICE *device,
UINT configuration_index,
UX_CONFIGURATION **configuration)
説明
料
デバイスハンドルとコンフィギュレーションインデックスに基づいて、コンフィギュレーションコン
テナを返すファンクションです。
パラメータ
要求されたコンフィギュレーションを所有するデバイ
スコンテナへのポインタ
configuration_index
検索対象のコンフィギュレーションのインデックス
返却値
例
返却対象のコンフィギュレーションコンテナへのポイ
ンタのアドレス
参
考
configuration
資
device
UX_SUCCESS
(0x00)
コンフィギュレーションが見つか
りました。
UX_DEVICE_HANDLE_UNKNOWN
(0x50)
デバイスコンテナが存在しません。
UX_CONFIGURATION_HANDLE_UNKNOWN (0x51)
インデックスのコンフィギュレー
ションハンドルが存在しません。
UINT
UX_HOST_CLASS_PRINTER
status;
*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.*/
ux_host_stack_device_configuration_select
デバイスに特定のコンフィギュレーションを選択
プロトタイプ
UINT
ux_host_stack_device_configuration_select
(UX_CONFIGURATION *configuration)
説明
料
デバイスに特定のコンフィギュレーションを選択するファンクションです。このコンフィギュレー
ションをデバイスに設定すると、デフォルトでは、各デバイスインタフェースとそれに関連する
代替設定 0 がデバイス上でアクティブになります。特定のインタフェースの設定をデバイスク
ラ ス や イ ン タ フ ェ ー ス ク ラ ス で 変 更 し よ う と す る 場 合 は 、
ux_host_stack_interface_setting_select サービスコールを発行する必要があります。
パラメータ
返却値
(0x00)
参
考
UX_SUCCESS
このサービスに対して有効にすべきコンフィギュレー
ションコンテナへのポインタ
資
configuration
コンフィギュレーションの選択に成功しました。
UX_CONFIGURATION_HANDLE_UNKNOWN
(0x51)
コンフィギュレーションハンドルが存在しません。
UX_OVER_CURRENT_CONDITION
(0x43)
このコンフィギュレーションに対してバス上に過電流
状態が存在します。
例
UINT
UX_HOST_CLASS_PRINTER
status;
*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.*/
/* 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.*/
ux_host_stack_device_get
デバイスコンテナへのポインタを取得
プロトタイプ
UINT
ux_host_stack_device_get(ULONG device_index, UX_DEVICE **device)
説明
料
デバイスコンテナを、デバイスのインデックスに基づいて返すファンクションです。デバイスイ
ンデックスは 0 で始まります。複数のコントローラを備えることも可能で、しかもバイトインデッ
クスでは不十分なため、インデックスが ULONG 型であることに注意してください。また、デバ
イスインデックスは、バス固有のデバイスアドレスとは異なります。
パラメータ
デバイスのインデックス
device
返却対象のデバイスコンテナへのポインタのアドレス
返却値
UX_SUCCESS
資
device_index
(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.*/
ux_host_stack_interface_endpoint_get
エンドポイントコンテナを取得
プロトタイプ
UINT
ux_host_stack_interface_endpoint_get(UX_INTERFACE *interface,
UINT endpoint_index,
UX_ENDPOINT **endpoint)
説明
料
インタフェースハンドルとエンドポイントインデックスに基づいて、エンドポイントコンテナを返
すファンクションです。エンドポイントの検索に先立ち、インタフェースの代替設定が選択され
ているか、またはデフォルト設定が使用されているものとします。
パラメータ
要求されたエンドポイントを含むインタフェースコンテ
ナへのポインタ
Endpoint_index
返却値
このインタフェースに入っているエンドポイントのイン
デックス
返却対象のエンドポイントコンテナのアドレス
参
考
endpoint
資
interface
UX_SUCCESS
(0x00)
エンドポイントコンテナが存在し、
返されました。
UX_INTERFACE_HANDLE_UNKNOWN
(0x52)
指定されたインタフェースが存在
しません。
UX_ENDPOINT_HANDLE_UNKNOWN
(0x53)
エンドポイントインデックスが存
在しません。
例
UINT
UX_HOST_CLASS_PRINTER
status;
*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)
{
/* 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)
}
参
考
資
料
}
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 コントローラを登録するファンクションです。このファンクションは主に、こ
のコントローラで使用しているメモリを割り当て、コントローラに初期化コマンドを渡します。
パラメータ
ホストコントローラに含まれていて、初期化を担うファ
ンクション。使用可能なコントローラエントリファンク
ションとして、次のものがあります。
ux_hcd_ehci_initialize
ux_hcd_ohci_initialize
ux_hcd_isp1161_initialize
参
考
hcd_function
ホストコントローラの名前使用可能なコントローラとし
て、次のものがあります。
"ux_hcd_ohci"
"ux_hcd_ehci"
"ux_hcd_isp1161"
資
hcd_name
UX_SUCCESS
(0x00)
コントローラが正しく初期化されました。
UX_MEMORY_INSUFFICIENT
(0x12)
このコントローラのためのメモリが不足し
ています。
UX_PORT_RESET_FAILED
(0x31)
コントローラのリセットに失敗しました。
UX_CONTROLLER_INIT_FAILED
(0x32)
コントローラが正しく初期化されませんで
した。
hcd_param1
hcd で使用している IO またはメモリリソース。
hcd_param2
ホストコントローラで使用している IRQ。
返却値
例
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.*/
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)
説明
料
コンフィギュレーションハンドル、インタフェースインデックス、および代替設定インデックスに
基づいて、インタフェースコンテナを返すファンクションです。
パラメータ
interface_index
参
考
alternate_setting_index
interface
返却値
インタフェースを所有するコンフィギュレーションコン
テナへのポインタ
資
configuration
検索対象のインデックス
インタフェースに含まれている、検索対象の代替
設定
返却対象のインタフェースコンテナポインタのアド
レス
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.*/
ux_host_stack_interface_setting_select
インタフェースの代替設定を選択
プロトタイプ
UINT
ux_host_stack_interface_setting_select(UX_INTERFACE *interface)
説明
料
選択したコンフィギュレーションに属するあるインタフェースについて、特定の代替設定を選
択するファンクションです。このファンクションは、デフォルトの代替設定から新しい設定に変
更するため、またはデフォルトの代替設定に戻すために使用します。
新しい代替設定を選択したときは、以前のエンドポイント特性が無効になるため、リロードが
必要になります。
入力パラメータ
返却値
参
考
UX_SUCCESS
選択対象の代替設定が入っているインタフェースコ
ンテナへのポインタ
資
interface
UX_INTERFACE_HANDLE_UNKNOWN
(0x00)
このインタフェースの代替設定が正
常に選択されました。
(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.*/
ux_host_stack_transfer_request_abort
保留中の転送要求をアボート
プロトタイプ
UINT
ux_host_stack_transfer_request_abort(UX_TRANSFER REQUEST
*transfer request)
説明
料
以前に提出されて保留中の転送要求をアボートするファンクションです。特定の転送要求の
み が 取 り 消 さ れ ま す 。 こ の フ ァ ン ク シ ョ ン の コ ー ル バ ッ ク に は 、 UX_TRANSFER
REQUEST_STATUS_ABORT ステータスが含まれます。
パラメータ
アボート対象の転送要求へのポインタ
返却値
例
(0x00)
参
考
UX_SUCCESS
資
transfer request
UINT
この転送要求に対する USB 転送が取り消されまし
た。
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.*/
ux_host_stack_transfer_request
USB 転送を要求
プロトタイプ
UINT
ux_host_stack_transfer_request(UX_TRANSFER REQUEST *transfer request)
説明
入力パラメータ
返却値
参
考
transfer_request
資
料
USB トランザクションを実行するファンクションです。転送要求の入力時に、このトランザク
ション用に選択されたエンドポイントパイプと、転送に関連するパラメータ(データペイロード、
トランザクション長)が指定されます。制御パイプでは、トランザクションはブロッキングになり
ます。制御転送の 3 つのフェーズが完了したとき、または以前のエラーがある場合に限り、ト
ランザクションが返ります。その他のパイプでは、USB スタックが USB 上でのトランザクション
をスケジュールしますが、そのトランザクションの完了を待つことはありません。非ブロッキン
グパイプでの転送要求では、各々に完了ルーチンハンドラを指定しなければなりません。
ファンクションコールが返るときに、転送要求のステータスにトランザクションの結果が含まれ
ているため、このステータスを調べることが望まれます。
転送要求へのポインタ。転送要求には、転送に必要
なすべての情報が含まれます。
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;
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.*/
第 5 章 USBX ホストクラスの API
この章では、USBX クラスの API として公開されているすべての API を説明します。各クラスについ
て、以下の API について詳述します。
プリンタクラス
HID クラス
オーディオクラス
Asix クラス
CDC-ACM クラス
Pima/PTP クラス
料
Prolific クラス
ストレージクラス
参
考
資
ジェネリックシリアルクラス
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.*/
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)
説明
料
プリンタインタフェースに書き込むためのファンクションです。これはブロッキングコールであり、
エラーがあるときまたは転送が完了したときにのみ返されます。
パラメータ
プリンタクラスインスタンスへのポインタ
data_pointer
データペイロードのバッファアドレスへのポインタ
requested_length
actual_length
例
送信する長さ
実際に送信した長さ
参
考
返却値
資
printer
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.*/
ux_host_class_printer_soft_reset
プリンタにソフトリセットを実行
プロトタイプ
UINT
ux_host_class_printer_soft_reset(UX_HOST_CLASS_PRINTER *printer)
説明
プリンタにソフトリセットを実行するファンクションです。
入力パラメータ
プリンタクラスインスタンスへのポインタ
料
printer
返却値
UX_TRANSFER_TIMEOUT
例
status;
参
考
UINT
(0x00)
資
UX_SUCCESS
(0x5c)
リセットが完了しました。
転送タイムアウト。リセットは未完で
す。
/* The following example illustrates this service.*/ status =
ux_host_class_printer_soft_reset(printer);
/* If status equals UX_SUCCESS, the operation was successful.*/
ux_host_class_printer_status_get
プリンタステータスを取得
プロトタイプ
UINT
ux_host_class_printer_status_get(UX_HOST_CLASS_PRINTER *printer,
ULONG *printer_status)
説明
プリンタステータスを取得するファンクションです。プリンタステータスは、LPT ステータス
(1284 規格)に類似しています。
料
パラメータ
プリンタクラスインスタンスへのポインタ
printer_status
返却対象のステータスのアドレス
返却値
UX_SUCCESS
資
printer
参
考
UX_MEMORY_INSUFFICIENT
UX_TRANSFER_TIMEOUT
例
UINT
(0x00)
リセットが完了しました。
(0x12)
操作を実行するためのメモリが不足
しています。
(0x5c)
転送タイムアウト。リセットは未完で
す。
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.*/
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)
説明
料
オーディオインタフェースから読み出すためのファンクションです。これは非ブロッキングコー
ルです。オーディオストリーミングインタフェース用に適切な代替設定が選択されていることを、
アプリケーションで確実にする必要があります。
パラメータ
返却値
参
考
UX_SUCCESS
UX_FUNCTION_NOT_SUPPORTED
例
オーディオクラスインスタンスへのポインタ
audio_transfer_request
オーディオ転送構
造へのポインタ
資
audio
(0x00)
データ転送が完了しました。
(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.*/
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_transfer_request
オーディオ転送構造へのポインタ
返却値
UX_SUCCESS
資
audio
参
考
UX_FUNCTION_NOT_SUPPORTED
(0x00) データ転送が完了しまし
た。
(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.*/
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
資
返却値
参
考
UX_FUNCTION_NOT_SUPPORTED
UX_HOST_CLASS_AUDIO_WRONG_INTERFACE
例
UINT
(0x00) データ転送が完了しま
した。
(0x54) ファンクションがサポー
トされていません。
(0x81) インタフェースが不正で
す。
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.*/
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_control
オーディオ制御構造へのポインタ
料
audio
UX_FUNCTION_NOT_SUPPORTED
(0x54) ファンクションがサポー
トされていません。
(0x81) インタフェースが不正で
す。
UX_HOST_CLASS_AUDIO_WRONG_INTERFACE
例
(0x00) データ転送が完了しま
した。
参
考
UX_SUCCESS
資
返却値
/* The following example sets the volume control of a stereo USB speaker.*/
UX_HOST_CLASS_AUDIO_CONTROL
UINT
status;
audio_control;
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.*/
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_sampling
オーディオサンプリング構造へのポインタ
返却値
UX_SUCCESS
資
audio
参
考
UX_FUNCTION_NOT_SUPPORTED
(0x00) データ転送が完了しまし
た。
(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.*/
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
返却値
オーディオクラスインスタンスへのポインタ
資
パラメータ
オーディオサンプリング構造へのポインタ
(0x00)
データ転送が完了しま
した。
UX_FUNCTION_NOT_SUPPORTED
(0x54)
ファンクションがサ
ポートされていませ
ん。
UX_HOST_CLASS_AUDIO_WRONG_INTERFACE
(0x81)
インタフェースが不正
です。
UX_NO_ALTERNATE_SETTING
(0x5e)
サンプリング値用の代
替設定がありません。
参
考
UX_SUCCESS
例
/* The following example gets the sampling values for the first alternate
setting interface of a stereo USB speaker.*/
UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS
status;
UINT
audio_sampling;
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;
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);
参
考
資
料
*/
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 クライアント名へのポインタ
hid_client_handler
HID クライアントハンドラへのポインタ
返却値
参
考
UX_SUCCESS
資
hid_client_name
UX_FUNCTION_NOT_SUPPORTED
(0x00) データ転送が完了しました。
(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.*/
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 クラスインスタンスへのポインタ
call_back
コールバック構造へのポインタ
返却値
UX_SUCCESS
資
hid
参
考
UX_FUNCTION_NOT_SUPPORTED
UX_HOST_CLASS_HID_REPORT_ERROR
例
UINT
(0x00)
データ転送が完了しました。
(0x54)
ファンクションがサポートされて
いません。
(0x79)
レポートコールバック登録時に
エラーが発生しました。
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.*/
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 クラスインスタンスへのポインタ
返却値
UX_SUCCESS
資
hid
参
考
UX_FUNCTION_NOT_SUPPORTED
(0x00) 転送が完了しました。
(0x54) ファンクションがサポートさ
れていません。.
UX_HOST_CLASS_HID_PERIODIC_REPORT_ERROR (0x7A) 周期的レポート内でエラー
が発生しました。
UX_HOST_CLASS_INSTANCE_UNKNOWN
例
UINT
(0x5b) HID クラスインスタンスが
存在しません。
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.*/
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 クラスインスタンスへのポインタ
返却値
UX_SUCCESS
資
hid
参
考
UX_FUNCTION_NOT_SUPPORTED
(0x00) 転 送 が 完 了 し ま し
た。
(0x54) フ ァ ン ク シ ョ ン が サ
ポー トされてい ませ
ん。.
UX_HOST_CLASS_HID_PERIODIC_REPORT_ERROR (0x7A) 周期的レポート内で
エラーが発生しまし
た
UX_HOST_CLASS_INSTANCE_UNKNOWN
例
UINT
(0x5b) HID クラスインスタン
スが存在しません。
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.*/
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 クラスインスタンスへのポインタ
client_report
HID クライアントレポートへのポインタ
返却値
UX_SUCCESS
資
hid
(0x00) データ転送が完了しました。
(0x54) ファンクションがサポートされて
いません。
UX_HOST_CLASS_HID_REPORT_ERROR
(0x70) 周期的レポート内でエラーが発
生しました。
参
考
UX_FUNCTION_NOT_SUPPORTED
UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b) HID クラスインスタンスが存在し
ません。
UX_BUFFER_OVERFLOW
(0x5d) 提供されたバッファは、未圧縮の
レポートを収容する大きさがあり
ません。
例
UX_HOST_CLASS_HID_CLIENT_REPORT
UINT status;
input_report;
/* 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.*/
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) データ転送が完了しました。
(0x54) ファンクションがサポートされて
いません。
UX_HOST_CLASS_HID_REPORT_ERROR
(0x70) 周期的レポート内でエラーが発
生しました。
参
考
UX_FUNCTION_NOT_SUPPORTED
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.*/
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 インタフェースから読み出すためのファンクションです。これはブロッキングコールであり、
エラーがあるときまたは転送が完了したときにのみ返されます。
クラスインスタンスへのポインタ
data_pointer
データペイロードのバッファアドレスへのポインタ
requested_length
受信する長さ
返却値
参
考
UX_SUCCESS
資
Asix
actual_length
UX_TRANSFER_TIMEOUT
例
料
パラメータ
UINT
実際に受信した長さ
(0x00) データ転送が完了しました。
(0x5c) 転送タイムアウト。読み出しは未完です。
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.*/
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 インタフェースに書き込むためのファンクションです。これはブロッキングコールであり、
エラーがあるときまたは転送が完了したときにのみ返されます。
クラスインスタンスへのポインタ
data_pointer
データペイロードのバッファアドレスへのポインタ
requested_length
送信する長さ
返却値
参
考
UX_SUCCESS
資
Asix
actual_length
UX_TRANSFER_TIMEOUT
例
料
パラメータ
UINT
実際に送信した長さ
(0x00)
データ転送が完了しました。
(0x5c)
転送タイムアウト。書き込みは未完です。
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.*/
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 インスタンスへのポインタ。
data_pointer
データペイロードのバッファアドレスへのポインタ
requested_length
受信する長さ
返却値
参
考
UX_SUCCESS
資
cdc_acm
actual_length
UX_TRANSFER_TIMEOUT
例
料
パラメータ
UINT
実際に受信した長さ
(0x00)
データ転送が完了しました。
(0x5c)
転送タイムアウト。読み出しは未完です。
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.*/
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 インスタンスへのポインタ。
data_pointer
データペイロードのバッファアドレスへのポインタ
requested_length
返却値
例
参
考
actual_length
資
cdc_acm
送信する長さ
実際に送信した長さ
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.*/
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 インスタンスへのポインタ。
ioctl_function
実行対象の ioctl ファンクション。許容される ioctl ファ
ンクションは、下の表の中のいずれかです。
parameter
参
考
返却値
資
cdc_acm
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
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.*/
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_session
PIMA セッションへのポインタ
返却値
UX_SUCCESS
資
pima
(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);
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_session
PIMA セッションへのポインタ
返却値
UX_SUCCESS
資
pima
(0x00)
セッションがクローズしました。
例
参
考
UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN
(0x2003) セッションがオープンしていません。
/* Close the pima session. */
status = ux_host_class_pima_session_close(pima, pima_session);
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_session
PIMA セッションへのポインタ
storage_ids_array
storage_id_length
参
考
返却値
資
pima
UX_SUCCESS
返されるストレージ ID の配列
ストレージ配列の長さ
(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);
}
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_session
PIMA セッションへのポインタ
storage_id
storage
参
考
返却値
資
pima
UX_SUCCESS
ストレージコンテナの ID
ストレージ情報コンテナへのポインタ
(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);
}
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 セッションへのポインタ
ストレージコンテナの ID
storage_id
参
考
object_format_code
オブジェクトフォーマットコードフィルタ
object_format_code には、次のいずれかの値を設定できます。
オブジェクト
フォーマット
コード
0x3000
0x3001
0x3002
0x3003
0x3004
0x3005
0x3006
説明//グループ名
Undefined: 未定義の非イメー
ジオブジェクト
Association: アソシエーション
(例: フォルダ)
Script: デバイスモデル固有の
スクリプト
Executable: デバイスモデル
固有のバイナリ実行形式
Text: テキストファイル
HTML: HyperText Markup
Language ファイル(テキスト)
DPOF: Digital Print Order
Format ファイル(テキスト)
USBX コード
UX_HOST_CLASS_PIMA_OFC_UNDEFINED
UX_HOST_CLASS_PIMA_OFC_ASSOCIATION
UX_HOST_CLASS_PIMA_OFC_SCRIPT
UX_HOST_CLASS_PIMA_OFC_EXECUTABLE
UX_HOST_CLASS_PIMA_OFC_TEXT
UX_HOST_CLASS_PIMA_OFC_HTML
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
0x300A
AVI ビデオクリップ
UX_HOST_CLASS_PIMA_OFC_AVI
0x300B
MPEG ビデオクリップ
UX_HOST_CLASS_PIMA_OFC_MPEG
0x3801
0x3802
0x3803
0x3804
0x3805
0x3806
0x3807
0x3808
GIF: Graphics Interchange
Format
JFIF: JPEG File
Interchange Format
PCD: PhotoCD Image Pac
参
考
0x3809
Undefined Reserved
0x380A
0x380B
UX_HOST_CLASS_PIMA_OFC_ASF
UX_HOST_CLASS_PIMA_OFC_QT
UX_HOST_CLASS_PIMA_OFC_EXIF_JPEG
UX_HOST_CLASS_PIMA_OFC_TIFF_EP
UX_HOST_CLASS_PIMA_OFC_FLASHPIX
料
0x3800
ASF: Microsoft Advanced
Streaming Format(ビデオ)
Undefined: 未定のイメージオ
ブジェクト
EXIF/JPEG:
Exchangeable File Format
(JEIDA 規格)
TIFF/EP: Tag Image File
Format for Electronic
Photography
FlashPix: 構造化ストレージイ
メージフォーマット
BMP: Microsoft Windows
Bitmap ファイル
CIFF: Canon Camera Image
File Format
UX_HOST_CLASS_PIMA_OFC_BMP
UX_HOST_CLASS_PIMA_OFC_CIFF
資
0x300C
PICT: Quickdraw Image
Format
PNG: Portable Network
Graphics
UX_HOST_CLASS_PIMA_OFC_GIF
UX_HOST_CLASS_PIMA_OFC_JFIF
UX_HOST_CLASS_PIMA_OFC_PCD
UX_HOST_CLASS_PIMA_OFC_PICT
UX_HOST_CLASS_PIMA_OFC_PNG
0x380C
Undefined Reserved
0x380D
TIFF: Tag Image File Format UX_HOST_CLASS_PIMA_OFC_TIFF
0x380E
0x380F
0x3810
TIFF/IT: Tag Image File
Format for Information
UX_HOST_CLASS_PIMA_OFC_TIFF_IT
Technology(グラフィックアー
ト)
JP2: JPEG2000 Baseline File
UX_HOST_CLASS_PIMA_OFC_JP2
Format
JPX: JPEG2000
UX_HOST_CLASS_PIMA_OFC_JPX
Extended File Format
MSN が
0011 のその
他すべての 任意の未定義コード;将来使用
コード
MSN が
1011 のその 任意のベンダ定義コード
他すべての ベンダ定義タイプ: イメージ
コード
返却値
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 */
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_session
object_handes_array
object_handles_length
storage_id
object_format_code
資
パラメータ
object_handle_association
PIMA クラスインスタンスへのポインタ
PIMA セッションへのポインタ
返されるハンドルの配列
配列の長さ
ストレージコンテナの ID
オ ブ ジ ェ ク ト の フ ォ ー マ ッ ト コ ー ド
(ux_host_class_pima_num_objects_get ファンク
ションの項で示した表を参照)
オプションのオブジェクトアソシエーション値
オブジェクトハンドルアソシエーションとしては、下の表に示すいずれかの値が可能です。
0x0000
Undefined
AssociationDesc
解釈
Undefined
0x0001
GenericFolder
不使用
0x0002
Album
予約済み
0x0003
TimeSequence
DefaultPlaybackDelta
0x0004
HorizontalPanoramic
不使用
0x0005
VerticalPanoramic
不使用
0x0006
2DPanoramic
ImagesPerRow
アソシエーションコード
アソシエーションの種類
0x0007
AncillaryData
ビット 15 を 0 に設定し
Reserved
た、その他すべての値
ビット 15 を 1 に設定し
Vendor-Defined
た、すべての値
Undefined
Undefined
Vendor-Defined
返却値
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);
参
考
}
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_session
PIMA セッションへのポインタ
object_handles
object
参
考
返却値
資
pima
UX_SUCCESS
オブジェクトのハンドル
オブジェクト情報コンテナへのポインタ
(0x00)
転送が完了しました。
UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN
(0x2003) セッションがオープンしていません。
UX_MEMORY_INSUFFICIENT
(0x12)
PIMA コマンドを作成するためのメモ
リが不足しています。
例
料
/* 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 );
}
参
考
資
}
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_session
storage_id
参
考
parent_object_id
資
パラメータ
object
返却値
UX_SUCCESS
PIMA クラスインスタンスへのポインタ
PIMA セッションへのポインタ
格納先ストレージ ID
オブジェクトを置くところの、レスポンダの親オブジェ
クトハンドル
オブジェクト情報コンテナへのポインタ
(0x00)
転送が完了しました。
UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN
(0x2003) セッションがオープンしていません。
UX_MEMORY_INSUFFICIENT
(0x12)
PIMA コマンドを作成するためのメモ
リが不足しています。
例
/* 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 );
参
考
資
料
}
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_session
PIMA セッションへのポインタ
object_handles
object
参
考
返却値
資
pima
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);
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_session
object_handles
object
object_buffer
object_buffer_length
object_actual_length
資
pima
UX_SUCCESS
PIMA セッションへのポインタ
オブジェクトのハンドル
オブジェクト情報コンテナへのポインタ
オブジェクトデータのアドレス
要求されたオブジェクト長さ
返却対象のオブジェクトの長さ
(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)
オブジェクトの読み出し中に転送エ
ラーが発生しました。
例
/* 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);
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_session
PIMA セッションへのポインタ
object_handles
オブジェクトのハンドル
object
object_buffer
返却値
参
考
object_buffer_length
資
pima
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)
オブジェクトの書き込み中に転送エ
ラーが発生しました。
例
/* 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);
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_session
PIMA セッションへのポインタ
object_handles
object
thumb_buffer
参
考
thumb_buffer_length
資
pima
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)
オブジェクトの読み出し中に転送エ
ラーが発生しました。
例
/* 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);
参
考
資
料
}
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_session
PIMA セッションへのポインタ
object_handles
オブジェクトのハンドル
返却値
UX_SUCCESS
資
pima
(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);
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_session
PIMA セッションへのポインタ
object_handles
オブジェクトのハンドル
返却値
UX_SUCCESS
資
pima
(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);
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)
説明
料
ジェネリックシリアルインタフェースから読み出すためのファンクションです。これはブロッキン
グコールであり、エラーがあるときまたは転送が完了したときにのみ返されます。
パラメータ
クラスインスタンスへのポインタ
Interface_index
読み出し元のインタフェースインデックス
data_pointer
requested_length
返却値
例
参
考
actual_length
資
gser
データペイロードのバッファアドレスへのポインタ
受信する長さ
実際に受信した長さ
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.*/
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)
説明
料
ジェネリックシリアルインタフェースに書き込むためのファンクションです。これはブロッキング
コールであり、エラーがあるときまたは転送が完了したときにのみ返されます。
パラメータ
クラスインスタンスへのポインタ
interface_index
書き込み先のインタフェース
data_pointer
requested_length
返却値
例
参
考
actual_length
資
Gser
データペイロードのバッファアドレスへのポインタ
送信する長さ
実際に送信した長さ
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.*/
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 インタフェースに対して実行するファンクションです。これは
ブロッキングコールであり、エラーがあるときまたはコマンドが完了したときにのみ返されま
す。
パラメータ
クラスインスタンスへのポインタ
Interface_index
インタフェースインデックス
ioctl_function
返却値
参
考
parameter
資
Gser
実行対象の ioctl ファンクション。許容される ioctl ファ
ンクションは、下の表の中のいずれかです。
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
例
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.*/
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_reception
受信パラメータを含む構造
返却値
(0x00)
データ転送が完了しました。
UX_HOST_CLASS_UNKNOWN
(0x59)
クラスインスタンスが間違っています。
UX_ERROR
(0x01)
エラー
参
考
UX_SUCCESS
例
資
Gser
/* 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);
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_reception
受信パラメータを含む構造
料
Gser
返却値
データ転送が完了しました。
UX_HOST_CLASS_UNKNOWN
(0x59)
クラスインスタンスが間違っています。
UX_ERROR
(0x01)
エラー
参
考
例
資
(0x00)
UX_SUCCESS
/* Stops the reception for gser.*/
ux_host_class_gser_reception_stop(gser, &gser_reception);
第 6 章 USBX DPUMP クラスについて
USBX には、ホスト側用とデバイス側用の DPUMP クラスが含まれています。このクラスは、それ自
体が標準クラスではありませんが、2 つのバルクパイプを使用し、これらのパイプ上でデータのやりと
りをすることで、単純なデバイスを作成する方法を例示するものとなっています。DPUMP クラスを使
用すると、カスタムクラスやレガシーRS232 デバイスを起動するなどが可能です。
USB DPUMP のフローチャート
ホストアプリケーション
DPUMPホストクラス
USBホストスタック
USBデバイススタック
DPUMPデバイスクラススレッド
パケットを書く
パケットを待機
料
_ux_host_class_dpump_write
_ux_host_stack_transfer_request
_ux_device_stack_transfer_request
バルクアウト上で転送完了を待機
転送完了を待機
資
参
考
転送ステータスと
送信データ長を受信
パケットを受信
転送完了を待機
転送完了を待機
パケットを書く
_ux_device_stack_transfer_request
_ux_host_class_dpump_read
バルクアウト上でインパケットを待機
_ux_host_stack_transfer_request
転送完了を待機
送信ステータス、
データパケット、
受信データ長を受信
転送完了を待機
転送完了を待機
USBX DPUMP ホストクラス
DPUMP クラスのホスト側は、データの送信用、データの受信用の、2 つのファンクションを備えてい
ます。
ux_host_class_dpump_write
ux_host_class_dpump_read
どちらのファンクションも、DPUMP アプリケーションの簡易化のためにブロッキングファンクションと
なっています。IN パイプと OUT パイプを同時に実行させておく必要がある場合は、またアプリケー
ション側で送信スレッドと受信スレッドを作成する必要があります。
書き込み関数のプロトタイプは次の通りです。
ux_host_class_dpump_write(UX_HOST_CLASS_DPUMP *dpump,
UCHAR * data_pointer,
ULONG requested_length,
ULONG *actual_length)
料
UINT
資
ここで、
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';
*/
*/
/* 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);
参
考
資
料
}
USBX DPUMP デバイスクラス
参
考
資
料
デバイス DPUMP クラスでは、USB ホストとの接続後に起動されるスレットを使用します。このスレッ
ドは、バルクアウト・エンドポイントに着信するパケットを待機します。パケットを受信するとスレッドは、
その内容をバルクイン・エンドポイント・バッファにコピーし、このエンドポイントにトランザクションをポ
ストします。この状態で、このエンドポイントからの読み取りの要求をホストが発行するまで待機しま
す。こうして、バルクアウト・エンドポイントとバルクイン・エンドポイントの間にループバックメカニズム
が形成されます。
第 7 章 ピクトブリッジの実装
USBX は、ホストとデバイスの両側でピクトブリッジの完全実装をサポートします。どちらの側でも、ピ
クトブリッジは USBX PIMA クラスの上に載ります。
ピクトブリッジ規格では、デジタルスチルカメラやスマートフォンから PC を介さずに直接プリンタへの
接続を許容し、一定のピクトブリッジ対応プリンタへの直接印刷を可能にします。
カメラやスマートフォンをプリンタに接続したときに、プリンタが USB ホスト、カメラが USB デバイスで
す。しかしピクトブリッジでは、カメラがホストとして現れ、コマンドはカメラから駆動されます。カメラが
ストレージサーバであり、プリンタがストレージクライアントです。カメラがプリントクライアントであり、
当然にプリンタがプリントサーバです。
料
ピクトブリッジでは USB をトランスポートレイヤとして使用しますが、通信プロトコルとして PTP
(Picture Transfer Protocol)を使用します。
参
考
資
下の図に、プリントジョブが発生したときの、DPS クライアントと DPS サーバの間でのコマンドと応答
の様子を示します。
ストレージデバイス
ストレージサーバ
プリントサーバ
プリントクライアント
ストレージ
クライアント
プリントデバイス
DPS サービスディスカバリ
DPS_ConfigurePrintServices
DPS_GetCapabilities
アプリケーションが印刷開始
DPS_StartJob
DPS_GetFileInfo
DPS_GetFile
ファイルデータを取得
料
ファイルデータ
プリントデータ
資
DPS_NotifyDeviceStatus
ピクトブリッジクライアントの実装
参
考
クライアント側のピクトブリッジでは、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
};
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;
次のステップでは、デバイスとホストを同期させ、情報の交換に備えさせます。
そのために、次のようにイベントフラグを待機します。
/* 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;
/* 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
そのファンクションのプロトコルは、次のように定義されます。
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 クライアントがデータブロックを
取り込む必要が生じたときに、このファンクションがコールされます。
料
パラメータ
ピクトブリッジクラスインスタンスへのポインタ
object_buffer
オブジェクトバッファへのポインタ
object_offset
データブロックの読み出しを始める場所
資
pictbridge
返す長さ
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);
}
*/
ピクトブリッジホストの実装
ピクトブリッジのホスト実装は、クライアント実装とは異なります。
ピクトブリッジホスト環境において最初に行うことは、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 レイヤです。
ピクトブリッジのフィールド
料
次のステップは、プリントサービス用のピクトブリッジのデフォルト値を次のように初期化することで
す。
値
0x00010000
0x00010001
0x00000000
0x00010000
PrintServiceAvailable
0x30010000
参
考
資
DpsVersion[0]
DpsVersion[1]
DpsVersion[2]
VendorSpecificVersion
Qualities[0]
Qualities[1]
Qualities[2]
Qualities[3]
PaperSizes[0]
PaperSizes[1]
PaperSizes[2]
PaperSizes[3]
PaperSizes[4]
PaperTypes[0]
PaperTypes[1]
PaperTypes[2]
FileTypes[0]
FileTypes[1]
FileTypes[2]
FileTypes[3]
DatePrints[0]
DatePrints[1]
DatePrints[2]
FileNamePrints[0]
FileNamePrints[1]
FileNamePrints[2]
UX_PICTBRIDGE_QUALITIES_DEFAULT
UX_PICTBRIDGE_QUALITIES_NORMAL
UX_PICTBRIDGE_QUALITIES_DRAFT
UX_PICTBRIDGE_QUALITIES_FINE
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
UX_PICTBRIDGE_PAPER_TYPES_DEFAULT
UX_PICTBRIDGE_PAPER_TYPES_PLAIN
UX_PICTBRIDGE_PAPER_TYPES_PHOTO
UX_PICTBRIDGE_FILE_TYPES_DEFAULT
UX_PICTBRIDGE_FILE_TYPES_EXIF_JPEG
UX_PICTBRIDGE_FILE_TYPES_JFIF
UX_PICTBRIDGE_FILE_TYPES_DPOF
UX_PICTBRIDGE_DATE_PRINTS_DEFAULT
UX_PICTBRIDGE_DATE_PRINTS_OFF
UX_PICTBRIDGE_DATE_PRINTS_ON
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
ピクトブリッジのフィールド
UX_PICTBRIDGE_IMAGE_OPTIMIZES_OFF
UX_PICTBRIDGE_IMAGE_OPTIMIZES_ON
UX_PICTBRIDGE_LAYOUTS_DEFAULT
UX_PICTBRIDGE_LAYOUTS_1_UP_BORDER
UX_PICTBRIDGE_LAYOUTS_INDEX_PRINT
UX_PICTBRIDGE_LAYOUTS_1_UP_BORDERLESS
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
UX_PICTBRIDGE_CROPPINGS_DEFAULT
UX_PICTBRIDGE_CROPPINGS_OFF
UX_PICTBRIDGE_CROPPINGS_ON
料
ImageOptimizes[1]
ImageOptimizes[2]
Layouts[0]
Layouts[1]
Layouts[2]
Layouts[3]
FixedSizes[0]
FixedSizes[1]
FixedSizes[2]
FixedSizes[3]
FixedSizes[4]
FixedSizes[5]
FixedSizes[6]
Croppings[0]
Croppings[1]
Croppings[2]
値
資
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;
このファンクションは次のようなプロパティを持ちます。
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 クライアントからデータブロックを
取り組む必要が生じたときに、このファンクションがコールされます。
パラメータ
ピクトブリッジクラスインスタンスへのポインタ
object_buffer
オブジェクトバッファへのポインタ
資
pictbridge
データブロックの読み出しを始める場所
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);
}
*/
第 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 機能を格納しています。
VBUS 固有ファンクション
コントローラの起動と停止
USB ロールマネージャ
インタラプトハンドラ
参
考
•
•
•
•
資
通常のホスト/デバイスのファンクションに加え、OTG コントローラ対応ファンクションには次の 4 種
類があります。
VBUS ファンクション
電力管理要件に基づいて VBUS のステートを変更するために、各コントローラは VBUS マネージャ
を搭載する必要があります。このファンクションは通常、VBUS のオン/オフ切り替えのみを実行しま
す。
コントローラの起動と停止
通常の USB 実装とは異なり、OTG ではロールを変更するときに、ホストスタックとデバイススタック
(またはそのいずれか)をアクティブ/非アクティブ化する必要があります。
USB ロールマネージャ
USB ロールマネージャは、USB のステートを変更するためのコマンドを受信します。遷移を必要とす
るステートが、次のようにいくつかあります。
説明//グループ名
デバイスはアイドル。通常は、何にも接続していない。
デバイスがタイプ A コネクタに接続している。
デバイスがタイプ B コネクタに接続している。
ホストデバイスが切断された。
ホストからスレーブへのロール切り替え
スレーブデバイスが切断している
スレーブからへホストのロール切り替え
料
値
0
1
2
3
4
5
6
資
ステート
UX_OTG_IDLE
UX_OTG_IDLE_TO_HOST
UX_OTG_IDLE_TO_SLAVE
UX_OTG_HOST_TO_IDLE
UX_OTG_HOST_TO_SLAVE
UX_OTG_SLAVE_TO_IDLE
UX_OTG_SLAVE_TO_HOST
参
考
インタラプトハンドラ
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);
}
渡されるモード値としては、以下の値が可能です。
•
•
•
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;
インデックス
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
コントローラレイヤ ......................................... 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
資
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
コールバック ................. 5, 48, 49, 87, 88, 131,
141, 144, 147, 148
料
Asix クラス .................................................. 72
参
考
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
送信スレッド .............................................. 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
料
資
参
考
USBXTM Host Stack ユーザーズマニュアル(参考資料)
発行年月日 2016 年 9 月 2 日 Rev.5.70
発行 ルネサス エレクトロニクス株式会社
〒 135-0061 東京都江東区豊洲 3-2-24(豊洲フォレシア)
http://www.renesas.com
‫ڦ‬Ⴀᴗ࠾ၥྜࡏ❆ཱྀ
ͤႠᴗ࠾ၥྜࡏ❆ཱྀࡢఫᡤࡣኚ᭦࡟࡞ࡿࡇ࡜ࡀ࠶ࡾࡲࡍࠋ᭱᪂᝟ሗ࡟ࡘࡁࡲࡋ࡚ࡣࠊᘢ♫࣮࣒࣮࣍࣌ࢪࢆࡈぴࡃࡔࡉ࠸ࠋ
ࣝࢿࢧࢫ ࢚ࣞࢡࢺࣟࢽࢡࢫᰴᘧ఍♫ࠛ135-0061ᮾி㒔Ụᮾ༊㇏Ὢ3-2-24㸦㇏Ὢࣇ࢛ࣞࢩ࢔㸧
‫ڦ‬ᢏ⾡ⓗ࡞࠾ၥྜࡏ࠾ࡼࡧ㈨ᩱࡢࡈㄳồࡣୗグ࡬࡝࠺ࡒࠋ
ࠉ⥲ྜ࠾ၥྜࡏ❆ཱྀ㸸http://japan.renesas.com/contact/
© 2016 Renesas Electronics Corporation. All rights reserved.
Colophon 3.0
USBXTM Host Stack ユーザーズマニュアル
(参考資料)
R11UM0008JU0570
Fly UP