Multi-Touch デバイスの Elotouch Driver サンプル コード


皆さん、遅ればせながら、明けましておめでとうございます。なおきお~です。


 


年末にWindows Touchの話題に触れ、USBHID デバイスではない場合は、サンプル コードがあることをご紹介しました。


 


そのサンプル コードのMulti-Touchに関して、少々説明したいと思います。


 


Multi-Touchデバイスの場合、Elotouch Driverを参照されるのがよいと思います。


 


まず、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cgReportDescriptorをご参照いただくと前回ご案内したHID の仕様書のMulti-touch digitizersのサンプルと似た構成であり、マウスと2地点のMulti-Touchデバイスになっています。


また、この情報はgReportDescriptorは、IOCTL_HID_GET_REPORT_DESCRIPTORを経由して、HID Classに通知します。


 


   Multi-touch digitizers


   http://www.usb.org/developers/hidpage/HUTRR34.zip


 


次にElotouch Driverは、シリアル接続を想定しており、%BASEDIR%\src\input\hiddigi\EloMT\elotouch.cTranslateRawDataToHID関数で、デバイスから読み込んだデータを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.cTranslateRawDataToHID関数を主に変更するだけになると思います。


 


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


 


 


それではまた。

Skip to main content