• 検索結果がありません。

USBX

には、ホスト側用とデバイス側用の

DPUMP

クラスが含まれています。このクラスは、それ自 体が標準クラスではありませんが、2つのバルクパイプを使用し、これらのパイプ上でデータのやりと りをすることで、単純なデバイスを作成する方法を例示するものとなっています。

DPUMP

クラスを使 用すると、カスタムクラスやレガシーRS232デバイスを起動するなどが可能です。

USB DPUMP

のフローチャート

ホストアプリケーション DPUMPホストクラス USBホストスタック USBデバイススタック

パケットを書く

_ux_host_class_dpump_write

_ux_host_stack_transfer_request

転送完了を待機 転送完了を待機

転送ステータスと 送信データ長を受信

パケットを受信

_ux_host_class_dpump_read

_ux_host_stack_transfer_request

転送完了を待機

送信ステータス、

データパケット、

受信データ長を受信

転送完了を待機

_ux_device_stack_transfer_request バルクアウト上で転送完了を待機

DPUMPデバイスクラススレッド

パケットを待機

転送完了を待機

パケットを書く

転送完了を待機 _ux_device_stack_transfer_request

バルクアウト上でインパケットを待機

USBX DPUMP ホストクラス

DPUMP

クラスのホスト側は、データの送信用、データの受信用の、2 つのファンクションを備えてい

ます。

ux_host_class_dpump_write ux_host_class_dpump_read

どちらのファンクションも、DPUMP アプリケーションの簡易化のためにブロッキングファンクションと なっています。

IN

パイプと

OUT

パイプを同時に実行させておく必要がある場合は、またアプリケー ション側で送信スレッドと受信スレッドを作成する必要があります。

書き込み関数のプロトタイプは次の通りです。

UINT ux_host_class_dpump_write(UX_HOST_CLASS_DPUMP *dpump, UCHAR * data_pointer,

ULONG requested_length, ULONG *actual_length)

ここで、

dpump

は、クラスのインスタンス

data_pointer

は、送信対象のバッファへのポインタ

requested_length

は、送信する長さ

actual_length

は、転送が(正常にまたは部分的に)完了した後に送信される長さ

受信ファンクションのプロトタイプは次の通りです。

UINT host_class_dpump_read(UX_HOST_CLASS_DPUMP *dpump,

UCHAR *data_pointer, ULONG requested_length, ULONG *actual_length)

ホスト

DPUMP

クラスの一例を次に示します。ここでは、アプリケーションがデバイス側へのパケット

を書き、同じパケットを受信側で受信します。

/* We start with a 'A' in buffer. */

current_char = 'A';

while(1) {

/* Initialize the write buffer.*/

ux_utility_memory_set(out_buffer, current_char,

UX_HOST_CLASS_DPUMP_PACKET_SIZE);

/* Increment the character in buffer. */

current_char++;

/* Check for upper alphabet limit. */

if (current_char > 'Z') current_char = 'A';

/* 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ホストとの接続後に起動されるスレットを使用します。このスレッ

ドは、バルクアウト・エンドポイントに着信するパケットを待機します。パケットを受信するとスレッドは、

その内容をバルクイン・エンドポイント・バッファにコピーし、このエンドポイントにトランザクションをポ ストします。この状態で、このエンドポイントからの読み取りの要求をホストが発行するまで待機しま す。こうして、バルクアウト・エンドポイントとバルクイン・エンドポイントの間にループバックメカニズム が形成されます。

関連したドキュメント