ux_host_stack_initialize
ホスト操作用に
USBX
を初期化 プロトタイプUINT ux_host_stack_initialize(UINT (*system_change_function) (ULONG, UX_HOST_CLASS *))
説明
USB
ホストスタックを初期化するファンクションです。与えられたメモリ領域がUSBX
内部で の使用用にセットアップされます。UX_SUCCESSが返されたら、USBXはホストコントローラ とクラスの登録が可能になります。入力パラメータ
system_change_function
アプリケーションにデバイスの変更を通知するため のオプションのコールバックルーチンへのポインタ 返却値UX_SUCCESS (0x00)
初期化成功。Example
UINT status;
/* Initialize USBX for host operation, without notification. */
status = ux_host_stack_initialize(UX_NULL);
/* If status equals UX_SUCCESS, USBX has been successfully initialized for host operation.*/
ux_host_stack_endpoint_transfer_abort
エンドポイントへの転送要求にアタッチされているすべてのトランザクションをアボート プロトタイプ
UINT ux_host_stack_endpoint_transfer_abort(UX_ENDPOINT *endpoint)
説明
エンドポイントにアタッチされている特定の転送要求に関し、すべてのトランザクションを(アク ティブか保留中かにかかわりなく)取り消すファンクションです。転送要求にコールバックファ ンクションがアタッチされているときは、
UX_TRANSACTION_ABORTED
ステータスでコー ルバックファンクションがコールされます。入力パラメータ
endpoint
エンドポイントへのポインタ返却値
UX_SUCCESS (0x00)
エラーなし。UX_ENDPOINT_HANDLE_UNKNOWN (0x53)
エンドポイントハンドルが無効です。
例
UX_HOST_CLASS_PRINTER *printer;
UINT status;
/* Get the instance for this class.*/
printer =
(UX_HOST_CLASS_PRINTER *) command -> ux_host_class_command_instance;
/* The printer is being shut down.*/
printer -> printer_state = UX_HOST_CLASS_INSTANCE_SHUTDOWN;
/* We need to abort transactions on the bulk out pipe.*/
status = ux_host_stack_endpoint_transfer_abort
(printer -> printer_bulk_out_endpoint);
/* If status equals UX_SUCCESS, the operation was successful */
ux_host_stack_class_get
クラスコンテナへのポインタを取得 プロトタイプ
UINT ux_host_stack_class_get(UCHAR *class_name, UX_HOST_CLASS **class)
説明
クラスコンテナへのポインタを返すファンクションです。クラスまたはアプリケーションでデバイ スをオープンしようとするときに、クラスでは、インスタンスを検索するために
USB
スタックか らクラスのコンテナを取得する必要があります。パラメータ
class_name Pointer to the class name.
class
クラスの名前に関し、クラスコンテナを記述したファンクションコールにより更新されたポインタ 返却値
UX_SUCCESS (0x00)
エラーなし。返却時に、クラスフィールドがクラスコンテナへのポインタとともにファイ ル化されます。
UX_HOST_CLASS_UNKNOWN (0x59)
スタックにとって不明のクラスです。例
UX_HOST_CLASS *printer_container;
UINT status;
/* Get the container for this class. */
status = ux_host_stack_class_get("ux_host_class_printer",
&printer_container);
/* If status equals UX_SUCCESS, the operation was successful */
ux_host_stack_class_register
USB
スタックにUSB
クラスを登録 プロトタイプUINT ux_host_stack_class_register(CHAR_PTR class_name,
UINT (*class_entry_address)
(struct UX_HOST_CLASS_COMMAND_STRUCT *))
説明
USB
スタックにUSB
クラスを登録するファンクションです。以下のようなコマンドを送信するた めには、クラスはUSB
スタックへのエントリポイントを指定する必要があります。UX_HOST_CLASS_COMMAND_QUERY UX_HOST_CLASS_COMMAND_ACTIVATE UX_HOST_CLASS_COMMAND_DESTROY
パラメータclass_name
クラス名へのポインタについては、USBXのUSB
クラスの下にあるファイル
ux_system_initialize.c
に有 効なエントリが見つかります。class_entry_address
クラスのエントリファンクションのアドレス返却値
UX_SUCCESS (0x00)
クラスが正常にインストールされました。
UX_MEMORY_INSUFFICIENT (0x12)
このクラスを保存するためのメモリが不足しています。
UX_HOST_CLASS_ALREADY_INSTALLED (0x58)
ホストクラスは既にインストールされています。
例
UINT status;
/* Register all the classes for this implementation.*/
status = ux_host_stack_class_register("ux_host_class_hub", ux_host_class_hub_entry);
/* If status equals UX_SUCCESS, class was successfully installed.*/
ux_host_stack_class_instance_create
クラスコンテナに新しいクラスインスタンスを作成 プロトタイプ
UINT ux_host_stack_class_instance_create(UX_HOST_CLASS *class, VOID *class_instance)
説明
クラスコンテナに新しいクラスインスタンスを作成するファンクションです。クラスの複雑さを軽 減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、メインス タックにあるクラスコンテナに各クラスがアタッチされています。
パラメータ
class
クラスコンテナへのポインタclass_instance
作成するクラスインスタンスへのポインタ返却値
UX_SUCCESS (0x00)
クラスインスタンスがクラスコンテナにアタッチされま した。Example
UINT status;
UX_HOST_CLASS_PRINTER *printer;
/* Obtain memory for this class instance.*/
printer = ux_memory_allocate(UX_NO_ALIGN,
sizeof(UX_HOST_CLASS_PRINTER));
if (printer == UX_NULL)
return(UX_MEMORY_INSUFFICIENT);
/* Store the class container into this instance.*/ printer -> printer_class
= command -> ux_host_class;
/* Create this class instance. */
status = ux_host_stack_class_instance_create(printer -> printer_class, (VOID *)printer);
/* If status equals UX_SUCCESS, the class instance was successfully created and attached to the class container.*/
ux_host_stack_class_instance_destroy
クラスコンテナのクラスインスタンスを破棄 プロトタイプ
UINT ux_host_stack_class_instance_destroy(UX_HOST_CLASS *class, VOID *class_instance);
説明
クラスコンテナのクラスインスタンスを破棄するファンクションです。
パラメータ
class
クラスコンテナへのポインタclass_instance
破棄するインスタンスへのポインタ返却値
UX_SUCCESS (0x00)
クラスインスタンスが破棄されました。.
UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b)
クラスインスタンスがクラスコンテナにアタッチされていません。
例
UINT status;
UX_HOST_CLASS_PRINTER *printer;
/* Get the instance for this class. */
printer =
(UX_HOST_CLASS_PRINTER *) command -> ux_host_class_command_instance;
/* The printer is being shut down. */
printer -> printer_state = UX_HOST_CLASS_INSTANCE_SHUTDOWN;
/* Destroy the instance.*/
status = ux_host_stack_class_instance_destroy(printer -> printer_class, (VOID *) printer);
/* If status equals UX_SUCCESS, the class instance was successfully destroyed.*/
ux_host_stack_class_instance_get
特定のクラスへのクラスインスタンスポインタを取得 プロトタイプ
UINT ux_host_stack_class_instance_get(UX_HOST_CLASS *class, UINT class_index, VOID **class_instance)
説明
特定のクラスへのクラスインスタンスポインタを返すファンクションです。クラスの複雑さを軽 減するために、クラスのインスタンスはクラスコードには含まていません。代わりに、クラスコ ンテナに各クラスがアタッチされています。このファンクションは、クラスコンテナ内でクラスイ ンスタンスを検索するために使用されます。
パラメータ
class
クラスコンテナへのポインタclass_index
コンテナにアタッチされているクラスのリスト内で、ファンクションコールが使用するインデックス
class_instance
ファンクションコールにより返されるインスタンスへの ポインタ返却値
UX_SUCCESS (0x00)
クラスインスタンスが見つかりました。
UX_HOST_CLASS_INSTANCE_UNKNOWN (0x5b)
これ以上のクラスインスタンスはクラスコンテナにアタッチされて いません。
例
UINT status;
UX_HOST_CLASS_PRINTER *printer;
/* Obtain memory for this class instance.*/
printer = ux_memory_allocate(UX_NO_ALIGN,
sizeof(UX_HOST_CLASS_PRINTER));
if (printer == UX_NULL)
return(UX_MEMORY_INSUFFICIENT);
/* Search for instance index 2.*/
status = ux_host_stack_class_instance_get(class, 2, (VOID *) printer);
/* If status equals UX_SUCCESS, the class instance was found.*/
ux_host_stack_device_configuration_get
コンフィギュレーションコンテナへのポインタを取得 プロトタイプ
UINT ux_host_device_stack_configuration_get(UX_DEVICE *device,
UINT configuration_index,
UX_CONFIGURATION **configuration)
説明
デバイスハンドルとコンフィギュレーションインデックスに基づいて、コンフィギュレーションコン テナを返すファンクションです。
パラメータ
device
要求されたコンフィギュレーションを所有するデバイスコンテナへのポインタ
configuration_index
検索対象のコンフィギュレーションのインデックスconfiguration
返却対象のコンフィギュレーションコンテナへのポインタのアドレス 返却値
UX_SUCCESS (0x00)
コンフィギュレーションが見つかりました。
UX_DEVICE_HANDLE_UNKNOWN (0x50)
デバイスコンテナが存在しません。UX_CONFIGURATION_HANDLE_UNKNOWN (0x51)
インデックスのコンフィギュレーションハンドルが存在しません。
例
UINT status;
UX_HOST_CLASS_PRINTER *printer;
/* If the device has been configured already, we don't need to do it again.*/
if (printer -> printer_device -> ux_device_state ==
UX_DEVICE_CONFIGURED) return(UX_SUCCESS);
/* A printer normally has one configuration, retrieve 1st configuration only.*/
status = ux_host_stack_device_configuration_get(printer ->
printer_device, 0, configuration);
/* If status equals UX_SUCCESS, the configuration was found.*/
ux_host_stack_device_configuration_select
デバイスに特定のコンフィギュレーションを選択 プロトタイプ
UINT ux_host_stack_device_configuration_select
(UX_CONFIGURATION *configuration)
説明
デバイスに特定のコンフィギュレーションを選択するファンクションです。このコンフィギュレー ションをデバイスに設定すると、デフォルトでは、各デバイスインタフェースとそれに関連する 代替設定
0
がデバイス上でアクティブになります。特定のインタフェースの設定をデバイスク ラ ス や イ ン タ フ ェ ー ス ク ラ ス で 変 更 し よ う と す る 場 合 は 、ux_host_stack_interface_setting_select
サービスコールを発行する必要があります。パラメータ
configuration
このサービスに対して有効にすべきコンフィギュレーションコンテナへのポインタ 返却値
UX_SUCCESS (0x00)
コンフィギュレーションの選択に成功しました。UX_CONFIGURATION_HANDLE_UNKNOWN
(0x51)
コンフィギュレーションハンドルが存在しません。UX_OVER_CURRENT_CONDITION
(0x43)
このコンフィギュレーションに対してバス上に過電流状態が存在します。
例
UINT status;
UX_HOST_CLASS_PRINTER *printer;
/* If the device has been configured already, we don't need to do it again.*/
if (printer -> printer_device -> ux_device_state ==
UX_DEVICE_CONFIGURED) return(UX_SUCCESS);
/* A printer normally has one configuration - retrieve 1st configuration only.*/
status = ux_host_stack_device_configuration_get(printer ->
printer_device, 0,configuration);
/* If status equals UX_SUCCESS, the configuration selection was successful.*/
/* 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_index
デバイスのインデックスdevice
返却対象のデバイスコンテナへのポインタのアドレス返却値
UX_SUCCESS (0x00)
デバイスコンテナが存在し、返されました。UX_DEVICE_HANDLE_UNKNOWN (0x50)
デバイスが不明です。例
UINT status;
/* Locate the first device in USBX.*/
status = ux_host_stack_device_get(0, device);
/* If status equals UX_SUCCESS, the operation was successful.*/