将Wiimote MAC地址转换为PIN,从C ++转换为Python或Javascript

时间:2018-09-16 00:22:17

标签: python c++ bluetooth wiimote

在这里找到了以下摘要:http://wiibrew.org/wiki/Wiimote#Bluetooth_Pairing

这里还有另一个代码段,用于将地址转换为引脚号:https://www.richlynch.com/2009/11/18/permanently-pair-wiimotewii-balance-board/

这是试图将任天堂Wiimote的mac地址转换为蓝牙配对期间要求的密码。

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

我想将此代码转换为javascript或python,以便我可以生成有效的 STRING PIN码,可以在蓝牙配对过程中出现提示时输入该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地址生成有效的字符串也会很有帮助。

1 个答案:

答案 0 :(得分:0)

引用https://wiibrew.org/wiki/Wiimote

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

以下似乎是上述内容的更新版本(相同的来源):

如果通过按住1 + 2按钮进行连接,则PIN是向后的Wiimote蓝牙地址,如果通过按Wiimote背面的“ sync”按钮进行连接,则PIN是该Wiimote的蓝牙地址。向后托管。

因此,原始C语言和您的Python代码都是正确的。实际上,结果字符串根本不可读(并且始终有6个字符,可打印或不可打印)。 WiiMote驱动程序需要反转MAC字符串并将其发送回去,如该页面中所述。因此,如果您不编写WiiMote驱动程序,请为您的系统找到一个驱动程序(在Linux上,该驱动程序已作为BlueZ插件包含在内,可以直接使用)。