elmagnificogi / NS_joycon_auto_script_esp32

NS_joycon_auto_script_esp32
4 stars 2 forks source link

关于V12 #1

Open MagicInstall opened 3 years ago

MagicInstall commented 3 years ago

@elmagnificogi 你好!拜读了你的Blog,对我制作JC有很大的帮助!我也自行修改了IDF(这是我的仓库),手柄基本能连上以及发送按键,然而,目前还有断连问题仍未解决:

在某些游戏中,手柄会被Switch 置于后台(不知道这个状态怎么表达...),此时手柄会发生ESP_BT_GAP_MODE_CHG_EVT 事件,状态码由ESP_BT_PM_MD_SNIFF 转为ESP_BT_PM_MD_ACTIVE,个人估计是V12 通知手柄切换到某种省电模式的过程,但此时立即就断连了!

参考了一些Issues,瞎猜貌似是Switch 改变了通信间隔,而IDF没有相应的对策导致?

期待你的回复!谢谢!

elmagnificogi commented 3 years ago

你这个断连能具体一点嘛,我以前用的时候不会突然断连的 置于后台,你是指多个手柄连接,切换到其他手柄时,模拟手柄的状态嘛? 还是说那个游戏直接不支持模拟的pro?要求切换成次手柄?如果是省电模式,本质上基本就和断连差不多了吧,只是可能每隔多久会发个包确认一下? 这个idf也是野生的,有很多问题,官方说4.4版本就会推出classic bluetooth,但是我已经等了一年多了都还没推出呢,那个issue还一直开着呢

因为我本身也不是搞蓝牙的,所以很多地方我也不是很懂,可能提供不了啥大忙,如果你要实时交流可以加我qq或者tg都行

MagicInstall commented 3 years ago

如果作为P1,连接后一直很稳定没有问题,按键发送也正常,但是只能在更改握法里连接(因为没有记住匹配?); 但作为P2,例如在Splatoon ,原厂手柄是保持连接的仍然可以按个Home 或者截个屏什么的,但这个模拟的手柄作为P2时,一回到Splatoon 就断了,作为P1就没这个问题。 我没有直接用NathanReeves 的IDF,自己用官方的4.2 揉上NathanReeves 的HIDD 部分的代码魔改的,没有他那个内存溢出问题,因为底层完全是官方的。 我用的Platformio平台不能直接编译你的代码,不知道你有没有遇到(在Splatoon非P1进就断连)这个情况? 目前我正在跟踪那个ESP_BT_GAP_MODE_CHG_EVT 事件是从哪里触发的,看能不能找到点头绪...

elmagnificogi commented 3 years ago

你说的这个应该是协议的问题,这个库里面协议是不完整的,你要是看过NS那个逆向的项目或者是他们弄得PC端刷写控制joycon的项目就知道了,作为Px,有一个专门的包,而这个库好像只做了P1,其他好像不识别还是咋的来着,反正就是给写死了。

更改握法是因为没有记录那个匹配码还是啥来着,也是那个协议没写全,如果你写全了,比如把那个匹配码写到e2prom里或者flash里,下次就能直接连接了。

这几个协议我忘记是谁的库里有了(反正就那几个做蓝牙的大佬),如果你不知道你可以试试自己dump一份,然后分析一下就行了。

MagicInstall commented 3 years ago

你说到点上了!非常感谢你的提示! 那个逆向项目我水平太低看得云里云雾orz,再回去研究研究...