not really...
Printable View
If I remember correctly,JABBERJAW gave Assayeah a prototype PS3 NegCon.Don't know what happened to it though.
Less simple way: http://ps3negcon.element42.org/
but not really that difficult!
Awesome stuff Element.
Stupid question : Do you think Sony may be interested to make a Negcon for the PS3 ?
Element42, I created account just to work on this project. I am going to build one or two of the adapters to try it with the UltraRacer Wheel. I am great at assembling and soldering but I don't know have to program the chip, are you planning to add more details about that on the site? Thanks for your work on this project.
I will be adding programming details, hopefully sooner rather than later!
I've just had a quick look at the UltraRacer wheel on amazon.com, shouldn't you be able to use a normal PSX->USB converter with this?
I tried the USB converter with no luck. I read somewhere that the Ultraracer was NeGcon compatible, that is what let me to here.
I recently saw a setup that had an xbox controller hooked up to a PC to play FPS shooters with a keyboard and mouse
would a similar set up work for a negcon
or PS3 to PC to PS controller converter to neGcon
and just have the program running on a PC/laptop instead of a board
(and yes the UltraRacer is only neGon compatible even though it shows the R2/L2 buttons)
zer:donutshen
(btw thanks for getting back to me ages ago element42)
I made one using the controller you want to use for the ps3,EXCEPT it is the nintendo version. I will put up a pic if i can, it is on my instant messenger actually. The controller is set into a box for stability ad extra buttons are added for functionality. It works very nicely actually.
The element 42 converter that he made me should work with that playstation version, I can test it out for you later, it is too early right now. Hopefully I can get online later, the computer has been on the fritz.
OK, tested it out, the playstation version works perfectly with the converter,
however
for wipeout hd, you are going to have issues without modification, barrel rolls will be too difficult for access (twisting left/right is way too slow), also, hitting pitch back and turbo is hard. I am sure it could be modified just like the n64 version that I made, adding a few buttons separate for pitch/ left right dpad, and it would be good to go. I am not 100 % positive this would work, but probably.
Thanks JabberJaw for testing the UltraRacer. I am planning to use the UltraRacer mostly for GT5.
Element42, I send you a PM.
I think, that the converter did not work for gran turismo 5, at least the demo version. I do not own the game, but will give it another shiot sometime soon, not tonight though, too tired. It worked fantastic for Ridge racer though, right on the money. The one I made also worked very well for that game.
Good luck doing Barrel rolls...:brickwall:brickwall:brickwall:brickwall
Yeah, I made a ps3 version of this controller, added buttons, a platform to put it in, and it works perfect for barrel rolls. however, as is, not too good for that game, but very smooth turning for other games though
Hi I am building element42's adapter as well. I have not done a faithful reproduction, but rather have built the basic interface, and am now playing around trying to get the best setup.
My goal is using the Ultraracer controller with this adapter. This is basically a NegCon with additional L2, R1 and R2 buttons.
Currently open problems (maybe somebody can help):
1) replicate the PS button somehow; this appears to be possible, according to this post and comments
2) somehow try to map the analog buttons to the analog L2 and R2 inputs. Does anyone know how the reportDescriptor is supposed to be set up for this? As of now I have L1 and I buttons on the negcon mapped to Z and Rz, but the PS3 does not like this setup (works fine on my mac though)
3) determine setups for a few games, then save them to the microcontroller's
flash memory and allow the user to cycle between different setups.
Any input is welcome!
CRP
interesting, very interesting. Will probably require some hacking of the v-usb code. EDIT: I see you've posted in the comments, I hope someone gets back to you...
I tried many different reportDescriptors trying to get the L2 and R2 analog, without any success; IIRC correctly most of the time it just refused to function as a USB device properly, I wondered if there are some limits to the v-usb capability.Quote:
2) somehow try to map the analog buttons to the analog L2 and R2 inputs. Does anyone know how the reportDescriptor is supposed to be set up for this? As of now I have L1 and I buttons on the negcon mapped to Z and Rz, but the PS3 does not like this setup (works fine on my mac though)
If you find solutions to either of these, please do let me know and I will include your code (with credit!).
I have added the following to the reportDescriptor:
With this, a PC (mac in my case) correctly recognizes the two analog buttons as Z-Axis and X-Rotation. Unfortunately, a quick test with Outrun shows that those two axes are not recognized on the PS3. I will continue trying, though ;)Code:0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x75,0x08, //Report_Size (8)
0x95,0x02, //Report_Count (2)
0x15,0x00, //Logical_Minimum (0)
0x26,0xFF,0x00, //Logical Maximum (255)
0x09,0x32, //Usage (Z)
0x09,0x33, //Usage (Rx)
0x81,0x02, //Input (Data, Var, Abs)
What have you done in the end with those analog buttons? Just left them digital?
EDIT: just found the following info:
Report data
idx Assign
0 LAnalogX
1 LAnalogY
2 RAnalogX
3 RAnalogY
4 equals 41?
5 equals 45?
6 Button flag - Triangle(0x01) Circle(0x02) Cross(0x04) Cube(0x08) L2(0x10) R2(0x20) L1(0x40) L1(0x80)
7 Button flag - Select(0x01) LAnalogClick(0x02) RAnalogClick(0x04) Start(0x08) Up(0x10) Right(0x30) Down(0x50) Left(0x70)
8
9
10
11
12
13 Up Analog (0x00 to 0xFF)
14 Right Analog (0x00 to 0xFF)
15 Down Analog (0x00 to 0xFF)
16 Left Analog (0x00 to 0xFF)
17 L2 Analog (0x00 to 0xFF)
18 R2 Analog (0x00 to 0xFF)
19 L1 Analog (0x00 to 0xFF)
20 R1 Analog (0x00 to 0xFF)
21 Triangle Analog (0x00 to 0xFF)
22 Circle Analog (0x00 to 0xFF)
23 Cross Analog (0x00 to 0xFF)
24 Cube Analog (0x00 to 0xFF)
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Motion X(H)
41 Motion X(L)
42 Motion Y(H)
43 Motion Y(L)
44 Motion Z(H)
45 Motion Z(L)
so it appears that one needs to send a report of 45 bytes in order to communicate correctly with the PS3. If I understand correctly, USB 1.1 only supports 8 byte descriptors, although on the V-USB forum there is one guy who suggests to do the following to circumvent this limit:
while (!usbInterruptIsReady()) usbPoll(); // need to wait
usbSetInterrupt((void *)&reportBuffer + 0, curGamepad->report_size);
while (!usbInterruptIsReady()) usbPoll();//need to wait
usbSetInterrupt((void *)&reportBuffer + 8, curGamepad->report_size);
I haven't tried it, but may be worth a shot.
EDIT: here is the full HID descriptor: http://wiki.ps2dev.org/ps3:hardware:...ocoldescriptor
So the open questions are:
1) what happens in those 13 bits right after the 19 buttons?
if these are just for padding, I might reduce 13 to 5 and so eliminate a "useless" byte. thus I would have 8 bytes for report id, 19 buttons + padding and 4 axes, which should be fine for v-usb; notice that the hid descriptor contradicts the table above, according to which report starts with axes and is then followed by buttons.
2) what are those 38 bytes after the XYZRz axes?
my guess is that this is where the analog buttons + motion end up, as per items 8-45 in the table I placed above
3) what are those 5 48byte blocks at the end?
no idea at all
yeah, they're just digital.
The report desciptor data is the full sixaxis report, no? Again, I spent a fair amount of time playing with that with no luck. Some of that space will be battery/connection data, and I think some of it si for identifying data that gets sent to the controller, ie will be for LED/vibration control.
good find, if that works you could just replicate the entire sixaxis HID, fill it with empty data and see if it gets recognised, which would be an advance on what I managed.Quote:
so it appears that one needs to send a report of 45 bytes in order to communicate correctly with the PS3. If I understand correctly, USB 1.1 only supports 8 byte descriptors, although on the V-USB forum there is one guy who suggests to do the following to circumvent this limit:
while (!usbInterruptIsReady()) usbPoll(); // need to wait
usbSetInterrupt((void *)&reportBuffer + 0, curGamepad->report_size);
while (!usbInterruptIsReady()) usbPoll();//need to wait
usbSetInterrupt((void *)&reportBuffer + 8, curGamepad->report_size);
I have some partial progress, now all NegCon analog buttons work.
Here is the HID descriptor:
I have commented out the pieces which I currently do not use. This is because the device is recognized only if the size implied by the descriptor equals the size of the buffer. Now, this descriptor/buffer's size is 10 bytes, thus the polling cycle becomes:Code:static uchar reportBuffer[10]; // buffer for HID output reports
PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = { // USB report descriptor
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0xa1, 0x02, // Collection (Logical)
0x85, 0x01, //report id 1
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x81, 0x03, // Input (Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
0x75, 0x01, // report size 1
0x95, 0x13, // report count 19
0x15, 0x00, //log min 0
0x25, 0x01, //log max 1
0x35, 0x00, //phy min 0
0x45, 0x01, //phy max 1
0x05, 0x09, //usage page button
0x19, 0x01, //usage min 1
0x29, 0x13, // usage max 19
0x81, 0x02, // Input (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
0x75,0x01, // Report Size............. (1)
0x95,0x0d, // Report Count............ (13)
0x06,0x00, 0xff,// Usage Page (Vendor defined 0)
0x81,0x03, // Input................... (Constant, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
0x15,0x00, // Logical Minimum......... (0)
0x26,0xff,0x00, // Logical Maximum......... (255)
0x05,0x01, // Usage Page (Generic Desktop)
0x09,0x01, // Usage (Pointer)
0xa1,0x00, // Collection (Physical)
0x75,0x08, // Report Size............. (8)
0x95,0x04, // Report Count............ (4)
0x35,0x00, // Physical Minimum........ (0)
0x46, 0xff, 0x00, // Physical Maximum........ (255)
0x09,0x30, // Usage (X)
0x09,0x31,// Usage (Y)
0x09,0x32,// Usage (Z)
0x09,0x35,// Usage (Rz)
0x81,0x02,// Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
0xc0, // End Collection
// 0x05,0x01,// Usage Page (Generic Desktop)
// 0x75,0x08, // Report Size............. (8)
// 0x95,0x27,// Report Count............ (39)
// 0x09,0x01, // Usage (Pointer)
// 0x81,0x02,// Input................... (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield)
// 0x75,0x08,// Report Size............. (8)
// 0x95,0x30,// Report Count............ (48)
// 0x09,0x01,// Usage (Pointer)
// 0x91,0x02,// Output.................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
// 0x75,0x08,// Report Size............. (8)
// 0x95,0x30,// Report Count............ (48)
// 0x09,0x01,// Usage (Pointer)
// 0xb1,0x02,// Feature................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
0xc0,// End Collection
// 0xa1,0x02,// Collection (Logical)
// 0x85,0x02,// ReportID................ (2)
// 0x75,0x08,// Report Size............. (8)
// 0x95,0x30,// Report Count............ (48)
// 0x09,0x01,// Usage (Pointer)
// 0xb1,0x02,// Feature................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
// 0xc0,// End Collection
// 0xa1,0x02,// Collection (Logical)
// 0x85,0xee,// ReportID................ (238)
// 0x75,0x08,// Report Size............. (8)
// 0x95,0x30,// Report Count............ (48)
// 0x09,0x01,// Usage (Pointer)
// 0xb1,0x02,// Feature................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
// 0xc0,// End Collection
// 0xa1,0x02,// Collection (Logical)
// 0x85,0xef,// ReportID................ (239)
// 0x75,0x08,// Report Size............. (8)
// 0x95,0x30,// Report Count............ (48)
// 0x09,0x01,// Usage (Pointer)
// 0xb1,0x02,// Feature................. (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield)
// 0xc0,// End Collection
0xc0,// End Collection
};
if the last piece of buffer to be sent is 8 bytes as well, then it is necessary to send a third interrupt with length zero, which signals "end of the buffer". If length is less than 8, this is implied.Code:for(;;){ // main event loop
while (!usbInterruptIsReady()){
wdt_reset();
usbPoll();
}
get_data();
make_sense();
usbSetInterrupt((void *)&reportBuffer + 0, 8);
while (!usbInterruptIsReady()){
wdt_reset();
usbPoll();
}
usbSetInterrupt((void *)&reportBuffer + 8, 2);
}
Next steps:
- try to work with the whole descriptor, although I am afraid this might lead to speed issues
- correctly assign buttons
- address the damn PS button situation. apparently the following is required:
Not sure how this is supposed to happen with v-usb, thoughCode:/*
* Series of bytes that appear in control packets right after the HID
* descriptor is sent to the host. They where discovered by tracing output
* from a Madcatz SF4 Joystick. Sending these bytes makes the PS button work.
*/
static uint8_t PROGMEM magic_init_bytes[] = {
0x21, 0x26, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00
};
let me know if it works for you
Cheers
Chris
unfortunately still unable to address the trigger buttons :(
found these guys:
http://bencao74.blogspot.com/search/...20Strike%20PCB
who claim to have full ps3 support on an atmega8. I have tried to adapt their code to ps3negcon's design, but without success so far.
Adapting the code from this site:
http://bencao74.blogspot.com/search/...20Strike%20PCB
I was able to get PS button and all analog buttons to work flawlessly on the PS3NegCon hardware. I am not sure what they have done differently, but it appears it is not just an issue of HID descriptor, since the usbdrv files have also been modified. But, hey, it works!
sounds good
That's absolutely brilliant, well done!
my apologies for bumping a rather old topic.
just had a idea; would it be feasible to create a kickstarter project to build a small run of PS3 Negcons of a high build quality. I'm sure there's a good number of people around here who would still like to own one (myself included).
any thoughts?
Element42 ended up with the best solution, with a amazing converter he sent me. It has dials for dead zone, steering sensitivity, AND built in dead zone adjustment ( this makes our turning perfect). It also has a dpad right/ a button swap ( awesome for brs), an analog p down/ dpad up down swap ( necessary for navigating menus, and one other switch that I forgot what it does. A great piece, but make him a good offer to make it worth his time. I got two!
On a side note, I purchased a third party Bluetooth controller, and I think i can make a Bluetooth Negcon out of it. I wish I could figure out that built in dead zone though, then I could make a really nice one that would even work on the pspgo
Cheers for the update JJ. I've just pm'd E42. I hope you manage to sort out your new controller :) Best wishes.
Hi
Sorry to bring from the dead this thread. :)
Are you still using this adapter? Is it compatible with last ps3 firmware?
I'm pretty sure Jabber is still using it.
From what I remember of the project, it involved making a separate interface box that had small dip switches.
It all started back here.
http://www.wipeoutzone.com/forum/sho...Can-it-be-done
Yes, but .I haven't played in a while. It didn't work on vita tv, as I cannot update the firmware or lose 2048 on tv (I think some USB controllers work on vita). I used a Bluetooth negcon for it, but the buttons are off, and there is a dead zone, once again firmware issue. I have some ideas though I'll get to eventually
YES !!! Been playing Wipeout HD all day on and off with a Cronus max plus with x-aim plug in. I am using a combined script which has sorted out the dead zone and shortened the range of twist. Playing feels perfect just like on the ps1. I am suddenly winning with ease, I shall have to go up a level !
Wanted to buy a cronusmax plus today, but GameStop was out. I'll have to pick one up. You are using this on the PS3?
Yes on the ps3. Has given the game a much better feel.
Do you have a ps tv to try it on?
Hey all,
I know I’m kinda late to join the party but I’ve come up with an excellent negcon converter for the ps3.
Required assets are an Arduino Uno board, a resistor, some wires and preferably a controller socket.
The steps I followed are all written down in this article, http://tecnomente.altervista.org/201...-with-arduino/
The method uses Unojoy to make the Arduino behave as a joystick and Ps2x_lib to read ps1/2 controller data.
It didn’t work properly at first, some modifications to Ps2x_lib were required to retreive clear negcon data.
After that I added code to minimize the deadzone, reduce the maximum twist and use key combo’s for ie. the Home button.
It’s all working great, been racing like it’s 1996 and I’m having a blast. So I like to share it here.
The modified Ps2x_lib and my arduino/negcon sourcecode is available on github:
https://github.com/phaseIV/arduino-negcon-ps3
Enjoy!
Awesome news PhaseIV, sounds like it works really well. Would love one of those.
I'm just wondering if it can work with the Omega Pack, and get it to work with Formula Fusion
Hi everyone, I've been following this thread with interest & signed up to ask: for those that have succeeded in getting the NeGCon to work on PS3- have you tested it with the original PSOne Wipeout trilogy on the PS3?
I have searched & all the references seem to be to HD. You would have to play 2097/XL & 3/SE from original PS Disc, but the original game is available from PSN.
If you have tested it, could you I trouble you to advise which game & the hack you've implemented, whether it did recognise/register the controller as a NeGCon, and allow you to calibrate via the Options as I recall those games did on PSOne?
The reason I ask is I've returned to Playstation & WipeOut after a 20 year retirement from Racing/Gaming, and am re-introducing myself via those games on PS3. I'm becoming proficient again with the old-school d-pad driving technique- though I confess upgrading from DS3 to DS4 helped alot ;)- but naturally it's making me miss the quality of control & fun using a NeGCon. (Also for Destruction Derby, another original Psygnosis Launch title :)