wii模拟器吧 关注:21,623贴子:82,344
  • 5回复贴,共1

wii直通原理(通过dolphin源代码看)

取消只看楼主收藏回复

简单地说,dolphin在windows下面的直通,用的就是
bthprops.cpl 和BluetoothApis.dll 里面的函数,所有的操作都在iowin里面。
在ios里面用的就是libusb的操作。这个真的是在用libusb的库进行读写。
在win10下面,常规的模拟手柄就是通过win10自带的蓝牙软件连接wiimote,然后使用蓝牙函数,就可以找到wii手柄,然后进行对应的工作。但是直通以后呢?蓝牙的设备被当成了usb的设备,我们可以看到bcm2045a(原装蓝牙),这个时候,我们在蓝牙的设备栈里面就找不到了。所以说,常规的处理就不行了。这个时候,翻看模拟的源代码,看到了bthprops.cpl 和BluetoothApis文件的函数操作。甚至,有如何操作蓝牙适配器,去寻找蓝牙radio,也就是wiimote发送的按键的信息,当找到这个信息之后,就直接配对了。完全解释了,第一次是用配对,第二次就是按个a键就找到了。
那么该如何发送信息给wiimote手柄呢?则可以看看wiiuse的源码,里面基本操作都有。这样的话,我们就可以在直通(pass-through)的模式下,用wiimote手柄 操作自己写的代码了。

那么双蓝牙的话,bcm2045a就可以用来直通了, 另外一个蓝牙用来做别的事情。


IP属地:吉林1楼2023-01-24 14:55回复
    功夫不负有心人,今天终于把wiimoteReal这个class从dolphin里面拿出来了,
    core里的common里面的基本都搬运出来了,其余的就是搬运wiimoteReal这个class。还有iowin.。还好,耦合不是很严重。最厉害的事情是什么?那就是当我点击一个wii手柄的一个按键之后,就看到win10右下角提示我,xxx-tr手柄连接,然后就可以在 自己的代码里面调用 这个函数了。 每次就不需要自己点手柄后面的小红点,每次点配对还很麻烦。


    IP属地:吉林5楼2023-01-25 16:11
    回复
      2026-04-04 04:45:17
      广告
      不感兴趣
      开通SVIP免广告

      现在的问题是,我们运行了这个函数之后,直接调用的是我的 pcie的蓝牙,而不是我直通后的蓝牙。
      这样就导致,直通蓝牙还是没有被使用。还得再观察一下,怎么找到的是直通的蓝牙,而不是正常驱动的蓝牙
      而且直通后的蓝牙该如何发送数据呢?得需要思考一下。


      IP属地:吉林6楼2023-01-25 16:17
      回复
        找到方法了,使用libusb+btstack这两个开源库就可以,
        通过hci函数库,就可以找到 zadig把变成usb设备的蓝牙,进而就可以通过这个通道找到发送配对的wiimote的radio了,然后,就开启了配对的过程。
        有个开源软件叫 wiimote-btstack的,就可以操作zadig直通后的蓝牙手柄。但是不支持tr结尾的,因为-tr手柄只要发送pin就会断开连接。
        -tr的手柄如果配对只能用小红点,不能用a+b。
        当然了,dolphin的源码和调用流程还没有入门,
        个人觉得,想要学习编程,操作蓝牙手柄的话,dolphin还是值得研究的。
        暂时放弃了研究了,毕竟时间有限,玩游戏的话,就用zadig处理过的bcm2045a了,如果只是用wiimote玩软件的话,还是wiimote配对软件+wiiuse(开源库)。比较方便。
        千万不能深陷其中,够用就行。人的寿命是有限的,还有更多的内容需要去做。
        结果就这一个月,买了4个后期tr手柄,2套红外+bcm2045a。充电电池16节,充电器2个。
        这些天还没事看看某鱼里面有没有什么配件需要购买。
        其实千万不要害怕好手柄,好配件会卖光。坏了再买才是道理。
        原装的东西,最少能用一年才用坏。使用了低自放的充电电池对手柄的损失也变小了。
        可能过几天,就不玩wii了,改玩wiiu,ns的模拟器了,又得换对应的手柄了。
        不过说实在的,wiimote手柄很像一个遥控器,很容易被老人小孩接受。
        在电脑上面,其实就是一个鼠标。然后不停地选择就很好。
        题外话:最近看到做工好的,bcm2045a的usb改装都想买,明明已经有了,多了也用不到,就是想买,可是每天又没有那么多的时间来玩。这可定是一种痴念。


        IP属地:吉林7楼2023-01-27 13:23
        回复
          当我们按了一下同步的按钮的时候就会触发 下面的函数

          然后呢,在看一下触发的函数,这说明,就使用了ios的hle里面的库

          这个函数的位置就到了

          接着往下走

          到了这里就断开了消息,很显然,那么就得查看btreal。cpp里面的open函数了。很显然,这个realdevice是谁建立的。这个内容是很重要的事情。这个类继承了basedevice,上面还有一个device。三层架构。
          那么此时,我们要求知道这个device是什么时候被构造,这个时机很重要。


          IP属地:吉林8楼2023-01-29 15:06
          回复
            找了一圈,没有找到具体是windows,+libusb+hci 是怎么与带加密手柄进行连接的。
            后来看了代码才明白,具体直通的部分,就是把加密手柄的配对,是与模拟器里面的系统进行对配的,跟模拟器没有什么关系,是跟wii的系统直接配对,不需要 电脑或者手机处理和转发这个数据。所以才叫直通。
            那么,想要操作加密手柄,通过zadig+libusb+btstack 这样的方式,是行不通了,只能玩那些没有加密的手柄了。
            现在终于明白了直通的含义passthrough,也就是说,wiimote和平衡板等设备,直接与模拟器里面的wii操作系统对话,跳过了模拟器信号处理的过程,直接转发给wii操作系统。
            怪不得,直通后win10 的硬件查看里面没有任何反应。懂了。


            IP属地:吉林9楼2023-01-30 11:07
            收起回复