Homebrew Infra Red Resource Thread

  • Thread starter Thread starter RedHat
  • Start date Start date
  • Views Views 63,848
  • Replies Replies 226
  • Likes Likes 10

Would you like to see development for IR homebrew (CPP or not) on the 3ds?

  • Yes, and I have the CPP!

    Votes: 41 19.2%
  • Yes, why not!

    Votes: 167 78.4%
  • No.

    Votes: 5 2.3%

  • Total voters
    213
I think we can safely assume that any game that uses the circle pad pro can work with ir:USER (considering it's the service that the CPP is used with), so here's a list I found of titles that should be compatible (according to http://nintendo3ds.wikia.com/wiki/Circle_Pad_Pro, so take it with a grain of salt):

  • Monster Hunter 3 Ultimate
  • Ace Combat: Assault Horizon Legacy (Japanese version only)
  • Resident Evil: Revelations
  • Metal Gear Solid: Snake Eater 3D
  • Kid Icarus: Uprising
  • Kingdom Hearts 3D: Dream Drop Distance
  • Dynasty Warriors VS
  • Nano Assault EX
  • One Piece Unlimited World RED
  • Samurai Warriors Chronicles 2nd
  • Steel Diver: Sub Wars
  • Monster Hunter 4 Ultimate
  • Legend of Zelda: Majora's Mask 3D
  • IRONFALL Invasion
  • Code Name: S.T.E.A.M.
  • Shantae and the Pirate's Curse
  • Moon Chronicles
  • Picross e (Japanese version only)
  • Galaxy Force II
  • After Burner II
  • Final Fantasy Explorers
 
You won't have to test the standard titles (e.g. camera, ar games, music etc). They don't work.
At least on a 2ds they don't. But since we are on the same fw it shouldn't work for you either.
It does start with them and it detects the new 3DS buttons but it doesn't turn the IR sensor on.
 
yea i miss messing with tv's in laundromats with my psp back in the day.
i hope this could become full fledged later.
my bright idea. when this becomes more developed this could become a 3ds applet so that it could be launched even while your in a game. (ain't i smart?:teach:) lol
 
  • Like
Reactions: VegaRoXas
Works:
The Legend Of Zelda: Ocarina Of Time 3D (digital)

Doesn't work:
Fantasy Life (physical)
Urban Trial Freestyle (crashed the app; got a black screen on the top and white on the bottom) (digital)
Soccer Up 3D (digital)
Youtube (digital)
Mario Golf: World Tour (digital)
Mario Kart 7 (physical)
Tomodachi Life (crashed the app) (physical)
Kirby Triple Deluxe (crashed the app; got a black screen on the top and white on the bottom) (physical)
Paper Mario Sticker Star (physical)
Super Smash Bros (crashed the app) (physical)
Animal Crossing New Leaf (crashed the app) (physical)
Pokemon X (physical)
Pokemon Y (physical)
Ironfall Invasion (digital)
Super Mario Bros (VC) (digital)
The Legend Of Zelda (VC) (digital)


Dang, was hoping I'd find something that worked, oh well.

Games are all US by the way.

--------------------- MERGED ---------------------------

By the way @RedHat, I'm using a 10.1 2DS with Ironhax/Tubehax/Themehax
 
Last edited by Megalegacy98,
I've tested EUR Cubic Ninja retail on both the freshly installed Ninjhax 2.1 and Themehax, and it worked! Add that one to the list too. EDIT: Also you can add mine as working with OOT as well.

Also, if you need someone to test MGS:3D, I can do that.
 
Grr. I'm at a stalemate trying to code the CPP support in my quick and dirty app. Because much of the infrared communication is undocumented, it is hard tell what services are used. (Debating between calls of IR:U and IR:USER as they both seem to have their own special functions, but 3dbrew leads me to believe its IR:USER)

Because I have a CPP, here are my findings related to it:
  • SEARCHING
    • The 3DS's IR port will blink (maybe twice a second or less?) in order to turn on the CPP. When a button is pressed on the CPP, it reads the blink and turns itself on. (Used a phone camera for this)
  • GETTING INPUT
    • The 3DS's IR port will blink (at a slower rate than searching, maybe about once per second or a little faster?) in order to keep the CPP "alive" (or it will fall into an idle mode). Once the 3DS can't read the CPP, the CPP "disconnects" and must be re-initialized with the "faster" blinking. (also used a phone camera for this)
  • NOTES
    • The CPP has a bps of 96000. I assume no phone camera would pick this up, so it might be useful to have a fast IR port on a PC to test interaction.
This makes some sense (maybe) as to why the CPP has a battery life of, like, a million years as well because it is almost never on.
I've tested EUR Cubic Ninja retail on both the freshly installed Ninjhax 2.1 and Themehax, and it worked! Add that one to the list too.
Can do.
 
It's working on Ironhax if booted through one of the supported games. @RedHat
Yup, even (finally) works on my end. So glad to see that IR flash! Seems like it is now *hax independent but has everything to do with the game it is launched with.

Next stop: read from the IR port.
WE CAN DO IT!
 
I'd suggest breaking it up into separate goals, especially since they use different services:

  1. Communicate with another 3DS using IR
  2. Communicate with the Circle Pad Pro
I imagine Smealum and co. will eventually add Circle Pad Pro support into ctrulib anyhow.
 
  • Like
Reactions: RedHat
I imagine Smealum and co. will eventually add Circle Pad Pro support into ctrulib anyhow.
Yeah, I could see that. Problem is, smea is really tied up with school so it's hard to tell his release dates for things (we all want some of that regionFIVE and hax 2.5, ya know). Anyway, I think I have seen more progress with 3DS IR in the last two days then in a long time. B-)
  • Communicate with another 3DS using IR
  • Communicate with the Circle Pad Pro
Sounds like a plan. With the CPP (I think) all the 3DS does is read from the port, so it might be easier to start there. Of course, any development at all with IR is super helpful in this thread!
 
If did some hardware research (and yes, I actually read the fucking manual)

1.Nintendo 3DS IR controller IC is produced by NXP and bears the markings: S750 0803 TSD031C
2. My 3dsxl system manual say the following thing:"Infrared Communication: within 8'' (20cm). Depending on surrounding conditions, the distance my be less."

This is quite a big limit, so no tv remote and multiplayer will be quite annoying.

And about the software access, oot and cn should to be tested both with hax installed and unmodified.
I can test some titles on my sky3ds later.
And for those who asked three pages earlier, once hbl is loaded you can freely eject your cn/oot game cartridge.
 
Last edited by the assaf,
So does anyone here know how to set up a send/recieve command? I've been fiddling around with the source and looking at both ir.h source + the 3DSbrew but it's proving a tad difficult.
I currently don't. Whenever I try to use the functions they end up blocking and freezing my app (have to hard reboot)... Furthermore, setting up calls for ir:USER is a bit out of my expertise :dry:.

NOTE: Using a camera, the 3DS pulses for about 1/30 of a second every .6 of a second when using the CPP, in case that helps anyone...
 
I currently don't. Whenever I try to use the functions they end up blocking and freezing my app (have to hard reboot)... Furthermore, setting up calls for ir:USER is a bit out of my expertise :dry:.

NOTE: Using a camera, the 3DS pulses for about 1/30 of a second every .6 of a second when using the CPP, in case that helps anyone...
Just tried with CN EU cart, perfectly works!
Could you implement a custom blinking pattern feature (maybe with a cfg file)?
 
  • Like
Reactions: VegaRoXas
some test on sky3ds:
pokemon alpha sapphire-AD
luigi mansion-dark moon-not showing details
Super Smash Bros.-not showing details
kingdon Hearts 3D-AD
zelda-success
super mario 3D land-AD
new super mario bros 2-AD
mario kart 7-AD
One Piece-AD
paper mario stiker star-AD
kid icarus-not showing details
star fox 64-not showing details
Donkey Kong-AD
Resident Evil-not showing details
Bravely Defualt-AD
pokemon Y-AD
kirby Triple deluxe- up screen black, down screen white

apparently games that have CPP support don't work on test homebrew- showing glitchy screen, after pressing select+start showing glitchier screen.
 
Could you implement a custom blinking pattern feature (maybe with a cfg file)?
Right now all I do is turn on and off the LED using IRU_SetIRLEDState(0x1) or IRU_SetIRLEDState(0x0) (look at the source code, you might be able to implement it yourself). The application uses vsync, so the maximum times the LED can be blink is about 30 blinks per second (because there can be about 60 IR operations per second). I don't know if that is fast enough for any sort of IR control for anything. Maybe someone who is good with C multi threading (if that is even available on the 3DS) can implement something greater than 60 times per second by using blinks and some form of sleep function. At that point can we have custom blink patterns and MAYBE (huuuuge maybe (like realllllllly huge maybe)) control a TV or IR device with it!

showing glitchy screen, after pressing select+start showing glitchier screen.
I get that too. Really weird.
 
Right now all I do is turn on and off the LED using IRU_SetIRLEDState(0x1) or IRU_SetIRLEDState(0x0) (look at the source code, you might be able to implement it yourself). The application uses vsync, so the maximum times the LED can be blink is about 30 blinks per second (because there can be about 60 IR operations per second). I don't know if that is fast enough for any sort of IR control for anything. Maybe someone who is good with C multi threading (if that is even available on the 3DS) can implement something greater than 60 times per second by using blinks and some form of sleep function. At that point can we have custom blink patterns and MAYBE (huuuuge maybe (like realllllllly huge maybe)) control a TV or IR device with it!


I get that too. Really weird.
Or turn the IR on and off with button press / hold...
 
Or turn the IR on and off with button press / hold...
Sure, I'll compile that in a couple seconds as another branch.

EDIT: I'll also see if I can make one without a GUI that will run as fast as possible.

0xd8e06406:
Module: 25 (SRV)
Level: 27 (Permanent)
Summary: 7 (Invalid Argument)
Description: 6 (Access Denied)

0xd8e007f7:
Module: 1 (Kernel)
Level: 27 (Permanent)
Summary: 7 (Invalid Argument)
Description: 1015 (Invalid Handle)
This was a few pages back, but where did you look up the error codes? I got a new one: e0e01bf2.
 
Last edited by RedHat,
  • Like
Reactions: SomeGamer
Sure, I'll compile that in a couple seconds as another branch.

EDIT: I'll also see if I can make one without a GUI that will run as fast as possible.


This was a few pages back, but where did you look up the error codes? I got a new one: e0e01bf2.

e0e01bf2:
Module: 6 (OS)
Level: 28 (Usage)
Summary: 7 (Invalid Argument)
Description: 1010 (Misaligned Size)

I have a short C program that spits it out, then I refer to http://3dbrew.org/wiki/Error_codes. I suppose I could add some more support to it eventually to add these strings, but I'm lazy at the moment.

Warning: very dirtily coded program ahead.

Code:
#define GET_BITS(v, s, e) (((v) >> (s)) & ((1 << ((e) - (s) + 1)) - 1))

int main(int argc, char** argv)
{
    if (argv[1])
    {
        int raw = 0;
        sscanf(argv[1], "%x", &raw);
        int module = GET_BITS(raw, 10, 17);
        int level = GET_BITS(raw, 27, 31);
        int summary = GET_BITS(raw, 21, 26);
        int description = GET_BITS(raw, 0, 9);

        printf("%08x:\nModule: %d\nLevel: %d\nSummary: %d\nDescription: %d\n", raw, module, level, summary, description);
    }
}
 

Site & Scene News

Popular threads in this forum