Wireless Xbox360 controller on a PC, without the commercial dongle

Update: I updated the post to mention using two 1N4001 or equivalent diodes instead of just one. Two diodes in series take the voltage down to almost exactly 3.3V, which is the required voltage for the RF board. I also added actual photos of the wiring now, as I’ve redone it (hence the messy wires from re-soldering Etc.)

Update 2: It seems that syncing is impossible directly from the RF module and PC, but if the wireless controller you use was already synced with the RF module, and hasn’t been re-synced with another Xbox since, it will work. However, I am working with another modification I found which adds LED and sync enable functions by means of a serial connection with a PIC16F628A μC. You can find the related forum post here: Link (and see how my thrown together version of it looks [here] and [here]. Messy, I know :P).

Update 4: Alternative means of syncing mentioned in the comments by George.

Update 5: Further testing on alternative syncing method shows how non-play & charge kit compatible peripherals can be synced -without- a microcontroller. Thanks, Pat.

Yesterday I had a thought – I don’t like having a wire to the Xbox360 controller I use for games on my PC. As I’m tight on cash right now I figured I’d have a quick look around to see if there was a way to use a wireless controller on the PC without going out and buying the official wireless transceiver. I was thinking that there may be some other RF transceiver that could be modified or adapted to work with it. As it happens, there -kind of- is.

Now if you’re like me, and have a spare wireless controller sitting around, it’s likely you have a dead red ringed Xbox 360 sitting in a cupboard. This is the key to getting the controller working with a PC. The wireless transceiver in the Xbox can be made to work with a little modification. Well, I say modification but I really mean little more than soldering a few wires and altering a .inf file. Let’s get on to it:

What you’ll need:

  • Dead/Red Ringed Xbox 360 you don’t mind cannibalising.
  • Any old USB cable you don’t mind cutting.
  • Two diodes – a couple of 1N4001 or equivalents will do. Basically it’s just there for a forward voltage drop WHICH IS VITAL (unless you don’t mind burning the board out and killing your USB controller).
  • A soldering iron.
  • Solder.
  • A brain.

Taking the Xbox 360 apart:

I’m not going to reinvent the wheel here. Anandtech.com has a perfectly good explanation of how to do this. Take a look here: http://www.anandtech.com/show/1864/inside-microsoft-s-xbox-360/3

Pro tip: Instead of a small plastic knife that they say to use to ping open the case, you can either buy a tool for it, make one out of an old CD/DVD spindle cover, or just rip the damn thing open with a screwdriver (after all, it’s dead right?).

The part you’re looking for:

It’s the board on the front of the machine where the ring and power button are. It’s held on by 3 screws, so be sure to pop the little plastic part off to find the third screw. Don’t go trying to pry it off like I almost did. Once the screws are out it just unplugs. And that’s your part.

The soldering part:

As you’re reading this and have an interest in it I’ll assume you know how to cut, strip, and tin your wires, so I’ll not bother with that part. Instead I’ll assume you’re sitting there with an RF board, a USB cable ready for soldering, a diode, and a hot soldering iron. Basically, follow the picture (click for bigger image):

xbox360_rf_module_wiringAnd make it look like this:

20110307_xbox360_rf_module_wiring_1

Beginner’s mistake/brain fart moment warning: Make sure the diode is the right way around.

I chose to cut the diode legs down a fair bit and soldered it off to the left of pin 1, along the bottom edge of the RF module. You might like that idea, you might not. It’s up to you how you solder it. I could have been neater, but I honestly didn’t see much point. I’m not going to make a project box for it or anything, and it’ll be hidden away somewhere so practicality > looks.

I will mention again that the diodes are ABSOLUTELY NECESSARY. The whole board runs on 3.3V while USB standard is 5V. The diodes that you put in series on the power line will lower the voltage to tolerable levels for the board – almost exactly 3.3V, to be honest (my multimeter is showing 3.34V). From what I’ve read in comments in various places the RF board likes to burn out quite spectacularly without a diode in place, taking the USB controller it’s connected to with it. I was paranoid enough about it to actually test the unit on my old Macbook (that I neither care about nor use) before trusting it on my main machines.

