wii模拟器吧 关注:21,622贴子:82,336
  • 14回复贴,共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回复
    抱歉,水平有限,我很难看懂,你在说什么。如果想的是,例如用手机设备,模拟手柄,直接当做一个手柄用,现在完全可以了,只要在一个局域网下,有大佬把软件写出来了


    IP属地:山东来自Android客户端3楼2023-01-24 23:19
    回复
      2026-02-09 03:34:11
      广告
      不感兴趣
      开通SVIP免广告
      这是软件界面,体感,延迟啥的,完全没有问题,我都拿在手里跳舞力全开


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


        IP属地:吉林5楼2023-01-25 16:11
        回复

          现在的问题是,我们运行了这个函数之后,直接调用的是我的 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
                收起回复
                  2026-02-09 03:28:11
                  广告
                  不感兴趣
                  开通SVIP免广告

                  大佬,win10系统替换BCM2045A驱动,每次都显示用户取消安装,这个是怎么回事呢?主板带的蓝牙和csr4.0装东芝驱动的蓝牙都识别不了原装wii加速手柄,求解答,谢谢!


                  IP属地:辽宁10楼2023-07-11 21:30
                  收起回复
                    大佬,如果像这种国产货怎么连?



                    IP属地:广东来自Android客户端11楼2023-09-23 08:35
                    回复
                      太硬核了,我只想知道为什么要用“直通蓝牙适配器”,网上的教程为何都是“模拟WII的蓝牙适配器”。而我用了后者,WII手柄有时按home就能匹配,有时怎么按都不匹配
                      然后马里奥赛车进游戏没问题,一开跑手柄就假连状态,灯亮着,按什么都没反应


                      IP属地:安徽12楼2023-11-22 15:33
                      回复
                        TR手柄可以用wiimotehook驱动,然后在NS里玩。


                        IP属地:甘肃来自Android客户端13楼2023-12-03 08:51
                        回复