イーサネット デバッグ インターフェイスを拡張する
イーサネット デバッグ サービスは、既定のオペレーティング システム サービス以外にほかのアプリケーションからもアクセスできます。たとえば、開発用のワークステーションで実行中のピア アプリケーションにデータを送信するパフォーマンス モニタを設計し、インプリメントすることができます。このようなアプリケーションには 2 つのコンポーネントがあります。ターゲット デバイスで実行されているアプリケーションと、開発用のワークステーションで実行されているアプケーションです。各アプリケーションは、アプリケーション自身を識別する重複しない名前文字列に関連付けられています。両方のアプリケーションがこの文字列を登録する必要があります。
イーサネット デバッグを使用しているアプリケーションに対してサポートを追加するためには、OEMIoControl が次の表に示されたI/O 制御コードを処理する必要があります。
I/O 制御コード | 説明 |
---|---|
IOCTL_EDBG_DEREGISTER_CLIENT | EdbgDeregisterClient を呼び出すために使用します。 |
IOCTL_EDBG_REGISTER_CLIENT | EdbgRegisterClient (Target Device) を呼び出すために使用します。 |
IOCTL_EDBG_RECV | EdbgRecv を呼び出すために使用します。 |
IOCTL_EDBG_SEND | EdbgSend を呼び出すために使用します。 |
IOCTL_EDBG_SET_DEBUG | EdbgSetDebug (Target Device) を呼び出すために使用します。 |
IOCTL_HAL_GET_IP_ADDR | 使用されているトランスポート サービスのイーサネット デバッグ インターネット プロトコル (IP) アドレスを取得するために使用します。 |
IOCTL_HAL_SEND_UDP | 汎用データ プロトコル ブロードキャスト パケットを送信するために使用します。 |
IOCTL_SET_KERNEL_COMM_DEV | SetKernelCommDev を呼び出すために使用します。 |
次のコード サンプルは、イーサネット デバッグ I/O 制御コードを処理するインプリメンテーションを示しています。
BOOL OEMIoControl(...)
{ ...
switch (dwIoControlCode) {
case IOCTL_EDBG_REGISTER_CLIENT:
return EdbgRegisterClient(lpInBuf, lpOutBuf, (UCHAR)nInBufSize, (UCHAR)nOutBufSize, (UCHAR *)lpBytesReturned);
case IOCTL_EDBG_DEREGISTER_CLIENT:
return EdbgDeregisterClient((UCHAR)nInBufSize);
case IOCTL_EDBG_SEND:
return EdbgSend((UCHAR)nInBufSize, lpInBuf, nOutBufSize);
case IOCTL_EDBG_RECV:
return EdbgRecv((UCHAR)nInBufSize, lpInBuf, lpOutBuf, nOutBufSize);
case IOCTL_EDBG_SET_DEBUG:
EdbgSetDebug(nInBufSize);
break;
case IOCTL_SET_KERNEL_COMM_DEV:
// Routine to change underlying communications device for kernel services
return SetKernelCommDev((UCHAR)nInBufSize,(UCHAR)nOutBufSize);
これらの I/O 制御コードは、KernelIoControl を使用して直接呼び出されないことに注意してください。その代わり、アプリケーションは、イーサネット デバッグ サービスと通信するために、Halether.h で定義されているラッパ インライン関数を使用する必要があります。たとえば、EdbgRecv を呼び出すには、KernelIoControl の代わりに CallEdbgRecv を呼び出します。
最初に Platform Builder または Eshell.exe が実行されていることを確認した後、開発用のワークステーションのアプリケーションは、イーサネット デバッグ エントリ ポイントを提供する Edbg.dll をロードする必要があります。Edbg.dll は、%_WINCEROOT%\Public\Common\Oak\Bin\I386 ディレクトリにあります。Edbg.dll は、Winsock サービスを使用してターゲット デバイスに対する UDP パケットの送受信を行ったり、信頼できるデータ転送を行うために必要なプロトコル オーバーヘッドを提供します。
イーサネット デバッグ インターフェイスを拡張するためのサンプル コードについては、%_WINCEROOT%\Public\Common\Oak\Demos\Ethdbg ディレクトリを参照してください。