Once you have that all soldered up, you have yourself a wireless dongle for your Xbox 360 wireless controller, something like this:

xbox_wireless_controller_adapter_front

Congratulations. Now for the software.

The software part:

This bit isn’t all that scary. You just need to modify the .inf file that comes with the official Microsoft drivers to allow for the different PID of the RF controller of the Xbox 360. First, if you don’t have it already, download the Xbox 360 Accessories Software for your operating system from the Microsoft gaming software download site, and install it. Now, before plugging the RF module in, you need to do that modifying I mentioned. Head over to c:Program FilesMicrosoft Xbox 360 Accessories (or wherever you installed it to) and make a backup of Xusb21.inf before opening it in your favourite text editor (Notepad++ is nice for it’s ini support with collapsing headers etc).

The parts you’re going to modify are under the headers [MSFT.NTx86.6.0], [MSFT.NTamd64.6.0], [MSFT.NTx86], and [MSFT.NTamd64].

What they’ll look like/similar to:

%XUSB21.DeviceName.Wired%=CC_Install, USBVid_045E&Pid_028E
%XUSB21.DeviceName%=CC_Install, USBVid_045E&Pid_0719
%XUSB21.DeviceName.Wired%=CC_Install, USBMS_COMP_XUSB10
%XUSB21.DeviceName%=CC_Install, USBMS_COMP_XUSB20
%XUSB21.DeviceName.Jump%=CC_Install, USBVid_045E&Pid_028F

What you need to change them to:

%XUSB21.DeviceName.Wired%=CC_Install, USBVid_045E&Pid_0291
%XUSB21.DeviceName%=CC_Install, USBVid_045E&Pid_0291
%XUSB21.DeviceName.Wired%=CC_Install, USBUNKNOWN
%XUSB21.DeviceName%=CC_Install, USBUNKNOWN

After you’ve saved the changes, go ahead and plug in the RF module. Chances are it will complain that drivers can’t be found. Cancel out of the hardware wizard and head over to the device manager and find the Unknown USB Device, or whatever it is your flavour of Windows has decided to call it. You’ll know which one it is by the yellow !triangle! (and if you don’t have a clue what I’m on about, what are you doing trying to hack an Xbox component on to a PC in the first place?). Give the device a right click and update it’s drivers, but tell it you have a disk and navigate to the Xusb21.inf you modified. It might complain about unsigned drivers, it might not, but if it does just tell it to continue. At the end of it all you’ll have an Xbox 360 Controller for Windows device with a Hardware Id of USBVID_045E&PID_0291 in your Device Manager. If not, reboot.

After all that, try syncing your Wireless controller with the unit. With any luck you should have a controller showing in your gaming devices. Give it a quick test with the diagnostics, maybe calibrate it etc.

