181 lines
4.2 KiB
C++
181 lines
4.2 KiB
C++
#include "wiRawInput.h"
|
|
|
|
#ifndef WINSTORE_SUPPORT
|
|
|
|
wiRawInput::wiRawInput(HWND hWnd)
|
|
{
|
|
RegisterJoys(hWnd);
|
|
//RegisterKeyboardMouse(hWnd);
|
|
|
|
//RAWINPUTDEVICE Rid[3];
|
|
|
|
//Rid[0].usUsagePage = 0x01;
|
|
//Rid[0].usUsage = 0x02;
|
|
//Rid[0].dwFlags = 0;
|
|
////Rid[0].dwFlags = RIDEV_NOLEGACY; // adds HID mouse and also ignores legacy mouse messages
|
|
//Rid[0].hwndTarget = hWnd;
|
|
|
|
//Rid[1].usUsagePage = 0x01;
|
|
//Rid[1].usUsage = 0x06;
|
|
//Rid[1].dwFlags = 0;
|
|
////Rid[1].dwFlags = RIDEV_NOLEGACY; // adds HID keyboard and also ignores legacy keyboard messages
|
|
//Rid[1].hwndTarget = hWnd;
|
|
|
|
//Rid[2].usUsagePage = 0x01;
|
|
//Rid[2].usUsage = 0x04;
|
|
//Rid[2].dwFlags = 0; // adds joystick
|
|
//Rid[2].hwndTarget = hWnd;
|
|
|
|
//if (RegisterRawInputDevices(Rid, 3, sizeof(Rid[0])) == FALSE) {
|
|
// DWORD error = GetLastError();
|
|
//}
|
|
}
|
|
|
|
wiRawInput::~wiRawInput()
|
|
{
|
|
}
|
|
|
|
bool wiRawInput::RegisterJoys(HWND hWnd)
|
|
{
|
|
RAWINPUTDEVICE Rid[2];
|
|
|
|
Rid[0].usUsagePage = 0x01;
|
|
Rid[0].usUsage = 0x05;
|
|
Rid[0].dwFlags = 0; // adds game pad
|
|
Rid[0].hwndTarget = hWnd;
|
|
|
|
Rid[1].usUsagePage = 0x01;
|
|
Rid[1].usUsage = 0x04;
|
|
Rid[1].dwFlags = 0; // adds joystick
|
|
Rid[1].hwndTarget = hWnd;
|
|
|
|
if (RegisterRawInputDevices(Rid, 2, sizeof(Rid[0])) == FALSE) {
|
|
DWORD error = GetLastError();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool wiRawInput::RegisterKeyboardMouse(HWND hWnd)
|
|
{
|
|
RAWINPUTDEVICE Rid[2];
|
|
|
|
Rid[0].usUsagePage = 0x01;
|
|
Rid[0].usUsage = 0x02;
|
|
Rid[0].dwFlags = 0;
|
|
//Rid[0].dwFlags = RIDEV_NOLEGACY; // adds HID mouse and also ignores legacy mouse messages
|
|
Rid[0].hwndTarget = hWnd;
|
|
|
|
Rid[1].usUsagePage = 0x01;
|
|
Rid[1].usUsage = 0x06;
|
|
Rid[1].dwFlags = 0;
|
|
//Rid[1].dwFlags = RIDEV_NOLEGACY; // adds HID keyboard and also ignores legacy keyboard messages
|
|
Rid[1].hwndTarget = hWnd;
|
|
|
|
if (RegisterRawInputDevices(Rid, 2, sizeof(Rid[0])) == FALSE) {
|
|
DWORD error = GetLastError();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void wiRawInput::RetrieveData(LPARAM lParam)
|
|
{
|
|
UINT dwSize;
|
|
|
|
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
|
|
LPBYTE lpb = new BYTE[dwSize];
|
|
if (lpb == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
|
|
OutputDebugString(TEXT("GetRawInputData does not return correct size !\n"));
|
|
|
|
raw = RAWINPUT( (const RAWINPUT&)*lpb );
|
|
|
|
if (raw.header.dwType == RIM_TYPEHID)
|
|
{
|
|
int asd = 2;
|
|
asd = asd;
|
|
}
|
|
|
|
delete[] lpb;
|
|
return;
|
|
}
|
|
|
|
void wiRawInput::RetrieveBufferedData()
|
|
{
|
|
//// Some temp global buffer, 1KB is overkill.
|
|
//static uint64_t rawBuffer[1024 / 8];
|
|
//
|
|
//// Then in some function,
|
|
//UINT bytes = sizeof(rawBuffer);
|
|
//// Loop through reading raw input until no events are left,
|
|
//while (1) {
|
|
// // Fill up buffer,
|
|
// int32_t count = GetRawInputBuffer((PRAWINPUT)rawBuffer, &bytes, sizeof(RAWINPUTHEADER));
|
|
// if (count <= 0) return;
|
|
//
|
|
// // Process all the events,
|
|
// const RAWINPUT* raw = (const RAWINPUT*) rawBuffer;
|
|
// while (1) {
|
|
// // Process raw event.
|
|
// this->raw = *raw;
|
|
// // Goto next raw event.
|
|
// count--;
|
|
// if (count <= 0) break;
|
|
// raw = NEXTRAWINPUTBLOCK(raw);
|
|
// }
|
|
//}
|
|
|
|
//////while (true){
|
|
//// UINT cbSize;
|
|
//// //Sleep(1000);
|
|
|
|
//// GetRawInputBuffer(NULL, &cbSize, sizeof(RAWINPUTHEADER));
|
|
//// cbSize *= 16; // this is a wild guess
|
|
//// PRAWINPUT pRawInput = (PRAWINPUT)malloc(cbSize);
|
|
//// if (pRawInput == NULL)
|
|
//// {
|
|
//// return;
|
|
//// }
|
|
//// for (;;)
|
|
//// {
|
|
//// UINT cbSizeT = cbSize;
|
|
//// UINT nInput = GetRawInputBuffer(pRawInput, &cbSizeT, sizeof(RAWINPUTHEADER));
|
|
//// if (nInput == 0)
|
|
//// {
|
|
//// break;
|
|
//// }
|
|
//// assert(nInput > 0);
|
|
//// PRAWINPUT* paRawInput = (PRAWINPUT*)malloc(sizeof(PRAWINPUT) * nInput);
|
|
//// if (paRawInput == NULL)
|
|
//// {
|
|
//// break;
|
|
//// }
|
|
//// PRAWINPUT pri = pRawInput;
|
|
//// for (UINT i = 0; i < nInput; ++i)
|
|
//// {
|
|
//// paRawInput[i] = pri;
|
|
//// pri = NEXTRAWINPUTBLOCK(pri);
|
|
//// if (pri->header.dwType == RIM_TYPEHID)
|
|
//// {
|
|
//// int asd=32;
|
|
//// asd = asd;
|
|
//// }
|
|
//// }
|
|
//// // to clean the buffer
|
|
//// DefRawInputProc(paRawInput, nInput, sizeof(RAWINPUTHEADER));
|
|
|
|
//// free(paRawInput);
|
|
//// }
|
|
//// free(pRawInput);
|
|
//////}
|
|
}
|
|
|
|
#endif //WINSTORE_SUPPORT
|