Multi-Touch デバイスの Elotouch Driver サンプル コード
皆さん、遅ればせながら、明けましておめでとうございます。なおきお~です。
年末にWindows Touchの話題に触れ、USBのHID デバイスではない場合は、サンプル コードがあることをご紹介しました。
そのサンプル コードのMulti-Touchに関して、少々説明したいと思います。
Multi-Touchデバイスの場合、Elotouch Driverを参照されるのがよいと思います。
まず、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cのgReportDescriptorをご参照いただくと前回ご案内したHID の仕様書のMulti-touch digitizersのサンプルと似た構成であり、マウスと2地点のMulti-Touchデバイスになっています。
また、この情報はgReportDescriptorは、IOCTL_HID_GET_REPORT_DESCRIPTORを経由して、HID Classに通知します。
Multi-touch digitizers
https://www.usb.org/developers/hidpage/HUTRR34.zip
次にElotouch Driverは、シリアル接続を想定しており、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cのTranslateRawDataToHID関数で、デバイスから読み込んだデータをHIDのデータに変換しています。
また、デバイスから読み込むデータの形式は、HIDのデータに変換できるのであれば、自由に決めることができます。
Elotouch Driverの場合、以下のMulti-Touchとマウスで、それぞれ以下のように定義しています。
typedef struct _OEM_RAW_SERIAL_PACKET_1 |
{ |
union |
{ |
struct |
{ |
UCHAR Status; ← 以下のフラグを設定 |
#define ELO_MT_1_DOWN 0x05 // Down |
#define ELO_MT_0_DOWN 0x00 // Up |
UCHAR Contacts; ← 1 |
USHORT XData; ← X座標 |
USHORT YData; ← Y座標 |
UCHAR ContactId; ← 地点のID |
}RawSerialData; |
UCHAR RawInput[7]; |
}; |
}OEM_RAW_SERIAL_PACKET_1, *POEM_RAW_SERIAL_PACKET_1; |
typedef struct _OEM_RAW_SERIAL_PACKET_2 |
{ |
union |
{ |
struct |
{ |
UCHAR Status; ← 以下のフラグを設定 |
#define ELO_MT_1_DOWN 0x05 // 1地点目のみDown |
#define ELO_MT_2_DOWN 0x0a // 2地点目のみDown |
#define ELO_MT_BOTH_DOWN 0x0f // 両地点Dwon |
#define ELO_MT_0_DOWN 0x00 // 両地点Up |
UCHAR Contacts; ← 2 |
USHORT XData; ← X座標 |
USHORT YData; ← Y座標 |
UCHAR ContactId; ← 地点のID |
USHORT XData2; ← X座標2 |
USHORT YData2; ← Y座標2 |
UCHAR ContactId2; ← 地点のID2 |
}RawSerialData; |
UCHAR RawInput[12]; |
}; |
}OEM_RAW_SERIAL_PACKET_2, *POEM_RAW_SERIAL_PACKET_2; |
typedef struct _OEM_MOUSE_REPORT |
{ |
union |
{ |
struct |
{ |
UCHAR bButtons; ← ボタンUp/Down |
USHORT wXData; ← X座標 |
USHORT wYData; ← Y座標 |
USHORT wReserved; |
}InputReport; |
UCHAR RawInput[7]; |
}; |
}OEM_MOUSE_REPORT, *POEM_MOUSE_REPORT; |
もし、この構成に似た構成にすれば、デバイスを開発いただければ、サンプル コードで流用できるコードが多くなりますし、主処理は、変更しなくとも動作するかもしれません。
また、この構成から変更を行った場合は、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cのTranslateRawDataToHID関数を主に変更するだけになると思います。
サンプル コードをうまく利用できれば、開発の負担が少なくなると思いますので、是非ご活用ください。
それではまた。