And you’re done. On to wireless gaming. (o/

Any questions feel free to ask in the comments below and I’ll see what I can do to help.

Advertisements

325 thoughts on “Wireless Xbox360 controller on a PC, without the commercial dongle

    1. dilandou Post author

      Unfortunately, probably not. The PS3 lacks the driver support for the module. The only way I could think of doing it would be to add an extra abstraction layer to convert the RF module output to Bluetooth, and literally emulate a Dualshock controller. That would require a crapload more reverse engineering of both the module, and Dualshock. Given time, maybe, but ultimately you’d end up paying more for the components than the controllers are worth.
      Alternatively, maybe, when custom firmwares are more predominant for the PS3, someone can make driver support for the RF module.

      Reply
      1. george

        There are drivers out there to make a ps3 controller work with a usb Bluetooth adapter.

      2. dilandou Post author

        There are, yes, but I’m pretty sure he was asking about using an Xbox 360 controller on a PS3, not a PS3 controller on a PC.

      3. Anon

        OTGhost, then the ps3 probably has some sort of hid driver you can use to connect it. It would be allot more work and would rely on one of the drivers it does have, and you converting the signals in software in the otghost and piping it out the device in the format the ps3 driver supports. Allot more work but feasible.

  1. george

    If you have a play and charge kit you do not need to do the extra soldering to make it sync. plug the controller into the play and charge kit and turn it on while your homemade dongle is hooked up and it will sync by itself.

    Reply
    1. dilandou Post author

      Cool, I did not know that. Is this confirmed by you yourself, or something you’ve read? Also, do you know how it works? I wasn’t aware that the PC drivers could actually communicate with the module in that way, considering even the Xbox uses a separate method away from USB to send it commands.

      Reply
      1. john doe

        this does work i just confirmed it as well. so no need to go through the trouble to get the sync function to work. unless of course you want it to.

        and the software change just to clarify, line 5 you do delete out of each part. just incase anyone isn’t sure.

    1. dilandou Post author

      You can use any of the digital I/O pins available. The code doesn’t use any pin specific or hardware functions (other than serial, which can easily be removed as it’s just there for debugging/notification).
      My code uses pins 2, 3, and 4.

      Reply
  2. soapy138

    Is there any way to mod the drivers so you can plug use a wireless controller w/ the play and charge kit as a gaming controller? i’ve been forum searching like crazy and this seems like the closest anyone has come.

    Reply
      1. george p

        I think he means to use the play and charge kit without the RF receiver, to make the wireless gamepad into a a wired one.
        It doesn’t work like that as far as i know.

  3. James

    Excelent Tut i done this and it works brilliant, Alltho i used 3 diodes to bring the voltage to 2.7v and have not had any problems even with the distance it will work at, Also removed the plug casing on the other side and soldered the wires straight through the board. Thanks very much for this !!!! 🙂

    Reply
  4. Lee Curtis

    Hi
    My rf module isn’t turning on but the computer beeps/sounds when i plug it in. I did this befor and it worked perfct but this is the second rf module i’ve tried today. Any tips?
    Thanks.

    Reply
    1. dilandou Post author

      Depends on what you mean by not turning on. If the computer acknowledges the hardware, and loads the drivers, it’s “on”. The module itself won’t show any visible signs of being powered at all without additional circuitry.

      If you mean your controller isn’t working with the module, check out the ways to sync the controllers suggested by others in the comments (links to the specific comments are in the updates at the top of the post).

      Reply
    1. dilandou Post author

      You might want to try removing the device from device manager after restarting into safe mode (tends to be extra sure it’s gone). Also, dredge through the oemxxx.inf/pnf files in your Windowsinf folder for any of the original files from the first time it added the drivers. If you find them, rename/delete/move them, and try again. Failing all that, rinse and repeat from step one.

      Reply
  5. RJ

    Excellent tutorial – actually in english 🙂

    I do have a question though before I actually do this, are there any other alternatives? Would it be possible to make a wireless controller into a wired with the remains of a wired controller?

    The reason is, my PC controller is messed up (triggers loose, stick falls off) and I have two perfectly good wireless controllers.

    Reply
    1. dilandou Post author

      You should be able to gut a wireless controller for parts if you’re a dab hand with a (de)soldering iron. The components -should- be the same between wired and wireless. It would be a lot of work, though (the analog sticks have 14 pins each to (de)solder, for example).

      (And wireless is so much nicer anyway, right?)

      Reply
  6. Shawn

    My 360 died, same E74 vid problem as many others. I reflowed 5 times but thanks to Microsoft not putting enough solder on the board, it finally quit for good. I was able to hack the RF board as you said. Now I have wireless control and I can stick to my new life philosophy, never give Microsoft another dime!

    Reply
  7. case378

    ok now reading and doing all this has just been awsome, i just now finished getting mine together, waiting for silicone to dry. now before i do the final plug n and test i was wondering will heat destroy/affect the diodes and instead of getting to crazy with soldering which im no good it i simply took the port itself from the xbox n wired everything to it so alls i have to do now is plug n my card and go, Right? should work that way im assuming but figured id get a second oppionion first thanks for this fourm as well probly the only one worth a darn

    Reply
    1. dilandou Post author

      On the one hand, heat will affect diodes, yes. But in this application, and unless you’re planning on leaving everything in an oven, it’s not going to be noticeable. Unless you’re worried that you’ve destroyed the diodes during soldering? (Which is unlikely unless you’re -really- club handed)
      Beyond that, so long as you make the file adjustment, it’s time to plug it in and point it at the right driver, yes. Hope it works for you. And I’m glad you appreciate this page. 🙂

      Reply
  8. case378

    ok so i pluged it in and did the files n every thing seems right, the comp no longer says unidentified hardware n yet it still seems to be missing something any suggestions?

    Reply
    1. dilandou Post author

      Depends on what you mean “missing something”. In your device manager you should have Microsoft Common Controller For Windows Class -> Xbox 360 Controller for Windows. If that’s showing up then it’s working as it should be. From there you need to sync the controller to the unit, if it isn’t already. If you haven’t synced the controller to any other Xbox, other than the one you took the RF unit out of, it should already work when you power it on.

      Reply
  9. case378

    i get a this device can not start (code10)? and in my manager it shows me its there but when i goto the game controllers to configure it shows nothing? i at one point had it configured to this rf but then changed but i tried doing the could it be because i have windows 7 64-bit and not 32. also when i go into the driver details it shows the c:windowssystem32DRIVERSxusb21.sys but it also has a c:windowssystem32Wdfcolnstaller01009.dll showing, is this normal? iv run out of ideas im pretty sure iv done every thing else and iv gone over and over this whole page to make sure i didnt miss something or tried all other forms. alright well iv spent the last hour double checking every thing n iv managed to get the yellow triangle gone in my devices but its still there in manager im totally clueless now.

    Reply
    1. dilandou Post author

      It won’t be a 64bit problem, as I’m running Windows 7 Pro 64bit myself. Both of those files are normal, too. A device not starting with code 10 is defined as an error that doesn’t have enough information to diagnose. Usually, however, it’s a driver not initialising correctly.

      As annoying as it may be, I would suggest starting the software side of things from scratch again, as I suggested to DEATHoWAR further up in the comments. Also, double check your file modifications making sure that you replace the instances of 5 lines with 4 lines.

      Give it a try and see how it goes. Hope you get it working.

      Reply
  10. Dan

    So I’m curious since its not super clear, With the UPDATE 4 Method of sync’ing is the Arduno required? or just donor usb cable and the diode?
    I have a limed number of wireless controllers and 2 360’s plus thinking of this mod for the PC. so the controllers hop around to different homes.

    Reply
    1. dilandou Post author

      Unfortunately I can’t confirm this myself, as I don’t own a play and charge kit, but so far as I can tell it means you don’t need the Arduino. All I can say is to give it a try and see. To be honest, unless you have an Arduino sitting around, the play and charge kit is the cheaper option to try.

      Reply
      1. Dan

        Yep My thoughts too. I do have a play and charge which I could use to sync up to 4? wireless controllers and 2 RF boards so I think I might give it a go.

  11. Pingback: Rip the pieces out of your dead Xbox360 to use the wireless controllers on your PC - BuildLounge » BuildLounge

  12. Pingback: Reclaim the wireless controller module from a broken Xbox 360 - Hack a Day

  13. Pingback: Reclaim the wireless controller module from a broken Xbox 360 » Geko Geek

  14. Kuba

    Hi, I’ve done similar project some time ago. I’ve bought RF module from broken Xbox, attached ATTiny13 (you don’t have to use expensive Arduino or it’s clones ) with button for syncing to it, added diodes and connected to motherboard in my computer. Works like a charm.
    If you want .c file or .hex file for attiny13, just tell me.

    Photos:


    Reply
    1. dilandou Post author

      Aye, I have a similar setup now (albeit still external) using an ATTINY45. The Arduino was only originally used as a temporary stop-gap because I had a couple lying around.

      Reply
    2. Kevin Groce

      I noticed you used the test points for hooking up the TINY. Do you have a list on what the TPs are or can you tell me what the equivalent pins on the modules input connecter are?

      Thank You 🙂
      KG

      Reply
  15. Gabriel Cardoso

    Did the same too 2 year ago! 😀
    Was pretty hard to get the syncing done with the arduino (not much information out there), but once rocking’, always rocking’!

    Reply
  16. Pingback: Reclaim the wireless controller module from a broken Xbox 360 | ro-Stire

  17. Pingback: Reclaim the wireless controller module from a broken Xbox 360 « tekvax

  18. Pingback: Reclaim the wireless controller module from a broken Xbox 360 | Orange Claymore Red Slime

  19. Pingback: Reclaim the wireless controller module from a broken Xbox 360 « Hackaday « Cool Internet Projects

  20. Darth Disco

    Fantastic Hack.

    But you may find you have limited the communication distance with the USB cable glued to the front of the Bluetooth antenna. Also, that antenna is directional. You will get the most distance with the antenna facing the controller.

    Reply
  21. Pingback: Reclaim the wireless controller module from a broken Xbox 360 (Hack a Day) | Greg's Geek Cast

  22. Hal

    So is there any way to get the lights on the RF to come on indicating which ones are connected? Is that something that would need to be done in the ATTiny/Arduino?

    Reply
    1. dilandou Post author

      It would be microcontroller based, yes ,unless the module works differently when syncing with the play and charge kit (which I don’t have so haven’t tested). The module -does- use the data pin bidirectionally, so it would be a case of figuring out what it’s sending back after a successful sync, if it does, or which command triggers it to tell you what’s connected. After that there are commands to tell it to turn on specific LEDs etc.

      Reply
  23. Pingback: Reclaim the wireless controller module from a broken Xbox 360 « Gadgets « The Depot of Talk

  24. Pingback: Reclaim the wireless controller module from a broken Xbox 360 | CisforComputers

  25. Pingback: Nerd News » Blog Archive » Беспроводной геймпад от Xbox360 на PC

  26. Pingback: Reclaim the wireless controller module from a broken Xbox 360 « « SNAP-DIYSNAP-DIY

  27. Robin Chan

    Hey!

    Just got this working. I too can confirm that the play and charge kit syncs the pad.

    sorry about the shit quality. Filmed on an iphone 😛

    I didn’t use a diode. Instead the Arduinos 3.3v rail works flawlessly.

    I used it on the same USB hub, I’m not sure if powering the board totally independently would work however.

    Thanks man this saved me £14.

    Excellent work!

    Reply
    1. dilandou Post author

      You might want to look out using the 3.3v rail from the Arduino to power the RF module. It’s only supposed to source ~50mA, and the RF board registers as 260mA according to the hub in device manager (although how accurate that is, I have no idea).

      Reply
  28. Biased

    So I installed the diodes, but when I used my multimeter to test the voltage, it was still supplying 4.5 volts. Why is there no voltage drop?

    Reply
  29. Pingback: Usar el control inalámbrico del XBOX 360 con la PC : Tech-Freaks

  30. Pingback: Adaptador casero para usar el control inalámbrico del XBOX 360 con la PC : Tech-Freaks

  31. Ryan Gibson

    Hey,

    Great build you’ve put together here. Stunning effort.

    I’m always a guy for questions so do you have an email I can contact you on to fire a few your way?

    Thanks

    Ryan

    Reply
    1. dilandou Post author

      I do, yes. But if they’re questions about this particular hack I’d find it more productive to keep it in comments. That way everyone gets to share the wealth, so to speak.

      Reply
  32. Pat

    if you have a device that you cant plug in with the play and charge kit (to get it to sync without a microcontroller), plugging the kit into a controller will sync everything that is trying to sync! tested with my rock band 2 drum set.

    Reply
    1. Pat

      by the way, thank you for this tutorial this is wonderful! i love anything that keeps me from paying more microsoft tax (and i probably wouldve fried my stuff thinking the 5 volts was fine)

      Reply
  33. SpikedCola

    Hi there. 

    I really enjoyed reading about your adventures with the RF module. Ive saved some up from broken Xboxes and snooped the Argon bus with a logic analyzer to try to figure out the commands. Do you mind if I port your work over to a PIC and give it a spin?

    Also, I noticed youre storing commands as an array of binary values. While there is nothing wrong with this, storing them in hex is more straightforward when looking st the commands. To loop through the byte and set a data pin accordingly (pseudo-SPI almost), just do something like this:

    unsigned char cSync = 0x04;
    int i;

    for (i = 7; i > -1; i–;)
    {
        DATA = ((cSync & (1 < 0) ? 1 : 0;
        CLOCK = 1;
        CLOCK = 0;
    }

    We loop from 7-0, bit-shifting a 1 7-0 times to the left, and mask the command byte with this to check whether the corresponding bit is set or not. 

    Reply
    1. dilandou Post author

      Thanks for the tip, although a side note would be that the RF module dictates the clock, not the uC. Aside from that, feel free to port the code over. I would be interested to see it after (when I started with microcontrollers I played with PICs for a while but found AVR easier to work with).

      Also, am I reading that right and that you have a list of the commands available? Did you manage to figure out the replies from the module? It could be useful to see if it replies with current connection information and the like to closer emulate the xbox lights behaviour.

      Reply
  34. Dennis Skinner

    I’ve made a version of this for PICAXE 08M microcontrollers. It seems the 08M is obsolete these days (too bad, I have so many), but it should be easy to get it to work with another chip.

    In addition, I’ve added an option if you hold the button down, it will turn the controllers off.

    Here it is: http://pastebin.com/pRXQQ1ha

    Reply
  35. Pingback: XBOX 360 wireless controller module for OS X « repulsor.blog

  36. Meta

    Hi

    Do you have the source code to adapt to the PIC16F628A PIC16F88?. In my area do not sell el16F628A, if the 16F88 and 16F84A.

    PIC will adapt as many as you can so other people are more easily do the project.

    I am Spanish-Spain, use translate.google.com. Sorry.

    Good work friend.

    Reply
  37. engine24

    I cant get this to work with attiny13
    the code is from user cuba in post
    http://diru.org/wordpress/2011/03/wireless-xbox360-controller-on-a-pc-without-the-commercial-dongle/#comment-205
    #include
    #include
    #include
    #include

    #define B(x) (1<<x)
    #define sync_pin PB1 //sync pin
    #define data_pin PB3 //data line
    #define clock_pin PB4 //clock line

    #define digitalRead(x) (((PINB & B(x)) != 0)?1:0)
    #define digitalWrite(x, y) (y == 1 ? (PORTB |= B(x)):(PORTB &= ~B(x)))

    int led_cmd[10] = {0,0,1,0,0,0,0,1,0,0}; //Activates/initialises the LEDs, leaving the center LED lit.
    int anim_cmd[10] = {0,0,1,0,0,0,0,1,0,1}; //Makes the startup animation on the ring of light.
    int sync_cmd[10] = {0,0,0,0,0,0,0,1,0,0}; //Initiates the sync process.

    void sendData(int cmd_do[])
    {
    DDRB |= B(data_pin);
    PORTB &= ~B(data_pin);
    int prev = 1;
    for(int i = 0; i < 10; i++)
    {
    while (prev == digitalRead(clock_pin)); //detects change in clock
    prev = digitalRead(clock_pin);

    digitalWrite(data_pin, cmd_do[i]);

    while (prev == digitalRead(clock_pin)); //detects upward edge of clock
    prev = digitalRead(clock_pin);
    }
    PORTB |= B(data_pin);
    DDRB &= ~B(data_pin);
    }

    int __attribute__((OS_main)) main()
    {

    DDRB = 0b000000;
    DDRB |= 0b1;
    PORTB |= B(sync_pin);

    _delay_ms(2000);

    sendData(led_cmd);
    _delay_ms(50);
    sendData(anim_cmd);
    _delay_ms(50);

    for (;;)
    {
    if ( (PINB&B(sync_pin)) == 0 )
    {
    sendData(sync_cmd);
    _delay_ms(500);
    }
    }
    }

    Reply
      1. Moe

        I fixed this by enabling all the internal Pull-Ups. It looks like the i2c resistors are missing, but the internal are working fine for me.

  38. Jason

    Great project, thanks for all the work on this!

    I got this up and running on a msp430 over the weekend. Finally put that $5 launchpad to good use.

    Reply
  39. Chris S

    Awesome! It totally worked! After a little playing around with the methods here I got it to work. What I found that worked for me is I needed to plug the controller with the play and charge cable in first, then plug the adapter. Otherwise I get a “device not found” error when I plug in my controller and it doesn’t sync. I saved myself alot of money doing this. Thanks.

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s