xzn / ntr-hr

GNU General Public License v2.0
91 stars 0 forks source link

3ds Freezes if the port number is changed after starting inputredirection on a computer #9

Open Professor-Marill opened 1 month ago

Professor-Marill commented 1 month ago

Not sure if this is a problem with inputredirection, ntr or potentially luma, but thought it would be good to post. If inputredirection is enabled and connected to the application on the computer and you change the port number on the 3ds, when you exit the menu the 3ds freezes and the only thing that works is the rosalina menu and you have to either stop inputredirection, or restart the 3ds. From my testing this happens regardless of if you have started a stream on the computer or not. I do plan on firing up wireshark and seeing what the network traffic is like when it happens.

OS: Ubuntu 22.04 LTS NTR-HR: v0.2.1.2 InputredirectionFinalv3 Linux Luma3DS v11.0 NTR Viewer: CuteNTR

Professor-Marill commented 1 month ago

After some testing it appears that it happens it appears to happen if you remainin the NTR menus too long as well. I will start with updating Luma on my N3DSXl.

xzn commented 1 month ago

To change viewer's port, you will need to use a viewer that support changing the port number on the PC's side. (Currently that include Snickerstream and ntrviewer-hr)

For 3DS hanging when staying in menu too long, is there a specific game that you are running when it happens? I've had reports that some Kirby games would hang in that way, and it also happens with Rosalina menu as well so I'm not sure how to fix it.

Note:

For Snickerstream the port number on 3DS NTR-HR setting and PC side must match.

For NTRViewer-HR, just change the port number on PC side and hit Connect.

Examples:

image

image

Professor-Marill commented 1 month ago

It happens anywhere if input-redirection is enabled and you press x and y to enter the menu, stay there for 20 seconds or more and then leave. The wire-shark data suggests that it freezes when the 3ds loses access to the WiFi. What games they were playing were most likely irrelevant. It was more likely that they were playing with input-redirection enabled and for some reason the 3ds dropped the connection. Its likely that the rosalina menu was also coincidental, because I am still able to ping ans send data while the rosalina menu is open.

Whenever you enter the NTR menu, it immediately stops sending packets over the network. No other device on that network can see it anymore while the menu is up. That's why it stops streaming when you enter the menu. This is most likely the case for the port change as well. When you hit the apply button for some reason it stops sending packets for a brief period of time. Can you point me in the direction of the source code for the NTR menu so I can take a look at what it does. Also would you mind specifying what Luma version you are running as well as what console so we can eliminate any variable causes.

I would also like to see if you can reproduce the steps. So here is what I did. After turning on your 3ds, run BootNTR 3.6 HR, then go into the rosalina menu an turn on input-redirection. After its on go into the NTR menu for about 20 seconds, and then leave the menu. It should be frozen. Another way to reproduce is to repeat the first two steps but go into the settings menu and turn off the wireless communications.

As for a way to fix it. I think its more important for people to know what the issue is and how to resolve it. Hope this helps. Thank you for you patience and the quick reply.

xzn commented 1 month ago

I tried following your steps:

  1. Choose NTR 3.6 HR from BootNTR
  2. Enable input redirection in Rosalina
  3. Go into X+Y for more than 20 seconds

I've only tested this on the home menu and my 3DS doesn't freeze. (Also I don't lose wifi when doing this.) I'm on Luma3DS 13.2.1 and my kernel version is 2.57

I'm not sure about going into wireless settings and disabling wifi. Doesn't that reset your console so you have to start NTR-HR again?

I can ping my 3DS while the X+Y menu is opened, and my X+Y menu code is similar to the Rosalina menu one (as in, I copied some code from there.) However the current release version does have a bug (which is a bogus while loop where I forgot to actually access the address and were testing the address itself) that's fixed in the latest prerelease.

Which version of NTR-HR are you using? If you are already using the prerelease version then I don't know what's going on..

Edit:

For the prerelease, the menu source code starts at:

https://github.com/xzn/ntr-hr/blob/291376ab99a68904bc35f502e2945001110c2f2b/source/menu/main_menu.c#L720

The 3DS pausing code is here:

https://github.com/xzn/ntr-hr/blob/291376ab99a68904bc35f502e2945001110c2f2b/source/menu/ui_menu.c#L119

Another change in the latest prerelease I believe is the lack of busy loop (sleep is used instead) when waiting in the menu. Maybe that changes thing as well?

See

https://github.com/xzn/ntr-hr/blob/291376ab99a68904bc35f502e2945001110c2f2b/source/menu/ui_menu.c#L195

Professor-Marill commented 1 month ago

It does appear to be related to one of those. I downloaded the latest Pre-realease and it does solve the issue. Seems like that issue is specifically a problem in v0.2.1.2 and below and will stay fixed when a new release is published. Thank you for your assistance.