12 #error TnbCeUsbHid.h is only supported on Windows CE platforms.
31 #define CTL_CODE( DeviceType, Function, Method, Access ) \
32 ( ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) )
36#define IOCTL_USBHIDT_BASE 0xFC
72 CC = CTL_CODE(IOCTL_USBHIDT_BASE, 0x0F00, 0, 1),
93 CC = CTL_CODE(IOCTL_USBHIDT_BASE, 0x0F01, 0, 1)
114 CC = CTL_CODE(IOCTL_USBHIDT_BASE, 0x0F10, 0, 1)
135 CC = CTL_CODE(IOCTL_USBHIDT_BASE, 0x0F20, 0, 2)
160 : m_handle(INVALID_HANDLE_VALUE), m_property(_T(
"HID"), TNBVIW_KIND_USB), m_recvTimeout(100), m_deviceIndex(1)
201 s.
Format(_T(
"HID%d:"), m_deviceIndex);
202 HANDLE h = ::CreateFile(s, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);
203 if ( h == INVALID_HANDLE_VALUE )
205 if ( ::GetLastError() != ERROR_DEV_NOT_EXIST )
207 _GetLastError(
"CreateFile");
211 BOOL r = ::DeviceIoControl(h, m_info.
CC, &m_info,
sizeof(m_info), NULL, 0, NULL, NULL);
212 if ( r == 1 && m_info.
signature == m_info.SIGNATURE )
214 TRACE1(
"CeUsbHid.CheckDevice, 結果 = %d\n", r);
215 TRACE1(
" バージョン情報 = 0x%X\n", m_info.
version);
221 m_property.
typeId = TNBVIW_KIND_USB + (
reinterpret_cast<ULONG_PTR
>(
this) & 0xFFFF);
235 if ( m_handle != INVALID_HANDLE_VALUE )
237 ::CloseHandle(m_handle);
238 m_handle = INVALID_HANDLE_VALUE;
249 return m_handle != INVALID_HANDLE_VALUE;
302 virtual size_t Send(
size_t size, LPCVOID P)
313 BOOL r = ::DeviceIoControl(m_handle, cb.
CC, &cb,
sizeof(cb), NULL, 0, NULL, NULL);
318 return r ? size : INVALID_SIZE;
329 virtual size_t Receive(
size_t size, LPVOID _P)
340 BOOL r = ::DeviceIoControl(m_handle, cb.
CC, &cb,
sizeof(cb), NULL, 0, NULL, NULL);
384 const int LEN = 1024;
391 BOOL r = ::DeviceIoControl(m_handle, cb.
CC, &cb,
sizeof(cb), NULL, 0, NULL, NULL);
420 static bool RegistDriver(WORD vendorId = 0x20FC, WORD productId = 1, WORD usagePage = 0xFF00, WORD usageId = 1, LPCTSTR lpszDriverName = _T(
"USBHID_T.DLL"))
424 s.
Format(_T(
"\\Windows\\%s"), lpszDriverName);
426 DWORD a = ::GetFileAttributes(s);
427 if ( _GetLastError(
"GetFileAttributes") == ERROR_FILE_NOT_FOUND )
434 s.
Format(_T(
"USB\\LoadClients\\%d_%d\\Default\\3\\Hid_Class"), vendorId, productId);
438 s.
Format(_T(
"USB\\ClientDrivers\\Hid_t\\Hid_Class"));
444 s.
Format(_T(
"USB\\ClientDrivers\\Hid_t\\Instance"));
448 s.
Format(_T(
"HID\\LoadClients\\Default\\Default\\%d_%d\\PSL"), usagePage, usageId);
455 void m_ConnectCheck(
void)
457 switch ( ::GetLastError() )
460 case ERROR_NOT_SUPPORTED:
468 TIoCtrlBlock_CheckDevice m_info;
470 TProperty m_property;
virtual EState Check(void) const
[確認] チェック.
static bool RegistDriver(WORD vendorId=0x20FC, WORD productId=1, WORD usagePage=0xFF00, WORD usageId=1, LPCTSTR lpszDriverName=_T("USBHID_T.DLL"))
[設定] ドライバーレジストリ登録.
CStr GetString(EStringType type, INDEX index=0) const
[取得] 文字列取得.
virtual bool Open(void)
[処理] オープン.
virtual bool CanSend(void) const
[確認] 送信可能確認.
virtual void Purge(void)
[処理] パージ.
virtual bool IsConnect(void) const
[確認] 接続確認.
virtual ~CCeUsbHid(void)
デストラクタ
bool SetReceiveTimeout(DWORD to)
[設定] 受信タイムアウト時間設定.
virtual void Close(void)
[処理] クローズ.
@ MANUFACTURER
Manufacturer identifer.
@ SERIALNUMBER
Serial number.
@ PRODUCT
Product identifer.
virtual bool CanReceive(void) const
[確認] 受信可能確認.
void SetDeviceIndex(int i)
[設定] デバイスインデックス設定.
virtual bool IsOpened(void) const
[確認] オープン確認.
virtual size_t Receive(size_t size, LPVOID _P)
[処理] 受信.
virtual const TProperty & GetProperty(void) const
[取得] 性能取得.
virtual size_t GetReceivingDataSize(void) const
[確認] 受信データ確認.
virtual size_t Send(size_t size, LPCVOID P)
[処理] 送信.
const TIoCtrlBlock_CheckDevice & GetDeviceInfo(void) const
[取得] デバイス情報取得
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
bool WriteDword(LPCTSTR lpszKey, DWORD dwValue)
[追加] 数値情報記録
bool WriteString(LPCTSTR lpszKey, LPCTSTR lpszValue)
[追加] 文字列情報記録
DWORD inputReportLength
[out] INPUTサイズが格納される。
DWORD signature
[out] シグネチャ。SIGNATURE が格納されている。
DWORD outputReportLength
[out] OUTPUTサイズが格納される。
DWORD version
[out] バージョン情報が格納される。
DWORD gotStringDataSize
[out] 取得文字長が格納される。
DWORD stringDataBufferSize
[in] 文字データ長を指定する。
DWORD index
[in] Only used with stringType == HID_STRING_INDEXED
LPWSTR lpStringData
[in,out] 取得文字データが格納されるバッファアドレスを指定する。
DWORD type
[in] 文字タイプ CUsbHid::EStringType
DWORD timeout
[in] タイムアウト時間(ms)を指定する
DWORD inputDataBufferSize
[in] 受信可能データサイズを指定する。
DWORD inputedDataSize
[out] 受信データサイズが格納される。
LPVOID lpInputData
[in,out] 受信データが格納されるバッファアドレスを指定する。
DWORD mode
[in] 0;interrupt
DWORD timeout
[in] タイムアウト時間(ms)を指定する
LPCVOID lpcOutputData
[in] 送信データのアドレスを指定する。
DWORD outputDataSize
[in] 送信データサイズを指定する。
DWORD mode
[in] 0;interrupt
size_t sendPacketSize
送信パケットサイズ。INVALID_SIZE なら制限なし。
size_t receivePacketSize
受信パケットサイズ。INVALID_SIZE なら制限なし。