-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbluetooth.cpp
More file actions
56 lines (42 loc) · 1.37 KB
/
bluetooth.cpp
File metadata and controls
56 lines (42 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "pch.h"
bool
SK_Bluetooth_PowerOffGamepad (hid_device_file_s* pDevice)
{
if (! pDevice->bWireless)
return false;
if (! pDevice->bConnected)
return false;
// The serial number is actually the Bluetooth MAC address; handy...
wchar_t wszSerialNumber [32] = { };
DWORD dwBytesReturned = 0;
DeviceIoControl (
pDevice->hDeviceFile, IOCTL_HID_GET_SERIALNUMBER_STRING, 0, 0,
wszSerialNumber, 64,
&dwBytesReturned, nullptr );
ULONGLONG ullHWAddr = 0x0;
swscanf (wszSerialNumber, L"%llx", &ullHWAddr);
BLUETOOTH_FIND_RADIO_PARAMS findParams =
{ .dwSize = sizeof (BLUETOOTH_FIND_RADIO_PARAMS) };
HANDLE hBtRadio = INVALID_HANDLE_VALUE;
HANDLE hFindRadios =
BluetoothFindFirstRadio (&findParams, &hBtRadio);
BOOL success = FALSE;
while (success == FALSE && hBtRadio != 0)
{
success =
DeviceIoControl (
hBtRadio, IOCTL_BTH_DISCONNECT_DEVICE, &ullHWAddr, 8,
nullptr, 0,
&dwBytesReturned, nullptr );
if (success)
{
pDevice->disconnect ();
}
CloseHandle (hBtRadio);
if (! success)
if (! BluetoothFindNextRadio (hFindRadios, &hBtRadio))
hBtRadio = 0;
}
BluetoothFindRadioClose (hFindRadios);
return success != FALSE;
}