Jaa


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;

            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;

            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関数を主に変更するだけになると思います。

 

サンプル コードをうまく利用できれば、開発の負担が少なくなると思いますので、是非ご活用ください。

 

 

それではまた。