-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Circle Pad Pro example on New 3DS #151
Comments
I managed to catch some of my "flickering" readings using Example of a bad read:
Example of a good read:
Other than the differences in If there are no "readable" aspects of the code that might signal incorrect reads (and we know both Old3DS and Citra can work just fine with this example), that means that the issue may not be with read data and such. Maybe a "wrong" order of execution? An error in timing synchronization? |
I love wasting time on this. More testing, more info. Other than randomly changing the timings and other configuration values used (which yielded no observable result) I also changed my testing routine to trigger correct readings. In particular, I am avoiding using the C-Stick to read changes (which I basically had to jam everywhere each run), and have instead resorted to press one shoulder button (ZR to be exact) so that testing runs are more consistently performed. With this simple change I noticed an improvement in the "lifetime" (it lasts for more packets/seconds, which maybe has to do with some sort of limit to the possible refreshes the whole thing can do) of the IR reads, but I've also noticed one more important characteristic of this behavior. It seems that after my readings die out the received data is NOT put at a default "all false" state, which is what I had originally thought. Rather, the memory for the RecvBuffer is simply never updated, which means that even though the system detects a packet, nothing new is generated. I noticed this behavior since This effectively means that not only is the system not reading input, but it is also simply not updating the buffer in any way, which made me think that this might be neither a synchronization nor a configuration issue (keeping in mind that the Frustrated, I decided to take a bit too far the words by @AzureMarker in this comment, and
with my recv requests. As such, I am currently connecting and disconnecting from the IR device each iteration of the loop which, as violent as a solution it seems, is actually giving some pretty stable results (mainly because the connection handshake is simulated on New3DS and almost never fails). I don't believe this is an actually viable solution since, even though my system responds well to it, the average Old3DS with a physical CPP probably can't handle this many re-tries, but it's an interesting note in this research nonetheless. |
While implementing the CPP support (ir:USER service) in #86, we found that the New 3DS has some issues getting the demo to work.
The ir:USER and ir:rst services can't both be enabled, so we took some steps to prevent ir:rst from starting, but maybe more needs to be done here?
The CPP has been seen to connect with the New 3DS, but input packets stop working very quickly. We should investigate further.
Note: I (@AzureMarker) only have an old 3DS and CPP, so others will need to help debug on the New 3DS platform.
The text was updated successfully, but these errors were encountered: