JAJA452A january   2011  – may 2023

 

  1.   1
  2. 1MSP430™ USB HID Windows API プログラマー・ガイド
  3. 2はじめに
  4. 3実装
    1. 3.1 概要
    2. 3.2 ファイル構成
    3. 3.3 システム要件
    4. 3.4 MSP430 USB API スタック
    5. 3.5 Windows が物理 USB HID デバイスをホスト・アプリケーションにマッピングする方法
    6. 3.6 システム上で特定の HID デバイス / インターフェイスを見つけて開く
    7. 3.7 データの送受信
    8. 3.8 HID デバイスの動的接続 / 切断の検出
  5. 4関数呼び出しのリファレンス
    1. 4.1 デバイス接続管理および初期化呼び出し
      1. 4.1.1 VOID HID_Init(struct strHidDevice* pstrHidDevice)
      2. 4.1.2 DWORD HID_GetSerNums(WORD vid, WORD pid, struct strTrackSerialNumbers *serialNumList)
      3. 4.1.3 DWORD HID_GetNumOfInterfaces(WORD vid, WORD pid, DWORD numSerNums)
      4. 4.1.4 BYTE HID_Open(struct strHidDevice* pstrHidDevice, WORD vid, WORD pid, DWORD deviceIndex, char serialNumber[SERNUM_LEN], DWORD totalDevNum, DWORD totalSerNum)
      5. 4.1.5 BYTE HID_Close(struct strHidDevice* pstrHidDevice)
      6. 4.1.6 BYTE HID_GetVersionNumber(struct strHidDevice* pstrHidDevice, USHORT * VersionNumber)
    2. 4.2 データの送受信
      1. 4.2.1 BYTE HID_WriteFile(struct strHidDevice* pstrHidDevice, BYTE* buffer, DWORD bufferSize, DWORD* bytesSent)
      2. 4.2.2 BYTE HID_ReadFile(struct strHidDevice* pStrHidDevice, BYTE* buffer, DWORD bufferSize, DWORD* bytesReturned)
    3. 4.3 プラグ・アンド・プレイ管理
      1. 4.3.1 BYTE HID_RegisterForDeviceNotification(HWND hWnd, HDEVNOTIFY* diNotifyHandle)
      2. 4.3.2 BYTE HID_UnregisterForDeviceNotification(HDEVNOTIFY* diNotifyHandle)
      3. 4.3.3 BOOL IsDeviceAffected(struct strHidDevice* pstrHidDevice)
  6. 5デモ・アプリケーション
  7. 6MSP430 USB ツール・スイート
  8.   HID インターフェイスのデータ構造体:strHidDevice
  9.   HID-Datapipe デバイスに関するレポートの形式
  10.   C 関連資料
  11.   C 改訂履歴

HID デバイスの動的接続 / 切断の検出

従来の COM ポートとは異なり、USB アプリケーションでは、ユーザーがデバイスをいつでも取り外す (または接続する) ことができることを認識する必要があります。これが USB の動的な「プラグ・アンド・プレイ」の特徴です。Windows は、MFC ライブラリに実装されている通知機能によってこれを処理します。通知はアプリケーションのウィンドウ・オブジェクトに直接送られるため、これは API の外部で行われます。ただし、これらの通知を受信すると、アプリケーションはこの目的のために特別に提供された API ハンドラを呼び出すことができます。デモ・アプリケーションでは、これを行う方法を示します。

アプリケーションがこれらの通知を処理するために必要な手順は以下のとおりです。

  1. アプリケーションの開始時に、アプリケーションは、HID_RegisterForDeviceNotification() を使用してデバイス変更通知を受信するためのウィンドウを登録する必要があります。
  2. ON_WM_DEVICECHANGE をウィンドウのメッセージ・マップに追加します。(これが AFX_MSG_MAP のコメント・セクションの外にあることを確認してください。)
  3. 関数 OnDeviceChange() をウィンドウのパブリック関数として書きます。このメッセージ・ハンドラは、ON_WM_DEVICECHANGE 通知に応答して、MFC フレームワークによって呼び出されます。

この関数の定義は、次のようになります。

afx_msg BOOL OnDeviceChange( 
   UINT nEventType, 
   DWORD_PTR dwData  
);

この関数は、このアプリケーションで使用されている「HID デバイス」のいずれかがシステムから削除されたかどうかを判断する必要があります。 そのために、オープンしている各 HID デバイスに対して HID_IsDeviceAffected() を呼び出して、それらが削除されたかどうかを判断できます。

アプリケーションを終了するときは、HID_UnregisterForDeviceNotification() を使用して、必ずアプリケーションの登録を解除する必要があります。