0

在这里找到了以下代码片段:http ://wiibrew.org/wiki/Wiimote#Bluetooth_Pairing

这里还有另一个将地址转换为密码的代码片段:https ://www.richlynch.com/2009/11/18/permanently-pair-wiimotewii-balance-board/

这样做的目的是将任天堂 wiimote 的 mac 地址转换为蓝牙配对期间请求的 pin 号。

我猜这是 C 或 C++,但对 C/C++ 一无所知,但我知道 javascript 和 python。

我想将此代码转换为 javascript 或 python,这样我就可以生成一个有效的STRING pin 号码,在蓝牙配对过程中出现提示时可以输入该号码,甚至在我了解此代码的确切作用后手动执行此操作。

这是原始片段:

Lets assume the Wiimote has the bluetooth address "00:1E:35:3B:7E:6D". If you want the PIN for bluetooth pairing in a simple string, do the following:

char pin[6];
pin[0] = 0x6D;
pin[1] = 0x7E;
pin[2] = 0x3B;
pin[3] = 0x35;
pin[4] = 0x1E;
pin[5] = 0x00;

Now "pin" contains your bluetooth pin that should be used for pairing your devices.

另一个使用函数的片段:

_TCHAR * FormatBTAddress(BLUETOOTH_ADDRESS address)
{
   static _TCHAR ret[20];
   _stprintf(ret, _T("%02x:%02x:%02x:%02x:%02x:%02x"),
      address.rgBytes[5],
      address.rgBytes[4],
      address.rgBytes[3],
      address.rgBytes[2],
      address.rgBytes[1],
      address.rgBytes[0]
      );
   return ret;
}

现在虽然我对 C++ 一无所知,但我知道这是使用某种(反转的)6 字节数组,当我使用 repl.it 上示例中的 MAC 地址运行此代码时,它确实会产生看起来像人类的东西可读的 4 个字符串,可以作为蓝牙 Pin 输入:

m~;5

但是,当我用我的实际 mac 地址替换原始 mac 地址时,它会生成不可读的字符,在我看来,这段代码实际上无法工作,wiibrew.org 上的原始海报一定有一些遗漏。

这是使用我的实际 MAC 地址:

  char xpin[6];
  xpin[0] = 0x03;
  xpin[1] = 0xF4;
  xpin[2] = 0xB9;
  xpin[3] = 0x6E;
  xpin[4] = 0xAE;
  xpin[5] = 0xB8;
  printf(xpin);

这就是结果,其中包括在提示为有效蓝牙 PIN 码时绝对无法输入的不可打印字符:

��n�� @ 

任何人都可以对此有所了解,因为我看不到提供的代码如何创建可用作蓝牙密码的人类可读字符串?

最终我想用 Javascript 或 Python 编写代码,但即使能够手动执行此操作并从 mac 地址生成有效字符串也会有所帮助。

4

1 回答 1

0

参考https://wiibrew.org/wiki/Wiimote

PIN-Code 是 wiimote 的二进制蓝牙地址。

下面似乎是上面所说的更新版本(同一来源):

如果长按1+2键连接,PIN是wiimote反向蓝牙地址,如果是按wiimote背面的“同步”键连接,那么PIN是反向主机蓝牙地址。

所以原始 C 和你的 Python 代码都是正确的。事实上,结果字符串根本不应该是可读的(并且总是有 6 个字符,可打印与否)。由 WiiMote 驱动程序来反转 MAC 字符串并将其发送回来,正如该页面上描述的所有内容。因此,如果您不编写 WiiMote 驱动程序,请为您的系统找到一个(在 Linux 上,它已经作为 BlueZ 插件包含在内,并且应该可以开箱即用)。

于 2020-08-28T11:46:55.713 回答