Чтение данных с Wii-баланса

Я пытаюсь получить вывод от Wii Fit (балансная доска). Я могу найти устройство с помощью C++ Bluetooth-перечислителей, но попытки подключения через Windows-сокет не удаются.

Мне интересно, если бы кто-нибудь имел успех в таком направлении (C++, Windows), я хотел бы услышать, как вы это сделали.

3 ответа

Решение

Wii Balance Board - это устройство HID. Чтобы понять связь с Balance Board, вам нужно немного узнать о Bluetooth HID. На WiiBrew есть хорошая информация о Wiimote и Wii Balance Board.

Я не думаю, что вы можете использовать Windows Sockets для подключения к HID-устройству. Интерфейс Windows Socket Bluetooth позволяет подключаться только к службам на основе RFCOMM. HID основан на L2CAP, который расположен ниже стека протоколов Bluetooth. На MSDN есть информация об этом ограничении.

Если вы просто хотите взломать его, попробуйте Bluecove для Java. Вы можете сделать что-то, используя другой стек (например, Widcomm). Если вы привязаны к Windows и C++, вам, возможно, придется заняться написанием собственного драйвера HID для Balance Board.

Как сказал pwc, в MS Bluetooth API есть ограничение, поэтому с сокетами у вас не может быть чего-то другого, кроме RFCOMM, но это не значит, что вы не можете перейти на уровень L2CAP. Что вам нужно сделать, это реализовать драйвер профиля клиента, и вы можете использовать в качестве отправной точки статью из MSDN: Создание клиентского соединения L2CAP с удаленным устройством и наоборот: Прием соединений L2CAP в драйвере профиля Bluetooth

Далее, как сказал pwc, вы должны изучить Bluetooth HID и WiiBrew для протокола связи.

Также хорошим документом для чтения является FAQ по беспроводной технологии Bluetooth - 2010, в котором ясно сказано, что возможно иметь L2CAP-соединения с драйвером стека Microsoft Bluetooth. Конечно не с розетками.

При использовании HID на устройстве Bluetooth, как правило, нет необходимости создавать соединение L2CAP напрямую. Все (???) стеки Bluetooth в Win32 поддерживают Bluetooth HID и обеспечивают доступ к потоку / управлению HID через собственный Windows HID API. Нет (прямой) L2CAP требуется!:-)

В WinCE также есть встроенная поддержка Bluetooth HID, но я не уверен, что есть способ получить доступ к HID API.

Вот как работает библиотека wiimore Брайана Пика - она ​​использует HID API. Хорошая вещь в этом заключается в том, что таким образом получают поддержку для всех (?) Стеков Bluetooth - каждое из них поддерживает устройства HID через Windows HID API, тогда как для непосредственного использования L2CAP необходимо будет поддерживать каждый из API стеков... (Это если у них есть один! BlueSoleil не имеет L2CAP API, насколько я вижу).

Таким образом, в Win32 нужно просто выполнить сопряжение с устройством и проверить, установлен ли флажок HID на вкладке панели управления службы Bluetooth (какой бы стек Bluetooth ни использовался). В моей библиотеке 32feet.NET можно обнаружить устройство, а затем убедиться, что для него включен HID с помощью:

BluetoothDeviceInfo[] list = btCli.DiscoveryDevices();
var deviceInfo = list[n]; // Select the correct device
deviceInfo.SetServiceState(BluetoothService.HumanInterfaceDevice, true);

(Это должно работать на MSFT и BlueSoleil; для него нет API для Widcomm AFAIK - хотя в паре он может быть автоматически включен в любом случае).

Единственное возможное исключение - очевидно, что некоторые устройства не полностью соответствуют спецификациям Bluetooth/HID, мне сказали, что контроллер PS3 blu-ray такой. Тогда можно попробовать напрямую подключиться к L2CAP - однако вполне вероятно, что поддержка HID в стеке будет мешать сторонним приложениям, пытающимся предоставить ту же услугу...

Другие вопросы по тегам